mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-AVR USART Verbindung


Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche verzweifelt eine USART Verbindung zwischen einem ATmega8
und einem ATmega16 herzustellen. Ich bekomme hierbei nur Datenmüll:(
Leider habe ich bisher keinen passenden Eintrag im Forum gefunden:

Wie muss ich eigentlich die beiden AVRs miteinander verbinden?
Einfach RxD und TxD über Kreuz anschließen, oder brauche ich da einen
Widerstand/Kondensator, etc dazwischen?

Als Taktquelle benutze ich für beide AVRs denselben externen 
RC-Oszillator mit 12MHz. Welche Baudrate würdet ihr nehmen?

Der ATmega16 habe mit mittels AVR-USB USB tauglich gemacht, der ATmega8
soll mittels Funk zu einem Roboter kommunizieren.
Nun möchte ich eben Daten zwischen diesen beiden AVRs austauschen.
Ist SPI oder TWI eventuell besser geeignet als UART?
Ganz auf den ATmega8 zu verzichten scheint ja nicht zu gehen, wegen den 
USB Timings.

Vielen Dank für Eure Hilfe!

Fabian

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian wrote:
> Wie muss ich eigentlich die beiden AVRs miteinander verbinden?
> Einfach RxD und TxD über Kreuz anschließen, oder brauche ich da einen
> Widerstand/Kondensator, etc dazwischen?

Genau, Einfach RxD an TxD jeweils. Sonst nichts.

> Als Taktquelle benutze ich für beide AVRs denselben externen
> RC-Oszillator mit 12MHz. Welche Baudrate würdet ihr nehmen?

RC Oszillator ist schlecht, da die Baudraten beider Controller nur etwa 
3% auseinander liegen dürfen.

> Ist SPI oder TWI eventuell besser geeignet als UART?
Nicht unbedingt. SPI ist nützlich bei mehreren Slaves und TWI im Falle 
einer Bus-Struktur.

Was genau ist denn das Problem? Ich würde mal versuchen an beide 
Controller jeweils ein Quarz oder Quarzoszillator (die eine hinreichende 
Genauigkeit haben) anzuschließen.

Die Baudrate ist eigentlich egal, solange sie auf beiden Geräten die 
Gleiche ist. Bei höherer Baudrate hast du natürlich auch einen höheren 
Datendurchsatz.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnelle Antwort!

der RC-Oszillator dürfte ja nicht das Problem sein,
denn es ist das selbe  Bauteil mit 2 Leitungen zu den AVRs.

Es kommt Buchstabensalat an, obwohl ich im Atmel AVR Studio
die F_CPU richtig angepasst habe. Mein Problem ist, dass ich nicht
genau weiß, wo ich den Fehler suchen soll.
Der Code für USART ist aus dem Atmel Datasheet.
Ich den ATmega8 so programmiert, dass er immer ABCD sendet.
Der andere AVR speichert die ersten 32 empfangenen Byte im EEPROM, den 
ich anschließend wieder im AVR Studio auslese. Hier steht Müll drin.

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal deinen Code, sonst müssen wieder alle ihre Glaskugeln 
holen. Und die sind doch schon in unzähligen anderen Threads im Einsatz 
;)

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier im Anhang nun den Code und den EEPROM Auszug, sowie das Makefile.

Autor: Fabian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ups, hatte wohl nicht geklappt, sorry.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade herausgefunden, dass es mit einer Baudrate von 12000
funktioniert.
Was ist das für ein seltsames Problem?
Ist es hardwaretechnisch? Vielleicht ein Kondensator irgendwo zuviel 
oder zu wenig?

Autor: Maik Fox (sabuty) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian wrote:
> der RC-Oszillator dürfte ja nicht das Problem sein,
> denn es ist das selbe  Bauteil mit 2 Leitungen zu den AVRs.

d.h. einmal das RC-Glied, das gleichzeitig an 2 AVRs hängt? Sowas 
funktioniert?

Entschuldigt mein Unwissen... aber ich finde das seltsam.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso, sollte das nicht gehen?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian wrote:
> wieso, sollte das nicht gehen?

Weil der AVR auch teilweise den RC Oszillator treiben muss. Und zwei 
Ausgänge gegeneinander einen Kurzschluss ergeben (können).

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Als Taktquelle benutze ich für beide AVRs denselben externen
>RC-Oszillator mit 12MHz.

Das RC-Glied, das Du an einen AVR anschließt, ist kein RC-Oszillator, 
sondern nur ein Teil davon, nämlich der, der die Frequenz bestimmt.  Der 
andere Teil des Oszillators, der invertierende Verstärker, befindet sich 
im µC integriert "hinter" dessen beiden Clock-Pins.

Wenn Du ein RC-Glied an zwei µCs anschließt, dann hast Du nicht einen 
Oszillator für beide µCs, sondern zwei unabhängige Oszillatorverstärker, 
die beide gleichzeitig ein schwingungsfähiges Etwas zum Schwingen 
bringen wollen.  Sollte Dein derartiger Aufbau trotzdem funktionieren, 
ist es Zufall.

Eine einfache Lösung wäre, als Taktquelle einen 12 MHz-Quarzoszillator 
(d. h. keinen Quarz, sondern einen Quarzoszillator!) zu nehmen, und 
damit beide Controller anzusteuern.  Alternative Möglichkeit: Neuere 
Controller, z. B.  ATmega48/88/168, können den Output ihres Oszillators 
auf einen bestimmten Pin ("CLKO") schalten (aktivierbar per Fuse).  Über 
diesen belastbaren Ausgang kann man dann problemlos irgendwelche 
Peripherie oder einen Zweit-Controller takten.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah,
ich hatte mich wohl im Ausdruck geirrt, kenn mich mit dem Elektronikzeug 
noch nicht so genau aus ;) Ja, ich habe einen Quarzoszillator eingebaut, 
der beide AVRs betreibt. Hierbei dürfte es doch keine Probleme geben 
oder?

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.