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
achso, kann ich ja sagen, es handelt sich um das Pocsag Protokoll. (Mega8 + Bascom)
Die serielle schnittstelle hat ein fest eingestelltes Datenformat, google mal nach rs232. Deine Vorgeschlagene Lösung mit dem Timer is eigentlich vernünftig.
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.
>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.
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.
>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.
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.
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...
Ja, sind steinalte Multiplexerbaugruppen von Siemens (Lichtwellenleiter), die haben da ihr eigenes Süppchen gekocht. 46100 baud, 16 bit-Worte und die Pegel verdreht.
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
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.
Ja so ein bisschen... hab mich halt noch nicht so viel damit beschäftigt Wieso? Ist das so arg falsch, was ich geschrieben hab?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.