Zmienna BYTE może przyjmować wartości 0-255
Funkcja delay_ms() nie zależy od timera, więc prescaler nie ma dla niej znaczenia.
Na 100% w Prescaler było to R na końcu? Bo w timerach jest Prescale, ale w ADC jest Prescaler ;) Bo skopiowałem dokładnie ten kod, który udostępniłeś, dodałem tylko i wyłącznie to r i normalnie się skompilował na bascom-avr 2.0.7.5
FUSE BBIT 7 to ustawienie nie dotyczące częstotliwości pracy uC , a tzw. PRESCALER-a.
Konfiguracja prescalera jest w TCCR0 B a nie TCCR0A.
Niestety Bascom jest niedorobiony. Ilez to ja niekiedy spedzilem czasu bo cos mi nie chodzilo. Co wersja to inny blad. W jednej wersji nie chodzily mi np. timery na Atmega 16, prescaler blednie sie ustawial itp. Warto jest podgladnac rejestry i sprawdzic czy aby Bascom nie wpisal tam glupot. Jesli wpisal glupoty a to najczesciej jest przyczyna probowac...
Musisz naleźć takie wartości do zliczania przerwań z zegara przy których uzyskasz największą dokładność. Możesz też spróbować użyć rezonatorów zegarkowych: 32.768kHz 4.194304MHz. W nich częstotliwość jest potęgą dwójki stąd łatwo się dzieli do uzyskania 1Hz. Może będą też dokładniejsze ale kto wie.
Hmm... O ATme'dze nie pisałeś wcześniej :) Rozumiem że jest slave'm - możesz napisać co robi? Pytam bo też chciałem zrobić slave'a na Atmel'u. Co do podkręcenia zegara to szyna I2C może mieć prędkość SCL frequency = CPU Clock frequency/(16 + 2(TWBR)*(PrescalerValue)... • TWBR = Value of the TWI Bit Rate Register. •...
Gdzie dorwałeś ten prescaler MB506L?
[syntax=c] #define RELOAD_VAL 131 int main (void) { TCCR0=0x8B; TCNT0 = RELOAD_VAL; TIMSK=(1<<TOIE0); sei(); while(1) { } } SIGNAL( SIG_OVERFLOW0 ) // 1 ms { TCNT0 = RELOAD_VAL; } [/syntax]
Jaka jest maksymalna częstotliwość pracy kwarca wewnętrznego Atmegi8? ATmega nie ma w środku kwarc u , tylko oscylator RC, to tak gwoli ścisłości. Mam ustawione 4Mhz i kiedy ustawiam prescaler w timerze 16bitowym na 64 (TCCR1B|=1<<CS11|1<<CS10;) tak aby przerwanie spowodowane przepełniniem timera było wywoływane mniejwięcej co 1s 4000000/64/2^16...
0 Hz wymaga nieskończonego czasu oczekiwania na zmianę stanu. I nieskończonej pojemności licznika. Proponuję ograniczenie wymagań do 0.1 Hz czy 0.01 Hz. Wtedy można obliczyć wymaganą pojemność licznika i zakres. Liczniki w 8515 mają 8 lub 16 bitów i prescalery. To określa zakres zmiany częstotliwości. A częstotliwość kwarcu też jest istotna. Od tego...
Bity CS00 i CS02 od preskalera są w rejestrze TCCR0B, a nie TCCR0A. Masz preskaler na 0 więc timer nie zlicza.
Problemem może byc: [syntax=c] Ton = (DutyCycle*ICR1)/100; //czas wysoki [/syntax] Domyślnie jest to liczone na typie int, a dla niektórych kombinacji argumentów znacznie przekraczasz pojemność tego typu. Dodaj rzutowanie na uint32_t i przynajmniej jeden problem powinien znkinąć.
Może zanim zapomnę o czym chciałem napisać a nie jest najważniejsze, ale dla Ciebie ważne. Tak w telegraficznym skrócie -> USART w AVR ma możliwość włączenia jakby podwójnej prędkości/próbkowania (to samo SPI). Bit ma skrótowa nazwę U2X. Przy taktowaniu 16MHz, jak prawie każda płyta Ardu, to bez U2X predkość 115200 miałaby za duzy błąd który niby maksem...
Zacznijmy od pytań: 1. Które bity według Ciebie ustawiłeś w TCCR2B : [syntax=c]TCCR2B = (1CS20) (1CS22); ustawienie prescalera na 1024, jeden impuls licznika to 64us TCCR2B = (1WGM22); wprowadzam timer2 w tryb CTC [/syntax] pomijając już fakt, że ten fragment się nie skompiluje. A może wszystko jest ok, tylko to problem wklejania kodu na forum? 2. Gdzie...
mog123 - mi dziala kod ktory zamiescilem na PWM - tam jest ustawiony prescaler 1024 i wszystko smiga az milo. Sprobuj wrzucic do programu moi przykład i bedzie dzialac :) Ja nie slyszalem o innym sterowaniu serwem jak przez PWM - to najprostrze rozwiazanie. Pozdrawiam
Witam To są dwa różne mkrokontrolery i nie da się w prosty sposób przerobić programu. 89S8252 nie posiada prescalera.
spróbuj tak : Config Adc = Single , Prescaler = Auto Start Adc Dim N0 As Word N0 = Getadc(0) w N0 masz wartość napięcia gdzie 1023 to 5V a 0 to 0V
Doczytałem trochę informacji, zmieniłem kod. Powinien się wyświetlać znaczek pika z kart natomiast pojawia się wieloramienna gwiazda której liczba ramion maleje ze wzrostem prędkości. Zauważyłem również gdy testowałem poszczególne bloki programu, że timer1(i być może timer0) chodzą ze zbyt dużą częstotliwością niż by to wynikało z wartości kwarca i...
W sobotę o tej porze mogę się mylić :P W tabelce pisze chyba wyraźnie, że dla tego trybu CTC który ustawiłeś to okres ustala się w OCR1 A i raczej powinieneś wtedy uruchomic przerwanie od OCIE1 A i oczywiście wskazać adekwatny wektor przerwania. https://obrazki.elektroda.pl/2405063000_... Sprawa 1 sekundy jest prosta. (8MHz/256)-1=...
Witam, Chciałem napisać program do liczenia 'sekund'. Jest to początek mojej drogi do zrobienia zegara. Problem jest taki, że po 5 minutach zegar spieszy już o 3 sekundy. Gdzie popełniłem błąd? Prescaler ustawiony na 1024, atmega na 8MHz na kwarcu wewnętrznym(może tutaj jest problem?), według informacji które posiadam przerwanie powinno być generowane...
Zakres liczenia 16-bitowego timera przy zegarze 16MHz i prescalerze=1 to nieco ponad 4ms. Jak chcesz tym zmierzyć czas, który przy 5000obr/min wynosi ok. 12ms.?
Coś takiego znalazłem. Co prawda na Atiny ale można przerobić. [syntax=c]// // Talking to ultrasonic sensor HC-SR04 with an ATtiny84, and // sending distance data using serial communications. // // electronut.in // #include <avr/io.h> #include <string.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 8000000...
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
CONFIG ADC = single, PRESCALER = AUTO, REFERENCE = INTERNAL Wewnętrzne napięcie odniesienia to ok. 2,56V. Przetwornik będzie mierzył od 0 - 2,56V. Cały zakres pokryje swoją rozdzielczością.
Po pierwsze, timer liczy od 0 do 255, ale to oznacza 256 impulsów pomiędzy przepełnieniami, czyli powinno być 256, a nie 255 * 128us. Po drugie zaokrągliłeś wynik z 32.64 do 32 przed dzieleniem, co w efekcie dało niedokładny wynik ilości przepełnień. W rzeczywistości częstotliwość przerwań można obliczyć dużo prościej: ( 8000000 / 1024 ) / 256 = ok. 30,5176.....
No ale potencjometry to musisz podłączyć do PortC.0 i PortC.1. Wiesz o tym? I na początku programu daj: Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc
Wybrałem tryb 9 (Phase and Frequency Correct) i napisałem następujący kod: Nienajlepszy to wybór, bo akurat w tym trybie wartośc TOP jest ustawiana w rejestrze OCR1A, służąca do kontroli częstotliwości pracy timera , tymsamym elinujesz możliwośc generowania fali kanałem A. W tej sytuacji generowanie fali jest możliwe tylko w kanale B . Patrz ostatni...
Pokombinuje wtedy z tymi prescalerami i fuse bitami. Póki co w kodzie i w mkAVrcalculator cały czas mam ustawione na 8MHz, a prescaler ustawiony na 8,natomiast slow SCK mam ustawione na >187,5 kHz Na wyświetlaczu pokazuje mi to samo co Tobie, ale nie słychać ani nie widać w rzeczywistości ,że ta prędkość się zmienia.
Jako niedogodność miałem na myśli to że reset prescalera ma wpływ na wszystkie używane. Okazało się jednak że nie muszę resetować preskalerów. Problemem okazał się jeden ze wzmacniaczy, nie działał prawidłowo. Definiowanie F_CPU również było problemem. Dodatkowo oddzieliłem zasilanie wzmacniaczy od zasilania Arduino. Teraz wszystko działa poprawnie....
Czy ATmega8535 ma tylko mierzsyć napięcie i wysyłać? Jeśli tak to po co taki duży uK do tego? :) Program może wyglądać tak: $regfile = "m8535.dat" $crystal = 16000000 $hwstack = 32 $swstack = 10 $framesize = 40 Dim W As Word Config Watchdog = 2048 Start Watchdog Reset Watchdog Config Adc = Single , Prescaler = Auto , Reference = Internal Start...
Po co koledze ten CTC? Prescaler ustaw na 128 i wykorzystaj przerwanie przepełnienia licznika. Fint = Fosc / preskaler / 2^ilość_bitów_licznika = 32768Hz / 128 / 256 = 1Hz Przy CTC trzeba pamiętać, że występuje taki jeden mały szczegół jak 1+OCRn , gdyż licznik musi przynajmniej zliczyć jeden impuls. A ty go nie uwzględniłeś: Fint = Fosc / (preskaler...
Kod piszę "na sucho", więc lepiej sprawdź czy działa.[syntax=c] #include <avr/interrupts.h> void timer0_init(void){ TCCR0 = _BV(CS02); //Mode 0, normal operation, prescaler 64 TIMSK |= _BV(TOIE0); //Timer/Counter0 Overflow Interrupt Enable } volatile unsigned long millis=0; volatile unsigned int okresy_migania_ledow[4] = {100,200,300,400}; ISR(TIMER0_OVF_vect)...
Patrząc po twoim filmie bardzo rzadko zbierasz próbki (157 próbek, a potem około 1s przerwy), tak więc twoje charakterystyki są bardzo statyczne. Tutaj chyba chodzi o to żeby zbierać jak najczęściej i jak najczęściej wyświetlać. Dla porównania dwa filmiki: Twój: Patrz od 1:27 do 1:36 [youtube]http://www.youtube.com/watch?v=... Mój...
... Proszę o szczegóły. Dlaczego oczywiste jest, że timer że 16-bitowy odliczy 1s? Zakładamy że taktujemy kwarcem 4MHz. Jeden takt to 1/4 000 000=0,25us. 16 bitów to 65536 cykli. 65536cykli*0,25us=16,384ms Proponuję więc zliczyć 100 cykli 10-cio milisekundowych. ilość cykli = 10ms/0,25us=40000 cykli. Wpisujesz więc do timera 40000 i czekasz aż się...
Tobie chodzi o wskaźnik wysterowania tak :?: Były już takie projekty na forum z wykorzystaniem avr-ka. Teoretycznie możesz sobie dać mostek z diod prostowniczych i podłączyć to do atmegi. Wydaje mi się że będzie ona musiała szybko działać i ważne będą nawet małe zmiany napięcia. Osobiście przetwornik konfiguruję tak: Config Adc = Single , Prescaler...
:arrow: Mariuszek15 Zmiana CKOPT była dla mnie tak oczywista że zapomniałem o tym nawet napisać. Przeczytałem już wcześniej kilka razy cały opis tego widma z tej strony którą podałeś. W pewnym momencie sprawdzałem już wszystkie możliwe opcje z zewnętrznym kwarcem więc 1110 też sprawdziłem ;) :arrow: manekinen Zmiana prescalera oczywiście pomogła ;)...
Z mojego kodu: // ADC Prescaler Select Bits: Division Factor is 128 , for 16MHz CPU
Mam problem z uruchomieniem przerwania, kombinowałem wiele razy z różnymi ustawieniami jednak nie obserwuję zmian na porcie PD7, PWM na porcie PB3 działa (przebiegi obserwowane na oscyloskopie). Mikroprocesor to ATmega 16 taktowana z kwarcu 16 MHz. Może ktoś zerknie świeżym okiem i doradzi. #define F_CPU 16000000 #include #include #include #include...
Witam... Generalnie rzecz biorąc procedury opóźnienia czasowego nie nadają się do modulowania diody IR... Częstotliwość nie jest zbyt stabilna to raz... Dwa nie uzyskasz 36kHz musisz skorzystać z dobrodziejstw timera... Np. tak... #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> int...
(at)emarcus: O ile się nie mylę, przy prescalerze 64 i cżestotliwości 8MHz timer0 będzie miał skok co 8us, czyli licznik bedzie przepełniał się co 2,048ms, więc do poprawnego odliczenia 1s w obsłudze timera należy załadowywać do niego Timer0 = 6, i dodać licznik, który 500 razy zliczy przepełnienia. A co do tych parametrów, to zawsze wstawiałem domyślne...
Działa. Pewnie o czymś zapomniałeś na wstępie. Mój działający kod: .include "m128def.inc" .cseg .org0x0000 rjmpreset ;skok po resecie systemu .org0x0018 rjmpdata ;skok po wykryciu zgodności reset: ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 rcallKONFIGURACJA_TIMER1 sei loop: nop rjmploop ;......
(at)dondu Aha. Spróbuje Twoją metodą. Mam jeszcze pytanie: czy jeżeli zastosuje taki zamiennik delay: [syntax=c]int lpDelay(int quarterSeconds) { int oldClkPr = CLKPR; // save old system clock prescale CLKPR = 0x80; // Tell the AtMega we want to change the system clock CLKPR = 0x02; // 1/256 prescaler = 60KHz for a 16MHz crystal delay(quarterSeconds);...
Używam Timera1 z Atmega164P w trybie CTC, Atmega ma kwarc 16MHz, interesujący kawałek programu wygląda tak: Konfiguracja Timera: void Timer1_Init(void) { DDRD |= (1<<PD7); // PD7 wyjście PORTD |= (1<<PD7); // PD7 <= 1 TCCR1B = (1<<WGM12)|(1<<C...
Ja wnioskując, że nie jestem w ogóle kompatybilny z czym kolwiek :P pytam, czy właśnie tak przebiega włączenie ADC ? [syntax=c] ADMUX = 0; ADCSRA = ADEN|ADSC|ADATE|ADIF|ADIE; [/syntax] Nie jestem też pewien co do ustawień prescalera... Ogólnie, bez jakiej kolwiek książki to będzie droga przez mękę :/
Odkopuje temat: jak wpisze w BNASCOM: Config Adc = Single , Prescaler = Auto , Reference = Internal to wyskauje, ze nie zna parametru Internal, a programuje 8515.
Temat z pozoru banalny. Atmega 2560, działa poprawnie, obsługuje LCD kolor i inne peryferia. Potrzebuję mierzyć dwie rezystancje (panel dotykowy). Używam więc standardowo dwóch wejść ADC. Konfiguracja zasilania Atmegi typowa : AREF przez 100nF do masy, AGND do masy, AVCC przez dławik do +5V, oczywiście 100nF do masy - słowem klasyka. Kawałek kodu w...
Witam, Mam problemz AtMega z tematu. Ustawiam konfigurację Timerów wg manualki: tryb CNC; prescaler; zezwolenie na przerwania CompareMatch. Po ustawieniu tego odblokowuję przerwania przez "sei();" i.. procesor się resetuje. Dodam też, że taki sam kod działa bez problemów na AtMega 16/32/64. Czy przy pisaniu kodu na te procesory (324/644/1284) trzeba...
tak mam to teraz roziwiazane... chodzi mi zeby wlasnie wszystko bylo jak najmniejsze i pobieralo jak najmniej energii .... Dodano po 1 sory za pisanie jednego posta pod drugim, ale problem rozwiazany. moze sie komus to przyda. uzylem licznika /timera 1 w trybie CTC chodzi bez zadnych przerwan i obslugi softem. wystarczy wpisac tylko odpowiednie wartosci...
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
Kwarc 1,8432MHz, prescaler 1024, timer w trybie CTC na 180 taktów. Kwarc 2,4576MHz, prescaler 1024, timer w trybie CTC na 240 taktów.
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
Korzystam z wbudowanego generatora PMW w wymienionym w tytule mikrokontrolerze. Chcę na wyświetlaczu LCD podawać aktualny czas trwania jedynki. Nie wiem niestety czy wykombinowałem dobry wzór. Prescaler mam ustawiony na 64. Liczę tak [syntax=c] double pomo = 4000000/ (OCR1A*64); pomo = 1/pomo; // obliczam okres pomo = pomo/2; //obliczam czas trwania...
W każdym razie działa tylko teraz nie wiem dlaczego, przy prescalerze = 1 mostek nie reaguje, przy 1024 wszystko działa. To nie jest wina mostka(!). Popatrz na poniższą tabelę częstotliwosci PWM w funkcji prescalera: http://obrazki.elektroda.pl/7375268100_1... Nie każdy elektryczny motor DC radzi sobie dobrze z wysokimi częstotliwościami...
Stwierdzenie dotyczące RTC wynika z tego, że timer2 może pracować asynchronicznie z zewnętrznym kwarcem zegarowym. Można mu podać 32768Hz, t2 będzie takim zegarem (lub wynikającym z działania prescalera) taktowany - to jak wykorzystasz timer zależy od ciebie: możesz np ustawić go w trybie CTC przy prescalerze /128, wtedy będzie się przepełniał równo...
Tylko mam pytanie bo nie jestem pewien, przy kwarcu 32.768kHz przepełnienie licznika odbywać się będzie równo co 1s ?? Co zrobić żeby przerwanie z przepełnienia było co 0.25s ?? Ustawić odpowiedni prescaler.Ponieważ timer jest 8'bitowy to przerwanie z prescalerem równym 1 będzie wywoływane 128 razy na sekundę. w M8 na T2 masz dostępne prescalery 1,8,32,64,128,256,1024....
W Bascomie jest do tego specjalna instrukcja Zaglądnij do Helpa na polecenie Pulsein Zauważ że zarówno instrukcja pulsein jak i pulseout mierzy tylko czas trwania impulsu a nie całego cyklu; patrz paniżej diagram: http://obrazki.elektroda.pl/1148630500_1... Zmierzysz tylko L1 albo L2 . Autor potrzebuje zmierzyc czas L (czas pomiędzy...
Prescaler jest elastyczny, żeby ADC działał efektywnie w różnych zakresach taktowania procka. Trzeba go tak dobrać, żeby częstotliwość przetwornika była między 50 kHz a 200 kHz - w tym zakresie wartości są obarczone najmniejszym błędem. Rejestry mają 16 bitów, ale wynik dostaniesz na 10-ciu, bo przetwornik jest 10-bitowy, reszta bitów jest ignorowana.
.... ADCSRA=0x85; //wpisanie 1 na Enable i ustawienie prescalera ADMUX=0x00; //wybieram kanał 0 ADCSRA=1<<ADSC//uruchamiam konwersję ...i wyłączasz przetwornik oraz zerujesz bity preskalera. ADCSRA |= 1<<ADSC Poza tym po włączeniu przetwornika wypadałoby wykonać pustą (dummy) konwersję.
czy ta niedokladnosc pochodzi od temperatury i wachania napiecia ? wracajac do pytania. Zanim zaczne montowac krysztaly o ktorych na dzien dzisiejszy nic nie wiem :] chcialbym lepiej poznac wewnetrzny zegar. Czy najdokladniejszym rozwiazaniem w sytuacji 1Mgz bedzie ustawienie prescalera na 1 i odliczanie miliona taktow czy jest moze wydajniejsza metoda...
66 osoby widziały ten post, ale tylko jedna odpowiedziała. Wiesz dlaczego? Ponieważ Twój kod i schemat są nieczytelne. Jakie mosfety włączają zasilanie? Czy korzystasz z mosfetów logicznych? Przepisz kod tak, aby każdy pin, i port, do którego się odwołujesz miał swoją nazwę (przy użyciu #define lub const). Na podstawie tego, co podałeś mogę stwierdzić,...
Ja doskonale rozumiem, że Atmegi moga pracować na kwarcu zegarkowym, tylko chciałbym wiedzieć na jakiego rzędu dokładność mogę liczyć na zwykłym kwarcu w porównaniu do kwarcu zegarkowego. -- pozdrawiam, demeus Taka sama!.... Wszystkie resonatory kwarcowe maja dokladnosc rzedu +/- 20ppm. Rezonatory zegarkowe jest o wiele wygodniej stosowac do odmierzania...
Witam Buduje urządzenie zasilane bateryjnie oparte na atmega169p. Procesor jest zasilany z około 2.6V i pracuje na zewnętrznym oscylatorze 1.8432MHz. Procesorem wysterowuje wyświetlacz LCD (4 wspólne + 12 segmentów). Problemem jest pobór prądu w czasie uśpienia procesora. Nie mogę zejść poniżej 100uA w power save mode. Brownout i debug mode wyłączone....
Dla kwarcu 4MHz jest to prescaler 64 i początkowa wartość licznika: 193 Dla kwarcu 8MHz prescaler to: 64 i początkowa wartość licznika: 131 To pokazuje kalkulator. Chciałoby się zakrzyknąć : a nie mówiłem :-P Aby wpisać do Timer2 początkową wartość, to używamy poleceń: TCNT2=początkowa_wartosc Timer2= początkowa_wartosc Counter2=początkowa_wartosc...
Oczywiście, że się da jeśli chodzi o sekundy . Teoretycznie ;). Wystarczy wziąć "nierówny" kwarc. Jego wartość powinna dzielić się odpowiednio przez dwa podniesione do odpowiedniej potęgi. Tak aby np. przerwanie przepełnienia od licznika było wywoływane dokładnie co 1 sekundę, albo inną jej część (zdatną do przeprowadzania obliczeń). Dla przykładu kwarc...
\ 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...
Zwracam się z prośbą o naprowadzenie co robię źle. Potrzebuje wygenerować przerwanie co czas zależny od danego parametru (tutaj BPM). ATmega1284P pracująca z zegarem 20MHz. Ustawiam BPM i wyliczam czas: [syntax=c]uint8_t bpm = 120; uint8_t step_time = 60000/(2*bpm); //czas trwania 8ki w ms uint8_t count = 0; //zmienna pomocnicza do zliczania przerwan[/syntax]...
Na dobra sprawe w tym przypadku do compare1a chyba moznaby dac 2x15625 czyli 31250 i tym sposobem procka przerwania bedzie krotsza.
; ========================================... sterowanie PWM_1 ========================================... ; OC1A pracuje jako PWM (z korekcja fazy 8bit z częstotliwością =f/(2*pre*ICR1L) ; ustawiamy OC1 w tryb PWM z korekcja fazy ldi R16, 255 out ICR1L, R16 ; wpisujemy max wartosc zliczana timera T1 ldi R16, 128 ; wpisujemy wypelnienie dla PWM1A...
Zainicjuj tak przetwornik ADC [syntax=c] ADCSRA = (1 << ADEN) //włącz przetwornik ADC |(1 << ADSC) //rozpocznij pomiar |(1 << ADATE) //pomiar automatycznie powtarzany po odczycie ADC |(1 << ADPS0) //prescaler |(1 << ADPS1); [/syntax]
Udało mi się jakoś uruchomić ten timer. nie mogę ustawić na timerze 5 prescaler'a większego niż 64, gdy ustawie większy licznik nie startuje. ale myślę że będę w stanie to przeboleć. Teraz mam nowe pytanie jeżeli timer 5 to 16- bitowy licznik chcąc odczytać jego wartość ICR5 piszę: [syntax=cpp] volatile uint16_t sygnal; sygnal=ICR5;[/syntax] Tak jak...
Witam! Na wstępie napisze ,że napisałem tu ten temat ,bo nie są kasowane za to żadne punkty. Napisałem taki prosty program: [syntax=basic4gl]#include <avr/io.h> #include <util/delay.h> int main() { ADCSRA = (1<<ADEN) //ADEN=1 włączenie przetwornika ADC) |(1<<ADPS0) // ustawienie preskalera na 128 |(1<<ADPS1) |(1<<ADPS2);...
Witam Forumowiczów Jeśli dział niewłaściwy proszę o przeniesienie;) Mój problem polega na tym iż chciałbym za pomocą pwm-a zawartego w mikroprocesorze Atmega8 wysterować powiedzmy żarówkę (lub cokolwiek innego) ze zmiennym napięciem regulowanym pwm. A mianowicie wszystko gotowe poskładane i tu mały problem. Atmega kwarc 16MHz, timer 8bit , prescaler...
Witam, sprawa się wyjaśniła. Nie wystarczy Config Adc = Single , Prescaler = Auto , Reference = Avcc Żeby to działało to jeszcze aref (teoretycznie nie używany) nie może być umasiony. A u mnie był. Po uwolnieniu aref od masy było lepiej, ale szumiało. Ostatecznie połączyłem Aref kablem do +5V, zmieniłem [...] Reference = Avcc i jest dobrze. dziękuję...
atmega168, konwerter i adxl345 mieszczą się na płytce 8x8cm. 2 kondensatorki do masy , czy jeden między SCL i SDA? oscyloskopu nie mam, ale jutro właśnie zamierzam sprawdzić napięcia. mam jeszcze takie pytanie: czy dobrze obliczam wartość TWBR (217 strona ATmega168 datasheet): http://obrazki.elektroda.pl/9392582500_1... TWBR=\frac{1}{2*PrescalerValue}*(\frac{F...
Jak zmusić diodę alarmu do migania nie używająć procedur waitms ? Mam teraz zrobine tak: Używasz Timer0 jako pewnego rodzaju 'swoisty' prescaler: (4 ms; 100 ms; i 1 sec). Dlaczego okazyjnie nie wykrzystać tych 100 ms na miganie diodą? Wstaw tą wyżej procedure (troche zmodyfikowana - zamiast "set Porta.5" daj "toggle") w przerwaniu timera0 w miejscu...
Ok zrobiłem takie coś i jedynie co robi to ściemnia diodę :-( Dane z odbiornika podpięte pod ADC0 w Atmega [syntax=vbnet]$regfile = "m8adef.dat" $crystal = 8000000 'zewn. L:FF, H:D9 Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim Pomiar As Integer Spiinit Config Portb.1 = Output 'TX ON, disable CLK Start Adc '=======================================...
Witam! Chcę ustawić TIMER1 w atmedze 16 tak aby generował przerwania mniej więcej co sekundę w trybie CTC (dodam, że nie zależy mi na aptekarskiej precyzji). W tym celu ustawiłem następujące rejestry: TCCR1A |= (1<<WGM12); //tryb ctc , timer1 TCCR1B |= (1<<CS12)|(1<<CS10); //prescaler 1024 / OCR1A = 7813; // 8MHz/1024 TIMSK |= (1<<OCIE1A);...
Nie posiadam takowego, ale myślę, że nie powinno to sprawić problemu, trzeba jedynie przepiąć piny CLK i DATA na piny SPI i skonfigurować odpowiednio SPI. Oto kod, który sobie stworzyłem w celu ułatwienia konfiguracji. Musisz jedynie sprawdzić czy konfiguracja pinów jest zgodna z Twoim AVRem. Dorzucam też funkcje wymieniające dane bez użycia przerwań....
Może jestem za głupi na AVR, ale przecież tak to wyliczyłem... PWM skonfigurowany jako FastPWM (może powinienem to zmienić). Preskaler (CS10), według tabelki z Datasheet na stronie 135, wynosi 1. Atmega chodzi na wewnętrznym oscylatorze 1MHz, a więc liczmy razem: ICR1 = ($crystal[MHz] * period[us] / prescaler) - 1 = (1 * 20000 / 1) - 1 = 19999 W związku...
Witam, zerknij https://sites.google.com/site/qeewiki/bo... [syntax=c]// this code sets up counter0 for an 8kHz Fast PWM wave (at) 16Mhz Clock #include <avr/io.h> int main(void) { DDRD |= (1 << DDD6); // PD6 is now an output OCR0A = 128; // set PWM for 50% duty cycle TCCR0A |= (1 << COM0A1); // set none-inverting...
Problem jest rozwiązany. Okazuje się, że Prescaler miałem ustawiony na Auto - dlatego tak długi czas pomiaru (98µs). Kiedy przestawiłem go na Prescaler = 2, to czas zmniejszył się do 10,8µs i to dla kwarcu 8MHz (dla 16MHz będzie szybciej). Dziękuję Ci, że swoją podpowiedzią nakierowałeś mnie na rozwiązanie problemu za pomocą ADC Atmegi a nie...
(at)marcin w Nie zgodzę się z tobą. Od końca - dobry programator jest praktycznie niezniszczalny. Mam od lat AVR Dragon, ostatnio użytam Atmel-ICE, przeżyły odwrotne podłączenie zasilania, zwarcia, potop i dzieci i ciągle działają. Mam też droższe programatory, ale IMHO nie są lepsze niż te najtańsze Atmela. USBASP jest tani, ale to jedyna zaleta....
Dzięki, już działa. Wiedziałem, że mogę liczyć na forumowiczów :] ... Chociaż może nie do końca, bo teraz tylko timer 2 działa ;/ a 0 stoi. [syntax=c]void Timer0Init(void) { TCCR0 = 1<<CS01|1<<CS00; // Prescaler 64 TCNT0 = 128; // ~ 1.0 ms TIMSK |= 1<<TOIE0; // odblokowanie przerwania od licznika } void Timer2Init(void) { TCCR2 = 1;...
Rzut oka na datasheet, na pierwszej stronie: "Four 16-bit Timer/Counter with Separate Prescaler, Compare- and Capture Mode" Powinieneś więc dać radę zmierzyć nawet cztery takie sygnały i niekoniecznie zaczynające się w tym samym momencie. Trzeba wykorzystać tryb capture liczników. Chyba że chcesz się tak męczyć dalej to jeśli faktycznie oba sygnały...
Najprostszy przykład jaki mi przychodzi do głowy to wykorzystanie tych dwóch dodatkowych funkcji do wygenerowania przerwania które nastąpią po przerwaniu A po czasie zadeklarowanym w rejestrach OCRxB/C W twoim kodzie będzie to coś takiego void setup(){ DDRB |= (1<<PB7); // ustawienie pinu 13 jako wyjscie PORTB &= ~(1<<PB7);//...
Witam , wklejam kod jaki udało mi się wypocić. Miało być tak pięknie a wyszło jak zawsze :-( Ten twój kod jest oczywiście błędny. Po pierwsze, jeżeli stosujesz napięcie referencyjne wewnętrzne, to dla AtMega 8 wynosi ono 2.56V. Zatem poziom napięcia mierzonego podanego na dowolny pin ADC nie może przekroczyc tej wartości. Jeżeli jednak ten warunek...
Witam dopiero zaczynam przygodę z programowaniem mikrokontrolerów i mam pytanie odnośnie odmierzania czasu na uc atmega 16. Odmierzam czas przy pomocy timera1 kwarc 16MHz. Z obliczeń wynika, że przy preskalerze 1024 muszę odliczyć 15625 impulsów więc ładuję do timera wartość 49911 i wtedy uc odmierza mi około 4 sekund zamiast 1, natomiast gdy prescaler...
Cześć, postanowiłem zmienić swój stary model Atmegę16A na nowszą wersję więc zakupiłem Atmegę168A-PU. Problem w tym, że za żadne skarby nie mogę zrobić na niej choćby prostego mrugania diodami za pomocą przerwań. Połączenia są zrobione dobrze, konfiguracja również. Ustawiony jest preskaler, uruchomiona globalnie obsługa przerwań, ustawiona jest odpowiednia...
Witam dopiero zaczynam przygodę z programowaniem mikrokontrolerów i mam pytanie odnośnie odmierzania czasu na uc atmega 16. Odmierzam czas przy pomocy timera1 kwarc 16MHz. Z obliczeń wynika, że przy preskalerze 1024 muszę odliczyć 15625 impulsów więc ładuję do timera wartość 49911 i wtedy uc odmierza mi około 4 sekund zamiast 1, natomiast gdy prescaler...
witam wszystkich Dopiero zacząłem przygodę z programowaniem i pojawił się problem Chciałem zrobić zegar na Atmega8. Przepisem program z książki (wiec domyślam się zę nie ma błędów) Zrobiłem prosty układ na płytce stykowej. Do Atmegi podpiąłem kwarc 8MHz dwa kondensatory po 27pF i i wyświetlacz LCD 2x16. Program ruszył od razu ale za wolno chodzi sekunda...
Witam, chciałbym przy użyciu Atmega8 i zewnętrznego kwarcu odmierzać i zliczać setne części sekund, sekundę mogę łatwo wyłapać z timera1 według przykładowych obliczeń 4000000MHz / 256 = 15625 65536 - 15625 = 49911 lub 8000000Mhz / 256 = 31250 65536 - 31250 = 34286 Nie mam jednak pomysłu jak....... Z góry dziękuję za pomocne wypowiedzi. Aby odmierzac...
(...) żdy zasilany z osobnego źródła i odseparowany transoptorami PC817. Ze względu na ich szybkość oraz niską wartość prądów je sterujących 1mA zegar musi być obniżony do 10KHz ma. Chcę zrezygnować z polecenia: waitus 100 w zamian zrealizować to w obsłudze timer0 a w główną pętle przeznaczyć na inne cele. Rozumiem, że chcesz optymalizować swoje oprogramowanie...
Różnica będzie taka że w trybie 14 nie uzyskasz zerowego wypełnienia, a w trybie 15 nie uzyskasz maksymalnego wypełnienia. Jakiś czas temu sam się na to naciąłem The procedure for updating ICR1 differs from updating OCR1A when used for defining the TOP value. The ICR1 Register is not double buffered. This means that if ICR1 is changed to a low value...
Witam, Mam problem z timerem1 - timer pracuje w trybie CTC (4), wartość wpisywana do rejestru OCR1A jest wcześniej odczytywana z przetwornika ADC (potencjometr). Problem występuje podczas zmiany tej wartości - timer tak jakby się przycinał (ale tylko czasami) - nie zgłasza przerwania przez pewną chwile, żeby zaraz zacząć normalnie pracować. Np. po takiej...
Jak zwykle czasu nie ma, ale nie mogłem się powstrzymać. Nakręciłem pierwszy klip - ahahahaha :D No musiałem się pobawić edytorem. Efekt to półtora minuty magii :D Ahahaha miałem kupę zabawy z tym :D Przy okazji możesz zobaczyć jak się używa wbudowanego symulatora by zadawać wartości ADC ;) Twój pomniejszony kodzik też poniżej, tylko używając poza symulatorem...
Chcialbym napisac najprostrzy program aby sprawdzic czy progra mi wogole wchodzi w przerwanie czyli czy zapali diode. Ale zupelnie nic sie nie dzieje. Zarówno symulacja programowa w AVR Studio, jak i program uruchomiony na realnym sprzęcie działa poprawnie. Albo się pomyliłeś co do podłączenia diody, albo procesor jest uszkodzony. Po drobnej zmianie...
Mam taki problem. Podłączyłem LM335 tak jak w pdfie (str 6 rys 3) i próbuje odczytać napięcie. I w temp 22 st. C wynosi ono 3.38 na uC natomiast gdy mierzę napięcie na nóżkach lM między V+ i V- to wynosi ono 2.72. Co może być nie tak. R1 mam 4k7. Poniżej kawałek kodu: Config Adc = Single , Prescaler = Auto , Reference = Avcc ......... Wartac = Getadc(0)...
Witam Mam problem z konwersją wartości 8-bitowego rejestru TCNT0 i wyświetleniem jego wartości na LCD. TNCT0 to rejestr licznika T0, który w mojej konfiguracji zlicza impulsu wejściowe na T0. 8-bitwa zmienna po konwersji wyświetlana jest jako wartości większe niż 255. Kod który to realizuje to: na początku deklaracje zmiennych: itoa(licznikT0, wynik,...
prescaler atmega atmega prescaler timer prescaler bascom
rozebra ekspres saeco sterowanie pilotem telewizora octavia deska rozdzielcza
przetwornica philips przetwornica philips
Silnik elektryczny i baterie do wózka widokowego 6000kg Ustawienie anten LTE: pionowo czy pod kątem?