Forum: Mikrocontroller und Digitale Elektronik Serielle Daten einlesen


von StefanJ (Gast)


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

von StefanJ (Gast)


Lesenswert?

achso,
kann ich ja sagen, es handelt sich um das Pocsag Protokoll.
(Mega8 + Bascom)

von Tommy (Gast)


Lesenswert?

Die serielle schnittstelle hat ein fest eingestelltes Datenformat, 
google mal nach rs232.
Deine Vorgeschlagene Lösung mit dem Timer is eigentlich vernünftig.

von Sonic (Gast)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von Sonic (Gast)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Also bei mir ist das Startbit das erste bit.

Bei mir auch, wie ich schrieb. Wenn es funktioniert, ist doch okay. 
Alles andere sind Optionen / Optimierungen.

von Sonic (Gast)


Lesenswert?

Stimmt.
Ich hab' das so gemacht weil ich ein Protokoll hatte, in dem das 
Startbit high war und in die Paritätsprüfung mit einging. Exotisch, 
hatte aber keine Wahl.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Aaah! Verstehe ;-) Na es gibt ja auch ´nen Sack voll Protokolle, die 
sich nicht an den RS232 Standard halten. Das geht schon los mit MSB oder 
LSB zuerst. Da findet man den Fehler (ohne Oszi) nie...

von Sonic (Gast)


Lesenswert?

Ja, sind steinalte Multiplexerbaugruppen von Siemens 
(Lichtwellenleiter), die haben da ihr eigenes Süppchen gekocht. 46100 
baud, 16 bit-Worte und die Pegel verdreht.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Buaää... Watt´n Schei..format! ;-) Naja Siemens halt...

von AVRchris (Gast)


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

von jack (Gast)


Lesenswert?

Ist Mikrokontroller programmieren Dein Hobby?

von Karl H. (kbuchegg)


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.

von AVRchris (Gast)


Lesenswert?

Ja so ein bisschen... hab mich halt noch nicht so viel damit beschäftigt
Wieso?
Ist das so arg falsch, was ich geschrieben hab?

von AVRchris (Gast)


Lesenswert?

Danke, der Link hat mir geholfen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.