PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Fragen bezüglich Timer, EEPRom und anderes



quad
15.09.2005, 17:49
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...



$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

mx3
15.09.2005, 19:03
Hallo,
also zu 1. einfach vor der Schleife ein Wait Befehl einfügen



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



$regfile = "m8def.dat" 'ATmega8
$crystal = 3686411 'Quarz: 3686411 Hz

Wait3 ' 3 Sekunden warten


Do

If... 'hier mein Code

Loop


mfg,MX3

Marco78
15.09.2005, 22:16
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.