Folgendes Problem. Ich habe an den IO Warrior port P0.0 einen selbstgebauten controller angeschlossen. Der Controller funktioniert und liefert mehrere Bytes an den Port.
Jetzt wenn ich versuche die Bytes an den Rechner zu senden, kommt nur ein Byte an. und das nur wenn ich den controler resete.
Die funktion, der microprocessor lifert Daten nehmen wir die zahlen von 0 bis 5 und legt sie nacheinander an port p0.0 mit jewails einet Wait period zwischen den Zahlen. Nun soll der Controller die Zahlen an den Rechner schicken. Auf dem Rechner ist eine C++ Schleife mit der Funktion ReciveData() als endlos loop implementiert. Starte ich das C++ Programm und dann den Microcontroler erhalte ich nur den ersten wert... obwohl der micrprocessor immer noch in einer Schleife die Werte 0 bis 5 auf den port legt. resete ich den microprocessor wird wieder der erste wert geschickt.
Starte ich den Microprocessor als erstes und dann das C++ Programm kommt gar nichts an obwohl die daten an dem Port anliegen, erst wenn ich den MP resete kommt wieder nur der erste wert
Wie ist eigentlich die komunkation zwischen Rechner und IO warrior. muss nach empfang eines bytes irgendwas and den Warrier gesendet werden oder erkennt der warrior wenn sich an den Ports was ändert und sendet es and den rechner... was hier nicht funktioniert denn der port ändert sich ale 2 sek.
Für Hilfe wäre ich sehr Dankbar
Daten von IO Warrior an den Rechner schicken??
Moderator: Guido Körber
Wie schnell schickst du denn die Daten? Der IOW is ja nun mehr als langsam, ich nehme an, du überfährst den völlig. Der hat auch keinen FIFO drin, wo die Werte gepuffert werden können. Besser wäre, du schickst immer eine Anforderung, dass du den neuen Wert haben willst, und wartest dann auf diesen. Du kannst maximal 125 Reports pro Sekunde übertragen, will heißen, den µC muss mindestens 8ms warten bis der den nächsten Wert schicken kann. Für solche Datenübertragung ist das ja nicht ausgelegt, da wäre vielleicht ein FTDI 245 besser, der hat nen FIFO drin, und richtige Übernahme-Leitungen. Soll jetzt kein Abwerben sein, hoffe, mich haut keiner *duck*
Ich denke nicht das der uC zu schnell ist. Also ich schicke zb 0x01 nach 2 sek liegt dan am port 0x02 nach weteren 2 sek 0x03 und so weiter bis loop wieder von vorne beginnt.
Im C++ code offne ich den USB Port und versuche die Daten die am warrior port anliegen auszulesen doch es wird nur der erste wert immer gelesen. die anderen will er nicht mehr. ????????????????
Im C++ code offne ich den USB Port und versuche die Daten die am warrior port anliegen auszulesen doch es wird nur der erste wert immer gelesen. die anderen will er nicht mehr. ????????????????
Ich dachte zuerst dass der uC durch eine interupt das Anlegen des weiteren Bytes verhindert doch dem ist es nicht so der uC läuft schön weiter. Nur wie gesagt Die Read() funktion liest nur ein Wert raus also der 32 Bit lang ist,(man kann dann den p0.0 oder p0.1 daraus wert rausfiltern) dann kommt wieder eine Read() Anweisung, auch wenn der selbe wert am IO warrior anliegt wird er nicht gelesen.
Muss man da nach jedem lesen den Usb port wieder schliessen??? oder einen Status senden, dass die Übertragung erfolgreich war und dass er das zweite mal Read() ausführen kann.
Muss man da nach jedem lesen den Usb port wieder schliessen??? oder einen Status senden, dass die Übertragung erfolgreich war und dass er das zweite mal Read() ausführen kann.
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact: