Forum: Mikrocontroller und Digitale Elektronik Kann man über USART Werte vom EEProm auslesen und schreiben


von Jan Purrucker (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

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...

von Peter (Gast)


Lesenswert?

Geht ohne Probleme sehr komfortabel mit CodeVision Compiler. Wenn dein
Project nicht so gross ist, lang ja vielleicht die freie Demoversin.

von Lupin (Gast)


Lesenswert?

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.

von Jan Purrucker (Gast)


Lesenswert?

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

von Jan Purrucker (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

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)...

von thkais (Gast)


Lesenswert?

@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.

von Hannes L. (hannes)


Lesenswert?

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
Noch kein Account? Hier anmelden.