- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 3 von 3

Thema: Mehrere Fragen bezüglich Timer, EEPRom und anderes

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.06.2005
    Beiträge
    108

    Mehrere Fragen bezüglich Timer, EEPRom und anderes

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    In Bascom kenne ich mich noch nicht so super mit den etwas anspruchsvolleren Codes, so If-Schleifen sind kein Problem aber gerade mit dem Timer und EEPRom...und um nicht 5 Threads aufzumachen habe ich hier mal alle meine kleinen Stolpersteine gesamelt und hoffe dass ihr mir helfen könnt.

    1. Einmalige Zeitverzögerung beim Einschalten des Roboters
    Bis jetzt ist es so...ich schalte meinen Roboter ein und er beginnt sofort zu fahren. Das ist ziemlich nervig. Es ist sicher nicht schwer aber wie mache ich eine einmalige Zeitverzögerung? Ich fand da nichts...

    Code:
    $regfile = "m8def.dat"                                      'ATmega8
    $crystal = 3686411                                          'Quarz: 3686411 Hz
    
    Do  
    
       If...                                                               'hier mein Code
    
    Loop
    Wo muss ich eine Verzögerungszeit einschreiben? Klar könnte ich sie zwischen Do-Loop schreiben aber dann würde ja nach jeder (sensorbedingten) Aktion die Wartezeit kommen

    2. Fahrt seit letzter Akkuladung
    Schon bisschen schwieriger ist folgendes. Es soll quasi wie folgt ablaufen:
    Der Akku ist geladen, ich lege ihn ein und starte den Roboter, der Roboter sucht im EEPRom nach einer bereits gespeicherten Zeit (dazu später mehr) und baut darauf auf oder, wenn diese nicht exisitert fängt er bei null an zu zählen. (Ausgabe auf LCD Display, aber die Ausgabe würde ich sicher hinkriegen wenn ich den Timer erst mal richtig zum laufen kriege). Wenn ich nun auf einen Pausetaster drücke soll die Zeit stoppen und die bisherige Zeit im EEPRom des AVR vermerkt werden. Ab hier gibts 2 Möglichkeiten: Die Pause-Zeit läuft ab und der Timer zählt wieder weiter...
    oder der Roboter wird ausgeschaltet. Schaltet man ihn wieder an soll dieser Wert aus dem EEPRom gelesen werden und von diesem Wert aus weitergezählt werden (wie am Anfang)...bis man wieder auf diesen Taster drückt (gleiches Spiel nochmal) oder den "Löschentaster" um den Wert (neue Akkuladung) auf null zu setzen und das Spiel beginnt von vorne.

    Ich könnte dazu allerhöchstens einige Codeschnippsel zusammenbringen, wie das Schreiben eines festen Wertes in den EEPRom oder das lesen aus diesem aber nicht die Vor- und Weiterverarbeitung durch den Timer.

    3. Ab Tasterdruck Zeit zählen
    Ich denke wenn ich das da oben zusammenhab dürfte das hier kein Problem sein. Trotzdem schreib ich das hier mal.
    Also sobald ein Taster gedrückt wird soll eine Zeit in Sekunden laufen (wieder auf LCD Display übertragen, aber bis jetzt nur Nebensache).
    Beispiel: Ich drücke auf einen Taster, der Roboter stoppt für 20 Sekunden. Diese Zeit soll (am LCD) Sekundenweise hochgezählt werden.


    Eigentlich will ich dies alleine schaffen aber mehr als ein paar Codeschnippsel bring ich einfach nicht zusammen. Das Zusammenspiel zwischen den einzelnen Komponenten (Tastendruck -> Timer -> (LCD) -> EEPRom -> ...) fehlt mir


    EDIT: Ich erwarte nicht, dass hier jmd. mit nem fertigen Code kommt, aber paar Anregungen, Links zu Websites wo ich sowas finde und so wären gut

    Gruß
    quad

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.10.2004
    Beiträge
    40

    Re: Mehrere Fragen bezüglich Timer, EEPRom und anderes

    Hallo,
    also zu 1. einfach vor der Schleife ein Wait Befehl einfügen

    Zitat Zitat von quad
    1. Einmalige Zeitverzögerung beim Einschalten des Roboters
    Bis jetzt ist es so...ich schalte meinen Roboter ein und er beginnt sofort zu fahren. Das ist ziemlich nervig. Es ist sicher nicht schwer aber wie mache ich eine einmalige Zeitverzögerung? Ich fand da nichts...
    quad
    Code:
    $regfile = "m8def.dat"                                      'ATmega8 
    $crystal = 3686411                                          'Quarz: 3686411 Hz 
    
    Wait3 ' 3 Sekunden warten
    
    
    Do  
    
       If...                                                               'hier mein Code 
    
    Loop
    mfg,MX3

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Zu 2. und 3.
    Frank hat mal ein schönes Programm geschrieben, was für einen Timer alles nötige fertig in BASCOM-Code ausgibt. rnAvr. Wo du es im Downloadbereicht findest kann ich dir nicht wirklich sagen. Aber mit Google wirst du es finden.
    Damit hast du schonmal die Grundlage, das du Intervalle von einer Sekunde erzeugen kannst.
    In der Timerroutine kannst du dan ja die Minuten und Stunden (ggf. Tage) ausrechnen. Bzw. wenn 60 erreicht sind bei 0 anfangen und die Minuten erhöhen usw...
    Solltest du damit Probleme haben, kann ich dir auch ein Code schreiben um die Zeit zu zählen.

    Dann geht's weiter. Zwar lässt sich der EEPROM oft beschreiben (10000 mal glaube ich.) Aber die wären ja auch bald erreicht, wenn du jede Sekunde im EEPROM verewigen willst. Das wären ein paar Stunden wenn ich das richtig überschlagen habe.
    Somit wäre ein Taster zum "Herrunterfahren" des Bots von Vorteil. Sieht auch wichtig aus
    Wenn er gedrückt wird, kommen wichtige Meldungen auf's Display und die Werte werden gespeichert.
    Mit WRITEEEPROM Wert,Adresse und READEEPROM Wert,Adresse kannst du die Daten schreiben und lesen.

    Und der Rest dazwischen ist ja nur ausrechnen und gegenrechnen der Werte. Falls nicht, nochmal fragen. Gleiches wenn's mit den Code nicht klappt.

Berechtigungen

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

LiFePO4 Speicher Test