Gast
#956672
Ich verwende einen ATMega32 und das EEPROM AT24C512B sowie
den Parallel Port.
Nun sollen die über den Parallel Port geschickten Daten vom
Mikrocontroller auf ein EEPROM geschrieben werden. Diese sollen
später bei Knopfdruck über Usart ausgeben werden.
Werden Daten gedruckt wird ein Interrupt ausgelöst und die Daten auf das
EEPROM gespeichert.
Nun habe ich bei genauerem Hinsehen festgestellt, dass die
Daten bei Knopdruck nicht korrekt ausgegeben werden.
Buchstabe werden verschluckt, andere doppelt geschrieben.
Die "Knopf-" Ausgabe-Routine ist angehängt.
Die falsche Ausgabe kann ja mehrere Gründe haben:
1.) Es gibt Probleme mit dem Intterrupt
2.) Die richtigen Daten liegen noch nicht an, wenn bereits aufs EEPROM
geschrieben wird.
(Was eigentlich nicht der Fall sein sollte, da der Interrupt erst
ausgelöst werden soll, nachdem die richtigen Daten anliegen. So ist es
jedenfalls für den Parallel Port beschrieben.)
3.) Es gibt an sich Probleme beim Schreibvorgang aufs EEPROM
3.) Uart-Probleme
Nun habe ich mal folgendes ausprobiert:
Ich lasse die Daten nicht auf EEPROM schreiben, sondern gebe sie direkt
auf dem Uart aus. Zunächst einmal es werden keine Buchstaben doppelt
geschrieben oder verschluckt. Aber komischerweise wird mein Dokument
entweder ganz oder nur teilweise über den Uart ausgeben.
Liegt es nun an der Uart-Schnittstelle? Weiß jemand Rat?
Wie kann ich das oben besagte Problem eingrenzen?
Auszug aus dem Quelltext:
ISR (INT2_vect){ // STROBE impulse
PRINTER_PORT |= (1<<BUSY); // set BUSY
send_to_usart(DATA);
PRINTER_PORT &= ~(1<<BUSY);
} // ISR end
void send_to_usart(unsigned char data) {
while (!(UCSRA & (1<<UDRE))); // wait until sending is possible
// --> UART Data Register Empty UDRE=1;
UDR = data;
/* The Uart Data Register is empty, the previous assignment was
completed. Writes the sign "data" on the interface. */
}