attiny2313 problem z PWM(bascom)

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

attiny2313 problem z PWM(bascom)

Post autor: x21 » 19 mar 2012, 19:18

Witam, mam mały problem z PWM na attiny2313 mianowicie napisałem taki o to program :

Kod: Zaznacz cały

 $regfile = "attiny2313.dat"
    $crystal = 1000000

Config Portb = Output
       Portb = &B11111111
Config Portd = Input
       Portd = &B1111111
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down
Pwm1a = 30
Miał on sprawić, że dioda Led będzie lekko świecić jednak nawet się nie zapala, próbowałem także zmieniać wartości pwm1a z 30 na 100 itp nic nie pomogło . Diodę podłączam plusem do portu PB.3 a minusem do masy.
Próbowałem także dodać do programu zwiększanie się pwm

Kod: Zaznacz cały

Do

Incr Pwm1a
If Pwm1a = 120 Then Pwm1a = 0

Loop

End

jednak nic to nie pomogło . Wie ktoś w czym może tkwić problem ? Z góry dzięki za pomoc .Pozdrawiam .

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 19 mar 2012, 19:51

Enable interrupts -kolega zna?

Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

Post autor: x21 » 19 mar 2012, 21:47

Pikczu- chodzi ci o włączenie Timera 1 tak ? Jednak mam do tego pytanie we wszystkich programikach z pwm które widziałem nikt go nie włączał przekładem jest ten :

Kod: Zaznacz cały

$regfile = "m8def.dat"
$crystal = 1000000
'Konfiguracja PWM'a:
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Portd = Output
Silnik_a Alias Portd.0
Silnik_b Alias Portd.1
PWM1A = 200 'Ustawienie PWM w zakresie 0-255 (regulacja prędkości)
Do
'Obrót w jedną stronę
Set Silnik_a
Reset Silnik_b
wait 3
'Obrót w stronę przeciwną
Reset Silnik_a
Set Silnik_b
wait 3
'Stop
Reset Silnik_a
Reset Silnik_b
wait 3
Loop
End 
A jeśli chodzi o to włączenie to mam napisać : Enable Interrupts
Enable Timer1 i ON timer1 etykieta . Tylko co mam napsiać ww tej etykiecie ? pwm1a = 50 ? Z góry dzięki za odpowiedź. Pozdrawiam .

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 19 mar 2012, 21:53

No tak ale to jest dobra praktyka tak na przyszłość a po za tym twój program ma parę błędów.
Zmień watrosci PWM i zobaczysz że działa druga sprawa,

Kod: Zaznacz cały

Do

Incr Pwm1a
If Pwm1a = 120 Then Pwm1a = 0

Loop

End 
to jest źle to działa ale wykonuje sie tak szybo że ty tego nie widzisz
Sprawdź to:

Kod: Zaznacz cały

$regfile = "attiny2313.dat"
    $crystal = 1000000

Config Portb = Output
       Portb = &B11111111
Config Portd = Input
       Portd = &B1111111

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down
Pwm1a = 30
Do

Incr Pwm1a
Waitms 100

Loop

End
-----------------------EDIT ------------------------------------

PS poczytaj o timerach np tu:
http://www.starz.pl/elektronika/EP_timery1.pdf
Polecam

Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

Post autor: x21 » 19 mar 2012, 22:34

Wrzuciłem twój program i dioda zaświeciła się lecz świeci na maks i po kilku sekundach płynnie gaśnie, następnie zapala się i tak w kółko . Wiesz czym to jest z powodowane ?

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 19 mar 2012, 22:56

Ja wiem bo wiem co posłałem :)

Widisz w kodzie INCR Pwm1a --- to znaczy increase zwiększ Pwm1a
czyli w pętli do loop program kręci się w koło i teraz przed pętlą do loop miałeś wartość Pwm1a = 30
w Pętli ta wartość jest zwiększana aż do 255 po czym następna wartością jest już 0 i tak w koło.
A ponieważ jest tam Clear down led pomału gaśnie gdy wartość zbliża się do 255.

------------------edit ---------------------
jest tam tez małe opóźnienie wait żeby troszeczkę zwolnić program abyś był w stanie zobaczyć jego działanie

Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

Post autor: x21 » 19 mar 2012, 23:04

