Funkcja delay_ms() nie zależy od timera, więc prescaler nie ma dla niej znaczenia.
Zmienna BYTE może przyjmować wartości 0-255
FUSE BBIT 7 to ustawienie nie dotyczące częstotliwości pracy uC , a tzw. PRESCALER-a.
Dodatkową niedogodnością jest to że Atmega2560 ma wspólny układ prescalera dla Timerów 0 1 3 4 5. a to nie wystarczy?: Timer/Counter 0, 1, 3, 4, and 5 share the same prescaler module, but the Timer/Counters can have different prescaler settings . Pytam bez analizy kodu. Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011...
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
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...
Gdzie dorwałeś ten prescaler MB506L?
W dokumentacji niestety dla licznika 1 nie występuje preskaler 128. Występuje natomiast 256. Zakładając, że licznik pracuje w trybie CTC (WGM12 =1) i zakładając 8MHz źródło sygnału zegarowego (tak jak jest w komentarzu w kodzie) należy wpisać do OCR1A= 31249 oraz ustawić preskaler na 256 czyli CS12=1 A tak na przyszłość ...nota katalogowa. Tam wszystko...
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.
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
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. •...
Kolego patrzę na ten kod ze zgrozą, ale załadowałem do swojego Bascoma i trochę więcej zrozumiałem bo mozna sprawdzać referencje i skakać po kodzie. W przerwaniu co osiem taktów (nierealne) timer ma zliczać te twoje "niby" OCR. (Incr Licz_timera1 : If Licz_timera1 >= Ooo Then) Te OCR jest ładowane z tabeli gdzie najmniejsza wartość to 127 a najwieksza...
Witam To są dwa różne mkrokontrolery i nie da się w prosty sposób przerobić programu. 89S8252 nie posiada prescalera.
To już załatwia bascom - jest ustawione na Auto. co do sedna, sprawdziłem dziś na swoim układzie kanały 0-7 ADC następującym programem: [syntax=basic4gl] $regfile = "m2560def.dat" $crystal = 16000000 Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim Wart_adc1 As Word Dim Wart_adc2 As Word Start Adc 'AVCC bezpośrednio do 5V, AREF w powietrzu,...
Konfiguracja prescalera jest w TCCR0 B a nie TCCR0A.
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...
Pomysł pierwszy: zapisz poprawny wzór na zawartość rejestru okresu OCR #define PERIOD (F_CLK / PRESCALER) Pomysł drugi: załaduj poprawną wartość: OCR1A = PERIOD - 1; Pomysł 3: Takie użycie przerwania kompletnie nie ma sensu. Wyłącz przerwanie i testuj znacznik timera z rejestru TIFR w pętli głównej. Pomysł 4: Zamiast printf użyj czegoś prostszego -...
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ąć.
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...
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...
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
Po niewielkich zmianach powinno działać też na Attiny85. Wrzucam kod dla Attiny85 (nie testowany; nie mam jak): [syntax=c]//############################... // SPWM implementation for Attiny85 // Clock frequency 8MHz internal clock oscillator // High Fuse: 0xFF, Low Fuse: 0xE2 // // Signals generated: // - SPWM...
(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ą.
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ć,...
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.?
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=...
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...
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...
: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 ;)...
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
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...
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...
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.....
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...
Masz błąd w ustawieniach prescalera...ustawiając wszystkie bity CS ustawiłeś zewnętrzny zegar jako taktowanie Timera, ustaw na przykład sam CS12 i zobacz czy działa
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.
Tryb fast PWM działa w ten sposób, że licznik zaczyna zliczać od 0 do wartości 255 (w przypadku licznika 8 bitowego), przy każdym takcie zegara oprócz zwiększenia wartości licznika porównuje tę wartość z wartością rejestru OCR, jeżeli wartości są równe to neguje przypisane wyjście jednego z portów. Co z tego wynika - licznik zawsze zlicza w pełnym zakresie...
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...
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...
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...
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)...
Z mojego kodu: // ADC Prescaler Select Bits: Division Factor is 128 , for 16MHz CPU
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ę...
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...
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...
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 ;......
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 próbowałem wgrywać różne kody do obsługi i2c i lcd zmieniałem adresy, częstotliwość transmisji scl ,w lcd podłączyłem SA0 i SA1 do masy. Ten wyświetlacz jest skomplikowany do obsługi nie wiadomo jaki moduł nim steruje, bibliotek do niego brak inne ciężko przerobić nie wymagam wielkiej pomocy może ktoś mnie naprowadzi . Atmega ustawiona na 1MH...
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ę :/
W takim razie to problem polityczny. Pokaż aktualny kod i napisz czego od niego oczekujesz. Problem był chyba w za małym prescalerze. Zwiększyłem go zmienijąc kod w ten sposób TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02)...
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...
Odkopuje temat: jak wpisze w BNASCOM: Config Adc = Single , Prescaler = Auto , Reference = Internal to wyskauje, ze nie zna parametru Internal, a programuje 8515.
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...
16 bitowe timery w tym modelu mają trzy rejestry OCRxA/B/C i są dostępne trzy przerwania w trybie CTC nazywające się ISR(TIMER4_COMPA/B/C_vect){ Ale z noty katalogowej wynika że tryb CTC porównuje liczbę zliczeń z wartością zapisaną w OCRxA i tego nie da się zmienić więc jak wykorzystać pozostałe dwie funkcje wywołujące przerwanie (TIMER4_COMPB_vect...
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....
Witam Układ jak w opisie, a mam probem ze zrozumieniem jaka jest częstotliwość przed (preskanem) prescalerem (? ), z lektur wynika że to częstotliwość zegara procka (czyli w tym wypadku 16M). Tak , to jest prawda. Prescaler, to pewnego rodzaju 10-bitowy, binarny licznik z 'odczepami' (tu wykorzystywany jako dzielnik w zależności od podłączenia 'odczepu')....
(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);...
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);...
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.
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...
dobra mam, rozumiem już wszystko, chociaż te diody dziwnie się zachowują, w pierwszym cyklu pali się pierwsza, następnie podczas świecenia pierwszej zapala się na sekundę trzecia, potem trzecia gaśnie i pierwsza pali się przez sekundę, gaśnie, zapala się druga, gaśnie, zapala się trzecia, potem normalnie pierwsza, druga trzecia zapalają się i gasną...
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...
Dla mnie byka masz w przerwaniu timer0=1023 ? Ten zegar jest 8bitowy więc brana jest pod uwagę wartość młodszego bajtu w tym przypadku 255, Przepełnienie zegara następuje po jednym impulsie taktującym timer0 czyli po 1024 impulsach zegarowych (prescaler) nie masz tam 5s tylko $crystal/1024 . W przerwaniach unikał bym wywołania call i if . Ustaw flagę...
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...
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...
(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....
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ę.
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...
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....
Cześć Uczę sie obsługi PWM na mikrokontrolerze Atmega644pa, chcę w prosty sposób sterować obrotami silnika za pomocą PWM. Na początek próbuję sterować jasnością diody, co potem chcę analogicznie zaimplementować dla silnika aby uzyskać sterowanie obrotami. Napisałam poniższy program i modyfikowałam go przez dwa dni z zerowym sukcesem, bardzo proszę o...
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...
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...
\ 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...
$regfile = "m8def.dat" Config Pinb.1 = Output $crystal = 1000000 Config Timer1 = Timer , Prescale = 64 Config Timer0 = Counter , Edge = Rising On Timer1 Odmierz_1s Dim Licz As Byte , I As Byte Enable Interrupts Enable Timer1 Start Timer1 Timer1 = 65535 - 15625 Do Loop End Odmierz_1s: Timer1 = 65535 - 15625 Incr Licz If Licz = 5 Then Licz...
Sprawdź jak będzie się zachowywał program, gdy obliczenia będą całkowitoliczbowe: OCR1A=1556693UL/(ADC + 53); Sprawdź również, czy ADC nie jest taktowany zegarem o zbyt dużej częstotliwości: dozwolone maksymalne 1MHz[adc], minimalny dzielnik to /2, więc do 2MHz[cpu] nie trzeba dbać o prescaler (ale jakość pomiarów będzie porażająca). Jednak...
; ========================================... 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]
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,...
Dzięki za odpowiedzi, nie przesadzajmy, myślę, że Atmega jest w zupełności wystarczająca i pod nią na razie chciałbym to zbudować. 4 - 6 wyjść PWM w zupełności mi wystarczy, czyli praktycznie tyle ile ma Atmega, dużej rozdzielczości nie potrzebuję, prawdę mówiąc skok co 5% byłby w zupełności wystarczający, a częstotliwość pracy o ile nie wpływa na nic...
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, 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ę...
[syntax=c]Error RTC_Initialize (struct RTC_init *initParemeters) { Error ret = NO_ERROR; TCCR2 = 0; //stop timer initialized = false; if (NULL != initParemeters) { lastInitParams.onSecChangedCbf = initParemeters->onSecChangedCbf; } else { lastInitParams.onSecChangedCbf = NULL; } //AS2 = 1 - asynchronous mode. ASSR |= 1<<AS2; //OCR2 = 128 -...
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...
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);...
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...
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;...
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ń....
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...
Teraz masz prescaler ADC ustawiony tak że zegar ADC ma 125kHz. Zegar ADC- a nie inne zegary. Zegar ADC ma mieć 50-200kHz. Jak Ci mniej zależy na dokładności niż na szybkości- można dać zegar ADC na 250kHz. A oprócz tego- możesz zrobić tablicę albo bufor dla UART-a.
Wygląda zupełnie fatalnie - bezsensowne użycie zmiennego przecinka do prostych obliczeń, a całość jest równoważna zapisowi: pomo = OCR1A * 8;
Według dokumentacji, Atmega może być taktowana częstotliwością maksymalnie 16MHz i w tym przypadku może próbkować częstotliwością ok. 15kHz, co umożliwia zarejestrowanie sygnału ok. 7kHz (chodzi o bardzo krótki sygnał, góra 4096 próbek przy jednej rejestracji, graniczeniem jest wielkość pamięci wewnętrznej), wtedy odczytuje się pełne wartości 12-bitowe....
Doczytałem w dokumentacji, iż ten układ ma rozbudowany moduł Watchdoga. I jeśli nawet nie jest wykorzystywany, to należy go wyłączyć. Niezależnie od fusbitu WDTON. [syntax=c]cli(); //__disable_interrupt(); wdt_reset(); //__watchdog_reset(); MCUSR &= ~(1<<WDRF); /* Clear WDRF in MCUSR */ WDTCSR |= (1<<WDCE) | (1<<WDE); /* Write...
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...
atmega prescaler atmega prescaler timer prescaler bascom
rs485 konwerter skoda superb drzwi otwierać lampy błyskowe instrukcje
Pobudzenie baterii litowej – jak bezpiecznie reaktywować ogniwo Li-ion, LiPo, LiFePO4 LG TV nie odtwarza filmów DivX z USB - przyczyny