Kann man über USART Werte vom EEProm auslesen und schreiben

Gast #334906
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
Gast #334907
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...
Gast #334909
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.
Gast #334910
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
Gast #334911
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
Gast #334912
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)...
Gast #334913
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.
#334914
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.

...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.