Tak, lecz zwiększające się pwm nie powinęło podnosić jasności diody ? W sensie na początku słabo świeci a potem coraz mocniej ? Ponieważ dioda świeci mi cały czas na maks . Tak samo jest gdy usunę pętle i mam ustawione pwm1a = 30 więc dioda powinna lekko świecić ? a świeci pełnym światłem .

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 19 mar 2012, 23:08

To zmnień: Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down na Clear UP

Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

Post autor: x21 » 19 mar 2012, 23:16

Spróbuje tego jutro bo dziś muszę już spadać i napiszę czy pomogło ;)Pozdrawiam .

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 19 mar 2012, 23:20

Na pewno pomoże, kup sobie jakąś książkę.
Ja też już idę spać

Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

Post autor: x21 » 20 mar 2012, 10:20

Witam, nie wiem co się stało ale dziś przestał działać już nawet program który ty mi podałeś . Dioda w ogóle nie świeci . Czy możliwe jest, że uszkodziło mi się attiny2313 ? Ponieważ jakiś czas temu przy ciągłym wyciąganiu z podstawki ułamały mi się 2 nóżki vcc i reset w lutowałem na ich miejsce 2 druciki i może przegrzałem je wtedy ?

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 20 mar 2012, 19:28

Sprawdź na spokojnie zwykle jest to jakiś mały błąd popełniony w amoku.

Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

Post autor: x21 » 20 mar 2012, 20:34

Rzeczywiście ;)Coś przeoczyłem wcześniej, teraz zmieniałem na Clear up i dioda zaświeca się powoli tylko czemu na początku(po włączeni zasilania) świeci z 15 sekund szybko gaśnie i dopiero zaczyna powoli zwiększać jasność a następnie proces powtarza się ?

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 20 mar 2012, 21:10

Bo przed początkirm pętli DO masz wpisaną wartość Pwm1a = 30 zmień tą wartość a zobaczysz różnicę.

--------------edit ----------------------
No i przecież masz tam konfigurację porów jako wyjście poczym wystawisz stan wysoki na niego.
A w następnej lini masz konfiguracje Timera.
Dzieje się dokładnie to co jest w kodzie napisane krok po kroku od góry.

Awatar użytkownika
x21
-
Posty: 19
Rejestracja: 13 lut 2012, 12:27
Lokalizacja: Kraków

Post autor: x21 » 22 mar 2012, 22:51

Witam, przepraszam, że nie odpisywałem ale nie miałem ostatnio czasu .Więc jak poradziłeś zmieniłem wartość pwm1a . Gdy wpisałem 255 =dioda świeci jakby połowom mocy i strasznie powoli(po około 5 sekundach od włączenia) zaczyna się ściemniać. I po chwilce(trzeba się dobrze przypatrzyć żeby zobaczyć to przyciemnienie) przełącza się na jasność jak na początku.Gdy pwm1a= 0 to dioda świeci trochę mocniejszym światłem niż przy 255 i cały czas utrzymuje taką samą jasność .Jeśli pominę komendę pwm1a= x (w ogóle jej nie wpiszę) To dioda świeci jasnym światłem i także w ogóle nie zmienia jasności .Próbowąłem także zostawić polecenie pwm1a= x a usunąć Incr Pwm1a : waitms 100 . Lecz wtedy dioda w ogóle nie świeci . Mógłbyś wytłumaczyć mi to zachowanie ? Jak zrobić żeby dioda w ogóle nie świeciła na samym początku a potem zaczęła zwiększać swoją jasność ? (taki jakby powolny zapłon) Bo już nic z tego nie rozumiem :( Dodam także, że mam problemy z niektórymi gotowymi programami np wszyscy w komentarzach pod jakimś programem czy coś piszą, że działa itp a mi nie . Chociaż skopiuje program lub spisze go kropka w kropkę, użyje tego samego avr a także podłącze identycznie wszystkie elementy . Dopowiem jeszcze, że miałem na początku problemy z programatorem mianowicie programator stk200 nie chciał działać, bascom w ogóle go nie wykrywał dopiero taki zwykły programator : Obrazekzadziałał .Dodam, że zastosowałem w nim rezystory 330 Ohm .Może jest w tym jakaś wina programatora ? Ponieważ posiadam także Atmege8 i z nią są takie same problemy . Z góry dzięki za odpowiedź . Pozdrawiam .

ODPOWIEDZ