Dzień dobry,
Potrzebuje wykonać prosty układ sterujący tranzystorem MOSFET na procesorze ATtiny13. Na wejście przetwornika ADC podaję napięcie z potencjometru 2k, na wyjściu PWM0A chcę otrzymać sygnał z zakresu 0-5V do sterowania bramką tranzystora.
Timer w tym procesorze jest 8 bitowy a przetwornik ADC 10bitowy, więc sygnał z przetwornika dzielę przez 4 aby "zmieścił się" w zakresie 0-255.
Z racji małego procesora zmienne umieściłem w rejestrach roboczych.
Problem jest taki, że przekręcając potencjometrem raz od jednego końca do drugiego, dioda (którą podłączyłem do wyjścia w celach testów) zaświeca się i gaśnie 4 razy. A powinna rozjaśniać się od 0 do swojej maksymalnej jasności. Pomiary napięcia na wyjściu wykazały że dochodzi ono do ok. 1V po czym spada do 0. To logiczne gdyby napięcie odniesienia było ustawione na wewnętrzne 1.1V. Lecz tutaj jest ustawione na Vcc więc powinno wynosić w okolicach 5V. Zachowanie to nie dziwiło mnie gdy nie miałem linijek odpowiedzialnych za dzielenie przez 4. Przy braku dzielenia na wyjście jest cztery razy podawany sygnał od 0 - 255 przy jednym obrocie potencjometru. Nie rozumiem dlaczego dzielenie przez 4 nie pomaga.
Podobny program wgrałem na ATmega32A. Rozdzielczość timera ustawiłem na 8bit a przetwornik ADC jest 10 bitowy. Sytuacja wyglądała podobnie. Dioda rozjaśniała się czterokrotnie, przy jednym obrocie potencjometru. Pomogło wstawienie linijek dzielących wartość z ADC przez 4. Nie wiem dlaczego dzielenie nie pomaga w przypadku procesora ATtiny. Domyślam się, że jest jakiś problem ze zmiennymi.
Z góry dziękuję za odpowiedzi. Poniżej załączam kod programu.
Pozdrawiam Piotr,
[hide]$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 40
$swstack = 16
$framesize = 8
Config Pinb.4 = Input
Set Portb.4
Config Pinb.0 = Output
Config Pinb.3 = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 1
Dim A As Iram Word At 15
Dim B As Iram Byte At 10
Start Adc
Do
A = Getadc(2)
B = A / 4
Pwm0a = B
Loop
End
[/hide]
[BASCOM] PWM i ADC - ATtiny13
-
FireIsland
- -
- Posty: 36
- Rejestracja: 07 lis 2013, 20:58
- Lokalizacja: Grybów
Ten sobie program wykorzystaj.
Potencjometr pod PB4 a wyjście to PB0
Bo nie chce mi się twojego kodu analizować. Szczególnie że dawno już Bascoma nie używałem.
Potencjometr pod PB4 a wyjście to PB0
Kod: Zaznacz cały
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 40
$swstack = 16
$framesize = 8
Config Pinb.0 = Output
'Konfiguracja PWM w trybie szybkimi (fast PWM mode, 0 do 255 i odnowa), wyjscie PWM OC0A (PB0)
Tccr0a = &B10000011 'Zeruje OC0A (PB0) przy zrownaniu (Clear Up),
Tccr0b = &B00000001 'Bez Preskalera (CLK/1)
' <----Konfiguracja ADC------->
Didr0 = &B00010000 ' Wyłaczamy wejście cyfrowe na PB4
Admux = &B00100010 ' Vcc jako Vref, tryb ADC 8 bitowy i PB4 jako wejście
Adcsra = &B11101000 ' ADC_ON , Free running mode, Preskaler = (CLK/2)
Adcsrb = &B00000000 ' Tryb Free running mode
On Adc Adc_int
Enable Interrupts
Do
Loop
Adc_int:
Ocr0a = Adch
Return