Hallo zusammen, Ich grüble gerade über ein Problem mit dem pic16f887. Da die Pic16 Familie ja nicht "von Natur aus" in der Lage ist eine Übertragung mit 2 Stoppbits zu empfangen suche ich gerade nach einer Alternative: (es geht nebenbei um den Empfang des unidirektionalen DMX-Protokolls) Gehe ich richtig in der Annahme, dass ich den Empfang auf 9 Bit konfigurieren kann, Bit 9 ignoriere und nur das letzte Stoppbit auswerte? Alle bisherigen Versuche sind Fehlgeschlagen... ;) Oder fällt jemandem eine andere Lösung ein? Gruß Kai
Ich kenne die Pics nicht, aber die können doch sicher 8N1 - und damit muss der Empfang klappen.
Ich würde sagen, dass es dem Empfänger egal ist, ob er ein zweites Stopp bit bekommt. Das ist ja nur das Gleiche wie eine längere Pause zwischen den Frames.
:
Bearbeitet durch User
Kai schrieb: > Da die Pic16 > Familie ja nicht "von Natur aus" in der Lage ist eine Übertragung mit 2 > Stoppbits Natürlich können sie das. Einem Empfänger ist es egal, wieviele Stoppbits nach dem ersten kommen, es können auch hundert sein. Stoppbits sind ja nichts anderes als kein Signal auf der Leitung. MfG Klaus
Kai schrieb: > Familie ja nicht "von Natur aus" in der Lage ist eine Übertragung mit 2 > Stoppbits zu empfangen suche ich gerade nach einer Alternative: (es geht > nebenbei um den Empfang des unidirektionalen DMX-Protokolls) Gehe ich Meistens geht es bei 2 Stoppbits nur darum, dass der Sender/Empfänger mehr Zeit braucht, um die empfangenen bzw. zu sendenden Bytes zu verarbeiten. Das zweite Stoppbit wird bei Soft-Uart in 99% der Fälle gar nicht geprüft bzw. gesendet - ist ja sowieso gleich Idle. Also, wenn du unbedingt Empfang mit 2 Stoppbits haben willst - eine bitzeit nach dem Senden warten - und schon hast du 2 Stoppbits.
Kai schrieb: > Gehe ich > richtig in der Annahme, dass ich den Empfang auf 9 Bit konfigurieren > kann, Bit 9 ignoriere und nur das letzte Stoppbit auswerte? Du brauchst es gar nicht auszuwerten. Ich kenne zwar das DMX-Protokoll nicht, aber da du von 9 Bits schreibst, denke ich dass es sich um 8 Datenbits plus Paritätsbit handelt. Das Paritätsbit bekommt der Anwender normalerweise gar nicht zu Gesicht, sondern es wird von Sende-Maschinerie erzeugt und von der Empfangsmaschinerie lediglich auf Richtigkeit überprüft. Diese Maschinerien bestehen meist aus recht einfacher Hardware, aber da sie aus nicht viel mehr als einem Zähler und einem Schieberegister bestehen, kann man sie auch leicht in Software implementieren. Beim Empfang eines Zeichens spielt sich etwa folgendes ab: Am Anfang ruht die Leitung, das entspricht einer logischen 1. Zu irgend einem x-beliebigen Zeitpunkt fängt der Sender an zu senden, und das kündigt er an, indem er das Startbit, eine logische 0 sendet. Dieser Übergang 1-->0 wird vom Empfänger erkannt und nun wartet er 1,5 Bitzeiten bis er die Leitung wieder testet und das Ergebnis als erstes Datenbit in das Empfangsregister schiebt. 1,5 Bitzeiten weil dann die Abtastung in der Mitte des ersten Datenbits erfolgt. Wie lange eine Bitzeit dauert, hat der Pogrammierer der Maschine bei der Initialisierung, z.B. 2400, 4800, 9600 etc., mitgeteilt. Danach tastet der Empfänger noch 7 Mal im Abstand von einer Bitzeit ab und schiebt so die übrigen 7 Datenbits in das Ergebnisregister. Wenn man den Sender (und hoffentlich auch dem Empfänger) bei der Initialisierung mittels der Angabe "PE" ode "PO" angewiesen hat das Paritybit zu erzeugen (und zu prüfen), wird anschliessend noch die Quersumme der Einsen im Datenwort ermittelt und als 1 oder 0 übertragen, und das wird beim Empfänger mit der dort ermittelten Quersumme des Datenbytes verglichen. Das ist dein 9-tes Bit, das du normalerweise aber nicht zu sehen bekommst. Mit dieser "Prüfsumme" kann man erkennen, ob die Übertragung gestört wurde, und falls das der Fall ist, wird in einem Statusregister ein "Parity-Error" signalisiert. Nach dem all diese Bits im Kasten sind, wartet der Empfänger noch eine weitere Bitzeit, weil dann wieder der Ruhezustand auf der Leitung herrschen muss. Der Sender sendet dazu mindestens ein Stopbit, bevor er das nächste Startbit schickt, oder er hört einfach mit der Sendung auf. Erst jetzt signalisiert die Empfangsmaschinerie dem Programm, dass ein Datenbyte zum Abholen bereit steht. Das auswertende Programm sollte sich nun aber zuerst das Statusregister ansehen, ob dort ein "Parity Error" (Zahl der Einsen stimmt nicht) oder ein "Framing Error" angezeigt wird, denn dann besteht das Datenbyte wahrscheinlich nur aus Müll. Abholen muss man es meist trotzdem. Zu dem "Framing Error" kommt es, wenn kein Stopbit zur erwarteten Zeit auf der Leitung ist. Das kann passieren, wenn man den Empfänger im eine bereits laufende Übertragung einschaltet, da er ja ein Startbit nicht von einer regulären 0 zu unterscheiden vermag. Normalerweise synchronisiert sich der Empfänger bald von selbst, aber man kann das beschleunigen, indem man mit 2 Stoppbits anstatt nur einem arbeitet. Der Empfänger braucht davon nichts zu wissen, er wartet immer nur auf das erste Stopbit. Der Preis für 2 Stopbits ist eine insgesamt etwas geringere Übertragungsgeschwindigkeit. Hier steht das Ganze noch mal in Farbe. Und bunt ;-) https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
>Ich grüble gerade über ein Problem mit dem pic16f887. Grüble über deine Software, da hackt es. >Gehe ich richtig in der Annahme, dass ich den Empfang auf 9 Bit >konfigurieren kann, Bit 9 ignoriere und nur das letzte Stoppbit auswerte? Nein, falsche Annahme. Und was willst du mit "letzte Stoppbit auswerte?". Was willst du da machen? Beschreib doch mal die Fehler, die auftreten. Darüber hast du noch nichts gesagt.
Kai schrieb: > Hallo zusammen, > > Ich grüble gerade über ein Problem mit dem pic16f887. Da die Pic16 > Familie ja nicht "von Natur aus" in der Lage ist eine Übertragung mit 2 > Stoppbits zu empfangen suche ich gerade nach einer Alternative: (es geht > nebenbei um den Empfang des unidirektionalen DMX-Protokolls) Gehe ich > richtig in der Annahme, dass ich den Empfang auf 9 Bit konfigurieren > kann, Bit 9 ignoriere und nur das letzte Stoppbit auswerte? Alle > bisherigen Versuche sind Fehlgeschlagen... ;) Oder fällt jemandem eine > andere Lösung ein? Nimm doch einen moderneren PIC. PIC24 und PIC32 lassen sich problemlos auf 2 Stopbits einstellen. fchk
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.