Hi demmy,

so da du Interrupt- Timerfehler ausschließen kannst, hätte ich noch Fragen.

Im Codeschnipsel in #10, kann ich nicht erkennen wie groß Array ist. Wichtig für Checksummenbildung mit Crc Auswertung, ist die max Bytelänge und das Abschlusssteuerzeichen zu kennen.
Hast du 50 Byte für Werte muss Sitze zwei Byte größer sein, denn da wird die Checksumme angehängt.
Sehr elegant ist Serial mit Charmatch zuprüfen. Läuft ja im „Hintergrund“, Sub solle aber nach meinen Erfahrungen immer am Ende des Programms stehen.
Declare für Com1 sollte folglich Sub Serial 0charmatch() sein

Kleiner Auszug meiner BAS(Funkbrücke mit RFM12b)

‚++++++++++++++++++++++
'!!!!! muss aktiv sein wenn COM2 Hardware benutzt werden soll !!!!!
Declare Sub Serial1charmatch() 'Sub bekannt machen

Dim Pu As Byte 'Pu prüft den Puffer

'------hier werden die COM-Schnittstellen eingestellt-------
'COM1 ist die V24 für PC / COM2 (TTL) für Empfängervebindung
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

'!!!!! darf nur aktiv sein wenn COM2 Hardware belegt ist !!!!!
'Sonst hält Programm an bis Bytematch 13 ist.
Config Serialin1 = Buffered , Size = 160 , Bytematch = 13 ' 13 gleich Zeilenumbruch

'COM zum einlesen öffnen
Open "COM1:" For Binary As #1 'für Terminal
Open "COM2:" For Binary As #2 'für Empfänger

'diese Sub startet wenn im Puffer COM2 Daten anliegen und
'wird mit Empfang von Chr(13) beendet.

'Pu prüft den Puffer der COM2 wird in diesem Projekt nicht genutzt da
'Empfänger auch eigene Messungen printet wird wohl immer etwas drin sein.

Sub Serial1charmatch()
Pu = Ischarwaiting(2) 'könnte gelöscht werden
Pushall
Input #2 , Kanal Noecho ‚ Kanal alle Byte
Popall
End Sub

Wie schon von peterfide beschrieben solltest du Dummy-Variable deklarierst. Einfach die Bytewerte
ein „Speicherplatz“ mit Länge zuweisen. Mit Overlay sehr übersichtlich und spart noch Resursen.

kleiner Auszug.

Const Max_len = 160
Dim Empfangspuffer(max_len) As Byte
' ab Empfangspuffer(6) die Nutzdaten
Dim Strom As Single At Empfangspuffer(6) Overlay
Dim Spannung1 As Single At Empfangspuffer(3) Overlay
Dim Spannung2 As Single At Empfangspuffer(70) Overlay
Dim Temperatur As Single At Empfangspuffer(102) Overlay
Dim Helligkeit As Single At Empfangspuffer(134) Overlay
‚Crc_ in ist Vergleichsvaiable.
Dim Crc_in As Word At Empfangspuffer(15) Overlay ' CRC muss bei Max_len - 2
Dim Crc As Word
Die As müssen natürlich nicht [Single] sein. Habe ich nur wegen der Auswertungen benötigt.

‘Beispiel prüfen.
Do
Incr Z 'Z um 1 erhöhen
If Z = Max_len Then ' erwarte Anzahl an Bytes empfangen
' CRC berechnen
Z = Max_len - 8
Crc = Crc16(empfangspuffer(6) , Z)

' CRC prüfen
If Crc <> Crc_in Then
Print "Fehler"
End If
If Crc = Crc_in Then
Print "mach weiter"
End If
‘…….

Loop

So wie ich es sehe, hast du schon sehr gute Kenntnisse. Somit, dies nur als Anregung betrachten und selber an dein Projekt anpassen.
{i_make_it} hat es noch besser erklärten können wie ich. Ein MCU ist kein "Hochleistungsrechner",
Freue mich aber wie hartnägig du bist. Wirst bestimmt bald zum Ziel kommen.


Mit freundlichen Grüßen
fredred