Klawiszy (poza wyjątkowymi sytuacjami typu wybudzanie uC) nie robi się na przerwaniach INT. Delaye w przerwaniu to nieporozumienie. Twoje przerwanie realizuje się tylko po wciśnięciu przycisku, więc trudno by było, aby zwróciło informację o jego zwolnieniu. Zrób przerwanie zegarowe co 25-50ms i cyklicznie sprawdzaj stan klawiatury. Opanujesz w ten sposób...
To akurat może być. Słuzy to do progamowego wyzwalania tego przerwania, jak jest taka potrzeba. wiem, ale podłączyłem do portu INT1 przycisk więc to nie ten przypadek :) A jak za chwilę będzie chciał włączyć pull-up dla przycisku i weźmiemy pod uwagę, że robi się to tak: If PORTxn is written to '1' when the pin is configured as an input pin, the pull-up...
Z każdym przyciskiem skojarz jedną zmienną, która będzie zawierała stan licznika timera, w chwili wykrycia jego naciśnięcia. W kolejnych przerwaniach overflow sprawdzasz: 1. czy przycisk jest ciągle naciśnięty, 2. jeśli 1. jest prawdą to czy różnica pomiędzy licznikiem timera a wartością zapamiętaną w skojarzonej z przyciskiem zmiennej jest większa...
Żeby zrobić za pomocą Timera - to nie możesz używać trybu PowerDown tylko Sleep - żeby właśnie Timery mogły działać to po pierwsze. W taki trybie jednak będziesz miał nieco większy pobór prądu niż w pełnym PowerDown. Więc wszystko zależy na ile ma wystarczać bateria o ile jest to coś zasilane z baterii. Bez PowerDown'a na pewno będzie to sporo krótszy...
W trakcie obsługi przerwania przychodzi następne i czeka w kolejce. I czekać będzie nie ważne jak bardzo zostanie "przeciągnięte" przerwanie.
Nie wiem czy odbierasz tam jakieś komendy. Wywal te Wait`y. Tutaj po zmianie stanu do zmiennej Blokada zostanie wpisana wartość do odliczenia w dół. Jeśli nastąpi następne przerwanie to w zależności od tego czy minął już czas blokady, to albo zostanie przedłużony jej czas bo ktoś trzyma przycisk dłużej albo.. :D [syntax=basic4gl]Dim Blokada As Word...
Jeśli przyciski zwierać będziesz do masy, to nie trzeba. ATmega ma wewnętrzne rezystory podciągające. Trzeba pamiętać by je jeszcze włączyć. Z przerwaniem też można te przyciski ożenić, za pomocą prostej drabinki diodowej. Zajrzyj do dokumentacji zestawu ZL3AVR.
atmega32 tyle co sie juz zorientowalem to: ISR(INT0_vect) { } wówczas zmieniam pind2 posiedzialem poczytalem i zadzialalo
[syntax=c] #define Button (1<<PB0) #define Button_PORT PORTB #define Button_PIN PINB #define Button_DDR DDRB volatile _Bool Key_Pressed = 0; // flaga wciśniętego przycisku [/syntax] [syntax=c] Button_DDR &= ~(Button); //port - wejście Button_PORT |= (Button); //włącz pull up [/syntax] [syntax=c] ISR(TIMER0_OVF_vect)//przerwanie wywoływane...
Pokaż cały program. Jeśli masz schemat to także załącz.
Witam Od pewnego czasu zmagam się z problemem odbioru danych przez procesor ATmega32 w kodzie Menchester. Opisze w skrócie jak działa poniższy układ. W przerwaniu (tryb CTC) timera 0 znajduje się funkcja obsługująca trzy wyświetlacze LED (wspólna Anoda) oraz funkcja skanująca klawiaturę. Katody wyświetlaczy podłączone są pod PORTB, anody pod piny PD5,...
Może spróbuj sterowania w inny sposób - za pomocą przerwania INT2 (wywoływanego przyciskiem) uruchamiaj i zatrzymuj licznik TC0 (parametry PWM są ustawione u Ciebie poprawnie) tzn ustawiaj bity TCCR0|=(1<<CS00)|(1<<CS01) kiedy chcesz uruchomić licznik i zeruj je jeżeli chcesz zatrzymać. Samo ustawianie wartości wypełnienia czyli rejestr...
http://obrazki.elektroda.pl/2762225800_1... Jedyny taki przenośny programator układów AVR. Pomoże wszędzie tam, gdzie trzeba zaktualizować oprogramowanie, a układ docelowy znajduje się w trudno dostępnym miejscu i nie mamy możliwości (lub chęci) ciągać ze sobą laptopa i mnóstwa przewodów. Banalnie łatwa obsługa, niski koszt wykonania, super...
złe myślenie. 1 odczyt wierszy - portu dla jednego przycisku aktywowanego da 0b11101111 2 odczyt kolumn da 0b11111101 or da 0b11101101 teraz w programie głównym sprawdzić czy są 2 zera jeśli tak zdekoduj klawisz. nr bitu = 0 w górnej połowie wyniku *4 + nr bitu =0 w dolnej połowie bajtu lub za pomocą pętli key=0 for(kolumna 1 = 0 , kolumna <4, kolumna...
napisałem program zmieniłem taktowanie uc na 8MHz wgrałem program jedyne, co działa to obsługa przycisków Dodano po 24 Problem najpewniej występuje w tej części programu: Dodano po 3 66 osoby widziały ten post, ale tylko jedna odpowiedziała. Wiesz dlaczego? Ponieważ Twój kod i schemat są nieczytelne. Nadal to jest problem? Jakie mosfety włączają zasilanie?...
Przy wejściu w przerwanie nie reaguje na kolejne zbocza narastające lub opadające musi zakończyć obsługę przerwania i dopiero jak z niego wychodzie podejmie reakcję na kolejne zbocze. Przypuszczalnie w tym czasie zanikają drgania styków. Procesor ma w tym czasie sporo warunków do sprawdzenia. No właśnie (dobrze kombinujesz :) ) - jeśli tak jest (dużo...
Do przycisku daj jeszcze kondensator z 20nF, bo bedziesz jednym pstryknieciem wyzwalal wiele przerwan
No to tak: Jeżeli dobrze czytam program to masz 4 przyciski, timer ustawiony tak aby przerwanie od niego występowało co 50 Hz i nic poza tym. Używasz tylko przerwania od Timera - boisz się innych? Czy może to tylko nieznajomość AVR. Aż prosi się żeby przyciski działały pod INT0 / 1 - zewnętrzne przerwanie i po kłopocie. Następnie _delay_ms(750); zamienił...
AVR Studio 4 + WinAVR-20100110, hex ładowany przez usb: avrdude Według mojego bardzo skromnego doświadczenia poniższy kawałek kodu powinien po wymuszeniu niskiego stanu na PD2 spowodować mrugnięcie drugiej diody: (GND-10kohm-przycisk-PD2) - przycisk (GND-1kohm-LED1-PC5) - przycisk (GND-1kohm-LED2-PD6) - przycisk #define F_CPU 16000000UL #include <util/delay.h>...
Witam Na razie zrobiłem to tak: ( wywaliłem obsługę rozjaśniania/ściemniania bo coś się timery "gryzły" - zamiast Twojej Long1 jest Wl1 ), na razie uprościłem kod do jednego wyjścia '********************* Konfiguracja $regfile = "m32def.dat" $crystal = 16000000 Config Timer0 = Timer , Prescale = 64 Config Portc = &B11111100 'Pc.0, Pc1 jako...
W zasadzie nie potrzebujesz JP13. To chyba taki ukłon w stronę 8051 z dwoma przerwaniami zewnętrznymi. AVRy mają przerwania PCINT na prawie wszystkich pinach i w momencie jak wciśniesz przycisk i tak możesz wywołać przerwanie. Kolega trochę za bardzo uogólnia, nie wszystkie AVRy mają PCINTy na pinach, dodatkowo autor korzysta z Atmega32, który to w...
W celu eliminacji drgań styków należy użyć przerwania licznika, by odczytywać stan przycisku tylko raz na około 10 ms . Nie używamy funkcji Debounce i delay_ms ! Czy przycisk został naciśnięty sprawdzamy w zmiennej globalnej dostępnej w programie głównym.
Załóżmy, że to też błąd przy wklejaniu kodu (inaczej asembler zgłosiłby błąd). Powinno być R21 , a nie R121 . Być może to też błąd przy wklejaniu. Bity WGM12 , CS12 oraz CS10 nie znajdują się w rejestrze TCCR1A tylko w TCCR1B . Istotne jest jednak to, że ustawiając tylko bit WGM12 ustawiasz TIMER1 w tryb 4, czyli tryb CTC, w którym timer liczy od 0...
Fajny przykład jak nie pisać programu reagującego na przyciski... ;) Trzy zbędne znaczniki, zbyt długie oczekiwanie itd. Przecież wystarczy w jednej linijce kodu wywoływanego w przerwaniu timera wykryć zmianę stanu przycisku przy pomocy jednej dodatkowej zmiennej, a pod if() umieścić całą reakcję na przycisk. Kod wklejam tu mniej-więcej raz na miesiąc,...
Fakt, zapomniałem powiedzieć. Mam wyjście JP13 podpięte pod PD2, a klawiaturę (JP23) podpiętą pod port C. Stąd ustawienia wartości dla tego portu (w tutaj podanym kodzie zakomentowane). I którym przyciskiem wywoływać chcesz przerwanie?
Staram się przykładać stałą siłę docisku. Przycisk trzymałem nawet przez kilkanaście sekund i nadal to samo (styki powinny już dawno przestać drgać) - zmienna nieustannie się inkrementuje, przepłenia się i inkrementuje ponownie... czyli przerwania wywołują się nieustannie. Układ mam polutowany na płytce. Dodano po 4 Gdzieś musi być błąd w programie,...
PWM mógłbyś użyć do sterowania silnika prądu stałego, ale nie silnika krokowego. W Twoim przypadku żeby zmienić prędkość musiałbyś zmienić opóźnienie pomiędzy impulsami podawanymi na uzwojenia silnika. Na początek napisz coś takiego: uint8_t predkosc = 0; for (int i = 0; i < 4; ++i) { PORTB = _BV(k); switch (predkosc)...
Nie do końca tak jest. Pierwszy problem to podpisy cyfrowe sterowników. Win8 wymaga, a Win7 prawie wymaga tych podpisów. W efekcie brak może znacznie utrudnić korzystanie z takiego USB. Podpisane sterowniki (sterownik to dużo powiedziane, bo to tylko plik inf dla Windowsa) są dostępne od Atmela. Kolejny problem jest poważniejszy - biblioteki softwarowe...
Witam. Procesor ATmega32 Założenia programu: Dioda ma się palić przez czas trzymania przycisku (zwarcie do masy). W momencie puszczenia przycisku, dioda ma zgasnąć (potencjał VCC na pinie IMIT0 dzięki wewnętrznemu rezystorowi podciągającemu) Rzeczywistość: Po naciśnięciu i trzymaniu przycisku dioda zapala się i pali ale gdy puszczę przycisk, dioda nadal...
Niestety klawiatura matrycowa wymaga nieco zachodu z jej obsługą, za to wymaga mniejszej ilości pinów - coś za coś :) Nie wiem jakie dodatkowe funkcje będzie miał program, ale z reguły skanowanie klawiatury robi się w oparciu o jakiś timer, bo dodatkowo należy eliminować drgania styków. Strona ... korzystaj do woli, a w razie problemów pisz na forum...
Skompilowałem przez avr-gcc pod linuksem , spróbuj zamienić avr-g++ na avr-gcc? Albo pobierz eclipse CDT z wine [url=http://www.winehq.org/]Link jak widzisz [url=http://appdb.winehq.org/objectManag... AVRStudio już nieźle działa pod wine. Nie rozumiem poco się męczysz z makefile itp jak można to zrobić wygodnie z GUI....
Masz błąd w samej koncepcji. Przyciski obsługuj w przerwaniu timera, a LCD w pętli głównej. Nie możesz czekać na LCD w przerwaniu, a testowanie przycisków bez bazy czasu to nieporozumienie.
Zrób sprawdzanie godziny na jakimś przerwaniu z timera. Uważam że niepotrzebnie robi się to cały czas w głównej pętli. Ustaw timer żeby sprawdzał czas co 0,5 sek i to na pewno wystarczy. A w pętli głównej zrób tylko obsługę menu czy co tam jeszcze będziesz robił.
witam mam problem z wybudzeniem tego proca. przycisk jest podłączony pod int0 proca w programie głównym przycisk robi za enter ale jak się go dłużej trzyma to program skacze do powerdown i teraz nie mam pojęcia jak go wybudzać tym samym przyciskiem używając przerwania ? Do If Fun = 6 Then Fun = 5 If Fun = 255 Then Fun = 0 If Flaga = 1 Then Select Case...
Mam problem z przełączaniem bitów Założenia programu są następujące Program przez określony czas ma włączyć 2 diody oznaczone Pompka1 i Pompka2 oraz wyłączyć Napowietrzacz po upływie czasu ma przełączyć tz: wyłączyć Pompka1 i Pompka2 oraz włączyć Napowietrzacz po upływie drugiego czasu znowu ma przełączyć. Niestety program nie działa dobrze Diody działają...
Witam Jestem początkujący jeśli chodzi o mikrokontrolery. Jakiś czas temu zaczął mnie nurtować jeden problem. Robię projekt, który robi za termometr i zegarek oraz ma klawiaturkę 4 przyciskową do obsługi interfejsu. Później ma być jeszcze dodany czytnik kart microSD. Czujnik temperatury/wilgoci ma obsługę w postaci 1wire i wykonuje pomiar co 10sek jak...
Faktycznie, dziękuję i ponownie poleciał przycisk "pomógł". Źle zrozumiałem opis z książki str.79. Dzisiaj poprawiłem wiadomości z przerwania od TIMER1, zapoznałem się ze wskaźnikami i zmiennymi typu "volatile". Dzień był udany :D
Atmega 32, program obsługujący klawiaturę - 4 przyciski, odczytywane co 20 ms ( co któreś przerwanie timera 1), przyciski podpięte pod PC), PC0,PC1,PC2,PC3. jeżeli w programie wykorzystuję PC0 i PC1 to jest ok , ale jeśli w pętli obsługi przerwania odczytującego klawiaturę sprawdzam stan przycisków PC2 i PC3 to zgłoszenia przerwania są w każdym odczycie...
Witam ponownie, Dziękuję za odpowiedzi, bardzo mi pomogły - zmniejszyłem rozmiar zmiennych, przez co zmniejszyłem czas przerwania (przynajmniej taką mam nadzieję), rozbudowałem trochę program. _delay_ms(40) stosowałem żeby przycisk po zmianie stanu nie "iskrzył" Niestety problem znów się pojawił: Program nie wchodzi do pętli while, gdzie warunek jest...
DEX - no cóż dlatego, bo taki układ już jest i nic nie da się teraz zrobić. Kolumny i wiersze są podpięte bezpośredni pod wymienione porty.. Więc bezpośrednie wykorzystanie zewnętrznego przerwania nie wchodzi w rachubę. mariuszlorenc - no wlasnie może o to mi chodzi, ale jak to się robi, bo to moje naprawdę pierwsze doświadczenie z Timerami, flagami...
Napisałem kod dla zegara cyfrowego w Bascom. Ogólnie działa jak należy. Mam tylko problem przede wszystkim z budzikiem. Chcę aby podczas alarmu naciśnięcie przycisku 1(PORTD.0) wyłączało alarm(chodzi o sam dźwięk). Program nie reaguje. Nie mam pojęcia czy jest to wina tego, że nie nadąża z wykonaniem polecenia (za długie przerwania?) 2) Aktywowanie...
Witam ponownie po krótkiej przerwie. Ukończyłem wstępny schemat, projekt płytki również już powstał jednak opublikuję go dopiero po sprawdzeniu działania wszystkich bloków funkcyjnych, co powinno nastąpić w ten weekend (taki plan, ale nic pewnego). Założenia co do płytek i rozmieszczenia elementów: - dwie dwustronne płytki drukowane; - jedna płytka...
Podepnę się do tematu. Wykonałem projekt trackloggera rejestrującego dane gps i zapisującego je na karcie SD. Całość wykonałem na atmedze644 i śmiga bardzo dobrze. Pragnąłem dalej rozwinąć ten projekt i podłączyć wszystko do atmegi32, dodając jeszcze wyświetlacz. Podczas testów zmienionego pod atmegę32 kodu zaczęły się dziać dziwne rzeczy. Z gpsem komunikuję...
Może faktycznie szum nałożony na zbocze jest tu przyczyną wielokrotnego wywołania przerwania przy jednym impulsie. W poniedziałek przyjrzę się dokładniej temu zboczu i spróbuje coś zaradzić. Ale z drugiej strony gdyby tak było, to dlaczego impulsy zliczane są prawidłowo wtedy gdy program okrojony jest do minimum? Jaka jest szerokość impulsu? Maksymalna...
Witam! Moj problem przedstawia sie nastepujaco: Posiadam 4 czujniki cyfrowe. Zalozeniem jest wstrzymanie aktualnie wykonywanego kodu, gdy uC otrzyma sygnal z ktoregos z przyciskow i skok do petli powiazanej z tym czujnikiem. Przykladowy kod: $regfile = "M32Def.dat" $crystal = 16000000 $hwstack = 128 $swstack = 64 $framesize = 64 Config Pinb.0...
Oj mylisz się :) Ponieważ nie ustawiliśmy bitu ADATE, przetwornik wcale nie jest w trybie freerunning. Więc kolejne konwersje wcale nie robią się same. W trybie single (konfiguracja taka jaka jest u mnie) konwersja występuje wtedy gdy ustawimy bit ADSC. Bit ten jest tak długo ustawiony, dopóki trwa konwersja, więc najprościej zrobić pomiar tak: ADCSRA...
No to może się nie uruchamia przerwanie?:) Próbował kolega w procedurze obsługi przerwania zmienić coś z diodami i się zatrzymać wtedy? (Test czy się wywołuje przerwanie). B.R. Dodano po 4 Poza tym, spróbował bym ustawić ddrb&=0xfe (0 na pb0). Und upewnić się, czy na pewno jest "sprzętowe" połączenie przycisku taktującego z uC:).
To teraz do pełni szczęścia brakuje delay'a, którego znajdziesz w wielu programach :] A tak poważnie, to musisz eliminować drgania styków trochę inną metodą: [url=http://mikrokontrolery.blogspot.nl/... A tutaj jest praktyczna i bardzo sprytnie zrobiona aplikacja BlueDraco: [url=http://mikrokontrolery.blogspot.nl/...
Dobra, flagi w MCUCR i GICR poustawiałem, sprawdziłem i są OK. Po wciśnięciu przycisku napięcie na nóżce INT0 spada do 0, czyli jest zbocze opadające. Porównałem to nawet z przykładami z książki Dolińskiego i powinno być OK. #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/signal.h> #define...
OK, rozumiem. Napisałem coś takiego, prosta sekwencja na liczniku do sterowania silnikiem krokowym. Przyciski zwiększają lub zmniejszają prędkość sekwencji, tylko mam taki problem. Muszę zrobić tak, aby jedno wciśnięcie przycisku powodowało przyspieszenie, potem drugie wciśnięcie przycisku kolejne przyspieszenie itd. Z tego co wyczytałem, to najlepiej...
Nigdy nie będą się palić jednocześnie "Do lekcji" i "do przerwy" - za duży zamęt. Wsad prawie gotowy ale jeszcze trenuje na sucho. Może komuś się przydać symulacja zegara na PC sterowana przez uart. jest też opcja odbierania 2 liczb z tekstem w miejscu na log; Jak ktoś chętny to mogę napisać jak go wysterować przez uart. Wsad na Atmega32 + DS1307( sygnał...
Ten program jest źle napisany w sensie samych założeń i zrozumienia tematu. U góry w pętli masz warunek że kiedy przyciśnięty przycisk to Call Pwr_off Call powoduje że na stos czyli $Hwstack (u Ciebie pojemność 40B) zostaje odłożony adres powrotu. Call to skok z założeniem że chcemy tu wrócić. Po powrocie procesor ląduje dokładnie jedna instrukcję dalej...
kod ( właściwie część dotycząca PCF8574AP ) Piny P.0 - P.4 do switchy, podciągnięte do VCC przez rezystor 10 K, wyjście INT układu PCF8574 podciągnięte przez rezystor 10k do VCC Poprzedni układ był na Atmega328, ten jest na Atmega1284P Przy uruchomieniu jest tak, że miga pierwsza opcja menu - ustawienie minut, na przemian z tym co powinno być wyświetlane...
wynik wyswietli sie 2x, a nie trzy, pytanie - dlaczego? Na to pytanie, odpowiedź jest prostsza :-) Kiedy wywołujesz return 0, funkcja main powraca (to ogólnie nie najlepszy pomysł). W asemblerze, wywołanie funkcji main wygląda tak: 48:32 d0 rcall.+100 ; 0xae <main> 4a:4e c1 rjmp.+668 ; 0x2e8 <_exit> Po zakończeniu funkcji main wykonany...
Przesądy... ;) Nie "jak najszybciej" a "odpowiednio szybko"; np. jedyne w systemie przerwanie zgłaszane co 100 us może być obsługiwane przez 99 us i wszystko będzie ok. Toć napisałem: Dlatego z reguły przerwania powinny wykonywać się możliwie jak najszybciej ... Wiem, że mikrokontroler (w moim przypadku Atmega328) nie może wykonywać dwóch fragmentów...
Najrozsądniej jest zwykle badać stan przycisków w przerwaniu timera, np. tym samym, którego używasz do obsługi wyświetlacza. Popatrz np. tu: http://mikrokontrolery.blogspot.com/2011...
Po przeczytaniu o "prawdziwych" urządzeniach zacząłem się zastanawiać czy to co dotychczas udało mi się napisać na uC to było w prawdziwych urządzeniach czy tylko takich na niby. Ja stosowałem zazwyczaj metodę polegającą na sprawdzaniu stanu na pinie co pewien okres czasu( przerwanie od licznika) i gdy ten przestał się zmieniać uznawałem, że guzik został...
Co do programów symulujących to nie używam takich więc nie pomogę z nim (wolę pracę na "żywym organizmie ;) ). Jeśli rożne sprawdzone programy nie działają, to duże prawdopodobieństwo problemów sprzętowych, posprawdzaj: 1. Ustawienia fusebitów (czy wszystko się zgadza) 2. Wszelkie połączenia i kabelki czy nie ma gdzieś przerwy albo coś nie jest źle...
jeżeli chodzi o fuse'y to zajrzyj [url=http://fusecalc.engbedded.com]tutaj... Wybierasz rodzaj procesora i później odpowiednio jakie opcje Ciebie interesują. PAMIĘTAJ, sprawdź wszystko 3 razy, bo jak sobie usuniesz możliwość programowania proca przez SPI, lub reset (akurat przy Twoim procku to nie grozi) to uC idzie na półeczkę póki HVProga sobie nie...
http://obrazki.elektroda.net/30_12564983... W ostatnim czasie przestałem pisać programy typu mrugająca dioda i obsługa przycisków i zabrałem się za coś poważniejszego. Postanowiłem zbudować prosty zegar. Po kilkuset linijkach kodu, okazało się, że zegar nie jest już tak prosty, bo pojawił się w nim: obsługa LCD, RTC, PWM, timer w trybie CTC,...
Witam! Napisałem sobie obsługę klawiatury matrycowej 3x4 w bascomie. Nie używam umieszczonej tam funkcji getkb(), ponieważ podłączona jest do różnych portów. Sprawdzanie wciśniętych przycisków chcę przeprowadzić w przerwaniu od wewnętrznego zegara TIMER0. Na ATmega32 wszystko bez problemu działa. Płytka, pod którą to robię działa niestety na ATmega8515....
piny sa na płytce już, ale na 100% to nie problem pinów. Teraz jak piszę inny program. Mam tak za INT0 jest na D1 ;/ Ale że co? Przerwania są na fizycznych nóżkach, nie przestawisz ich. Jeśli zwierasz przyciski do masy to (j/w) je podciągnij, mogą być wewnętrzne pullupy. Nie konfigurujesz typu przerwania, domyślnie jest low level zdaje się - a jak...
korzystając z rozpoczetego ważkiego tematu , spytam czy można uśpić mikrokotroler 'powerdown'-em i wybudzić go jednym i tym samym przyciskiem pisząc w bascomie avr ? Za wszelkie informacje , może nawet przykłady serdecznie dziękuję. Tak jak już to wcześniej napisano z trybu POWERDOWN można budzić zewnętrznym przerwaniem a to przerwanie odpowiednio...
Zrób sobie najpierw obsługę jednego wyświetlacza, czyli napisz funkcje switch() {case} lub lepiej o tablicę znaków (zdaje się tak próbowałeś) Pamiętaj żeby skofigurować użyte piny jako wyjścia. Potem zrób przycisk. Na początek prosta pętla która przepisze stan przycisku na jakiś bezpośredni LED. Wciskasz, trzymasz, led się zmienia....
Testuj przycisk w przerwaniu timera i np. ustawiaj znacznik zmiany czujnika. W pętli głównej testuj znacznik i po ustawieniu wyświetl następny czujnik i wyzeruj znacznik. http://mikrokontrolery.blogspot.com/2011...
Sciślej rzecz biorąc, likwidacja drżenia styków zazwyczaj jest realizowana na przerwaniach, jeśli nie, to korzysta ze zmiennych modyfikowanych w przerwaniu. Z tego powodu w przerwaniu (np od wejścia INT) nie można takiej funkcji użyć. Na ARM jest na to proste lekarstwo zwane priorytetami przerwań, na AVR (poza najnowszymi) prostego rozwiązania nie ma....
Źle bufor masz zorganizowany, źle wystawiasz dane z tego bufora do PWM. Nie napiszę tego w C bo nie będę dawał gotowca,ale mogę napisać jak logicznie to powinno być, resztę sam musisz zrobić. W przerwaniu timera masz tylko ładować do PWMa bajt z bufora wskazywany przez wskaźnik, nic więcej nie robisz w przerwaniu, a juz na pewno nie przeładowanie bufora...
A nie możesz wykorzystać przerwania od zbocza np INT0? Jak pojawi się dodatnie zbocze to robisz krótki sygnał i program pracuje dalej. Dopiero jak ktoś puści przycisk i znów naciśnie pojawi się znów zbocze narastające które może wywołać przerwanie. Ideałem byłoby abyś po pojawieniu się przerwania od narastającego zbocza, włączał Buzzer potem uruchamiał...
Witam, dołączę się do tematu aby nie zaśmiecać forum. Moim problemem jest drganie styków przycisku aby wywołać przerwanie int2. Przyciskiem włączam i wyłączam optotriak MOC3041 który z kolei załącza sterownik lampy sodowej 70W przez triak. Problem jest taki: mimo, że zrobiłem programową obsługę drgań styków to działa ono jedynie bez obciążenia - czyli...
czy ktoś byłby mi w stanie pomóc w ustawieniu przerwania na int1 urzywająć timera1 ? ponieważ nie radzę sobie z ustawieniem tego 16 bitowego timera. ogolnie przerwanie miało by wyłączać silnik jesli zostanie wciśniety przycisk bądź krancówka
Witam serdecznie mam mały kłopot z obsługa przycisku KEY3 jeśli nacisnę klawisz sw3 to zmienna powinna zmienić wartość na 1,a warunek do obsługi klawiszy KEY2 i KEY1 powinien być spełniony, niestety nie działa :([syntax=c]/* * main.c * * * */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define KEY1 (1<<PB0)...
Witam forumowiczów. Siedzę od jakiegoś czasu przy zegarze PCF8583 i VFD CU20029SCPB-25A. Napisałem do niego obsługę 2 termometrów na DS18B20 i pilota RC5. Wszystko działa poza, wybudzeniem procesora z POWERSAVE. Nie mogę sobie z tym poradzić. Nie mogę znaleźć konkretnego przykładu. Po naciśnięciu przycisku na pilocie ma się uśpić Atmega, i tak robi....
DDRA=0xff; //port A jest portem wejściowym wg. mnie wyjściowym. volatile unsigned char i; // flaga określająca poprzedni stan diody nie korzystasz z przerwań więc po co volatile? Po za tym po co sprawdzasz poprzedni stan diody skoro stosujesz negacje? Wydaje mi się że tego typu warunek w zupełności wystarczy: if (bit_is_clear(PINB, 2))...
Witam Zrobiłem sobie układ, który ma na wyświetlaczu wyświetlać godzinę oraz temperaturę wody. Samą obsługę wyświetlacza jakoś udało mi się ogarnąć, natomiast mam problem przy odczycie temperatury z czujników oraz czasu z ds1302. Na początku ustawiam sobie godzinę 10:40 i to wyświetla się poprawnie, ale jak idzie odczyt z ds1302 to wyświetla mi się...
Witam Moja propozycja to: ATMEGA32 (13zł) + 2 tranzystory PNP (0,4zł) + kwarc z kondensatorami (2zł) + 3 przyciski typu uswitch (1,5zł) + stabilizator napięcia 7805 (1,2zł) + kondensatory (1,5zł) + rezystory (0,5zł) + kwarc zegarkowy (1,5zł) + dwa wyświetlacze LED (6zł) + laminat (3zł). To jest trochę więcej niż cena ADUC814. Jeśli w Twoim sklepie tego...
A, to jednak niezupełnie zrozumiałem. Sterowanie polega na tym że przyciskiem na przerwaniu 2 zmieniasz sekwencję (i kierunek?) a na przerwanie 1 i 3 przychodzi ?( DIR) i STEP. To jeśli tak to po wciśnięciu przycisku zmieniającego kierunek (krok, półkrok?)musisz stopniowo zmieniać szybkość impulsów podawanych na uzwojenia prawie aż do zera. Zmieniając...
Witam, chciałbym przedstawić moją konstrukcję która powstała w zeszłym roku i teraz publikuję ją Wam. Jest to uniwersalna płytka bazowa posiadająca następujące włąściwości: Procesor ATMEGA32A z kwarcem 8 MHz Rozmiar pcb identyczny jak wyświetlacza 2x16 znaków HD44780 (można je ze sobą skręcić. Wyprowadzenie złącza do wyświetlacza. Wbudowany zegar RTC...
Chciałbym zrobić symulację naciśnięć klawiszy na klawiaturze PS/2 wykorzystując ATMega328 z rezonatorem kwarcowym 16MHz i interfejs PS/2 na USB. Posiłkowałem się tym opisem PS/2. https://www.avrfreaks.net/sites/default/... Z opisu wynika, że urządzenie PS/2 (wspomniana klawiatura) musi być w każdej chwili przygotowane do odbioru...
Co do procedury opozniajacej w przerwaniu: dałem ją tam aby układ obudził się po wcisnieciu przycisku ale nie zdarzył wylapac drugi raz, ze przycisk wcisniety i wykonac drugiej funkcji danego klawisza. Każdy klawisz w moim układzie ma miec dwie funkcje: budzenie układu oraz drugą różną dla każdego przycisku.
W kodzie jest sporo błędów. Nie do końca jestem pewien, czy rozumiem, o co chodzi, ale jeśli przerwanie INT0 jest od przycisku, to nie ma prawa działać poprawnie, a przyczyna efektu, który obserwujesz, leży w operacjach na zmiennej b. Takie przerwanie po wystąpieniu musiałoby być blokowane przy pomocy timera na jakieś 30 ms, co jest znacznie bardziej...
Witam wszystkich. Postawiłem sobie za cel, stworzenie projektu sterownika silnika krokowego za pomocą mega32. Założenia są takie odczytując przyciski z klawiatury generujemy odpowiedni efekt. Jak wiadomo układ L298-7 działa na zasadzie podania 3 sygnałów Lewo/Prawo, półkrok, krokowo oraz CLK. I tu powstaje problem :) Otóż przyjmijmy że za pomocą przycisku:...
http://obrazki.elektroda.pl/2645142000_1... Sterownik diod LED został wykonany w celu automatycznego lub zdalnego sterowania oświetleniem LED w zależności od jasności w danym pomieszczeniu. Układ sterowania oparty jest o mikrokontroler ATmega16/ATmega32 firmy Atmel, który w zależności od oświetlenia w danym pomieszczeniu steruje jasnością...
Typ płytki Arduino to Duemilanove - Połączenie diody LED: zewnętrzna dioda - Czas migania: dowolny - Dalsze działanie programu: zakończenie pracy Wstępna ocena dostępnych informacji - Analiza podanych przez użytkownika danych: - Płytka Arduino: Duemilanove. - Połączenie diody LED: Zewnętrzna dioda podłączona do płytki. - Czas migania: Dowolny (domyślnie...
Aby to zlikwidować skorzystaj i innej metody eliminacji drgań styków a najlepiej umieść obsługę przycisków w przerwaniu... ...timera, tu jest przystępnie wytłumaczone jak obchodzić się z timerami http://diycenter.acid19.linuxpl.com/read... Timery działają asynchronicznie w stosunku do głównej pętli programu, więc timer licząc czas...
Chodzi o to, ze nacisniecie przycisku z tego rzedu nie powoduje zerowania linii K1,K2,K3 lub K4. Na W4 faktycznie mozna odczytac 0V, na SW_INT- 5V, natomiast nacisniecie przycisku nie wywoluje obnizenia napiecia sygnalu 5V do 0V tak jak na innych wierszach... Zakładam, że klawiaturę sprawdziłeś omomierzem, czy przyciski zwierają W4 z kolumnami? Dodam,...
Witam, potrzebuję wykonać urządzenie, które będzie załączane przyciskiem a odłączane przez Atmegę. Założenia są takie: po naciśnięciu przycisku - atmega włącza się, wykonuje program i rozłącza układ od zasilania. Ważne jest aby atmega nie była uśpiona ale wyłączona. Urządzenie będzie robić jeszcze parę innych rzeczy, będzie miało też podłączone moduły....
Rezystora nie ma na schemacie ale fizycznie go wlutowalem i dalej nic. Najczesciej wyzwalaja sie przyciski klawiatury lub zewnetrzne przerwanie. W programie wlaczone pull-up.
Hej.Jestem początkującym i od paru dni walcze z małym projektem. Potrzebuje wypisywać stan diod "aktualnej" na wyświetlaczu led(wypisywac H/L i obok numer diody..Zadreklarowalem tablice z segmentami, numerem diody oraz uruchomiałem timer0(chce to na przerwaniach). Aktualna diode przełącza się przyciskiem w porcie PD0 a włącza/ wyłącza przyciskiem PD1....
Niestety laborki te mamy w asemblerze...przynajmniej ich początek. W języku C będziemy pisać niebawem na co ze zniecierpliwieniem czekam. Co do Twojej podpowiedzi, rozumiem, że cała operacja odbywała by się tak jak powiedziałem, czyli dwa przyciski wielokrotne klikanie jednego np zwiększa prędkość ? A w łopatologiczny sposób na delayach, jak wykonać...
http://obrazki.elektroda.pl/3988245700_1... Autor zastanawiał się, jak zaimplementować w projekcie interfejs bardziej elegancki, niż zwykle stosowane przyciski. Częściowo zainspirowany materiałami wideo umieszczonymi przez D. Jones'a na stronie EEVBlog, postanowił zainteresować się pojemnościowymi przyciskami dotykowymi. Zwykle jednak...
Witam, Wiem, że RC5 ten wątek był poruszany wiele razy na forum, ale chcę sie nauczyć programować w C, wiec chciałem wykorzystać odbiornik podczerwieni z mojego zestawu(ZL3AVR) i napisać protokół do RC5 Pracuje na kwarcu 16MHz i ATmega32. Odbiornik podczerwieni podłaczylem do PD3 #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h>...
http://obrazki.elektroda.pl/3089511800_1... Witam, dziś prezentuje swój bezprzewodowy termometr pracujący na częstotliwości 433 MHz. Urządzenie składa się z nadajnika i odbiornika. Nadajnik odczytuje temperaturę pieca C.O. i wysyła ją do odbiornika. W odbiorniku mamy możliwość ustalenia górnego i dolnego progu załączenia alarmu, który...
Trzeba zacząć od tego że ustawione przez Ciebie przerwanie co 16ms jest niepraktyczne. Wygodniej liczyłoby się 5ms i przydałby sie do enkodera, albo nawet 10ms w ostateczności do przycisków. Przypuśćmy, że ustawiasz przerwanie na 5ms. W nim ustawiasz tylko flagę i wracasz. W pętli głównej widząc ustawioną flage możesz sobie spokojnie dodawać po 5ms...
Tak negatory to IC2. Służą one do sterowania silnikami DC poprzez mostki STA434A. Jeśli zabraknie prądu to silniki przestaną pracować i w zasadzie obojętne jest jaki będzie wówczas stan na wyjściach negatorów. Nie wiem też czy mostek pobierałby wtedy prąd czy nie, ale z tego co zrozumiałem to sam negator by pobierał dla utrzymania takiego stanu? Jeśli...
Witam. Tani uC Atmela: ATmega8 - koszt ok. 6zł Są też układy serii ATtiny za ok. 5zł, ale lepiej już zainwestować w mega8. Posiada więcej pamięci i układów typu timery, przerwania, przetwornik, itd. Można też kupić za ok. 10zł ATmega32 - ten procek już w zupełności wystarczy do większości amatorskich projektów. Tym bardziej dla początkujących. Schemat...
Witam, bardzo Was proszę drodzy koledzy o pomoc w ustaleniu przyczyny dziwnego działania programu na procesorze ATmega, bo już zaczynam dostawać białej gorączki od tego. Bardzo mi zależy na szybkim ukończeniu projektu, a tu co chwilę jakieś problemy i zmarnowane dni na szukanie przyczyn niepowodzeń. Problem polega na tym iż procesor co jakiś czas wykonuje...
Nie znam Bascoma więc nie wiem co Robią pokazane programy ale jest prosty sposób na to. Ustawiasz jeden Timer tak aby zgłaszał przerwanie (np od przepełnienia) co 1 ms (czy jaką tam sobie dokładność chcesz). Timer sobie zasuwa i zgłasza przerwania, w przerwaniu sprawdzasz stan jakiegoś Pinu i jeśli wtrysk jest otwarty to dodajesz licznik ms a jeśli...
http://obrazki.elektroda.pl/4295404500_1... (Zdjecie przedstawia niedokończona płytkę, brakuje jeszcze rezystorów) W tym wypadku wejscia zaprojektowałem aby mozna bylo podlaczyc fotokomorke lub czujnik indukcyjny. W razie potrzeby podłączenia przycisku, po prostu podłączam go miedzy + a sygn. Nie ma żadnych zakłóceń. Atmega odpowiada...
No to jazda, czyli łopatologicznie. Wyobraź sobie, że odrabiasz lekcję, ale dostajesz łopatą w łeb od ojca, który w ten sposób informuje cię, że woda się gotuje. Więc ty natychmiast przerywasz pracę i biegniesz ją wyłączyć, zrobić herbatę, a potem wracasz do lekcji. I teraz tak: 1. Lekcje które odrabiasz to jakiś kod, który sobie leci 2. Łopata w łeb...
Co z tego, że są "w stanie 1"? No zgadza się, że przyciski są tylko tymczasowo, ale one mogą załączyć podczas jednego naciśnięcia przerwanie nawet kilkaset razy. W dodatku w przerwaniu masz operację mnożenia na zmiennej SINGLE co nie jest dobrym rozwiązaniem. Jeszcze raz sugeruję by wywalić LCD z pętli. Najlepiej ją zostawić pustą. Wynik wyświetlać...
przerwa atmega32 atmega32 przycisk atmega32 przerwa timer
focal wzmacniacze wyszukać ostatni wiersz dopisanie klucza
dźwignia klamka dźwignia klamka
Najlepszy podnośnik trapezowy na pobocze – Cartrend 10929, START 2007, Mastiff MF5515 – opinie, testy UOKiK 2025 Electrolux EWD 1697 MDW – pralka nie włącza się, brak zasilania, diagnoza filtra EMI i SMPS