Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

atmega16

irek111
-
-
Posty:5
Rejestracja:23 sty 2010, o 12:06
Lokalizacja:rawicz
atmega16

Postautor: irek111 » 23 sty 2010, o 12:22

Witam! jestem początkującym napisałem program zapalanie leda na 10s po wciśnięciu przycisku i zdziwiłem się że nie mogę zgasić leda przed upłynięciem 10 s jakiego polecenia musiał bym użyć żeby go zgasić przed upływem 10s tym samym przyciskiem.

Kod: Zaznacz cały

$regfile = "m16def.dat" 'najpierw określamy typ proca $crystal = 16000000 'definiujemy z jakim taktowaniem będzie pracował Config Porta = Input 'port b jako wejścia Porta = &B11111111 'wszędzie stan spoczynkowy-0 Config Portc = Output 'pprt d jako wyjścia Portc = &B11111111 'wszędzie stan spoczynkowy-0 Do 'pętla nieskończona If Pina.0 = 0 Then 'jeżeli przycisk 1 wciśnięty Portc.0 = 0 'zaświeć diodę Wait 10 'czekaj dziesięć sekundy Portc.0 = 1 'zgaś diodę End If If Pina.1 = 0 Then 'jeżeli przycisk 1 wciśnięty Portc.1 = 0 'zaświeć diodę Wait 10 'czekaj dziesięć sekundy Portc.1 = 1 'zgaś diodę End If Loop 'koniec pętli End
Edit: Na przyszłość prosiłbym o korzystanie jednak ze znaczników

Kod: Zaznacz cały

do zamieszczania listingów. Pajączek[/color]
Ostatnio zmieniony 23 sty 2010, o 14:01 przez irek111, łącznie zmieniany 1 raz.

RcTomek
-
-
Posty:357
Rejestracja:18 lip 2005, o 17:28
Lokalizacja:Głogów / Wrocław

Postautor: RcTomek » 23 sty 2010, o 13:10

Nie możesz zgasić leda przed upływem 10s z dwóch powodów:
- użyłeś instrukcji wait, które pochłaniają całą moc obliczeniową mikrokontrolera, ponieważ przez całe 10s ALU jest zajęta liczeniem czasu i nie możesz wtedy nic zrobić,
- nie masz napisanej procedury wyłączającej diodę ręcznie,

Zadanie powinieneś zrealizować na drodze przerwaniowej, tj. skonfigurować któryś Timer do odliczania ustalonego interwału czasowego. Wtedy ALU będzie odciążona i w pętli głównej mogą działać procedury obsługi przycisków.

irek111
-
-
Posty:5
Rejestracja:23 sty 2010, o 12:06
Lokalizacja:rawicz

Postautor: irek111 » 23 sty 2010, o 13:41

Dzięki !

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 23 sty 2010, o 14:04

Poza tym, co napisał RcTomek, radziłbym zapoznać się z programowym, lub sprzętowym eliminowaniem tzw. drżenia styków, bo nagle okaże się że jedno przyciśnięcie przycisku kilkadziesiąt razy zapala i gasi diodę (czego prawdopodobnie nawet nie zauważysz, tylko będziesz się dziwił, dlaczego się czasem zmienia czasem nie).

Ps. tak jak dopisałem w pierwszym poście, używaj

Awatar użytkownika
j_bravo
-
-
Posty:189
Rejestracja:14 wrz 2005, o 16:30
Lokalizacja:Lublin
Kontaktowanie:

Re: atmega16

Postautor: j_bravo » 25 sty 2010, o 18:19

Kod: Zaznacz cały

