Przed petla while wlacz przerwania sei();
Istnieje jeszcze jedna możliwość. Jakiego używasz AVR-GCC? Możesz mieć jakąś starszą wersję z błędem, który właśnie objawia się poprzez niepoprawne działanie przerwań COMPARE. Wystarczyłby jeden błąd w adresie wektora TIMER0_COMP_vect i "po zawodach". ps. Nie rzekomo działającego, tylko działającego. Niestety nie mogę ci strumieniowo przesłać video...
Trochę skąpych informacji udzielasz;) Nie działa to znaczy? Jeśli wszystko stoi to podepnij diodę na port i migaj nią ale za pomocą przerwań, wtedy się przekonamy co tak na prawdę nie działa.
Przy 8MHz i tych ustawieniach Timera 2 częstotliwość PWM powinna być 156Hz jeżeli nic nie przeoczyłem. Czasy opóźnień są trochę naciągane (znaczy, krótkie), ale nie powinno to migać chaotycznie. Chyba, że przerwania się nie wyrabiają. Jaki masz poziom optymalizacji w kompilatorze?
Skoro co piąte przerwanie każesz mikrokontrolerowi nie zmieniać stanu portu, to brak migania diody jest jak najbardziej normalny.
Ale jeśli mniejsze, to już po 1 takcie zliczania powinno wyskoczyć z przerwania a tak nie jest. Taktowanie timera to 16MHz/1024 = 15625Hz. Pojemność timera to 256, więc przerwanie pojawia się z częstotliwością 15625/256 = ~61Hz. Aby uzyskać opóźnienie ok. 1 sekundy przerwanie musi pojawić się 61 razy i dopiero za 62 zapalić lub zgasić diodę. I tak...
Ale mieszasz. Ustawiłeś dwa cykliczne przerwania i dziwisz się, że coś nierówno miga. Tu w avr nie ma wielowątkowości sprzętowej i jedno przerwanie przeszkadza drugiemu. Przenieś i wyłącz to przerwanie to co masz w ISR(TIMER2...) do ISR(TIMER1...) . Idea programowego PWM i timerów jest właśnie w tym aby działało wszystko pod jednym wspólnym cyklicznym...
Dziękuje za pomoc, fakt kod wymaga dużej poprawy. A czy do takiego menu jednopoziomowego, że wybór opcji zależy od ilości wciśnięć przyciska muszę skorzystać z przerwań, czy jest jakaś inna opcja?
Mirekk36 a jaką dać częstotliwość taktowania bo dla twojej funkcji mi dioda miga co około 72s Najpierw sprawdź czy jak dasz _delay_ms(1000) to czy miga ci co sekundę - jeśli nie to napisz/powiedz/sprawdź czy masz dobrze przede wszystkim Fusebity ustawione ? Na pewno sama funkcja i while nie robi takiego narzutu żeby zamiast 60s było 72s ;) - jak już...
Wartość dla 1 sekundy: OCR1A=((częstotliwość procesora)/preskaler)-1 Wartość dla 4 sekund OCR1A=((częstotliwość procesora)/preskaler)-4 Jedynka w podanym przeze mnie wzorze nie oznacza 1 sekundy. Jeden trzeba odjąć z innych względów. Po prostu licznik nie zaczyna liczyć od 1 tylko od 0, więc odliczanie np. do 5 oznacza (0 1 2 3 4 5), czyli 6 impulsów....
Preskaler zależy od tego czym taktujesz mikrokontroler.Podaj jak masz ustawione fusebity.Przerwania z reguły maja sie jak najszybciej wykonywać dlatego w przerwaniu ustaw jakąś flagę a w pętli sprawdzaj ja i migaj diodami.
Witam. Tani uC Atmela: ATmega8 - koszt ok. 6zł Są też układy serii ATtiny za ok. 5zł, ale lepiej już zainwestować w mega8. Posiada więcej pamięci i układów typu timery, przerwania, przetwornik, itd. Można też kupić za ok. 10zł ATmega32 - ten procek już w zupełności wystarczy do większości amatorskich projektów. Tym bardziej dla początkujących. Schemat...
[syntax=c] #define Button (1<<PB0) #define Button_PORT PORTB #define Button_PIN PINB #define Button_DDR DDRB volatile _Bool Key_Pressed = 0; // flaga wciśniętego przycisku [/syntax] [syntax=c] Button_DDR &= ~(Button); //port - wejście Button_PORT |= (Button); //włącz pull up [/syntax] [syntax=c] ISR(TIMER0_OVF_vect)//przerwanie wywoływane...
Gwarantuje ci że działa tyle tylko że timer przepełnia ci sie po około 0,1ms policz sobie jaka to częstotliwość. Nie ma najmniejszych szans żebyś gołym okiem zauważył jak miga dioda na PD0.
Tak więc przerobiłem kod tak jak mówiliście i wygląda teraz tak: [syntax=c] #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> struct keyboard { int lastKey; int isPressingNow; int numberOfKey; } k; volatile int interrupt; void init() { DDRA = 0xFF; // set Port A as output DDRB = 0xF0; //...
Witam! Mam następujący problem: Kiedy włączam obsługę przerwania z portu szeregowego, procesor strasznie zwalnia, nie wyrabiam się w czasie z programem... Program jest w Bascomie, kontroler to Atmega32. Wszystko zwalnia tragicznie, nawet jeśli w podprogramie przerwania napiszę od razu powrót: Serial_int: Return Sprawdziłem też: Serial_int: Toggle PORTB.3...
Akurat to ja tworze ten bootloader jako osobny projekt w AVR Studio (wersja pisana w C). Na razie mam tak zrobione, że funkcja main jest przesunięta w obszar bootloadera wraz z przerwaniami za pomocą opcji -Wl,-Ttext,adres. Do funkcji main wrzucone jest proste miganie diody, żebym wiedział, że coś tam wykonuje Atmega. No i w tym problem, że nic się...
witam, próbuję skomunikować 2 procesory: 1) wystawia na złączke 1 i 0 z określonymi przeze mnie przerwami np. 1s 2)próbuję atmegą 32 odczytać przez przerwanie wysłany stan i zapalić diodę Niestety z marnym skutkiem. Program pisany w Bascomie. Poniżej jego treść: //konfiguracja portu D z którego maja byc sczytane wartości Portd = 255 Lcd_io_ind Alias...
DDRA=0xff; //port A jest portem wejściowym wg. mnie wyjściowym. volatile unsigned char i; // flaga określająca poprzedni stan diody nie korzystasz z przerwań więc po co volatile? Po za tym po co sprawdzasz poprzedni stan diody skoro stosujesz negacje? Wydaje mi się że tego typu warunek w zupełności wystarczy: if (bit_is_clear(PINB, 2))...
Chodzi o to ze jak obsługuje 7 ledów to wszystko jest ok, na każdej mogę ustawić sobie jasność, a jeżeli włączę obsługę 8 diody to wszystkie zaczynają migać zależnie od podanych wartości (powiedzmy tak ze co 400-500ms następuje zaświecenie i odpowiednio zgaśniecie) No i to samo się dzieje jezeli nie wpisze tego LED_PORT |=(1<<7); w przerwaniu...
może to wina bascoma.. nieee no kolego (sorki) ale puknij się w głowę, zrób "mea culpa" i przestań szukać winy za swoje błędy wszędzie tylko nie w swoich poczynaniach. Czyżbyś był "kolejnym" pierwszym człowiekem na świecie, który doszukał się tak poważnago błędu w Bascomie??? sorry ale to jest śmieszne (przepraszam za te ostre słowa ale gdybyś zadał...
Witam, chciałbym za pomocą timera0 pracującego w trybie CTC wywoływać przerwania z określoną częstotliwością by np migać diodą. Czy poniższe ustawienie timera jest poprawne i czego jeszcze brakuje? Jak za pomocą preskalera być w stanie ustawiać częstotliwości między 1Hz-50kHz? [syntax=c] #include<avr/io.h> #include<avr/interrupt.h> void...
Makra usunięte w inicie wpisałem UBRRL=25, bo kompilator nie widział rejestru UBRR. żadnych zmian. Próbowałem również użyć zewnętrzny kwarc 7,3728 MHz żeby uzyskać 0% błędu w usart przy ubrr = 23, ale dalej to samo 30 znaków/sekundę. Doszedłem do tego że praktycznie całe opóźnienie powodowane jest przez linijkę: while ((UCSRA & (1 << UDRE))...
Witam Jestem tu nowy więc proszę o wyrozumiałość. Od pewnego czasu próbuję zdekodować pilot(y) IR. O ile dużo jest wątków poświęconych dekodowaniu RC5 i innych to jednak nigdzie nie mogę się doszukać jak sprawdzić czas impulsu. Wykorzystuję timer i przerwanie zboczem narastającym ICR1 . W przerwaniu zmieniam na zbocze opadające a następnie dokonuję...
Witam! Od jakiegoś czasu bawię się AVR Studio 4 po przesiadce z BASCOMA. Jak narazie jest nieźle ;) ale mam mały problem. Mianowicie, chciałbym sobie przy pomocy ADC próbkować sygnał z częstotliwością X (dajmy na to 8kHz) i zapisać go do tablicy. O ile w BASCOMIE napisałem sobie taki programik (przerwanie Timer2 8kHz, w przerwaniu odczyt ADC do tablicy...
Witam. Otóż mam taki problem z przerwaniem od przepełnienia. Mianowicie w tym przerwaniu wykonywana jest tylko druga instrukcja "if". Do portów mam podłączone diody, dioda od portu portd_5 tylko nie zauważalnie miga co 5sek., przy porcie port_6 świeci-czyli ten "if" działa dobrze. Jeżeli "if-y" zamienię miejscami to i tak wykonywany zostanie drugi "if"....
Witam. Procesor ATmega32 Za pomocą przerwań zewnętrznych chciałem sobie zmierzyć szerokość impulsu ECHO w sonarze HC-SR04. Niestety coś w kodzie nie trybi ponieważ dioda informująca o dokonanym pomiarze się nie zapala. Napisałem już obsługe jednego czujnika za pomocą INPUT_CAPTURE i działa, ale niestety w ATmega32 jest tylko jeden pin do obsługi takie...
Faktycznie, nie mam pojęcia po co wpisywałem OCIE1B. Pozostawiłem TIMSK |= (1<<OCIE1A);//zezwolenie na przerwanie od timer1 i jest teraz ok. Tą konfigurację robiłem jakiś czas temu i chyba myślałem że trzeba załączyć A i B. Teraz zmiana i dążenia właśnie do tego co zamierzałem i znów zong. Zliczanie miało odbywać się w przerwaniu. Wiem,...
Typ płytki Arduino to Duemilanove - Połączenie diody LED: zewnętrzna dioda - Czas migania: dowolny - Dalsze działanie programu: zakończenie pracy Wstępna ocena dostępnych informacji - Analiza podanych przez użytkownika danych: - Płytka Arduino: Duemilanove. - Połączenie diody LED: Zewnętrzna dioda podłączona do płytki. - Czas migania: Dowolny (domyślnie...
Pokaż te programy do klawiatury i do migania diodą. Wtedy można pomóc coś zmienić albo poprawić. A tak to co? Mamy napisać program i narysować schemat? Sterowanie silnikiem krokowym w układzie L298 i L297 jest dość proste. Dajesz co 1ms albo mniej impuls sterujący STEP i kierunek jako DIR- tam to jest CW/CCW. Wykorzystujesz do tego przerwanie od jakiegoś...
Pokaż cały program a nie tylko wyrywki. Przydałoby się zobaczyć co się dzieje podczas wysyłania zmiennej impulsy2 na wyświetlacz. Panowie, gdyby do tak prostych rzeczy trzeba było używać debugera to w zasadzie człowiek by się posuwał z pisaniem i tworzeniem projektów wolniej niż zółw a często by się w ogóle zatrzymał i porzucił wszystko - np na prockach...
Jednka pojawil sie nastepny problem ktorego nie moge rozwiazac, jak badalem ten kod ktory mowilem, ze dziala; to duszac pare razy na przycisk program sie zawieszal. Wie ktos moze dlaczego? Może kolega rozwiązał ten problem? Szukałem podobnego rozwiązania i ten wątek okazał się bardzo pomocny, ale mam identyczny problem. Jeśli będe dusił przycisk co...
Otóż tak. Sprawa się ma następująco. Rozuiem że chcesz na wyjściu otrzymać sygnał prostokątny o wypełnieniu 50% i regulowanej częstotliwości. Ja proponowałbym takie rozwiązanie: #include <avr/io.h> int main() { DDRB=0xff; //Port B jako wyjście TCCR1A=_BV(COM1A0); //wyjście OC1A jest przełączane przy osiągnięciu wartości OCR1A...
Dzień dobry! Mam taki o to problem, przerzuciłem notę ale nie mogę jakoś ogarnąć jak uruchomić drugi timer 8 bitowy, przykładowo: Proszę pamiętać o używaniu znaczników syntax . Opcja Listing kodu . - arnoldziq
teraz pojawił się kolejny problem, w przerwaniu od RXC odbieram i wysyłam po 13 bajtów danych, z tego co widać na obrazach poniżej to wg. mnie wartości są odsyłane prawidłowo (4 ostatnie bajty w arrayu 'odebrany string' jest to wartość odczytów adc, a wcześniejsze bajty są na razie po prostu odsyłane z powrotem). Problem pojawia się, kiedy odesłaną...
Kolega Duch__ ma rację, czujniki DS18B20 i DS1631 różnią się w sposobie komunikacji. Nic nie stoi jednak na przeszkodzie, aby zmodyfikować schemat i dodać obsługę 1Wire. W końcu to tylko jeden rezystor podciągający i jeden dodatkowy port µkontrolera :) Wykorzystałem układy na I2C z powodu ich mniejszej podatności na zakłócenia transmisji (głównie...
Wykonać prosty test. Jeśli w układzie jest jakaś dioda LED - zaraz w funkcji main ustawić nieskończoną pętlę migającą w/w diodą. Ważne, żeby było jeszcze przed włączeniem przerwań. To podważy twierdzenie, że uC nie startuje, ponieważ program zajmuje więcej niż x% pamięci FLASH.
http://obrazki.elektroda.pl/9114516200_1... Autorski projekt wyłącznika zdalnie sterowanego za pomocą pilota RC5. Cały układ kontrolowany jest za pomocą mikroprocesora z rodziny AVR, ATtiny2313. Na uwagę zasługuje zasilanie układu bezpośrednio z sieci elektroenergetycznej o napięciu 230V, zrealizowane przez zasilacz bez transformatorowy....
brodda , a co z fusebitem M103C w Twojej M128 :?: Piotrek
Koledzy, poniżej kod. Zauważyłem poważny problem. Timer1 mi się sypie zanim dojdzie do 0. Tzn, nagle, zanim upłynie zadany czas, uC zwiesi się i przestanie wykonywać pętlę Do ... Loop until. Nie wejdzie w stan Powerdown i nadal będę mógł wywołać przerwanie Int0 - czyli zawiesza się w pętli Do...loop. Zdaje się, że nieszczęsne Wait 1 wewnątrz tej pętli...
Witam. Mam następujący problem z SPI (i nie tylko) Najpierw opis układu: Atmega32A master SPI Atmega8 Slave. (przerwania) Wszystko taktowane wewnętrznie na 8MHz Do atmegi8 są przyłączone 4 wyświetlacze 12 diodowe WA przez tranzystory. Katody do portów (oczywiście z R) Wyświetlanie multipleksowane. Do tego 8 przycisków - jako, że brakło portów to "klawiatura"...
Z zasilaniem nie jest tak źle - żeby nie oślepnąć w pomieszczeniu, używam jasności od 0 do 30 (powyżej nie daje się wytrzymać), a w animacjach świeci najwyżej 1/5 wszystkich diod. 288 diod zasilałem przez USB lub z ładowarki do telefonu, do 576 użyję zasilacza 3A. Efekty mam bardzo spokojne, bo nie lubię, jak mi coś za bardzo miga - błędne ogniki z...
- albo ustawiasz pin OC1A w automatyczne zmienianie stanu na przeciwny przy porównaniu z OCR1A poprzez wykorzystanie COM1A1 i COM1A0. Tylko tutaj musisz DDR pinu OC1A ustawić jako wyjściowy ) Dokladnie o takie rozwiazanie mi chodzi. Faktycznie zapomnialem o TCCR1A= (1<<COM1A1). Obecny kod: #define CLK_LED PD5 .... [syntax=c] DDRD |= (1<<CLK_LED)...
Toż sobie sprawdź czy tak w Twojej konfiguracji BTM tak jest. Jezeli tak jest i naprawdę nie wiesz jak sprawdzić stan pinu to niestety musisz rozpocząć od migania diodą i odczytywania klawisza, a dopiero później zabrać się za coś innego. Poprzedni Twój wątek również pokazał że języka C nie znasz praktycznie w ogóle. Proponuje Ci prawidłową kolejność:...
Próbuję zrozumieć zasadę działania timera0 w normalnym trybie pracy, ale niestety mój kod i sposób rozumowania najprawdopodobniej jest zły, ponieważ dioda nie miga. W związku z tym chciałbym poprosić kogoś o weryfikację kodu oraz mojego rozumowania, bo może coś robię źle. W kodzie zamieściłem stosowne komentarze więc nie będę ich dublował. Częstotliwość...
https://obrazki.elektroda.pl/4760563300_... W ramach trwającego konkursu Czujnik wilgotności i temperatury AM2302 (DHT22) Czujnik AM2302 może pracować z napięciami 3.3-5.5V posiada 4 wyprowadzenia (jedno niewykorzystywane). Trzy wyprowadzenia wykorzystane są jako zasilanie (1), transmisja danych (2), oraz masa (4), więcej znajdziecie...
atmega32 miganie diody atmega32 przerwania przerwania atmega32
demontaż blaupunkt evohome honeywell czarny ekran włączyć myszka
Wymiana czujnika temperatury cieczy w Mercedes OM651 1.8 CDI Potencjometr 2x47kΩ w wzmacniaczu WS432: czy różnice kanałów są słyszalne?