[syntax=pseudokod] while(key1 and !key2) { while(key1 and key2) { zadanie; //ciezko powiedziec co masz na mysli mowiac operacja, tu moze byc np. petla for, wtedy ponizszego ifa musisz do niej przeniesc if(!key1 or !key2) goto etykieta; } } etykieta: [/syntax] jak się brzydzisz instrukcją goto możesz pomyśleć nad zmienną bool pamiętającą wejście do drugiej...
:arrow: al555 Ponizszy uklad powinien spelnic Twoje wymagania. Regulator ma wejscie SHDN, ktore wlacza stabilizator gdy panuje na nim zero. Gdy wisi lub jest na nim jedynka, uklad regulatora daje na wyjsciu zerowe napiecie (n.p. MIC2951). Jesli musisz uzyc 2051 to powinno dobrze dzialac, ale jesli mialbys wybor, to doradzalbym jakis uC ( MSC430f1132...
Może zrób to inaczej. Podam sam pomysł bo osobiście nie programuję w C więc nie chcę głupot pisać, a podejrzewam że asembler Cię nie interesuje ;) Po naciśnięciu dowolnego przycisku wygeneruj opóźnienie. Po tym opóźnieniu sprawdź jakie przyciski są wciśnięte. Ale zwróć uwagę żeby przy każdej instrukcji if sprawdzać oba piny 1 i 2 portu B. Więc warunek...
#define WAIT_P while( !(PIND & 0x01) && !(PIND & 0x02) ) {} Wypadało by pamiętać o klamrach... Jeżeli nie będzie klamer pierwsza instrukcja która znajdzie się zaraz za tym zostanie potraktowana jako wnętrze pętli...
Jak najprościej? Wstaw licznik dziesiętny 4017. CLK podłącz do cykacza z cylindrów. RST połącz z sygnałem oznaczającym 1 cylinder. ENABLE do GND. Z licznika sygnały 0-3 podciągnij do cewek. Pamiętaj tylko że 4017 daje na wyjściu ze 2mA. Dla cyfrówki to wystarczające, ale nie wiem jak steruje się te cewki. Tu masz przykład użycia: [url=http://www.doctronics.co.uk/4017.ht...
Mam podobne zadanie i zrobiłam tak: [syntax=vbnet] Do Incr Czas1 If Czas1 >= 2000 Then : Czas1 = 2000 : Led = 0 : End If Incr Czas2 If Czas2 >= 2000 Then : Czas2 = 2000 : Led = 0 : End If Debounce K1 , 0 , Guzik1 , Sub Debounce K2 , 0 , Guzik2 , Sub Waitms 1 Loop Guzik1: Czas1 = 0 If Czas2 < 200 Then Led = 1 Return Guzik2: Czas2 = 0 If Czas1...
Nastepnym razem napisz jaki masz blad, na moje to zapis powinien byc i=i+1 oraz i=i-1
Zrób sobie jakąś dodatkową flagę, której stan zmienisz po wciśnięciu przycisku. Z drugiej strony jeśli po naciśnięciu ma to już stale działać to wystarczy zapętlić te dwa fory.
Najłatwiej to zrób tak: Wszystkie przyciski podłacz do pinów procka, daj podciągnięcie za pomocą rezystorów wewnętrznych ,oprócz tego za pomocą diod zsumuj te sygnały ,a nastęnie zsumowane sygnały daj na wejście przerwania np INT0. Musisz to zrobić tak że przyciśnięcie któregokolwiek przycisku spowoduje zmiane (spadek napięcia ) na wejściu przerwania...
To jak sprawdzasz to sprawdzaj w rejestrze PIND, a nie PORTD, w którym jest to co do niego zapisałeś.
Przyczyna okazała się banalna. (po długim szukaniu i próbach sprzętowych) Zamienione deklaracje wierszy i kolumn. było MatrixRow = PortC, 0; MatrixCol = PinC, 2; a powinno MatrixRow = PortC, 2; MatrixCol = PinC, 0; Temat zamykam.
Miałem kiedyś jakąś potrzebę na taki 8-o przyciskowy program dla attiny2313. Zamieszczam go w całości z komentarzami, może Ci się przyda: [syntax=basic4gl]$regfile "attiny2313.dat" $crystal = 1000000 '-- Config Portb = Input Portb = &B11111111 Config Portd = Output Portd = &B00000000 Config Porta.0 = Output Porta.0 = 0 Dim Nr As Byte 'licznik...
Jeszcze raz powtarzam. Nie znasz zasad pisania funkcji: http://www.java2s.com/Tutorial/C/0160__F... i dlatego: ... na ekranie następuje apokalipsa.
Wejście (pin procka PORTB.0) programujesz jako wejście . Ustawiasz wysoki poziom tego wejścia , tak aby naciśnięcie przycisku (zwarcie do masy) wymusiło niski poziom na tym wejściu , wykrywany przez program jako If PINB.0 = 0 Then ' coś do wykonania (naciśnięty przycisk)
uruchomienie: sei(); zatrzymanie: cli();
Tzn. chciałeś "przypisać" zmiennej x operację PORTB ^= 1<<PB0 ? Jeśli tak to: pomysł sensowny, ale niestety gwałcący zasady języka C ;) Mignięcie diody miało być w funkcji, która będzie kilka razy wywoływana w pętli, czyli chodziło mi o coś takiego:[syntax=c]//Funkcja migająca diodą void blink(void){ // Zapal diodę PORTB |= 1<<PB0; _delay_ms(300);...
Pierwsze co się rzuca w oczy to użycie złego operatora. Przy konfiguracji rejestrów używasz operatora negacji logicznej (!) a powinna być negacja bitowa (~).
Hej, Czy podłączyłeś zasilanie portu C? Pozdrowienia
1. Jak mówił tmf, poczytaj o tym czym są przerwania i timery, za ich pomocą odmierzaj czas, a programy pisz tak, aby nie zatrzymywały się w pętli głównej ani na moment, jeśli nie jest to rzeczywiście konieczne - taki dobry nawyk (oczywiście czasem można dla prostoty użyć jakichś funkcji _delay_xx();, ale zwykle ich unikamy) 2. Czytelność Twojego kodu...
Proszę zmierzyć różnicę potencjałów pomiędzy pinem uC a masą. Zarówno gdy przycisk jest nienaciśnięty, jak i gdy jest naciśnięty.
Robisz sobie dwie zmienne: blokada i aktywność. Blokada jako prosta wartość 0 lub 1: jeśli blokada jest założona i wykryjesz, że oba przyciski są naciśnięte, to ustawiasz blokadę na 0 (i aktywność na 0, dodatkowo można dać opóźnienie, aby nie uwzględniać naciśniętych przycisków dalej). Jeśli blokada jest zdjęta, to robisz wszystkie testy, dodatkowo...
Nie napisałeś. Porównaj np. DS od ATMega88 i ATmega8. Możesz budzić timerem co powiedzmy 20ms i sprawdzać, czy klawisz naciśnięty Albert
Witam, bardzo proszę o pomoc a mianowicie, potrzebuje program napisany w BASCOMIE który będzie działał na ATmega8 . Program po wciśnięciu przycisku podłączonego do Portd.0 bedzie mi grał melodyjke na PCSPEAKERZE podłączonym do portu Portd.4 . Molodyjka ma byc prosta. Coś bym podziałał ale zupełnie nie wiem od czego zacząć. Jedyne co umiem zrobić to...
Już w deklaracjach jest nieścisłość: [syntax=c]uint16_t adc_kx[3] PROGMEM = {335,1023,671 };[/syntax] keys[2] jest stale "naciśnięty".
Deklaracja portu jest OK. Upewnij się, że nigdzie w przerwaniach, bądź funkcjach przypadkowo nie zmieniasz ustawień portu oraz przyjrzyj się funkcjom alternatywnym dla pinów PB6 i PB7 (XTAL/TOSC) być może złe ustawienie timera powoduje takie anomalie. Btw. spadek o ponad 1V na samej ścieżce (która powinna mieć rezystancję bliską 0R) może oznaczać bezpośrednie...
atmega8 tanie? Poza tym nie do końca jasno rozumiem ideę działania. Jeśli chodzi o zapamiętywanie pozycji i potem oscylowanie po naciśnięciu switcha między pozycją neutralną i zapamiętaną to jeszcze musisz określić rodzaj silnika (krokowy, DC, BLDC, ...). Moim zdaniem atmega8 to za dużo jak na taki projekt, choć wtedy zawsze masz zapas pamięci FLASH.
Ale nie blokuje przerwań. Przycisk przenieś na PD2 lob PD3, ustaw zezwolenie obsługi przerwań i przerwania zewnętrznego, ustaw obsługę tego przerwania np. on INT0 ustaw_flage ustaw_flage: flaga=1 return i wpisz zamiast: "If Pinb.0 = 0 Then" "If Pinb.0 = 0 or flaga=1 Then" P.S. Ale obsługi Timerów powinieneś się tez nauczyć.
Jaka jest aktualna częstotliwość zegara? Jak często uruchamiane jest przerwanie? Ile trwa naciśnięcie przycisku? Musisz zmieniać opcje tylko kiedy przycisk został naciśnięty, nie przytrzymany. Dodaj do przerwania warunek sprawdzający poprzedni stan przycisku. Pomyśl nad wyeliminowaniem delay.
W bascomie tez mozna to poustawiac bez ASM. Bascom pozwala na operowanie na rejestrach, wiec mozna robic przypisania typu MCUCR = &b10101011 MCUCR.1 = 1 itp.
Chodzi Ci o zapalanie diody stanem niskim? Musisz ustawić kierunek pinu na wyjście i wpisać do niego 0. Tylko tyle:) P.S. Sprecyzuj, czy chodzi Ci o zapalanie diody, czy obsługę jakiegoś przycisku, po naciśnięciu którego dioda ma się zapalić.
To teraz zastanów się co napisałeś i dlaczego twój program nie działa. Zobacz po kolei co robi. w pętli 1. ustawiasz stan niski na portd 2. ustawiasz stan niski na pinb.o 3. czekasz 30 ms 4. ustawiasz stan wysoki na portd 5. czekasz 3 s 6. ustawiasz stan niski na portd 7. czekasz 3 s 8 wracasz na początek pętli i całość dzieje się od nowa. Nigdzie nie...
... w menedżerze urządzeń jest ok wykryte urządzenie USBasp No dobrze, wiemy już więcej. Oczywiście rozumiem, że w menadżerze urządzeń wykryty USBASP jest bez żadnych znaczków zapytani czy wykrzykników ? spróbuj otworzyć ręcznie z menu start--> uruchom--> CMD ENTER i w okienku konsoli DOSowej napisać ręcznie avrdude -p usbasp -c atmega8 naciśnij enter,...
Tylko mam problem ponieważ gdy ustawiam silnik przez PWM aby obroty wynosiły 0 pojawia się problem buczenia. Nie rozumiem tego. Dlaczego tak się dzieje? Napięcie na silniki jest równe 0.00. Silnik sterowany jest przez MOSFET BUZ11. Nie analizowałem programu, ale z zasady ustawienie prędkości zero powinno odbywać się poprzez wyłączenie tranzystorów...
Okazało się że w teorii na PCF8574 nie można ustawić jednocześnie 3 wejść i 4 wyjść, przez co nie jesteśmy w stanie odczytać który guzik na klawiaturze został kliknięty (tak wynika z datasheeta). Ustaw PCF'a jako wejścia a resztę wystawiaj z wyjść procka i sprawdzaj. Są inne układy, które w chwili naciśnięcia generują przerwanie.
Witam, mam taki problem. program wg mnie powinien po przekroczeniu ustalonej temperatury wyswietlac na LCD napis, wlaczac Buzzer oraz zapalic diode. A po nacisnieciu przycisku wyłaczyc to wszystko. I problem jest taki ze wylacza wszystko oprocz diody. Tzn po wlaczeniu sie alarmu dioda wogole juz nie gasnie ani po obnizeniu temperatury ani po nacisnieciu...
No to gratulacje - i o to chodzi !!
a mozna to jakos zrealizowac bez tych przerwan bo narazie tak daleko nie jestem Można, chociaż na http://mikrokontrolery.blogspot.com/p/sp... masz ładnie wyjaśnione jak to zrobić w oparciu o przerwania. Co do problemu - po prostu zrób tak, aby przed wyjściem z tej pętli było wymagane najpierw puszczenie przycisku, a dla wyjścia jego ponowne...
Nic sobie nie robi z naciskania guzika bo właśnie obsługuje przerwanie. Ja bym to zrobił w ten sposób. Przerwanie od czujki uruchamia jakiś timer i kończy się obsługa przerwania. Timer odmierza czas i po jego upłynięciu sprawdza jakąś zmienną i w zależności od niej uruchamia alarm bądź nie. I tak jeśli przed przyjściem przerwania z tego timera naciśnięty...
Pewnie po jednym naciśnięciu następowało zwiększanie/zmniejszanie wartości OCR1A do us***ia. Czyli do wartości 17600/19400. Masz to w pętli więc podczas naciśnięcia przyciksu nawet na 1ms mogło nastapić zwiększenie o jakieś 1000. Musisz dodać blokadę zwiększania wartości OCR1A podczas trzymania przycisku. Czyli zwiększenie ma zadziałać raz a później...
To nie jest jeszcze to co oczekuje, mianowicie: Są 3 tryby pracy: -Wyświetlanie temperatury (główny) - Po jednym naciśnięciu przycisku przechodzi do wyświetlania temp max i min i czeka na kolejne instrukcje - a jeżeli ten sam przycisk jest naciśnięty dłużej (np. 3sekundy) to przechodzi do resetowania wartości max i min i wraca do wyświetlania temperatury....
Gdy przycisnąłeś przycisk ale trzymałeś go mniej niż 70 okresów to zmienna Opoznienie_odczytu dochodziła do powiedzmy 65. Ale po puszczeniu przycisku nie resetowałeś zmiennej. Czyli miała ona dalej 65. I kolejne przyciśnięcie było obsługiwane za 5 cykli, a nie za 70 cykli tak jak chciałeś. Bo zmienna musiała doliczyć do 70 a już miała 65 czyli brakowało...
Po wykryciu naciśnięcia klawisza musisz ustawić poziom świecenia i przerwać pętlę for next, bo wykonuje ci się jej resztka i zmniejsza jasność świecenia. Co do W1, nie wiem czy to jest komplet źródeł, ale jeśli używasz Bascomowe procedury obsługi W1, to musisz mieć zablokowane przerwania. Albo nie używasz przerwań wcale w programie, a jak nie to musisz...
Dodaję że przy pierwszym naciśnięciu klawisza na wyświetlaczu podlaczonym do slave pokazuje się 33 niezależnie od tego jaki klawisz wcisnę ale przy kolejnych naciśnięciach brak reakcji.
dodałem volatile jednak mikrokontroler nadal nie chce wyjść z uśpienia mimo że wchodzi do przerwania i ustawia wartość zmiennej licznik na 20 przy naciśnięciu przycisku wywołującego przerwanie int0.
witam robie coś podobnego tylko że na atmega8. przepisałem program i nie działa trzeba może coś przerobić w programie? Pozdrawiam!
Napięcie pojawi się dopiero po naciśnięciu przycisku. Trudno samemu przeanalizować schemat ?
link do zdjęć bo nie chciały wejść na elektrode Przecież na elektrodzie masz nawet możliwość przycięcia zdjęcia - sprawdź - po naciśnięciu tego klawisza "Dodaj obrazek"
Jak napisać pogram dla ATMEGA8 który po pierwszym naciśnięciu ustawiał by wszystkie porty na wejścia a po kolejnym na wyjścia? Czy może to być tak (przycisk podpięty do gnd i Port C1): $regfile "m8def.dat" $crystal = 8000000 Do If Pinc.1 = 0 Then Config Portb = &B11111111 End If If Pinc.1 = 0 Then Config Portb = &B00000000 End If Loop
A taki guzik z lewej strony ze strzałką to znasz?? Wygląda jak PLAY w magnetofonie czy CD. TO JEST WŁAŚNIE COMPILE. Naciśnij i patrz co w dialogi pisze.
A czy po naciśnięciu przycisku LED się zapala a po puszczeniu też się świeci
Taaa ja to bym napisał jako odczyt całego portu żeby kodu nie powtarzać, z maskowaniem, ale nic by z tego nie zrozumiał :D Tutaj pewnie przy puszczaniu przycisku nawet po długim naciśnięciu może wykonać się procedura krótkiego wciśnięcia.
a jak mam teraz zrobić reset ? W programie mkBootLoader pisze ' Naciśnij RESET ' ?
U mnie jest ok, ale robiłem stację wg kitu AVT, chociaż wszystko od zera swoimi łapkami. Słowem, możemy mieć nieco innych schemat i prawdopodobnie innych soft. W mojej wersji stacja nie zasypia sama, muszę nacisnąć przycisk, wtedy włączam funkcję sleep, drugie naciśnięcie to off, trzecie to normalna praca.
Uważam, że przyciski powinny być większe i wygodniejsze. Samo naciśnięcie mogłoby uruchamiać jakiś dyskretny dżwięk potwierdzający, że nastąpiło przełączenie odliczania.
Poza tym jest to funkcja jeśli a nie gdy
Wiedz co mam zrobić (jestem trochę zielony bo dopiero zaczynam programować ) bo tak w zasadzie po podłączeniu to po naciśnięciu zapala sie dioda a po naciśnięciu drugiego gaśnie ale tylko ta z portd.0
PD7 jest zwierany aby w poinformować mikrokontroler, że został naciśnięty przycisk, a mikrokontroler wystawi stan wysoki na PD6 aby podtrzymać zasilanie całego układu. Dodatkowo ponowne naciśniecie przycisku ponowi cykl pomiarowy, bez czekania na automatyczne wyłączenie; stan niski na PD6 Skomplikowany głownie z uwagi na znaczny pobór prądu przez wyświetlacz...
Acha, sprytne, zwiększając zmienną będę mógł przerwać tę procedurę, nit tak jak w przypadku Waitms... Chyba że źle myślę. Super, działa. Zrobiłem zmienną Integer i zliczam w pętli Do...Loop od 1 do 750 co 1ms, a jak przycisk jest naciśnięty, to wychodzę z pętli.
Uwaga! Zdarza się czasami, że funkcja zwraca numer naciśniętego klawisza choć żaden z nich nie jest naciśnięty. W takim wypadku należy dołączyć rezystory 1k, połączone z jednej strony do końcówek portu PORTx.4 – PORTx.7, a z drugiej do masy (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005 Pokaż schemat jak masz tą klawiaturę podłączoną.
Ponieważ zaczynasz proponuję podzielenie realizacji programu na etapy : Pierwszy program po jednokrotnym przyciśnięciu może zapalać jedną diodę a po dwóch naciśnięciach inna diodę Drugi program może zapalać diodę tylko jeśli naciśniemy przycisk dłużej niż na 2 sekundy Trzeci program to połączenie obu tak żeby działały..
Witam, ad.1) .... a dioda IR to aż tak bardzo się różni od diody LED? czy może twoja ma wbudowany jakiś rezystor w swojej strukturze??? - tak samo jak dla diod LED i tu dobiera się rezystory ad.2) ... wystarczy co nieco poczytać elektrodę ile już było takich śmiałków ;) którzy się wciąż dopytują czy trzeba do wszystkich wyprowadzeń dołączać VCC i GND...
Błędy są dwa. W zmiennej tablica jest 06d zamiast 0x6d. Po drugie nie ma takiej zmiennej WYS_tablica. Jest natomiast zmienna tablica. Aha i trzeci błąd, wypada zainicjować zmienna czas np wartością zero, żeby nie zaczynać od przypadkowej wartości. Tak ponad to, jednym naciśnięciem klawisza przejdziesz od razu do 10, jestem tego pewien. Nie eliminujesz...
a jaka funkcja później może odczytać stan pinu wejściowego? np chodzi mi o system przerwań. Chcę w momencie naciśnięcia danego przycisku uruchomić inny program.
Witam! Mam µC ATmega8 i potrzebuję zrobić na nim urządzenie z przyciskami start i stop - naciśnięcie przycisku start załącza urządzenie a naciśnięcie przycisku stop wyłącza je. Urządzenie które byłoby załączane nie pobiera więcej niż 50mA. Za pomoc (wsad (najlepiej BASCOM) i schemat podłączenia) daję 30pkt albo i więcej :)
Witam Robie pierwsze kroki w programowaniu w języku bascom. Stanąłem przed problemem zdefiniowania w tym języku pewnych warunkowych komend dla procka atmega8. Jeśli ktoś może mnie nakierować to z góry dziękuję. O to moje problemy: 1. Konkretnie chodzi o to by układ reagował np poprzez zapalenie diody led w chwili gdy przycisk podłączony do tego układu...
Witam nie wiem czy dobrze rozumiem ten typ podłączenia ale jeśli wszystkie kontaktrony i fotokomórka są zasilone i rozwarte od masy to powinny silniki cały czas się kręcić aż do zwarcia kontaktronów. U mnie po naciśnięciu otwierania na chwilę kręci się jeden silnik a po naciśnięciu zamykania drugi czym to może być spowodowane ?
Reakcja na przycisk na pewno jest. Wstaw sobie tam jakiegoś wait'a i mignij diodką. Może po prostu program wykonuje się kilka lub kilkaset razy po naciśnięciu przycisku i nie zauważasz działania. Najlepiej załącz całość, inaczej nic nie wywróżymy. No i schemat. Dziwne jest to że poprzedni kod działał na Atmega48. Jaką masz wersję bascoma? Może czas...
Masz coś źle podłączone, sprawdź czy Ci switch nie zwiera na stałe do masy. Bo masz PORTD na początku wyzerowane i dioda nie powinna świecić, a piszesz że świeci. A dopóki nie naciśniesz guzika, to nie powinna się zapalić.
Zauważ, że w twoim programie generowane są opóźnienia. Niedługie bo niedługie ale są. Co jeśli w trakcie zapalania diody i oczekiwania tego opóźnienia Waitms 150 naciśniemy jakiś przycisk na pilocie? Owa komenda nie zostanie odczytana. A naciśnięcie przycisku trwa kilka do kilkunastu ms.
Dziękuję za podpowiedź, z tym że mam ową książke i faktycznie zacząłem czytać ja od początku. To był błąd z mojej strony. Mam pytanie dotyczące sbi -ustawianie pina jako wyjścia , proszę o pomoc i omówienie cbi- pin jako wejście oraz tego w jaki sposbó napisać program pod C aby po naciśnięciu przycisku otrzymać +5V na wyjściu.
Hej! Ja podpinam pod reset coś takiego (załącznik). Naciśnięcie przycisku powoduję reset mikrokontrolera. Dodadtkowo układ zabezpiecza mikrokontroler przed samoczynnym resetowaniem się pod wpływem zakłóceń. Co do reszty to masz rację, reset powoduję dokładnie to samo jakbyś wyłączył i ponownie włączył zasilanie. Pozdrawiam PS Dioda w załączniku to 1N4148.
A nie prościej zwyczajnie wykrywać naciśnięcie w przerwaniu timera? Toż to dwie linie kodu tylko, bez żadnych funkcji i bibliotek...
1. Zaprogramuj timer w tryb CTC, np. na częstotliwość 100 Hz. W przerwaniu timera: - sprawdź, czy przycisk naciśnięty; jeśli tak - zapal diodę i załaduj wartość 1000 do zmeinnej - "timera programowego". - jeśli zmienna timera ma wartość różną od zera, zdekrementuj ją, a jeśli zdekrementowała się do 0 - zgaś diodę. Razem daje to 5 linii kodu w przerwaniu...
Dioda to koledze miga pewnie dlatego że w rejestrze odbiorczym SPI nie ma żadnego odebranego znaku i program pracuje bez przerwy w pętli dotąd aż coś odbierze a nie odbiera nic. Wywal te miganie z programu głownego i zobaczysz co się dzieje tan naprawę. Poza tym tak naprawdę do nie wiadomo co ty tam obierasz bo masz zastosowane potężne opóźnienia nawet...
Najkrótsza podpowiedź jakiej udzieliłem: Brak debouncingu. Program ten jest w całości statyczny (sprawdza tylko stan portu/pinów wejściowych) a output ma również charakter statyczny (nie zlicza impulsów czy też toggle stanu wyjścia) więc debouncing byłby nie konieczny. Inna rzecz to: brak tu kilku słów lub częci programu na temat podciągania do Vcc...
Z tego wynika że problemem może być właśnie kod wymieniony przez kolegę mirekk36, Od siebie dodam że też miałem kiedyś podobny problem, i po zmianie z if( !( PINC & (1<<6) ) ) na if bit_is_clear(PINC,6) wszystko zaczęło funkcjonować jak należy. ( pomimo iż jedno i drugie to to samo. ) Źródła problemu nie znam....
Niestety nadal występuje ten sam problem :cry: Problem wystąi niezależnie czy naciśniesz F10 czy F11 bo funkcje delay są inlinowane, więc co prawda tego nie widzisz, ale ich ciało jest osadzane w miejscu wywołania. Najlepiej ustawić breakpointa za delay i dać F5. A jeszcze lepiej zrobić tak, żeby dla celu debug przy symulacji preprocesor wywalał delay.
...Dałem polecenie debounce i powinno zwiększyć zmienną o 1 i poczekać do puszczenia przycisku, ale nawet szybkie naciśnięcie zwiększa zmienną o kilkadziesiąt jednostek. Może chodzi o przerwania? Może to być "sprawka" przerywań, proponuję na początek: [syntax=basic4gl]Klik: Disable interrupts Incr Bsend If Bsend = 100 Then Bsend = 0 Enable Interrupts...
Zgadzam się tutaj z Freddie Chopin. Musisz poczytać o podstawach. Pytanie o przyciski było z miliard razy. Moze nawet więcej. Wystarczy poszukać :) Bez podstaw ani rusz. Dodatkowo angielski bo większość przydatnych materiałów(np. datasheet) jest po angielsku. I jest zdecydowanie lepiej gdy zna się chociaż podstawy tego języka i można wiele wyczytać...
Witam. Czy ktoś mógłby mi napisać program do Atmega8, powodujący, że po naciśnięciu przycisku na pilocie zapali się dioda. Ja próbowałem przerobić sampla z bascoma, ale nic mi z tego nie wychodziło. Sensor jest raczej sprawny, gdy podłączyłem diodę do wyjścia i "+" odbiornik działał (po naciśnięciu przycisku na pilocie dioda miga), natomiast Uc tego...
Pytania pomocnicze: - w jakim cyklu będziesz to wysyłał (w kółko, co określony odstęp czasu, czy po naciśnięciu dodatkowego guzika) - z jaką maksymalną prędkością będziesz transmitował strumień bitów - moduł światłowodu zakładam że przyjmuje poziomy TTL Na razie widzę że dowolny procesor z 21 nóżkami I/O da radę np. '51 (AT89S51) lub AVR(ATmega8/16)....
Potrzebuję pomocy w zaprogramowaniu układu tak żeby po naciśnięciu przycisku zapalała się pierwsza dioda po naciśnięciu 2 raz 2 dioda i tak do 10 diody (po 10 naciśnięciach przycisku) i 2 przycisk gaszący je wszystkie. Z góry dziękuję za pomoc przeszukałem całe forum testowałem różne opcje ale nie znalazłem odpowiedniej dla mnie
To wszystko to jedna wielka prowizorka. Możesz dołożyć do pętli while () oczekującej na zwolnienie przycisku sprawdzenie naciśnięcia drugiego i odpowiednią reakcję. To powinno być zrobione zupełnie inaczej, w przerwaniu timera, z notowaniem stanu przycisków w oddzielnych zmiennych.
Z tego co zauważyłem w symulatorze to czasami wypada 7 czyli 0. Wtedy po naciśnięciu przycisku nie wyświetla się nic. If X = 7 Then X = 0 End If Jeżeli zmienię 7 na 6 to nigdy nie wyskoczy 6-stka ... A co do bałaganu to już pisałem "zaczynam" przygodę z programowaniem :) Pozdrawiam i dziękuję za uwagi... Witam ! Napisz tak: If X >6 Then X = 1 End If
Instrukcja Pinx.y służy do odczytu stanu portu natomiast Portx.y do ustawienia stanu na porcie. Jeśli sprawdzasz, czy został naciśnięty przycisk to za pomocą instrukcji Pinx.y (wcześniej musisz ustawić Config Pinx.y=Input). Poza tym jeśli chcesz włączać/wyłączać podświetlenie LCD to lepiej zrób to przez jakiś tranzystor, a nie bezpośrednio z portu Atmegi,...
odczytujemy stan przycisku np : instrukcją IF pinc.4 = 0 then ( tu wstawiamy co ma program zrobić ) najlepiej wstawić jakiś podprogram który zadziała jako stoper zadeklaruj sobie podprogram np: stoper po naciśnięciu przycisku wywołasz podprogram stoper w podprogramie stoper umieścisz jak ma działać stoper declare sub stoper do IF pinc.4 = 0 then call...
Program po skompilowaniu ukazuje takie błędy: avr-gcc -g -Wall -O2 -mmcu=atmega8 -c -o sterowanie.o sterowanie.c sterowanie.c:2:24: util/delay.h: No such file or directory sterowanie.c: In function `main': sterowanie.c:18: warning: implicit declaration of function `_delay_ms' sterowanie.c:21:2: warning:...
Aby ustalić, czy POWER DOWN działa poprawnie dla testu usuń z funkcji przerwania komunikację przez TWI i wstaw zwykłą zmianę stanu diody LED nr 1 na przeciwny oraz delay dla wyeliminowania drgań styków. Na końcu funkcji ISR zgaś flagę przerwania INT ponieważ w czasie delay drgania mogły ją ustawić ponownie. W pętli głównej natomiast sleep_cpu() daj...
Dlaczego chodzi to w kółko ? Podepnij jakiś przycisk i niech działa tylko, gdy naciśniesz... Przypuszczam, ze skonfigurowałeś go jako slave... Notę katalogową czytałeś ? P.S. Kod pisz w znacznikach code...
Witam wszystkich. Proszę o pomoc w napisaniu programu do Atmega8, który by sterował roletą za pomocą przycisków. Chodzi o to żeby po naciśnięciu np."góra" roleta samoczynnie podniosła się do samej góry i w każdym momencie można było ją zatrzymać. http://obrazki.elektroda.pl/5637977900_1... Posiadam wszystko co potrzeba. Z góry dziękuję
Zrób tak jak jest w klawiaturze PC... naciśniecie klawisza to wysłanie jakiegoś kodu, zwolnienie klawisza to wysłanie innego kodu (np. zmieniasz najstarszy bit).
Jeżeli skaczesz do podprogramu Dalej to mozę potem z niego powróć a nie skacz z niego ponownie do Klaw z którego to Dalej został wyzwolony. Dodatkowo możesz zwiększyć stos bo często przez niego program sypie się na podprogramach. Sugeruję również w danej chwili ustawienie tylko jednej nóżki jako wyjście gdyż jak u ciebie gdy 3 są wyjściami i na nich...
Nie wiem czy sam pisałeś program czy może wziąłeś gotowca ale z funkcją getkbd() jest taka sprawa, że: "Funkcja GETKBD() zwraca numer naciśniętego klawisza, w klawiaturze matrycowej, podłączonej do portu mikrokontrolera. Gdy nie naciśnięto żadnego z klawiszy funkcja zwraca liczbę 16." i "Ponieważ funkcja zwraca numer umowny klawisza w matrycy, można...
Wstałem rano i wyświetlacz nic nie pokazuje. Wszystkie klawisze działają i zapisuje dane (wszystko działa tylko nie lcd). Jedyna zmiana to brak krzaków po naciśnięciu klawisza. Po odłączeniu zasilania wraca do normy.
Z toggle bit to sprawa wyglada tak działa to nawet ok tylko sęk w tym że jak w danym podmenu zmienie wartość danego parametru innym klawiszem to też mi się bit toggle zmieni i chcąc opuscić menu trzeba nacisnąć dwa razy klawisz odpowiedzialny za wejscie i wyjście.Jeżeli niezmienie parametru w tym podmenu wówczas działa super jednym naciśnięciem wchodze...
Faktycznie aktywnym stanem jest zero i wtedy ten fragment kodu nie powinien dać żadnego rezultatu, ale co dziwne cokolwiek nacisnę i tak się wykona. Znaczy, dlaczego nie. Jak wcisnąłeś przycisk 0, a sprawdzasz 2, to przerwanie sie wygeneruje, ale na dwójce jest stan wysoki, to warunek (pierwszy) zadziała. Jak sprawdzam czy stan jest równy zero to też...
Przekombinowane!. Po naciśnięciu klawisza startujesz timer i ustawiasz flagę. Flagę zeruje przerwanie licznika. Jeśli przyciśnięto klawisz i flaga jest ustawiona wykonaj akcje.
Proponuję zastanowić się czy mikrokontroler będzie tylko i wyłącznie czekał na przyciśnięcie przycisku czy robił coś jeszcze poza tym. Jeżeli tylko i wyłącznie będzie oczekiwał na przycisk to porty ustawiasz jako wejścia i sczytujesz stany. Natomiast jeżeli zajmiesz go czymś to proponuje wykorzystać przerwania. Nowsze mikrokontrolery (potomki Atmega8...
Musisz wykorzystać podwójny warunek czyli np. krańcówka naciśnięta- obwód otwarty a na pinie uc jest stan wysoki oraz stan niski z komparatora. Muszą być spełnione obydwa warunki.
U mnie działa na 100%. Czy sprawdzasz na oryginalnym pilocie z kodem RC-5 ?. Pytam dlatego, ponieważ pisałeś o wykonaniu własnego pilota. Rozumiem, iż w odbiorniku masz zewnętrzny kwarc 8MHz. Waitms ustawiłem na 200ms po to aby można było dokładniej odczytać kod. Przed naciśnięciem kolejnego przycisku musisz odczekać aż pojawi się napis "Oczekiwanie...
atmega naciśnięcia fusebits atmega8 atmega8 nestor
regulacja turbo laser biała kartka kondensator zastąpić zasilacz
regulator obrotów wentylatora regulator obrotów wentylatora
Błąd 68 w iRobot Roomba i7+: Problemy z kamerą Kawiarka Silvercrest - pompka uruchamia się po podłączeniu do sieci