-
        

Ergebnis 1 bis 4 von 4

Thema: Probleme mit Write-/Readeeprom

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.09.2004
    Alter
    27
    Beiträge
    54

    Probleme mit Write-/Readeeprom

    Anzeige

    Ich hab hier mal ein kleines Programm zum erfassen der Umdrehungen einer Welle per Lichtschranke und zum umrechnen in km/h.
    Während der Messung bekomme ich auch (richtige) Werte, allerdings steht anscheinen bei der Ausgabe dann nichts im eeprom oder er hat garnichts reingeschrieben
    Hab ich irgendwas wichtiges übersehn oder hat das tiefergreifende Gründe?

    Code:
    $regfile = "2313def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Ddrd.2 = 0
    Ddrd.3 = 0
    Portd.2 = 1
    Portd.3 = 1
    
    Taster Alias Pind.3
    
    Dim Umdrehungen As Byte
    Dim Geschwindigkeit As Single
    Dim Geschwindigkeit_rund As Byte
    Dim Eepromaddress As Byte
    Dim Beste As Byte
    
    
    
    On Int0 Onint0
    Config Int0 = Falling
    Enable Int0
    Enable Interrupts
    
    Print "test"                                                'sicherstellen, dass UART funktioniert
    
    Waitms 500
    
    
    Main:
    Print "main"
    Do
       If Taster = 0 Then
          Waitms 300
          Gosub Messung
       End If
       If Eepromaddress = 255 Then
          Gosub Ausgabe
       End If
    Loop
    
    
    
    
    Messung:
    Print "messung"
    Do
       Umdrehungen = 0
       Waitms 1000
       Geschwindigkeit = Umdrehungen * 0.000142857              'Stecke in m / 1000 * 3600 (bei messzeit = 1s, sonst Strecke in m = Geschwindigkeit in m/Xs)
       Geschwindigkeit = Geschwindigkeit * 3600
       Geschwindigkeit_rund = Round(geschwindigkeit)
       Writeeeprom Geschwindigkeit_rund , Eepromaddress         'geschwindigkeit in jeweils nächste address schreiben
       Print Geschwindigkeit_rund                               'nur testweise, um zu sehen, ob auch ein signal anliegt
       Incr Eepromaddress
            If Geschwindigkeit_rund > Beste Then                'wenn gerade gemessene besser als bisher beste,...
               Beste = Geschwindigkeit_rund                     '...dann beste mit zuletzt gemessener geschwindigkeit ersetzen
            End If
          If Eepromaddress = 255 Or Taster = 0 Then
             Waitms 300
             Return
          End If
    Loop
    
    
    Ausgabe:
    Print "ausgabe"
    Do
       If Taster = 0 Then
          Waitms 300
          Eepromaddress = 0
          Print Beste
             Do
                Readeeprom Geschwindigkeit_rund , Eepromaddress 'geschwindigkeit aus jeweiliger address auslesen
                Print Geschwindigkeit_rund                      'und ausgeben
                Incr Eepromaddress
                Waitms 500
                   If Eepromaddress = 255 Then
                      Print "end"
                      Return                                    'zurück zu main
                   End If
             Loop
       End If
    Loop
    
    
    
    
    Onint0:
       Incr Umdrehungen
    Return

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    Dim Variable1 As Eram Byte

    muß so nicht erst eine Variable dem Eram zugewiesen werden ?

    Variable1=wert

    Gento

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    25.09.2004
    Alter
    27
    Beiträge
    54
    Zitat Zitat von Gento
    Dim Variable1 As Eram Byte

    muß so nicht erst eine Variable dem Eram zugewiesen werden ?

    Variable1=wert

    Gento
    Nein, daran kanns eigentlich nicht liegen. Dieses Programm hier z.B. funktioniert einwandfrei:

    Code:
    $regfile = "2313def.dat"
    $crystal = 8000000
    $baud = 9600
    
    
    Dim A As Byte
    Dim B As Byte
    
    A = 54
    B = 57
    
    Writeeeprom A , 2
    Writeeeprom B , 3
    
    Readeeprom B , 2
    Readeeprom A , 3
    
    Print B
    Print A
    
    End

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.09.2004
    Alter
    27
    Beiträge
    54
    Problem gelöst: Ich dachte, der AT90S2313 hat 256byte eeprom. In wirklichkeit hat er aber nur 128byte. Da ich das Programm immer bis 255 zählen lies, fing er, als das eeprom "voll" war, an, wieder die ersten plätze im eeprom zu überschreiben. Da ich zum Test nur anfangs ein paar signale gegeben hatte, wurden die wieder überschrieben -> es wurde null angezeigt.

Berechtigungen

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