-         

Ergebnis 1 bis 7 von 7

Thema: Zeit messen und fest im uC speichern? EEPROM?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162

    Zeit messen und fest im uC speichern? EEPROM?

    Anzeige

    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. \/

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

    mfg,
    René. [/img]

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo CapSob,

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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    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.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo Capsob,

    so wie es in der Hilfe steht:

    Code:
    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
    Gruß, Stefan

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    danke! so verstehe ichs...

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    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...

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Hallo!

    Kann man das so schreiben?

    Code:
    '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é.

Berechtigungen

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