- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 12

Thema: Speicherfunktion ???

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2017
    Beiträge
    21

    Speicherfunktion ???

    Hallo zusammen,

    ich würde gerne den letzten Zustand nach einem Tastendruck Speichern.

    Es soll so funktionieren.

    Strom am Attiny AN.
    Jetzt leuchtet eine LED für 10 Sekunden.

    Wenn ich jetzt den Taster mindestens 5 Sekunden drücke schreibt es mir einen neuen Wert in das Eeprom und bei einem Neustart leuchtet die LED nicht mehr da ja der neue Wert im Eeprom steht ( LED aus )

    Wenn ich den Taster jetzt wieder für mindestens 5 Sekunden drücke schreibt er mir wieder den alten Wert ins Eeprom und nach einem Neustart leuchtet auch die LED wieder für 10 Sekunden.

    Könntet Ihr mir bitte sagen wie ich das am einfachsten Umsetzen kann?

    Ich weiß nicht welcher Weg der einfachste ist um ans Ziel zu kommen ?
    Und wie genau lautet hier der Fachbegriff für diese Funktion?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo,

    wo hängt es denn? Hast du schon angefangen? Funktioniert schon ein Teil?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2017
    Beiträge
    21
    So wirklich viel habe ich leider noch nicht.

    Code:
    int main (void)
    {
    	DDRB |= (1<<PB1);     // Ausgang für LED
    	DDRB = ~(1<<PB0);     // Eingang für Taster
    	PORTB |=  (1<<PB0);   // Pullup Einschalten 
    	
    	PORTB = (1<<PB1);
    	_delay_ms(10000);
    	PORTB &= ~(1<<PB1);
    	
    	while (1)
    	{
    		
    		
    	}
    }

    Jetzt ist die Frage mit welcher Funktion kann ich zum Erfolg kommen ?
    Natürlich benötige ich einen Taster das ist mir soweit klar.

    Nur eben wie mache ich die Afrage das der Taster mindestens 5 Sekunden gedrückt wurde ?
    Und wie sage ich ihm das er den neuen Wert auch nach dem Neustart speichern soll?

  4. #4
    shedepe
    Gast
    Nun jetzt zerlegen wir dein Problem mal in einige kleine Teilprobleme:

    1. Einlesen eines Tasters
    //Entnommen hier raus: https://www.mikrocontroller.net/arti...R-GCC-Tutorial
    Code:
    /* Fuehre Aktion aus, wenn Bit Nr. 1 (das "zweite" Bit) in PINC gesetzt (1) ist */
    if ( PINC & (1<<PINC1) ) {
      /* Aktion */
    }
    2. Zeit messen können.

    Variante 1: Einfach 5 Sekunden schlafen und dann schauen ob der Taster immer noch High ist
    Variante 2: Mit einem Timer der alle 10 Millisekunden eine Variable hochzählt die Zeit messen. Dazu merkt man sich in der Hauptschleife beim ersten mal Abfragen den Wert der Zeitvariable und prüft diese bei jeden Durchlauf ab. Wenn 5 Sekunden vergangen sind noch mal den Eingangspin des Tasters prüfen. (Hat den Vorteil man kann die Zeit auch noch anders verwenden)

    3. In den EEPROM schreiben

    Das lesen/ schreiben in den EEPROM ist vom Code her eine etwas aufwendigere Geschichte. Deshalb verweise ich an der Stelle nur auf die passende Stelle im AVR GCC Tutorial: https://www.mikrocontroller.net/arti...Tutorial#EEMEM
    Ein Hinweis dabei: Man sollte das EEPROM ringweise beschreiben, da die einzelnen Zellen eine stark begrenzte Anzahl von Schreibzyklen haben.


    Schreib einfach wenn du konkrete Fragen zu einem der Punkte hast.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2017
    Beiträge
    21
    Einlesen eines Tasters ist kein Problem.

    Nur einen Timer der alle 10 Millisekunden eine Variable hochzählt und die Zeit mist ist ein Problem

    Würde die Berechnung für die 10 ms so passen für den Timer ?

    Code:
    TCCR0 |= (1<<CS02) | (1<<CS00)
    TCNT0 = 158

  6. #6
    shedepe
    Gast
    Dann mach doch erst mal die Variante mit _delay_ms(5000).
    Also
    Code:
    if(Pin HIGH)
    {
        _delay_ms(5000);
        if(Pin ist immer noch HIGH)
        {
           //DO some stuff
           //Und natürlich die Pin ist high abfrage durch den richtigen Code ersetzen ;)
        }
    }
    Bezüglich Timer: Lies das Datenblatt, da wird das erklärt Ich weiß es leider auch nicht auswendig.

Berechtigungen

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

LiFePO4 Speicher Test