Witam serdecznie.
Próbuje stworzyć generator PWM o zmiennym wypełnieniu i zmiennej częstotliwości. Generator ten chce stworzyć na ATmega32 12MHz w języku BASCOM. Zmian dokonywać będzie można przez dwa potencjometry.
Mam już napisany program ale niestety sygnał na oscyloskopie wariuje. Co jakiś czas jest przebicie innych wartości. Walczyłem z tym dość długo ale nie mogę zlokalizować błędu.
Zamieszczam Mój kod:
Próbuje stworzyć generator PWM o zmiennym wypełnieniu i zmiennej częstotliwości. Generator ten chce stworzyć na ATmega32 12MHz w języku BASCOM. Zmian dokonywać będzie można przez dwa potencjometry.
Mam już napisany program ale niestety sygnał na oscyloskopie wariuje. Co jakiś czas jest przebicie innych wartości. Walczyłem z tym dość długo ale nie mogę zlokalizować błędu.
Zamieszczam Mój kod:
$crystal = 12000000
'timer
Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
On Compare1a Change
Enable Compare1a
Enable Interrupts
'Przetwornik analogowo cyfrowy
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'zmienne
Dim F As Word
Dim D As Word
Dim D2 As Word
Dim F3 As Word
Dim Xxx As Single
Config Portb = 255
Portb = 255
Config Portc = 255
Portc = 255
Config Portd = 255
Portd = 255
F = Getadc(2)
F = Getadc(2)
Pwm1a = F
Do
' odczyt z adc:
'kanał 0 - częstotliwość -> F
'kanał 1 - wypełnienie -> D
D = Getadc(3)
D = Getadc(3)
F = Getadc(2)
F3 = Getadc(2)
Shift D , Right , 2
Xxx = D / 256 'procentowa wartość wypełnienia
Shift F3 , Right , 2
Xxx = Xxx * F3 'wypełnienie
Xxx = Round(xxx)
D2 = Xxx
Loop
End
Change:
' zmiana długości wypełnienia/przerwy
If Pind.5 = 1 Then
Pwm1a = D2
Else
Pwm1a = F3 - D2
End If
Return
