PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schnelle serielle Bitfolge einlesen



-Ice-
17.11.2007, 18:49
Hallo,

ich möchte gerne ein serielles Signal mit dem Pc auslesen.
Die Bitfolge besteht aus 60 Bits, deren Bedeutung mir vollkommen klar ist. Zusätzlich beginnt jede neue Bitfolge mit einer Adresse die immer gleich ist.
D.H. wenn ich die Bitfolge am Rechner hätte, könnte ich sie einfach auswerten.

Meine Idee war jetzt, das Signal mit Max232 erstmal pegelmäßig anzupassen und anschliesend auf die serielle Schnittstelle zu leiten.
Allerdings ist das ja dann keine "regelkonforme" rs232 Übertragung.

Ich müsste den Zustand der Leitung also schnell genug hintereinander abfragen um die Bitfolge mit dem Rechner auslesen zu können. Genau das ist für mich ein Problem, da ich es mit Windows machen möchte und sämtliche dlls (io.dll; port.dll...) zu langsam dafür sind. Windows ist ja leider kein Echtzeitbetriebssytem.
Der Takt der die Bits bei jeder aufsteigenden Taktflanke erzeugt, beträgt 38khz.

Hat Jemand eine Idee wie man das verwirklicht?
Evtl. ein µC mit UART der dann immer schön serielle Daten verschickt?

Bin um jede Hilfe dankbar :)

mfg Daniel

PICture
12.01.2008, 15:26
Hallo -Ice- !


Evtl. ein µC mit UART der dann immer schön serielle Daten verschickt?
Das ist nicht schlechte Idee, aber nur wenn zwischen den 60-bittigen Datensätzen genug lange Pausen gibt, während dessen sie "regelkonform" an die RS-232 übertragen werden können.

Sonst bleibt ewentuell LPT übrig, wo man ein Eingangspin (10,11,12,13 bzw.15) des Registers 379h schnell abtasten kann. Ob es unter Windows möglich ist, weiss ich nicht, da ich es noch unter DOS in ASM programmiert habe.

MfG

-Ice-
12.01.2008, 20:58
Hallo -Ice- !


Evtl. ein µC mit UART der dann immer schön serielle Daten verschickt?
Das ist nicht schlechte Idee, aber nur wenn zwischen den 60-bittigen Datensätzen genug lange Pausen gibt, während dessen sie "regelkonform" an die RS-232 übertragen werden können.

Sonst bleibt ewentuell LPT übrig, wo man ein Eingangspin (10,11,12,13 bzw.15) des Registers 379h schnell abtasten kann. Ob es unter Windows möglich ist, weiss ich nicht, da ich es noch unter DOS in ASM programmiert habe.

MfG

Hallo PICture,

danke für deine Antwort. Ich werde es mit einem Microcontroller probieren.
Dazu habe ich mir ein myavr Experimentier Board gekauft (Mit Atmega 8 drauf).
Ich werde versuchen den USART in Gang zu kriegen um die Platine mit der seriellen Schnittstelle zu verbinden.
Die Bitfolge steuert übrigens einen LCD-Treiber an. Eine Aktualisierung der Daten alle Millisekunde, oder noch seltener, reicht mir deshalb. Der Displayinhalt vom LCD (von dessen Controller ich die Bitfolge abgreife) ändert sich im Allgemeinen nicht so schnell.

Später möchte ich das, was am LCD angezeigt wird, auch auf meinem PC Bildschirm sehen.

Habe leider noch keine Vorstellung wie ich das genau angehen soll. Es ist bei mir das erste Mal mit Microcontrollern.
Ich könnte mir vorstellen einen Timerinterrupt zu programmieren, der alle 20ms zum Beispiel 120 bits sammelt und das Paket dann überträgt. Dann müsste ich nicht prüfen, ob die Startaddresse gerade kam und hätte pro Übertragung mindestens eine vollständige Bitfolge (Startadresse +Nutzbits) an den Pc geschickt.

Nur wie ich die Bits überhaupt einlesen soll ist mir ein Rätsel. Der Avr hat ja nur 8bit Register.
Ob ich evtl. Jedes Bit einzeln an den PC übertragen kann?

PICture
12.01.2008, 21:55
Ich bin ein PIC benutzer, deshalb kann ich dir bei AVRs nicht praktisch helfen.

Bei serieller Kommunikation lassen sich einzelne bits nicht ubertragen, es geht immer byteweise. Du kannst aber wahrscheinlich die 60 bit + 4 leere als 8 bytes sogar als 1 byte in jeder Pause (also jede ms) an PC schicken, dort zusammensammeln und danach auwerten.

Bei dem Empfang kannst Du die Einzelne Bits in bestimmte acht 8-bittige Register des AVRs kopieren und nach der Kompletierung, z.B. wie oben beschrieben, an PC senden.

MfG