Witam nie znalazłem podobnego temat więc założyłem ten. Mam taki mały problem, :) Mianowicie niedawno zająłem się programowaniem Attin2313 w Bascomie. Sugerując się kodem z pierwszego projektu lampki RGB na AT89C2051 napisałem podobny na Attiny2313. Moim zdaniem algorytm dla diody jest dobry i nie wiem co jest przyczyną niepoprawnej pracy. Po zaprogramowaniu cały czas świeci się czerwona dioda, zielona mruga niesynchronicznie a niebieska tylko mignie na samym początku. Pomoże ktoś z forumowiczów? Zamieszczam kod tego co udało mi się stworzyć :) Pozdrawiam RobkY... Poniższy program jest już poprawiony i na pewno działa '************************************************ '********** S T E R O W N I K R G B ********** '************************************************ $regfile = "attiny2313.dat" $crystal = 1000000 'częstotliwość na przyszłość należy zwiększyć Config Portd = Output '**** ZMIENNE **** Dim Rled As Byte Dim Gled As Byte Dim Bled As Byte Dim N As Byte Dim Licznik As Byte '**** NAZWY WYJŚĆ **** Rd Alias Portd.2 Gd Alias Portd.1 Bd Alias Portd.0 '**** TIMER 0 **** Config Timer0 = Timer , Prescale = 1 Enable Interrupts Enable Timer0 On Timer0 Wyjscia '**** POCZĄTEK **** Rled = 100 Gled = 0 Bled = 0 N = 1 '**** PROGRAM GŁÓWNY **** Do Select Case N 'płynne ustalone przejście kolorów - tęcza Case 1: 'do żółtego Incr Gled If Gled = 100 Then N = 2 Case 2: 'do zielonego Decr Rled If Rled = 0 Then N = 3 Case 3: 'do morskiego Incr Bled If Bled = 100 Then N = 4 Case 4: 'do niebieskiego Decr Gled If Gled = 0 Then N = 5 Case 5: 'do fioletowego Incr Rled If Rled = 100 Then N = 6 Case 6: 'do czerwonego Decr Bled If Bled = 0 Then N = 1 End Select Waitms 10 Loop End '**** PRZERWANIE TIMER 1 **** Wyjscia: Incr Licznik If Licznik = 100 Then Licznik = 0 If Licznik < Rled Then Reset Rd Else Set Rd End If If Licznik < Gled Then Reset Gd Else Set Gd End If If Licznik < Bled Then Reset Bd Else Set Bd End If Return '**** KONIEC ****
|
|||
Witam Pierwsze co zauważyłem
Witam
Pierwsze co zauważyłem to w pętli Do Loop nasz przypisanie N =1 co oznacza że za każdym przebiegiem pętli do N jest wpisywane 1 i przez to nic się nie dzieje jeżeli jest spełniony warunek.
Co do częstotliwości procka to zwiększ ją do 8MHz bo dzięki temu uzyskasz zwiększa częstotliwość PWM. W Tinny są dwa Timery 8 i 16 bitowy. Zasad jest taka przy wyborze że jeżeli można osiągnąć ten sam cel na jednym i drugim to wybierz 8 bitowy. :)
Piszę w C i bascoma znam tylko podstawy ale troszkę popróbowałem na Atmega16 i prze kompilowałem Twój program. Zmień nagłówek do attiny3213 i daj znać czy działa :).
Udało się uruchomić, działa
Udało się uruchomić, działa jak należy tak i Twój program jak i mój po drobnej poprawce. Sęk był w tym że w głównej pętli brakowało opóźnienia 10-15 ms. Dodatkowo zmieniłem tak jak pisałeś Timer1 na Timer0 i N = 1 wyrzuciłem z pętli Do ... Loop. Zastanawiam się jeszcze jak zrealizować losowe przejścia kolorów? Masz może jakiś pomysł. Lampka RGB 2 Mirley`a super się prezentuje. Ale ja przeglądając kod nie bardzo go rozumiem, zwłaszcza interesują mnie te losowe kolory...
Dzięki wielkie za pomoc... Jak coś człowiekowi zacznie działać to jest większa motywacja do dalszej pracy. Dzięki, czekam na jakieś sugestie :):)
Miło mi że pomogłem... :) Co
Miło mi że pomogłem... :) Co do losowych przejść kolorów to mam dwie proste propozycje jak to mogło by być:
Wyjaśnię jak to działa. W pierwszym przypadku będzie losowany kolor po czym procesor usypiam na 450ms żeby zobaczyć jaki kolor uzyskaliśmy. W następnym przebiegu losuję inny kolor. Do losowani używam funkcji Rnd(zakres). Jako jej argument podajesz zakres liczb z jakich ma losować w moim przypadku od 0 do 100.
W drugim przypadku jeżeli dodatkowa zmienna którą zadeklarowałem ma wartość 0 to losowane są wartości poszczególnych składowych RGB. Następnie wylosowane wartości są zmniejszane w każdym przebiegu pętli dopóki zmienna xyz nie osiągnie wartości 100 czego efektem jest ponowne wylosowanie wartości dla składowych RGB. Zakresy możesz wybierać dowolne, zachęcam do poczytania o funkcji Rnd().
Podmień w programie który wczoraj poprawiłeś pętle na te które zaproponowałem i sprawdź efekt ;) W przypadku drugiej pętli musisz zadeklarować zmienną Dim Xyz As Byte i ją wyzerować przed pętla Xyz = 0 na wszelki wypadek :)
Pozdrawiam
Pierwszy programik działa
Pierwszy programik działa super, losowe skokowe zmiany kolorów.
W drugim byłoby wszystko ok ale po zdekrementowaniu do 0 nowa wartość koloru np. Rled jest ustawiana skokowo i dopiero znowu zmniejszana, czyli nie jest to całkiem płynne, ale pobawiłem się trochę funkcją Rnd() i wymyśliłem sposób na losowe kolory. Mam jednak pewien problem nie wiem dlaczego nie losuje mi liczby Rand_r, Rand_g, Rand_b z poniższego kodu. Rled, Gled, Bled losowane są poprawnie. Linijka kodu z Rand_r wykonuje się ale nie losuje żadnej wartości, pozostaje 0. Sprawdzałem w symulacji. Proszę o pomoc w rozwiązaniu :):) Pozdrawiam.
Próbowałem część programu Mirleya z lampki RGB 2 dot. losowania kolorów ale też nie działało poprawnie. Test był przy 1MHz ...
Re: RGB
A próbowałeś np dla Rnd(3) dac na chwile Rnd(100) i zobaczyć czy wtedy losuje. Może masz pecha i w symulacji kilka razy wypadło Ci 0 albo symulator źle działa.
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dzięki za zainteresowanie.
Dzięki za zainteresowanie. Zwiększyłem wartość w Rnd poprawiło się losowanie lecz cały czas tylko decrementuje zmienne i skokiem wybiera następną wartość i znowu decrementuje. Nie mam pojęcia czemu to nie działa jak powinno.... Jeżeli masz jakieś cenne uwagi to podziel się nimi :) Pozdrawiam.
Dodałem jeszcze zmienną I (word) która cały czas zmienia podstawę na której pracuje Rnd. Znajduje się ona w przerwaniu timera0. f = 8MHz
ATmega8 problem
Witam,
Przepraszam z góry za podczepianie się do tematu ale jako jeden z nielicznych jest aktywny...Do rzeczy:
Zmontowałem sobie zegarek i termometr do samochodu z tego tematu: http://www.elektroda.pl/rtvforum/topic989801.html#5043414 . Schemat nie jest mój jednak PCB zrobiłem sam. Układ po wgraniu programu wyświetla poprawnie napis powitalny i następnie ciąg dziwnych znaków. Próbowałem z dwoma wersjami programu czy innym uC lecz nie pomogło. Czym może to być spowodowane i jak temu zaradzić? Poniżej projekt PCB i zdjęcia wariacji.
http://obrazki.elektroda.pl/8327869900_1345489290.jpg
http://obrazki.elektroda.pl/4440052600_1345489293.jpg
http://obrazki.elektroda.pl/9364595200_1345489296.jpg
http://obrazki.elektroda.pl/9364595200_1345489296.jpg
http://obrazki.elektroda.pl/5684320600_1345489299.jpg
http://obrazki.elektroda.pl/8665334700_1345489551.jpg
Przepraszam jeszcze raz ale pilnie potrzebuje porady...