Hallo, ich bin nicht mehr ganz Neuling auf dem Gebiet der AVR Programmierung. Ich beschäftige mich mit dem ATMega8. Meine Frage nun: Ist es möglich über die USART-Schnittstelle (Rx und Tx) des Mega8 Werte vom internen EEProm zu lesen und auch wieder zu schreiben? Mir ist (bisher) dazu nicht eingefallen wie ich das machen soll. Über die Beschreibung der prinzipiellen Methode und evtl. Programm-Auszüge wäre ich sehr dankbar. Wenn möglich in AVR-Assembler. Vielen Dank schon mal für nützliche Tipps. Gruß Jan
Einfacher Ablauf fürs Ausgeben: Byte aus dem EEPROM in einer Variable zwischenspeichern. Variable an UART übergeben. Einfacher Ablauf fürs Schreiben: Byte von UART in Variable zwischenspeichern Variable in EEPROM schreiben. Das sollte sogar mit den im Datenblatt beschriebenen Funktionen möglich sein...
Geht ohne Probleme sehr komfortabel mit CodeVision Compiler. Wenn dein Project nicht so gross ist, lang ja vielleicht die freie Demoversin.
warum sollte das nicht gehen? der avr empfängt die daten (erst ein kommando-word und dann ein eventuelles datenword falls geschrieben wird) und schreibt/liest dann im eeprom und gibt, falls gelesen werden soll den gelesenen wert über die tx leitung aus.
Hallo, ich meinte nur, dass wenn der ATMega8 momentan ein Programm ausführt, und ich ihm dann vom PC aus während seines laufenden Programms ein Byte sende, ob es dann einen Interrupt gibt, und er das Byte empfängt. Welche Leitungen außer Tx, Rx und GND muß ich dann hier noch anschließen? Und noch eine Frage zu Tx und Rx: Kann ich über diese Leitungen das Programm im Flash-Speicher eventuell neu beschreiben? Wenn ja, welche Software würde ich hierfür brauchen? Vielen Dank für die Antworten. Gruß Jan
Noch ein Nachtrag: Ich glaube mal irgendwo gelesen zu haben, dass man mit dem Bootloader über Tx und Rx das Programm neu in den Flash programmieren kann. Vielen Dank für weitere Hilfen. Gruß Jan
Interrupts werden ausgelöst, wenn sie freigegeben sind. Dazu gibt es verschiedene Control-Register. Es kommt auf dein Programm an, ob es auf Interrupts reagiert, oder die Interrupt-Flags in regelmässigen Abständen abfragt (poll-Betrieb). Im Falle des UART wird bei einem empfangenen Byte auf jeden Fall das RXC-Flag gesetzt. Ob du per Interrupt darauf reagierst, oder es abfragst ist dir überlassen. Für eine einfache Kommunikation zwischen PC und Mikrocontroller reichen die drei Leitungen. Das mit dem Bootloader hast du richtig gelesen. Das meiste davon steht aber auch im Datenblatt (Abschnitt U(S)ART)...
@Jan: Der Bootloader ist eigentlich nur ein von Dir selbstgeschriebenes Programm, das in einem bestimmten Speicherbereich liegt (Bootloader-Sektion, s.Datenblatt). Du kannst selbst frei wählen, mit welcher Schnittstelle (RS232, I²C, SPI usw.) Du mit dem Controller Daten austauschst, die in den Flash geschrieben werden sollen.
Jan, wenn ich dich richtig verstanden habe, möchtest du vom PC aus auf das EEPROM zugreifen können, ohne eine weitere Aktion (z.B. Tastendruck) am AVR vornehmen zu müssen. Das Geht. Aber dazu musst du den PC (als Eingabegerät) mit in dein AVR-Programm einbinden. Du musst also UART aktivieren und auf eintreffende Bytes entsprechend reagieren. Das bedeutet, dass du ein Protokoll definieren musst, dass das Format der entsprechenden Kommandos (liesEEP, schreibEEP), der Adressen und der Daten festlegt. Das erfordert allerdings einen halbwegs effizienten Programmierstil, bei dem ein Timer das gesamte Programm synchronisiert und die MCU nach getaner Arbeit in den Sleep geschickt wird. Warteschleifen sollte es da nicht geben, sind aufgrund der Timer-Synchronisation auch nicht nötig... Empfängt UART ein Byte, so wird der entsprechende Interrupt ausgelöst, in dessen ISR man dieses Byte in einen kleinen Puffer (SRAM) schieben und zusammen mit den bisher empfangenen Bytes auswerten kann. Hat man im Puffer eine gültige Kommando-Sequenz, so kann man ein Jobflag setzen, worauf die Mainloop den Job erledigt (Byte in EEP schreiben, oder Byte aus EEP holen und an UART übergeben). Da das EEP beim Schreiben nicht unendlich schnell ist, solltest du schon am PC absichern, dass das Timing eingehalten wird. Zum Bootlader äußere ich mich nicht weiter, das ist eine völlig andere Geschichte, mit der ich mich noch nicht intensiv beschäftigt habe. Aber hier im Forum, auf der ATMEL-HP (Appnotes) sowie im Wiki findest du vermutlich genügend Informationen darüber. ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.