raistlin83 Sierpień 6, 2009 Udostępnij Sierpień 6, 2009 Witam! Jestem tu zupełnie nowy, a w dziedzinie mikrokontrolerów to już zupełny świeżak Mam pewien problem: otóż chcąc poeksperymentować z bascomem zorganizowałem sobie prostą płytkę testową z ATMega 128. Do PortB.7 dopięta jest dioda LED podłączona do +5V przez rezystor. Kwarc 16MHz. Chciałem zmusić ATMegę do migania, więc w Bascomie napisałem coś takiego: $regfile = "m128def.dat" $crystal = 16000000 Config Portb = Output Portb = &B0000000 Do Waitms 500 Toggle Portb.7 Loop program skompilowałem, wgrałem na ATMege i wielka kupa dioda cały czas świeci, nic nie miga Czy wie ktoś z Was, co może być przyczyną? co tutaj robię nie tak? Z góry dzięki za odp Pozdrawiam!
Decado Sierpień 6, 2009 Udostępnij Sierpień 6, 2009 Masz źle skonfigurowany port. Wpisz jedynki zamiast zer
Nawyk Sierpień 6, 2009 Udostępnij Sierpień 6, 2009 Spróbuj popracować na wewnętrznym oscylatorze RC (zmień deklarację crystal na np. $crystal = 4000000). Możliwe, że nie ustawiłeś tzw. fuse'ów do pracy na 16MHz. Jeśli zacznie działać, to zainteresuj się tym tematem (fuse bits). Jeśli to nie podziała, to zamiast do Vcc, podłącz diodę przez rezystor (np 470Ohm) do GND. Zapalisz ją ustawiając stan wysoki na porcie i nie powinno być żadnych problemów.
piotr.debski Sierpień 7, 2009 Udostępnij Sierpień 7, 2009 Moi Drodzy! Witam was w pierwszym moim przejawie aktywnosci na tym forum. Naczytalem sie z necie o problemach z programatorewm bo sam je mialem. Nasz programator-samorobek u mnie nie dzialal. Nie znam przyczyny, znam natomiast roziwazanie a rozwiazanie okazalo sie bardzo proste:) Przerobilem programator na ten w/g schematu stąd: http://mirley.firlej.org/files/Art_PierwszeProg_01.gif i wszystko zaczela dzilac. Kolejna sprawa. Zdzwilem sie kiedy zaczalem juz programowac (ucieszony), ze po zaprogramowaniu dioda swieci... Kombinowalem, kombinowalem i wykombinowalem. Zamienilem w kodzie input na output i odwrotnie. Teraz zastanawiam sie czy dlatego ze zle podlaczylem sie swiecila czy dlatego ze faktycznie w kodzie byl blad. Nie poradzilem sobie z jednym. Dioda dziala a jakze... ale nie swieci tak jakbym ja podlaczyl bezposrednio do zasilania z USB... Ktos moze mi to wytlumaczyc i ew. poradzic co zrobic zeby jednak tam przeplywalo 5V.. a moze tak ma byc? __________ Komentarz dodany przez: Sabre Popraw błędy, daj jakiś schemat twojego podłączenia tego leda, kod jaki wgrałeś, chyba, że mamy wróżyć z fusów.
olimek Sierpień 7, 2009 Udostępnij Sierpień 7, 2009 Nie dałoby się bardziej zrozumiałym językiem tego przedstawić ??
piotr.debski Sierpień 8, 2009 Udostępnij Sierpień 8, 2009 Słabo mnie zrozumieliscie:) Dalem tylko wskazowke tym ktorzy mieli lub maja problem z najprostrzym programatorem LPT na rezystorach. Wszystko dziala po zrobieniu go w/g wyzej podanego schematu. -edit- Juz wszystko jasne Dioda swieci normalnie. Wszystko dziala jak nalezy Kod wyglada tak: $regfile = "attiny2313.dat" 'najpierw określamy typ proca $crystal = 1000000 'definiujemy z jakim taktowaniem będzie pracował Config Portb = Output 'port b jako ~wejścia Portb = &B00000000 'wszędzie stan spoczynkowy-0 Config Portd = Output 'pprt d jako wyjścia Portd = &B0000000 'wszędzie stan spoczynkowy-0 Troche malo logiczne jak dla mnie czemu port B jest na wyjsciu skoro przyciski sa podlaczone do VCC i ukladu... Ale dziala...
Bartek47 Wrzesień 2, 2009 Udostępnij Wrzesień 2, 2009 Nie wiem czy problem już był poruszany nie chce mi się czytać wszystkich postów, ale w kursie są błędy. Opcja z jednym przyciskiem który jednocześnie zapala i gasi diod jest błędna. Zauważ że gdy przycisk jest wciśnięty dioda zmienia swój stan kilka set razy zależnie od kwarcu. Wcale nie jest powiedziane że po puszczeniu guzika zmieni stan, szanse 50/50
Sabre Wrzesień 2, 2009 Udostępnij Wrzesień 2, 2009 Nie wiem czy problem już był poruszany nie chce mi się czytać wszystkich postów, ale w kursie są błędy. Opcja z jednym przyciskiem który jednocześnie zapala i gasi diod jest błędna. Zauważ że gdy przycisk jest wciśnięty dioda zmienia swój stan kilka set razy zależnie od kwarcu. Wcale nie jest powiedziane że po puszczeniu guzika zmieni stan, szanse 50/50 Nie do końca masz rację, wszystko zależy od opóźnienia jakie się da po pierwszym odczycie zmiany stanu przycisku. Ostatnio pisałem obsługę 3 przycisków, do tego całe menu, po wykryciu zmiany stanu przycisku, gdzie sprawdzanie stanu odbywało się 200 razy na sekundę, wystarczy dać wait'a powiedzmy 300ms w trakcie którego użytkownik zwalnia przycisk, ponieważ zaobserwował zmianę stanu wywołaną poprzez właśnie wciśnięcie przycisku i wykonanie odpowiedniej obsługi tego zdarzenia (zmiana stanu diody led). Innymi słowy, liczy się pierwsze zbocze zmiany stanu przycisku, nie stan i nie drugie zbocze.
krystoferek Listopad 14, 2009 Udostępnij Listopad 14, 2009 Witam wszystkich Posiadam zestaw uruchomieniowy z Atmega16 i nie mogę opanować PWM Bardzo proszę o prosty kod sterowania np. regulowania za pomocą dwóch przycisków jasnością diody led Dodam że jestem początkujący Czekam na jakąkolwiek pomoc
Nawyk Listopad 14, 2009 Udostępnij Listopad 14, 2009 Konfigurowanie PWM w BASCOMie jest banalnie proste. Przykład: 'Start PWM'a Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 'PWM1A => dioda 1 'PWM1B => dioda 2 Następnie zmieniasz wartości PWM1A i PWM1B w zakresie 0-255 - to daje Ci na wyjściu pinów OC1A i OC1B napięcie w zakresie 0-5V.
krystoferek Listopad 15, 2009 Udostępnij Listopad 15, 2009 No dobrze ale jak to zrobić za pomocą przycisków??? [ Dodano: 15 Lis 09 01:09 ] A wogóle szanowni koledzy powiedzcie co tu jest żle? $regfile = "m16def.dat" $crystal = 16000000 config pina.0 = input config pina.1 = input config pind.5 = output config TIMER1 = PWM , PWM = 8 compare A PWM = clear down, compare B PWM = disconnect, prescale = 64 dim I as Byte s1 alias pina.0 s2 alias pina.1 set PORTA.0 set PORTA.1 PWM1a = 0 do if s1 = 0 then waitms 25 if s1 = 0 then incr I if I = 0 then I = 225 end IF PWM1a = I waitms 20 end IF end IF if s2 = 0 then waitms 25 if s2 = 0 then decr i if I = 255 then I = 0 end IF PWM1a = I waitms 20 end IF end IF loop end
olimek Listopad 15, 2009 Udostępnij Listopad 15, 2009 U ciebie config TIMER1 = PWM , PWM = 8 compare A PWM = clear down, compare B PWM = disconnect, a tak powino być Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
krystoferek Listopad 15, 2009 Udostępnij Listopad 15, 2009 zrobiłem tak: $regfile = "m16def.dat" $crystal = 16000000 config pina.0 = input config pina.1 = input config pind.5 = output Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down dim I as Byte s1 alias pina.0 s2 alias pina.1 set PORTA.0 set PORTA.1 PWM1a = 0 do if s1 = 0 then waitms 25 if s1 = 0 then incr I if I = 0 then I = 225 end IF PWM1a = I waitms 20 end IF end IF if s2 = 0 then waitms 25 if s2 = 0 then decr i if I = 255 then I = 0 end IF PWM1a = I waitms 20 end IF end IF loop end i nie działa [ Dodano: 15 Lis 09 03:15 ] Ok. Więc jak powinien wyglądać kod Mianowicie chcę za pomocą dwóch przycisków "+" i "-" sterować jasnością świecenia diody led
Nawyk Listopad 15, 2009 Udostępnij Listopad 15, 2009 Może spróbuj zwiększać/zmniejszać I o większą wartość? Np o 20 albo 30 na początek. Albo nie startuj PWM'a od 0, tylko np. 100 - tak dla sprawdzenia. Nie pamiętam też czy padło już to pytanie, ale czy ustawiłeś fusebity i dodałeś zewnętrzny rezonator kwarcowy?
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »