www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Serielle Daten einlesen


Autor: StefanJ (Gast)
Datum:

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

Autor: StefanJ (Gast)
Datum:

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

Autor: Tommy (Gast)
Datum:

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

Autor: Sonic (Gast)
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Sonic (Gast)
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Sonic (Gast)
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Sonic (Gast)
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Buaää... Watt´n Schei..format! ;-) Naja Siemens halt...

Autor: AVRchris (Gast)
Datum:

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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist Mikrokontroller programmieren Dein Hobby?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

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

Autor: AVRchris (Gast)
Datum:

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

Autor: AVRchris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, der Link hat mir geholfen

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.