www.mikrocontroller.net

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


Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter (Gast)
Datum:

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

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)...

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.