Ich habe ein Setup, das mit UART zwischen PC (Windows) und Atmega2560 kommuniziert. Auf PC-Seite verwende ich Pyserial. Vom PC sende ich Byte für Byte einen Textabschnitt an Atmega2560. Die UART-Konfiguration ist: 2400 Baudrate; 8-Bit-Daten; 1 Stoppbit; Keine Parität; Der pyserielle Code lautet wie folgt:
string = "some sample text" strobe = serial.Serial('com3',baudrate = 2400) for x in string: strobe.write(x) sleep(0.001)
Ich habe ein Oszilloskop verwendet, um das UART-Signal am RX-Pin der MCU zu überprüfen, und festgestellt, dass zwischen zwei Datenrahmen eine Lücke von 15 ms bestand. Meine Fragen sind:
Außerdem sende ich Daten von der MCU zum PC zurück. Als ich den TX-Pin der MCU mit dem Oszilloskop sondierte, gab es eine vernachlässigbare Verzögerung zwischen den Datenframes. Ich glaube, das liegt daran, dass ich Interrupts zum Senden auf der MCU verwende.
Ich füge hier Atmega2560-Code hinzu:
volatile uint16_t address; volatile char incoming; uint8_t in_buffer[2000]; void eeprom_write(uint16_t add,uint8_t val){ while(((EECR)&(0x02)) != 0);//EEPE bit cli(); EEAR = add; EEDR = val; EECR |= 0x04;//EEMPE EECR |= 0x02;//EEPE sei(); } ISR(USART0_RX_vect){ incoming = UDR0; in_buffer[address]=incoming; address++; } int main(void){ /*initialization of uart*/ address = 0; incoming = 1; while(incoming!='#'){} for(uint16_t i = 0 ;i<address;i++) eeprom_write(i,in_buffer[i]); }
Das Beenden von Daten wird durch '#' angezeigt.
2400 Baud sind 240 Zeichen (Oktette) pro Sekunde bei 10 Bit pro Frame (was dem Standard "8N1" entspricht). Eine Millisekunde lang zu schlafen wird den Abstand nicht stark beeinflussen, sicherlich nicht auf vorhersehbare Weise, da jedes Zeichen 4 ms zum Senden benötigt.
Es könnte sein, dass der Python-Schlaf nicht so kurz wie 1 ms schlafen kann,
Wenn Sie die Daten überwachen möchten, benötigen Sie dennoch ein Oszilloskop (oder verbinden Sie die Datenleitung über einen Widerstand mit einem Soundkarteneingang, machen Sie eine Aufnahme und sehen Sie sie in einem Sounddatei-Editor an - die Spannung wird wahrscheinlich etwas schwanken, aber Sie sollten die Kanten jedes Bits deutlich sehen.)
Könnte es etwas geben, das Ihren Mikrocontroller so beschäftigt, dass er nicht 240 Zeichen pro Sekunde verarbeiten kann?
Edgar Braun
Shubham Sharma
Edgar Braun
Shubham Sharma
Edgar Braun
SamGibson
Shubham Sharma
Chris Stratton
mkeith
mkeith
Shubham Sharma