Kısa:
ATMEGA16U2 ürün yazılımına bakma ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) Bunu, ayarları yapılandırdığınızda / değiştirdiğinizde USB benzetimli seri bağlantı noktası, USART sıfırlanır. Bu, Arduino Seri Monitörünü açtığınızda bile gerçekleşir (seri hızı yapılandırmalıdır, vb.). Bu ani artışa neden olur.
Uzun:
İşleve bakın:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Orada bazı satırlardan sonra kayıtlarını sıfırlayarak USART'ı sıfırladığını göreceksiniz:
/* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */
UCSR1B = 0;
UCSR1A = 0;
UCSR1C = 0;
Geçerli ATMEGA16U2 veri sayfasının 168. sayfasında, UCSR1B'nin bit 3'ünü (TXEN1) ayarlayarak vericiyi etkinleştirerek normal bağlantı noktası çalışmasını geçersiz kıldığını göreceksiniz (yani çıktı olur). Veri sayfasını alıntılama:
Bu bitin bire yazılması USART Vericisini etkinleştirir. Verici, etkinleştirildiğinde TxDn pimi için normal bağlantı noktası çalışmasını geçersiz kılar. Vericinin devre dışı bırakılması (TXENn'i sıfıra yazmak), devam eden ve bekleyen iletiler tamamlanana kadar, yani İletim Kaydırma Kaydı ve İletim Tampon Kaydı iletilecek verileri içermedikçe etkili olmayacaktır. Devre dışı bırakıldığında, Verici artık TxDn bağlantı noktasını geçersiz kılmaz.
Bu nedenle, yazarak UCSR1B = 0;
artık giriş görevi görecek olan TXD1 pimini geçersiz kılmazsınız.
ATMEGA16U2 TXD, ATSAM3X8E'nin RX hattına bağlıdır. Normal çalışmada, UART etkinken, veri iletilmezse bu hat yüksek kalır. UART'ı devre dışı bırakırsanız, söz konusu satır 1'e daha fazla sürücü olmaz. Başlatma kodu bu pimdeki çekme işlemini ayarlamadığından (ve çıkış olarak yapılandırılmadığından), pim kayan bir giriş haline gelir ve herhangi bir sızıntı GND veya hatta probunuzun giriş empedansı (pin ve GND arasındadır), mantık seviyesini yavaşça 0'a getirecektir.
Bu sorunu geçersiz kılmak için aşağıdakilerden birini yapmalısınız: 1) Bu PIN kodunu ÇIKIŞ olarak 1 değerine sahip olarak ayarlayarak ATMEGA16U2 sabit yazılımını değiştirin. 2) Bu pim üzerindeki çekmeyi etkinleştirerek ATMEGA16U2 sabit yazılımını değiştirin. 3) (önerilen) ATSAM3X8E üzerindeki RX hattındaki pull-up'ı etkinleştirin.