Witam!
Muszę napisać program do mikrokontrolera ATmega8. Ma on być kontrolerem PWM żarówki (12V/35W) do stolika nocnego.
Mam taki oto problem: nie wiem jak przekształcić dane pobierane z ADC. Wychodzą w postaci 10-bit (0-1023), a PWM (200Hz) jest 8-bit (0-255). Sam coś próbowałem tworzyć, ale mi nie wychodzi. Regulacja ma być wykonywana potencjometrem w PWM 20%-100%. Problem jest prawdopodobnie w kilku ostatnich linijkach kodu (Bascom).
Kod, na którym próbowałem coś zrobić:
Proszę o pomoc w rozwiązaniu problemu. Schemat połączenia jest w załączniku.
Pozdrawiam.
Muszę napisać program do mikrokontrolera ATmega8. Ma on być kontrolerem PWM żarówki (12V/35W) do stolika nocnego.
Mam taki oto problem: nie wiem jak przekształcić dane pobierane z ADC. Wychodzą w postaci 10-bit (0-1023), a PWM (200Hz) jest 8-bit (0-255). Sam coś próbowałem tworzyć, ale mi nie wychodzi. Regulacja ma być wykonywana potencjometrem w PWM 20%-100%. Problem jest prawdopodobnie w kilku ostatnich linijkach kodu (Bascom).
Kod, na którym próbowałem coś zrobić:
$regfile = "m8def.dat"
$crystal = 8000000 'Procesor taktowany 8MHz
Config Pinc.5 = Output
Bulb Alias Portc.5
Dim Cycle As Byte
Dim Bright As Byte
Dim Temp As Word
Dim Max_bright As Eram Word
Dim Min_bright As Eram Word
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer0 = Timer , Prescale = 1
On Timer0 T0_int
Counter0 = 100
Enable Timer0
Enable Interrupts
Start Timer0
Do
Loop
T0_int:
Counter0 = 100
If Cycle < Bright Then
Set Bulb
Else
Reset Bulb
End If
If Cycle < 253 Then
Incr Cycle
Else
Cycle = 0
End If
Temp = Getadc(4)
If Temp > Max_bright Then Max_bright = Temp 'coś w rodzaju kalibracji
If Temp < Min_bright Then Min_bright = Temp
Temp = Temp - 512
Temp = Temp / 2
If Temp < 50 Then Temp = 0 'regulacja pwm od 20%
Bright = Temp
ReturnProszę o pomoc w rozwiązaniu problemu. Schemat połączenia jest w załączniku.
Pozdrawiam.