Bardzo dużo osób nie zwraca uwagi na to czy mikrokontroler ma na końcu oznaczenia literkę A , PA , PB . W większości przypadków programy działają na pierwszy rzut oka normalnie , różnice i poprawki bywają nawet w seriach układów bo producent poprawia jakieś . Ja sugerował bym w twoim przypadku skorzystać z nowszego układu ATMEGA 88 PA lub PB. Poza tym...
Ustawiłeś odpowiednio rejestr MCUCR?
[syntax=c] MCUCR = (1 << ISC11) | (1 << ISC10); //narastające zbocze MCUCR |= (1 << ISC01) | (1 << ISC00); //narastające zbocze0[/syntax]
wyłączanie zegara i konfigurowanie go w przerwaniu - to nie wygląda za dobrze...Szczególnie jeśli chodzi o rejestry MCUCR
Dotyczy ATMega328: Zainteresuj się rejestrami EICRA, EIFR, EIMSK, a bity ISCxx nie znajdują się już w MCUCR. PS Sprawdzenie tego, zajęło mi 5 minut :cry:
Oczywiście, że mają wyzwalanie zboczem. Opadającym, narastającym i dowolnym. Tylko nie pamiętam czy Bascom pozwala przez swoje funkcje skonfigurować wyzwalanie zboczem. Ale wystarczy odwołać się bezpośrednio do rejestru MCUCR.
Trybu uśpienia (atmega8, język C). [syntax=c]MCUCR |= (1<<SE) | (1<<SM0); asm("sleep");[/syntax]
Jak na razie testuję to na guziku, podłączonym do PD2 (INT0)... To może nie być miarodajne, ze względu na drgania styków, chyba że wprowadziłeś jakiś sprzętowy debouncing. Jeśli chodzi o kod, nie sprawdzałem, czy cała idea jest prawidłowa, ale zauważyłem: ... MCUCR=1<<ISC00; //przerwanie wyzwalane zboczem narastającym __|-- MCUCR=1<<ISC01;...
Kiedy zgłąszane jest przerwanie ( w tym wypadku polega na odcięciu INT0 od masy) Trzeba było zostawić jak wcześniej, że stan niski powoduje przerwanie (bo jak rozumie to teraz stan wysoki powoduje zgłoszenie przerwania). I chyba masz konfiguracje przerwania złą. nie powinno być: MCUCR &= ~_BV(ISC00); MCUCR &= ~_BV(ISC01); ISC01 ISC00 Description 0...
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()...
Witam, Zaczynam właśnie zabawę z procesorami atmega i mam problem z watchdog'iem na atmega8. Pod atmega328 działa to super ale tam jest troszkę inaczej (jest WDIE, którego w atmega8 nie ma) Skorzystałem z przykładowego kodu z tej strony #include <avr/wdt.h> #include <avr/sleep.h> #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr)...
MCUCR |= (1<<ISC11); MCUCR &= ~(1<<ISC11); Po szybkim review masz literówke w tym miejscu pewnie inaczej chcailes skonfigurowac przerwanie niz wlaczyc i od razu wylaczyc bit. Np tak: MCUCR |= (1<<ISC11); MCUCR &= ~(1<<ISC10);
Przyczyna leży zapewne w tym, że nie ustawiasz odpowiednich bitów w rejestrze MCUCR. Te bity to ICS00 i ISC01. Domyślnie są ustawione na wyzwalanie przerwania stanem niskim, więc procesor zlicza całą serię przerwań w czasie trwania stanu niskiego. Przestaw te bity na zbocze (tab 32 str 67 DS)
Witam. Takie małe pytanko odnośnie robienia układu który po przekręceniu kluczyka w stacyjce poda impuls zamiast ciągłego poziomu niskiego... Po co robić osobny układ? Generalnie to ATmegi mają taki układ wbudowany, wystarczy tylko wybrać opcję wyzwalania zboczem (do wyboru narastające i opadające) wpisując odpowiednią wartość do rejestru MCUCR. Pozdrawiam.
Ja bym raczej proponował pozbyć się lęku przed wpisywaniem wartości do rejestrów i napisać po prostu: MCUCR = 0b0101; lub, jak kto woli MCUCR = 1 << ISC10 | 1 << ISC00; Przynajmniej wiadomo, o co chodzi.
... ok odczytalem wartosc MCUCR tuz przed wydaniem instrukcji powerdown wynosi 10001010b Skoro Twoje MCUCR ma tak ustawione bity , to co sie dziwisz że nie działa :wink: Twoje ustawienia to: INT0-FALLING INT1-FALLING SLEEP MODE-IDLE SE=1 Powinno być: 101000xx INT0-xx INT1-LOW LEVEL czyli bity ISC10,ISC11 wyzerowane :!: SLEEP MODE- POWER-DOWN czyli...
Najpierw zacznij od podstaw języka C - poćwicz operatory bitowe: http://mikrokontrolery.blogspot.com/2011... Zacznij od poniższego kodu: [syntax=c]#include <dondu/dd_atmega8.h> //Wymagane do symulacji definicji i rejestrów ATmega8 int main(void){ MCUCR = 0xff; //symulujemy stan bitów - wszystkie ustawione MCUCR|=(1<<ISC01)&~(1<<I...
SIGNAL(SIG_INTERRUPT0) { ... GIFR = 0x40; //****************co to ?? ... GIFR|=_BV(INTF0); //***********co to ? ... MCUCR = 0x00; //INT0 reaguje na stan niski ********** przestaw na FALLING(opadające) Nie wiem czy main pokazałes w całości , ale ja bym w takim przypadku wogóle zrezygnował z przerwnia , a w pętli głównej...
Tylko w ustawieniach mikrokontrolera skoro z Power Save wychodzi poprawnie za pomocą INT. Ale z drugiej strony MCUCR masz ustawiony prawidłowo.
A gdzie ustawiasz: MCUCR = (1<<SRE); A poza tym, czy nie za duzo uwalniasz pinów z PC (PC5-PC7)? Ja też stosuję 62256, ale uwolniłem tylko PC7 (SFIOR=(1<<XMM0);) Pozdrawiam.
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...
Witaj. Na początek uporządkuj sprawy dot. trybu usypiania, ponieważ wykonujesz niepotrzebnie w pętli głównej część czynności w tym zakresie. Poza tym skoro już używasz nagłówka sleep.h, to używaj go w pełni, a nie osobno ustawiasz np. [syntax=c]MCUCR |=(1<<SE)|(1<<SM1);[/syntax] Zobacz przykład funkcji main tutaj: [syntax=c]int main(void)...
Błąd polegał na tym, że przy ISC10 zamiast przesuwania bitów było porównanie, ISC10=2 a więc relacja była spełniona i przyjmowała wartość 1. Co do wszystkich rad dotyczących kasowania i ustawiania bitów MCUCR i innych - mają one sens, ale dopiero po wstępnym wpisaniu tam jakiejś wartości. Mimo, że po resecie są tam wartości domyślne, najlepiej na samym...
na INT1 jest przycisk, podciągnięty do Vcc. Nie mogę dać wyzwalania zboczem, bo nota wyraźnie mówi, że można wybudzić jedynie stanem. Właśnie wygląda to tak, jakbo po wybudzeniu ciągle wywoływał przerwanie. Gdy usunę z maina cli();, w ogóle nie wykonuje się procedura w while'u. Podejrzewam, że zawisa w przerwaniu. Zablokowanie przerwań pozwala ją wykonać,...
Wszyscy z jakiegoś powodu skupili się na stałych/zmiennych, a nikt nie zwrócił uwagi na niżej przedstawione "rodzynki" :D //poczatek pomiaru x_high TCCR1B &= ~_BV(CS12); TCCR1B &= _BV(CS11); TCCR1B &= ~_BV(CS10); // Przestawienie przerwania na zbocze opadajace MCUCR = 0; MCUCR &= _BV(ISC01); MCUCR &= ~_BV(ISC00);...
próbuj podpiąć jakiś switch którym mogłbyś zwierać dwa styki linie INT0 podciągnąć w takim przypadku rezystorkiem, np 10k do Vcc od linii INT0 daj jakiś kondensatorek, tak jak pisałem - te 100nF, z drugiej strony kondensatorek podłącz do masy czyli tak : ;) http://obrazki.elektroda.net/35_11543446... Powyższy układzik przetestowałem na poniższym...
Może trzeba dać SEI przed uśpieniem procka? Przecież włącza SEI tyle że wszystko wg najgorszych praktyk programistycznch. SREG |= 0x80; --------------------------------- W nocie PDF ATtiny2313 wprawdzie napisano w uwadze, że tylko INT0 reaguje na wybudzanie poziomem, ale to słówko tylko (Only) tyczy się poziomu a nie samego przerwania. Powinno być...
MCUCR |= ~((1<<ISC01)|(1<... // Wyzwolenie przerwania niskim poziomem Ten kod nie robi tego co jest w komentarzu - zamiast |= powinno być &=.
Robisz: MCUCR = (1<<SE)|(1<<SM1&... asm("sleep"); a potem tylko reset go moze obudzic.
Witam Na 100% działa na Atmedze8: #define ENABLE_INTO_ANY MCUCR|=_BV(ISC10);MCUCR&=~_B... = (1<<INTF0);GICR=_BV(IN... Nie ma kodu obsługi wyświetlacza ponieważ oryginalnie nie ma jej w przerwaniu i nie oddziaływuje na resetowanie procesora. Pozdrawiam
Witam. Po paru próbach i czytaniu rozwiązałem problem: DDRD&=~(1<<PD2); PORTD|=(1<<PD2); //int0 GICR|=(1<<INT0); MCUCR&=~(1<<ISC01); //niski poziom wyzwala przerwanie MCUCR&=~(1<<ISC00); // --||-- sei(); zła kolejność ustawianych rejestrów. temat zamknięty. pozdrawiam[/code]
Mirku: MCUCR = (1<<SM1); /*ustaw przerwanie INT0 i INT1, zbocze narastajace*/ GICR = (1<<INT0) | (1<<INT1); W twojej książce znalazłem również zapis równy temu MCUCR |= (1<<SM1) czy jest on równoznaczny z MCUCR = (1<<SM1) czy używa się ich w zależności od czegoś ? :) PS. a nie powinno być tak ? [syntax=c] while(PIND &...
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;...
Ech... To mi pod dziadowski SPL podchodzi. Jakby tak nie można było: MCUCR |= (1<<SE)|(1<<SM1)|(1<<S... Przynajmniej wtedy zajrzałbyś do DSa i zobaczył że T2 wybudza z tego przerwania ale tylko w trybie zegarkowym.
Błąd prawdopodobnie jest tu: [syntax=c] MCUCR &= ~(1 << ISC00) | (1 << ISC01); //przerwanie zboczem opadającym[/syntax] Zerujesz bity ISC00 i ISC01 co daje opcję: The low level of INT0 generates an interrupt request, Jeśli chcesz wykrywać zbocze opadające to powinieneć użyć konfiguracji: ISC01: 1 ISC00: 0 (The falling edge of INT0 generates...
Uczę się, przepraszam za wcześniejszą formę... [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> //przerwania PD2 - INT0 volatile long int program=0; ISR (INT0_vect) { program++; } int main () { int i = 0; int k = 0; int m = 0; MCUCR = (MCUCR & (~(3<<ISC00))) | (1<<ISC00); GICR |=(1<<INT0);...
Zmieniasz wektory w rejestrze MCUCR, a odpowiednie bity są w rejestrze GICR. Więc table jest nie tam gdzie trzeba.
Podczas pisania artykułów wykonywałem pomiary poboru prądu przez mikrokonrolery ATmega8 oraz ATmega8A i zgodnie ze wskazaniami Atmela były one najniższe, gdy pin był ustawiony jako wejście z włączonym rezystorem pull-up . Podobne pomiary wykonywałem dla PICów z tym, że na poziomie 20nA, wszystko było zawsze zgodne z dokumentacją. BTW najgorsze co można...
Niestety sprawa rozbija się o składnie bascom'a ale dzieki A co , w Bascomie nie można zapisać danych bezpośrednio do rejestru :?: Po konfiguracji ADC i przerwań usypiamy proca w trybie ADC Noise Reduction Mcucr = Mcucr And &H0F ' na wszelki wypadek ;) zerujemy 4 najstarsze bity Mcucr = Mcucr Or &H90 'ustawiamy bit SE i SM0 sleep 'instrukcja assemblera...
witam Mam pewien problem ze skonfigurowaniem przerwania w Atmega8. Program ma wysyłać dane przez UART w zależności od stanu na końcówce PD2 ( INT0 ). Jeżeli ma stan niski to sprawdza jedną zmienną i w zależności od niej wysyła dane. Jeżeli ma stan wysoki to tak samo. Ale tylko jednorazowa zmiana powinna powodować wysłanie danych. Wymyśliłem, że obsłużę...
Witam to pięknie działa z tym odczytem portu, ale mam inny problem z tym związany, a mianowicie inicjuję przerwanie na INT0 zboczem narastającym: GIMSK=_BV(INT0); MCUCR=_BV(ISC01)|(ISC00)... Po wejściu w przerwanie chciałbym zobaczyć kiedy port zmieni się na zero bo po zboczu narastającym przez parę chwil (wystarczająco długo (przebieg...
Przeszukałem elektrode i dokumentacje ale chyba dalej źle coś robie :/ Próbuję obsłużyć przerwanie na opadającym zoboczu zwewnętrznego przerwania INT0 (PD2): int main (void) { DDRD = 0xFA; // 1111 1010 PORTD= 0x05; // 0000 0101 MCUCR=0x02; MCUCSR=0x00; GIFR=0x40; GICR|=0x40; sei(); while (1) {...} return 0; }...
Znalazłem trochę więcej czasu, żeby przyjrzeć się problemowi i zauważyłem: ... MCUCR|=(1<<ISC01) | (1<<ISC00); //zbocze opadające na INT0 MCUCR|=(1<<ISC11) | (1<<ISC10); //zbocze opadające na INT1 ... No to akurat jest ustawienie dla zbocza narastającego, czyli przerwanie następuje po puszczeniu...
Mcucr = Mcucr Or 2 W helpie wyczytałem że procesory serii Mega mają przerwanie INT0 tylko na niski poziom i wykonują się w kółko jak poziom jest niski. Z drugiej strony ATmega8 Bascom tolerował, ATmega32 już nie. Dokumentacja mnie wprowadziła w błąd. Omawiając przerwania jest odesłanie do strony z opcjami uśpienia, a powinno być dużo dalej do zegara...
Jest parę błędów które widzę już teraz. Pozwoliłem sobie wstawić to w syntax bo nie dało się czytać :) unsigned char ilosc_imp=0; powinno zostać opatrzone jeszcze etykietką volatile. Czyli: [syntax=c] volatile unsigned char ilosc_imp=0; [/syntax] Volatile wyłącza dla tej konkretne zmiennej optymalizację. Jest to konieczne jeżeli korzystasz ze zmiennej...
Witam pisałem program który miał po pewnym czasie zmuszać mikrokontroler do przejścia w stan uśpienia po czym wybudzanie miało następować w reakcji na zewnętrzne przerwanie na linii PD2. Mikrokontroler wchodzi w uśpienie po zadanym czasie jednak nie chce się potem wybudzić w reakcji na zewnętrzne przerwanie. Byłbym wdzięczny gdyby ktoś rzucił okiem...
To chyba nie jest warunek konieczny. Faktycznie w funkcji sleep_mode() jest zawarty sleep_cpu() a konkretnie: sleep_cpu() który odpowiada wykonaniu rozkazu SLEEP assemblera. Robię tak ponieważ chcę być pewny co faktycznie wykonuję. Jak widać na tym przypadku korzystając z pozostałych funkcji z biblioteki zrobiłbym 2x sleep_cpu() :)
Witam Poniższy program mierzy długość trwania impulsu / stanu niskiego podanego na INT1. Pomiar jest wyzwalany przerwaniem, zboczem opadającym, następnie następuje włączenie timera i przestawienie przerwania na zbocze narastające. Gdy ono nastąpi jest wyzwalane kolejne przerwanie, które zeruje zatrzymuje timer. Odczyt timera (rejestr TCNT1) następuje...
Otóż napisałem taki programik, (...) Nie te rejestry.. Zdecydowanie nie te! :) Poczytaj datasheet procka (hint: EIMSK, EICRx) Bardzo dziwny zapis :) Co do SIGNAL, to jest deprecated, więc zostanie wycofane w przyszłych wydaniach..
Witam. Dopiero zaczynam naukę z AVR i ogólnie z programowaniem. Korzystam z książki P. Borkowski 'AVR & ARM7 Programowanie uC dla każdego' i zatrzymała mnie pewna sprawa dotycząca uśpienia wywoływanego przyciskiem. Program wygląda mniej więcej tak: -dwie diody migają naprzemiennie -po naciśnięciu przycisku na PD0 ukłąd wchodzi w stan uśpienia -po...
Dopiero co kupiłem Atmega8-16PU. Chciałem napisać najprostszy program z obsługą przerwania na przycisk, na początek. Naciśnij->włacz LED. Naciśnij-> zgaś LED. Ale... dioda miga z częstotliwością ~1Hz już od startu programu. Naciśnięcie przycisku powoduje chwilowe zgaśnięcie lub zapalenie diody. ... ? Coś z fusebitami? http://obrazki.elektroda.pl/2254514000_1...
Witam. Chce uruchomić dekoder kodu Sirc(sony) na atmega8. Korzystam z tego rozwiązania [url=http://www.dragarti.cba.pl/artykuly... mam podłaczony TSOP1736 do wejścia INT0, zmianie pinów w kodzie na INT0 dla atmegi8 i odpisaniu F_CPU na 8mhz, za żadne skarby nie chce mi to się uruchomić, czy ktoś jest w stanie mi pomoc? Zaznaczam że jestem...
Piszę ponownie, ponieważ jako, że z układem nie mam już problemu mam problem z napisaniem programu. W swoim rozwiązaniu chciałbym użyć dwóch przerwań od TIMER0 oraz zewnętrzne INT0. Teraz tu moje pytanie czy te dwa przerwania zaimplementowane w ten sposób jak poniżej, nie wpłyną na niedokładność pomiaru i czy jest może na to lepszy sposób. Mój kod:...
Patrzylem na swoj program pilota uniwersalnego w którym stosuje power down i tam oprocz ustawienia wybudzania ma jeszcze ustawione aktywne przerwanie zewnetrzne i oczywiscie napisaną obsluge przerwania. Dodano po 2 moze zamiast zerowac pojedynczy bit w MCUCR wpisz cała wartosc do tego rejestru, gdyz nie widze gdzie ustawiasz ISC11, a jezeli zakladasz...
Witam Otóż mam taki dylemat ... Mam taki prosty programik robiący mi za licznik modulo 8. Samo liczenie odbywa się w przerwaniu timer'a ale to nie jest kwestia którą chce poruszyć. Po wywołaniu zewnętrznego przerwania, nie da się go przez czas paru/parunastu sekund wywołać. Czego to może być wina ? (pomijając że moja). Czy przypadkiem nie powinno to...
Witajcie. Robię bliźniaczy do wykonanego przeze mnie na '51 projekt układu do pomiaru częstotliwości na AVR w C. Przyjęta przeze mnie logika to: ATMEGA8 - kwarc 10 MHz 1. podawanie sygnału badanego na wejście INT1 2. Timer1 jako licznik z preskalerem CK/1024 2. INT1 wyzwalane zboczem opadajacym 3. Gdy przyodzi przerwanie to nastepuje sprawdzenie czy...
Jeśli to możliwe (mogłem przekombinować), żeby drugi kanał mierzyć w ten sam sposób, jak ten od ICP, tylko na innym pinie, to mógłbym prosić, aby ktoś przerobił mój kod na tę drugą wersję? Strasznie się gubię w tych rejestrach. [syntax=c]//licznik przepelnienia volatile uint16_t ov_counter; //zbocza rosnace, opadajace volatile uint16_t rising, falling;...
Niestety kod po waszych uwagach nadal nie działa:( Podłączenie GND do minusa odbiornika nie wpływa na działanie układu, podłączone nie było, ale po podłączeniu nic się nie ruszyło:( janbernat: zastosowałem się chyba do wszystkich uwag(chociaż nie rozumiem co one mają poprawić) i nadal nic... krru: fakt, mój błąd, ale po poprawieniu nadal nie działa:(...
Witam. Mam uP Atmega8 w ktorym wykorzystuje przetwornik ADC. Na stronie 32 PDF'a jest opisany tryb redukcji zaklocen dla przetwornika ADC. Niestety mam problem zeby to uruchomic (zaimplementowac w AVR-GCC). Moze ktos mi powie co robie nie tak... inicjalizacja: (tylko redukcja zakłóceń - przetwornik jest ustawiony i dziala w trybie pojedynczej konwersji)...
Witam, mam problem z zewnętrznym przerwaniem, mianowicie testując je na symulatorze z avrstudio okazuje się że pierwsze przerwanie powoduje że funkcja obsługująca je dwa razy się wywołuje a następnie powrót następuje pod adres 0x0, a nie do miejsca w którym wystąpiło przerwanie. Poniżej zamieszczam kod. Proszę o pomoc. .nolist .include "m8def.inc"...
Pierwszą nieścisłość jaką zauważyłem , to niezgodna z komentarzami w kodzie , konfiguracja zboczy na jakie ma reagować INT0. ldi ACC,0x02 ;zbocze narastające na INT0 będzie out MCUCR,ACC ;generowac przerwanie Powyższe , ustawia reakcję INT0 , na zbocze opadające (Falling). Co to za tajemnicze urządzenie RC - odbiornik podczerwieni :?: Po czym poznajesz...
Witam Niestety nadajnikiem będzie układ z attiny13 (ma 8 nóżek), będzie to pilot, więc nie zmieszczę układu MC..., odbiornik będzie z atmegą 8 więc wymiary nie grają roli. Z pilota nadaję sygnał jak w RC5,a atmega8 (110592000) odbiera to, mój kod programu to: #define ENABLE_INTO_FALLING MCUCR|=_BV(ISC01);MCUCR&=~_B... =...
Dzialajacy kod na atmege32/16 wysyla po uarcie ilosc wcisniesc #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile uint8_t semaphore=0; volatile uint16_t count=0; ISR(INT0_vect) { count++; semaphore=1; } void uart_putchar(unsigned char c) { loop_until_bit_is_set(UCSRA,UDRE)...
1. nie definiuj F_CPU w kodzie!!!!!!!!!! 2. nie stosuj zapisów typu: PORTC = 0x0c; - zamiast tego użyj etykiet oraz operacji bitowych - tak jak w zapisie do MCUCR np. 3. mruganie zdecydowanie na przerwanie timera - masz nawet LED_timer ;) 4. aktualizacja zawartości wyświetlacza - wywołanie funkcji LED_dec(liczba,0); - powinno odbywać się tylko po odczytaniu...
Uśrednienie wyników odpada. Program wątpie, że źle napisany. Korzystam z CodeVisionAVR i CodeWizard wywalił mi coś takiego: #include <mega8.h> unsigned int adc_data; #define ADC_VREF_TYPE 0x00 // ADC interrupt service routine interrupt [ADC_INT] void adc_isr(void) { // Read the AD conversion result adc_data=ADCW; } //...
Niestety dalej nic. Dorzuce na wszelki wypadek kod na którym nie działa, może coś ustawiłem niepotrzebnie? #include <mega8.h> int c,d,dt = 0; void main(void) { PORTB=0x00; DDRB=0xFF; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0x00; TCCR0=0x00; TCNT0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00;...
witam, Korzystam z AVRStudio i WinAVR. Problem jest następujący: //#include "CC1000.h" #include "RS232.h" #include <avr/io.h> #include <avr/interrupt.h> volatile char DATACNT; SIGNAL(SIG_INTERRUPT1) { cli(); ++DATACNT; sei(); } int main(void) { sei(); // turn on interrupts...
Przerobiłem wszystko tak jak napisałeś , i teraz nic nawet nie rusza , wydaje mi się , że przerwania nie działają. [syntax=c] #include <avr/io.h> #include <stdio.h> #include <stdlib.h> #include <avr/interrupt.h> #include <util/delay.h> ////////////////////////////////////////...
Aby skorzystać z redukcji szumów musisz włączyć ADC w trybie pojedynczej konwersji i przypisać 001 do bitów SM2..0 w rejestrze MCUCR. Nastąpi wtedy przejście procesora w tryb uśpienia po czym ADC automatycznie rozpocznie konwersję. Po skończonej konwersji zostanie wywołane przerwanie od ADC (musisz mieć je włączone) i powrót procesora z trybu uśpienia....
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...
Mam obsługę przerwania na INT0 dla dowolnej zmiany stanów logicznych a więc zmiany LOW->HIGH i HIGH->LOW i jak rozumiem takie przerwanie obsługuję się w 'funkcji' ISR (INT0_vect). Moje pytanie czy w tej właśnie funkcji do obsługi przerwania jestem w stanie odróżnić jak przerwanie nastąpiło a mianowicie czy było to LOW->HIGH czy HIGH->LOW...
Tak jest ok? [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int main() { DDRD = (1<<PD3)|(1<<PD1)|(1<<... PORTD = (1<<PD2); PORTB = (1<<PB0); MCUCR |= (1<<ISC01) | (0<<ISC00); GICR |= (1<<INT0); sei(); while(1) { } } ISR(INT0_vect) { if(PINB & 1)...
Czyli sterowanie z obsługą przerwań będzie wyglądać tak? //Testowanie silnika krokowego z przerwaniami #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // biblioteka przerwań #include <utils/delay.h> // obsługa opóźnień SIGNAL (SIG_INTERRUPT0) // przerwanie INT0 { PORTD = 0x08; //Włącz PD.4 _delay_ms(10);...
Witam, Napisalem program na atmega8 do regulatora dwukierunkowego, którego schemat można znaleść tutaj. [url=http://www.modelhobby.republika.pl/... Licznik pracuje z zegarem 8Mhz i prescalerem 64. Czyli licznik powinien zapelnić sie minimalnie po 2ms. Sygnał z odbiornika trwa od 1ms do 2ms. Najpierw zliczam czas impuslu. W zależności...
A jakie piny mozna ustawic w tryb reakcji na zbocze? piny oznaczone jako INT0,1 Jak? outp((1<<INT0), GIMSK); outp( (1<<ISC01)|(1<<I... | (1<<ISC10)|(1<<I... MCUCR); ... sei(); o ile pamiętam - ustawia wywołanie przerwania zarówno przy opadającym, jak...
Witam, Mam drobny problem z podczerwienią. Skorzystałem z kodu z strony http://hobby.abxyz.bplaced.net/index.php... Kodzik bardzo fajnie działa, odebrany sygnał wyświetlony na 6 diodach pokrywa się z kodami dla każdego przycisku w systemie RC5. Mój problem polega na tym, że nie potrafię przekazać odebranego kodu do głownej pętli aby konkretnemu...
Any logical change on INT0 generates an interrupt request. więc nie ma większego znaczenia, czy zwiera włączony pull-up do masy, czy odwrotnie. Sądzę, że przy takim ustawieniu najprostszym rozwiązaniem jest przycisk zwierający do masy i włączony pull-up programowy. Swoją drogą włączasz oba przerwania INT0 i INT1 - więc ponowię prośbę : pokaż aktualny...
Witam! Mam taki problem. Poskładałem sobie pilot i odbiornik IR. Oba na ATmega8. Diody IR i odbiornik TSOP1136 (podpięty na INT0) są do siebie dopasowane. Problem mam przy odczytywaniu wartości z odbiornika. Co robię: •ustawiam przerwanie na zboczu opadającym: MCUCR = (1<<ISC01); // zbocze opadające GICR |= (1<<INT0);...
Winna byłą funkcjia zamieniająca bcd na dec. PCF rozpracowany. Lecz jest i następny problem. Kombinuję już we wszystkie strony i brakuje mi pomysłów. Próbuję wprowadzić atmegę w tryb power-down. Procek się usypia, po wybudzeniu (przerwanie stanem niskim) wykonuje raz pętlę while(1), a następnie łapie zwiechę... [syntax=c] ISR(INT1_vect){ } int main(void)...
Ok dzięki te operacje na bitach (a w zasadzie bajtach) już rozumiem. Ta linia do masy układu rzeczywiście nie jest konieczna. 1. Co do wiatraczka to rzeczywiście pomyliłem kierunek strzałki. Czy tranzystor BD139 byłby ok? Może macie lepszy pomysł. Nad wygładzeniem zasilania dla wiatraczka też się zastanawiałem ale w tym układzie chyba nieda się tego...
Jak w temacie. Napisałem następujący programik: #include <avr/io.h> #include <avr/pgmspace.h> #include <stdlib.h> #include <avr/signal.h> #include <avr/interrupt.h> #define ENABLE_INT1_FALLING cbi(MCUCR,ISC10);sbi(MCUCR,ISC11);outp((... void waitus(unsigned char czas){ TCCR0=0x02; TCNT0=255-czas; while((inp(TIFR)&0x01)!=0x01);...
Nie za bardzo mogę ogarnąć przetwornik A/C w ATmega8. Zrobiłem układ jak na schemacie. Chciałem żeby dioda zapalała się powyżej 1V napięcia na potencjometrze, a do 1V była zgaszona. Napięciem odniesienia dla mnie miało być AVCC.Korzystam z 8 bitów ADCL. Konwersja wyzwalana int0. Program wygląda nastepująco: Załanczam standartowe biblioteki dla avr (przerwania,...
Witam Chciałem zrobić cyfrowe sterowanie głośnością w oparciu o układ DS1806. Nie mogę go rozgryźć. Sterowanie wprowadzaniem danych podpiąłem do portów ATmegi8 poprzez rezystory 20k w kolejności : Din=PC2, CLK=PC3, RST=PC4. Po włączeniu zasilania DS1806 ma same zera rejestrach a ja chciałbym (w ramach dobrego początku) wpisać same jedynki w przerwaniu...
Zrobiłem w.g Twoich zaleceń, ale mimo zmiany zmiennej "counter". Sciemniać żarówki mi sie nie udaje [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h> #define C1 1 unsigned int counter=25000; int main(void) { DDRC = (1 << C1); MCUCR |=_BV(ISC01); GICR |= 1 << INT0;...
Snow, napisałem, że próbowałem też z przerwaniem zewnętrznym - dokładniej zostawiłem wewn. komparator w spokoju i wyjście z bramki AND ze schematu podłączyłem pod INT0. W kodzie wyglądało to tak: ISR(INT0_vect) { liczba++; } ISR(TIMER1_COMPA_vect) { // tak samo jak poprzednio } int main() { DDRD &= ~_BV(2);...
Witm męczę się od dwóch dni z przerwaniem zewnętrznym Atmega8. Programowania dopiero się uczę chciałem wypróbować jak najbardziej łopatologicznie się da, jak działają takowe przerwania. Program działa tak ze cały czas miga na przemian raz jedna raz druga dioda lecz gdy na 4 pinie pojawi sie stan niski zacznie działać przerwanie i na 10s zapali się 3...
Hej, bawilem sie timerem w CTC i ustawilem preskalar na 64, procek jedzie na 1MHz wew. zegarze. Fusebity ma ustawione na l:E1 h: D9. Mimo ustawien procek rozjezdza sie z zegarkiem 10s na kaze ~30m :/ Czy cos zle ustawilem ? [syntax=c] #ifndef F_CPU #define F_CPU 1000000 // 1 MHz #endif #include <avr/io.h> #include <avr/interrupt.h> #include...
Witam! W ramach napisania programu do obsługi klawiatury na złączu PS/2 chciałem zapoznać się obsługą uart w przerwaniu wyzwalanym zewnętrznym sygnałem. Sam uart działał, poprawnie wysyłał znaki, same przerwania zewnętrzne także działały, natomiast próba wysłania pojedyńczego znaku w przerwaniu kończy się niepowodzeniem tzn. terminal nie odbiera żadnego...
Moja duża wina i niedopatrzenie. Rzeczywiście oprócz GIMSK miałem również Makefile ustawionego na ATmega8. Poniżej wklejam prosty działający kod na obsługę przerwań w Atmega16. #include <avr/io.h> #include <avr/interrupt.h> ISR(INT0_vect){ PORTA = 0xFF; } ISR(INT1_vect){ PORTA = 0x00; } void init(void){...
Witam Od początku dzisiejszego dnia "męczę" się z ultradźwiękowym miernikiem odległości HC-SR04. Poszperałem w internecie napisałem program itp. Nawet działa, ale tylko do określonej odległości (ok. 30cm). Połączenia raczej mam dobre, próbowałem odmierzać impulsy z wykorzystaniem wejścia ICP1 (PB0 i wtedy diody wskazujące odległość bardzo słabo świeciły),...
Próbuje zrobić odbiornik kodu podczerwieni X sat. Opis tego standardu jest na stronie http://www.sbprojects.com/knowledge/ir/x... Napisałem program w avr-gcc, ale gdzieś jest błąd bo do portu cały czas podstawia tą samą wartość. Program testowałem w VMLAB-ie i wszystko symulowało ok. Dla sprawdzenia dałem zmiane stanu jednego wyprowadzenia na przeciwny...
Witam ponownie, znalazłem wcześniej na elektrodzie program zegarka na LCD 2x16, który niestety nie działał prawidłowo (migały niezrozumiałe znaki na lcd). W celach edukacyjnych postanowiłem przerobić procedury obsługi wyświetlacza, co dało efekt końcowy jaki teraz mam czyli działający program zegara na LCD, ale jest jeden problem. Zegar odmierza 1 sek...
Na chwilę małymi krokami wziąłem się za pisanie programu, podłączając wyjście TSOP do pinu PD2 jako przerwanie zewnętrzne o zboczu opadającym i na samym początku mam problem. Mam PORTB podłączony pod 8 ledów i dlaczego tak napisany program [syntax=c]#define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/wdt.h>...
1. atom1477 czy chodzi o takie coś jak w tym poście: http://www.elektroda.pl/rtvforum/viewtop... #include <avr/io.h> #include <avr/interrupt.h> unsigned char przelacznik=0; SIGNAL(SIG_INTERRUPT0) { unsigned int action=0; for(action=0;action<40;action++... { if(bit_is_set(PIND,PD2))...
O takiej funkcji zapomniałem :D. Dzięki. Może jeszcze będę pytał jak będą problemy :P. Edit: Czy ten kod jest poprawny? Zakładając, że podłączam wspólne anody/katody do pinu 0 i 1, diodę do 4 pinu (portu D), a poszczególne segmenty do całego portu C... // Licznik amunicji // Konfiguracja #include <avr/io.h> #include <avr/interrupt.h> #include...
Witam, Przyznam, że powoli wymiękam, dlatego postanowiłem tutaj poszukać pomocy. Prosta sprawa: do PD2 (INT0) podpięty przycisk ściągający do masy. Przerwania uruchomione, działają, aktywują się na zmianę poziomu, jednak w kodzie poniżej wykonanie nigdy nie wpada w warunek if. [syntax=c]ISR (INT0_vect) { if(PORTD & PORTD2) zgas_diodke1(); else zapal_diodke1();...
BoskiDialer, zastąpiłem oczekiwanie na flagę od timera 0 { while ( timer_flag == 0); timer_flag = 0; } na: { while (TOV0==1); TIFR |= 1<<TOV0; TCNT0 = TIMER_0_RECEIVE; } w mainie włączenie przerwania od INT0: GICR |= 1<<INT0; MCUCR |= 1<<ISC01; sei(); TIMSK |= _BV(TOIE0); oraz przerwania...
Witam serdecznie. Próbuję zrobić dzielnik częstotliwość na amtega8. Taktowanie 1 MHz. Narazie tak dla treningu robię sobie podział na 2. Sygnał podaję na INT0. I nawet mi to fajnie dzieli....ale jak częstotliwość dam powyżej 18kHz. To już nie dzieli..tzn dzieli ale częstotliwośc na wyjściu ustala się w granicach 9kHz i dalej nie idzie. Np. na wejścio...
Witam. Próbuję nauczyć się korzystać z przerwań. Napotkałem taki oto problem. W moim programie mam funkcję która wczytuje określoną ilość bajtów z USART by wydać odpowiedni rozkaz. Kiedy funkcja ta "trwa" czyli czeka aż wpiszę te bajty do terminala to przerwania nie działają albo mikrokontroler nie odbiera w ogóle tych bajtów. Ktoś wie jak to zrobić?...
Witam, Zrobiłem na Atmega8 regulator oświetlenia. W zasadzie wszystko działa, tylko irytuje mnie występująca niewielka fluktuacja natężenia światła. Nic nie mruga, ale jak się uważnie przyjrzeć, to natężenie światła lekko faluje. Na każdym etapie regulacji. AVR taktowany zewnętrznym kwarcem 8MHz. Zmienna light, zmieniana w głównej części programu. Nie...
bascom mcucr fusebits atmega8 atmega8 nestor
oznaczenie zmywarka siemens toshiba wyłączać wąskie gardła
gs500 instalacja samsung wf70f5e0w2w
Kalibracja miernika LCR-100 Voltcraft: krok po kroku TELPOD PR-195.666 100 kΩ 25 W - Rezystor drutowy