www.mikrocontroller.net

Forum: Compiler & IDEs externe Baudrate messen mit Atmega164p


Autor: Spaceinvader (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Momentan habe ich ein Projekt am lauffen, das mit Hilfe eines ATmega164 
eine Baudrate eines externen PC's messen sollte.

Ich habe das RS232 Signal über einen Pegelwandler (MAX232) an den int0 
Eingang des AVR's angeschlossen. Meine Idee ist, dass ich ein bestimmtes 
Zeichen über das Hyperterminal unter Windows sende, und sobalt dieses 
Zeichen über RS232 am int0 Eingang des AVR anliegt, einen Timer 
starte(also auf die Negative Flanke) und die Uebertragungszeit eines 
Baudes messe. Danach kann ich die ermittelte Zeit auf eine Sekunde 
hochrechen, um auf die Baud/Sekunde zu kommen.
Schlussendlich soll geprüft werden, ob die Baudrate des externen PC's in 
einer gewissen Toleranz liegt. Als PASS/FAIL Anzeige steuere ich ein 
grünes bzw. rotes LED an. Programmiert wird das Ganze in C.

Zum Problem: Ich habe keine Ahnung wie ich die Interrupt und Timer 
Funktion des AVR's nutze. Ich habe mich bereits in das Thema 
Timer/Interrupt eingelesen, werde aber daraus nicht schlau.
Ausserdem weiss ich nicht welches Zeichen sich am besten für die 
Uebertragung eignet, idealerweise sollte es ja aus bloss zwei Flanken 
bestehen. Ich sollte möglichst rasch mit dem Projekt fertig werden.

Leider habe ich praktisch keine Erfahrung was das Programmieren von 
AVR's mit WinAVR angeht.

Ich wäre euch sehr dankbar, wenn ihr mir mit etwas Code nachhelfen 
könnt.

MFG Nick

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest Dir mal den Autobaud-Mechanismus ansehen, der in Modems 
implementiert ist - bei dem wird die Zeichenfolge AT an das Modem 
gesandt, und es kann daran die Baudrate erkennen.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von Philips für den 80x51 gabs da mal was.
Habs auch gefunden:

http://diakom.com.ru/el/elfirms/appnotes/Philips/an447.pdf

Prinzip: Ausmessen und Tablle

avr

Autor: Spaceinvader (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die raschen Antworten!

Der oben genannten Autobaud-Mechanismus bringt mir aber nicht wirklich 
was, da ich ja nicht über UART kommunizieren will, oder seh ich das 
falsch??

Das Philips Datenblatt sieht interessant aus, ich versetehe es zwar 
nicht ganz (da Assembler), aber sehe die Grundstruktur dahinter.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spaceinvader schrieb:
> Der oben genannten Autobaud-Mechanismus bringt mir aber nicht wirklich
> was, da ich ja nicht über UART kommunizieren will, oder seh ich das
> falsch??

Und wobei bitte möchtest Du eine Baudrate bestimmen, wenn nicht bei 
einer Kommunikation über UARTs?

Autor: axelr. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ICP als Stichwort und schicken tust Du große U's. (0x55) ;))

Autor: Spaceinvader (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei mir geht es nicht um die Kommunikation, sondern nur um die Baudrate 
des Empfangenen Signals. Was nach der Messung damit geschieht ist egal. 
Ich greiffe das Signal von einer Loopback-Schlauffe ab.

Autor: Baud-Rater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Einwand von Spaceinvader ist in soweit richtig, als beim
Ausmessen der Baudrate der interne Uart nicht verwendet wird.

Im Prinzip läuft das Ganze darauf hinaus, daß z.B: beim Zeichen
"Blank" (0x20) die High-Zeit des Bits der "2" gemessen wird.

RxD-Pin per Polling messen (bei Abgeschaltetem Interreupt!!!)

Das Blank muß von der Gegenseite kommen. Statt dem Blank geht
es auch mit der 0x30, also der "0", dann ist die High-Zeit zwei Bit 
breit.

Die "Breite" des Bits oder der Bits in Zyklen zu messen und dann
den Teilerfaktor für den Uart zu bestimmen hat den Vorteil
daß die aktuelle Taktfrequenz des µP egal ist, sofern sich
ein passender Teilerfaktor ermitteln läßt.

Mit dieser Variante funktionieren sogar die AVRs mit internem
Oszillator, klar mit Bauraten Quarz ist es genauer, aber es geht!
(Eigene Erfahrungen)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spaceinvader schrieb:
> bei mir geht es nicht um die Kommunikation, sondern nur um die Baudrate
> des Empfangenen Signals. Was nach der Messung damit geschieht ist egal.
> Ich greiffe das Signal von einer Loopback-Schlauffe ab.

Nun gut, das verändert die Situation etwas.
Vorausgesetzt, daß das Signal störungsfrei und mit konstanter Baudrate 
vorliegt, genügt es, die kürzeste auftretende Zeit zwischen einer 
steigenden und einer fallenden Flanke bzw. umgekehrt zu messen. Das ist 
die Zeit, die für die Übertragung eines Bits benötigt wird, und das ist 
der Kehrwert der Baudrate.

Autor: Christian F. (cmf) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine schon fertige Bibliothek habe ich hier gefunden: 
https://github.com/fantachip/avr-baudrate

Funktioniert wunderbar.

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.