Co tutaj przekombinowałem? Atmega32. Tryb Licznika. Celem było zapalenie i gaszenie diod co sekundę. Preskaler = 256. Przerwanie tak wyliczone aby wykonywało się co sekundę. Timer 16bitowy [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> ISR (TIMER1_OVF_vect) { PORTC ^= ~0xFF; //zmiana stanu portu C...
Nie nie rób się kaczką albo sie prześpij ahahahahahaha :D OCIE1B zamieniasz na OCIE1A OCR1B zamieniasz na OCR1A zamieniasz wektor TIMER1_COMPB_vect na TIMER1_COMPA_vect kasujesz wszędzie to TCNT1=0 bo nie ma sensu Dla Timer0, w przerwaniu, pod linijką "dot ++ ; " dopisz TCNT0 = 6; To też można na palcach policzyć: 8MHz to jest na sekundę a sekunda ma...
Bo WGM12 jest w TCCR1B a nie w TCCR1A. W tym momencie Twój licznik pracuje w trybie Normal i liczy do 65536 i raz na taki cykl ustawia flagę od porównania czyli co 2,09 sekundy.
Czyli: jeżeli mam ustawioną reakcje na zbocze narastające, TIMER1 w trybie normal, i preskaler ustawiony na 1, to licznik TCNT1 cały czas się zwiększa, w momencie wystąpienia zbocza narastającego na ICP1 rartoś jaka była w liczniku jest przepisywana do ICR1 którą przypisuję do zmiennej. W momencie wystąpienia kolejnego zbocza narastającego wartość...
No tak, nie podałem że po main() jest definicja. To teraz dalej całość: [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile uint8_t pwm0=56; volatile uint8_t pwm1=108; volatile uint8_t pwm2=60; volatile uint8_t pwm3=70; volatile uint8_t pwm4=80; volatile uint8_t pwm5=85; volatile uint8_t pwm6=90;...
Rozumiem:) ale nie ustawiles bitu WGM12 ktory by ten tryb uruchomil, jezeli ustawisz tylko bit CS12 to licznik dziala w trybie normal
wiem , że tak można tylko nie wiem jak mam napisać ten kawałek kodu :-) Możesz to zrobic na wiele różnych sposobów zależnie od taktowania processora i od możliwości wolnego timera. Załóżmy że masz dostepny timer1 (metoda najprostsza i najłatwiejsza). F(takt) = 1 MHz Konfigurujesz Timer1 w trybie normal z prescalerem =256 ; co da pełny zakres max 16.7...
Pierwsze przerwanie wywołuje sie po bardzo długim czasie, bo za pierwszym razem Timer musi doliczyć od 0 do 65535. Dopiero za drugim razem by zliczał od 63000 do 65535, ale też nie zliczy, bo w niewłaściwej kolejności zapisujesz dane do tcnt1. Odpowiedni czas będzie odmierzany dopiero od trzeciego przerwania. Powinno być: out tcnt1h,r17 out tcnt1l,r16...
Nie wiedziałem ze muszę podawać wartość OCR1A w przerwaniu... Bo nie musisz. Piotrusiowi coś się pomieszało. Pewnie z trybem Normal, gdzie w przerwaniu podaje się wartość startową TCNT1.
Witam, niestety ale chyba coś jest nie tak? Na wstępie należałoby wyjaśnić że nie ma czegoś takiego jak "automatyczne przeładowanie timera" (reload/load timer1 powiedzmy). Termin ten jest związany z procedurą konfiguracji timerów występującą tylko w trybie "Normal", gdzie każdorazowo początkowa wartość timera musi być wpisana przez processor. Taka...
Ja założyłem że będzie chciał skorzystać z timera 8-bitowego, a tam te wartości są chyba najpoprawniejsze. Dla timera 16-bitowego rzeczywiście lepiej jest ustawić presc na 8 i naliczyć 10000 cykli. Pozdro To nie zupenie jest tak jak piszesz. W Mega8 timer0 nie ma możliwości ustawienia trybu CTC. Ponadto prescaler 8 jest "bezpieczny " w sensie dokladności...
Jak byś był tak uprzejmy podesłać kod to byłbym bardzo wdzięczny Proszę bardzo, kod lda M88 8MHz Dodano po 2 Nie twierdzę, że są super. Prostuję jedynie wprowadzanie w błąd. Może konkretny przykład a nię że jest inaczej niz pisałem? <ciach> Post raportowany. Uprzedzam kolegę, że jeśli w kolejnych wypowiedziach lub tematach po raz n-ty kolega...
Znalazłem chwile. To tak mi się napisało: [syntax=c]void init_INT0(void) {INT0_RISING; INT0_ON; kontrol=0; } // Nadajnik to PT2262 sekwencja to 4 "słowa" na końcu których jest preambuła ISR(TIMER1_COMPA_vect) { TCNT1=0; TIMER1_POMIAR(t_alfa<<2); if( PIN(ODBIORNIK) & (1<<PIN_ODB) ) { ramkaRC|=(1<<0); ramkaRC=ramkaRC<<1; }...
(i nie piszcie mi o początkowym ustawieniu TCNT bo to jest wtedy niedokładne i było używane w średniowieczu). Nie opowiadaj bzdur. Jeżeli jest niedokładne, to zreferuj na ile jest to niedokładne i czym ta niedokładność jest powodowana. Czy w którejś metodzie/trybie pracy gubi się impulsy albo zabiera więcej czasu na ich zliczenie? A z tym 'średniowieczem'...
U mnie (Katowice) z DCF77 nie ma problemu, oczywiście zdarza się, że przez jakiś czas nie działa, ale przecież nie musi - wystarczy że złapie sygnał od czasu do czasu. Z tego co zauważyłem, to strasznie przeszkadza w odbiorze DCF77 komputer. Kiedy miałem zasilane układy przez USB to generalnie był problem, gdy je zasilałem osobno - z sieci lub z baterii...
Chodzi mi oto że licznik aktualnie pracuje w trybie NORMAL a nie CopareMatch. Brak porównania z rejestrem OCR1B przeszukałem całą notę katalogową i nie znalazłem jak uruchomić ten licznik w tym trybie.
Witam. Nie mogę dobrać parametrów timera tak by osiągnąć zadaną częstotliwość. Potrzebuje teraz osiągnąć by timer1 się przepełniał 10 razy na sekundę czyli co 100ms. ] Do tej procedury nie musisz wcale zmieniac fusebitów. Możesz w zupełności pracowac z f-taktowania 1MHz wykorzystując wewnętrzny, wbudowany oscylator RC z fabrycznym ustawieniem. Mega8...
. Zamierzam zrobić tak by mogli wprowadzić korektę (jeśli będzie potrzebna) i zapisać w eeprom. czy to dobry pomysł? Jakoś tak; $Crystal=12000000 Config Timer1 = Timer , Prescale = 8 On Timer1 Inter_1mS Inter_1mS: Counter1 = Counter1 + Licznik (64036 - wychodzi z obliczeń, że da to 1ms) /tu odliczę sobie 103/ Błednie to rozumujesz, albo błednie podałeś...
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,...
Po pierwsze to mega dziwnie ustawiasz ten oscyloskop, ale to detal. Po drugie, powiem szczerze, nie do końca rozumiem działanie trybu 15 TIMER1. W tym trybie licznik liczy do wartości ustawionej w OCR1A, ale kiedy następuje przełączenie wyjścia? Chyba już wiem w czym rzecz. Z noty: "Combined with the WGM13:2 bits found in the TCCR1B Register, these...
Przyznam się, że nie próbowałem pomijać reti skacząc do pętli głównej z ISR, ale już podmieniałem adres powrotu w projekcie minidds. Ale zakładam, że AVR ma to gdzieś i nie obchodzi go, czy ISR jest zapętlone, czy nie. Zresztą gdzieś w nocie pisało, że SEI w obsłudze przerwania może spowodować nadpisanie całego RAMu, jeżeli kod będzie wolny, więc raczej...
Rozpiskę pinów masz na początku kodu, połączenia to kawałek drutu i płytki stykowej na poczatku maina barbażyńsko[syntax=c] #define pocz_DDRB (sck | cs | sda | res | dc) PORTB = (unsigned char)((~pocz_DDRB) | cs); PORTA = 0xff; PORTC = 0xff; PORTD = 0xff; ACSR = 1 << ACD; _delay_ms(1); PORTB = (unsigned char)((~pocz_DDRB) | cs | res); _delay_ms(100);...
\ 1. Rozumiem, że ustawienie odpowiedniej częstotliwości da mi czas, który jest mi potrzebny? Tak, program z tego postu demonstruje rejestry i bity których odpowiednie ustawienie spowoduje daną częstotliwość przerwać timerów, a w konsekwencji odpowiednią częstotliwość wysyłania tekstu / migania diodą, jednak obecny ustawiony czas jest przykładowy, nawet...
zamiast TIMSK1 użyj TIMSK gdzie znajdziesz ICIE1 PSRSYNC w M32 nazywa się chyba PSR10 i jest w SFIOR a nie w GTCCR jak w M168 Tak, to dało rozwiązanie, że kod mi się kompiluje. Problem w tym, że na wejście dostaje sygnał 50 Hz (ramka trwa 20ms) a sygnały wysoki w przedziale 0-2 ms. Obojętnie jakie dam wypełnienie (0-2ms) to ciągle na z tego kodu otrzymuje...
Znaczy się chciałem dać Load Timer1 = 58594, wtedy chyba działałoby to przepełnienie o którym mówię? Do przycisków daje Debounce, więc myślę, że starczy Nie, to nie wystarczy. Jednym z głównych błędow jaki większość popełnia to zaczynanie projektu od doraźnego, szablonowego wypełniania formuły; $regfile = .......... $crystal = ......... ..............
świetlówkę fazowo...nie obrażaj mnie? No bez przesady A dlaczego nie? Są świetlówki, ledy które mogą pracować ze ściemniaczem. Dodano po 4 Działający kod sterowania fazowego: [syntax=c] //======================================... void InitTimer1() { //TCCR1A = //TCCR1B = 5; // NORMAL (mode0), Preskaler 1024 TCCR1B = 4;...
Witam, dasej: Dzięki za pomoc, po wpisaniu Twojego programu 100% działa. Powinno być chyba zamiast TIMSK1 ---> TIMSK, z kalkulacji miało wyjść 1Hz i tak jest. Tylko że usiłuję to zrobić bez wykorzystywania przerwań i z dużo wyższymi częstotliwościami. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> ISR (TIMER1_COMPA_vect) { PORTD...
Mam dziwny problem z timerem T1 w procesorze Atmega644P. Procesor taktowany kwarcem 18432000Hz. Timer zainicjowałem jak widać w kodzie poniżej: [syntax=c]ISR(TIMER1_COMPA_vect) { PORTB ^= 1<<2; //LED } int main(void) { PORTB = 0; DDRB = 1<<2; OCR1A = 4499; //18000/4500=4 = przerwanie co 0.25s OCR1B = 0; TCCR1A = 0; //18432000/1024=18000...
No to tak. Sprawdzałem bardzo dawno temu- mniej więcej w zeszły czwartek. Nie działało dobrze. Teraz jeszcze raz. Zaremowałem puste przerwanie i wstawiłem w przerwanie od ADC TIFR |= (1 << TOV1); Źle chodzi. Pokazuje co 1s napięcie z pierwszego kanału a z drugiego 0.00. W DS piszą o Trigger source jako o zdarzeniu TIMER1 overflow. str.218. Wysoce...
.... wcześniejsze ręczne ustawienie OC1A (czy tez PD5) na stan wysoki nie pomaga i tak jest resetowane przy inicjalizacji licznika) Bo to chyba wynika z tego: If one or both of the COM1A1:0 bits are written to one, the OC1A output overrides the normal port functionality of the I/O pin it is connected to . If one or both of the COM1B1:0 bit are written...
Witam. Napisałem taki program .............. W moim programie po kolei załączają się rożne tryby migania diody a ja chciałbym żeby wciskając raz switcha załączał się pierwszy tryb później po wciśnięciu załączał się drugi tryb i aż tak do czwartego trybu. Pozdrawiam, Masz prawdopdobnie zadanie zmieniać tryby migania (4 tryby) jednej diody z użyciem...
Szkoda czasu na przeładowanie Timera jeśli może on pracować w trybie CTC. Ustawiasz raz i zapominasz. Nie zupełnie tak jest!!! Ile tego czasu zaoszczędzisz? (4 cykle... ?) Owszem, w trybie 'Normal' przeładownie timera musisz robic w przerwaniu ovf; tu nie stosujesz OVF, ale sam fakt konieczności stosowania przerwania (Comparex) zmusza cię do jego pełnej...
No dzięki za radę, bo na normalnym timerze jakoś ciężko było przechodzić w menu i mrugało też, taki timerek ustawiłem teraz: [syntax=c] TCCR1B |= (1<<WGM12); //włączenie trybu CTC TCCR1B|=(1<<CS10);//|(1<<CS1... //ustawienie preskalera na 1024 OCR1A = 0x1f40; //wartość do której zlicza licznik TIMSK|=(1<<OCIE1A); sei(); [/syntax]...
Robię pewien projekt a dokładnie stacje lutownicza na regulacji fazowej i enkoderze i regulator PID. Regulacje zrobiłem enkoder działa regulator PID też. Chciałem dodać też pomiar prądu, ale wpadłem też na pomysł zeby zrobić odliczanie czasu działania urządzenia. Dodałem ten kod programu, przerwanie co 1ms z atrybutem NO_BLOCK. W sumie teraz wykorzystuje...
Witam Chciałem napisać dla siebie własną bibliotekę obsługującą jednokolorowy wyświetlacz 128x64 ze sterownikiem NT7538H i po około 20 godzinach pracy zwątpiłem i postanowiłem poprosić o pomoc. [url=http://www.displayfuture.com/Displa... Oto datasheet do tego kontrolera. Może zanim wrzucę schemat połączeń i kod...
Nie wiem czy chcesz się nauczyć czy potrzebujesz program. Na początek te uwagi: 1. Nie wiem co tam robi dyrektywa $eeprom. Jest niepotrzebna w tym kodzie 2. Zmienna Ds jest zwiększana w przerwaniu niezależnie od tego czy jesteś w Menu czy nie. Tak więc po powrocie z Menu już na pewno nie zdążysz załapać się na warunek If Ds = 2 i wyzerować jej wartość....
:) czyli dobrze myślałem. n to numer tego WGM (jakiś tam generator fali czy cuś) Jest to numer Timera ktorego konfiugurujesz. WGMn 3:0 - masz w sumie cztery bity do konfiguracji (3,2,1 i 0) Jezeli konfigurujesz Timer1 to te bity znajduja sie w rejestrach : bity: 3 i 2 - TCCR1B - jako bit 4 i 3 tego rejestru natomiast bity: 1 i 0 znajdziesz w: TCCR1A...
https://obrazki.elektroda.pl/1909244200_... Dzięki mikrokontrolerom AVR, takim jak ATmega można zrealizować wiele ciekawych projektów. Autor poniższej konstrukcji postanowił wykorzystać te możliwości do skonstruowania prostego nadajnika AM (z modulacją amplitudy) wykorzystując Arduino Nano (możliwe jest także wykorzystanie Arduino...
W trybie CTC wartość timera jest zerowana, gdy TCNTx jest równe OCRxA. Nie pojawia się tutaj sprawdzenie w relacji większy/równy. Tak więc jeśli w danym momencie OCRxA jest równe 100, TCNTx 98 i w tym momencie zostanie wpisane do OCRxA wartość 96 to nie zostanie spełniony warunek dla TOP, timer będzie się zwiększał aż do 65535 (długa przerwa) kiedy...
Program działa, lecz chciałbym się od Was dowiedzieć, czy zastosowałem się do Waszych wszystkich porad. Jak dla mnie , to diodę podepnij pod Timer, to będzie normalnie, a <util/delay.h> powiedz dobranoc... ;) Ja zrobiłem to inaczej i też działa: Moja wersja: [syntax=c]dany_wysw--; dany_wysw&=0b00000011;[/syntax] ;)
Witam. Dopiero zaczynam programować uC AVR. Zaczynam od ATmega8L, ostatnio mam problem z przerwaniem zewnętrznym INT0, układ wchodzi w stan uśpienia ale nie można go wybudzić. W czasie normalnej pracy przerwanie działa i zmienia licznik. Ogólne prawidłowe działanie programu powinno być takie, że dioda zapala się 10 krotnie po czym uC wchodzi w stan...
Całkowity standard, czyli kopiując z noty: 1.Normal port operation, OC1A/OC1B disconnected. 2. Timer/Counter Mode of Operation: Normal 3. clkI/O/1024 (From prescaler) To chyba wszystko, on ma po prostu liczyć sobie w górę a w pęli jest porownywanie [najprymitywniejsze rozwiązanie z pominięcem rozwiązań gotowych w timer1 i o takie rozwiązanie mi chodzi,...
tryb CTC zerowany licznik jest po porównaniu z jakim rejestrem?? COMPA !! może i jestem laikiem, ale licznik w trybie CTC zerowany jest po zrownaniu z wartoscią zapisaną w rejestrze OCR. OCRA będąc dokładnym nie dowolnym OCR TCNT jaka ma wartość początkową? 0 TCNT używany jest do normalnej pracy licznika TCNT używane jest zawsze nie wiem skąd pomysł,...
Problem z zliczaniem impulsów rozwiązany ale mam nowy problem z wyświetlaniem wyniku zdjęcia w załączniku. Pierwsza rzecz co rzuca sie w oczy to brak konfiguracji LCD; Niby to pracuje mając config ustawiony w 'Options/Compiler/LCD, ale przeniesiesz listing na inny computer i tu już nie musi być to samo. Dalej, Timer1 odliczający 1 sec. może pracować...
Oto pełny schemat: http://obrazki.elektroda.pl/6640307900_1... No dobra, przeniosłem to do procedury przerwania: [syntax=cpp]//Nauka obsługi wyswietlaczy //Atmega8 12MHz #include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> #include <util/delay.h> #define wyswietlacz1 0x01 #define wyswietlacz2 0x02...
Witam Zrobiłem dwu kanałową płytkę do ściamniacza żarówek na 230V z wykorzystaniem triaka (oczywiśie dwóch, po jednym na kanał). Schemat znalazem na formu, wykorzystywany jest układ detekcji przejścia przez zero, triak jest sterowany przez MOC3021, itd. Układ detekcji przejścia przez zero jest podłączony do przerwania INT0, wyzwalanie triaktów do wyjść...
Potrzebuje zmierzyć częstotliwość w zakresie do 200kHz(w tym przypadku 3,2MHz) procek: to ATmega8 Kombinuje jak koń pod górę, na czym polega mój błąd ? Timer 2 odmierza czas 1s. Timer 1 w założeniu ma zliczać impulsy z zewnatrz. (wartość 0xFF w OCR1A,-impulsy dochodzą z T1,-po zrównaniu TCNT1H/L zerują się-i cykl się powtarza.) Oróż Timer2 wchodzi w...
Witam, Mam mały problem z programem z książki o programowaniu ATmega8 i ARM7 Pawła Borkowskiego tj. cw. 2 z lekcji o przerwaniach. Treść ćwiczenia to takie obsłużenie diód podłączonych do PC0, PC2 i PC4, aby PC4 świeciło po załączeniu przycisku, PC2 ma się zaświecić po 1,5 sekundzie przy wykorzystaniu timera1, a PC1 ma się zaświecić po 170ms przy wykorzystaniu...
Niestety ale opcja wait nie nadaje sie do moich celów gdyż wtedy nie widzę co się dzieje z temperaturami, ciśnieniem układu. Wszystkie pomiary stoją. Cóż będę musiał poszukać podobnych programów i coś może wykombinuje. Dzięki za odpowiedzi! Bedziesz wie musial uzyc jeden z wolnych timerow. Ponizej masz przyklad zastosowanie timera 1 w trybie CTC. (z...
to teraz wygląda to tak, ale działa tak samo:( nie wiem czy to coś w ogóle zmienia bo clock wchodzi do preskalera 256 najpierw, wiec nie tak szybko sie przekreci;) [syntax=c]void timer_init() { TIMSK = _BV(TOIE1); TCCR1B = (_BV(CS12)); } ISR(TIMER1_OVF_vect) { flag = true; } int main() { InicjujLCD(); DDRB &=0xFE; PORTB |=_BV(0); timer_init(); while(1)...
Kod z 1 posta z odrobiną poprawek w formatowaniu: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h > #include <avr/pgmspace.h > #define LED1 (1<<PC0) // zwykła dioda LED #define LED2 (1<<PC1) // podświetlenie LCD #define LED1_ON PORTC &= ~LED1 #define LED1_OFF PORTC |= LED1 #define LED1_TOG PORTC ^= LED1 #define...
wymyśliłem sobie, że jak wartość wyświetlana spada poniżej 100, to ma nie być wyświetlana pierwsza zero (zamiast 099 ma być 99) jeśli wartość spadnie poniżej 10 mają nie być wyświetlane 2 pierwsze pozycje wyświetlacza (zamiast 009 ma być 9) Niby proste. Wystarczy na tą pozycje wpisać 10 i cyfra się wygasi. Kod jest taki: ISR(TIMER1_COMPA_vect)...
Udało mi się odpalić symulację (co oznacza, że udało mi sie przywrócić Atmel Studio do życia, Eclipse powoli mnie dobijał, nie znalazłem rozwiązań problemu z Atmelem nigdzie na necie, więc jakby co, mogę pokrótce opisać rozwiązanie ;) ) Do rzeczy: Z symulacji przeprowadzonej na ostatnim zamieszczonym w temacie kodzie wynika że: 1. Symulacja zatrzymuje...
No i wszystko. Panowie, popełniłem błąd bo założyłem błędnie ten właśnie czas, nie wiem skąd mi się to w głowie pojawiło, przepraszam. Natomiast dzięki Waszym wyjaśnieniom i oscyloskopowi który służy mi nie od dziś, doszedłem do wszystkiego co aktualnie dla mnie istotne. Dziękuję za wyjaśnienia. Aktualnie z AtTiny85 wyciskam ile się da, i proszę mi...
(at)dondu czytałem ten fragment pdf'a i próbowałem czytać "po jednym" i jako 16bit po sobie, same zera, poza tym w tej samej dokumentacji jest napisane że przy pisaniu w C kompilator ogarnia dostępy do tych rejestrów i też tak wynika z moich dotychczasowych doświadczeń. Poza tym szybka praca licznika wskazuje na to że nie jest to problem tylko z odczytem....
Przepraszam za dłuższą nieobecność. Nie mając nic nowego (i mądrego) nie pisałem. Ale w międzyczasie polutowałem zestaw startowy, a ostatnio napisałem inny program, który umożliwia (w zamyśle) liczenie dokładniej częstotliwości dla "paczki" impulsów, tym razem około 500 Hz. Wiem, że to dosyć skomplikowany tok myślenia, pewnie można to zrobić prościej,...
Witam. Koledzy trochę skomplikowałem sobie życie. Zaprojektowałem i wykonałem już płytkę i teraz widzę że mam problem. Otóż potrzebuję na wyjściu OC1A generować sygnał pwm ale TIMER1(16-bit) jest mi potrzebny do generowania przerwania co 1s. Jak więc za pomocą timera0 wywołać przerwanie co 1s? Przy taktowaniu processora 8 MHz nie ma możliwości generowania...
Witam. W przerwaniu ustawiasz licznik timera0, a nie timera1 - dlatego nie działa. Jeżeli chodzi o działanie timera w tym trybie (normal) liczy on od wartości TCNT do 65536. W twoim przypadku więc przerwanie wywoła się po (65536-8190) 57346 cyklach timera. Po wywołaniu przerwania wartość TCNT ustawiana jest na 0, ale u Ciebie znów zmieniasz ją na 8190...
2. Timer0 w M8 w przeciwieństwie do M32 nie ma możliwości pracy w trybie CTC. Chcesz CTC to przenieś obsługę na T1 lub T2. Ewentualnie T0, ale w trybie normal z cyklicznym przeładowaniem wartości w rejestrze licznika. Czy tu chodzi, aby ustawić bit WGM w tryb normalny i CTC więc: TCCR0 |= (1<<WGM00);. Czy dobrze myślę? Niby ustawiłem bit WGM...
Taki bubel całkowicie krzyżuje mi plany Masz rację, zrobiłeś bubel ;) który na szczęście można naprawić na kilka sposobów, z których najprostszy to wywołanie sei() w funkcji obsługującej przerwanie. Dlaczego tak się dzieje - po prostu dlatego, że na początku obsługi przerwania samo z siebie wywołuje się cli(). Najczęściej unika się tak długo trwających...
Witam, napisałem bardzo prosty kod sterujący przez przerwanie wyświetlaczami LED i zwiększający o 1 zmienną z co sekundę [syntax=c] #include <avr/io.h> #define F_CPU 8000000 #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <inttypes.h> #include <util/delay.h> unsigned char z=0; unsigned char i=0; //zmienna...
Mam następujący problem: Gdy zmieniam w przerwaniu zawartość zmiennej (co najmniej dwubajtowej) z kwalifikatorem volatile program w loop odczytuje czasem "hybrydową" wartość w której część bajtów pochodzi ze starej, a część z nowej wartości. Podobnie bywa przy odczycie w przerwaniu zmian wprowadzanych w loop. Sądzę, że problem pojawia się gdy przerwanie...
Recently I started to work with mTouch CSM module. It sounded like extremely interesting and high performance hardware to work with. It sounded right! :) there are countless applications for use of this hardware. Touch pad, proximity sensors, readout of capacitive sensors,extreme precision capacitance measurement, ultra small capacitance change detection,...
Jeśli mam na płytce złącze ISP to po za programowaniem piny do niego podłączone mogą również służyć jako normalne wejścia/wyjścia tak? Z góry dzięki za odpowiedzi. Tak.
Config Pinb.3 = Output 'Config Timer0 = Pwm , Prescale = 1 , Compare Pwm = Clear Down Set Tccr0.pwm0 Set Tccr0.com00 Set Tccr0.com01 Set Tccr0.cs00 Ocr0 = 127 'T2 już normalnie ;) Config Timer2 = Pwm , Prescale = 1 , Compare Pwm = Clear Down Ocr2 = 127
Zmieniłem realizacje zegarka na timer1. I zegarek śpieszy się 10 sekund na dobę. Postanowiłem zrealizować zegarek na PCF8583. To wcale nie jest tak źle !!! -"10 sec. na dobę" to z grubsza masz błąd 0.01%, a w/g datasheet R-C oscylator może mieć odchykę nawet do 5%. Nigdzie nie ma wzmianki że stosujesz rezonator zewnętrzny (crystal). Ponadto, czas dla...
//--------------------------------------... // Using: // * 32x16-LED DMD // * Arduino //--------------------------------------... #define LIN_OUT 1 #define FHT_N 128 // set to 256 point fht 128 #include <FHT.h> // include the library #include <SPI.h> #include...
krotki opis proramu, po wykryciu przerwania pierwszy raz na INT0 uruchamia timer i odlicza czas do drugiego przerwania, po drugim przerwaniu i kolejnych na PA2 jest wystawiany impuls trwajacy 200us, impuls jest opoznany w stosunku do sygnalu wejsciowego w zaleznosci od okresu sygnalu. Problemem okazalo sie dodatkowe opoznienie wprowadzone przez obsluge...
Dziękuję wam za wszystkie odpowiedzi wiele mi to pomogło jednak ciągle mam problem. Jest lepiej bo coś tam już widać ale jeszcze nie jest ok. Zaznaczam na początku że nie mam należytego sprzętu aby zrobić to jak należy jednak zanim zainwestuję w mikrokontroler taktowany 25 Mhz chcę mieć już jakiś wstęp na sprzęcie który posiadam a posiadam Atmegę16...
Witam Próbuję zapoznać się z językiem C. Mam gotową płytkę z ATTiny2313. Chciałem na początek pomęczyć diodę LED. Jako, że Delay nie jest dobrym rozwiązaniem próbuję z Timerem0 [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int main(void) { //######## konfiguracja timera ############## TCCR0B |= (1...
Hej, Niezależny eksperyment wykonany a wyniki... zgodne z dokumentacją. Z resztą po co eksperymentować skoro jest dokumentacja producenta. OK. Ale... warunki: Timer1 -> tryb CTC (12), preskaler=8 (1.25MHz (at) f=10MHz), uruchomione wejście ICP z redukcją zakłóceń, capture przy zboczu rosnącym - dla dociekliwych ustawione bity: Icnc1 , Ices1 , Wgm13...
Kilka lini kodu w C na AVR ATTiny może zdziałać cuda Funkcja losująca ten bit jest prosta: // TRNG functions static uint8_t trng_bit() { uint8_t bit; bit= (adc_get(ADCTRNG0)^adc_get(ADCTRNG1)^adc... & 0x1; return bit; } static uint32_t trng_bits(uint8_t n) { uint32_t bits= 0; uint8_t i; for(i=0;i<n; i++ ) { bits=(bits<<1);...
No przecież prosto. Konfigurujesz timer1 do pracy w normalnym ale nie robisz start timer. robisz przerwanie dzialajace na zbocze np. narastające-> Dalej : robisz zmienną flaga w przerwaniu robisz if flaga=1 then start timer1 flaga=0 else stop timer1 w rej od timera masz czas... kopiujesz gdzie Ci tam pasuje flaga=1 zerujesz licznik endif I tyle, oczywiście...
Cześć. Od około dwóch tygodni pracuję nad układem, którego głównym zadaniem jest jak najdokładniejszy pomiar czasu propagacji fali ultradźwiękowej między dwoma membranami piezoelektrycznymi. Układ jest zbudowany zgodnie ze schematem blokowym przedstawionym poniżej: http://obrazki.elektroda.pl/4225526900_1... Mikrokontroler to Atmega328...
Witam, próbuję zrobić pomiar czasu między kolejnymi przerwaniami na wejćiu INT0, ten czas ma być później wykorzystany do ustawienia ocr dla timera w trybie CTC. Miało to wyglądać tak: Uruchamiam timer, gdy na isr(int0_vect) pojawia się impuls ustawiam sobie flage na 1, w funkcji liczącej czas gdy pojawia się flaga przypisuję wartość timera do zmiennej,...
Jak w czystym C (AVR GCC) wyglądała by funkcja millis() ?, a może pokaż też 2 podejście (listing), gdzie milisekundy to zmienna globalna np millis. Wykorzystaj timer do przerwać dostępny na każdym AVR. W AVR GCC, funkcja podobna do `millis()` z Arduino, która zwraca liczbę milisekund od startu programu, może być zaimplementowana z wykorzystaniem timera...
Ostatecznie zrób wstawkę w ASM. Wklej tutaj swój kod z przerwania, może da się go przyśpieszyć. Wiem że procek za czym skoczy do podprogramu przerwania robi jeszcze dużo rzeczy poza moimi plecami, ale w moim przypadku jest to pożądane - mój zegar przecież śpieszy . Tak więc robienie wstawek asembler-owych i próbowanie na siłę zbliżyć się do teoretycznej...
Witam, Mój problem jest dziwny. Mam przetestowany układ na płytce stykowej, program też działał bez zarzutów. Wykonałem PCB złożyłem, ATmega normalnie została zaprogramowana i reaguje. Zczytałem pomiary temperatury przez UART- też działa. Obecnie sterowanie jest dwustanowe, docelowo będzie PWM i PID. A teraz moje 2 problemy: 1) Sterowanie MOSFETEM....
Tutorial do avr taki znalazłem: http://avr.elektroda.eu/?q=node/8 Jak byś czegoś w sieci szukał, to raczej unikaj tutoriala z patron.net, uczy złych nawyków i jest nieco nie na czasie. Pomiar częstotliwośći na AVR realizuje się w miarę łatwo, przy wykorzystaniu timerów, jeden timer pracuje jako licznik impulsów z zewnątrz, a drugi odmierza czas, mozna...
W celu zezwolenia na przerwanie TIMER1_COMPA należy ustawić flagę OCIE1A, a nie TICIE1. Co do trybu PWM to chyba tylko w takim trybie mogę uzyskać porównanie licznika z którymś z rejestrów (OCR1A) w trakcie inkrementacji. Nie tylko w takim trybie. W trybie Normal też uzyskasz przerwania w momencie zrównania wartości timera z rejestrem OCR1A, dodatkowo...
Witam, Przeczytaj dokładnie help dla komend RC5SEND i CONFIG RC5. Jak już pisałem, opornik MUSI byc podłączony do B.3 i dyskusja dlaczego nie ma sensu, spójrz w przykładowy program do wysyłanie kodu RC5 - plik SENDRC5.bas z katalogu C:\Program Files\MCS Electronics\BASCOM-AVR\SAMPLES\IR Istotna informacja wyboldowana: '---------------------------------------...
Kolego BlueDraco, rozumiem, że jesteś specjalistą od mikrokontrolerów, ale wskaż mi gdzie widziałeś inny watek, w którym ktoś potrafi coś przeliczyć na cykle, kto przeanalizował tyle przypadków. Traktowanie mnie jak byle kogoś (czyt. jak wszystkich) raczej niszczy Twoją reputację. Znalazłem przyczynę wszystkich problemów. Okazało się, że to NIE moja...
Witam Chciałbym zaprezentować Wam kolejny projekt, który wykonałem kilka lat temu i generalnie wtedy miałem go przedstawić na elektrodzie ale jakoś czas uciekał a ja nie mogłem się do tego zabrać. No ale koniec wstępu, przechodzę do rzeczy. Prezentuję wam naświetlarkę UV służącą do wykonywania płytek PCB metodą fotochemiczną. Naświetlarka powstała z...
Czemu nie działa jakieś błedy kompilatora, jak nie tak to może źle napisany kod i się przy większej optymalizacji wysypuje. Jak coś to wrzuć kod nie działający. Heh, no ok, wrzucam więc kod. Od razu jednak uprzedzam, że to jest mój pierwszy program w C i mogą występować rażące programistów błędy. Poza tym kod jest nieco rozlazły - dla mnie bardziej...
emarcux w poscie#5 masz dokładnie podprogram przerwania, który jest uruchamiany co 4ms ( z przerwania ) i zlicza właśnie do 25 po czym to wprowadza znak na LCD:............ Tylko moze nie kliknales "rozwiń kod" bo normalnie jest zwinięty w poście Ja widziałem cały code..... Wysłanie jakiejś pośredniej informacji do LCD nie jest równoważne z postawieniem...
Dziekuje za wytlumaczenie. Rozjaśnia mi się już bo widzę przykłady. Nie wygląda abyś rozumiał w pełni koncept przerwań. Poprzedni mój post zawierał cały, gotowy, pracujący program dla dwóch czujników (z pełnymi objaśnieniami), oparty o timer1, skonfigurowany do pracy w trybie CTC. Jeżeli tamtego nie zrozumiałeś, to naturalnie i tu masz poważne problemy....
Oczywiście, że tak nie mogłoby działać. Fakt, że dobrze myślałem, ale za szybko pisałem i mogłem wprowadzić Cię w błąd, przepraszam. Miałem na myśli coś takiego (bardziej pseudokod): #define TIMER_LEN2048 //albo 4096 #define SHIFT_REG_BIT0 #define TIMER_PRESCALER ... uint8_t servo_id; uint8_t pulse_low; uint16_t next_pulse; uin16_t servo[8];...
$regfile = "2313def.dat" $crystal = 6000000 Config Timer1 = Timer , Prescale = 8 On Timer1 Tajmer1_przepelnienie Enable Timer1 : Start Timer1 Enable Interrupts '---------------------------------------... Dim Wyswietlacz_licznik As Byte Dim Wyswietlacz_dane As Byte Dim Wyswietlacz_cyfry(4) As...
A czy kolega mógłby przeczytać skrupulatniej? :) ma ruszyć normalnie tak jak napisałem post przed tym jak kolega swoja opinię :) W pierwszym poście to po prostu pomyłka. Pozdrawiam Czajnik
Niestety nic z tego nie wyszło. Po wpisaniu powyższego programu i zmianie $regfile na "attiny45.dat" BASCOM wskazuje na błędy: "Error: 46 Line: 7 Assignment error [TCCR1a: 0 &B00010001; 112] Error: 46 Line: 8 Assignment error [TCCR1b: 0 &B10000011; 112]" Jeżeli wpiszę $regfile = "attiny26.dat", wtedy jest OK. Jeżeli chcę normalnie w BASCOMIE uruchomić...
O właśnie teraz pomyślałem o zewnętrznych przerwaniach, że tak można by to zrobić. Natomiast nie rozumiem co rozumiesz przez stwierdzenie, że tryb PWM skraca cykl zliczania do 256 (czy ileś tam)? Specyfikacja procka stwierdza że dla Fast PWM "The minimum resolution allowed is 2-bit (ICR1 or OCR1A set to 0x0003), and the maximum resolution is 16-bit...
The interrupt execution response for all the enabled AVR® interrupts is four clock cycles minimum. After four clock cycles the program vector address for the actual interrupt handling routine is executed. During this four clock cycle period, the program counter is pushed onto the stack. The vector is normally a jump to the interrupt routine, and...
O czym zapomniałem w konfiguracji ? Zapomniałeś o tym, że AVR Studio z gałęzi 4 (AS5 nie używam) miały pewne ograniczenia w przypadku programowego symulatora. Nie wiadomo w jakiej wersji to próbujesz symulować. Ten fragment uruchomiłem w AS4.19 b716 i licznik zachowuje się normalne.
W manualu jest napisane: Calibration is started by setting the CAL bit in the ADC_CR2 register. Once calibration is over, the CAL bit is reset by hardware and normal conversion can be performed. It is recommended to calibrate the ADC once at power-on. The calibration codes are stored in the ADC_DR as soon as the calibration phase ends. Najważniejsze...
"kolega janbernat chyba nie pojął o co chodzi w programie w pierwszym poście. Tam są przerwanie na int0 i int1 , pierwsze to pewnie czujnik optyczny a drugie końcówka compare A połączona z int1, chyba że się mylę." No tak to jest- jak się coś widzi a o czym innym myśli. Głupoty napisałem bo "zafiksowałem" się na przerwaniu od timera- a to normalne przerwanie...
Wzór na czas pomiędzy przerwaniami na podstawie datasheeta uwzględnia jeszcze jedną małą rzecz - wartość 1. Po przekształceniu otrzymujemy: t = \frac{t \cdot F_{CPU}}{N} - 1 Przy założeniu że t = \frac{\pi 20}{3} Wartość do timera powinna wynosić 6143. Inna sprawa jest taka, że zacytyhę kolegę BoskiDialer: W trybie CTC wartość timera jest zerowana,...
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
Niepotrzebnie mieszasz myślowo różne systemy walutowe. [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <Arduino.h> unsigned long FlagTime; void setup(){ // to jest odpowiednik main Serial.begin(9600); DDRB &= ~(1 << DDB0); // ustawienie pinu B0 jako wejście ( wejście licznika ICP1) PORTB |= (1 <<...
Witam. mam problem z programem gdyż korzystając z Timera1 chciałbym w programie zmieniać prescale po wciśnięciu np. s1 na 8 a po wciśnięciu s2 na 1024, problem w tym że w najprostrzej wersji programu : If Pinb.0 = 0 Then Config Timer1 = Timer , Prescale = 1024 End If If Pinb.1 = 0 Then Config Timer1 = Timer , Prescale = 8 End If pinb.0 i pinb.1 ustawione...
Witam! Pierwsze kroki z uC, czyli próba stworzenia zegara matki dla czasomierza podobnego do $regfile = "m8def.dat" $crystal = 2000000 Config Pind.0 = Output Config Pind.1 = Output Config Timer1 = Timer , Prescale = 64 Dim Licz_2s As Byte Dim Parz As Bit Enable Interrupts Enable Timer1 Load Timer1 , 62500 Licz_2s = 0 Parz = 0 Do Loop End Odmierz_1m:...
normal connect phase normal zworka normal
syrena kondensator lanos schemat instalacji excel pierwszy pusty wiersz
Dlaczego Jura WE8 zapowietrza się przy spienianiu mleka? Nieszczelność układu spieniania mleka w Jura WE8