PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Write-/Readeeprom



Grillmeister Markus
10.09.2006, 22:52
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 :-k
Hab ich irgendwas wichtiges übersehn oder hat das tiefergreifende Gründe?


$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

Gento
10.09.2006, 23:45
Dim Variable1 As Eram Byte

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

Variable1=wert

Gento

Grillmeister Markus
11.09.2006, 09:10
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:


$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

Grillmeister Markus
11.09.2006, 09:26
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.