PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeit messen und fest im uC speichern? EEPROM?



CapSob
28.05.2008, 23:24
Hallo Leute!

Ich möchte mit dem Timer0 die Zeit messen zwischen Taster drücken und Taster loslassen.

Hab hier im Forum/Wissensbereich auch schon was gefunden. Sollte kein Problem werden. \:D/

:arrow: Controller ist der Mega8 mit internem Takt von 1MHz.

Jetzt aber zu meiner eigentlichen Frage: Ein Programm speicher ich ja im Flash-Speicher. Dann hab ich ja noch den EEPROM-Speicher übrig? :-s Ich will halt kein externen Speicher verwenden, zB ein i2c-EEPROM...

Wenn ich jetzt die Variable nach meiner Zeitmessung habe, wie kann ich die dann zB im EEPROM speichern, dass wenn der uC aus/eingeschaltet wird (Stromlos gemacht) die Variable wieder einliest aus dem Speicher?

Die Zeitmessung und der Schreibvorgang der Variable wird dadurch aktiviert, wenn bevor der uC mit Strom versorgt wird, ein Jumper gesetzt wird. Wenn der Jumper vorher nicht geschlossen wird, sprint der uC gleich zur Hauptroutine.

Hoffe, ihr könnt mir weiterhelfen... :-k

mfg,
René. [/img]

StevieL
29.05.2008, 05:17
Hallo CapSob,

schau doch in der Bascom-Hilfe mal nach WriteEeprom und ReadEeprom. Damit ist es ganz einfach.

CapSob
29.05.2008, 15:20
danke, genau das habe ich gesucht!

kann vllt jemand ein kleines beispiel machen, wenn ich zB den wert 5921 speichern und lesen will? thx!

mfg,
Capsob.

StevieL
29.05.2008, 18:11
Hallo Capsob,

so wie es in der Hilfe steht:



dim Wert as word

'schreiben:
Wert = 5912
writeeeprom Wert, 1
'Wert wird an die ersten Stelle im Eeprom geschrieben
'Achtung: zweite Stelle wird mitbeschrieben, da der Wert ein Word ist und zwei Bytes belegt.

'lesen:
readeeprom Wert, 1
'Der Inhalt von Byte 1 und 2 im Eeprom wird in die Variable Wert eingelesen

CapSob
29.05.2008, 22:37
danke! so verstehe ichs...

stefan_Z
01.06.2008, 11:11
Oder mach es so:
Dim b as ERAM byte
Dann wird die Variable direkt im EEP abgelegt.
Sollte man natürlich nur schreiben, wenn nötig...

CapSob
02.06.2008, 18:56
Hallo!

Kann man das so schreiben?


'ATMega8, 1MHz

Enable Interrupts

Dim GemesseneZeit As Word
GemesseneZeit = 1

Dim Gemessen As Bool
Gemessen = 0

While TimeSet = 0 'TimeSet aktiv! Jumper wurde gesetzt vor dem Einschalten
If BlinkerLinks = 0 Then 'Wenn Taster gedrückt, Timer0 aktivieren
Config Timer0 = Timer, Prescale = 8 'Konfiguriere Timer0 bis 255 (8-Bit)
Enable Timer0 'schalte den Timer0 ein
On Timer0 ErhoehenTimer0 'verzweige bei Timer0 überlauf zu ErhoehenTimer0
Timer0 = 0 'Timer0 startet bei 0

While BlinkerLinks = 0
'Schleife solange, wie BlinkerLinks gedrückt ist
Wend

Gemessen = 1 'Variable kann geschrieben werden
Disable Timer0 'Timer0 deaktivieren
End If
If Gemessen = 1 Then
GemesseneZeit = GemesseneZeit / 4000 'Circa 1000 pro Sekunde = Millisekunden
writeeeprom GemesseneZeit, 1 'GemesseneZeit ins EEPROM schreiben
Gemessen = 0 'Variable zurücksetzen
End If
Wend


readeeprom GemesseneZeit, 1

Do

toggle PORTB.2

wait GemesseneZeit

Loop

End


ErhoehenTimer0: 'ISR von Timer0
GemesseneZeit = GemesseneZeit + 1 'Millisekunden; 3906,26 in der Sekunde
Return

vorallem mit dem "disable timer0", etc.?

please feedback!

mfg,
René.