... Zwieram port PD2(INT0) oraz PD3(INT1) do masy i nic się nie dzieje... No to ustaw w projekcie właściwy uC, bo jeżeli w/w kod kompiluje się bez błędów, to jest kompilowany dla innego uC. GIMSK = _BV(INT0)|_BV(INT1); M16 nie posiada takiego rejestru.
Kolega Mad Jaro mierzy czas pomiedzy INT-em i przelicza na obroty. zablokowanie INT spowoduje pływanie obrotów( INT nie liczy impulsow). Kolega xury ma rację odnośnie jednokrotnego użycia szukania czujników. A poza tym zsynchronizuj odczyt 1wire z przerwaniem INT tzn. komunikację z 1wire podziel na max -5 bajtowe odcinki i wykonuj je po przerwaniu INT....
A w jaki sposób podajesz stan niski na wejście przerwania?
Przerwania traktuj jako coś wykonywanego równolegle "obok" programu głównego". Jedna z podstawowych zasad pisania obsługi przerwań to to że ma być ona jak najkrótsza. Reszta ewentualnie obsługiwana jest w pętli głównej w poprzez ustawianie i testowanie odpowiedniej flagi. Jeśli chcesz zrobić menu wielopoziomowe poradzę zapoznać się z kodem z butterfly...
Witam, Kiedyś znalazłem gdzieś na necie takie rozwiązanie problemu małej ilości przerwań zewnętrznych w atmega16. Czy może ktoś wytłumaczyć dokładniej działanie tego tworu ? Chodzi mi głównie o techniczną sprawę i sens użycia tych diod. Oczywiście te X to microswitche dołączone do masy. http://obrazki.elektroda.net/60_12869070...
1. INT0 i INT1 muszą być skonfigurowane jako wejścia (DDRD). Nie znam schematu, ale można też podciągnąć je wewnętrznie do plusa (PORTD). 2. Testowanie w takim układzie należy wykonać ściągając wejście do masy, bo taki sygnał jest na wyjściu detektorów TFMS przy odbiorze paczki impulsów.
A wewnętrzny pull-up włączony? Bo objaw jest typowy dla programu, w którym włączone jest przerwanie zewnętrzne, a wejście wisi w powietrzu, choć program jest prosty i nie ma w nim obsługi przerwań... Ustaw w pętli niech samo zwiększa wartość zmiennej i obserwuj czy dalej są zakłócenia.
Witam, mój problem polega na tym, że chcę aby przerwanie zewnętrzne powodowało aby na wyświetlaczu LCD (2x16) została wyświetlana pewna dana. Niestety nie działa to poprawnie ponieważ wyświetlacz sprawia wrażenie jakby jakieś znaki były przemietane po nim, niestety częstotliwość jest na tyle duża, że jest to totalnie nieczytelne, nie mówiąc o tym, że...
witam chcę zrobić obrotomierz na atmega16 mający dwa wejścia, oraz kontaktujący się z PC przez rs232. Impulsy z przerwań są zliczane przez czas 1 sekundy a następnie przemnażane przez 60 i wyświetlane na wyświetlaczu. Po wyświetleniu chce je przesłać do PC, gdy to robię wartość pomiaru jest zaniżana na lcd oraz PC. Np z włączonym przesyłaniem prędkość...
No właśnie- przerwanie od Timera co 16.384 ms a w przerwaniu tylko inkrementacja jakiejś zmiennej. No ale to Bascom- odkładanie na stos i zdejmowanie zajmie jeszcze kilkadziesiąt instrukcji po 0.0625us przy zegarze 16MHz. Ale nawet wtedy to będzie poniżej 6us. Wystarczy aby obsługa przerwania INT0 była krótsza od 16ms. Zwłaszcza że przerwanie zewnętrzne...
Zajmiemy się na początek faktem, że ATmega16 posiada trzy przerwania zewnętrzne. Na pinach: D2 - INTO 0 D3 - INTO 1 B2 - INTO 2 Więc Podłącz PCF pod pin B2. Natomiast Timer1 pozostaw do ciekawszych rozwiązań. Dokładniej do ominięcia Waitms. Podłącz PCF i się Odezwij, będziemy kontynuować.
Witam, Chciałbym się poradzić, jaki jest najlepszy przepis na uzyskanie przerwania od timera co 100ms. Chodzi o zbudowanie dokładnego urządzenia pomiarowego. Rozważalem tryb CTC, dołączanie zewnętrznego kwarcu ale chciałbym poznać jakiś sprawdzony sposób.
A co się dzieje na wyjściu? Zwykle jest to tranzystor który powinien być jakoś zasilany. Czasami w kolektor tranzystora jest wstawiany opornik- ale to rzadko- zwykle traeba dać zewnętrzny. Możesz to sprawdzić omomierzem.
greg84, zastanów się chwilę: jakby były odłączone porty kontrolera w czasie snu, to jak bys go obudził poprzez przerwanie zewnętrzne (kazdy AVR można wybudzić poprzez INT0 i INT1 z każdego stanu uśpienia Pozdrawiam
Witam. A może tak jak zauważył kolega blue_17 w stronę Microchipa tylko nie od razu w dsPIC ale PIC18 . Przykładowo PIC18F26K22 ma 3 timery 16 bitowe , 3 timery 8 bitowe i jeden konfigurowalny jako 8 lub 16 bitowy. Posiada przetwornik ADC i 3 zewnętrzne przerwania . A i koszt jest porównywalny z ATmegą 16.
generalnie nie wczytując się w kod za bardzo, to nie podałeś funkcji main i nie wiadomo co tak w ogóle tam jest. Ogólnie kod działa na przerwaniach - zewnętrznych czujnika i timerów. Co mogę napisać nie widząc funkcji main, to: - podłącz czujnik podczerwieni pod IN1 (PD3), - wywołaj w main rc5_init(); - później włącz przerwania przez sei(); ogólnie...
Rozwiązuj problem modułowo,trzeba napisać najpierw najważniejsza cześć czyli obsługa przerwania zewnętrznego.Pin INT0 należy ściągnąć rezystorem stosownie do ustawionego trybu ,jeśli ma wykrywać zbocze opadające to rezystorem do zasilania,jeśli narastające to rezystorem do masy.Wewnętrzny pullup różnie się zachowuje w tej sytuacji. Robi się to tak:...
Nie mam ustawiony wewnętrzny 8MHz ale docelowe w projekcie chcę użyć zewnętrznego 11.058MHz. Myślałem że instruknja: CONFIG Clock = Soft, Gosub = Sectic powoduje że obojętnie co jest ustawione to Bascom automatycznie odlicza 1s i po niej skacze do instrukcji Sectic. Dokładnie chodzi mi o przerwanie które będzie wykonane po upływie 1s. Chcę przez to...
Ok, nie zauważyłem, umieść ten kod w znacznikach syntax. Zapisuj te konfiguracje z wykorzystaniem przesunięć bitowych. Nich timer jeśli już zmniejsza wartość licznika ustawionego na ustawiony odcinek czasu. Wykorzystaj tryb CTC do odmierzania czasu. Do wykrywania impulsu wykorzystaj przerwanie zewnętrzne.
Kilka uwag: - korzystaj z funkcji i rozbijaj program na funkcje. Niektórzy twierdzą, że jeśli blok ma więcej niż 10 instrukcji to należy go wyrzucić do funkcji. Moze to przesada, ale ułatwia czytanie kodu. - nie zostawiaj niewykorzystanych pinów jako wejścia w układzie - łapią zakłócenia, co w centralce alarmowej nie jest zalecane. - wewnętrzny pull...
Z tego co wiem to w ATmega-ch raczej trudno o możliwość zliczania impulsów z 3 niezależnych źródeł zewnętrznych i generowania dla każdego z osobna przerwania (chyba że powyżej ATmega32, ale w grę wchodzi wtedy wysoka cena). Pytanie czy konieczne jest takie rozwiązanie jak zaproponowałeś? Przy pracy uC z prędkością 8MHz (np. jak dla ATmega8, ATmega16...
Kuniarz program jest dobry bo działa na 8-ce. Dlatego pytam o ten RXD. Poniekąd rozwiązałem problem. W AVR Studio można zmieniać procesor jaki ma być programowany i gdy wybiorę: atmega16a to pomiar jest wykonywany, ale wtedy przyciski które mam podłączone do PIN-ów odpowiadających za przerwania zewnętrzne, resetują mi cały program(liczniki) i nie spełniają...
Witam Niech mi ktoś powie dlaczego nie działa mi impulsator pod prockiem ATmega16. Wyprowadzanie A podłączone mam pod przerwanie procesora a drugie sprawdzam w momencie przerwania. Niby wszystko logiczne: jak na kanale B mam 1 to kręcę w jedną stronę a jak 0 to w drugą. Ale jakoś mi to nie chce działać. Kanały już nawet podciągnąłem do plusa zasilania...
Kwarc którego używam to zewnętrzny 8Mhz. A ta się zastanawiam czy zamiast przerwania od przepełnienia ie powinno się użyć jakiegoś porównania wartości timera z w wartością w rejestrze??
Witam, Mam pytanie odnośnie obsługi przerwań w mikroprocesorze Atmega16. Procesor ten ma możliwość pracy z trzema przerwaniami zewnętrznymi. Powiedzmy, że aktywuję wszystkie trzy przerwania. Występować one będą średnio co 3,33ms i będą spowodowane detekcją zera na trzech kolejnych fazach zasilania trójfazowego. Czas trwania przerwania będzie się wahać...
Chce wlutować bezpośrednio w nogi podstawki do atmegi :P trochę będzie odstawać ale ważne, że działa :) Podpowiedz mi jeszcze, czy jak przylutuje kwarc i preskaler zmienię na odpowiednio mi pasujący to nie muszę w zadnym rejestrze timera0 nic ustawiać, ze to jest zewnętrzny oscylator? (pomijając fusebity)
Niechcący wprowadziłem Cię w błąd - sterowanie realizuje na Atmega16, która ma 3 przerwania zewnętrzne. Więc przerwań nie muszę wyznaczać programowo. Nie do końca jeszcze mam w głowie ułożone jak powinny te impulsy wyglądać i kiedy powinienem je podawać ale postaram się jakieś sterowanie zaimplementować i wrzucić wykresy z 6-kanałowej sondy stanów logicznych....
No z delay na pewno nie :). Ustaw sobie w przerwaniach timer programowy co 1s, a w pętli głównej możesz zrobić "liczydełko" reagujące na zbocza. W każdym tyknięciu timera w przerwaniach zapisz ile impulsów zliczyło i wyzeruj licznik. To co zapiszesz to w zasadzie gotowy wynik, który co 1s będzie aktualizowany. To chyba najprostsze rozwiązanie. Można...
Obsługa przerwania powinna być jak najkrótsza, jeśli zależy tobie na pozbyciu się zawieszeń... W ISR(INT0_vect) (nie SIGNAL(INT0_vect)) wystarczy licznik przerwań, a wręcz możesz to podpiąć pod wolny timer/counter ustawiając prescaler na wejście zewnętrzne liczenia - "External clock source on TX pin. ". http://www.nongnu.org/avr-libc/user-manu...
perlon, przystawka będzie nadawać cały czas adres, aby w trakcie pracy urządzenia można było zmieniać jego adres :) Jak często będzie nadawany do atmegi, to już zależy od mojej fantazji. Natomiast przy atmedze chce zbudować programowy bufor przychodzący, i odczytywać go w przerwaniu pochodzącym od "wirtualnego" portu uart. Choć szczerze, nie wiem jeszcze...
W takim razie rozwiąż to inaczej - skonfiguruj przerwanie zewnętrzne tak, aby było wyzwalane zmianą stanu i osiągnij ten efekt w ten sposób - polling pinu to w tym przypadku moim zdaniem nie jest najlepsze rozwiązanie.
Nie używam przerwania zewnętrznego tylko dowolny inny pin. Schemat całego układu w ktorym to napewno działa znajdziesz [url=http://mirley.firlej.org/pilot_komp... Zastosowałem tam ATTINY2313 ale na innych ATMELACH też testowałem i nie było problemu. Porownaj sobie program z pod tego linka ze swoim i znajdziesz...
Taka moja refleksja co się zna na pierwszych stronach DS-ów. T0 jest aktywne w każdym ustawieniu portu, a obróbka flagi to już zależy od programu. UART programowy lub sprzętowy w przerwaniu, zależny od ważności wysyłanej informacji lub multipleksowany zewnętrznie. To i ATiny15 idzie przystosować.
Niestety nie rozumiem tego co dzieje się w programach z linków, dlatego muszę napisać coś prostego sam. Napisałem pseudokod według którego moim zdaniem powinno się odbywać dekodowanie sygnału. Liczę na to że mi pomożecie. while{(zmienna_pomocnicza=0) do -ustawienie portu PD2 (port z INT0) jako wejście DDRB=0x00; -ustawienie timera -ustawienie przerwania...
Witam, faktycznie.. możliwe że zależnie od aktualnie wykonywanego programu licznik T0 startuje w innym momencie, a T1 nalicza inny czas związany z tą różnicą. Zaraz się będę za to brał, ale takie pytanko. Czy lepiej zrobić przerwanie z porównaniem T0 ( jeśli 1 impuls to zeruj T0 ), czy w tym przerwaniu z poprzedniego posta. Wyzerować tak jak jest na...
Witam. Dziękuję za zainteresowanie. Zanim wezmę się za program muszę uporać się z kilkom małymi problemami :( Niestety nigdy nie wykorzystywałem ani przerwań, ani timerów. To niestety sprawia, że nie wiem do końca jak się zabrać za ten program. Nie mogę do końca zrozumieć czym się różnią przerwania od znanych mi już funkcji (void), które wywołujemy...
Już po problemie - informacja o tym, że getrc5 blokuje przerwania nakierowała mnie na rozwiązanie. Komenda ta rzeczywiście blokuje przerwania, przynajmniej te wewnętrzne mikrokontrolera (dlatego chyba zewnętrzne INT1 w dalszym ciągu działa). Przeorganizowałem program tak, że odczyt RC5 umieściłem w stosownym podprogramie, który tuż przed powrotem do...
Dekodować ma VS1063 który jest sprzętowym dekoderem min. MP3 będącym DSP w architekturze Harvardzkiej .VS1063 Sterowany jest z AT89S8253 po SPI. ISA ma tylko wysłać/odbierać dane oraz wysyłać komendy tekstowe. Stąd cała idea , użycie sprzętowego dekodera/kodera. Tak jak to zrobiono w karcie MP3 na Amigę- też użyto VS1063. AT89S8253 ma zaimplementowaną...
Witaj Może trochę nie na czas odpowiedź ale komuś może pomoże Jak zrobić aby klawiatura przełączała nawet jak jest w pod programie i aby regulować prędkością zmiany PWR ? PWM ;] PWR to Politechnika Wrocławska ;) Jeśli chodzi regulacje wypełnienia z dowolnego miejsca w programie to bez przerwań się nie obejdzie. co do procesora to attiny2313 to nie zmieścisz...
Moim zdaniem powinieneś podłączyć się pod port przerwania zewnętrznego INT0 i w przerwaniu zastosować np zerowanie zegara, który liczy do 1 min jeśli nie wystąpi przerwanie i nie wyzeruje zegara to włącza się alarm. Można ustawić tak przerwania żeby działały tylko na zbocza np narastające, w ten sposób pozbędziesz się swojego problemu z zatrzymaniem...
Witam. Próbuję zrobić zwykłe zliczanie osób w pomieszczeniu. Mam dwie bariery świetlne, które są podłączone do pinów PD2 i PD3 czyli INT0 i INT1. Problem w tym, że przerwanie od INT1 nie chce mi zaskoczyć, natomiast INT0 działa. Dodam, że bariera działa dobrze: przerwanie bariery skutkuje podciągnięciem Portów PD2 czy PD3 do 0. Czyli przerwanie powinno...
W rejestrze TCCR0 ustawiasz 3 bity CS02, CS01, CS00 zgodnie z tabelką 42 (83 strona w dokumentacji) Odpowiednio: 0 0 0 – timer zatrzymany 0 0 1 – timer włączony, zlicza bez preskalera (impulsy z zegara systemowego) 0 1 0 - tak jak wyżej, zlicza z preskalerem 8 itd. Dwa ostatnie wiersze to zliczanie impulsów zewnętrznych. W rejestrze TIMSK...
Witam. Czy w rozwiązaniu, jak na rysunku, jestem w stanie po stwierdzeniu braku napięcia na linii przerwania zewnętrznego, podtrzymać kondensatorem napięcie zasilania i w tym czasie zapisać w pamięci kilka zmiennych? Jaka musiałaby być pojemność kondensatora, żeby to działało? Ewentualnie jakieś inne rozwiązanie (proste i tanie), aby przy nagłym zaniku...
[syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h> #define D7 7 //dioda podłączone do pinów portu D unsigned int counter=10110; int main(void) { DDRD = (1 << D7); PORTD=(1 << D7); // tutaj sobie zaświecasz diodę, ale do pojedynczych bitów to używaj "|=" zamiast samego...
Nie sadze ze 10s, jeśli chodzi Ci o przerwanie od watchdoga to wynosi ono 8s w nowszych układach a w starszych tylko 2s. A jeśli chodzi o power down to procesor czeka juz tylko na określone przerwania ( w przypadku tego układu jest to stan niski na INT0 lub spełniony warunek startu USI) Nowsze procki budzi sie jeszcze zazwyczaj timerem watchdoga oraz...
Uff, pokombinowałem, znalazłem na stronie atmela przykładowy kod w asemblerze do obsługi dwóch przycisków przerwaniami i nareszcie mam jakiś sensowny wynik. Konfigurację przerwań zmieniłem, i wrzuciłem w dobre miejsce. Godziny i minuty mogę już ustawiać, więc uznaję, że program działa :). Dziękuję za naprowadzanie mnie na właściwą drogę Ostatecznie...
Pojawił się kolejny problem z odliczaniem czasu :/ .. Spróbuję uchwycić istotę problemu nie wrzucając całości kodu: 1. Wykożystuje licznik T0 i T1; licznik T1 zlicza impulsy a T0 odmierza czas = 1s, po wystąpieniu 31 przerwania (overflow0) od T0 (tj. 1s) wartośc licznika T1 jest wyświetlana na LCD, na czas obsługi przerwana zatrzymuje oba liczniki aby...
Przecież nigdzie nie ustawiasz przerwań. ;konfiguracja przerwań zewnętrznych .EQU ISC0 = 2 ;ISC00 i ISC01 aktywne zbocza opadające dla INT0 i INT1 .EQU ISC1 = 2 ;ISC10 i ISC11 .EQU MCUCR_ = 4*ISC1 + ISC0 .EQU PIN_INT0 = 1 ;zezwolenia na INT0 i INT1 .EQU PIN_INT1 = 0 .EQU GICR_ = 128*PIN_INT1 + 64*PIN_INT0 To definiuje tylko wartości zmiennych
Dobrze, że "przerobienie" napisałeś, bo myślałem że tan program nie działa. Ale może żeby tak gotowca nie dawać i zmotywować do pracy i czytania - skorzystaj z wyjścia INT0 kontrolera(pamiętaj o rezystorze podciągającym), tam podepnij switcha. Następnie tak skonfiguruj przerwania zewnętrzne, aby było wywoływane przerwanie INT0 na przykład przy zmianie...
Dlaczego w przerwaniach zewnętrznych zezwalasz/blokujesz obsługę przerwania od Timer0- bo nie od timerów ale tylko od TIMER0. Zezwolenie ma obsługę przerwania od przepełnienia TIMER0 powinno być w main. Podobnie ustawienie bitów CS00- CS02. Ustawienie ich na 0,0,0 powoduje zatrzymanie licznika. To może być czasem potrzebne- ale nie w Twoim programie....
Racja pubus Tak też zrobiłem. Zamieszcze kod, może komuś się przyda: #include <avr/io.h> #include <avr/pgmspace.h> #include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include <math.h> #include <string.h> #include <avr/interrupt.h> //ATMega16 Q=4MHz #define tau0 87;//stała czasowa timera0, dla...
Ja ogólnie etap migania diodami mam już za sobą zrobiłem parę projektów prostych wykorzystujących TIMERY, Przerwania zewnętrzne, obsługę klawiatury bądź LCD i teraz zamierzam się właśnie dokształcić w interfejsach a doświadczenia w tym temacie nie mam, dlatego też pytam się was. A co sądzicie aby ten problem spróbować zrobić na interfejsie SPI? Z tego...
Witam,. Wytrawiłem taką płytkę jak na załączonym schemacie. Używam kwarcu zewnętrznego 8Mhz, z przerwaniami co 10ms. Miernik był sprawdzany z częstotliwościomierzem i jego wskazania są poprawne. Nawet jeśli nie mam nic podłączonego do licznika to na LCD ma wartości od 100-200Hz. W momencie gdy podłączone czujnik natężenia światła, który ma na wyjściu...
U mnie działy się takie historie gdy miałem $crystal poniżej 8200000 . Włączyłem zewnętrzny oscylator i $crystal = 8300000 i było ok. Mam taki termometr na wyświetlacz 3x7,czyli po twojemu 21 seg. Jeśli chcesz to udostępnię gotowca.
Drugi problem jest taki, ze zbudowałem sobie "matrycę" 8x8 LED, które mam podłączone do Portu C oraz D (po osiem linii), ale jako że chcę wykorzystać zewnętrzne przerwania muszę przenieść sterowanie do portu B i tu pojawiają się problemy, gdyż moja "matryca" zaczyna migać bez sensu i to nie cała, bo tylko pierwsze dwie linie... I też nie mam pojęcia...
mirekk36 zrobiłem tak, jak piszesz. Teraz INT0 zeruje mi liczniki, a ICP mierzy czas (raz dla zbocza opadającego, a potem dla narastającego). Działa super :-) ISR(INT0_vect) { unsigned char oldSREG = SREG; cli(); counter = 0; TCNT1 = 0; SREG = oldSREG; } ISR(TIMER1_CAPT_vect) { unsigned int curr_time = ICR1; if...
Kody źródłowe dostępne dla ATMEGA16 i następujących kompilatorów: (w nawiasach wynik kompilacji) IAR .......... (4852 bajty) AVRGCC .... (5808 bajtów) BASCOM ... (92% czyli ok 15kB) Myślę że wyniki mówią same za siebie. W projekcie wykorzystywane są SPI,I2C, przerwania od timera i zewnętrzne. No dokładnie tak to można się kusić o porównywanie a nie...
Jeżeli chcesz korzystać z zewnętrznego rezonatora kwarcowego to musisz pobawić się fusebitami. Trzeba tylko uważać z fusebitami.
Prosty program na AVRStudio : #include <m16def.inc> ; Prohibits use of non-implemented instructions (ATmega16) .dseg .org SRAM_START .cseg ;—————R...
jedyne rozwiązanie to karta SD, lub jakiś zewnętrzny flash (np at25df021). Przelicz sobie z ilości pixeli ile wyjdzie Tobie klatek w pamięci programu. Co do samego programu to jedyny poprawny sposób to realizacja multipleksowania w przerwaniu timera. Wtedy w programie głównym tylko bufor sobie uzupełniasz.
Ok to chyba już wiem co dalej trzeba zrobić. Ponieważ trudno wnioskować cokolwiek po odczycie temperatury 0xFFFF bo jest to kodowane w U2 i nic nie wymyślisz z tym więc spróbuj coś prostszego na początek odczytaj numer seryjny bodajże komenda 0x33 ale nie pamiętam dokładnie więc spójrz w dokumentację. Jeśli tym razem otrzymasz same 0xFF to oznaczać...
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
_jacenty_ ---> nie, no nie chodzi o to, że nie doceniam, bo najpierw napisałeś, że po prostu wgrałeś wsad do ATmega16. Później dopiero zobaczyłem, że piszesz iż widzisz, że obsługa RS232 nie korzysta z przerwań ;) ... no to już musisz zaglądać w źródła a nie w HEX'a ..... Nic nie napisałeś na początku, że właśnie kompilowałeś żródła - stąd to nieporozumienie....
Z tego co mi wiadomo, mikrokontroler wybudzi się ze stanu Idle gdy wykryje wewnętrzne lub zewnętrzne przerwanie! Ten tryb zatrzymuje zegary clk-cpu oraz clk-flash. Jeśli chcesz uaktywnić ten tryb to w rejestrze MCUCR ( _SFR_IO8(0x35) ) musisz wyzerować bity 4 5 7 . A bit 6 musisz ustawić. Dopiero po tych ustawieniach wywołujesz "sleep"
>>> DrDead, w szczególności chodzi tu o to że jeżeli bezkrytycznie posłuchamy rady, jak to robi Kol. asembler: 'ja stosuje taką zasada: zawsze w obsłudze przerwania na początku odblokowywuje przerwania globalne' to: 1) ryzykujemy że nastąpi blokada wykonywania przerwań o wyższym priorytecie gdyż zakłócamy naturalną kolejkę wykonywania przerwań opartą...
1) czy procesor ma podłączony kwarc 16MHz i ustawione fusebity na kwarc zewnętrzny? 2) czy z konwertera RS485 wychodzą jakieś impulsy? 3) czy pin RX skonfigurowałeś jako wejście i ustawiłeś w stan wysoki? 4) czy piny LCD skonfigurowałeś jako wyjście? Obsługa transmisji 250000 baud w Bascomie to niezła rzeźna, ciekawe czy obsługa przerwania skończy się...
deus.ex.machina - testowałem różne kwarce i różne kondensatory. Jeszcze raz podkreślam - wewnętrzny oscylator działa bardzo dobrze, tylko ustawione fusebity BODLEVEL jakoś wpływają na jego niedziałanie. dondu - podłączenia kwarcu 32,768kHz pod XTAL1 i XTAL2 nigdy nie próbowałem. Kwarcu 32,768kHz używałem w jednym swoim projekcie z ATmega16 (teraz z...
Chyba wymyśliłem jak za pomocą pwm-a wygenerować ten przebieg. Muszę tylko zastosować zewnętrzny kwarc co najmniej 10MHz bo z wewnętrznego generatora 8MHz przy preskalerze ustawionym na 1 mogę wyciągnąć maksymalnie: 8000000/(256*1)=31250Hz, a to trochę za mało. Przy kwarcu 10MHz wyjdzie już 10000000/(256*1)= 39062Hz a to za dużo. Nie wiem tylko jak...
Witam. Mam problem z dekodowaniem sygnału z pilota. Pilot to RC5-BP7. Kod znalazłem na stronie o kodzie rc5, przerobiłem pod Atmege16 bo napisany został na Attiny. Zmieniłem również wartości wpisywane do licznika, ponieważ Atmega16 standardowo jak dobrze wiem działa na 1MHZ. Układ reaguje na przerwanie INT1, niestety dekodowanie ciągle kończy się errorem...
Mnie bardziej interesuje od strony programowej problem ,w jaki sposób ustawić w programie kompaktor wew. aby przy określonej jednej lub kilku wartość jego stan ulegał zmianie ,a samo zastosowanie tego typu rozwiązania uważam za naprawdę świetne ,ponieważ stosująć np linie 2EOL (dwu parametryczną ) z róznymi wartościami rezystorów (nie jednakowe) można...
Jedna uwaga do konstruktora obrotomierza :D Kolego nie przesadź z dokładnością tego wskaznika, moim zdaniem wskazania na poziomie setek obrotów są wystarczające, ponieważ dziesiątki a tym bardziej jednostki obrotów silnika nie dadzą się odczytać przez ludzką percepcję. Kiedyś zrobiłem obrotomierz (w prawdzie na TTL-ach ale dzialał) i była do jedna gonitwa...
Witam! Chciałbym poruszyć zagadnienie obsługi grafiki za pomocą mikrokontrolerów AVR, konkretnie ATmega8A lub ATmega16. Zamierzam zbudować układ złożony z dwóch kontrolerów połączonych na zasadzie master - slave. Kontroler "master" ma odpowiadać za przetwarzanie poleceń i generowanie odpowiednich przerwań, które z kolei obsługiwane są za pomocą drugiego...
Jeśli chcesz gotowego rozwiązania to napiszę jak sam robię takie systemy: Deklaruję pewną strukturę globalną, koniecznie volatile, w której umieszczam flagi w zależności od tego ile ich potrzebuję, np.: [syntax=c]volatile struct sZmienna { unsigned char Pomiar :1; unsigned char Timer :1; unsigned char Odswiez_LCD :1; //itd. }Zmienna;[/syntax] Następnie...
Witam Po przesiadce na C umęczyłem taki program, ale dalej coś nie teges? Przerwanie wykonuje się 128 razy ale tylko Y się zwiększa. Jeżeli te sprawdzenie IF od stanu 0 na pinB.3 jest złe to i tak przerwanie powinno się wykonać 256 razy. Bo mam na tym porcie 128 impulsów "0" a przerwanie powinno się wykonać na zboczu opadającym i narastającym. Co jeszcze...
Wykonanie OK natomiast jakiż to był powód, że nie dało się tego upchać w czymś mniejszym np. Attiny13 albo chociaż Attiny24 ? Zaprzęganie do tak prostego układu Atmegi16 to jak strzelanie z armaty do muchy. Do sterowania fazowego nie jest potrzebny tryb CTC. Z tym przerwaniem zewnętrznym to masz 100% racji :) - zdecydowanie ułatwiło by Ci program. Zastanawiam...
Witam! Napisałem programik którym liczę ilość cykli procesora pomiędzy dwoma punktami programu, na zasadzie obliczenia różnicy pomiędzy dwiema wartościami licznika Timera1A ustawionego z preskalerem 1. Niedawno potrzebowałem zmierzyć ile cykli potrzebuje uC od momentu wystąpienia przerwania, a rozpoczęciem jego obsługi i stworzyłem takie coś. #include...
Timer-1 16bit pracuje jako PWM dwa kanały OC1A i OC1B chyba że chcesz mono wtedy wystarczy jeden kanał . Timer 8bit musisz ustawić tak żeby generował przerwanie z taką częstotliwością jak próbkowanie dźwięku a w przerwaniu ładujesz próbki do PWM . Ok , tak zrobię . Wiesz ja już robię , to chciałbym to zrobić w miarę "fajnie" i , żeby to w miarę też...
Mam problem z TIMER2 - odmierzanie czasu , najlepiej 1s. Wartość b będzie zmieniała się - tylko co jaki odstep czasu. Może ktoś poratować? Albo ma może jakiś swój przykładowy programik na Timer2 z wywoływanym przerwaniem? Radzio // Testowanie timera 2 #define F_CPU 8000000UL #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h>...
Atmega jest taktowana zewnętrznym kwarcem 12MHz, żeby jeden tick timera trwał ~1us. 1. Czy timer 8-bitowy przyjmujący zewnętrzne impulsy, może je przyjmować w takich samych odstępach czasowych jak 16-bitowy? Tak. Te dłuższe timery mają po prostu większy rejestr w którym liczone są impulsy, poza tym działają tak samo. 2. Czy do przerwania, kiedy jest...
Witam wszystkich, Stworzyłem schemat do zapłonu motocyklowego z użyciem dwóch transoptorów, wyświetlaczem LCD na sterowniku HD44780 a także dwóch tranzystorów do sterowania cewką (BU931). Jako kwarcu użyłem 24Mhz. Pierwsza prośba to czy ktoś może mi sprawdzić czy schemat jest prawidłowy. http://obrazki.elektroda.net/64_12688419... Teraz mam...
Witam! Mam pewien problem, otóż napisałem funkcję obsługi przerwania od licznika T0 w atmega16 która wygląda następująco: SIGNAL (SIG_OVERFLOW0) { if(licznik==128) { s++; if(s==60) { s=0; m++; } if(m==60) { m=0; h++; } if(h==24) { h=0; } licznik=0; } licznik++; }...
Witam Nie rozumiem pytania, nie jestem biegły w programowaniu więc nie wszystko roumiem, ADSC ustawiam na 1 aby rozpocząć konwersje, po co mam czytać flage ADSC? Zauważyłem jeszcze jedną istotną rzecz, mianowicie jak podłączam zewnętrzne zasilanie, czyli nie zasilam układu z programatora to serwo gubi się szybciej. Program napisany na pwm również nie...
W AVR studio, w ustawieniach projektów mam zdefiniowany zegar 11059200 Problem jest tego typu że delay 1ms daje mi w praktyce 17ms, a przerwanie 162kHz zamiast wyliczonych 345,5. W fusach jest na pewno zewnętrzny zegar bo proc bez niego staje. --------- edit z przerwaniami już kapuje, ale czemu ta delajka tak działa? [syntax=c]#include <avr/io.h>...
Mam problem aby zmienić taktowanie timera z wew. generatora atmegi na zew. kwarc zegarkowy (timer 1). Po podłączeniu kwarcu do wejść TOSC1 i TOSC2, ustawiłem flagę CS12 i zmieniłem liczbę zliczanych cykli. Po tych zmianach nic się nie dzieje (nie są zliczane sekundy itd.). Co jeszcze trzeba zrobić? Szukałem, ale niby nic więcej nie trzeba było ustawiać...
zmieniłem kod programu: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "hd44780.h" #include "stdlib.h" char Buffer[20]; int TCNT0_WART=0; volatile unsigned long imp_curr=0; volatile unsigned long imp_prev=0; uint32_t displ=0; int main(void) { //TCCR0 |=(1<<CS00)|(1<<CS01)|(1<...
Witam. Mam problem z przetwornikiem A/C w ATmega16. Chciałem aby wyniki były wyświetlane tylko w momencie kiedy wartość w timerze 0 zrówna się z wartością w OCR0 - ale tylko co drugi raz. Dlatego też dałem switch(cykl). Wyjście OC1A jest podpięte do wejścia timera 0. Wiem że to dziwnie, ale jest to część większego programu i tak musi być. Pomiar napięcia...
Witam! Chcę wykonać zegar na ATmega8L lub 16L (takie mam u siebie). Raczej będe wybierał ATmege16L bo ma możliwość debuggowania przez jtag (który posiadam). Do atmegi chcę podłączyć DS1337, jako RTC. Będzie miał on podłączony kwarc 32kHz. Atmega będzie prawdopodobnie działać na kwarcu wewnętrznym 1Mhz. Chyba więcej nie będzie potrzeba do transmisji...
Witam. W dokumentacji od atmega168 jest tak: 0x0006 jmp PCINT0 PCINT handler to chyba jest wektor przerwania od PCIE0 więc wygląda na to że jest to obsługiwane w bascom w takiej właśnie postaci jak napisałem poprzednio.Dla atmega168 przyjmuje mi kompilator wszystkie 3 przewidziane czyli PCINT0,1,2, myślę że traktuje to jako właśnie te 3 możliwe porty...
Witam Programuję swojego Atmegę w AVR studio korzystając z AVR GCC. Mam program, znaleziony na elektrodzie (zamieszczony poniżej). Problem polega na tym za każdym razem kod RC5 z pilota jest odrzucany jako że transmisja jest rzekomo przerywana (zaznaczyłem to miejsce w programie). Gdy miejsce to zahaszuję, program wydaje się działać, tyle że kod RC5...
Witam, Jestem początkujący w dziedzinie programowania mikrokontrolerów AVR i pracuję obecnie na Amtegach 8A/16A i napotkałem następujący problem: Do atmegi 16A podłączyłem prosty mulitiplekser sterowany za pomocą 2 pinów PD4,PD5 wyjście tego multipleksera podłączyłem do PINU PD2 odpowiedzialnego za przerwania zewnętrzne (INT0). W procedurze obsługi...
PWM jak sama nazwa wskazuje, to modulacja szerokości impulsu, a nie jego częstotliwości. Kolega właśnie to robi. W tym fragmencie. for(i=0; i < 512; i++) { while(!(TIFR & (1<<OCF1A))); OCR1A = 1500; OCR1B = SPI(0xFF); } Do OCR1B wpisywane są bajty, które to sterują wypełnieniem przebiegu...
Szanowni koledzy czy ktoś z was może mi powiedzieć jaką mogę osiągnąć precyzję przy odmierzaniu czasu przy wykorzystaniu układu ATmega16 z zewnętrznym zegarem 8.000 MHZ(rezonator kwarcowy)? Morduje to już drugi dzień i nie mogę zrobić tego w sposób precyzyjny - na każde odmierzone 10 minut atmege spieszy o ok 20s - taka zwłoka jest dla mnie niedopuszczalna...
może dlatego Ci licznik nr.0 nie działa bo ustawiasz jego źródło na sygnał zewnętrzny taktowany zboczem narastającym :) (przeładowałeś za duzo CSn z rejestru TCCR0) a dokładniej tu się walnąłeś myląc rejestry: ldi R16, (1<<WGM01)|(1<<C... out TCCR2, R16 ldi R16, (1<<WGM21)|(1<<C...
Napisałem program realizujący funkcję przetwornika ADC na Atmega16: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> volatile uint16_t value; void ADC_init(void); int main (void) { ADC_init(); DDRD |=(1<<PD1); for (;;) { //value = ADC; if (value > 512) PORTD |= (1<<PD1); if (value < 512) PORTD &= ~(1<<PD1);...
Programowo nie chce za bardzo bo raz że trzeba wykorzystać opóźnienia Wcale nie trzeba (; Można próbkować stan przycisków przy użyciu timera (sprzętowego lub programowego). Dokładnie, i nie dość, że nie trzeba wykorzystywać nawet najmniejszego opóźnienia, to jeszcze nie trzeba tracić wejścia przerwania INTx, które może się przydać do ważniejszych rzeczy....
1. Z funkcji int klawiatura(void) usuń while( !(PINC&KEY_1) ); while( !(PINC&KEY_2) ); while( !(PINC&KEY_3) ); Poza tym if ( !(PINC&KEY_1) ) { klawisz = 1; while(!( PINC&KEY_1 )) _delay_ms(20); break; } dodaj opóźnienia w celu eliminacji drgań styków....
To jak zainicjoweać wejście INT0 dla atmegi 88? Tak samo.... Sposób konfiguracji interruptów zewnętrznych nie różni się, lecz ze względu na różnice w architekturze uControllerów, te same bity mogą byc umiejscowione w innych rejestrach. 1. Wejście z interruptem (Int0) w obydwóch uC jest PD.2 2. Enable global interrupts też bez różnicy - albo edytujesz...
http://obrazki.elektroda.net/91_12361267... Witam!!! Oto moja druga konstrukcja prezentowana w tym dziale. Dzisiaj jest to "Dartomat" - (połączenie słów "dart" i "automat" ;)). Jest to układ do zliczania punktów w grze w darta (dla wyjaśnienia cytat z wiki jakby kto nie wiedział co to dart: "Dart, lotki, rzutki (ang. Darts) – gra, a...
qurcze dalej nie czaje z tą flagą (punkt 2.b) ponieważ w programie jest mi niezbedna wiadomość kiedy wynik konwersji zostanie wppisany do rejestrów, muszę skożystać z bitu flagi ADIF piszą:'Bit ADIF - flaga przerwania ADC. Bit ten jest ustawiony na 1 kiedy ADC zakończy konwersję i zaktualizuje rejestr ostatnim wynikiem....Flaga jest kasowana sprzętowo...
Witam, od pewnego czasu borykam się z pewną trudnością, a mianowicie obsługą dwóch przerwań zewnętrznych, z czego jedno ma byc wykorzystywane podczas obsługi drugiego. Projekt to odcięcie zapłonu z zamkiem szyfrowym. Po krótce: W momencie załaczenia stacyjki na on, ma wyśwoietlać się komenda podania pinu itd, po wpisaniu na tranzystor sterujący przekaźnikiem...
przerwania zewnętrzne atmega16 przerwania bascom przerwania zewnętrzne
medion instrukcja obsługa tracer sterowniki myszki wyciek oleju pompy wspomagania
Wartość rezystora R6 w ładowarce Hitachi UC18XG Junkers WRP11 B23 - Gwałtowne Gaśnięcie Podczas Pracy