Co to może być? Wróżka jest na urlopie. Pokaż kod źródłowy.
Na jakiej podstawie twierdzisz, że problemem są priorytety przerwań? Przerwania występują na tyle sporadycznie, że nie ma tutaj miejsca na problemy. Jeśli wysyłany jest znak '2', to porównanie (i==2) jest błędne TCCR2 = 1<<CS00 | 1<<CS02 | 0<<CS01 ; proponuję zapisać tak: TCCR2 = (1<<CS00) | (1<<CS02) |...
Co do Twojego pierwszego problemu to prawdę mówiąc nie wiem, ale zwróć uwagę na to że po zakończeniu obsługi przerwania zawartośc R16 i R17 jest zamieniona: ... .org 0x0012 rjmp t1Ovf ... t1Ovf: push r16 push r17 in R16, PORTC ldi R17, 0b00000011 eor R16, R17 out PORTC, R16 pop r16 ; R17 pop r17 ; R16 reti ... Może to wina własnie tego. Co do Towjego...
Dałem Ci tylko jedną z wielu możliwości. Brak schematu i kodu na więcej nie pozwala.
o pie*.* średnik!!!!! ile ja czasu straciłem.... No a druga wpadka: w avrstudio programowanie innym wsadem (poprzednim) niż projekt.... bo trzeba wskazać - samo się nie zmienia wraz z projektem! Marek
To rozwiązanie chcę użyć do zliczania sygnałów z czujnika. Na chwilę obecną zliczam impulsy na zmiennej i jest taki efekt, że w trakcie zliczania program wykonuje zliczanie i nie mam możliwości przełączać innych wyjść. (zliczanie jest jednym etapem gdzie musi zostać wykonana określona liczba obrotów)
Dzieki za odpowiedz:) Mam plytke testowa EvB(musialbym zobaczyc na schemacie).Jedyne jakie podlaczenia stosuje to z portem do pinow LED.
[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...
_delay_ms(zmienna) To jest właśnie problem. A dlaczego? Zobacz co to za makro i jak go używać. Chcesz użyć zmiennych? To korzystaj z odpowiedniej funkcji i timera.
Jeżeli to jest cały Twój program, to nie dziwne, że uC się zawiesza. Brakuje mu sekcji main. Co do konfiguracji timera, to skorzystaj z trybu CTC zamiast robić te dziwne operacje z TCNT0.
Opczytaj o działaniu operatorów. & to operator iloczynu logicznego, czego się spodziewasz? Ma być PORTC^=0xFF;
Witam, Popełniłeś kilka błędów: - aby odblokować przerwania od przepełnienia timera 1 trzeba ustawić bit 2 a nie 5 w rejsestrze TIMSK - wektor przerwania od przepełniania timera 1 to nie 0x12 a 0x24 Dobrze jest przy pisaniu w C korzystać z funkcji dostarczanych wraz z kompilatorem "intrinsic function" takich jak __interrupt_enable, __interrupt_disable,...
A po co ten nawias? 16MHz czyli 1 cykl trwa 1/16000000 = 62,5ns. 200*8*62,5ns = 100us
To raczej zły pomysł. Wyjście prawdopodobnie ustawi się w ciągły stan 1. Trzeba wyłączać przerwanie od Timera i tyle.
nie zagłebiajac sie w kod, wydaje mi sie ze to jest ten delay_ms. ma prawo wystepowac cos takiego ze siedzisz w delay'u to juz sie zmienil czas ale minie spory kawałek sekundy zanim odswiezysz wyswietlacz.. na test usun delay'a, jak pomoze to zrob to czekanie na timerze
Wszystkie Timery układu Mega32 mogą generować sygnały PWM: Timer0 - jeden kanał: OC0 - PB.3 Timer1 - dwa kanały: OC1A, OC1B - PD.5, PD.4 Timer2 - jeden kanał OC2 - PD.7 Na wejściach T0 i T1 liczniki nie generują sygnałów PWM. Co do samej konfiguracji to problem jest prawie żaden. W przypadku Timer1 sprawa jest prosta, gdyż CONFIG TIMER1 posiada wszelkie...
To, kiedy jest generowane przerwanie i jakie, nie zależy od tego, jakie napiszesz procedury obsługi przerwań, a od tego, jakie przerwania włączysz w odpowiednim rejestrze. Do każdego włączonego przerwania musisz napisać procedurę jego obsługi. Jeśli włączasz TOIE - musisz mieć procedurę timerX_ovf_vect, jeśli włączasz OCIE1A - musisz mieć TIMER1_COMPA_vect....
Atmega32 - timer 1 w trybie 8-bit pwm, zmiana porównania napięć wejściowych powoduje zmianę stanu wyjścia komparatora - sygnalizacją LED 8. Przy stanie wysokim wyjścia komparatora ma nastąpić wyzwolenie przechwycenia stanu czasomierza1.
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
Nie rozumiem. Dlaczego bez optymalizacji nie ma błędów i w AVR_Studio 4 też nie ma błędów? [url=http://mikrokontrolery.blogspot.com... Użyj timera, większy zysk.
Szukaj pod hasłem "Timer Interrupt Capture" przykładów jest od groma nawet pod Arduino ATMEGA328..
Na Timerze. W przerwaniu od INTx ustawiasz wartość początkową Timera i uruchamiasz go. A w przerwaniu od Timera ustawiasz/kasujesz pin wyjściowy.
A co dokładnie nie działa? Pewnie cały czas świeci :) Przeanalizuj swoją pętlę while i zobacz co się dzieje po ustawieniu timera :) Podpowiedź: wykorzystaj dodatkową flagę i użyj tylko RAZ timera programowego.
load timer0=250 to jest wartość początkowa timera
Procesor Ci nie zwalnia na pewno - chodzi tak jak chodził. Masz pewnie zle napisaną procedurę przerwania, w której jest cos blokującego, lub jakies delaye np. ponieważ nic nie pokazałes - wiecej nic Ci nikt nie pomoze bez kodu
A niby czemu ma program skakać do procedury obsługi przerwania od przepełnienia? Przecież on się nie przepełnia, tylko po doliczeniu do wartości OCR lub ICR , natychmiast się zeruję ( przy okazji może ,ale nie musi zmieniać stan pinu OC). Musisz uruchomić przerwanie od tego właśnie porównania - czyli od Compare, tak jak wspomniał kolega wyżej. Tylko...
[url=http://www.elektroda.pl/rtvforum/to... [url=http://www.elektroda.pl/rtvforum/to... Musisz dokładnie wiedzieć jakie sygnały wystawia twoje urządzenie aby móc je prawidłowo obsłużyć.
na razie 2s na minute ... W weekend spróbuję zrobić tak jak pisałeś i zobaczę efekty. Wzoruj się na kodach z jakichś zegarków jest ich na forum sporo w dziale DIY. Na początek możesz zaglądnąć tutaj: LED sterowany przez Timer (przykład bez kwarcu 32,768kHz).
Mnie wychodzi, że to nie jest tryb CTC tylko normalny. Po drugie na przerwanie compare trzeba zezwolić w rejestrze TIMSK - bit OCIE0 - masz < zamiast << stąd problem. Jak masz jakieś wątpliwości co do konfiguracji, to użyj symulatora AVR Studio. Można sobie w nim też ustawić tryb pracy i odczytać wartości rejestrów kontrolnych dla niego i potem...
a pokaż jak konfigurujesz ten timer...
O ile zmiana uint8_t na uint16_t rozwiązała problem. To nie jestem pewien czy funkcja przelicz wykonuję dobrą konwersję. Wnioskuję to z faktu że jeżeli w tablicy char będą kody ASCII "00064" *(czyli 100) to program zachowuje się inaczej niż w wypadku podstawienia wewnątrz f=100 przed metodą ustaw_timer
Ja bym to jednak zrobił tak jak wynika z twojego opisu programu bascomowego. Czyli timer na 8kHz, w przerwaniu timera odczytujesz ADC i startujesz kolejną konwersję. ADC musi być tak ustawiony, aby skończyć konwersję przed kolejnym przerwaniem timera, co nie jest problemem. Dzięki temu masz gwarancję, że przy każdym przerwaniu timera (z wyjątkiem pierwszego)...
Użyj przerwań timera, PWM możesz zrealizować sprzętowo (też na timerze).
Dlatego, że podczas symulacji Atmel Studio symuluje procesor, w efekcie wie ile wykonał instrukcji i jakich - program jest wykonywany instrukcja po instrukcji, nawet jeśli dajesz mu run. W trybie debugowania sprzętowego pomiędzy pułapkami sprzętowymi może minąć dowolna liczba, dowolnych instrukcji. W efekcie nie ma jak ich policzyć i cycle counter nie...
Treść Twojego programu nie odpowiada założonej funkcjonalności. Podobno chcesz, żeby silnik śledził położenie potencjometru, a tymczasem robisz coś zupełnie innego - wykonujesz pewną liczbę kroków w zależności od różnicy dwóch kolejnych pomiarów ADC. Zacznij od przerwania timera, zgłaszanego z okresem kroku. W nim odczytaj ADC i przefiltruj (obecnie...
Zastanów się, co jest w rejestrze OCR1A w momencie uruchamiania timera. Wpisz do OCR1A wartość przed włączeniem timera.
ad 1. Użyj timerów - taktując je zegarem o odpowiedniej częstotliwości licznik timera będzie zliczał czas. ad. 2. Użyj timera :) Tylko w trybie input capture - w tym trybie licznik zlicza impulsy zegara taktującego i jest stopowany zboczem sygnału doprowadzonego do wejścia ICP timera.
PB3 jest wyjściem PWM podłączonym do timera nr 0, natomiast PD7 do timera numer 2. Musisz po prostu skonfigurować analogicznie pozostałe dwa timery. Tylko że one są 8-mio bitowe, więc rozdzielczość będzie gorsza.
Dużo też zależy od kodu, zwłaszcza jak jest blokujący i w dodatku oparty na polingu timera...
Czy i który timer wykorzystuje 1wire. Chce wyorzystać jeden timer do cyklicznych przerwań, ale jak wykorzystam timer 0 lub timer 1 wysiada transmisja 1wire. Timer2 wykorzystuje zegar czasu rzeczywistego wewnetrzny. ATmega32. Pozdrawiam ! PL
[syntax=asm] .device ATmega32 .include "m32def.inc" .def temp= r16 .def counter= r17 .org 0 RJMP start .org $016 ;wektor przerwania dla przepełnienia timera RJMP przerwanie start: ldi temp, high(RAMEND) out SPH, temp ldi temp, (1<<CS00) | (1<<CS02) ;konfiguracja preskalera i zegara out TCCR0, temp ;w rejestrze TCCR0 (ustawienia główne timera)...
(at)nowyARM W zupełności się zgadzam. Tyle, że w przypadku atmegi 8 jest jeden problem - brak ICP. Cała rodzina tych procków ma ICP. Od Atmega8 do Atmega32: "PB0 ICP1 (Timer/Counter1 Input Capture Pin)" dla A8.
Z tego co wiem "PIN Change Interrupt" ma np. Atmega168 i Atmega 328. Atmega 32 - jakoś nie widzę takiej możliwości. Proszę o poprawienie mnie, jeśli się mylę. Oczywiście zawsze można skorzystać z tych specjalnych pinów - INT0, 1 czy 2 lub zasymulować taką kontrolę stanu pinu w zwykłym przerwaniu - np. timera.
No tak masz rację. Ale powiem Ci, że wartości 99900 Hz w ten sposób w ogóle nie da się tutaj osiągnąć przy zegarze 16 MHz i z użyciem jednego timera ;)
Kol. BlueDraco na ARM robi to na timerze, nie na UART - jakoś się przekonać nie mogę... ;) Skąd się bierze odbiornik DCF77 za 14 zł?
Prawda jest taka że czytałem i ciągle nie wiem co jest nie tak. czytałem o tych timerach już dużo. Mam atmega32 i kwarc 11059200hz ew. 12Mhz
mogą być 2 bity startu, bo standard RC5 właśnie tak jest "skonstruowany", że posiada 2 bity startu. Natomiast jego rozszerzenie czyli RC6 wykorzytuje drugi bit startu jako normalny bit danych. Ok - teraz odpowiedź dla autora, wydaje mi się, że uda się to wyjaśnić bo sam kiedyś miałem podobny problem ze zrozumieniem tego etapu dekodowania. Cały problem...
nie, pętla dojdzie do końca (do słowa Loop Until ...) i potem dopiero zacznie się wykonywać druga polecam jednak zostawić parę zadań timerom
// ================= PROCEDURA OBSŁUGI PRZERWANIA COMPARE MATCH ISR(TIMER0_OVF_vect) Błąd. To jest przerwanie od przepełnienia licznika. Przerwanie od porównania to: TIMER0_COMP_vect . W nagrodę Pomógł od mniej spostrzegawczych użytkowników i moderatorów :) A co do tranzystorów, to oczywiście lepsze by były PNP, ale z NPN też będzie działać (trochę...
Producent sondy, z którą mam do czynienia pokazywał mi sygnał wyjściowy na oscyloskopie. Przy wzroście amplitudy "dołek" prostokąta pozostawał na poziomie zera, a "górka" rosła lub malała. Co to właściwie znaczy? Zmieniała się wysokość czy szerokość "górki"? Musimy w końcu to ustalić, bo w przypadku zmiany amplitudy stanu wysokiego nic nam nie da pomiar...
I teraz pierwsze pytanie: czy da się zliczać impulsy z zewnątrz używając Timer2? Wtedy bym podpiął do nóżki TOSC. The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation. Jak źle (lub dobrze) jest z tym w praktyce nie wiem. Tylko jeszcze zostaje...
Nie mogę zliczać impulsów timerami gdyż są one już zajęte do innych celów. A przerwań innych niż INT0, INT1 używasz?
Witam. Pierwszy Twój wzór dotyczy: Phase Correct PWM Mode drugi to: Fast PWM mode
Witam. Wybacz ale chce mi się rozpisywać. Ustawianie 1 sekundy dla zegara 16MHz [syntax=c] OCR1A = 0x3D08; TCCR1B |= (1 << WGM12); // Mode 4, CTC on OCR1A TIMSK1 |= (1 << OCIE1A); //Set interrupt on compare match TCCR1B |= (1 << CS12) | (1 << CS10); // set prescaler to 1024 and start the timer[/syntax] to co wychodzi z prescalera...
Witam Chodzi o Atmega32. Są tutaj dostępne trzy Timery, ale nie znam stosowania Timera2. Pozdrawiam
A kolega rozumie różnice pomiędzy pracą w trybie timer i counter ??? ;)
1. W jakim języku piszesz? 2. Kalkuluje się to tak: Masz kwarc 16 000 000 Hz (16 MHz) i dajesz sobie jeden z dopuszczonych prescalerów, np. 64 i wtedy timer zlicza Ci impulsy z częstotliwością 16 000 000 / 64 = 250 000 Hz, czyli jeden impuls timera to 4*10^-6 s lub inaczej aby odmierzyć 1s musisz zliczyć 250 000 impulsów, Jako, że Timer0 jest 8 bitowy...
PWM potrzebuje licznika, aby odmierzać czas w którym ustawia pin w stan wysoki i niski. Używasz również timera do regularnego pomiaru czasu echa. To nie może być ten sam timer, co do odmierzania czasu w PWM. Atmega32 ma 3 timery (dwa 8-bitowe i jeden 16-bitowy). Spójrz do datasheet-u mikrokontrolera. Pamiętaj również o tym, aby wszystkie zmienne, których...
Mam takie pytanie czy można korzystać oddzielnie / w tym samym czasie z dwóch timerów 0 i 1. Po prostu jednym generuje częstotliwość na potrzeby generowania sygnału, a drugi timer potrzebuje do sterowania wyświetlaczem... proszę o szybką odpowiedź
Pokazaną tam funkcję (ReadEncoder) po prostu zamień na ISR z przerwań enkodera, albo zrealizuj obie funkcje oddzielnie - tzw. wykorzystaj przerwania do wybudzania, a odczyt enkodera zrób niezależnie od przerwań pinu, np. w przerwaniu timera
W przypadku programu dla ATmega32 też używasz "avr-g++" do linkowania?
Nie możesz wykorzystać timera do zliczania impulsów?
Brak neta to znaczne utrudnienie. Bez programu trudno będzie mi pomóc Tobie sprawdzić ustawienie timera. Ale test z zegarkiem raczej potwierdza prawidłowe ustawienie. Możesz wydłużyć czas pomiaru do kilku minut, by zmniejszyć jego błąd.
Tym razem odpowiedź brzmi nie - jedyne co możemy odzyskać przy tym zegarze to kontrolę nad pinami - jakiekolwiek uruchomienie timera2 spowoduje wariowanie czasu i AVR-dosa. Timer poza tym też nie będzie pracował normalnie bo soft clock będzie w nim mieszał
W slave CPHA nie ustwiam. a po co CS1 skoro mogę operować na wejściach PB3 i PB4?? Układ dwóch Atmeg też nie nie działa zbytnio prawidłowo... czy macie przykład sterowania dwoma AVR?? w slave mam jeszcze obsługę przerwania od komparatora i timera
void set_timer_interrupt(void) { TIFR |= (1>>TOV0); TIMSK |= (1>>TOIE0); } Pewnie dla tego nie działa. A tu problem z diodą DDRD |= (1>>7); //txd jako wyjście DDRD &= ~(1>>6); //rxd jako wejście
Zwłaszcza jak NWW wyjdzie dosyć wysoki np 1000. Jesteś optymistą. Przy podanych parametrach (50 i 0,1s) Maksymalne NWW (najmniejsza wspólna wielokrotność a nie dzielnik) to NWW=47*43*41*37= ponad 3000000. Zastanowiłbym się także nad użyciem przerwania od timera zamiast pętli z delayem. Nie ma się nad czym zastanawiać. Użycie timera to konieczność....
Wogóle nie grzebałem jeszcze w asm. Chociać- trzeba będzie. Ale tak- masz wektory przerwań. Z danego wektora trzeba zrobić skok do etykiety (chyba tak to się nazywa) która to przerwanie obsłuży. Tam umieszczasz te rol czy ror. Jest to wywoływane co x ms- zależnie od tego co masz w ustawieniu Timera.
Możesz ale nie musisz bo AVR-ki mają wbudowany generator który domyślnie ustawiony jest na 1MHz ;). Jeżeli będziesz budował np. zegarek na timerze to wykorzystując wew. generator będzie trochę oszukiwał. Wykorzystując zew. kwarc błąd nie będzie aż tak duży.
Atmega644PA posiada 2 timery 8 bitowe i 1 16 bitowy, natomiast Atmega1284p posiada dwa timery 16 bitowe. Najpierw spróbuję rozwiązania z wykorzystaniem wejść generujących przerwania jak sugeruje użytkownik "tmf", chyba że wciąż będzie brakowało timerów to będę musiał pokusić się o AVR z 4 timerami. Pozdrawiam
Mam taki problem, jak zrealizować załączenie wyjścia o ustawionej godzinie nie zależnie w którym podprogramie będę. Zacznij używać przerwań to będziesz mógł sprawdzać w przepełnieniu od timera.
Tak.
tadzik85 dziękuję za błyskawiczna odpowiedź. Próbowałem tego rozwiązania i niestety gdy w przerwaniu od SPI umieszczę flagę i bez względu gdzie realizuję odbiór czy w przerwaniu od timera czy w pętli głównej drugi bajt wraca do mastera czyli wydaje mi się, że ATmega nie nadąża z odczytem.
Witam . Zadanie jest trywialne . Potrzebujesz 3 zmiennych i dwóch przerwań zewnętrznych plus przerwanie do wyświetlacza. Po starcie procka ustawiasz wartość jednej z zmiennych która będzie równa ilości przerwań wyświetlacza w czasie 10 sekund . Podczas aktywacji przerwania od T1 aktywujesz przerwania od INT0 i INT1 . INT0 zwiększa jedną zmienną a INT1...
W helpie bascoma nie znalazłem konkretnej odpowiedzi na moje pytanie. Odnośnie wait pisze tam tylko "Instrukcja wstrzymuje działanie programu na podaną ilość sekund. Odmierzany czas jest wartością przybliżoną, więc nie należy stosować tej instrukcji do dokładnego odmierzania czasu. Używanie przerwań, może znacznie wydłużyć działanie instrukcji ."Osobiście...
Żeby nie zapomnieć na końcu to już tutaj napiszę, że liczy się to w programach bo one się rzadziej mylą, ale zrozumienie tematu jest oczywiście ważne. Jest kilka, a w pełni darmowych, kalkulatorów do tego. Timer jest urządzeniem sprzętowym wbudowanym w mikrokontroler. Najczęsciej taktowany jest w taki sposób, że sygnał zegarowy taktujący mikrokontroler...
w tym wątku Bascom... i nie mam więcej pytań. Przejdź na normalny język (C/C++), bo to Bascom i biblioteka cię ogranicza, a nie Atmega. BTW: Nie raz robiłem zapis na karcie SD w Atmega bez żadnego timera (daty plików nie były dla mnie istotne). Czy Kolega ma na myśli szybką zmianę stanu portu sterującego LCD, stan zmieniałby się po przepełnieniu Timer'a,...
Jednak na początku mam przecież: ... #include <avr/interrupt.h> ... Jak używasz przerwań, to funkcje z <util/delay.h> nie będą działały prawidłowo. Jak więc pozbyć się tego błędu? Jak musisz korzystać z przerwań, to jedynym wyjściem jest napisanie własnych funkcji opóźniających w oparciu o timery.
Źle do tego podchodzisz. Całe multipleksowanie zrób w przerwaniu timera, który określi dokładnie jak długo wyświetlana będzie każda cyfra. Teraz to robisz w pętli idącej z max szybkością proca, w efekcie piekielnie szybko multipleksujesz LCD, co pomniejsza ich jasność, a dwa, że jak program się na czymś na chwilę zatrzyma (czyli odczycie PCF) to całość...
1) Umieść program w znacznikach CODE 2) Podziel program na części, a w głównej pętli programu odpalaj kolejno podprogramy. 3) Stosuj wcięcia gdyż teraz nie sposób analizować tego programu, gdzie zaczyna się pętla a gdzie warunek, gdzie jest początek a gdzie koniec pętli. 4) Pomyśl nad innym sposobem obsługi klawiszy - wywal _delay_ms(500). W tym momencie...
A tak przy okazji kalibracja na 2 timerach: http://www.romanblack.com/one_sec.htm
Witam. Mam zestaw opisany jak w temacie. Programator STK200. Pojawił mi się problem który nawet trudno wytłumaczyć. Próbowałem juz nawet z drugim ATmegą i tak samo się dzieje. Nadmienię że do układu dołączam oscyloskop Hamega - sprawny i dokładny. Napisałem program z wykorzystaniem Timera T0 - odmierza zadany czas i zapala diodę po czym przy następnym...
Wpisz a googlach - Arduino Frequency Counter , znajdziesz całe kompletne opracowania. Co do obsługi timerów: https://majsterkowo.pl/zegar-cyfrowy-led... http://100-x-arduino.blogspot.com/2016/0... http://atmega32.republika.pl/17.htm Niestety najlepsze teksty o timerach są w...
CTC. COMPA regulacja okresu , COMPB regulacja wypełnienia. COMPB/COMPA współczynnik wypełnienia. Mogę prosić o przykład ustawienia rejestrów TIMERA 1 dla ATMEGA32 ???
(at)stozek - normalnie w Bascom nie jest potrzebna komenda Start Timer0 bo jest on uruchamiany od razu podczas konfiguracji. Używa się tej komendy tylko jeśli poprzednio zatrzymałeś Timer poprzez Stop Timer0. Rozumiem, że zatrzymujesz timer. Tak więc zatrzymywanie timera to zabranie mu źródła taktowania. Bascomowe komendy moża wiec rozumieć tak: Start...
Tu masz rację. Myślałem o Timerach 8 bitowych bo tu było pytanie o Timer0/2 Timer1 jest konfigurowany jako Phase Correct a Timer2 jako Fast PWM https://obrazki.elektroda.pl/8915388600_...
Pierwsze pytanie - czy w inny sposób udaje ci się coś wyświetlić na LCD? I drugie - tam jest funkcja dodająca transakcje, która przy okazji włącza timer. Poprawiłeś ją? Chodzi o tą: [syntax=c] bool LCD_PutText_B(uint8_t x, uint8_t y, char *txt, LCD_trans *buf, bool autodel) { buf->cmd=LCD_Text; buf->Ready=false; buf->SelfDel=autodel; //Czy zwolnić pamięć...
Nie mogę niczego wywalić. w USART musi być co jest a timer musi zbierać bity z wejścia dosyć dokładnie
Właśnie o to mi chodzi. Trudno analizować program do odbioru protokołu, którego nie znamy, a komentarze tego nie ułatwiają, a wręcz przeciwnie. Natomiast co do działania rzeczonej instrukcji kompletnie się mylisz. Zerknij do jakiegokolwiek podręcznika C. Ciekawe jest też spostrzeżenie natury ogólnej, a nie tylko Twojego problemu. Większość kodów przewijających...
A po co ta "pętla główna"? Nie wystarczą same przerwania? Np. jedno od timera sterujące pomiarami, drugie od UARTa.
Przy odblokowaniu timera weź pod uwagę prescaler. Jeśli jest różny od 1 to on cały czas zlicza - trzeba go wyzerować, bo inaczej pierwszy impuls będzie po dosyć losowym czasie. Włączaj triak na dłużej - szczególnie przy kątach otwarcia rzędu 180 stopni prąd płynący przez triaka może być niewystarczający do jego podtrzymania. Jeśli możesz zmienić schemat,...
To PWM na timerze mikrokontrolera + filtr RC wystarczą.
Bity CS00 i CS02 od preskalera są w rejestrze TCCR0B, a nie TCCR0A. Masz preskaler na 0 więc timer nie zlicza.
No i wlasnie nie pokazuje mi tej liczby :_0 wywala jakas glupia :-( tyle ze ja nie wiem czy to nie problem tego ze ty robisz to na atmega32 a ja na atmega8 :-)
Witam. Potrzebuję napisać funkcję która zainicjalizuje Timer w Atmega32 (asynchroniczny) tak, by działał z zewnętrznym kwarcem 32,768kHz podłączonym pod TOSC1/TOSC2. Timer ma zgłaszać przerwanie co 1 sekunde. W przerwaniu powinien zmieniać stan diody na pinie PD0 na przeciwny. Proszę o pomoc w napisaniu kodu . Przepisz dokładnie to samo co napisałeś...
Cześć Pobierz notę katalogową np. Attiny2313a i popatrz jak wygląda kod obsługi USART'a, bo masz błędy w kodzie. Nie chce mi się wierzyć, że nie da się osiągnąć tego czego oczekujesz na Attiny. W przerwaniach timer'a, czy to jednego czy drugiego, możesz manipulować rejestrami COM0Xn, przerwaniami TIMSK. Powinieneś osiągnąć możliwość włączania i wyłączania...
Zamieszczam przyklad programu napisanego na kolanie, zmienia stan lini PC3 co okolo (LicznikMax*10ms ) - wychodzi co ok. 100 ms Gdybyś miał wątpliwości to podniosłem moje kości z krzesła przed komputerem po płytkę z AtMega32 i sprawdziłem w ukladzie - DZIAŁA! Kompilowany pod ICC626, polecam "Wizarda" ,pomaga w minute ustawić co potrzeba bez sięgania...
Ale to już niekoniecznie. Skoro pomiar ADC będzie najczęściej co 1 ms, to spokojnie w przerwaniu timera można odczytywać ADC i rozpoczynać kolejną konwersję, której wynik odczyta się w następnym przerwaniu timera i tak w kółko.
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...
nie - bariera jest rozstawiona teraz na powiedzmy około 6 cm od siebie. Wydaje mi się, że jest to problem z timerem, ale wg mojej oceny prawidłowo go zadeklarowałem. Dodam, iż kwarc mam 11.0592MHz. Preskaler 256. Przerwanie timera co 1 sekundę.
atmega32 timer prescaler atmega32 przerwania timer atmega32 przerwa timer
komunikat drukarki brother wymienić anodę magnezową peugeot partner akumulator
antena zasięg bramy antena zasięg bramy
Jak zdjąć zabezpieczenie z gaźnika Oleo Mac 937? Wymiana ekranu w Samsung LED 3D UE40F6329