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...
https://obrazki.elektroda.pl/4868547700_... Dzisiaj zrealizuję projekt na malutkim, ośmionóżkowym mikrokontrolerze PIC w obudowie DIP8 oferującym skromne 3.5kB pamięci Flash. Co więcej, do komunikacjami z peryferiami użyję tylko dwóch pinów - całość opierać się będzie o I2C. W oparciu o nie uruchomię kontroler wyświetlacza/klawiatury oraz...
APB jest tak samo taktowane jak przy dzielniku 1 czyli zegarem 84MHz. Jeśli wnioskujesz o tym po taktowaniu timerów należących do APB1, to nie bierzesz pod uwagę takiego automatycznego mnożnika x2 na taktowaniu liczników tych timerów. Zachowanie tego mnożnika (mnoży x2 dla wszystkich ustawień preskalera APB1, oprócz /1) powoduje że dla ustawień preskalera...
Wchodzisz na stronę https://www.mcselec.com/ i po lewej przycisk Updates. Logujesz się i ściągasz cały plik instalacyjny. Była jakaś przerwa w tych aktualizacjach, ale teraz nowe wersje już da się później aktualizować z poziomu programu. Post wyżej wrzuciłem wersję juz skompilowaną pod 2086. To dlatego że coś tam było w międzyczasie poprawiane w konfiguracji...
$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...
Dokładnie aby wyliczyć potrzebny czas potrzebujesz pełnego wzoru: T = 1/(fcpu/PRESCALER/(65536-LICZNIK)) gdzie: fcpu - taktowanie procesora, PRESCALER - stopień podziału preskalera, LICZNIK - początkowa zawartość licznika. T = 1/(1000000/1024/(65536-6942)) = 60.000256s Wszystko odnosi się do licznika 16-bitowego. Dla licznika 8-bitowego wzór jest podobny:...
Dar.El - mógłbyś nieco szerzej o swoim pomyśle ?? bo jakoś nie zaskoczyłem - skoro ustawi się prescaler na 1024 to przy kwarcu 11.0592 MHz wychodzi inaczej niż 10 ms ...chyba że coś źle liczę .... Dodano po 1 A ja śmiem twierdzić , że kod z 1-szego postu , będzie zmieniał stan na PORTC , co 676 przerwań Tak naprawdę to masz rację ;), ale chodzi mi o...
Np. tak: Ustawiasz zegar na 1Mhz W main() ustawiasz: Zezwolenie na obsługę przerwań Zezwolenie na obsługę przerwań od Timer0 (albo Timer2) Prescaler na 1 Sprawdzenie jakiejś flagi A w obsłudze przerwania ovf od Timer0 (albo 2): Do rejestru Timer0 (albo 2) wpisujesz 156. Wtedy przerwanie występuje co 0.1ms i ustawi jakąś flagę. Wtedy w main() decydujesz...
zapominasz ładować konkretną wartość do licznika przed jego uruchomieniem. obliczasz ją (w podstawowym trybie) mniej więcej tak: obliczasz czas jednego cyklu 1/fclk np dla 1Mhz 1us bierzesz teraz czas, jaki chcesz odliczyć, i dzielisz go przez czas jednego taktu, dostaniesz wtedy ilość potrzebną do zliczenia.np 0,020s/0,000 001 = 20000 jak wiesz licznik...
2. mirku, fajnie jest tak jak piszesz ale w dowolnym projekcie nie wiesz z góry, które bity będą jedynkami a tu zauważ jest wszystko po kolei :), po Twojemu się tak nie da. Nie, no zaraz - jak to nie wiem z góry, które będą jedynkami. To chyba podstawa np gdy chce się ustawić jakiś tryb timera np ten CTC, to patrzę do noty i sprawdzam które bity WGM...
Witam, W Arduino posiadam 6 sprzętowych kanałów PWM. Jednak potrzebuję obsłużyć ich 7. Podpowiedziano mi, że mógłbym użyć dekodera (np. BCD -> DEC), jednego timera i przerwaniami obsługiwać kilka serw. Zacząłem kombinować i stworzyłem większy niż kilkulinijkowy kod, który kompletnie nie działał. Zacząłem go stopniowo upraszczać, aż doszedłem właściwie...
To powinno być trochę prościej. Propozycja poniżej. [syntax=c]// F_CPU musi być zdefiniowane przed nagłówkami, które jej używają. #define F_CPU 3000000UL // Włączanie plików nagłówkowych int main(void) { // Ustawienie rejestru CLKPR na podział przez 4 (0b00000010) CLKPR = (1 << CLKPCE); CLKPR = 2; // Od tego momentu procesor pracuje z częstotliwością...
Witam . Napisałem ( prawie) sobie na ww procesor program w asm i bascomie który ma robić za zamek otwierany kartą . W bascomie wszystko działa w 100 % według założenia jednak w asm mam taki problem że układ sam zmienia swoje taktowanie (ponad 2x) przez co wszystkie funkcje czasowe nie pracują jak powinny . Nie było by w tym nic niezwykłego ( ustawiony...
Witam Napisałem prosty program używający timera1 i timera 2 do zliczania częstotliwości, Chciałbym użyć dodatkowo serwa do mojego projektu ale używając intrukcji Servo coś nie tak dzieje się z serwem . Po włączeniu zasilania ciągle pracuje i próbuje przekręcić się o 360 stopni "ciągle pracuje". Kiedy w kodzie spełniony jest warunek i uruchamia się komenda...
Cześć, Złożyłem układ według schematu http://obrazki.elektroda.pl/5126052200_1... Za nic jednak nie mogę zmusić ich do poprawnej komunikacji. Kod Atmega8 (TWI Master): [syntax=c] #define F_CPU 12000000UL #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <util/delay.h> #include <inttypes.h>...
Cześć Problem polega na tym że ADC1 współgra z DMA2 w trybie Injection, czy to jest związane z tym że nie nie ma sensu czegoś takiego robić, ze względu na to że w tym trybie wszystkie dane trafiają do różnych rejestrów JDRx, i nie ma "zagrożenia" overrunem? Konfiguracja wygląda następująco ADC1 w trybie Injection, wyzwalany zewnętrznie przez sygnał...
najprościej to będzie tak, mało profesionalnie bo bez timera i przerwań ale będzie działać, a na razie koledze o przerwaniach nie mówimy za dużo bo to na następną lekcję. Dim czas as word Config Adc = Single , Prescaler = Auto, Reference = Internal Enable Interrupts Start ADC config pinb.0 = output do czas = getADC(0) set potrb.0 waitms czas...
Witam, $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output Config Pind.1 = Output Config Timer2 = Timer , Prescale = 128 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 8 Cls Cursor Off Portd.0 = 1 Portd.1 = 0 Set Portd.4 On Timer2 Czas1s Dim Licz8ms As Byte Dim Wartoscpwm As...
EEPROM nie musi być na 1-WIRE, obecnie używam I2C. Program w zasadzie już działa tylko muszę dorobić obsługę przerwania wyzwalanego przyciskiem (INT1), które ustawi flagę zakończenia działania, poczeka na koniec pętli, zamknięcie pliku i wyłączy zasilanie (a przynajmniej zawiesi program i głęboko uśpi procesor). Jest tylko jeden problem - zostało mi...
Tu jest cały kod łącznie z zakomentowaną obsługą LCD- może coś jeszcze jest źle. #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include "HD44780.h"//to jest radzia #include "TWI.h" //i to też jest radzia #define LICZBA_KANALOW 4 //cztery kanały- tu można zwiększyć ilość...
Witam Mam płytkę sterującą dwoma kanałami PWM - przez ULN oraz MOSFETY. Płytka ma dwa wejścia oraz wejście czujnika PIR - INT1. Ma przede wszystkim sterować włączaniem taśmy LED 12V z czujnika PIR ( oprócz tego z drugiego wejścia ). LED włączona przez PIR ma docelowo świecić określoną ilość czasu ( zależną od natężenia światła ) i się wyłączyć. Żeby...
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.
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, Kilka uwag: 1. nie skonfigurowałeś trybu pracy timerów (rejestry TCCRxA, TCCRxB) Po resecie timery pracują w trybie "Normal", natomiast w twoim przypadku znacznie lepszy byłby tryb "CTC" 2. ustawiłeś prescaler a 1 a nie na 1024 3. brak zachowania stanu PSW i rejestrów w przerwaniach. W twoim konkretnym przykładzie nie spowoduje to błędu ale już...
Skąd wziąłeś pomysł na wstawki z FLASH->ACR? Czytam RM0401 Jest dedykowany do tego rozdział: 3.4.1 Relation between CPU clock frequency and Flash memory read time Latency zależy od częstotliwości taktowania oraz napięcia zasilania, tak w skrócie. Co do ustawień zegara dla STM32 to warto zapamiętać sobie schemat działania, który wynika bezpośrednio...
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.
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...
Hej, Jeśli chcesz płynnie regulować współczynnik wypełnienia to musisz wybrać jeden z modów PWM i wtedy będziesz skazany na jedną z kilku częstotliwości wynikających z zegara systemowego i tego jak ustawisz prescaler, Jeśli chcesz płynnie regulować częstotliwość to wybierasz mod CTC(clear timer on compare) ale będziesz miał wtedy stałe wypełnienie,...
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.
Witam, Nic nie przeszkadza w tym, że to bascom. Prescaler jest ustawiony na 64 więc zanim licznik zdąży zwiększyć swoją wartość to uC już załaduje do niego odpowiednią wartość. W Twoim programie jest pare błędzików, które może nie wpływają na dokładność pomiaru, ale są głupie :) konfigurując porty, dla pewności możesz napisać: set ddrb.2 set ddrb.3...
Mozna spokojnie. U siebie (tez Tiny2313) zmieniam podczas pracy nawet taktowanie. Jeśli uC u mnie pracuje na 8MHz bo musi wygenerować rózne wysokie częstotliwości to podczas snu brał 2mA. Teraz przed uśpieniem dobieram się do rejestru CLKPR - Clock Prescale Register. Zasada przestawiania jest podobna jak w WD. Trzeba najpierw ustawić CLKPCE: Clock Prescaler...
Witam, ATtiny13, taktuję go zegarem wewn 128kHz, prescaler 8, TIMER0 generuje przerwania co 1,25msec. W tej procedurze obsługi przerwania mierzę napięcie na ADC2. Dokładność pomiaru nie jest krytyczna. Moje pytanie dotyczy konfiguracji ADC, mam w tej chwili: Config Adc = Single , Prescaler = 2 , Reference = Internal Jaką częstotliwością jest w tej sutuacji...
Przecież prescaler również można zmienić. Po za tym. Przecież można ustawić prescaler na CLK/8. A potem zmieniać wartość reload i otrzymasz zakres od 1 Hz, do 1 Mhz. W końcu nie wiem, czy zakres ma być 1 do 1 MHz, czy 1 k do 100 kHz? Dla tego drugiego sprawa jest banalnie prosta. Ustawiam prescaler na wartość CLK/8. DO OCR0 wpisuje wartość 20, więc...
Zgadzam się z przedmówcą. Fusebitów raczej nie dotykaj. Ew. EESAVE. Rdzeń możesz taktować bezpośrednio z RC2MHz (domyślnie włączony), a jeżeli potrzebujesz innej częstotliwości, to możesz uruchomić RC32MHz (wystarczy ustawić bit RC32MEN) i poczekać na RC32MRDY. Przełączenie zegara jest zabezpieczone CCP 0xD8. Jeżeli 32MHZ nie pasuje, to PLL można dostroić...
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...
Zobacz w nocie apliacyjnej procka jaki jest optymalny zegar dla adc i taki nastaw. Jezeli jest tak jak w attiny88 to powinien byc w zakresie 50-200kHz W nocie jest 50-200kHz i prescaler ustawiłem na 128 dla 75kHz, jednak fabrycznie zegar ustawiony jest na 9.6MHz/8, porty i opóźnienia widzą zegar 1.2MHz. Nie wiem czy ADC widzi zegar 9.6MHz i zostawić...
Excray właśnie nad czymś takim myślałem. I nawet poczyniłem wstępne obliczenia po których wyszło mi że timer0 przy kwarcu 8MHz i prescaler ustawiony na 1024 przepełni się po 0,03276800s. Tylko jak wyliczyć ile muszę zliczyć tych przerwań aby wyszła 1s? Moje wyliczenia są kiepskie bo cały czas wychodzą ułamki. Pewnie trzeba ładować jakąś wartość początkową...
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...
Witam serdecznie mam następujący problem. Wgrywam następujący kod do attiny: [syntax=c]#include <stdio.h> #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> SIGNAL(SIG_TIMER1_COMPA) { PORTB=0xff; _delay_ms(20); PORTB=0x00; } int main() { OCR1A = 31250; //Set OCR1A TCCR1B = (0 << WGM13)|(1 << WGM12)|(1...
Ustawiłem prescaler na 1 MHz ale jeszcze coś nie tak :( Help me :)
Źle sobie popatrzyłem tzn miałem źle skomentowany kod - poniżej urywek tego z czego ja korzystam w swoim programie: No to w końcu na ile ten prescaler jest ustawiony? e marcus
A przestawiłeś fuse bits? Domyślnie chyba jest ustawiony prescaler przez 8.
1. fusebity - bity konfiguracyjne procesora - arduino nie daje do nich dostępu (jak każdy inny bootloader) można je sprawdzić tylko z poziomu programatora ISP lub układu ft232rl odpowiednio podpiętego do złącza ISP i obsługiwanego przez avrdude lub, jeśli to gotowe arduino to w dokumentacji w sekcji odnośnie przygotowania płytki i procesora sa podane...
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...
jak zrobić żeby przerwanie od timmera 0 w atmedze8 było taktowane kwarcem zegarkowym(tzn. podłączam kwarc w miejsce xtal 1,xtal2 i skąd timmer 0 będzie wiedział ze ma być taktowany takim kwarcem) i jak dobrać preskaler itd żeby po zapełnieniu licznika odmierzana była 1s używam programmer's notepad. Kwartz ( quartz/kwarc) zegarkowy podłączony do m8...
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, 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...
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...
Musisz ustawić prescaler i wpisać wartość counter0 lub timer0 żeby przerwanie przychodziło co określony czas. Przejrzyj dobrze helpa tam to jest opisane.
Ah.. Jeśli napiszemy taki program (który rozjaśnia diodę) $regfile = "attiny2313.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Portd.6 = Output Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portd.1 , Rs = Portd.0 Config Timer0 = Timer , Prescale = 1 Enable Timer0 On Timer0 Software_pwm Enable...
prescaler atmega prescaler bascom prescaler atmega8
programy lokalizacji połączenie szeregowe głośników zamek stacyjki
schemat ekspresu delonghi grzejnik olejowy
Citroen C3 – ciężko wchodzące biegi na zimnym silniku, lewarek, olej 75W-80, wybierak Renault Clio II 1.2 16V - Check Engine i brak reakcji na gaz