Ok hab das programm umgeschrieben, dass die ISR nicht gestartet ist lag daran dass die mit IR von Timer0 verbunden war. und ich wollte ja OC0 nutzen.
Und zum 2. Problem ich wollte ja eine veränderliche Spannung am Ausgang
Und diese ist ja abhängig von der relativen Einschaltdauer, das Problem bei CTC mit Toggle OC0 ist, dass die Einschaltdauer immer bei 50% ist.
Zum Sreg.7 das liegt daran, dass ich heute mit dem Handbuch gearbeitet habe und mit den Befehlen von Bascom noch nicht so vertraut bin. Ich werds aber versuchen hier im Forum zubeachten.
So und als Beweiß mein PWM-Programm:
die Ocisr ist nicht nötig und hat im Fast-PWM-Modus die selbe Periodendauer wie die Timerisr, nur um OCR0 phasenverschoben.
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Dim I As Integer
Dim J As Integer
Enable Interrupts 'interrupts global zulassen
On Oc0 Ocisr 'Interrupt bei compare match OCR0=TCNT0
'On Timer0 Timerisr
Tccr0 = &B01101101
'FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
'WGM=3 Fast PWM
'COM=2 Clear OC0 on compare match
'CS0=5 prescaler 1024
Timsk.ocie0 = 1 'aktiv compare match interrupt
Timsk.toie0 = 0 'deaktiv Timer0 Overflow interrupt
Ocr0 = 200
Ddrb.3 = 1
Do
Loop
End
Ocisr:
J = J + 1
J = J Mod 1000
If J = 0 Then
Print "interrupt oc" 'ausgabe aller 2^8*1000*1024/16Mhz
End If
Return
'Timerisr:
'I = I + 1
'I = I Mod 1000
'If I = 0 Then
' Print "interrupt timer"
'End If
'Return
danke für eure Hilfe
Lesezeichen