$regfile = "m16def.dat" 'najpierw określamy typ proca $crystal = 16000000 'definiujemy z jakim taktowaniem będzie pracował Dim A As Byte Config Porta = Input 'port b jako wejścia Porta = &B11111111 'wszędzie stan spoczynkowy-0 Config Portc = Output 'pprt d jako wyjścia Portc = &B11111111 'wszędzie stan spoczynkowy-0 Do 'pętla nieskończona If Pina.0 = 0 Then 'jeżeli przycisk 1 wciśnięty Portc.0 = 0 'zaświeć diodę For A = 1 To 100 ' petla wykonywana ~100 razy Waitms 100 ' czekaj 100*100ms = 10s If Pina.1 = 0 Then 'jeżeli przycisk 1 wciśnięty Portc.0 = 1 'to zgas diode End If Next A Portc.0 = 1 'zgaś diodę End If Loop
Na szybko i mam nadzieje ze się skompiluje ;) bez przerwań i myślę ze proste. oby się przydało. jak coś to pytaj

irek111
-
-
Posty:5
Rejestracja:23 sty 2010, o 12:06
Lokalizacja:rawicz

Postautor: irek111 » 25 sty 2010, o 20:23

Witam kolegę J_Bravo dziękuję za program program skompilował się, gdyby tak dało rade jednym przyciskiem .

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 25 sty 2010, o 20:46

Ależ oczywiście że da radę. Szczerze mówiąc pisząc wcześniej uwagi o drganiu styków, byłem przekonany że to jest obsługa 1 przyciskiem ;) W Twojej obecnej konfiguracji ta uwaga nie ma takiego znaczenia.

Spróbuj taką, małą modyfikację j_bravo:

Kod: Zaznacz cały

Do 'pętla nieskończona while (Pina.0 = 1) ' dopóki przycisk nie wciśnięty "kręć się" Waitms 100 wend 'jeżeli przycisk 1 wciśnięty jedziemy dalej Portc.0 = 0 'zaświeć diodę Waitms 100 ' poczekaj na ew. zgaszenie drgania styków ' średnio skuteczny, ale najprostszy sposób For A = 1 To 100 ' petla wykonywana ~100 razy Waitms 100 ' czekaj 100*100ms = 10s If Pina.0 = 0 Then 'jeżeli przycisk 1 wciśnięty Portc.0 = 1 'to zgas diode End If Next A Portc.0 = 1 'zgaś diodę Loop
Oczywiście drugi test można by również zastąpić konstrukcją while-wend, było by to nawet bardziej "eleganckie", ale chciałem pokazać różnicę.

Ps. I tak znacznie ładnie będzie na przerwaniach ;)

irek111
-
-
Posty:5
Rejestracja:23 sty 2010, o 12:06
Lokalizacja:rawicz

Postautor: irek111 » 25 sty 2010, o 21:08

while (Pina.0 = 1)
Waitms 100
wend
bascom pokazał błąd.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 25 sty 2010, o 22:21

Jaki błąd??

Piszę korzystając wyłącznie z help online :619: Bascoma nie używam od... zawsze (może do zabawy rzadko).

Ps. jak poda linijkę, to podaj która to linijka - ta z błędem. Dokładnie.

Awatar użytkownika
j_bravo
-
-
Posty:189
Rejestracja:14 wrz 2005, o 16:30
Lokalizacja:Lublin
Kontaktowanie:

Postautor: j_bravo » 26 sty 2010, o 15:10

wywal nawiasy i nie bedzie blędu
poza tym polecam HELPA !!!!!!!!!!!!!!!! bo z tego co widzę czekasz kolego na gotowca a sam z siebie nic nie dajesz

irek111
-
-
Posty:5
Rejestracja:23 sty 2010, o 12:06
Lokalizacja:rawicz

Postautor: irek111 » 26 sty 2010, o 16:53

Po małej chwili się skapnąłem że są nawiasy i je usunąłem ale program się skompilował
jest problem bo po zgaszeniu LED nie idzie go z powrotem zaświecić.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 26 sty 2010, o 17:43

Hie hie... faktycznie nawyk z C, gdzie lepiej dać więcej nawiasów, niż jakiś pominąć ;)

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości