Sekunde doppelt so lang ??

Gast #143255
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
Gast #143257
Lesenswert?
• ▲
▼
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 !
Angehängte Dateien:
Gast #143259
Lesenswert?
• ▲
▼
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
Gast #143260
Lesenswert?
• ▲
▼
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
Gast #143262
Lesenswert?
• ▲
▼
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 !
Gast #143263
Lesenswert?
• ▲
▼
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)
Gast #143264
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.