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

Thema: Bascom - eeprom adress

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.12.2004
    Alter
    37
    Beiträge
    36

    Bascom - eeprom adress

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe das Eeprom Problem zum Teil alleine gelöst. Im Simulator funktioniert es auch , aber im MC .... :-S

    Mein Programm - dies ist nur zum Test - soll eine Singlezahl (hier Test) abspeichern und diese bei Neustart des MC (mit Stromverlust) zum weiteren Gebrauch wieder aus dem Eeprom laden.
    Das Programm liest aber beim Reset aus dem MC in der Wirklichkeit nur 0.000 , soll aber 123.45 lesen etc.

    Vermutlich liegt der Fehler bei "writeeeprom test" .

    Code:
    $regfile = "m16def.dat"
    $baud = 9600
    $crystal = 16000000
    
    Dim Test As Eram Single , Test2 As Single
    
    Dim Auswahl As Byte
    Ganzoben:
    
    Input "0 = Unten:  1= Oben" , Auswahl
    
    If Auswahl = 0 Then
       Goto Unten
    Elseif Auswahl = 1 Then
       Goto Oben
    End If
    
    Oben:
    Do
    Print Test2
    Loop
    
    
    Unten:
    
    Test = 123.456
    Writeeeprom Test , 10    <----Fehler
    
    
    Test2 = Test
    Print Test2
    
    
    
        Goto Ganzoben

    Muss ich da irgendwas besonderes eingeben???
    Wo ist der Fehler im Code?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Probier mal Dim Test As Single.

  3. #3
    Gast
    Hallo, das hat nichts gebracht (nicht eingeloggt)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Die Zuweisung der Zahl in ein Single ist so auch richtig? Probier das ganze mal mit WORD. (Und eine Wert der in WORD passt).

    Die Bascom Hilfe beschreib das Problem so:

    Dim b as byte, bx as ERAM byte
    B= 1
    Bx=b ‘ write to EEPROM
    B=bx ‘ read from EEPROM

    Wenn ich WORD mit Writeeeprom in eine bestimmte Adresse schreibe wurd bei mir der überhängende Wert nach weiter oben in den EEPROM geschrieben und ich kommte an der Startadresse das Orginal auslesen.

  5. #5
    Gast
    kannst mir mal dein beispiel posten? ich habe mir bereits die verschiedenen hilfen durchgelesen, aber irgendwo stehe ich gewaltig auf dem schlauch

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Hier die relevanten Auszüge:
    Code:
    $regfile = "m16def.dat"                                     'Mega16
    $crystal = 12000000                                         '12 MHz
    
    Dim Timervorgabe As Word                                    'Preload für Sekundentakt
    Readeeprom Timervorgabe , 106                               'ist abgelegt im EEPROM
    If Timervorgabe > 30000 Then Timervorgabe = 18661           'wenn nicht im EEPROM programmiert, dann errechneten Wert nehmen
    
    Readeeprom Minhell , 2
    Readeeprom Maxhell , 4
    Readeeprom Schwellwert , 6
    
    Do
         Gosub Getir
         If Command = 0 Then Return
         If Command = 1 Then
          Pwmmax = A
          Writeeeprom Pwmmax , 100
         End If
         If Command = 7 Then A = A - 5
         If Command = 9 Then A = A + 5
         If A < 0 Then A = 0
         If A > 250 Then A = 250
         Ocr2 = A
         Upperline
         Lcd A ; "   "
        Loop
    
    Gosub Getir
       If Command = 0 Then Return
       If Command = 1 Then
        Minhell = B
        Writeeeprom Minhell , 2
       End If
    
    Gosub Getir
       If Command = 0 Then Return
       If Command = 1 Then
        Maxhell = B
        Writeeeprom Maxhell , 4
       End If
    
    Gosub Getir
       If Command = 0 Then Return
       If Command = 1 Then
        Schwellwert = B
        Writeeeprom Schwellwert , 6
       End If
    
    Timervorgabe = C
    Writeeeprom Timervorgabe , 106
    Alle Variablen sind Byte außer Timervorgabe ist Word

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    13.12.2004
    Alter
    37
    Beiträge
    36
    Danke - hast mir sehr geholfen. Muss es jetzt nur noch in das eigentliche Programm einbauen.
    Poste noch mein Beispiel - vielleicht hilft es jemanden auch mal
    Das Beispiel ist sehr einfach und nur aufs Eeprom bezogen.


    $regfile = "m16def.dat"
    $baud = 9600
    $crystal = 16000000


    Dim Auswahl As Bit
    Input "Speichern, 0 Lesen, 1)" , Auswahl

    If Auswahl = 0 Then
    Goto Speichern
    Elseif Auswahl = 1 Then
    Goto Lesen
    End If

    Lesen:
    Do
    Dim Test As Single 'Preload für Sekundentakt
    Readeeprom Test , 106
    Print Test
    Loop

    Speichern:
    Dim C As Single
    C = 123.456
    Test = C
    Writeeeprom Test , 106
    Goto Lesen

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    13.12.2004
    Alter
    37
    Beiträge
    36
    Eine Frage habe ich aber noch - wo bekomme ich die Adresse (hier 106) her?

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Die kannst du dir fast aussuchen. Du musst nur dran denken, das pro Adresse max. 1 Byte aufgenommen werden kann. Wenn du in die Adresse 100 ein Word schreibst wird die Adresse 100 und 101 belegt. 101 sollte dann nicht mit einer anderen Zahl überschrieben werden sondern erst wieder ab 102.
    Die 106 z.B. habe ich genommen, weil ich den Speicher davor für andere Daten brauche.
    Du darfst aber die physikalische Grenze nicht überschreiten (aber ich denke da wird Bascom schon eine Fehlermeldung anzeigen). Die Grenze beim M16 müsste aus dem Bauch herraus bei 512 Bytes liegen. Also hast du 512 Adressen zum beschreiben.
    Aber wie schonmal gesagt, Adresse 0 nicht benutzen, weil diese nach einem Reset gelöscht sein kann. Von Atmel gibt es aber eine AppNote dazu. Wenn du diese Adresse um alles in der Welt brauchst müsstest du da das nochmal nachlesen. Kann sein das nicht alle Typen betroffen sind.

    EDIT: Mit Bascom kannst du den Inhalt des EEPROM auch auslesen und dann sehen welche Adressen beschrieben sind. Wäre ja auch mal ein Versuch wert, erstmal dein Single in den EEPROM zu schreiben und dann zu schauen ob die Adressen überhaupt belegt wurden.
    Oder es ist ggf. nur bis max. Word möglich. Da ist es ja noch relativ einfach die Zahl wieder zusammenzufügen. Einfach Byte mal Byte.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    13.12.2004
    Alter
    37
    Beiträge
    36
    danke...



    weitere 15 zeichen :-D

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad