PA1 to nie jest nóżka związana z INT1! Pod PA1 siedzi PC INT1 - Pin Change Interrupt. "Zwykłe" przerwanie zewnętrzne INT1 to nóżka PD3 ;)
500ms to trochę za dużo jak na drgania styków. To jest microswitch czy jakiś przycisk przemysłowy? Spróbuj wyzwalać przerwanie stanem niskim a nie zboczem opadającym. Ustawiając inny zegar nie spalisz chipu. Co najwyżej ustawiając niższy zegar niż dotychczas możesz mieć problemy z zaprogramowaniem jeśli nie zmienisz też częstotliwości w programatorze....
Zanim włączysz konkretne przerwanie włącz przerwania globalne. wpisz tak Enable interrupts Enable int0 Pozdrawiam :)
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.
No tak, przerwanie uruchamia się, i wyłącza swoją obsługę przed wywołaniem sleep_mode(). Możesz to usunąć z przerwania i umieścić zaraz po sleep_mode()? Wstawianie _delay_ms() w wielu miejscach to słaby pomysł i lepiej z tego zrezygnuj jeśli ten program ma robić jeszcze cokolwiek innego. Pokaż ten timer, który Ci pamięć zajmuje. To są dwa bajty i trzy...
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...
Czyli co mam zrobić, żeby wywołać przerwanie przyciskiem? Dać DDRD &= ~1<<PD2; ?
Ok, pisanie programu zostawię Tobie, natomiast podam Ci co trzeba zrobić. Mając już ustawione wszystkie piny jak należy (wejścia/wyjścia) chyba najlepiej napisać coś takiego: [syntax=c] int state = 0; //stan przycisku, ustawiasz na jeden za pierwszym wciśnięciem while(state == 1){ //akcja z diodami } [/syntax] I teraz musisz zaprzęgnąć przerwania, dokładniej...
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...
Czeka Cię cierpliwe studiowanie DS. W trybie asynchronicznym- który musisz skonfigurować w twoim projekcie- przerwanie co 1s będziesz miał gdy w trybie CTC ustawisz rejestr 0CRA na 127 (str.160). Oczywiście musisz też ustawić zezwolenie na obsługę tego przerwania. Jeśli chodzi o 20ms- to z dokładnością jest trochę gorzej. Przy początkowej wartości timera...
Litości :) Litości :) Pomijąjąc powyższe fakty, program powinień wyglądać tak: [syntax=c]volatile int program; przerwanie_przycisku() { program++; } main() { konfiguracja(); while(1) { if(program == 0) migaj_w_lewo(); else if (program == 1) migaj_w_prawo(); else if (program == 2) migaj_z_gory_na_dol(); } return 0; }[/syntax] lub jak kolega wyżej napisał...
Pojawia się nagle przerwanie od przycisku S2 impulsatora.... czy to normalne? Podejrzewewam że naciśnięcie S2 uaktywnia globalne przerwania.
USART na przerwaniu od odbioru, a przycisk na przerwaniu zegarowym co 1/10s.
Pewnie że mamy ;). Użyj przerwań. Najprościej jest zrobić całość 'głównej' części pracy na przerwaniach w następujący sposób: a) Pomiary na timerze 0, wywoływane cyklicznie b) Obsługa przycisków na przerwaniu int0, wystarczy że podepniesz odpowiednio przyciski do pinu int0 i AtMega automagicznie wywoła przerwanie gdy tylko wykryta zostanie zmiana stanu...
Niestety ale nie mogę zrezygnować z delay_ms ponieważ jest to ,,obowiązkowy punkt programu,, Poszukaj na forum kodu multipleksującego wyświetlacze LED w oparciu o przerwanie od timera. W pętli głównej zrobisz sobie opóźnienie, test stanu przycisku i zmianę zawartości wyświetlanych znaków. Niestety ale nic nie znalazłem... Źle szukałeś.
W helpie do Bascoma jest napisane ze Atmegi maja nie konfigurowalne przerwania i to sie na pewno tyczy niekonfigurowalnosci w Bascomie bo w datascheet ATmega(Atmega8) można ustawić INT-ty jak ci sie podoba.Oczywiście z poziomu asemblera lub C.
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...
Na pewno musisz zrozumieć jak działają operatory: 1. Na początek ~ i & 2. || w następnej kolejności. Albert no to analiza krok-po-kroku: No niestety milisz się bo owszem jest robiona operacja PIND & 0b11111100 ale da ona 1 gdy któryś z przycisków od PD7 do PD3 nie będzie wciśnięty (więc jego bit w rejestrze PIND będzie ustawiony) żeby to poprawnie...
Witam Zacznę od tego, że uczę się programować Atmega. Napisałem programik (prosty dla początkujacego). Idea jest taka, że: - 3 swiche i 3 LED'y. Działanie programu: -wciskam 1 SW - zapala się 1 LED, 2 SW to 2 LED, 3 SW to 3 LED. Wciśnięty 1 SW pali się 1 LED ale wciśnięcie dodatkowo 2 SW spowoduje wygaszenie LED. I Tak w pzrypadku 2 i 3 oraz 1 i 3....
Do atmegi8mki Ci może nie wejść obsługa FATu. Poszukaj na elektrodzie FAT SD Atmega i coś znajdziesz gotowego. - Napewno nie Bascom :D Potem jakieś przerwanie i mierzyć czas i robić systematyczne opróżnianie buffora na drabinke R2R albo DAC.
W ten sposób daleko nie zajdziesz. Zacznij od tego, żeby testować przyciski w przerwaniu timera - kod bęzie znacznie prostszy i bardziej niezawodny. http://mikrokontrolery.blogspot.com/2011... żeby pozbyć się if() możesz napisać signal_incrValue = !!(PIND & 0b00000010); albo signal_incrValue = PIND >> 1 & 1;
[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...
A liczenie Ci samo idzie bo umieściłeś kod "liczący" w jakimś przerwaniu: SIGNAL(SIG_OVERFLOW0) { licz++; } Nie wiem co to jest, ale wygląda jak przerwanie od Timera0. Dodano po 2 Już pomijam fakt że obsługa przycisków w przerwaniu (bez żadnego odkłócania, bo samo wykorzystanie przerwania to może jeszcze nie jest tragedia) jest trochę...
Wiec tak: W ogóle wyrzuciłbym zmienna/flagę F. Nie jest potrzebna tutaj. W programie głównym zamiast sprawdzania F, sprawdzaj A, czyli warunek IF z przerwania przenieś do programu głównego, łącznie z zerowaniem A. W przerwaniu zwiększaj tylko A. Zamiast: If F = 1 Then Cls Locate 2 , 1 Lcd "przerwanie" Wait 1 Cls F = 0 Enable Int0 End If zrobilbym...
Popatrz tu: http://mikrokontrolery.blogspot.com/... -ostatni przykład. No i oczywiście nie używaj przerwań od przycisków, a przerwania timera - tak, jak w tym przykładzie.
I pomyśleć, że tyle dyskutujecie o dwóch liniach kodu w przerwaniu timera wywoływanym np. co 10 ms. http://mikrokontrolery.blogspot.com/2011... Obejrzyj ten przykład, a pod if() wstaw instrukcję licznik ++ - i masz całe rozwiązanie.
dodaj pętle nieskończoną na końcu ...i zmień nazwę wektora na INT0_vect . Druga i niestety MASAKRA jaką robisz to _delay_ms() w przerwaniu. Jak napisał Mirek, w przerwaniach nie używamy żadnych "delay"(!) W ogóle nie używamy _delay() -nie tylko w przerwaniach. Czyżbyście cierpieli na jakąś manię prześladowczą :?: Poza tym- po co jest to kasowanie flagi...
To jest pisane pod os`em? W kazdym razie, przerwanie sie wywoluje bo autor pisal to, nawet dobrze dziala dla przycisku wiec mysle ze sprawa samej deklaracji przerwania jest jasna ;) Jesli nie masz oscyloskopu to zastosuj uklad do eliminowania drgan stykow.
Tak to jest, kiedy nie sprawdza się stanu przycisków w przerwaniu timera...
Ja się z Mirkiem nie zgodzę, książek o C są tysiące. Oczywiście nie po Polsku. Podstawowy błąd jaki ludzie popełniają to założenie, że C na mikrokontrolery jest jakieś inne niż C na komputery. Nic bardziej mylnego. Zresztą dobrym przykładem jest ten wątek. Przecież gdyby autor chciał coś takiego zrobić na PC, tylko zamiast diod zrobić kolorowe kropki...
Jaką masz częstotliwość przerwań timera? Testowanie stanu przycisków powinno następować z częstotliwością rzędu 30..50 Hz jeśli pamiętasz tylko jeden stan wstecz. Jeśli masz większą częstotliwość, to albo testuj je w co którymś przerwaniu, albo wsuwaj stan do zmiennej i wykrywaj sekwencję stanów (bitów) np. 1110.
http://obrazki.elektroda.pl/9824916400_1... Witam, Korzystając z ostatnich wolnych dni przed studiami chciałbym zaprezentować moją ostatnią konstrukcję. Jest to mały przenośny barometr. Konstrukcja powstała na potrzeby osoby wrażliwej na zmiany ciśnienia oraz spełnia jej wymagania tzn. mały rozmiar( 20x40x9mm) oraz co się z tym wiąże...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
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...
Dokładnie, w pętli głównej w ogóle nie obsługujesz hmmm tych przycisków.... a jeśli uważasz że je obsługujesz to spróbuj napisać dlaczego tak uważasz może łatwiej będzie cię naprowadzić. Bo tak to sporo jest pomieszane niestety :(
Bez podłączenia impulsatora do INT nie będzie działania poprawnego w żadnej prawie konfiguracji z przyciskami na tych samych pinach. Timer zaprzęgnięty do tego ale czasy aktywacji w licznikach dobrane w praktyce dla impulsatora i przycisków. Podłączenie impulsatora, czy przycisku pod przerwanie nie jest dobrym pomysłem. Jeśli coś ci się gryzie to masz...
Zastanawiałem się też nad zegarem RTC, mam scalaka PCF8583, którego można by zatrudnić. Tylko zastanawiam się w jakim trybie musiał by on pracować ? Timer ? Alarm ? Dajmy na to wybiorę PCF'a nie wiem za bardzo jak on miałby odmierzać mi zadane godziny - musiałbym za każdym razem gdy włączam sterownik ustawiać od nowa czas i dopiero względem niego odmierzać...
Program na ArduinoMega działa bardzo dobrze, więc postanowiłem przenieść go na procesor Atmega 328p - ten sam co w większości płytek Arduino. Układ pracuje na wewnętrznym oscylatorze 8MHz, bootloader wgrany, program też. Pojawił się niestety problem, którego nie potrafię zlikwidować - przerwanie od przycisku powoduje restart procesora... Jeżeli dodam...
Atmega 16, przerwanie jest tylko na timerze 0 w trybie cnc, ta linijka to pozostałość po poprzednim kodzie, ale nic nie jest podpięte do tego pina INT1 i jego obsługa nie jest zaprogramowana bo ma go nie być. Ale wywalenie linijek [syntax=c]MCUCR=0x00; GICR=(1<<INT1);[/syntax] nic nie daje
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...
Ze względu na to, ze AVR nie ma możliwości wybudzenia z uśpienia zboczem Już pisałem koledze, że nie jest to prawdą. Tylko stare ATMegi nie miały takiej możliwości. Nowe ATMega/ATTiny jak najbardziej umożliwiają wybudzanie zboczem. Autor nie napisał o jakim procesorze mowa, można tylko zgadywać. W większość projektów widze Mega8, choc dużo lepsza Mega88...
1. Nie włączasz podciągania na pinach przerwań - to znaczy, że może na nich przy braku zwarcia do masy występować zarówno 0 jak i 1 - przerwania mogą szaleć Nie jestem pewny czy o to Ci chodzi ale przyciski gdy są rozwarte połączone są z zasilaniem 5 V przez rezystor 1k natomiast po przyciśnięciu go jest połączony z masą, więc wydaje mi się że może...
Witajcie, W oparciu o Atmegę8 zrobiłem sobie prosty sterownik. Odczytuję temp. z dwóch czujników ds18b20 i na jej podstawie steruje elektrozaworem. Chciałbym dodatkowo wprowadzić obsługę 3 przycisków. Problem w tym, że sam odczyt temp. z czujek powoduje pewne opóźnienia np. czas konwersji jest dosyć spory bo 750ms w związku z tym reakcja na przyciśnięcie...
Witam Jestem nowy na forum i w temacie mikrokontrolerów. Mam płytkę Evb 4.3 v4 na procesorze Atmega644p (duży sprzęt jak na początkującego, ale lepiej kupić raz a lepiej). Czytałem trochę na temat programowania w BASCOMIE na stronie http://www.dioda.com.pl/forum/topics20/k... (kopiowałem sobie programiki...
Zmieniony program sterownika. dodałem przerwanie timera a w nim: obsługę klawiszy w przerwaniu co 50ms uaktualnienie zegara oraz synchronizacje z wewnętrznym RTC co godzinę pustą funkcję timerIntervalHalfSec w której proponuję odczytywać stan wejść analogowych, nie na raz tylko po jednym. dodatkowo masz przerobioną funkcję switch reagującą na nacisnięcie...
Ten drugi pomysł jest moim zdaniem lepszy. Do tego możesz użyć końcówki przerwania INT - ma konfigurację zbocza, którym jest wyzwalane przerwanie.
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
Nie to przerwanie. Zobacz na mój post wyżej. Ma być przerwanie overflow a nie compare A.
Masz pętlę for, która b. szybko wyświetla elementy tablicy liczba, kończy się zawsze wyświetlając element o indeksie 0. Wyrzuć tą pętlę, i uczyś zmienną statyczną, wywołuj przerwanie np. co sekundę, czy co ile tam chcesz i wyświetlaj kolejne wartości z tablicy.
Mój program to tylko przykład jednego z możliwych rozwiązań. Można to pewnie zrobić nawet na fladze Timera bez przerwania, a 10ms przydaje się, na przykład, do skanowania przycisków lub innych zadań.
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...
Proponowałbym również modyfikację układu pod kątem alternatywnych funkcji pinów. Wspominałeś, że chciałbyś poćwiczyć na początku miganie diodami i sterowanie przyciskami. W porządku, jednak szybko to opanujesz i apetyt wzrośnie :) Po opanowaniu zwykłego sterowania diodami, myślę że rozsądnie byłoby zaznajomić się z obsługą przerwań, która jest kluczowa,...
Po poprawie program wygląda tak jak w syntaxie. Teraz programowo wszystko z przerwaniem powinno być ok (jeżeli ciągle nie jest, proszę o wskazanie co jest błędne). Licznik nie liczy poprawnie ponieważ ciągle występuje drganie styków, które chciał bym rozwiązać sprzętowo, ale aktualnie nie mam odpowiedniego kondensatora i rezystora. Wiem, że mógł bym...
jak już chesz koniecznie marnować wolne piny (bo może masz ich zbyt wiele) to lepiej podłącz sobie te przyciski przez 74HC30 i będziesz miał jeden wspólny sygnał dla przerwania INT jednocześnie wejścia 7430 podłącz pod jakiś port i w przerwaniu odczytasz sobie ich stan. Nie jest to najlepszy sposób bo to samo można zrobić w przerwaniach i uzyć klawiatury...
Powyzsze metody sa sluszne i beda dzialac. Ja jednak sklaniam sie do napisania programu w taki sposob, aby nie trzeba bylo dokladac kondensatorow. W programie obsluge stykow robie w przerwaniu. Przyjmuje, ze przerwanie bedzie wykonywane 50..300 razy na sekunde. Jesli 2 kolejne przerwania stwierdza nacisniecie tego samego przycisku (zakladam, ze klawiszy...
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 ,\za zadnego nie moge zmusic by zareagowal na przerwanie... listing programu ponizej .... jest to przyklad. bardzo prosze o pomoc. p.s. wylaczony JTAG listing: $regfile = "m16def.dat" $crystal = 8000000 Config Pind.3 = Input Set Portd.3 Config Portd.5 = Output Config Portd.6 = Output Led Alias Portd.5 Led2 Alias Portd.6 Enable Int1 Config...
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ł...
Witam !! Napisałem program na sterowanie pilotem. Nie działa mi set Led_2. Przycisk 2 z pilota wykonuje warunek ale nie setuje portb.2 ? Co jest [syntax=c] $regfile = "m8def.dat" 'rejestry mikrokontrolera atmega8 $crystal = 8000000 'częstotliwość taktowania mikrokontrolera $baud = 9600 Config Portb = &B11111111 : Portb = &B00000000 'cały portB jako...
555 jest blisko tego, co mi potrzeba, przyjrzę się bardziej. Szkoda, że dużo zachodu jest z podłączeniem. Nie jestem pewien, czy jasno opisałem, więc jeszcze raz: mam przycisk filtrowany RC podłączony do mikrokontrolera. Chcę, żeby zamiast przejścia 1->0 było przejście 1->0->1. excray - któryś z AtMega, załatwienie programowe wymagałoby zrezygnowania...
Możesz zrobić tak: W tabelce zdefiniowana długość poszczególnych elementów (piknięć i przerw). W timerze zdefiniowana maszyna stanów - na podstawie jej stanu aktualnego (wartości timer'a) wybierasz określony "punkt programu" - czyli przerwę lub "piknięcie". Co się tyczy przycisków, to możesz zdefiniować albo przerwanie zewnętrzne, albo w przerwaniu...
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...
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...
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...
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?...
Witam ponownie, Bardzo dziękuję za rady oraz uwagi, lecz Pana odpowiedź minęła się z moim problemem. Mianowicie, system przerwań uruchamianych przyciskiem nie działa w żaden możliwy sposób. Mianowicie, nie działa najprostszy kod typu : bit_is_clear działa z przyciskiem bez problemu, ale ona mnie nie zadowala. Dodatkowo chciałbym zaznaczyć, że bouncing...
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/...
samo menu wielopoziomowe ze zmianami parametrów już jes dość rozbudowana częścią kodu. Samo sprawdzanie przycisku nic nie zmienia. kwestia jak kolega te pomiary zczyta i jak zrobi menu. jak zrobisz zle to czy przerwanie czy nie i tak sie zacznie mylić
A po co 8 pętli do obsługi 4 przycisków? Przerwanie nie przerywa pętli tylko wstrzymuje ją na czas wykonania programu przerwania. Wystarczy jedna pętla główna w której sprawdzasz stan całego portu do którego są podpięte przyciski, wtedy w tej samej chwili masz odczytany stan przycisków. Jak rozumiem z opisu robisz pętle do obsługi każdego przycisku?...
Witam. Zbudowałem sobie klawiaturę matrycową 4x4 do mikrokontrolera Atmega 128. Klawiatura jest podłączona do 8 wyjść portu D. Obsługę klawiatury chce realizować poprzez przerwania wykorzystując przerwania zewnętrzne INT0...INT3 Poniżej przedstawiam kody: DEFINICJE: #define KLAD DDRD // PORT LINII STERUJACYCH #define KLAP PORTD //#define WE1 0 // LINIA...
Przy tak zaprogramowanym przetworniku ADC większość czasu spędzasz w procedurze przerwania przetwornika. Użyj timera do czytania ADC i wyzwalania następnego pomiaru, to będziesz wiedział przynajmniej jak często mierzysz. Ogólnie: mało jest projektów, w których korzystanie z przerwania ADC ma sens - to pułapka, na którą łapie się wielu początkujących....
O i dzięki schematowi od razu widać błąd: http://obrazki.elektroda.pl/6463515500_1... Przyciski podłącz do GND, a nie Vcc, a w programie włącz pull-up, i ustaw reakcję INT na zbocze opadające. Tylko czy wiesz dlaczego Twój układ nie działał? Osobna sprawa do drgania styków przycisku: http://mikrokontrolery.blogspot.com/2011...
https://obrazki.elektroda.pl/9342271000_... Dzień dobry, Urządzenie powstało w celu monitorowania poziomu wilgotności w pewnej zamkniętej przestrzeni. Przekroczenie zadanego poziomu jest sygnalizowane sygnałem dźwiękowym (buzzer) i świetlnym (LED). Wartości z ostatniego pomiaru można w każdej chwili odczytać, po naciśnięciu przycisku,...
Chodzi o to, że zmiana napięcia na PC0 jest właściwie odczytywana przez przetwornik i zapisywana do zmiennej pomiar. Od tej wartości zależy częstotliwość przerwania. Następuje zmiana deklaracji OCR1A. Idea jest taka, że zmieniając napięcie na wejściu PC0 chcę uzyskać zmianę częstotliwości przerwania ISR(TIMER1_COMPA_vect). Wszystko jest w porządku do...
A co zrobić żeby kolejne kliknięcie zmieniło x na zero? To nie zadziała zbyt dobrze, bo przytrzymanie przycisku będzie ciągle zmieniać stan x na przeciwny. Zresztą taką zmianę szybciej można zrealizować za pomocą x^=1; Stąd też najlepiej PINC przypisać do jakiejść zmiennej tymczasowej i sprawdzać czy od ostatniego sprawdzenia stan przycisku uległ zmianie....
Działać na baterii ma jak najdłużej - myślę że miesiąc czasu mnie zadowoli ale im więcej tym lepiej. Procek - prawdopodobnie ATmega 88V w wersji SMD. Najwięcej prądu będzie zużywało pewnie wyświetlanie wyników obliczeń na dwóch, siedmio segmentowych wyświetlaczach led (wyświetlanie wywoływane przyciskiem). Drugą kwestią jest sprawdzanie stanu przycisku...
Dodam że alias Sprzeglo oznacza port PC5 Atmegi 328 która nie ma tam wyjść OC (ma tylko ADC5/SCL/PCINT13). Reszta kodu nie ma nic wspólnego z przerwaniami. Jest wyświetlacz lcd, przyciski i diody. Działające w pętli głównej. Zresztą wszystko pozostałe jest wykomentowane a załączony kod można uważać za kompletny. Dodano po 4 Czy masz coś konkretnego...
Poprawiłem tytuł na bardziej zgodny z regulaminem p. 3.1.15. LordBlick Mam problem z ustawianiem czasu i daty na mojej płytce testowej na której umieściłem układ zegara DS1307 na Atmega 16. Nie wiem jak to zrobić w c.proszę o pomoc i przykłady dołączone do działającego programu zegara ale wyświetlającego mi po wgraniu wcześniej zdefiniowany czas i...
Przez ostatnie 2h doszedłem do tego w czym tkwi problem zarówno w obsłudze przerwania od timera0 oraz od zewnętrznego INT1. Problem polega na tym że zmienna globalna którą wykorzystuję jako flagę istnieje tylko w obsłudze przerwania,flaga nie jest widoczna w głównej pętli programu lub po obsłudze przerwania resetuje się ATmega. Wywnioskowałem to gdy...
Przerwanie to zdarzenie które przerywa działanie programu głównego i uruchamia procedurę obsługi przerwania. Jak ta procedura się zakończy (tu reti) to następuje powrót do programu głównego. To tyle teorii - w C działa, na takiej zasadzie jw. Jak wywołać to int0? Wiem że odpowiada za nie bit 0 portu D, ale przyciski są podpięte do A. Z tego co rozumiem...
Witam, Postanowiłem zapytać się Was bo już błądzę jak we mgle. Zaskoczył mnie kłopot z obsługą prostego ekspandera i2c pcf8574. Kilkukrotnie już korzystałem z tej kości gdy miałem oddalone przyciski czy diody świecące od procka i myślałem że temat mam przerobiony. Tymczasem w ostatnim projekcie za nic nie mogę się skomunikować z układem. Wcześniej korzystałem...
Witam Wszystkich Posiadam podłączoną pod przerwania zewnętrzne INT0 klawiaturkę matrycową 4x4. Całość zrealizowana jest za pomocą diod BAT43, które podłączone są pomiędzy wiersze, a INT0. Od strony INT0 podpięte do +5V, a wiersze są jeszcze podwieszone na rezystorach 3k. Przerwanie ma reagować na opadające zbocze. W nocie katalogowej wyczytałem, że...
Zarezerwuj sobie na godziny i minuty po rejestrze w procesorze. Zrób obsługę klawiatury. Ja bum dał 3 przyciski. 1 - jak przytrzymasz dłużej to wchodzi w trym ustawiania. Jak potem na krótko to przechodzi po kolejnych rejestrach i ustawiasz 2 pozostałymi wartość godziny minuty, dnia, miesiąca, roku. 2. zmienia wartość w górę 3. zmienia wartość w dół...
pomyślałem że wykorzystam 2 przerwania, złączyłęm razem int0 i int1. jedno bedzie wykrywac opadajace zbocze a drugie rosnące. efektem miał być ciąg licz np "345,12,345,32,463,12" gdzie kazda liczba oznaczałą by długość kolejnego impulsu otrzymywanego z czujnika. napisałem kod: $regfile = "m16def.dat" $crystal = 16000000 Config Lcdpin = Pin...
Zamiast tak cudować, zastosuj mikrokontroler z poborem prądu rzędu 20nA w trybie głębokiego snu. Ze snu zbudzisz go przerwaniem z przycisku. EDIT. Nie zauważyłem, że akumulator ma 7,2V. Czy to konieczne? Co jeszcze akumulator będzie zasilać? Nie możesz wybrać akumulatora o mniejszym napięciu? Napisz co to za urządzenie.
eee... a po co tu licznik? program twoj ma robic jednoczesnie 2 rzeczy: 1. zajmowac sie wyswietlaniem czegos na wyswietlaczu (przerwanie od timera moze byc) 2. sprawdzac, czy nie jest wcisniety jakis przycisk jesli jest wcisniety pierwszy, to zwieksza cyfre, a nastepnie sprawdza, czy cyfra przekroczyla 9, jesli tak, to zeruje ja. jesli drugi, to z grubsza...
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>...
Ja to zrobiłem tak na ATmega128 (wyciąłem zbędne dla tego tematu rzeczy): ----------przerwanie-------------------- SIGNAL(SIG_OUTPUT_COMPARE1A) //przerwanie co 3,84ms { switch (nrLED) //EVERY TIME IN INTERRUPT { case 1: { PORTB=_1; //pod PORTB podpięte są katody 7segm. a _1 to komórka pamięci w której jest to, co chcę...
http://obrazki.elektroda.pl/9745806300_1... Witam. Sesja się zbliża, więc tradycyjnie zacząłem już prokrastynować :D . Ostatnio zacząłem pisać bibliotekę do obsługi klawiatury PS/2 w C dla AVR i postanowiłem na szybko w godzinkę lub dwie stworzyć jakiś praktyczny projekt w celu jej przetestowania. Początkowo nie planowałem tego publikować,...
Witam, ostatnio zająłem się pisaniem stosunkowo prostej aplikacji na AVR ATmega8, potrzebnej mi na studia. Na celu miałem też trochę lepsze poznanie AVR. W czym problem : W moim programie chciałem przetestować typowe zachowanie uC, napisałem kilka prostych funkcji, włączyłem przerwania, zrobiłem pętle nieskończoną w której na moim wyświetlaczu 7 segmentowym...
Najprostsze rozwiązanie - w przerwaniu od czujki uruchom sprzętowy timer. Przerwanie od timera powoduje włączenie alarmu. Jeśli użytkownik wyłączy system przyciskiem, to w procedurze przerwania przycisku wyłączasz timer. Żeby wszystko działało jak trzeba, musisz zezwolić na zagnieżdżone przerwania (czyli żeby ISR od timera mógł się wykonać w momencie,...
Witam. Jak zrobić aby po wyłączeniu atmegi zegarek chodził, ale w trybie uśpienia, potrzebuję po prostu aby atmega po ponownym wyłączeniu pokazywała rzeczywisty czas. hahahah a ty rozumiesz ze ten atmega8 jest ukladem ktory liczy ten czas? wiec nie wiem jak chcesz zeby po odlaczeniu zasilania atmegi8 dalej byl aktualny czas. Moim zdaniem jest to narazie...
Witam Mam impulsy (ok.100 impulsów) trwające 0,4us i powtarzające się co 5us (PinB.0) impulsy "0" z wysokiego stanu do masy. W czasie trwania tego impulsu na PinD pojawia się 8 bitów, które chcę zapisać do tablicy a potem chce je przeglądać. Mam jakieś przerwania bo X się zwiększa i dane w tablicy też ale to nie te dane. Czy to jest wykonalne na Atmega168...
Maksymalna prędkość po to, żeby był jak najkrótszy czas reakcji między wyzwoleniem funkcji przyciskiem a załączeniem przekaźnika. Gdybyś sterował tranzystorem czy triakiem itp miały by to może jakiś sens. Przekaźnik przełącza się ok 20..30ms. 5ms to już bardzo szybki przekaźnik. między wyzwoleniem funkcji przyciskiem Jeśli odczytywany byłby stan wejścia...
A tu zalecałeś blokowanie przerwania, w celu likwidacji drgań styków i zabezpieczenia się przed ponownym wywołaniem przerwania. http://obrazki.elektroda.pl/7094155700_1... Tam omawialiśmy przypadek podłączenia przycisku do pinu INT0 i wykorzystaniu przerwań: http://www.elektroda.pl/rtvforum/viewtop... Jeśli przycisk podłączasz...
atmega32 tyle co sie juz zorientowalem to: ISR(INT0_vect) { } wówczas zmieniam pind2 posiedzialem poczytalem i zadzialalo
Użyłem tejże biblioteki [url=http://mikrokontrolery.blogspot.com... do obsługi dwóch przycisków które służą do poruszania się po menu (sterownik akwariowy).Procesor zasilany z oddzielnego źródła,gdy podpięty jest programator do komputera wszystko działa ,po odpięciu klawisze nie reagują. Celem sprawdzenia...
Może być wiele przyczyn takiego zachowania. Wymienię kilka, które mi przyszły na myśl: 1. Zainicjuj zmienną globalną - nie mozna zakładać, ze deklaracja zmiennej (szczególnie globalnej) zeruje ją (zależy od kompilatora) 2. Transmisja szeregowa działa poprawnie? Może DATACNT ma poprawna wartość ale rózne ustawienie parametrów transmisji w nadajniku...
Witam wszystkich. Chciałbym sie dowiedzieć czy są potrzebne elementy przy wykonaniu klawiatury matrycowej 8x8: 1) czy jest konieczne stosowanie kondensatorów. Jeśli są potrzebne to jak podłączyć kondensatory, czy równolegle do każdego z przycisków (czyli 64 kondensatorów) czy może jest jakiś inny sposób na to. 2) czy jest konieczne stosowanie rezystorów...
Możliwe sugerowałem się tym, że niezależnie czy po wpisaniu Reset Pinb.1 lub Reset Portb.1 i wrzucenia do uC działanie było takie same. Nawiązując do mojego problemu, próbowałem zmieniać w poprzednich kodach port na pin tak jak radził "piotrva" jednak nie przynosi to efektu. Nadal mam problem z uruchomieniem tego obrotomierza. EDIT: Jest jakaś poprawa,...
atmega przycisk przerwanie przycisk przerwanie bascom przycisk przerwanie
uziemienie instalacji elektrycznej schemat podłączenia włącznika światła dozownik płynu zmywarki
obnizenie napiecia baterii rudocell viessmann
Przepalający się bezpiecznik pompy paliwa w John Deere 5720 Toyota Avensis 2.2 Diesel - Przycisk Start/Stop nie działa