Nebenbei bemerkt ist das nicht das erste mal das ich solch eine Kommunikation aufbaue und hatte bisher nie solche Probleme.
Die Situation:
Der AVR soll meiner Software, nach Empfang eines beliebigen Bytes, einen Bulk an Daten senden. Zum Testen hab ich dieses Bulk mal auf 64 Bytes gestellt wobei der Inhalt des Bulks den Werten 0 bis 63 entspricht. Die Kommunikation an sich klappt (COM1, 19200 Baud, 8N1).
Per Terminalprogramm sehe ich das der AVR mir ordentlich die Zahlenwerte 0 bis 63 zusendet, egal wie oft ich das ganze hintereinander durchführe. Fazit: AVR macht alles korrekt.
Nun zu dem Teil der nicht klappt und hierzu mal der Programmausschnitt mit meiner Empfangsroutine:
Code: Alles auswählen
MyCom.s = "com1: baud=19200 parity=N data=8 stop=1"
;Schnittstelle öffnen
HCom.l = ComOpen( MyCom, #HandShakeModeNone, 1024, 1024 )
;Schnittstelle geöffnet?
If HCom
;Sende Anforderung
dw.s = "S"
ComWrite( Hcom, @dw, 1 )
;Datenempfang
Repeat
;Daten im Empfangspuffer?
NbDataToRead.l = ComInputBufferCount( Hcom )
;Wenn Daten, auslesen
If NbDataToRead > 0
;Einlesen der Daten
dr.s = Space( NbDataToRead )
ComRead( Hcom, @dr, NbDataToRead )
For i = 1 To NbDataToRead
K = Asc( Mid( dr, i, 1 ) )
Debug k
Next
;Addiere gelesene Datenmenge
Bytes = Bytes + NbDataToRead
EndIf
Until Bytes > 63
EndIf
Nun das komische: die ersten 8 empfangenen Bytes sind alle 0 !!! Danach wird als erster empfangener Zahlenwert 8 angezeigt - was korrekt ist denn die Zahen 0 bis 7 wären ja die ersten 8 Bytes gewesen.
Noch kurioser wird es wenn ich nach dem Senden des Startbytes (ComWrite) ein Delay einbaue. Dann vergrößert sich die Anzahl der empfangenen Nullen, je nach Delay, sogar bis schlußendlich nur 64 mal eine 0 empfangen wird.
Anders ausgedrückt: ComInputBufferCount zeigt mir korrekt an das sich eine gewisse Anzahl Bytes im Empfangspuffer befindet. Diese Anzahl ist auch korrekt, nur der Inhalt ist 0.
Die große Frage ist - warum? Das Ändern der Größe des Empfangspuffers (mal auf 1 mal größer als 1024) habe ich ohne Erfolg schon versucht. Ebenso sind alle anderen Versuche bisher nicht fruchtbar gewesen und ich kann mir keinen Reim drauf machen.
Ich nutze die PureBasic Version 4.51 und logischerweise MVCOM.