Cały dzień zmagam się z problemem uruchomienia pwm na attiny13 i sterowanie nim poprzez RC5. Wcześniej już prosiłem o porady na temat pwm i udało mi się w końcu osiągnąć cel. Mianowicie uruchomiłem pwm na attiny13 i udało mi się ściemniać i rozjaśniać diodę na płycie testowej sterując dwoma przyciskami.
Teraz czas na sterowanie przez RC5 i zaprzęgnięcie triaka aby móc sterować jasnością żarówki.
Kod praktycznie identyczny z tą różnicą, że zamiast zwiększać lub zmniejszać pwm w zależności od tego na której nóżce będzie odpowiedni stan, program sprawdza komendę i adres pobrane przez "getRC5".
No i nie działa...
Mam wrażenie, że po prostu RC5 gryzie się z pwm, ponieważ każde z rozwiązań z osobna działają bez zarzutów a razem za nic nie chcą współpracować.
oto kod:
Mógłby ktoś doradzić co tutaj jest nie tak?
Dodam, że uruchomiłem to na atmedze32 ( zmieniając oczywiście pwm na pind.4 i timer 0 na timer1 - lecz sens pozostał ten sam) i działa tak jak chciałem.
Teraz czas na sterowanie przez RC5 i zaprzęgnięcie triaka aby móc sterować jasnością żarówki.
Kod praktycznie identyczny z tą różnicą, że zamiast zwiększać lub zmniejszać pwm w zależności od tego na której nóżce będzie odpowiedni stan, program sprawdza komendę i adres pobrane przez "getRC5".
No i nie działa...
Mam wrażenie, że po prostu RC5 gryzie się z pwm, ponieważ każde z rozwiązań z osobna działają bez zarzutów a razem za nic nie chcą współpracować.
oto kod:
$regfile = "attiny13.dat"
$hwstack = 32
$swstack = 18
$framesize = 8 ' tiny13
$crystal = 10000000
Config Pinb.1 = Output
Config Rc5 = Pinb.2
Dim Address As Byte , Command As Byte
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Up
Enable Interrupts
Pwm0b = 255
Do
Getrc5(address , Command)
Command = Command And &B01111111
If Address = 0 And Command = 33 Then
If Pwm0b < 235 Then
Pwm0b = Pwm0b + 17
End If
If Pwm0b > 238 Then
Pwm0b = 255
End If
Waitms 10
End If
If Address = 0 And Command = 32 Then
If Pwm0b > 20 Then
Pwm0b = Pwm0b - 17
End If
If Pwm0b < 20 Then
Pwm0b = 0
End If
Waitms 10
End If
If Address = 0 And Command = 12 Then
If Pwm0b > 0 Then
Pwm0b = 0
Waitms 200
Else
Pwm0b = 255
Waitms 200
End If
End If
If Address = 0 And Command = 59 Then
If Pwm0b > 0 Then
Pwm0b = 0
Waitms 200
Else
Pwm0b = 255
Waitms 200
End If
End If
Loop
End
Mógłby ktoś doradzić co tutaj jest nie tak?
Dodam, że uruchomiłem to na atmedze32 ( zmieniając oczywiście pwm na pind.4 i timer 0 na timer1 - lecz sens pozostał ten sam) i działa tak jak chciałem.