PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Übertragung von zuständen vom microcontroller zum pc



Pitt1986
07.12.2005, 02:04
hi,

also ich muss ca. 200 zahlen (0 oder 1) an mein rechner vom microcontroller übertragen.
ich mach des bis jetzt am lpt-port über zwei inputleitungen von dem port.
wenn die eine leitung strom hat dann ist es eine null und wenn die andere leitung strom hat dann ist es eine eins.
aber manchmal wird mir des nicht genau übertragen weil ein oder mehrere zahlen verloren gehen.
jetzt würde ich es gerne so machen, dass ich nur eine leitung benutze und das programm auf dem rechner soll solange warten bis ein interrupt vom lpt-port ausgelöst wird, dann soll das programm paar MIKROsekunden warten und die leitung prüfen, wenn auf dieser leitung dann noch strom ist, dann ist es eine eins und wenn der microcontroller in den paar mikrosekunden wieder den strom ausgemacht hat soll das programm eine null speichern. dann geht das programm wieder zum anfang und wartet wieder bis ein interrupt ausgelöst wurde.

jetzt weiss ich aber nicht wie ich in c den interrupt vom lpt-port abfragen kann und wie ich das machen kann dass das programm ein paar MIKROsekunden wartet bis es die leitung abfragt.

oder habt ihr da eine besser idee zur übertragung.
solltet ihr eine haben, möchte ich liebsten dass die übertragung am lpt-port abgewickelt wird und am besten nur über eine leitung bzw. pin.

wäre sehr dankbar für hilfreiche antworten

mfg
pitt

askazo
07.12.2005, 08:18
Ich kenne mich in der PC-Seitigen Programmierung leider nicht so aus, aber wäre es nicht einfacher, die serielle Schnittstelle für Dein Vorhaben zu verwenden? Damit kannst Du gleich 8 Bit in einem Rutsch übertragen und am PC gibt es garantiert auch einen Empfangs-Interrupt für die RS232.

askazo

Pitt1986
07.12.2005, 12:21
ja des stimmt, nur jetzt bin ich gerade dabei des alles mit lpt-port zu machen und wenn ich hier vielleicht erfahre wie man interrupts am lpt-port auslesen kann und ein programm in c mikrosekunden warten lassen kann, werde ich es dann sowieso alles auf die serielle Schnittstelle umschreiben.

stegr
07.12.2005, 15:41
Eine Eigenart des Parallelports ist es, dass er (wie der Name schon sagt) darauf ausgelegt ist einen parallelen Datenstrom zu verarbeiten. Er ist dadurch relativ schnell, aber nur wenn man die Daten auch parallel vorliegen hat.
Um serielle Daten (wie bei dir) einzulesen, verwendet man typischerweise auch eine serielle Schnittstelle (wie z.B. RS232). Daher würde auch ich dir empfehlen, dass du die Serielle nimmst und nicht die Parallele ;)

Auf dem Mikrocontroller hast du typischerweise Hardwareunterstützung für U(S)ART (=serielle Schnittstelle) und musst die nur gemäß Datenblatt initialisieren.
Aufm Rechner gibts für fast jede Programmiersprache Beispiele, wie man von der Seriellen einliest - einfach mal sagen, welche Sprache du verwendest - vielleicht hab ich da schon was rumliegen...

MfG
stegr

Pitt1986
07.12.2005, 16:02
hi,

also des mit usart kann ich net verwenden weil mein pic des nicht kann bzw. hat. also muss ich des selber machen.

ich programmiere in c.

aber was mich sehr interessieren würde wie man halt in c
MIKROsekunden warten kann und wie man halt interrupts ausliest.

weil wenn ich mal irgendwann mal was über die parallele schnittstelle machen will dann möchte ich da nicht wieder die ganze zeit rumhängen weil ich des nie gemacht hab.

stegr
07.12.2005, 16:37
am rechner programmierst du in ansi-c?
unter windows oder dos oder linux?

warten (ANSI-C): delay (ms) - macht aber nur millisekunden, daher vielleicht nicht brauchbar.
Interrupts unter Windows kannste grad vergessen - die gibts nur mit besonderem Aufwand und das möchtest du mit C wohl eher nicht machen ;)
Unter Linux ist das einfacher - aber auch da nimmst du lieber C++ und verwendest eine Klasse aus der STL dafür.
Dos ist auch sehr einfach - muss aber echtes Dos sein (also max. Win98)

MfG
Stefan

Pitt1986
07.12.2005, 17:25
hi,
also da wo das programm laufen soll ist ein windows xp.
ja des delay kenn ich aber ich brauch des für mikrosekunden, deswegen hab ich des MIKRO vorhin immer großgeschrieben.

mfg pitt

stegr
07.12.2005, 17:55
Unter Windows XP hast du keinen direkten Zugriff auf die parallele Schnittstelle. Du musst zwangsweise über Winapi gehen (oder über eine Bibliothek, die das für dich macht). Die einzige, die mir da direkt einfällt wäre http://www.logix4u.net/inpout32.htm aber da ist kein Beispielcode für C dabei und ne DLL in echtem C einbinden ist auch wieder ne Sache für sich... ;)
Schau ansonsten mal bei www.programmersheaven.com oder unter http://www.lvr.com/parport.htm findest du eine nette Übersicht, vielleicht kannst du ja was davon verwenden.

Btw: nen delay unter winXP machste auch über ne Winapi-Funktion, aber das macht auch keine Freude...

MfG
Stefan

Andre_S
07.12.2005, 20:42
Hallo,

schau mal hier, diese IO.DLL habe ich bisher ohne Probleme für alle meine Anwendungen nutzen können. Sehr einfach, unkompliziert und von 95 bis XP ohne Änderungen einzusetzen.
Da kannst Du z.B. auch wunderbar einzelne Bits setzen oder lesen und je nach Adresse eben auch den Druckerport, ohne das Dich XP da behindert.
http://geekhideout.com/iodll.shtml


Gruß André