- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 35

Thema: Bytevergleich fehlerhaft

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Da fehlt einiges. Der Code mit dem vermeintlichen Fehler sollte zum Nachvollziehen compilierbar sein. Pruef_quelle kann ich auch nicht weiter finden.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    1234567890
    Geändert von i_make_it (05.02.2015 um 05:29 Uhr)

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hallo demmy,

    Du schreibst “ich verwende alle 4 Timer„.
    Ist schon eine weile her als ich ein lauffähiges Projekt mit Mega644 aufgebaut habe, bis ich den Controller durch einen Mega 128 ersetzt habe(100% Code). Ergebnis Projekt instabil. Ursache war Timer0.
    Mit $regfile = "m1284pdef.dat" gibt es nur Timer,Timer1,Timer2 und Timer3 aber für die eingebundenen Lib für IR wird Timer0 benötigt. Somit diese Zuweisung. Const Timsk = Timsk0. Alles wieder OK.
    Kann sein das dieser Fehler in Bascom schon behoben wurde.

    Ist zwar nicht direkt die Hilfe für Bytevergleich aber wenn in einem größeren Code eine Timer- Interruptsausführung gestartet wird, die im Ablauf nicht passt, kann es schon mal chaotisch werden.
    Somit sollte es nur ein Hinweis sein.

    Weis auch nicht warum du nicht [Crc] nutzt. Siehe Bascomhilfe.
    Nicht vergessen im UART werden immer die Steuerzeichen Chr(10) und Chr(13) angehängt. Diese Zeichen siehst du natürlich nicht am Terminal, wenn er nur Strings anzeigt. In Hexmodus schon.


    Mit freundlichen Grüßen
    fredred

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Wäre dann const timsk0 = timsk nicht angebracht, oder habe ich da grad nen Denkfehler?

    Oder gar timsk0 alias timsk ?
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #15
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hi,
    ja so ist es.

  6. #16
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Guten Morgen zusammen,

    leider haben alle Versuche bisher nichts gebracht.

    Auch die Zeile für den Timer war leider vergebens.

    Ich habe aber inzwischen noch was herausgefunden.
    Zunächst noch:

    Pruef_quelle ist ein im Programm fest hintelegter wert: dieser wird nur einmal als konstante deklariert.

    In folgender Zeile übergebe ich das was über die UART eingelesen wurde an eine Variable.

    quelle = empfangsarray(2)

    ich habe jetzt wenn der Fehler passiert mit die Werte (pruef_quelle, quelle und empfangsarray(2)) ausgeben lassen.
    Diese sind unterschiedlich!
    Auch die Konstante pruef_quelle hat plötzlich einen Wert der überhaupt nicht stimmt.

    Schaue ich mir das array empfangsarray(1) - empfangsaeeay(5) an, wie bisher, dann sehen die Werte alle korrekt aus.

    Es muss also was schief laufen beim übernehmen des Bytes aus dem Bytearray in eine Variable.

    Kann es sowas geben?
    Wie kann das sein?

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Guten Morgen demmy,
    Zitat Zitat von demmy Beitrag anzeigen
    Kann es sowas geben?
    Gibt es wie du siehst, darf aber nicht sein.

    Wie kann das sein?
    Ich wollte schon öfter raten, wo denn der Bug versteckt ist. Konnte mich aber aufgrund der vielen unbekannten Infos für keine der vielen Möglichkeiten entscheiden.

    Du solltest den kompletten Code posten und um es uns noch etwas einfacher zu machen, Teile daraus solange auskommentieren, solange der Fehler noch auftaucht. Vielleicht findest du den Fehler dadurch auch sogar selber

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    1234567890
    Geändert von i_make_it (05.02.2015 um 05:34 Uhr)

  9. #19
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    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

  10. #20
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Hi,

    vielen Dank schon mal für eure Hilfe!

    Also das Array "empfangsarray(5)" ist 5 Byte groß.

    empfangsarray(1) = Zieladresse
    empfangsarray(2) = Quelladresse
    empfangsarray(3) = Nutzdaten1
    empfangsarray(4) = Nutzdaten2
    empfangsarray(5) = CRC8

    In der Zeile: empfangsarray(5) = Crc8(empfangsarray(1) , 4) berechne ich eigentlich die Checksumme des empfangenen Telegramms mit der empfangenen Checksumme
    und Prüfe das Telegramm auf Plausibilität.

    Darf ich das mit den Dummy-Variablen so verstehen das zwischen den Speicherbereichen der Variablen immer ein Leerplatzt bleibt?


    Wenn es in irgendeiner Form zu einer Überschneidung der Variablen kommen sollte, müsste ich das nicht erkennen wenn ich mir in Bascom nach dem Compilieren mit "strg w" den Report anzeigen lasse? Dort kann ich doch die Speicherbereiche der Einzelnen Variablen sehen!?
    Geändert von demmy (03.11.2014 um 19:11 Uhr)

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. ISR Fehlerhaft
    Von Zille im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 20.01.2014, 18:11
  2. Sinus-Funktion Fehlerhaft?!
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 15.07.2009, 17:24
  3. Schaltung fehlerhaft
    Von Atmelbeginne im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 12.09.2008, 16:56
  4. Uartausgabe Fehlerhaft
    Von Picht im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.02.2007, 16:45
  5. Drehgeber auswertung - Fehlerhaft?
    Von gamecounter im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 22.03.2006, 10:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen