कम:
ATMEGA16U2 फ़र्मवेयर ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial-Arduino-usbserial.c ) को देखते हुए मुझे लगता है कि जब आप कॉन्फ़िगर / परिवर्तन सेटिंग्स बदलते हैं। USB सीरियल सीरियल पोर्ट का उपयोग करता है, USART को रीसेट किया जाता है। यह तब भी होता है जब आप Arduino Serial Monitor खोलते हैं (इसे क्रमिक गति, आदि को कॉन्फ़िगर करना होगा)। यह आपके स्पाइक का कारण बनता है।
लंबा:
फ़ंक्शन को देखें:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
आप देखेंगे कि कुछ पंक्तियों के बाद, यह अपने रजिस्टरों को शून्य करके USART को रीसेट करता है:
/* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */
UCSR1B = 0;
UCSR1A = 0;
UCSR1C = 0;
वर्तमान ATMEGA16U2 डेटाशीट के पृष्ठ 168 पर, आप पाएंगे कि, UCSR1B के बिट 3 (TXEN1) को सेट करके, आप सामान्य पोर्ट ऑपरेशन (यानी यह आउटपुट हो जाता है) को ओवरराइड करके, ट्रांसमीटर को सक्षम करते हैं। डेटाशीट का हवाला देते हुए:
इस बिट को लिखने से USART ट्रांसमीटर सक्षम होता है। जब सक्षम हो तो ट्रांसमीटर TxDn पिन के लिए सामान्य पोर्ट ऑपरेशन को ओवरराइड करेगा। ट्रांसमीटर को निष्क्रिय करना (TXENn को शून्य लिखना) तब तक प्रभावी नहीं होगा, जब तक कि चल रहे और लंबित प्रसारण पूरे न हो जाएं, यानी जब Transmit Shift Register और Transmit Buffer Register में संचारित होने के लिए डेटा नहीं होगा। अक्षम होने पर, ट्रांसमीटर अब TxDn पोर्ट को ओवरराइड नहीं करेगा।
इसलिए, UCSR1B = 0;
आपको लिखकर अब TXD1 पिन को ओवरराइड नहीं करना चाहिए, जो इनपुट के रूप में कार्य करेगा।
ATMEGA16U2 TXD ATSAM3X8E की RX लाइन से जुड़ा है। सामान्य ऑपरेशन में, UART सक्षम होने के साथ, यदि कोई डेटा प्रसारित नहीं किया जा रहा है, तो वह रेखा उच्च रहती है। यदि आप UART को अक्षम करते हैं, तो वह विशेष पंक्ति 1 से अधिक चालक नहीं है। चूंकि आरंभीकरण कोड उस पिन पर पुल-अप सेट नहीं करता है (और न ही इसे आउटपुट के रूप में कॉन्फ़िगर किया गया है), पिन एक फ्लोटिंग इनपुट बन जाता है, और कोई भी रिसाव जीएनडी या यहां तक कि आपकी जांच का इनपुट प्रतिबाधा (जो आपके पिन और जीएनडी के बीच है), धीरे-धीरे तर्क स्तर को 0 पर लाएगा।
इस समस्या को ओवरराइड करने के लिए, आपको या तो होना चाहिए: 1) ATMEGA16U2 फर्मवेयर को संशोधित करें, उस पिन को OUTPUT के रूप में सेट करके, मूल्य 1. 2 के साथ) उस पिन पर पुल-अप को सक्षम करके ATMEGA16U2 फर्मवेयर को संशोधित करें। 3) (सुझाव) ATSAM3X8E पर RX लाइन पर पुल-अप सक्षम करें।