mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8bit Timer TCCR0


Autor: Lukas -- (lukas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich wollte einen timer einsettzen, und musste dazu  muss ich den 
register TCCR0 auf 0b001 setzen, damit der Prescaler(teiler) aus ist.

das habe wollte ich so machen:

ldi r16, 0b001
in TCCR0, r16

dann hat er aber gemerckert, das TCCR0 unbekannt sei!?! obwohl der ja 
sogar in der m8def.inc aufgeführt ist.

und einzelene bits zu setzen ging auch nciht:

sbi TCCR0, 0
cbi TCCR0, 1
cbi TCCR0, 2

Warum geht das nicht?

SDanke für die Hilfe!!!

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Probiers mal mit:

out tccr0, r16

Gruß Davis

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau doch noch mal im Datenblatt nach,wie die Register zur 
Timer-Kontrolle wirklich heissen.Insgesamt gibt es 3 Stück (A,B und C) 
pro Timer und dann noch 2 weitere um die dazugehörigen Interrupts zu 
aktivieren/pollen.

Im übrigen wird der IN-Befehl zum lesen von Ports verwendet.Um etwas 
auszugeben lautet der richtige Befehl OUT.

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oha,ich seh grad ich hab das 8-Bit-Timer überlesen.Das mit den 3 
Kontrollregistern gilt für die "grossen" 16-Bit Timer.Für den 
8-Bit-Timer ist TCCR0 natürlich korrekt.

Ersetz einfach das IN durch ein OUT....

Autor: Lukas -- (lukas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke jetzt übernimmt er den wert, aber das interrupt wird trotzdem 
nciht ausgelöst!?! hier mein quellcode:

.include: "m8def.inc"

.org 0x000
rjmp init        ;Reset Handler
reti             ;IRQ0 Handler
reti            ;IRQ1 Handler
reti             ;Timer 2 Compare Handler
reti             ;Timer 2 Overflow Handler
reti             ;Timer 1 Capture Handler
reti             ;Timer 1 Compare A Handler
reti             ;Timer 1 Compare B Handler
rjmp richtungA          ;Timer 1 Overflow Handler
rjmp richtungB        ;Timer 0 Overflow Handler
reti             ;SPI Transfer Complete Handler
reti             ;USART, RX Complete Handler
reti             ;USART, UDR Empty Handler
reti             ;USART, TX Complete Handler
reti             ;ADC Conversion Complete Handler
reti             ;EEPROM Ready Handler
reti             ;Analog Comparator Handler
reti             ;2-wire Serial Interface Handler
reti             ;Store Program Memory Ready Handler


  ldi temp, Low(RAMEND)
  out SPL, temp
  ldi temp, high(RAMEND)
  out SPH, temp        ;Stack Pointer Intialisieren

  ldi r16, 0xFF
  out DDRB, r16        ; PortB ist ausgang

.def temp = r16
.def VQSspeed = r17
.def VQSrichtung = r18


init:
ldi temp, 0b001
out tccr0, temp

ldi temp, 0b1
out timsk, temp



richtungA:

  cbi PortB, 1
  sbi PortB, 0
rjmp richtunga

richtungB:
  Cbi PortB, 0
  sbi PortB, 1

rjmp richtungb

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar, du hast ja auch das globale Interrupt Enable Flag
nicht mittels sei eingeschaltet.

Im übrigen ist dein Code ziemlicher Quak.
Tu dir selbst einen Gefallen und schau mal ins Tutorial:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer

Autor: Lukas -- (lukas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der code ist ja auch noch lange nicht vertig, es ging nun ersteinmal 
darum, das das interrupt fnktioniert! aber danke!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht fertig!

Da sind schon jede Menge Fehler drinnen. Von wegen nicht fertig.

Deine Initialisierung wird nie ausgeführt. Dein Stackpointer
zeigt ins Nirwana, der Port B ist überhaupt nicht initialisiert.
Eine Interrupt Routine wird mit einem reti abgeschlossen und
nicht mit einem Sprung zum Anfang der Routine.

Nicht fertig. psscht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.