Forum: Mikrocontroller und Digitale Elektronik ATTiny85 Timer1 zaehlt nicht


von verstehgarnixmehr (Gast)


Lesenswert?

Hallo,
bin kurz vorm verzweifeln...
Brauche in meinem Programm 2 Timer, Timer0 bekomme ich auch schoen 
initialisiert und er laeuft normal, aber bei Timer1 klemmts irgendwie.
Bekomme ihn zwar auch initialisiert, aber er zaehlt das TCNT1 nicht hoch 
und somit bekomme ich natuerlich auch nie meinen ersehnten Ueberlauf...

Hab die Vermutung irgendein Bit in einem Register setzen zu muessen, 
aber trotz mehrmaliger Datenblattsitzung hab ich den Haken nicht 
gefunden. Hoffe mir kann hier jemand auf die Spruenge helfen.

Initialiesere die Timer wie folgt...
...
TCCR1 = 1;            // no prescaler
TCNT1=0x00;     // reset TCNT1

TCNT0 = 0;          //  TCNT0 Timer auf 64*256 einstellen
TCCR0A = 0;    // Timer 0 normal mode
TCCR0B = 3;          // clock/64

TIMSK |= (1<<TOIE1);
TIMSK |= (1<<TOIE0);
....

Danke vorab
PS nutze AVR Studio, Win AVR, und will nen ATTiny85 zum zaehlen bringen

von Matze (Gast)


Lesenswert?

Funktioniert es im Simulator nicht oder in Hardware?

von verstehgarnixmehr (Gast)


Lesenswert?

Im Simulator funktioniert es nicht.
Der Prescaler wird eingestellt, ich kann auch den TCNT1 Wert manuell 
aendern, aber er wird nicht hochgezaehlt...
Koennte es denn sein, das der Simulator nur spinnt und ich garnix 
uebersehen habe? Werde es mal versuchen per Hardware zu testen indem ich 
im der ISR ein LED setze...
Meld mich dann nochmal

von verstehgarnixmehr (Gast)


Lesenswert?

Hallo dann nochmal,
also habe in der ISR des Timer1_Overflow jetzt mal versucht ein LED 
einzuschalten, aber der PIN gibt nichts von sich.
Sieht also wirklich nach nem programmierfehler aus, bzw. einem 
uebersehenem Bit?
hatte denn schonmal jemand dieses Problem bzw. den Timer1 des ATTiny85 
genutzt und sieht meinen Fehler?
Danke fuer jeden Tip vorab!

von verstehgarnixmehr (Gast)


Lesenswert?

Also, ich komm nicht dahinter.
Werd jetzt einfach mal abschalten und morgen mit frischem Kopf dran 
gehen. Vielleicht hilft das!?
Vielleicht hat ja jemand noch den passenden Hinweis, der mich morgen
dann gluecklich macht;)
Schoenen abend allen...

von spess53 (Gast)


Lesenswert?

Hi

Benutze mal den Simulator2. Der andere scheint Probleme mit dem ATTiny85 
zu haben.

MfG Spess

von senex24 (Gast)


Lesenswert?

Ohne die Fuses verstellt zu haben bringt nachfolgendes Programm an PB4 
ein Rechtecksignal mit ca. 1950 Hz:


.def  tmp0  = r16

.cseg

.org  0
  rjmp  reset

.org  OVF1addr
  sbi    PINB,4    ; toggle
  reti

reset:
  sbi    DDRB,4
  ldi    tmp0,(1<<CS10)
  out    TCCR1,tmp0
  ldi    tmp0,(1<<TOIE1)
  out    TIMSK,tmp0
  sei
  rjmp  pc

von verstehgarnixmehr (Gast)


Lesenswert?

Hallo,
also habe heute dann festgestellt, dass nur der Simulator nicht will, 
aber in der Hardware funktioniert der Timer normal. Hab beim testen 
gestern Quatsch gemacht, passiert schonmal.
Also fuer jeden mit aehnlichem Problem, der Simulator des AVR STudio mag 
den ATTiny85 nicht so gerne...

@Spess
Werde dem Tip mal nachgehen. Hab gerade auf der atmel-site darueber 
gelesen und muss sagen ich haette nicht gedacht, das die Simulatoren so 
viele Stolperdraehte bereithalten(auch der Simulator2).

Danke auf jeden Fall, dachte gestern schon ich sei total bekloppt.

von kein_Name (Gast)


Lesenswert?

Ich hab den Fehler gefunden.

Der Simulator löscht jedes mal nach einen Interruptsprung von Timer 1 
das Globale Interrupt Flag. einfach in den Interrup-Sub "sei" 
reinschreiben.

TIM1_OVF:  ;Timeroverflow 1
  sei     ; Globales Interrupt freigeben
  push r16 ;Sreg sichern....

  IN r16,SREG
  push r16
       ...
       ...
       ...

        pop r16
  OUT SREG,r16
  pop r16


reti

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.