Tiny25/Timer1/CTC

OP #2498868
Lesenswert?

hab ich was übersehen?

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: CTC top=OCR1C
// OC1A output: Disconnected
// OC1B output: Disconnected
// Timer1 Overflow Interrupt: On
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
PLLCSR=0x00;

TCCR1=(1<<CTC1)|(1<<CS12);   //CTC_Mode, clk/8
GTCCR=0x00;
TCNT1=0x00;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x63;          //10kHz/100µS

Der Timer bewegt sich weder in der Simulation noch in echt...
#2498952
Lesenswert?

Moinsen,

nach Datenblatt müsste das tun, so wie ich das sehe.
Wenn ich alle Register in Bascom so setze klappert da auch nix im 
Simulator.
Hab ich wohl das selbe übersehen oder das ist ein Bug im Tiny25.
Der Simulator von Bascom ist bei sowas allerdings auch mit Vorsicht zu 
geniessen...

Gruß,
Norbert
OP #2499296
Lesenswert?

Chip lebt wieder, Timer0 läuft auch problemlos.
Aber der Timer1 ist durch nichts zum Leben zu erwecken, rührt sich kein 
Stück.
Mehrere prescaler ausprobiert - nichts.
CTC-Modus rausgenommen - nichts.
Tiny15-Kompatibiltät ist es auch nicht, gestern dachte ich noch, das 
wäre eine extra-fuse. Ist es ja aber gar nicht. Clk stand und steht auf 
int. 8MHz.
Endlosschleife ist natürlich auch drin.
Das gibts doch gar nicht, TCNT1 bleibt stur auf 0.
Gast #2499402
Lesenswert?

Vielleicht habe ich das Problem nicht verstanden, aber folgendes 
Programm lässt eine LED an B4 blinken:


.include "tn85def.inc"

  sbi  DDRB,4
  ldi  r16,(1<<CS13)+(1<<CS12)
  out  TCCR1,r16

loop:
  in  r16,TIFR
  sbrs  r16,TOV1
  rjmp  loop
  out  TIFR,r16
  sbi  PINB,4
  rjmp  loop
OP #2499437
Lesenswert?

So, langsam lichtet es sich...
AVR-Studio ist nicht gewillt, den Timer1 laufen zu lassen (hatte noch 
4.14 drauf, update auf 4.19 hat auch nichts daran geändert)
In der Realität sieht es so aus, als ob es funktioniert. Böse Falle: es 
gibt gar keinen Interrupt für den CTC-mode?? Bin deshalb stillschweigend 
davon ausgegangen, dass T1OV ausgelöst wird bei TCNT1=OCR1C, dem ist 
wohl nicht so...
Habe jetzt OCR1C=0x80 und OCR1A=0 und benutze den OCR1A-Interrupt, 
klappt.
Böser Doppelfehler, so kann man auch viel Zeit vertrödeln :-(
OP #2499447
Lesenswert?

Hm, jetzt wirds komisch:

"Timer/Counter1 acts as an up-counter, counting from $00 up to the value 
specified in the output compare register OCR1C, and starting from $00 up 
again. A compare match with OC1C will set
an overflow interrupt flag (TOV1) after a synchronization delay 
following the compare event."

War meine Vermutung doch richtig....
Allerdings passiert genau dieses NICHT!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren