PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny15 Timer0 Overflow-Int



rungo
04.06.2006, 10:40
Hallo liebe Leute,
ich bekomme im Simulator mit dem Timer0 vom ATtiny15 keinen Overflow-Int zustande und weiß einfach nicht warum. Mit Timer1 funktioniert es, warum nicht mit Timer0?
Kann es sein, daß da neben TCCR0 und TIMSK noch ein anderes Register beteiligt ist?

Grüße!

Schokohoernl
04.06.2006, 12:26
hi!

in welcher sprache programmierst du?? bzw. welchen simulator verwendest du?
bei BASCOM hatte ich auch schon mal das problem, dass der simulator bei timern hängenbleibt. einfachmal den wert von timer0 beobachten und schauen, ob der überhaupt hochgeht.
funktioniert der timer0 wenn du das programm auf den µC flashst?

mfg

schoko

rungo
04.06.2006, 12:51
Hi.
also ich lerne Assembler und benutze den Simulator des AVR-Studio4. Der Timer läuft auch und während der Simulation kann auch per Aktivierung des Interuptflags im TIFR ein Int simuliert werden, aber eben nicht so wie es sollte - löst beim Überlauf den Int nicht aus.
Irgendetwas mach ich falsch oder der Simulator spielt hier nicht mit.
Werde wohl nicht darum herum kommen ein kleines Testprogramm in den ATTiny zu laden... mal sehen.


Gruß!

izaseba
04.06.2006, 12:59
Werde wohl nicht darum herum kommen ein kleines Testprogramm in den ATTiny zu laden...

Das ist der richtige Ansatz, wenn Du den Prescaller, den richtigen Flag in Timsk und Sreg richtig gesetzt hast läuft der Timer 100 % .
Wenn Du Dich nur auf den Simulator verläßt, bist Du verlassen...
So habe ich auch schon mehrere Stunden einen Fehler gesucht.

Gruß Sebastian

rungo
04.06.2006, 15:33
Hallo,
ja, es liegt tatsächlich am Simulator. Schade, ich mag das Teil. Gibt es sowas wie eine Bug-List zum Simulator?

Danke!

rungo
04.06.2006, 16:58
So richtig kann ich es nicht glauben, darum noch ein Versuch:
Weil es auch sein kann, daß mit meiner Installation des AVR-Studios etwas nicht in Ordnung ist, poste ich mal hier den Testcode. Vielleicht hat ja jemand Lust das im Simulator laufen zu lassen. Das mit dem Swap-Befehl ist natürlich nur provisorisch ... war der schnellste Weg ein Portbit zu schalten ;-)
Würde mich freuen wenn es bei jemand funktioniert und ich eventuell nur
ein neuere Version des AVR-Studio benötige.

Habe folgendes nachträglich aus dem Code-Tag genommen, weil ich da die Formatierung nicht hinbekomme :)
;++++++++++++++++++++++++++++++++++++ Timer0 Overflow - Simulatortest
.include "tn15def.inc"
.list

.def temp = r16
.def aus = r17
.cseg

rjmp Init ;0 Reset
reti ;rjmp INT0int ;1 External Interrupt0
reti ;rjmp PINCint ;2 Pin Change Interrupt
reti ;rjmp T1CPint ;3 Timer1 Compare Interrupt
reti ;rjmp T1OVint ;4 Timer1 Overflow Interrupt
rjmp T0OVint ;5 Timer0 Overflow Interrupt
reti ;rjmp EERDYint ;6 EEPROM Ready Interrupt
reti ;rjmp ACPint ;7 Analog Comparator Interrupt
reti ;rjmp ADCint ;8 AD Converter Interrupt

Init:
ldi temp, (1<<CS02)|(1<<CS00) ; CK/1024
out TCCR0, temp
ldi temp, (1<<TOIE0)
out TIMSK, temp
ldi temp, 255
out DDRB, temp
ldi aus, 0b00010000
sei
Warte:
rjmp Warte

T0OVint:
swap aus
out PORTB, aus
reti


Will das Codefragment nicht unkommentiert stehen lassen und poste es darum nocheinmal für den Timer1 des ATtiny15, mit etwas Kommentar.
Daß mir Kritik und Tips willkommen sind, ist klar. Am meisten bewegt mich die Frage, wie man exaktes Timing mit doch eher geringen Mathekenntnissen bewältigt - welche Formel muß ich auf meinem PC (in VB5) laufen lassen?
;********************************* Timer1 OV-INT als Wechselschalter.
.include "tn15def.inc"
.list

.def temp = r16
.def aus = r17
.def xtint = r18 ;Reg wird heruntergezählt (xt) und bei 0 der Port
.equ xt = 6 ;nach so vielen (xt) Timer0-Überläufen bedient
;6 OV-Ints ergeben bei 1.6 MHz und CK/1024 eine (knappe)
;Sekunde nach der Pin2 und Pin 5 im Wechsel on sind..

.cseg

rjmp Init ;0 Reset
reti ;rjmp INT0int ;1 External Interrupt0
reti ;rjmp PINCint ;2 Pin Change Interrupt
reti ;rjmp T1CPint ;3 Timer1 Compare Interrupt
rjmp T1OVint ;4 Timer1 Overflow Interrupt
reti ;rjmp T0OVint ;5 Timer0 Overflow Interrupt
reti ;rjmp EERDYint ;6 EEPROM Ready Interrupt
reti ;rjmp ACPint ;7 Analog Comparator Interrupt
reti ;rjmp ADCint ;8 AD Converter Interrupt

Init:
ldi temp, 0b00001111 ;CK/1024
out TCCR1, temp
ldi temp, (1<<TOIE1)
out TIMSK, temp
ldi temp, 255
out DDRB, temp
ldi aus, 0b00010000 ;PB4/Pin2 an >>swap<< PB0/Pin5 an
ldi xtint, xt
ldi temp, 0
sei
Warte:
rjmp Warte

T1OVint:
dec xtint
cpse xtint, temp
reti
swap aus
out PORTB, aus
ldi xtint, xt
reti



Viele sind sicher schon in Gedanken beim RoboCup 2006. Habe erst gestern davon erfahren. Das Tolle:Es findet hier in Bremen statt. Vom 14 bis zum 18. Juni! Find ich gut ;-)

Herzliche Grüße!

rungo
06.06.2006, 15:26
Wäre nett, wenn mir jemand auf die Sprünge helfen könnte, was die Formatierung im Codefenster betrifft. Im Moment verschlimmbessert sich nur alles, wenn ich da versuche Ordnung reinzubringen...
Gruß

dennisstrehl
06.06.2006, 16:26
Also das erste Programm funktioniert bei mir einwandfrei. (AVR Studio 4.12 Build 460)

MfG

rungo
06.06.2006, 16:46
Danke!
Habe 4.11 Build 401
Hatte mich noch weiter umgesehen und im AVRfreak-Forum einen Beitrag gefunden. Der User hat da schon vor über einen Jahr Atmel auf diesen Bug im Sim. aufmerksam gemacht und sich darüber beschwert keine Antwort erhalten zu haben... Atmel hat aber 'geantwortet' ;-)
Danke nochmal!

Gruß!