- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 35

Thema: Bytevergleich fehlerhaft

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    mhh das trifft leider alles nicht zu, es ist ein direkter Bytevergleich wie oben beschrieben.

    Der Quelltext ist ein paar hundert Zeilen lang, ich glaube nicht das ihr euch das alles antun wollt, der meiste Teil hat eigentlich auch gar nichts mit dem Problem zu tun und läuft autark, ohne das er in diese eine Sub in irgend einer Form eingreift.
    Das ganze Programm ist im Grunde so strukturiert das in der Hauptschleife zyklisch einzelne Subs nacheinander aufgerufen werden. Interrupts werden auch keine verwendet außer die Timer. Und bei den Timern wird nur ein Flag gesetzt, welches bei gesetztem Zustand in der Hauptschleife eine Sub anspringen lässt.
    Auch die Variablen sind alle Global und die die in dieser Sub verwendet werden, werden eigentlich auch nur dort gebraucht. Sonst nirgends im Programm.

    Ich schaue mal ob ich ein paar interessante Auszüge aus dem Quelltet einstellen kann.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Evtl. mal den Stack erhöhen. Was passiert, wenn Du zwischen den Bytes eine Dummy-Variable deklarierst?

    Dim Byte1 as byte
    dim dummy(10) as byte
    dim Byte2 as Byte
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

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

    ich nehme an die Timereinstellung „spinnen“ beim Mega 128, besser im Header dies einfügen.

    Const Timsk = Timsk0

    Da kein Code sowie Interrupt- Einstellungen bekannt sind, ist es schwer zu helfen.

    Gruß
    fredred

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Hi,
    was bewirkt denn dieser Befehl?

    Const Timsk = Timsk0

    Die Stacks habe ich auch schon ganz schön hochgeschraubt!!!


    Also folgender Code beinhaltet das Problem:

    Code:
    $regfile = "M1284pdef.dat"
    ' In den Fusebits wurde der externe Oszillator für 18,432MHz ausgewählt
    $crystal = 18432000
    
    $hwstack = 355                                             ' Standard 42 für den "Hardware Stack"
    $swstack = 355                                             ' Standard 40 für den "Software Stack" 
    $framesize = 655                                          ' Standard 40 für den "Frame" 
    
    ' Baudrate für den ersten seriellen Port 
    $baud = 9600
    ' Baudrate für den zweitern seriellen Port
    $baud1 = 9600
    
    ' Analog Comparator ausschalten   ACSR.ACD = 1
    Stop Ac
    ' Watchdog ausschalten
    Stop Watchdog
    
    ' Echo aus
    Echo Off
    ' Interrupts global zulassen
    Enable Interrupts
    
    ' KONFIGURATION
    
    ' Com1 auf 8 Bit Modus konfigurieren
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    ' Com2 auf 8 Bit Modus konfigurieren
    Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    ' Öffnen der zweiten Com-Schnittstelle
    Open "COM2:" For Binary As #1
    
    ' Empfangspuffer UART
    Config Serialin = Buffered , Size = 50
    ' Sendepuffer UART
    Config Serialout = Buffered , Size = 50
    ' Empfangspuffer UART1
    Config Serialin1 = Buffered , Size = 50
    ' Sendepuffer UART1
    Config Serialout1 = Buffered , Size = 50
    
    Declare Sub Kommunikation   
    
    Do 
    
    ....
    
    Call Kommunikation
    ....
    
    Loop
    
    Sub Kommunikation
    
              ' Daten im Empfangspuffer
              If _rs_bufcountr1 > 0 Then
    
                  fehlende_daten = 0
    
                  ' Daten vollständig empfangen
                  If _rs_bufcountr1 >= 5 Then
    
                        falsche_laenge = 0
    
                        ' Daten einlesen
                        Inputbin #1 , empfangsarray(1) , 5
    
                        ziel = empfangsarray(1)
                        quelle = empfangsarray(2)
    
                       
                        If ziel = 0 Then
    
                              falscher_kopf = 0
    
                              ' HIER PASSIERT DER FEHLER!!!!!!!!!!!!!!!!!!!
                              If quelle = Pruef_quelle Then
    
                                     falscher_tn = 0
    
                                     ' Empfangene Checksumme mit errechneter vergleichen
                                     If empfangsarray(5) = Crc8(empfangsarray(1) , 4) Then
    
                                           Err_falsche_checksumme = 0
    
                                           ' Hier tut er dann irgendwas!!!
    
                                     Else
                                          
                                           Err_falsche_checksumme = 1
    
                                     End If
    
                              Else
                                   
                                    
                                     Err_falscher_tn = 1
                                     ' Zur Fehlerüberprüfung springen
    
                              End If
    
                        Else
    
                            falscher_kopf = 1
    
                        End If
    
                  Else
    
                        falsche_laenge = 1
    
                  End If
    
              Else
    
                  fehlende_daten = 1
    
              End If
    
    End Sub

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    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! \/

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

  7. #7
    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

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    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! \/

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

Ä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
  •  

Solar Speicher und Akkus Tests