Serielle Daten einlesen

Gast #475954
Lesenswert?

Hallöchen !

Sagt mal, wenn man manuell serielle Daten einlesen und verarbeiten 
möchte, wie macht man das am besten ?

So in etwa ?

Die Daten kommen mit einer Frequenz von 1200 Baud.

Dann könnte ich ja mittels Timer alle 833us den Pin abfragen was gerade 
anliegt. Oder ich messe bei jeden Flankenwechsel die Dauer des Signals 
darüber kann ich dann errechnen ob es nun gerade als Bsp. eine "1" oder 
mehrere "1" waren.

Wie geht denn die serielle Schnittstelle mit der Prüfung und 
Verarbeitung um ?


Leider hab ich ein Datenformat das jeweils immer aus 32 Bit besteht. Und 
ich weiß nicht recht weiter wie ich das mannuell verarbeiten soll.

Habt ihr ein paar Anregungen ?

Gruß

Stefan
Gast #475995
Lesenswert?

ATMEL hat 'ne Appnote 'Interrupt driven software USART', da machen die 
das auch mit dem Compare-match-Interrupt.
Habe das grade mit 16 bit in C realisiert, funktioniert prima!
Musst nur drauf achten dass jedes neue Wort den Timer neu 
synchronisiert, 32 bit sind 'ne recht lange Zeit. Da muss der Zeitpunkt 
der Abtastung (Mitte des Bits) recht genau sein (kleiner Timing-Fehler).
Ach ja.. das erste Bit darf natürlich nur die halbe Zeit (OCRxx) kriegen 
um die Mitte des Bits zu erwischen.
(Firma: TravelRec.) Persönliche Seite #476031
Lesenswert?

>Ach ja.. das erste Bit darf natürlich nur die halbe Zeit (OCRxx) kriegen
>um die Mitte des Bits zu erwischen.

Das erste Bit ist das Startbit, das ist immer 0. Beim Startbit kommt es 
nur darauf an, die Flanke zu detektieren, um den Timer zu starten. 
Effizient braucht man also erst nach 1 1/2 facher Bitdauer das erste Mal 
abzutasten.
Gast #476043
Lesenswert?

Also bei mir ist das Startbit das erste bit.
Die Flanke startet den Timer (INT), 1/2 bit später wird das erste mal 
abgefragt => Startbit. Dann wird der Timer auf 1 bit Länge gesetzt und 
der Rest abgefragt. Absolut easy zu realisieren.
Gast #484914
Lesenswert?

Guten Tag,
ich wollte mal fragen wie das funktioniert, wenn ich ein Byte einlesen 
will.
Das ganze sollte letztendlich als 8 stellige Binärzahl oder als HEX-Zahl 
im Register landen.
Danke schonmal
#484937
Lesenswert?

AVRchris wrote:
> Guten Tag,
> ich wollte mal fragen wie das funktioniert, wenn ich ein Byte einlesen
> will.
> Das ganze sollte letztendlich als 8 stellige Binärzahl oder als HEX-Zahl
> im Register landen.
> Danke schonmal

In den beiden Tutorien (Asm, C) findest du dazu Beiträge.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART

Ansonsten musst du deine Frage etwas präziser stellen.
Das ist sonst schon sehr vage.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren