Hi.
Der Timer0 ist auf 8000 Zyklen pro Interrupt eingestellt (64 Prescale
und 125 Counter = 8000). bei jedem Interrupt wird Bit 0 im MODE
register gelöscht. Um eine Sekunde zu messen, wollte ich dieses Bit
setzen, und warten bis es rückgesetzt wurde und das ganze 125 mal. Der
ATMEGA16 ist auf 1MHz interner Oszillator eingestellt. Problem ist,
dass diese Sekunde effektiv als zwei Sekunden im Endeffekt rauskommen.
(Timergenauigkeit mit Oszi an PORTC.2 [stellenwahl für LED-Display]
nachgemessen)
gleich nebenbei :
in der Hauptroutine lasse ich RANDOM von 0-39 durchzählen, und bei 40
erfolgreich auf 0 setzen. In der Funktion ROULETTE_PRINT_OUT lasse ich
erst überprüfen, ob RANDOM zwischen 1 und 36 liegt. Wenn es außerhalb
liegen sollte, sollte die eigentliche Routine "übersprungen werden.
Dies funktioniert aus einem mir unersichtlichen Grund auch nicht. Der
Rest der Routine funktioniert ebenfalls einwandfrei.
Die FUnktion WAIT_TIMER liegt zusammen mit allen anderen
Wartefunktionen in nachfolgender LCD-Library.
Hi.
Gesetze dürfen nicht gebrochen werden ! Dazu zählen anscheinend auch
Murphy's ... Nach Stunden der grübelei (okay, es lief noch ein TV-Film
nebenbei ;-) ) hab ich verzweifelt obigen Beitrag geschrieben. Keine
halbe Stunde nachdem mein Problem das Internet befiel hab ich die
Lösung gefunden ! ... wenigstens zu einem Problem. Die Rouletteanzeige
funktioniert nun prima, der Timer allerdings noch nicht. Im Anhang
befindet sich die geänderte Datei. Ich suche nachwievor nach einer
Lösung für die Zeitdehnung in der Software.
Tja... bin wohl übermüdet ! Gute nacht !
also im simulator braucht deine loop 2048 ms
ich muß zugeben, daß ich durch deinen loop nicht ganz durch steige.
warum machst du deinen overflow int nicht alle 10 oder 100 ms. das wäre
doch sicherlich etwas einfacher 1 sekunde so zu "berechnen", weil du
ja den timer für nichts anders benutzt
Hallo,
wenn bei Dir die Zeit langsammer vergeht, dann überprüfe mal die
Geschwindigkeit, mit der sich Dein Aufbau bewegt, oder vielleicht
befindest Du Dich in der nähe eines Schwarzen Loches?
Viele Grüße,
Einstein
Hi.
Schwarzes Loch isses nich. Wollte mir mal eins holen, aber dann wars
bei ALDI ausverkauft ;-)
Ich fürchte außerdem, dass die Bewegung meines Versuchsaufbaus nicht
hauptsächlich in den ersten 3 Dimensionen stattfindet. Dann müsste sich
ja mein Versuchsaufbau mit 259627,8845 km/s durchs All bewegen. Seltsame
Vorstellung, da er eben unbewegt vor ir auf dem Tisch steht. ;-)
So richtig testen kann ichs im Simulator relativ schlecht. Ich
programmiere mit einem selbstgebastelten ISP-Programmer via Parallel,
und da mein Rechenknecht (2GHz) leider KEINEN LPT anschluss hat und
sich das AVRStudio 4 beim Installieren verabschiedet hat, muss ich auf
einen etwas trägeren Rechenknecht zurückgreifen (233 MHz) und da
braucht ne Sekunde schon mal ne Minute.
Aaaaalso : Timer Prescale 64 * TImer Counter 125 = 8000 (nach Adam
Riese)
Prozessortakt 1000000 / Timerdelay 8000 = 125, also müssen 125 Zyklen
gewartet werden, nichaa ?
Übrigens ist der Timer nicht unnütz. Er steuert zum Bleistift relativ
erfolgreich das Multiplexen der LED-Anzeige !
MOMEEEENNT :
wenn im Simulator ein Zyklus 2048 ms braucht, dann : 2048000 / 8000 =
256 !!! Da wird nicht LOOP bis 0 dekrementiert, da wird anscheinend
LOOP zu beginn auf 0 gesetzt (erster subi-Aufruf 0-1 = FF, nicht null,
daher noch 255 mal aufrufen). Doch wo wird Loop 0 ???
(Danke Sebastian)
hab deinen fehler gefunden.... denke ich mal
ENDLESS:
ldi TEMP1,125 --> dein timer erwartet den wert in loop und nicht
in
temp1. also dein dec geht auf r18 und nicht r22
call WAIT_TIMER
inc RANDOM
cpi RANDOM,40
brlo ENDLESS_OK
ldi RANDOM,0
ENDLESS_OK:
call ROULETTE_PRINT_OUT
rjmp ENDLESS