Dahili çekme direnci ile bir ilgisi olabilir. SAM3X / A veri sayfasına göre,
G / Ç hattının konfigürasyonuna bakılmaksızın, çekme direncinin kontrolü mümkündür.
Sıfırlamadan sonra, tüm pull-up'lar etkinleştirilir.
Bulduğunuz tüm içerme dosyalarını incelerseniz:
../Arduino/hardware/arduino/samd/cores/arduino/wiring_digtal.c
124. satır pinMode(uint32_t ulPin, uint32_t ulMode)
işlevi tanımlar . INPUT vs INPUT_PULLUP vs OUTPUT için anahtar / vaka bildirimini incelediğinizde aşağıdakileri görürsünüz:
- INPUT, bir kayıt ayarlar
reg = PORT_PINCFG_INEN
.
- INPUT_PULLUP,
reg = (PORT_PINCFG_INEN | PORT_PINCFG_PULLEN)
- OUTPUT, bir kayıt ayarlar
reg &= ~PORT_PINCFG_INEN
.
Her durumda 'kayıt' aynıdır. Hayatım boyunca PORT_PINCFG_INEN veya PORT_PINCFG_PULLEN'in hangi değer olarak tanımlandığını bulamıyorum, ancak şüphesiz sadece 8 bit maskeler ('kayıt' atandıklarında uint8_t'ye yönlendiriliyorlar). Bu nedenle, çekme biti gibi giriş / çıkış hangi bit kontrolleri aktif olduğunda varsayılabilir. Örneğin:
PORT_PINCFG_INEN = b'00000001';
PORT_PINCFG_PULLEN = b'00000010';
~PORT_PINCFG_INEN = b'11111110';
Sıfırlamadan sonra pull-up'lar etkinleştirilirse, sıfırlamada şunu söyleyebiliriz:
reg = b'xxxxxx1x';
Yukarıdaki (3) noktası, talimatın:
reg = b'xxxxxx1x' & 'b11111110';
so
reg = b'xxxxxx10'; // pull-up is enabled!
Bu nedenle, başka bir şeyden önce pinMode (X, OUTPUT) öğesini çağırırsanız , çekme direnci etkin hale gelirsiniz. Pimin bir girişe ayarlanması, çekme etkinleştirme bitini temizler, bundan sonra pimi bir çıkışa ayarlayabilirsiniz ve bit temiz kalır.
Ancak, bütün tartışma yaşanan Eğer pinMode () aramazsam basit gerçeği ile düşer hiç sorun oluşmaz ...
SPI.setDataMode(10, SPI_MODE1);
? Ayrıcabegin()
setDataMode çağrıları olarak sadece ikincisi kullanışlıdır . Baktığımızda kaynak kodu (Ben ARM bilmiyorum ama) sizin belirleyeceğiniz pimini değiştirmez SPI kütüphanesi gibi görünüyor.