Forum: Mikrocontroller und Digitale Elektronik Wie Timer1 stoppen


von Peter J. (hubipet)


Lesenswert?

Hallo


habe folgendes kleines Problem

Ich versuche einen Timer zu bauen der von einer vorgegebenen Zeit bis 0 
runterzählt.

Ich setze den Timer so auf

  ldi r16, 0
  out TCCR1A, r16
  ori r16, (1<<WGM12)
  out TCCR1B , r16

Starte in mittels eines Pushbuttons

  in r26, TCCR1B
  ori r26, (1<<CS12)
  out TCCR1B, r26

Das klappt!

Jetzt möchte ich ihn so stoppen

  in r26, TCCR1B
  ori r26, (0<<CS12) |(0<<CS11) |(0<<CS10)
  out TCCR1B, r26

Das klappt nicht (Kontroll-LED blinkt munter weiter)

Wo ist der Denkfehler?

von holger (Gast)


Lesenswert?

>Das klappt nicht (Kontroll-LED blinkt munter weiter)
>
>Wo ist der Denkfehler?

1 oder 0 ist immer noch 1;)

von Peter (Gast)


Lesenswert?

Peter Jänsch schrieb:
> ori r26, (0<<CS12) |(0<<CS11) |(0<<CS10)

überlegt doch mal wie ein "oder" arbeitet

1 or 0 = 1

du kannst also mit einem oder niemals ein bit löschen!!! (versucht mal 
mit UND)

von Karl H. (kbuchegg)


Lesenswert?

Peter Jänsch schrieb:

> Wo ist der Denkfehler?

Das du denkst das Gegenteil von

   Wert OR ( 1 << Bit )

wäre

   Wert OR ( 0 << Bit )

Hinweis: wenn man eine 1 um zb 4 Stellen nach links schiebt, erhält man 
eine Zahl in der genau das 4. Bit auf 1 gesetzt ist.

Wenn man aber eine 0 um zb. 4 Stellen nach links schiebt, erhält man 
....  immer noch 0. Eine 0 kann man schieben sooft und in welche 
Richtung man will, sie bleibt immer 0.


Bitmanipulationen

von Peter J. (hubipet)


Lesenswert?

Oha da hatte ich wohl eine totale Blockade!!!

Mit UND gehts. Natürlich

Danke für die kleinen Schläge auf den Hinterkopf

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.