Stosy to dla mnie czarna magia, wiem tylko, że każdy przeskok wymaga zapisania adresu zwrotnego, ale nic poza tym :oops: No przy takim podprogramie to 1 megabajtowy stos to za mało :D, to się chyba nazywa rekurencja: [syntax=basic4gl]Petlapomiarowa: If Impulsy < 15 Then 'Jesli nie ruszono, wyswietlaj dalej napiecie Gosub Pomiaradc If Konwersja >...
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...
...Symulator pokazuje 1us a mi sie wydaje ze 10us. W tym wypadku , uwierz symulatorowi ;) Piotrek
OK, mam nadzieję, że zegar ustawiłeś w opcjach. Ponieważ muszę wyjść, to dam Ci wskazówki, a resztę wymyślisz sam lub koledzy pewnie podpowiedzą. Gdy pierwsze zbocze drgania styku ustawi flagę przerwania i mikrokontroler wejdzie w funkcję jego obsługi, to zaraz na początku automatycznie kasuje (w tym mikrokontrolerze) flagę przerwania. Ty w swoim programie...
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.
Stąd, że porty D2 i D3 są portami dedykowanymi do wprowadzenia zewnętrznych przerwań. Spójrz datasheeta megi8.
W programie sterowanie diodą D1 jest na porcie B, nie C.
Wyrzuciłem z obsługi przerwania pętle opóźnijące: SIGNAL(SIG_INTERUPT1){ if(bit_is_clear(PINC,PC5)){sbi(PORTC,PC5... else cbi(PORTC,PC5); } Niestety nic nie pomaga. Nadal nie działa. Nie działa , bo ... kompilator nie wie ,co to za wektor SIG_INTE R UPT1.Gdybyś napisał SIG_INTE RR UPT1 , to by wiedział :D Piotrek PS Odpowiednikiem powyższych "zabiegów"...
licznik0 i licznik1 muszą być zadeklarowane jako volatile
O jakim innym AVR mówisz? Co masz na myśli mówiąc 'wolno'? Zależy mi, aby było obsługiwane na jednym porcie ponieważ mam takie dwie linie a Atmega8 mam tylko 2 zewnętrzne przerwania.
Tego się niestety obawiałem. No cóż, pozostaje mi podłączyć go w inne miejsce. Czy jest obojętne do którego przerwania (INT0 czy INT1) go podłącze? I drugie pytanie dotyczy optotriaka MOC3010. Czy jest jakaś polska dokumentacja? Ewentualnie wyjaśnienie w jaki sposób go obsługiwać aby puszczał mi prąd na wyjście do którego podłączam urządzenie zewnętrzne?
tak , podłączenie jest prawidłowe jedna mała uwaga jeżeli układ ma służyć tylko do separacji to ok , natomiast jeżeli do innych celów to lepiej wykorzystaj dostępne piny z obsługa przerwania zewnętrznego , ustawiając reakcję na opadające zbocze sygnału
Witam. Czy byłby ktoś w stanie pomóc mi napisać prosty program, w którym wykorzystuje przerwanie zewnętrzne? Podłączyłem switch z jednej strony do Vcc (takie jest założenie daleszego rozwianięcia zadania) a z drugiej do Portu PD2. Proszę o pomoc oczywiscie z pisania w jezyku C. Może znajdzie się ktoś wyrozumiały, ponieważ większość stron, które przeglądałem...
Zastanawia mnie jeszcze dlaczego nie wykorzystano wbudowanego komparatora atmega8 do wykrywania zera. Zwłaszcza że niewykorzystane piny są. Już drugi raz widzę rozwiązanie na wzmacniaczu zbocza i przerwaniu zewnętrznym.
Witam, ustawienie rejestru DDR i PORT na 0 daje wejścia pływające (ATmega8 nie ma rezystorów ściągających do masy, tylko podciągające do plusa). Tak jak jest teraz łapiesz kolego zakłócenia. Należałoby albo dodać zewnętrzne rezystory między przyciskami a masą lub zmienić położenie przycisków (między pinem a masą) i włączyć wbudowane rezystory. O volatile...
Dokladnie, musisz ustawic stos. U mnie struktura wygladala tak .include "m8def.inc" .org 0x00 rjmp reset RESET: ldi R16,low(RAMEND) out SPL,R16 ldi R16,high(RAMEND) out SPH, R16 main: rjmp main
Wynika z tego że wewnętrzne oscylatorki są kiepskie. Tak, by być pewnym transmisji należy stosować zewnętrzne kwarce.
Nie pamiętam, jak działa makro sleep_mode(); ale przecież przechodzisz do trybu uśpienia w przerwaniu od timera a jak wiadomo wejście w dowolną procedurę obsługi przerwania blokuje globalne zezwolenie na obsługę przerwań, wiec prawdopodobnie w chwili uśpienia skutecznie blokujesz także przerwanie zewnętrzne, przez co nie możesz później wzbudzić procesora...
Sygnał przerwania może być wywołany z jednego z peryferiów (np wbudowane liczniki, adc, twi itd), albo właśnie przez nóżkę procesora (w wypadku atmega8 bodaj są 2 zewnętrzne przerwania) Co do arduino pewnie musisz użyć biblioteki.
Włącz co najmniej wewnętrzne podciągnięcie. Gdzie masz konfigurację przerwania, czym jest wyzwalane ? Polecam ujemne zbocze(jak rozumiem, switch do masy ?).
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Proszę o pomoc. Pierwsza zasadnicza uwaga to nie zauważyłem w programie konfiguracji interruptu0- coś np. takiego: config INT0=...
Do jakich pinów podpina się sygnały z enkoder inkrementalnego do Xmegi ? Czy do któregokolwiek pinu i działają one jak zewnętrzne przerwania w Atmega8?
Po pierwsze do ATmegi 8 wepchnąć RTOS to może być ciężko... chyba, że KaRTOSa. Po drugie moim zdaniem to wystarczy napisać normalną procedurę obsługi przerwania zewnętrznego i tyle.. Program pracuje cały czas, dostaje sygnał z pinu EXT0 i zabiera się za obsługę instrukcji w przerwaniu..
Cytat z pomocy BASCOMA AVR: "W trybie Power Down, zewnętrzny oscylator zostaje zatrzymany. Użytkownik może przywrócić działanie procesora tylko za pomocą: układu WATCHDOG, zewnętrznego sygnału reset lub za pomocą zewnętrznego sygnału przerwania."
To nie program tu jest problemem a dopasowanie sygnału. Poczytaj o wzmacniaczach operacyjnych i komparatorach. W procesorze zbocze możesz wykryć za pomocą przerwania zewnętrznego.
Wystarczy nawet dioda, dzielnik i sprawdzanie obecności impulsów choćby nawet zewnętrznym przerwaniem jeśli jest wolne.
Bity w MCUCR określają na co będzie reagować przerwanie zewnętrzne... Zmiana stanu, opadające lub narastające zbocze więc jest to jak najbardziej potrzebne... SIGNAL (INT0_vect) - obsługa zewnętrznego przerwania INT0... SIGNAL (TIMER0_OVF_vect) - obsługa przerwania od przepełnienia timer0... Co do portu... Jak na mój gust powinno być PORTC = !PORTC;...
Obsługę przycisków też zrób w przerwaniu timera, jak radzi BlueDarco - nie ma sensu obsługa przerwania zewnętrznego, bo zniszczy Cię drganie styków...
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
Nie ma w Atmedze8 JTAG więc nie ma co proponować. Jedyne co musisz zrobicstosując taką małą częstotliwość to dobrze ustawić FUSY iraczej wyłączyc watchdog`a. Wiem o co koledze biega z tym wonym zegarem, sam tak kiedys byłem zmuszony zrobić podczas testowania programu Inną drogą do osiągnięcia podobnego celu jest zajęcie procesora jakims długim przerwaniem...
Proszę zauważyć że czas pomiaru nie jest tym samym co częstotliwość pomiarów czy czas powtarzania pomiarów. Przy sygnałach zmiennych trzeba dążyć ,by pomiar był możliwie krótki i do tego służy dzielnik przetwornika . Częstotliwość pomiarów i start konwersji można zainicjować dowolnie wybranym zdarzeniem np przepełnieniem licznika czy przerwaniem zewnętrznym.
Witaj, No save spokojnie możesz użyć.... pod warunkiem, że nie korzystasz w obsłudze przerwania z instrukcji Bascoma bo jeśli tak to nie odkładając rejestrów na stos, zgubisz ich wartości i w najlepszym przypadku będą się działy różne rzeczy. Ja bym napisał wstawkę w asemblerze odkładając wcześniej na stos używane rejestry w tym SREG. Możesz też użyc...
Bo nie tak się używa przerwań zewnętrznych. Można po pojawieniu się przerwania od zbocza narastającego wystartować timer, w przerwaniu zmienić na zbocze opadające i gdy pojawi się zbocze opadające zatrzymać timer, odczytać jego stan do zmiennej volatile wykasować i ponownie ustawić na zbocze narastające. Mozna też wykorzystać oba dostępne przerwania....
Autor chce uzyskać SLEEP_MODE_PWR_DOWN, a z tego tryby wybudzi go jedynie watchdog lub przerwanie zewnętrzne (zależnie od uC).
Wykorzystujesz przerwanie zewnętrzne od Int0? W takim wypadku odczyt adresu i komendy wykonaj w podprogramie obsługi tego przerwania.
Może jakiś wyłącznik krańcowy. Szyba dochodzi do końca w skutek czego zwiera wyłącznik krańcowy co powoduje wywołanie przerwania zewnętrznego na atmedze i ona wyłącza silnik.
Dodatkowy wpływ na błąd ma niedokładność częstotliwości generatora kwarcowego. Błąd w sekundach na dobę, wyraża się wzorem: \Delta=86400*(1-\frac{fwzr}{f}) \Delta - błąd w sekundach na dobę (wartość ujemna oznacza spóźnianie się) fwzr - częstotliwość wzorcowa (czyli to co ma być np. 4000000 Hz) f - częstotliwość rzeczywista kwarcu lub generatora kwarcowego...
No dla mnie tym następnym krokiem był przerzutnik T :) Również polecam :) Potem, sugeruje proste przerwania zewnętrzne, timer (tu duze pole do popisu, mozna sobie zrobić na nim mruganie diody, przyciskami sterowac częstotliwość), potem sterować jasnością z PWM. Dalej proponuje pobawić sie wewnętrznym eepromem, przydaje sie w dalszej nauce, potem zewnętrzny...
Oczywiście uint8_t - zjadłem '8'. Jeśli zmienna jest używana tylko wewnątrz procedury, to powinna być zadeklarowana wewnątrz procedury. Jeśli taka zmienna ma "przeżywać" czas, kiedy procedura nie jest aktywna (czyli zachowywać wartość pomiędzy wywołaniami), to musi być zadeklarowana z atrybutem static. Ten sam atrybut oznacza coś zupełnie innego w odniesieniu...
Tego nie widziałem. Znalazłem za to informację że dotyczy to rezonatora pracującego jako generator wytwarzający główny sygnał zegarowy: http://obrazki.elektroda.net/9_123515576... A po drugie, akurat w ATMega8 jest błąd w krzemie i te wewnętrzne kondensatory nie działają (tzn. FuseBit ich nie włącza). Użycie rezonatora jako źródła sygnału dla...
Zły pomysł, zły kod. Użyj jednego timera w trybie zliczania impulsów zewnętrznych i podłącz wyjście wentylatora do jego wejścia. Drugi timer zaprogramuj na zgłaszanie przerwań co 1 sekundę (timer 0 tego nie potrafi), w procedurze przerwania odczytaj wartość licznika, wyzeruj licznik i wyświetl wartość. Nie jest to idealne rozwiązanie, ale o niebo lepsze...
Nie wiem jakiego uśpienie używasz, ale zarówno z trybu Power Down i Power Save można wyjść za pomocą przerwania zewnętrznego ale zgłaszanego poziomem (a nie zboczem, tak jak masz w porgramie). Czytaj notę, rozdiał Power Mangament and Sleep Modes.
Piny, które jednocześnie służą jako źródło przerwań zewnętrznych. Oznaczane są INT0, INT1, .... itd. ATmega8 ma o ile pamiętam 2 takie wyprowadzenia. Aby móc z nich korzystać trzeba oczywiście wszystko odpowiednie pokonfigurować. Powodzenia! ;)
To w takim razie musisz dołączyć schemat może? skoro to mają być przerwania zewnętrzne. Co ty masz tam przyłączone do PD2 i PD3? P.S. Sorry ja odpadam - nie rozumiem po co taki kod. Skoro nie masz zainicjowanych przerwań?
Witam! Moje pytanie dotyczy przerwań zewnętrznych INT0 i INT1. Czy istnieje możliwość przyporządkowania ich do innych wyprowadzeń układu czy są sztywno "przymocowane" do pinów 4 i 5? Pozdrawiam.
Pewnie pozostanie Ci tylko allegro lub sklepy internetowe. W moim eks-wojewódzkim mieście też ciężko coś bardziej specjalizowanego kupić. Edit. W temacie uszkodzonego procka. Może przerwanie zewnętrzne na PD5, a w przerwaniu steruj i czytaj licznik T0 ,,na piechotę"?
Mój problem polega na tym, że jak dodamy po Reset Portc.5 a przed Loop polecenie Wait 1 czy np. Waitms 1000 program odczytuje błędne dane jednak zawsze dla każdej z kart takie same. Czy to może mieć z wiązek z użytym przerywaniem? Chodzi o to aby odczytywał jeden raz ID karty i ciągłym przyłożeniu, a nie jak jest teraz że co 100ms bo tak moduł przesyła....
Witam. Mam takie oto zadanie: po wciśnięciu przycisku ma zacząć się odliczanie czasu, po puszczeniu przycisku koniec odliczania. Wartość na bieżąco wyświetlana na LCD Z obsługą LCD spokojnie dam sobie radę, ale z timerów i przerwań jeszcze nigdy nie korzystałem. Prosiłbym o linka jeśli ktoś widział gdzieś podobny program albo opis konfiguracji timerów...
http://obrazki.elektroda.pl/2159092800_1... Witam, mój pierwszy projekt elektroniczny na Elektrodzie i w ogóle :) Licznik rowerowy widoczny na poniższym zdjęciu. Pomysł zrodził się w zeszłym roku, właściwie bez żadnego powodu. Zaczęło się od zabawy układami AVR - przez diody i przyciski, potem ekran z telefonu. W końcu padła bateria...
Ok, myślałem nad samą diodą Zenera, ale jakiś ogranicznik prądu w postaci rezystora też się przyda. Muszę teraz przemyśleć zliczanie impulsów za pomocą przerwań zewnętrznych tak jak doradziłeś mi w innym temacie.
....... panie autor.... zastanów się, nad tym co się dzieje na twoim wejściu INT ??? Przerwanie sobie jakoś tam zainicjalizowałeś i ok, ale co masz na wejściu ??? bo wg mnie - trzeci stan Hi-Z. Czyli napięcie ci pływa - brak podciągania .... i dziwisz się, że przerwanie jest wciąż wyzwalane nawet bez naciskania przycisku? ..... Podciągnij wejście albo...
Fakt trochę sie zagalopowałem z tym wywodem :/ Jednak w ten sposób zdefiniowane wejście które może być źródłem przerwań zewnętrznych będzie działać na zbocze rosnące czyli gdy podasz na nie VCC. Oczywiście po zdefiniowaniu przerwań. Pozdrawiam
Niestety za mało znam gcc od podszewki żeby coś poradzić. Wydaje mi się że pliki startup są już w postaci plików OBJ (.o) nie wiem gdzie szukać źródeł. Po pierwsze poruszyłbym ten temat na AVRFreaks. Wygląda że podobna sytuacja była również z innymi ATMEGAmi: https://www.avrfreaks.net/forum/atmega80... Wysłałem zapytanie...
Oczywiście że jest, podpinasz 1-wire pod wejście przerwania zewnętrznego, pdf z dokładnie opisaną transmisją 1-wire w ds1820 i jedziesz z programem.
Otóż zliczam czas na timerze 2 i co 1 sekundę generuje mi przerwanie obsługiwane w procedurze signal. Jednak gdy jestem w menu które wywoływane jest za pomocą przerwania: ISR_BLOCK, czas nie jest liczony. Jak zrobić by priorytet przerwania Timera2 był większy niż przerwania zewnętrznego. Nie mogę ustawić ISR_NOBLOCK bo zapcham szybko stos. Czy w AVR...
Witam! Czy istnieje procedura odczytu sygnału z pilota SONY będąca odpowiednikiem GetRC5 (dla pilotów RC5)? Przeglądałem elektrode, suport na www firmy MCS ale wszystko co znalazłem to dosyć rozbudowane procedury. Poszukuje też materiałów na temat sposobu kodowania IR SONY i ewentualnych innych przykładów procedur odczytu w bascomie. (Procek to ATMEGA8...
Problem teoretycznie rozwiązany. Dokonałem zmiany takiej, że wyjście z LM324 nie powoduje zgłoszenia przerwania w atmedze, tylko atmega ciągle sprawdza stan linii przy pomocy PINx. Jednak z ciekawości jeśli ktoś wie dlaczego, metoda z użyciem przerwania nie zdała egzaminu to proszę o sugestie. Myślałem że te przerwania zewnętrzne są właśnie po to żeby...
Jak jest z dokładnością zegarka RTC w Atmega8? Słyszałem plotki, że nie chodzi to zbyt idealnie. Potrzebuję zrobić zegar do zliczania tylko dni i zastanawiam się czy jest sens stosować zewnętrzny układ RTC. Układ musi mieć podtrzymanie zegara z baterii/kondensatora w przypadku zaniku zasilania. Śmiało możesz użyć np. Timer1 w trybie CTC jako generatora...
A ogólnie działa serwo na funkcji delay ? U mnie serwo kiedyś na takich czasach delay nie działało, dopiero jak dałem kilka małych delay to zaczęło chodzić. Lepiej odmierzać czas za pomocą Timera . http://www.robotyka.net.pl/category/arty... -opisane tu są zarówno Timery jak i przerwania zewnętrzne z przykładami, może pomoże.
jak chcesz takie duze czestotliwości mieżyć to musisz użyć timera żeby liczył zewnętrzne impulsy, wtedy drógim timerem wyzwalasz przerwanie co określony czas (im dłuższy tym lepszy bo pomiar dokładniejszy) liczysz ile było ilmpusów z zewnątrz w okreslonym czasie. wydaje mi się że tą metodą dało by sie mieżyć nawet do 100Mhz ale jest jedno zalożenie...
Ja bym proponował na początek przerwanie zewnętrzne INT w którym liczysz impulsy, oraz przerwanie timera w trybie CTC co około 1s w której jak kolega (at)bochnio wspomniał będziesz zerować licznik. Kolejny krok to mniej więcej tak:[syntax=c]if(licznik > 6) POTRB |= (1<<PB0); // ustaw stan wysoki gdy przekroczy wartość else POTRB &= ~(1<<PB0);...
NP: IF A and B and C then coś tam się dzieje end if A B C to klawisze ( piny porty zmienne ) Pozdro! I to powinno dziać się w obsłudze przerwania, jeżeli ma to się rzeczywiście natychmiast stać. Klawiaturę podłącz tak, aby po wciśnięciu dowolnego klawisza generowała określony stan, linię z tym stanem podłącz do pinu zewnętrznego przerwania w kontrolerze,...
Jeżeli stabilność samego rezonatora kwarcowego jest dla danego zadania za mała, to oczywiście żadne rozwiązanie zależne od niej nie da pożądanego efektu. Wtedy należy użyć zewnętrznego generatora o dużej stabilności. Wykorzystują one specjalnie dobierane rezonatory pracujące w znacznie bardziej rozbudowanych ale i o wiele stabilniejszych układach. Przy...
Witam A jak masz skonfigurowane przerwania INT0 i INT1? Z power down można wyjść tylko poprzez przerwanie zewnętrzne wyzwalane poziomem. A poziom wyzwalający przerwanie musi się utrzymywać do czasu wybudzenia mikrokontrolera z trybu power down. Jacek
Rzeczywiście to pomogło. Zastanawia mnie, dlaczego jak licznik był w trybie normalnym wywoływane było przerwanie... Bo przerwanie jest od porównania. Gdy TCNT1 = OCRA1 to jest wywoływane przerwanie. A wytłumaczysz mi dlaczego OCR1AL ma wynosić 124, a nie 125? Bo tak jest napisane w datasheet. Zresztą zauważ że taka sytuacja jest sensowna. Zwróć uwagę...
Dzięki Charly za odpowiedź. Mam jeszcze jedno pytanie, czy wtedy sygnał z tego pinu mogę podłączyć do T0, tak, aby pin ten działał jak przerwanie zewnętrzne?
Nie działa Ci, bo nie przeczytałeś dokumentacji... http://obrazki.elektroda.net/0_118799421... Flagi przerwań czyści się przez wpisanie do nich logicznej jedynki. Trochę może paradoksalnie to wygląda, ale ma swoje logiczne uzasadnienie. Chodzi o to, że czyszcząc flagi w ten sposób da się to zrobić o wiele szybciej i co najważniejsze - bezpieczniej....
Przewód ma ze 60cm. Nie rozumiem dlaczego nie działa pull down, ale pull up zewnętrzny też mi coś nie funkcjonował. Cały czas była masa.
Zrób sprawdzanie portów do których podpięte są przyciski w pętli głównej, albo w podprogramie obsługi przerwania Timera0 - po wyświetleniu cyferek na wyświetlaczach. Zawsze pozostaje jeszcze Timer2 :D, ale jak zapuścisz przerwania z 3 timerów i do tego jakieś zewnętrzne int to mogą być problemy...
Zmniejsz rozdzielczość, tworząc na przerwaniach programowy PWM. Przy 5 bitach wyciśniesz ponad 200kHz. Jak koniecznie ma być coś zewnętrznego to nawet NE555 można kontrolować załączając odpowiednie wartości rezystancji/pojemności. http://lmgtfy.com/?q=external+PWM+contro...
Pierwszy i bardzo poważny problem zauważyłem w funkcji TIMER1_COMPA, jest nim linijka rjmp uspij. Gdy się wykona, to przerwania pozostaną zablokowane, oraz kilka bajtów na stosie zostanie uwięzionych - głównie adres powrotu z przerwania. Można temu zaradzić poprzez wstawienie pop + pop + sei przed rjmp. Drugi problem, to karygodna pętla główna - dławienie...
Każdy uK da się wprowadzić w stan obniżonego poboru mocy (to się chyba IDLE nazywa) i wybudzić zewnętrznym przerwaniem. Więcej w dokumentacji na www.atmel.com. Pozdrawiam.
Witam Do wyjść klawiatury wpinasz równolegle bramkę NAND 4-wejściową (zakładam klawiatura 4x4), a wyjście bramki do wejścia z przerwaniem zewnętrznym (INT0, INT1). W momencie naciśnięcia przycisku z klawiry na wyjściu bramki będzie "1" które wykrywasz (lub zbocze) na INTx. W obsłudze przerwania sprawdzasz klawisz jak normalnie.
Witam. Jestem obecnie na etapie budowy stacji pogodowej. Po pokonaniu problemów ze stacją bazową, nadszedł czas na budowę czujnika zewnętrznego. Będzie się on składał z mikrokontrolera AtMega88PA, czujnika SHT11, nadajnika RTFQ2 i czujnika mierzącego prędkość wiatru (kontaktron lub dioda + fototranzystor, jeszcze nie zdecydowałem). Czujnik będzie zasilany...
Witam! Mam pytanie odnośnie budzenia uP AVR. Z trybu POWER-DOWN da się wyjść m.in. poprzez przerwania INTx. Do ATmega8 chciałbym podłączyć "klawiaturę" zrobioną za pomocą 7 tact-switch'y i kodera 8 na 3 serii '148. Koder ten posiada wyście EO sygnalizujące wystąpienie na którymś z wyjść zmiany stanu (wciśnięcie przycisku). Chciałbym to wyjście podpiąć...
Oj przeczuwam kłopoty, piszesz że przesiadasz się z małego AtMega na AtMega128, a tam niektóe rejestry mają zmienione nazwy lub wręcz niektóre bity są w innych/nowych rejestrach. dla AtMega8..32 działa coś takiego #define GLOBAL_INT_ENA()asm("se... #define GLOBAL_INT_DIS()asm("cl... #define INT0_ENA()...
Diody masz podpięte bezpośrednio pod porty ATmega? Jeśli tak to lepiej dołóż sobie oporniki aby nie spalić wyjść ATmegi. Bezpośrednio przy procku daj kondensator 100nF. Przed stabilizatorem np. 1000uF, a za stabilizatorem 100u (to i tak za dużo, ale lepiej więcej niż za mało). Zliczanie zrealizowałbym w taki sposób: - Odpalić któryś z wewnętrznych timerów...
Zgodnie z dokumentację na stronie 4: http://www.atmel.com/dyn/resources/prod_... Przerwanie generowane jest gdy: The TWINT Flag is set in the following situations: After the TWI has transmitted a START /REPEATED START condition After the TWI has transmitted SLA+R/W After the TWI has transmitted an address byte After the TWI...
Nie jestem pewien co do połączenia układu MBI5026 do Atmegi8 http://www.datasheetcatalog.org/datashee... Czy jeśli podłączę w ten sposób: GND->GND VDD->+5 CLk->SCK LE-> wolny port OE-> wolny port SDO-> zostawiam nie podłączony bo nie używam drugiego układu MBI5026 SDI-> wolny port to będzie dobrze? Dodano po 8 Jednak SDI nie może być...
To dwa sygnały na timery jako liczniki a trzeci sygnał na przerwanie zewnętrzne. A trzeci timer jako zegar.
Drgania styków kontaktronu postaram się wyeliminować sprzętowo. Nie odpuszczaj, zrób to programowo, chociażby po to by się tego nauczyć na przyszłość. To jest proste. Weź nie żartuj. Nie da się tego zrobić rozsądnie przy wykorzystaniu przerwania zewnętrznego i timera. Sprzętowe rozwiązanie w tym wypadku jest optymalne.
Za bardzo nie jestem praktykiem w C (w asm nie muszę się zastanawiać nad winą kompilatora, jak coś nie działa to tylko z mojego powodu... :}), ale widzę, że miksujesz starą nomenklaturę nazewnictwa obsługi przerwań i nową : http://www.nongnu.org/avr-libc/user-manu... Od nieczytelnego makra _BV proponuję też odejść i używać...
Jak dla mnie to przede wszystkim zamiast deley() wykorzystać jakiś zew. zegar RTC usypiać procka i wybudzać przerwaniem z RTC Nie trzeba używać zewnętrznego RTC - wystarczy podłączyć kwarc i użyć przerwania z wewnętrznego timera. Nie wiem, jak w przypadku Arduino, ale zastosowany w nim mikrokontroler to chyba ATmega8, więc jest taka możliwość (o ile...
Dziękuję za podpowiedzi:) Wstawiłem konda 100nF, próbowałem wyzwalać przerwanie na niski stan jak i na zbocze opadające i dalej to samo.. Czy jeśli napiszę taki kod: ISR(INT1_vect) { _delay_ms(100); while(bit_is_clear(PIND,PD3)... LCD_Clear(); LCD_WriteText("Co tam!"); _delay_ms(1500);...
Tylko dalej nie rozumiem w jaki sposób mi pomoże zewnętrzne przerwanie i w jakim celu mam w nim sprawdzać czy jest na nim stan niski?
Da się jakoś zablokować przerwanie jeżeli jestem w trybie ustawiania godziny? Lepiej zamiast tego zrobić całość POPRAWNIE. tj: 1. Bez instrukcji opóźniających 2. Z eliminacją drgań styków za pomocą przerwania timera (najlepiej tego samego, co od obsługi LEDów) 3. Odczyt z PCF też wykonywać w przerwaniu (układ ten generuje impulsy o częstotliwości 1Hz...
Jeszcze chyba potrzebne Enable Timer1. Poza tym, nie wiem po co masz ustawiane Edge, tu nie chodzi o wyzwalanie zboczem przerwania zewnętrznego. Poza tym nie definiujesz preskalera i po wyświetleniu wyniku warto byłoby wyzerować timer bo zacznie liczyć od tego co skończył, chyba, że tak chcesz.
Witam Czy jest możliwe wywzolenie zewnętrznego przerwania na zbocze opadające/narastające na porcie innym niż INT0/INT1? Jeśli tak to jak? W dokumentacji doczytałem się że wyzwolenie przerwania na zbocze opadające/narastające jest możliwe tylko na INT0/INT1 natomiast wyzwolenie przerwań na innych portach PCINTX działa na zasadzie wykrycia zmiany na...
Witam. Mam problem z przerwaniem zewnętrznym Int0 w Atmega8. Chodzi o to, żeby po naciśnięciu przycisku podłączonego do końcówki Int0 wykonała się procedura obsługi przerwania. Napisałem wręcz helpowy program i nie działa. Jest takie coś, że od razu po włączeniu procka wykonywane jest przerwanie (na dodatek przez cały czas). Próbowałem też wyłączyć...
Ale nie blokuje przerwań. Przycisk przenieś na PD2 lob PD3, ustaw zezwolenie obsługi przerwań i przerwania zewnętrznego, ustaw obsługę tego przerwania np. on INT0 ustaw_flage ustaw_flage: flaga=1 return i wpisz zamiast: "If Pinb.0 = 0 Then" "If Pinb.0 = 0 or flaga=1 Then" P.S. Ale obsługi Timerów powinieneś się tez nauczyć.
One mają trochę różnic. M.in. różnią się pamięcią Flash, EEPROM, SRAM czy ilością zewnętrznych przerwań. Szczegółów szukaj w dokumentacjach producenta. Raczej mało prawdopodobne że będziesz mógł bez przeszkód zamienić te dwa µC.
Witam, chciałbym prosić o pomoc przy budowie układu wykrywającego dźwięki, a konkretnie odbicia piłeczki pingpongowej. Układ będzie współdziałał z mikrokontrolerem atmega8. Ponieważ zasilanie musi być bateryjne chciałbym żeby atmega była cały czas w trybie uśpienia (PowerDown) i wybudzana za pomocą przerwania zewnętrznego INT0. Przerwanie to miało by...
Przeczytałem to co jest wyżej napisane i... nie rozumiem co chcesz zrobić :) Co to znaczy: Potrzeba mi zapamiętać max. 4 liczby które będą następować po sobie dość szybko jednak Atmega potrafi je zdekodować bo jak dobrze się przypatrzę to liczby się zmieniają dobrze, i więc właśnie niech ktoś podpowie, co dopisać by procesor zapamiętał liczby i ustawił...
W realu wyświetla sie 0 i nic wiecej. Zgodnie z moimi wyliczeniami 8000000 -taktowanie kwarcu dzielone przez 256 -Timer0 jest 8bitowy, dzielone jeszcze przez 256 - prescaler, zliczone raz na 122 razy daje ok 1s. Czy licze coś nie tak? Zresztą nie chodzi mi o czas a o samo działanie timera bo pilnie potrzebuje go do projektu. Przerwania zewnętrzne mi...
Wg dr powinienem wykorzystać 51 "bo jest lepsza" Mam wrażenie, że twój promotor zatrzymał się w poprzedniej "epoce". Generator w oparciu o ATMEGA8 (z wykorzystaniem wbudowanych liczników) jest wystarczająco dokładny i stabilny do tych celów. Nawet jeśli już generator zrobić osobno to wykorzystaj do tego przerzutnik schmitta (konstrukcja spotykana czasem...
Możesz użyć procesora który ma obsługę tylu przerwań ile masz kół pasowych. Zdaje się że ATtiny2313 ma możliwość obsługi do 8 zewnętrznych przerwań zatem on by się pewnie nadał, tyle że ma 2kB flash'a i może ci się program w bascomie nie zmieścić
Bo niestety muszę zegarek rozbierać No niestety w tym trybie nie uzyskasz stabilnej sekundy, tym bardziej, ze Bascom w obsłudze przerwania może robić zbędne bzdury i jeszcze nie raz ten zegarek będziesz rozbierał. Do konstrukcji czasomierza najbardziej się nadaje asynchroniczny licznik Timer2 w trybie CTC, taktowany specjalnym rezonatorem kwarcowym...
Ok, tylko co jeżeli chciałbym żeby był np taki efekt: dioda świeci 4 sekundy na zielono, pozniej 4 sekundy na czerwono i powiedzmy 4 sekundy na żółto, jeżeli czas świecenia zrealizuję za pomocą funkcji Wait , to nici z obsługi przycisku w petli głównej, jeżeli bym to zrobił przerwaniem zewnętrznym wówczas program najpierw obsługuje przerwanie i sterowanie...
nproton Rozumiem dobrze. Ja chcę zdekodować 2 kanały z ppm które dochodzą już do serw a nie cały sygnał ppm. Jak zobaczysz ze swojego wykresu zmienia się ich czas trwania. Program już działa bardzo dobrze, jutro go wstawię dla potomnych. Mam jeszcze zagwostki: 1) Czy da się jakoś zmuxowac/powielić przerwania od wejść zewnętrznych? Jak bym chciał nie...
Wyliczenie temperatury jest właściwe, tylko zamiast 28 powinno być 25. Wtedy wyjdzie 100. Zastosowałem większą wartość ponieważ w datasheetcie pisze że wartość Vref może wahać się nawet do 2,9V. W programie z przerwaniem musiałem dodatkowo ratować się dodaniem 2stC do wyliczonej wartości, tak była zaniżona. Prawdopodobnie zmyliły cię nazwy cz_d i cz_u....
przerwania zewnętrzne atmega8 przerwania zewnętrzne atmega8 przerwania
miernik uszkodzony pomiar rezystancji satel perfecta zasilanie wymiana bezpiecznika automatycznego
frugal impulse mikrokomputer cobra1
Czarna strzałka na manometrze pieca olejowego Jak założyć linkę biegu wstecznego pod maską?