Folgende Umgebung:
ATtiny13 mit 4,8Mhz
Ziel:
an den Ausgängen PortB.0 und PortB.1 soll ein PWM Signal mit 25 Hz anliegen. Das Signal hat 2 Zustände 1. 20% High 80% Low 2. 80% High 20% Low Das habe ich mit Timer_isr ganz gut hinbekommen. als nächstes muss der Tiny noch auf die Eingänge PortB.2 - B.5 reagieren und unterschiedliche PWM Zustände an den Ausgängen schalten.
Nachdem ich das wie angehangen realisiert habe, habe ich ein sehr uistabiles Signal, so das in unregelmäßigen Abständen das PWM Signal unsauber wird ( Umschaltung von Low nach High oder anders herum fehlt.
Kann mir dafür jemand einen Tip geben ?
Code:
$regfile = "ATtiny13.dat"
'$crystal = 4800000
Dim Hi As Byte
Dim Lo As Byte
Dim Phase As Bit
Dim Pwm1 As Bit
Dim Pwm2 As Bit
Const Reload = 95 'um 24 Hz zu erzeugen 4,8Mhz/8/64
$hwstack = 10 'Eingefügt Weil die Standardvorgaben
$swstack = 10 'für den Tiny13 zu
$framesize = 20 'hoch sind.
Declare Sub Taste_1
Declare Sub Taste_1a
Declare Sub Taste_2
Declare Sub Taste_2a
Ddrb = &B00000011
Portb = &B11111111
Lo = Reload - 13
Hi = Reload - Lo
Phase = 1
Config Timer0 = Timer , Prescale = 256
On Timer0 Timer_isr
Enable Timer0
Enable Interrupts
Pwm1 = 0
Pwm2 = 0
Do
Debounce Pinb.2 , 1 , Taste_1 , Sub
Debounce Pinb.2 , 0 , Taste_1a , Sub
Debounce Pinb.3 , 1 , Taste_2 , Sub
Debounce Pinb.3 , 0 , Taste_2a , Sub
Loop
Timer_isr:
If Phase = 1 Then
Portb.0 = Pwm1
Portb.1 = Pwm2
Load Timer0 , Lo
Phase = 0
Else
Portb.0 = Not Pwm1
Portb.1 = Not Pwm2
Load Timer0 , Hi
Phase = 1
End If
Return
Sub Taste_1
Pwm1 = 1
End Sub
Return
Sub Taste_1a
Pwm1 = 0
End Sub
Return
Sub Taste_2
Pwm2 = 1
End Sub
Return
Sub Taste_2a
Pwm2 = 0
End Sub
Return
Lesezeichen