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...
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...
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...
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...
Pojawia się nagle przerwanie od przycisku S2 impulsatora.... czy to normalne? Podejrzewewam że naciśnięcie S2 uaktywnia globalne przerwania.
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...
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ś.
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ł...
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.
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.
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....
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;
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.
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.
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...
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...
Tak to jest, kiedy nie sprawdza się stanu przycisków w przerwaniu timera...
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.
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...
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...
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...
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...
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...
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...
Ż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...
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...
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...
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.
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...
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,...
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ń.
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...
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,...
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...
[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...
Mam jeszcze pytanie odnośnie sprzętowej eliminacji drgania styków. Zrobiłem sobie do tego przycisku, który podłączony jest do INT1 i ma wywoływać przerwanie na zbocze narastające filtr RC. Podłączyłem go w ten sposób: http://obrazki.elektroda.pl/1636135200_1... i dobrałem wartości rezystora i kondensatora tak jak na schemacie. W dużej...
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...
[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...
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...
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...
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?...
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...
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...
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...
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....
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,...
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....
Przepraszam bardzo za moją nieuwagę i pominięcie rezystora od strony anod diod. Ten rezystor jak najbardziej tam jest i poprawiłem schemat umieszczając go tam. Skanując klawiaturę ustawiam 0 na poszczególne kolumny. Problem jest w tym, że przerwanie reaguje na przycisnięcie przycisku ale program jakby się zawieszał. Jestem aktualnie przekonany, że jest...
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...
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ół...
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.
Nie to przerwanie. Zobacz na mój post wyżej. Ma być przerwanie overflow a nie compare A.
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>...
Dzień dobry, chciałbym opisać zegar szachowy mej konstrukcji. http://obrazki.elektroda.pl/2838677600_1... http://obrazki.elektroda.pl/4442183300_1... http://obrazki.elektroda.pl/1402313500_1... Pomysł zbudowania takiego zegara zrodził się w mej głowie, kiedy w okresie zainteresowania mikrokontrolerami...
próbowałem róznych metod, te strony znałem już wcześniej, mimo to nie udało mi sie uzyskac zadowalających efektów. najbardziej sensowna chyba była by metoda np co ok 800 us sprawdzac stan wejscie do któego jest podpiety odbiornik ale nie wiem czemu mi sie to zapętla i jak odbierze kod z pilota to leci bez końca. oto kod $regfile = "m16def.dat"...
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...
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...
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ę...
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...
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.
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...
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ż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,...
A jest możliwość przerobienia przetwornicy ZVS aby była zasilana bezpośrednio z 230V? Mam pytanie: Zrobiłem taki prosty układ z cewką i Atmegą. 6915761100_1433610047|0icuoGASas Gdy lekko dotykam końcówką cewki masę( "X" na schemacie to miejsce styku) to powstaje bardzo mała iskra i Atmega się wybudza z stanu power down, jakby został naciśnięty przycisk...
Witam. Zrobiłem sobie prosty układzik który reaguje na sygnał z modelarskiego odbiornika RC i w zależności od długości impulsu zapala diodę lub ją gasi. Układ jest programowany przyciskiem podłączonym między PD2 a masę. Wywołuje przerwanie które zapisuje czas trwania stanu wysokiego. Bez zapisu tego czasu do EEPROM można go wielokrotnie programować...
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...
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...
flaga to zmienna bitowa. pseudokod: przerwanie co 50ms: if P1 =1 if flaga_P1 =1 start silnik zacznij odliczanie 20sek else flaga_P1=1 else flaga_P1 = 0 kolejny sygnal...........
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ą...
Kolorowanie składni:[syntax=jezyk_C] char wynik[17]; volatile unsigned char ADC_pomiar; //zmienna przechowująca ostatni wynik //pomiaru ADC //----- PRZERWANIE Z ADC ----------------------------------------... ISR(ADC_vect) { //obsługa przerwania po zakończeniu pomiaru ADC ADC_pomiar = ADCH; //zapamiętaj pomiar w zmiennej } int main(void) { DDRC=0xFF;...
nie słyszałem, ale już buszuję w datasheecie. Pamiętaj że po puszczeniu przycisku wynik musi być wyświetlany. Po wciśnięciu przycisku 2 następuje reset zmiennych. Może jest przerwanie wyzwalane zmianą stanu logicznego na którejś nóżce? Zmieniałoby CS12 na 0 tym samym wyłączając timer1 :)
No więc wykonałem jako takie bramki z tego co miałem pod ręką. Następnie na płytce stykowej złożyłem dwa układy odbiornika i o ile jeden wydaj się działać dobrze o tyle ten drugi jest czuły na otoczenie, tzn wyzwala przerwanie przy dotknięciu płytki ręką, przy jej poruszeniu, nawet jak puknę w biurko 0,5 m dalej. Dzieje się tak niezależnie czy układ...
Użyj jakiegoś timera i przerwania, powiedzmy TIMER0. Policzmy trochę. Zakładam zegar 8Mhz. Jezeli uzyjemy preskalera 256 to czas co jaki zostanie wywołane to przerwanie to 256*256/8000000=0,008. Ilość taktów co jakie zostanie wywołane przerwanie to 256*256=65536 (pierwsze 256 wynika z tego, ze licznik jest 8 bitowy drugie to preskaler) Żeby odliczyć...
Ja to sobie wykonałem w taki sposób ale zredukuj tutaj timer 0 bo jest on zbędny, możesz wykonać go w pętli timera2. [syntax=c] #define P1 (!(PINB & 0x02)) volatile unsigned char push =0; volatile unsigned char time_push =0; void TimerInit(void) { TCCR2 |= (1<<WGM21); //tryb pracy CTC TCCR2 |= (1<<CS22) | (1<<CS21) | (1<<CS20);//prescaler...
Witam Zbudowałem układ do sterowania wentylatorami w układzie dystrybucji gorącego powietrza (DGP) z kominka. Mam 4 DS18B20, PWM steruje obrotami wentylatorów, dwoma przyciskami steruje obroty, dwoma kolejnymi temperaturę od której ma sie załączyć wentylator. Mam następujący problem jeżeli dla każdego DS-a ustwie czas na konwersje waitms 750 to program...
Noo zegarek jest podlaczony do LCD dodatkowo ma jeszcze obslugiwac przyciski do zmiany godziny. Sprawdze timer 16 bitowy z przyjemnoscia. AVR Studio nie uzywam poniewaz pracuje pod linuksem. Jesli juz mowimy o pelnej funkcionalnosci napotkalem smieszny problem. Chce zrobic obsluge przyciskow zewnetrznych na przerwaniach a wlasciwie przerwaniu bo moj...
Witam . Napisałem ( prawie) sobie na ww procesor program w asm i bascomie który ma robić za zamek otwierany kartą . W bascomie wszystko działa w 100 % według założenia jednak w asm mam taki problem że układ sam zmienia swoje taktowanie (ponad 2x) przez co wszystkie funkcje czasowe nie pracują jak powinny . Nie było by w tym nic niezwykłego ( ustawiony...
Witam Wyświetlacz musisz zrobić w przerwaniu. Częstotliwość odświeżania każdego powinna wynosić minimum 50Hz. Lepiej unikać dokładnej częstotliwości 50Hz. Może to być np. 53.5Hz. Jeśli ma np. 4 takie kostki to częstotliwość powinna wynieść 4 * 53.5Hz czyli 214Hz lub jak kto woli przerwanie powinno być wywoływane co 4,67 milisekundy. Od tego bym zaczął....
Tak, tylko to _delay_ms(500) jest tylko wtedy, gdy nacisnę przycisk, a nie cały czas. Jedno przerwanie ustawia stan wysoki (compare match) a drugie niski(overflov). Co do drgań styków, to oglądałem film Pana Mirosława i tam on obalał tą tezę. Ja podzielam jego zdanie. Z resztą nie mam z nimi problemów. Co z tego że static? Nie pomyliło ci się z const?...
atmega przerwanie przycisk przycisk przerwanie bascom przycisk przerwanie
speakon speakon volvo klimy pralka whirlpool pokrywy
pralka indesit cieknie pralka indesit cieknie
Instrukcja obsługi Lexmark X548 - gdzie znaleźć? Jak uniknąć sterowania dwoma autami RC jednym pilotem?