Forum: Mikrocontroller und Digitale Elektronik BASCOM Timer 3,6864Mhz -> 0,01 sec (AT90S4433)


von Achim Hoffmann (Gast)


Lesenswert?

Hallo,
ich habe einen Countdown-Schalter mit einem AT90S4433 gebaut. Der Quarz
hat eine Frequenz von 3,6864Mhz. Jetzt möchte ich die Zeit in 0,01s
Schritten einstellen können.
Wie muss ich den Timer0 einstellen?
Ich habe verzweifelt Gegoogelt aber nichts gefunden.
Vielen Dank im Voraus,
Achim Hoffmann

von Hubert.G (Gast)


Lesenswert?

Wo liegt dein Problem? Mit dem Vorteiler durch 256 teilen, beim Rest die
letzten zwei Stellen weg und du hast den Wert für den Timer.

von Achim H. (el-achimo)


Lesenswert?

Hallo Hubert,
Mein Problem sind die Grundlagen. Ich verstehe die Berechnung nicht um
auf meine 0.01sec zu kommen.
Viele Grüße,
Achim

von crazy horse (Gast)


Lesenswert?

3,6864 MHz=1/3,6864µs. Für 10ms brauchst du also 36864 Takte. Mit
Vorteiler 256 also einen Reload-Wert von -144. (144*256=36864)

von Hubert.G (Gast)


Lesenswert?

Du möchtest aus den 3686400 Hz 100Hz machen, 1/0,01 = 100.
Du musst im Datenblatt nachsehen welche Teiler sind fix eingebaut und
dann mal probieren, in dem Fall durch 256, das ergibt dann 14400. Wenn
du diese Zahl in den Timer einstellen könntest würde jede Sekunde ein
Interrupt ausgelöst und du hättest 1 Sekunden Schritte, wenn du 144
eingibst dann hast du 0,01 Sek.
Also 0,01 Sek sind 100Hz und die vorhandene Frequenz mit den
vorgegebenen Teilern teilen bis die 100Hz herauskommen.
Besser kann ich es dir leider nicht erklären.

von Achim H. (el-achimo)


Lesenswert?

Wenn ich das richtig verstehe, lasse ich meine Interruptroutine 144 mal
nix tuhen um danach die Befehle zu verarbeiten?

Ontimer0:
   incr dummy
   if dummy = 144 then
      dummy = 0
      Decr Zeit3
      If Zeit3 = 0 And Zeit2 > 0 Then
         Zeit3 = 99
         Decr Zeit2
         If Zeit2 = 0 And Zeit1 > 0 Then
            Zeit2 = 99
            Decr Zeit1
         End If
      End If
   end if
Return

So ungefär??
Grüße,
Achim

von Hubert.G (Gast)


Lesenswert?

Nein, du musst im TCCR0 den Teiler durch 256 einstellen und dann im
Timer Register TCNT0 den entsprechenden Wert, in diesem Fall 256 - 144=
112 eintragen, starten, bei 256 kommt der Interrupt, Timer stoppen, 112
eintragen, starten usw. Der Interrupt kommt alle 0,01 sek.
Mit dem Timer1 ginge das schöner, da kannst du einen
Compare-Match-Interrupt auslösen.

von Achim H. (el-achimo)


Lesenswert?

Vielen Dank.
Das war die Lösung für mein Problem!
Habt Ihr noch einen Tipp für ein gutes Referenzhandbuch für BASCOM?
Viele Grüße,
Achim

von Daniel (Gast)


Lesenswert?

Hallo Achim,

ich kann Dir zwei Bücher empfehlen:

Roland Water --- Microcontroller Lehrbuch
Claus Kühnel --- Programmieren der AVR RISC uC

Zweites ist für den Fortgeschrittenen meiner Meinung nach
interessanter. Es werden deutlich mehr Anwendungsbeispiele
genannt....die dafür etwas knapper. Walter beschreibt mehr die
Grundlagen.

Kannst Du mir evtl. mit dem Quelltext zu deinem o.g. Projekt aushelfen.
Ich muss in Bascom eine Stoppuhr mit 0,01sec Auflösung realisieren.

Viele Grüße
Daniel

von Achim H. (el-achimo)


Lesenswert?

Hallo Daniel,
mail mir mal an:
info@elachimo.de
Was soll die Uhr denn können?
Viele Grüße,
Achim

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.