Ż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.
W programie musisz sam badać stan przycisku. Przerwanie to coś innego. Chyba że przycisk będzie podłączony do któregoś INTx.
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...
[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.
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?
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...
atmega32 tyle co sie juz zorientowalem to: ISR(INT0_vect) { } wówczas zmieniam pind2 posiedzialem poczytalem i zadzialalo
A ustawienie stosu to gdzie ? Kodu w obrazkach się nie wstawia, tylko w tagach code] ] Kod w ogóle to masakra, użyj preprocesora... Co to za "delaje" w przerwaniu ? Obsługa przycisków przez przerwanie to mi bascomem zalatuje...
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...
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.
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...
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.
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...
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...
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.
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ł...
Schemat http://www.adatronik.com.pl/PRO_ATMEGA32... pod piny sa podlaczone przyciski, które przed normalnie dzialaly
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.
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. 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 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...
Dziękuję za odpowiedź. Czy mógłbyś napisać to samo ale z komentarzem do każdej linii ? Nie wiem, czy dobrze rozumiem idee Timera. Enable Interrupts ---- uruchamia przerwania Enable Timer0 ----- uruchamia Timer0 On Timer0 Przerwanie_co_1s ---- nazwa programu, który obsługuje przepełnienie timer0 Dim T1 as Integer ---- zmienna typu Integer dla pierwszego...
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ł...
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...
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/...
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
Do przycisku daj jeszcze kondensator z 20nF, bo bedziesz jednym pstryknieciem wyzwalal wiele przerwan
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...
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ć...
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ł
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...
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?...
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)...
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...
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...
Koncepcję mam taką: - ustawiam jeden timer żeby generował przerwanie co 20ms i w tym przerwaniu zwiekszam zmienną typu unsigned int o 1. Czyli przy wykonaniu 50 takich przerwaniń mam okres 1 sekundu. Zmienna niech będzie c. - w momencie wykrycia zamiany stanu przycisku np. B0 ustawiam zmienną określająca timer dla tego portu na wartość c+TIMEOUT, gdzie...
Co do procka to LordBlick ma racje. W LV wywal tą strukturę sekwencyjną i te "prymitywną synchronizację". Daj lepiej w zwykłej pętli while odczyt i zapis. Jak wejdziesz w przerwanie ustaw flagę informującą procke o wysłaniu danych po wyjściu z przerwania. Procek wychodzi z przerwania i wysyła info do LV. Jak coś wpiszesz do rejestru to wyślesz, LV odbierze...
Dobrze zrozumiałeś program. Sterowanie następuje zewnętrznymi impulsami a dokładnie impulsami z przerwań zewnętrznych. Po ich wywołaniu jak widać zmienia się wartość rejestru OCR0 do którego zlicza licznik w trybie CTC - jest to prędkość sekwencji. W przerwaniu zewnętrznym 2 każde kolejne wciśnięcie przycisku powoduje zmianę sekwencji, krokowe, półkrokowe...
Witam Od kilku dni bawię się (jak narazie) w programowanie ATMEGA32 i trafiłem na problem z przerwaniem zewnętrznym Interrupt 0. Dopiero zaczynam, więc mój problem może okazać się lamerski, więc z góry przepraszam. Napisałem coś takiego: #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> //#include <avr/signal.h>...
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...
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...
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.
Nie chce mi się analizować zbytnio tego kodu, z powodu rażąco rażących błędów... Na pierwszy rzut oka delay-e zamiast wszystko oprzeć o przerwanie jakiegoś timera... Po drugie, jakoś tak dziwnie napisany switch?... W książkach każą używać klamer o ładnych kształtach "}" "{" wokół kodu w case o ile jest w nim więcej niż jedna instrukcja... Po trzecie,...
w nowym kodzie robiłem toglebit na porcie na którym była kiedyś IRDA... a może nie może tylko na porcie np. portc.2 myślałem że o to chodzi. nie dokładnie to określiłem w zdaniu albo pomieszałem nazwy funkcji rzeczywiście.. gdzieś się zapodziało.. musiałem skasować przez pomyłkę.. teraz działa poprawnie wielkie dzięki.. Dodano po 9 za to przyciski od...
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,...
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...
Mam jeszcze takie pytanie, w połowie zgodne z tematem ale też odnośnie PWM. Muszę przerobić stary program PWM, w którym wypełnienie zmieniałem z przycisków tak aby zmieniać wypełnienie za pomocą przetwornika A/C i potencjometru. Nie wiem za bardzo jak się za to zabrać...Przerwanie od ADC ? czy całość przetwornika w pętli głównej main ? Ale z kolei jaki...
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,...
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...
Witam, Przerwania zewnętrzne można wykorzystać, ale problem będzie z drganiem styków - po zwarciu/rozwarciu styki przycisku drgają kilka-kilkadziesiąt milisekund, więc są duże szanse, że zarejestrujesz dużo więcej zmian stanu niż było w rzeczywistości :) Najprościej zrobić programową eliminację drgania styków używając rejestru przesuwnego. Co jakiś...
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...
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...
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ć...
Witam. Już mnie krew zalewa. Nie potrafię sobie poradzić z problemem. Prawdopodobnie ktoś szybko znajdzie błąd, ale ja już nie mam siły do tego. Problemem jest wybudzenie mikrokontrolera z power_down przez przerwanie zewnętrzne INT1. INT0 działa bez problemu, natomiast nie potrafię zmusić do tej czynności INT1. Celem jest wybudzanie mikrokontrolera...
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...
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...
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>...
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ą...
Znasz przecież operacje bitowe: http://mikrokontrolery.blogspot.com/2011... skoro piny ustawiasz i zerujesz. Po prostu zdefiniuj sobie makra za pomocą #define określając, który bit, to który przycisk np. tak: przyciski za pomocą funkcji z biblioteki lub przerwań: http://mikrokontrolery.blogspot.com/2011...
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ą...
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ę...
Zamierzam w swoim projekcie wykorzystać funkcję "config KBD" gdyż będę potrzebował użycia dużej liczby przycisków do obsługi at32. Proszę o podpowiedź czy praca takiej funkcji, a szczególnie "debounce" i "delay" w niej zawarte nie zatrzymają timerów pracujących cały czas w przerwaniu. Z góry dziękuję za pomoc.
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...
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. Nie mam już pomysłu, może ktoś z was coś podsunie. Problem leży prawdopodobnie w złym zarządzaniu pamięcią. Program to miernik energii elektrycznej. Może zamiast kodu przedstawie schemat blokowy. Cały program znajduje się w pętli, nie używam zadnych gosubów i innych podprogramów. Jest tylko 1 przerwanie co sek i tylko zmiana 1 zmiennej. 1. Program...
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>...
To nie jest takie proste... Wez sobie wyjscie INT z tego PCFa, podłącz do inta w procku. Procek bedzie sobie odczytywal stany z wejsc PCFa, i ustawiał np. odpowiednie flagi wcisnietych przycisków...Reszte juz łatwo dopisać do programu, bo zamiast debounce itp itd piszesz sobie IFa ktory sprawdza flage. Sposób szybki i skuteczny. Poza tym zastosowanie...
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...
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...
Dzień dobry! Mam taki o to problem, przerzuciłem notę ale nie mogę jakoś ogarnąć jak uruchomić drugi timer 8 bitowy, przykładowo: Proszę pamiętać o używaniu znaczników syntax . Opcja Listing kodu . - arnoldziq
Układ pobiera 13mA - zmierzone- być może w momencie uruchamiania jakiegoś urządzenia resetuje się i tego już nie mogę zmierzyć. Podłączałem też z zasilacza o wydajności 300mA przy 9V. Aha jeszcze jedno co mnie podłamało wczoraj - podłączyłem 6 przycisków pod port D i przy jednym z nich (albo Rx albo Tx) jak naciskam(podaję 0 na port) to układ się resetuje....
Wlasnie piszę ISR(ADC_vect) i czytam o calkowaniu wiec mysle że za niedlugo wrzucę częśc kodu. Dodano po 59 Napisalem początek przerwania dla ADC przy 128 probkach + calkowanie. Czy dobry kierunek obrałem? Dodano po 2 Dodaje calość tego co wykonalem main.c [syntax=c]int main(void) { sei(); DDRA=0x00; DDRB=0xFF; DDRC=0xFC; DDRD=0xFF; PORTA=0x00; PORTB=0x00;...
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...
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....
Dziękuje za opis ale chyba mnie to przerosło :) Zrobiłem programowy PWM, oto kod: [syntax=basic4gl] '************** Petla glowna ****************** '***************************************... Do '(at)(at)(at)(at)(at)(at) Obsługa klawiszy (at)(at)(at)(at)(at)(at) If Przycisk > 0 Then Przycisk = 0 If L1 = 0 Then L1 = 20 If Wybor = 0 Then If K_wybor...
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...
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:).
Przykro mi koledzy, że zamiast świat robić lepszym toczycie jakieś jałowe dyskusje. Napisałbym ten przykład koledze szybciej, ale jestem ostatnio bardzo zajęty. Miałem akurat ten wyświetlacz podpięty do Arduino Uno z Mega328P więc i procek pasował. Używałem go tam do debugowania kodu. Jedynie taktowanie powinieneś w kodzie zmienić pod swoje 8MHz. Każdy...
Witam Dziękuję za rady, są bardzo przydatne. Otóż napisałem program który działa poprawnie, ale ma pewien mankament z którym nie wiem jak sobie poradzić. Podczas wyświetlania wyniku w postaci różnicy impulsów imp0-imp1 dzieje się coś takiego; np. jeżeli na wyświetlaczach jest wynik 054,2 to co jakiś czas ( na ~0,3 sek) wskakuje wynik 0000 po czym znowu...
Rozwiązanie układowe wygląda w taki sposób, że pod porty PORTA, PORTB i PORTC mam podłączone drabinki rezystorowe r2r. Do pinu PD2 doprowadzany jest sygnał synchronizujący z detektora zera sieci. Do pozostałych PIND mam podłączone przyciski. Na podstawie zliczonych przerwań uC powinien generować trzy przebiegi prostokątne pierwszy w fazie z sygnałem...
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...
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, jest to mój pierwszy post więc proszę o wyrozumiałość :) Problem jest następujący - chciałem napisać sobie programik mierzący napięcie(potem bedę mierzył poziom napięcia na akumulatorze) więc zaczełem od napisania programu z ADC w trybie FREE RUN, czyli jak raz go uruchomilem to calyc czas wysyłał wyniki konwersji przez rs232, następnie postanowilem,...
http://obrazki.elektroda.pl/9114516200_1... Autorski projekt wyłącznika zdalnie sterowanego za pomocą pilota RC5. Cały układ kontrolowany jest za pomocą mikroprocesora z rodziny AVR, ATtiny2313. Na uwagę zasługuje zasilanie układu bezpośrednio z sieci elektroenergetycznej o napięciu 230V, zrealizowane przez zasilacz bez transformatorowy....
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...
Witam, Od razu uprzedzam, że jestem początkujący. Programuję w Bascomie. Mam jak narazie zestaw uruchomieniowy ZL3AVR z ATMega32. Mam kupioną przejściówkę RS232 do USB, ale nie chodzi za dobrze. Chcę wysyłać dane MIDI do komputera na USB, więc chyba lepiej nie korzystać z RS232 bo 31250 baudów to niestandardowa prędkość. Jest więc możliwa emulacja http://cesko.host.sk/IgorPlugUSB/IgorPlu...
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....
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...
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...
Witam Jestem początkujący w technice mikroprocesorków i w programowaniu w c. Aktualnie męczę się z wpisaniem czasu do PCF. Przy próbie zapisu w momencie kiedy sekundy równe są 5 wyświetlanie czasu zamiera. Reszta układu działa, ale czas na wyświetlaczu pozostaje w formacie 00:00:05 Wzorowałem się na : http://www.elektroda.pl/rtvforum/topic13...
Tylko skoro przerwanie mamy co np. 0,1s to po co w ogóle używać zmiennej pomocniczej typy key_lock? Drgania styków już i tak zanikną w takim czasie a takie rozwiązanie powoduje że procek nie czyta krótkich wduszeń przycisku poniżej 0,2s.
Kolego na początek sobie zobacz mój kod, który tam do testów sobie nabazgrałem. Jeden TIMER1 chodzi jako PWM, częstotliwość ponad 30 kHz. Drugi Timer0 generuje przerwania(tryb CTC) co 125 us, czyli z f 8kHz, i w nim odczytuje próbke i wrzucam na wypełnienie PWMa z timera1. Wyzwalam sobie przyciskiem, i zaświecam diodkę na czas odtwarzania. Oczywiście...
Obsługę przerwań mam w innym pliku #include <avr\interrupt.h> #include <avr\io.h> #include <inttypes.h> #include <stdio.h> #include <avr\pgmspace.h> #include <util\delay.h> #include <math.h> #include "onewire.h" #include "makra.h" #include "harddef.h" #include "lcd.h"...
http://obrazki.elektroda.pl/5365299500_1... Witam! To moja pierwsza konstrukcja od dłuższego czasu. Drzewko które będę tu opisywał powstało rok temu i rok temu zostało wręczone jako prezent na gwiazdkę. Od samego początku chciałem jego opis zaprezentować na elektrodzie, ale z powodu notorycznego braku czasu udało się to zrobić dopiero...
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...
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,...
Ź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...
przerwanie atmega32 atmega32 przerwanie przycisk przerwanie
płyta indukcyjna schemat amica limit polaczen tomtom traffic
Opel Corsa C D E – nie działa wentylator dmuchawy na wszystkich biegach, brak nawiewu, diagnostyka Napięcia na pinach gniazda przyczepy 7-pin i 13-pin – ISO 1724, ISO 11446, stały plus, wyłączony samochód