MVCOM Problem, Nullen im Empfangspuffer

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

MVCOM Problem, Nullen im Empfangspuffer

Beitrag von E-P-S »

Hallo zusammen. Ich habe ein Problem bei der Kommunikation mit einem AVR über die serielle Schnittstelle an dem ich nun schon 3 Tage tüftle. Die Kommunikation läuft, Hardwarebedingt, nur über RxD und Txd ohne Hardware - Handshake. Da später alle Werte von 0 - 255 übertragen werden kommt auch ein Software Handshake nicht in Frage.

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
Ich bekomme angezeigt das sich Daten im Empfangspuffer befinden woraufhin ich diese einlese und per Debugger ausgeben lasse.

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.
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Re: MVCOM Problem, Nullen im Empfangspuffer

Beitrag von E-P-S »

So, ich hab jetzt mal ein wenig weiter herumexperimentiert.

Unter anderem hab ich die Software mal auf die PB eigenen Funktionen für die Unterstützung der seriellen Schnittstelle umgestellt. Leider mit gleichem mäßigen Erfolg.

Dann hab ich mich wieder der Kommunikation zugewand und folgendes herausgefunden:

Wenn ich nur eine bestimmte Zahl 64 mal vom AVR in Richtung PC schicke, kommt diese auch an. Dann hab ich meinen Datenbulk mal Rückwärts laufen lassen von 255 und siehe da, auch diese Daten werden korrekt übertragen. Dann lies ich den Zähler anstatt bei 0 einfach bei 1 beginnen und wieder hochzählen. Und - na hoppla - auch das geht!

Der letzte Versuch war nun den Zähler mal überlaufen zu lassen. Soll heißen: Ich schicke als erstes den Wert 20 und lasse bis 0 runterzählen und dann sollte 255 kommen. Aber bei der 0 ist Feierabend und es werden NUR noch Nullen empfangen.

Ich möchte jetzt nicht den Teufel an die Wand malen, aber wäre es denkbar das die Empfangsroutine der seriellen Kommunikation in PureBasic hier einen BUG hat und nicht mit einer NULL klar kommt?
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: MVCOM Problem, Nullen im Empfangspuffer

Beitrag von HeX0R »

Nimm einen Puffer und keinen String.
Der String kann nun mal nach einer 0 nicht mehr weiterverarbeitet werden, weil es das Ende desselben bedeutet.
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Re: MVCOM Problem, Nullen im Empfangspuffer

Beitrag von E-P-S »

Kennt ihr das...es gibt so Tage da wünscht man sich Beine die so krumm sind das man sich selbst in den Hintern treten könnte.... /:->

Ich danke heftigst für diesen Klapps auf den Hinterkopf.
Antworten