A jak masz 10 przycisków wykorzystasz 10 przerwań? marnotrawstwo. wykorzystasz jeden licznik i po kłopocie zero opóźnień typu delay. Same zalety. minus? jeden: wykorzystany licznik.
http://obrazki.elektroda.net/39_12775659... Projekt: Sterownik panela słonecznego. Wstępnie będzie wykorzystywał pięć modułów takich jak: a) płyta główna, b) moduł zasilacza c) szyna, d) sterownik osi X, e) sterownik osi Y, f) moduł multi który obsługuje: - wyświetlacz HD44780, - klawiatura PS/2, - czujniki słoneczne osi X, - czujniki słoneczne...
Witam wszystkich, Na wstępie od razu napiszę ,że czytałem już wiele na ten temat na avrfreaks i tutaj też ,jednak nie znalazłem odpowiedzi na swoje pytanie .Jeśli dubluję jakiś temat przepraszam ,ale uwierzcie że zadałem sobie troche trudu by poszukać w necie i samemu to rozwiązać. Piszę w C ,na darmowy kompilatorze winAVR ,mam zestawik z BTC .Testuje...
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,...
Czy to oznacza, że przycisk masz podłączony pod pin 0 portu B ? Wejście INT0 w ATmega32 jest na pinie 2 portu D i tam powinien być podłączony przycisk, aby wywołać przerwanie. Dopiero procedura obsługi tego przerwania włącza timer 1.
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ł...
udało mi się go wybudzić ale nie tak jak chciałem przycisk s1 wprowadza go w powerdown a s2 budzi a jak to zrobić żeby np s1 budził i usypiał
atmega32 tyle co sie juz zorientowalem to: ISR(INT0_vect) { } wówczas zmieniam pind2 posiedzialem poczytalem i zadzialalo
No według opisu płytki na JP13 pojawi się stan niski, gdy jakikolwiek przycisk zostanie wciśnięty. Więc jakimkolwiek.
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...
Dziękuję za odpowiedź Kolego Dr Vee Dotychczas udało mi sie napisać program który wyświetla mi statycznie do znaków...A wygląda to tak dane (ciąg znaków) są z UART-u zapisywane w zdefiniowanym programowo buforze znaków. Następnie w wyniku przerwania, które następuje co ok. 100us odczytuję z bufora znaków jeden znak i na podstawie biblioteki fontów przekodowuje...
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>...
Uzupełniłem bibliotekę do sterowania silnikiem o komentarze, mam nadzieję, że teraz będzie dokładnie wiadomo, o co mi chodzi. [syntax=c]#ifndef STEPPER_H_ #define STEPPER_H_ #define TURN 400 //ilosc krokow na obrot silnika #define MAX_DELAY 255 //maksymalna wartosc opoznienia miedzy krokami #define MIN_DELAY 5 //minimalna wartosc opoznienia miedzy krokami...
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...
Zrobiłem narazie przesuwanie sekwencji o stałej częstotliwości na timerze0 w trybie normalnym. Rozumiem, że teraz aby dodać skanowanie z przycisków muszę przestawić licznik w tryb CTC i ? właśnie co. W pętli głównej czyli w mainie, muszę dać skanowanie portu z przyciskami na wejściu, teraz jak to miałoby działać ? Jeśli wcisnę powiedzmy przycisk 0 to...
Witam, zbudowałem klasyczny zegar, tak jak w temacie napisałem na ATmega32, Chińskim module z układem DS1307 i z jakąś pamięcią na I2C której nie używam, czas pokazywany jest na wyświetlaczu LED. Wcześniej testowałem sobie to wszystko z wyświetlaczem LCD 2x16 HD44780 wszystko śmigało mi super. Po dodaniu LCD i multipleksowania zegar po kilku, kilkunastu...
Mam następujący kolejny błąd : SPI Collision FLAG. Przerwania nie naprawiły błędy. ktoś ma pomysł ? Dodano po 1 Witam, Naprawiłem problem. Napisałem jeszcze raz od nowa cały program, problem był w tym, że kompilator nie za bardzo rozumiał kodu w postaci (1<<PB4) gdzie był zatrzask. SPIIF kasuje poprzez dla zainteresowanych kod : [syntax=c] #include...
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...
Witam! Mam problem z transmisją RC5. Gdy odpalam układ to na LCD Adres=0 i Komenda=0 gdy natomiast nacisnę jakikolwiek przycisk to Adres=255 a komenda=127. Posiadam układ do odbioru RC5 TSOP31236 połączony wg schematu poniżej. http://obrazki.elektroda.pl/6312431800_1... Atmega jest ustawiona na wewnętrzny kwarc 8Mhz. Próbowałem też zrobić...
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...
Pierwsza część programu Dodano po 8 no i druga się nie mieści, więc wrzuciłem do pliku tekstowego.
Witam Mam problem Wszystko działało na portach PA PC i PD4-7 ale jak podpiąłem cały PD PB do drugiej części matrycy diodowej to przestało działać chyba przez przerwania. Zmieniłem rodzaj przerwania na czasomierz z uwagi ze chyba piny INT0 zmieniały stany. Wszystkie porty mam jako wyjścia a w części matrycy mam błędy zawsze w tym samym miejscu. Jaki...
Witam Potrzebuje pomocy w obsłudze przerwań. Muszę zrobić projekt skrzyżowania na zajęcia z sieci automatyki, i napotkałem problem z przerwaniami. Próbowałem na wiele sposobów coś napisać, ale bez skutku. Potrzebuje jakiś testowy kod, który np: będzie mi zapalać i gasić diodę podpiętą do jakiegoś portu. Oto kod poprany z jakiejś strony, lecz też mi...
Witam! Mam mały problem. Od kilku godzin próbuję ustalić przyczynę braku możliwości obsługi przerwania w moim zestawie EVB 5.1 z ATMega 32. Mianowicie, próbowałem wszystkich możliwych opcji uruchomienia przerwania poprzez naciśnięcie przycisku i niestety nie wychodzi. Po naciśnięciu przycisku 3 diody mają zostać wyłączane/włączane zależnie od poprzedniego...
Chciałbym wykonać funkcje do obsługi przetwornika A/C która po wciśnięciu przycisku wykonuje pomiary do czas aż nie wciśnęto innego przycisku. Poniżej zamieszczam kod który nie realizuje moich założeń. W poniższym kodzie nie wpisałem realizacji przetwarzania A/C zastąpiłem to migającą diodą. Wykorzystałem do tego funkcję do-while. Proszę o jakieś sugestie...
Wit mam. Piszę pewien program. Przed wejściem do pętli głównej programu napisałem funkcję w której użytkownik wstępnie nastawia parametry programu głównego. Problem polega na tym, że przy naciskaniu klawiszy program wychodzi mi z pętli głównej programu do funkcji w której nastawiane są parametry. Funkcja w której mają być nastawiane parametry okrojona...
Prosze o podpowiedz-przykladzik jak configurowac (w ATMEGA32)przerwanie np. INT1 aby reagowalo na opadajace zbocze
Witam! Temat brzmi zapewne banalnie dla niektórych.. Nie, nie znalazłem odpowiedzi na moje pytanie w innych wątkach, chociaż jest ich mnóstwo. Zrobiłem banalny projekt z diodą led podpiętą przez rezystor pod pin PB0, przycisk z jednej strony zwarty do masy, a z drugiej podpięty pod pin PD6. Zabawa polega na tym że chciałbym zgasić diodę za pomocą guzika...
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 szanowne forum. Zaczynam uczyć się programowania mikrokontrolerów w C. Jak zawsze, początki nie są łatwe. Proszę o pomoc i naprowadzenie mnie na dobry kierunek. Jestem na etapie obsługi pinów procesora,tz. w założeniu jest tak, że mam 4 przyciski podłączone do portu. Port jest ustawiony, jako wejście i podciągnięty do vcc. Do innych 4 pinów podłączone...
Witam wszystkich, mam problem z przerwaniem od przepelnienia, timer1. Siedze nad ta prosta rzecza któryś dzień z kolei i nie moge sobię poradzić. Prosiłbym o sprawdzenie kodu. [syntax=jezyk_C] #include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 // czestotliwosc zegara 1MHz #include<util/delay.h> int main() { DDRA =...
Cześć Ten kod mi nie działa.Czy moglibyście rzucić na niego okiem. Ten kod poprostu ma za zadanie nadawać w standardzie space.Ladnie pokazuje adres ale nie działa komenda pokazuje same zera. [syntax=c_mac] //Załączanie plików nagłówkowych #include<avr/io.h> #include<util/delay.h> //Czasy dla nagłówka #define first_header 9460 #define second_header...
Próbuję zrozumieć działanie przerwań i coś mi to nie wychodzi, chciałem uzyskać efekt że po naciśnięciu przycisku program który jest w pętli nieskonczonej obsługuje przerywanie ale mi to nie wychodzi, o to fragmenty kodu: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> ENABLE_INT0_FLAGING; waitms(unsigned...
Co tutaj przekombinowałem? Atmega32. Tryb Licznika. Celem było zapalenie i gaszenie diod co sekundę. Preskaler = 256. Przerwanie tak wyliczone aby wykonywało się co sekundę. Timer 16bitowy [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> ISR (TIMER1_OVF_vect) { PORTC ^= ~0xFF; //zmiana stanu portu C...
Witam! Mam program, który wykorzystuje liczniki do wysyłania impulsów o danej częstotliwości. Częstotliwością steruję za pomocą zmiennej okres1, która jest mnożnikiem preskalera. Np. preskaler=8 clkio=1000000Mhz okres1=127, czyli co 8*128=1024us zmienia się stan na danym pinie przerwania od przepełnienia licznika (dla timera1a jest to pd5), co znaczy,...
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...
Pokaż cały program. Jeśli masz schemat to także załącz.
Witam, w dobrym kierunku idziesz, ale to ci nie zadziała bo jak? skoro na początku programu tylko raz ustawiasz piny klawiszy jako wejścia oraz pin przerwania INT0 też jako wejście. Więc co ma tutaj wymuszać stan niski na wejściu INT0? nic!. Aby ten sposób zadziałał - musisz jeszcze pomyśleć o zmianie kierunków portów wtedy gdy trzeba. Generalnie założenie...
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.
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.
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...
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.
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...
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...
Do przycisku daj jeszcze kondensator z 20nF, bo bedziesz jednym pstryknieciem wyzwalal wiele przerwan
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...
Schemat http://www.adatronik.com.pl/PRO_ATMEGA32... pod piny sa podlaczone przyciski, które przed normalnie dzialaly
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)...
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,...
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...
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ł...
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...
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...
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...
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...
Mógłbym prosić o szersze wyjąśnienie? W którym przerwaniu? Czy chodziło mniej wiecej o coś takiego? [syntax=c] #define F_CPU 1000000L #define czas_przerwania_T2 10 #include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t wzor = 0; volatile uint8_t stan_portu= 0; ISR(TIMER0_COMP_vect) { TCCR0 &= ~( (1<<CS02 ) | (1<<CS01)...
1. kod działa na tej zasadzie: If T1 = max_pulse then 'jeżeli trzymamy przycisk długo, tak że ilość przerwań timera zrówna się ze zdefiniowaną stałą to t1=0 'resetujemy licznik przerwań long1 = 1 'ustawiamy flagę długiego trzymania przycisku gosub dlugie_1 'wykonujemy funkcję endif 'to samo dla drugiego przycisku If T2 = max_pulse then t2=0 long2 =...
jak przyciskam i trzymam to KEY1 powoduje znaczne zwolnienie pracy licznika można to jakoś ominąć aby on liczył stabilnie gdy KEY1 jest wciśnięty cały czas ? Dzieje się tak za sprawą _delay_ms(80); w funkcji uint8_t klawisz_wcisniety(uint8_t klawisz) Aby to zlikwidować skorzystaj i innej metody eliminacji drgań styków a najlepiej umieść obsługę przycisków...
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...
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ć...
Witam wiem schemat nie jest najlepiej dopracowany ale już działa poprawnie. Nogi "niczym" nie zakończone stawały nie antenami , np przyciski. Dodałem po 100nF na przyciski i problem ustąpił. Wyzwalanie przerwania tez było podciągnięte pod styk przekaznika i było w powietrzu 100nF do masy i jest OK. Dziękuje za sugestie zamykam
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
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...
A gdybym tak zrobił te piknięcia i przerwy między nimi za pomocą tych zwykłych waitmsów, tak aby było mega prosto a stan przycisków odczytywał po prostu w przerwaniu od timer-a czy dało by radę takie rozwiązanie?
atmega32 przerwania przerwania atmega32 przycisk przerwania
tecumseh ustawienie zaworów wieże philips czytnik płyta panasonic
Instrukcja obsługi przekształtnika diodowego BESTER PSC-26/40 z 1982 roku Demontaż obudowy spawarki ARC160 - krok po kroku