Witam, Próbuję skonfigurować dwa przerwania output comare no output na dwóch kanałach timera 1. Korzystam z płytki nucleo stm32f103rb. Procesor taktuję zegarem 8MHz. Korzystam z CubeMx i biblioteki HAL. Preskaler i ARR ustawiam dla całego timera, a dodatkowo Pulse dla poszczególnych kanałów, tak aby uzyskać jedno przerwanie z częstotliwością 1Hz, a...
Przecież można to zrobić programowo bez dodatkowych tranzystorów. Wystarczy skonfigurować pin Output Compare w tryb inverting mode. Nie odpowiem teraz dokładniej jak to zrobić, bo nie znam typu mikrokontrolera i nie wiem, który timer jest używany do generowania PWM.
3 Konfigurujesz Timer w tryb input capture taki sposób aby wyzwalał transfer DMA na którymś tam sobie kanale. Nie prościej właśnie output compare i mieć transfer co ileś tam taktów? 4\/3!!
Jest gdzieś skrótowa dokumentacja do ustawień CubeMX, aby zaczynający programista się nie zniechęcił? Nawet jeśli korzystasz z CubeMX to zacznij najpierw od jakiejś literatury. "Poradnik Szczywronka" takie rzeczy dość łopatologicznie tłumaczy tzn. podstawy działania timerów (i nie tylko). Na pierwszym zrzucie mamy włączony OPM na drugim wyłączony....
Pomóżcie, bo nie mogę doczytać, jak się kasuje flagę przerwania od output compare match w ISR? (...) W dokumentacji stm32 zapomnieli napisać czy 0 czy 1 Npalisali :) kasuje się na pewno poprzez zapisanie bitu zerem. Przy opisie rejestru masz zawsze odpowiedni "komentarz" przy każdym bicie. W tym przypadku rc_w0. read/clear (rc_w0) Software can read...
No i to działa, tylko na odwrót (OCR0B = 255 oznacza całkowicie wygaszony LED). W zasadzie jest to poprawne działanie przy takim podłączeniu diody. To jest poprawne, czy nie jest - zdecyduj się :) Odpowiadam: Nie jest poprawne. 1. w nocie katalogowej Attiny13 tryb PWM ustawia się rejestrami COM00 i COM01, tutaj mam tylko COM0B1 - to zapis zapożyczony...
[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 -...
Rysunek chyba jakiś mały wymowny, tam znajdziesz odpowiedź (; A jak nie, to ustawienia rejestrów do wglądu, bo tak to się nie dogadamy. Znajdziesz to w TIMx w rejestrze CCMRx, bit OCxCE. Fragment opisu: OC1CE: Output Compare 1 Clear Enable 0: OC1Ref is not affected by the ETRF input 1: OC1Ref is cleared as soon as a High level is detected...
POWERSAVE (ATMEGA88) This mode is identical to Power-down, with one exception: If Timer/Counter2 is enabled, it will keep running during sleep. The device can wake up from either Timer Overflow or Output Compare event from Timer/Counter2 if the corresponding Timer/Counter2 interrupt enable bits are set in TIMSK2, and the Global Interrupt Enable bit...
Po 1) użyj znaczników [code]... Po 2) funkcje inline _delay_us i _delay_ms muszą być wywoływane z argumentami o wartości znanej w trakcie kompilacji (stałe) - było o tym wielokrotnie na forum. [url=http://www.nongnu.org/avr-libc/user... Po 3) co do inline asm to zobacz [url=http://www.nongnu.org/avr-libc/user...
To właśnie zostało uruchomione - musi działać. Pisane pod WinAVR [syntax=c] #define SET(port, bit) port|=(1<<bit) #define RESET(port, bit) port&=~(1<<bit) #define NOT(port, bit) port^=(1<<bit) //Przerwanie wywolywane 100 razy na sekunde ISR(TIMER1_COMPA_vect)// == SIG_OUTPUT_COMPARE1A { NOT(PORTD,PD6); } int main (void) { SET(DDRD,PD6);...
A masz gotowca: Set Tccr1a.7 // Set OC1A on Compare Match (Set output to high level). Set Tccr1a.6 Set Tccr1a.5 //Set OC1B on Compare Match (Set output to high level). Set Tccr1a.4 Set Tccr1a.0 //WGM10 Fast PWM 8-bit Set Tccr1b.3 //WGM12 Pwm1a = 0 Pwm1b = 0 Set Tccr1b.cs00 //Prescale = 1
Czego oczekuje NAZE Ci niestety nie powiem. Poszukaj informacji w manualu. Po wyłączeniu nadajnika dioda przy attiny powinna zgasnąć, bo brak PWM to brak PCINT, a tam jest załączana. Możesz dopisać symulację dodatkowych kanałów i sprawdzić, czy coś to pomoże. Dodaj sobie np. drugi output compare do tego licznika, który już masz. Jak zliczysz 6 wyłączeń...
Jest jedna rzecz której nie do końca rozumiem. Jeżeli nie odblokuję globalnych przerwań w SREG, a odblokuję sobie OCIE0A: Timer/Counter0 Output Compare Match A Interrupt Enable w trybie CTC: Clear Timer on Compare Match (CTC) mode. to mogę sprawdzić czy nastąpiło porównanie w ten sposób: https://obrazki.elektroda.pl/6663605100_... The...
Do pasma EKG układ w zupełności wystarczy. W kwestii punktu 4, chodziło mi o taką konfigurację licznika: - licznik zlicza w jednym kierunku, np. w górę. - Czas pełnego okresu (PSC i ARR) to trochę więcej niż czas transmisji + impuls LDAC (=210ns). - Do jednego z rejestrów porównujących ładujesz wartość, która odpowiada impulsowi LDAC, a wyjście konfigurujesz...
Kolega excray chce Ci powiedzieć, że kiedy ustawisz timer w tryb CTC, to flaga OCF1B (czyli ta od Output Compare B) też jest ustawiana, tylko z przesunięciem czasowym równym wartości rejestru OCR1B (chyba że do OCR1B wpiszesz wartość większą niż do OCR1A - wtedy flaga nie zostanie ustawiona, bo nie dojdzie do porównania). Od siebie dodam, że alternatywnie...
Mam pytanie, do czego służy pin OC1A i OC1B w mikrokontrolerze ATMega8535. W dokumentacji jest napisane: OC1A, output Compare Match A output: The PD5 pin can serve as an extrernal output for the Timer/Counter1 Output Compare A... ale zabardzo nie wiem co to znaczy :/
-Można dodać linki do kalkulatorów programowalnych online. -Kalkulator dla timerów. Podajesz częstotliwość taktowania i wymagany czas między przerwaniami, uzyskujesz prescaller oraz wartość przy której timer wywołuje przerwanie (w STM nazywa się to output compare). Trzeba by było zrobić opcje dla wszystkich popularnych MCU, bo np. w AVR timery działają...
PWM ustawiasz na przykład w tryb Fast PWM (patrz tab. 17-8): Mode 3 ustawiając: - bity WGM20 i WGM21, - preskaler bitami CS2x - dla wyjścia OC2A ustawiasz: -- pin jako wyjście rejestrem DDRx -- z tabelki "Table 17-3. Compare Output Mode, Fast PWM Mode " wybierasz tryb bez negacji sygnału ustawiając bit COM2A1 dzięki czemu będziesz miał sygnał w postaci...
to coś słabo oglądałeś DSa.. Output Compare sprawdza się jako PWM w zupełności na moje potrzeby więc dla mnie temat jest zamknięty.
Witam udało mi się ustawić tak jak chciałem Kod wygląda tak: // main TCCR2 |= (1 << WGM12); // Ustawia timer1 w tryb CTC OCR2 = 250; // zliczanie do tej wartosci TCNT2 = 0; TCCR2 |= (1 << CS20) | (1 << CS21) | (1 << CS22); TIMSK |= (1 << OCIE2); // zezwolenie na przerwania CTC //...
Do takiego zadania można lepiej dobrać mikrokontroler i wtedy nie ma tyle roboty ;) Polecałbym zastosowanie mikrokontrolera z rodziny HCS12 - chociażby dostępny w samplach MC9S12A64, posiada 8 16bitowych kanałów Input Capture/Output Compare, do tego 4PWMy 16bitowe (8 8bitowych), ponadto na wolnych kanałach Output Compare można zrealizować PWM (też 16bitowy)....
Po prostu nadawany sygnał kluczuje nośną o czestotliwości ok. 38kHz. Można to zrobiź programowo, lub wykorzystać nieco większego AVRa, który to potrafi zrobić sprzętowo. Np. w DS do ATMegi 1280 zobacz sekcję "Output Compare Modulator".
Atmega32 ma rejestr TIFR, czyli usuń "1". [syntax=asm]; Clear interrupts (if any happened). sbi _SFR_IO_ADDR(TIFR), OCF1A[/syntax] ; TIFR - Timer/Counter Interrupt Flag register .equTOV1= 2; Timer/Counter1 Overflow Flag .equOCF1B= 3; Output Compare Flag 1B .equOCF1A= 4; Output Compare Flag 1A .equICF1= 5; Input Capture Flag 1 edit. Jeszcze TIMSK zamiast...
http://maxembedded.wordpress.com/2012/01... akapit OCR0 – Output Compare Register do przeczytania i dla liczników 8 bitowych maksymalna wartość to 255.
ElKuba, a czy atmega8 i AtMega16 masz fabrycznie nowe, czy od kogoś ? Może ktoś wpisał fuse Dodano po 5 nie zauważyłeś w w ATMega16 pd7 ma też drugą funkcję OC2 (Timer/Counter2 Output Compare Match Output)
Już poprawiłem program. Rzeczywiście namieszałem. Mam ustawiony timer 4 jako pwm i chciałbym móc go zainicializować w trybie "GATED Mode" pinem PB6. Zgodnie z datasheet tryb OPM może działać jako PWM lub Output Compare (str. 611). Wystarczy uruchomić w rejestrze CR1 bit OPM.
PWM generuje przebieg o zmiennym wypełnieniu, CTC może generować tylko różne częstotliwości przy wypełnieniu 50% i przerwanie okresowe. Oczywiście korzystając z dodatkowych kanałów output compare można zrealizować zbliżoną funkcjonalność. Dlatego na dobrze zaprojektowanym mikrokontrolerowym timerze można robić na prawdę cuda i to całkowicie sprzętowo.
Z tego co wyczytałem to rejestr TCCR2 w M168 jest podzielony na 2 rejestry TCCR2A i TCCR2B, zgadza się ? Gdzie to wyczytałeś? W dokumentacji? Jeśli tak to w jakim celu pytasz się, czy to prawda? :D Zestawienie rejestrów związanych z ustawianiem Timer2: 18.11 Register description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
Z programowaniem w C za pan brat nie jestem ... Z ATMega32 chyba też nie :-P Output Compare Register (OCR0) are 8-bit register
attiny26 jest idealny do tego - zresztą jak każdy posiadający ADC, tak samo jeśli chcesz sterować 2 diody LED - bo masz w nim , wg noty jak na życzenie: 2 High Frequency PWM Outputs with Separate Output Compare Registers hmmm schemat jakiego wejścia? chodzi ci o schemat dzielnika rezystorowego ???????????
Użycie timera0 dla attiny13 - z przykładów arduino dla attiny13 czyli ach te straszne przerwania. [syntax=arduino] 9.6MHz / 1024 = 9370 Hz We divide the 9.6 MHz clock by 1024 1/9370 = 0.0001067s Period time 256 * 0.0001067 = 0.027315 0.027315 * 37 = 1.01065 ≈ 1s X = 1.01065 / 0.027315 where X is approximately 37 ****************************************...
Zasada jest prosta: - jeżeli nie jesteś pewien, a nie chce Ci się sprawdzać datasheet, ustawiasz pin jako wyjście i po kłopocie, - porawne rozwiązanie - sprawdzamy datasheet: The general I/O port function is overridden by the Output Compare (OC0) from the Waveform Generator if either of the COM01:0 bits are set. However, the OC0 pin direction (input...
Wykonuje przerwanie na procesorze Atmega128 pisząc program w C output compare i stosuje uchwyt w przerwaniu SIG_OUTPUT_COMPARE3A no i w tym trybie przerwanie mi działa jeżeli użyje uchwytu przerwania SIG_OUTPUT_COMPARE3B (odpowiednio) pozmieniam rejestry to niestety nie działa oto kod procedu najważniejszych: SIGNAL (SIG_OUTPUT_COMPARE3B) {...
Tryby CTC w ATMega32 są dwa. Ustawiasz WGM12 w rejestrze TCCR1B i wpisujesz wartość końcową do OCR1. Albo wpisujesz WGM12 i WGM13 do TCCR1B i wpisujesz wartość końcową do ICR. A co z obsługą przerwania? Czy dobrze rozumuję, że wystąpi ono odpowiednio Output compare dla 0CR1 i Input capture dla ICR?
Jak za pomocą funkcji Input Capture wygenerować PWM? mam takie pytanie na egzamin no i się zastanawiam... bo wiadomo, o wiele łatwiej jest wygenerować PWMa za pomocą Output Compare, a czy da się to zrobić za pomocą IC? myslałem o tym, żeby wyjscie na którym PWM ma być wygenerowany, podłączyć do wejścia IC, tylko co dalej... tak mi chodzi po głowie,...
Witam. Przy 4 Mhz ustawiasz dzilnik do licznika na 256 w rejestrze TCCR0. Następnie ustawiasz 125 w OCR0. To jest górna granica licznika, która go resetuje i jednocześnie wystawia przerwanie. Teraz licznik liczy do 125 i generuje przerwanie OCF0 - Output Compare Flag 0 w rejestrze TIFR. Wtedy przerwanie generowane jest co 32000 taktów zegara, czyli...
Inne niezupełnie optymalne rozwiązanie: tryb PWM, włączyć preload rejestrów CCRx, zapisać do nich 0, wywołać update i dopiero wpisać żądane wartości. Przy następnym zdarzeniu update licznik zacznie generować impuls; od tej chwili aż do zrównania CNT z ARR mamy czas na ponowne wpisanie zer do rejestrów CCRx (w przerwaniu lub przez DMA). Zalety to możliwość...
dobra, obiecany gotowiec i przy okazji manual pt "jak korzystać z manuala". W naszej przeglądarce wpisujemy adres www.google.pl Wpisujemy tam Atmega8, po załadowaniu się strony z rezultatami klikamy w link posiadający w tytule "datasheet" i sprawdzamy czy jest on z atmela. Po pomyślnym otwarciu się datasheetu z indeksu po lewej stronie wybieramy 16-bit...
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...
bity b.7 = COM1A1 i b.6 = COM1A0 dotyczą wyjścia OC1A bity b.5 = COM1B1 i b.4 = COM1B0 dotyczą wyjścia OC1B a ich znaczenie to gdy 0 i 0 wyjścia OCX są odłączone od timera i pełnią rolę portu in/out zależnie od ustawień kierunku. 0 i 1 to "toogle" czyli OCX zmienia się stan na przeciwny gdy "compare match" nastąpiło porównanie. 1 i 0 to "clear" czyli...
Hej, Generalnie w przykładzie jest identycznie, jedynie włączenie timera było w innej sekwencji, ale to nic nie zmieniło ;( /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 65535; TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;...
Witam Zastanawia mnie pewna rzecz związana z projektem na stm32f103rct6. Wykorzystuje mikrokontroler z jednoczesnym użyciem usb i tim1. Usb(dp) i tim1(ch4) współdzielą pin. Ja z tim1 chce używać tylko kanałów 1 i 2. Po przeczytaniu dokumentacji da sie wprowadzić wyjścia compare match w stan idle (co bym zrobił w przypadku kanału 4). I w tym miejscu...
Poprawiłem na timer2, kompiluje się, proteus też nie pokazuje błędów ale nic się nie wyświetla. Dobrze naniosłem poprawki przy zmianie z timera0 na timer2? /* **Project:Delay Functions **Purpose:Define a series of functions to delay for a specified ** time -- every millisecond or every ~50 microseconds. ** **Author: Steven Pickles **Date:...
Wczytałem sie dokładniej w dokumantację i teraz widzę jakie głupoty popisałem poprzednim razem :-) Mam nadzieję że teraz już załapałem. W TINY13 są dwa rejestry konfiguracyjne do TIMER0: TCCR0A=COM0A1 , COM0A0 , COM0B1 , COM0B0 , - , - , WGM01 , WGM00 TCCR0B=FOC0A , FOC0B , - , - , WGM02 , CS02 , CS01 , CS00 Jak sądzę, żeby CTC działało na wyjściu OC0A...
Robienie nadajnika IR na AVR jest dość proste. Przede wszystkim polecam ze strony www.atmel.com/avr w dziale Application Notes do przejrzenia właśnie taki projekt. Tam jest użyte Attiny 28 ale to nie ma tak naprawdę znaczenia. Generalnie podpinasz diodę do jakiegoś pinu output compare i na tym pinie 'mrugasz' ją trybem na przykład CTC z częstotliwością...
Witam mam problem z miganiem dwoma diodami, ale czysto sprzętowo, za pomocą timera 3 w trybie outpu compare. Pisząc program wzorowałem się na kodzie ze strony http://en.radzio.dxp.pl/stm32vldiscovery... . Mój kod różni się tylko tym, że nie wykonuje tutaj remmapu, ponieważ w moim uC (stm32f103vct6) TIM3_CH3 i TIM3_CH4...
Prosty program na AVRStudio : #include <m16def.inc> ; Prohibits use of non-implemented instructions (ATmega16) .dseg .org SRAM_START .cseg ;—————R...
Po pierwsze: jak często jest ono zgłaszane? Przerwanie jest zgłaszane z częstotliwością 1 kHz. DCMI odbiera dane non stop. Po trzecie: co robi AKTUALIZUJ_PWM (pwm_lookup_table aktualizuje rejestr PWM poprzez wywołanie funkcji [syntax=c]TM_PWM_SetChannelPercent(&... TM_PWM_Channel_1, 100-x);[/syntax] która wywołuje [syntax=c]TM_PWM_Result_t...
Staram sie uruchomić PWM na TIM4. Chodzi mi o prosty PWM generujący na PB6 częstotliwość w zakresie 1 - 5000Hz, ze wsp.wyp. 50% (na poczatek), ale chyba nie rozumiem działania timera w tym trybie (troche bardziej skomplikowane niż w AVR. Oczywiście wszystko bez bibliotek ;) ale nie działa. Poniżej kod - może jest tam za dużo, bo już włączam co się da,...
Nie zerowałem konkretnych flag przerwania od CCRx. Dziękuję za pomoc. Działający kod dla stm32f05: [syntax=c]timer2_init(void) RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->PSC = 4799; // Set prescaler TIM2->ARR = 100; // Auto reload value TIM2->CCR1= 20; TIM2->CCR2= 40; TIM2->CCR3= 75; TIM2->CCR4= 99; TIM2->CR1|=TIM_CR1_ARPE ; //AUTO...
Witam, piszę sobie taki oto kod i spotykam dziwne zachowanie układu. W skrócie: Jest sobie kontrolny debug na terminal , a po nim jest wywołanie funkcji. W efekcie podejrzana funkcja sprawia że debug który w kodzie jest przed nią się nawet nie pojawia. Sęk w tym że w podejrzanej funkcji nawet gdy użyję debugu na samuśkim jej początku to i tak go nie...
ogólnie żecz biorąc oznaczenia pwm'a same mówią co i jak OC - OUTPUT COMPARE czy li wyjście porównania 1 - liczba oznaczająca z któego timera kożysta ten PWM następnie występuje litera lub jej brak jeśli dla daneg otimera jest tylko jeden PWM czyli OC1A i OC1B to PWM'y timera1 i ich zmienne nazywają się PWM1A i PWM1B OC0 to PWM timera0 zmienna to chyba...
Wydaje mi się, że nie dobrze zrozumiałeś co to jest One Pulse Mode, dlatego masz problem z konfiguracją W tym trybie nie ma konieczności wyłączenia timera poprzez: TIM2->CR1 &= ~TIM_CR1_CEN; bo on sam się wyłącza (przestaje liczyć) zgodnie z ustawieniami. Ja do tego zadania użyłbym trybu PWM i zrobił to jak w kodzie: https://obrazki.elektroda.pl/6412232700_...
I teraz czy warto podłączyć go pod wyjscie jakiegoś Timera czy też Countera? Jeśli już to pod wejście timera. Możesz też pod wejście input capture, wejście przerwania zewnętrznego, albo pod dowolny pin i wtedy z odpowiednią częstotliwością go odpytywać. Dwa PWM mam wbudowane, muszę jeszcze jeden dopisać. Czy jego wyjście powinno być na wyjściu Timera...
Witam. Niestety nie Wybierałem patrząc na obudowę i ilość peryferii aby program był jak najmniejszy ale wykorzystywał jak najwięcej wbudowanych bloków (timery , przerwania) . Założenia takie synchronizacja poprzez przerwania zewnętrzne , w każdym przerwaniu załączany timer z funkcją output compare. Po wystąpieniu przerwania od comparatora załączenie...
Oj nie czytasz dokładnie: The OCF0 bit is set (one) when a compare match occurs between the Timer/Counter0 and the data in OCR0 – Output Compare Register0. OCF0 is cleared by hardware when executing the corresponding interrupt handling vector . Alternatively , OCF0 is cleared by writing a logic one to the flag. When the I-bit in SREG, OCIE0 (Timer/Counter0...
Tym razem ja edytowałem gdy, ty pisałeś - zobacz bity COM1A1 i COM1A0 w rejestrze TCCR1A: Bit 7:6 – COM1A1:0: Compare Output Mode for Compare unit A Bit 5:4 – COM1B1:0: Compare Output Mode for Compare unit B The COM1A1:0 and COM1B1:0 control the Output Compare pins (OC1A and OC1B respectively) behavior. If one or both of the COM1A1:0...
Co do pierwszego postu: To jest wynik pisania czegoś takiego jak "TIMSK = 0x80;" W ten sposób załącza się przerwanie OCIE2:"Timer/Counter2 Output Compare Match Interrupt Enable" a nie TOIE2:"Timer/Counter2 Overflow Interrupt Enable", który jest bit niżej. W symulatorze dokładnie widać, że jest wykonywany nie ten wektor przerwania. http://obrazki.elektroda.net/94_12161272...
Dzieki ksz o to mi właśnie chodziło ! Mam tylko jeszcze jedno pytanko jak napisac programik aby np na dany kod przycisku ( 0x00000000000009F6) zmieniał stan portu ! Niezabardzo mam pomysł jak to zrobic w bascomie ! myśle nad podpięciem pod int0 tylko niewiem jak program ma mniej więcej wyglądac ! Robiłem niedawno odbiornik podczerwieni (w C), użyłem...
Mam kilka pytań odnośnie USARTA ATMEGA128. 1. Czy błąd transmisji 0.2% dla kwarca 16MHz będzie miał duży wpływ na transmisję przy przesyłaniu ramki 19 bitowej z komputera do urządzenia. 2. W programie mikrokontrolera AVR co 5ms wywoływane jest przerwanie od timera1 output Compare które wywołuje procedury które trwają 1.5ms. W pętli głównej wyświetlane...
W tym trybie który wybrałeś (Single Mode) możesz generować PWM na PA0, PA1 i PA2. Zobacz sobe ten kod: [syntax=c]#define PERIOD_EXAMPLE_VALUE (0x01A0) //dec 416 F_PWM = 3.333MHz/4/416/2 = 1KHz (in dual slope PWM) #define DUTY_CYCLE_EXAMPLE_VALUE0 (0x00D0) // dec 208 (208/416 = 50%) #define DUTY_CYCLE_EXAMPLE_VALUE1 (0x003E) // dec 62 (62/416 = 15%)...
Mam dość dziwny problem. W procesorze STM32F100RB mam uruchomione 6 timerów. Mają one sterować silnikami krokowymi. Silniki już mają sterowniki, posyła im sie tylko czestotliwość proporcjonalną do prędkości obrotowej i bit kierunku obrotów. Są to dość duże silniki, a całe urządzenie wymaga miękkiego startu i stopu silnikow. Kod który napisałem działa...
Witam. 1./ konfiguracja Timera1 musi być w jednej linii jako całość np. Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect Po za tym masz nie pozamykane prawidłowo warunki IF. Poniżej przykład całości: $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.4 = Input Config Pinb.2 = Input Config Pinb.1...
Dioda płynnie się zapala,kiedy uzyka maksymalną jasność gaśnie i program sie powtarza.100% dobry program wersja dla wewnętrzengo rezonatora RC 1MHZ $regfile = "m8def.dat" $crystal = 1000000 Config Pinb.1 = Output Config Pinb.2 = Output Dim I As Byte Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale...
Taki zapis: (1<WGM21) to raczej nie zrobi tego czego oczekujesz. Spróbuj tak: (1<<WGM21). Poza tym przy takich ustawienia Compare Output Mode OCR2 powinien mieć wartość na poziomie 30.
Witam. Przedstawiam kod w którym masz wszystko wyjaśnione: [syntax=c] //Set PORTB1 pin as output DDRB=0xFF; //TOP=ICR1; //Output compare OC1A 8 bit non inverted PWM //Clear OC1A on Compare Match, set OC1A at TOP //Fast PWM //ICR1=20000 defines 50Hz PWM ICR1=20000; TCCR1A|=(0<<COM1A0)|(1<<COM1... (0<<FOC1A)|(0<<FOC1B)|(1<...
I tak zrobiłem. Każdą komendę kończę znakiem pustym (ascii: 0x0). W programie głównym mam zadeklarowana zmienną globalną "ko_tr" ustawioną jako extern, której wartość informuje o zakończeniu transmisji. W obsłudze przerwania RXNE odpieram znaki i wpisuję do zmiennej tablicowej "odczyt", do czasu nadejścia znaku pustego. Po wykryciu tego znaku, do zmiennej...
Więc nie dołączyłem żadnych kondensatorów. Czy słusznie? Słusznie. Zmieniłeś nową funkcję przerwania ISR() i jej wektor na stare (przestarzałe) SIGNAL(): http://www.nongnu.org/avr-libc/user-manu... Zmień na ISR(). Szczerze muszę przyznać że nie do końca wiem co ustawiłem w TIFR oraz TIMSK, znalazłem to w którymś z tematów...
Co do przerwań to masz racje, nie będę ich włączał. Wzory są przepisane bezpośrednio z datasheeta:D Ale co do zegara to coś mi tu nie pasuje... z tego co mnie datasheet do tego procka informuje to 117,92/4 to jest Fcy, a właśnie Fosc=117,92MHz. Podstawiając obydwie liczby do wcześniejszego wzoru wychodzi mi że dla 12bitów, częstotliwość pwm dla zegara...
Poczytaj tematy i uzyj szukaj. Attiny2313 nie posiada adc wiec potencjometrem nie dasz rady tego sterowac. Domyslam sie ze robisz do w bascomie. Tu masz kawalek kodu jak konfigurowac timery zebys mial 4 pwm. '******* procek ******* $regfile = "attiny2313.dat" $crystal = 8000000 $hwstack = 30 $swstack = 30 $framesize = 30 '****** dioda R/G...
Zumek -- dzięki za wskazówki ale niestety w moim procesorze nawet po ustawieniu Timer1 na 65492 max. częstotliwość jaką udaje mi się osiągnąć to ~16KhZ. Może tak: (Nadal w Bascomie , choć nie całkiem w Basicu) $crystal = 4000000 Config Portb = Output Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle On Compare1a Introc1a Nosave Timer1 = 0 Compare1a...
Zobacz to i wyciągnij wnioski [syntax=vbnet]$regfile = "m88pdef.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 '$sim Cursor Off Cls Config Portd.0 = Output Config Timer1 = Timer , Prescale = 8 , Clear Timer = 1 , Compare A = Disconnect , Compare B = Disconnect Compare1a = 62500 On Compare1a Beep Enable Compare1a Enable Interrupts...
Na 100% działa: Dim I As Byte I = 0 Do If PINB.1 = 0 Then If I < 255 Then Incr I Else If I > 0 Then Decr I endif Pwm1a = I Pwm1b = I Waitms 100 Loop Dodano po 2 $crystal = 8000000 Config Pinb.3 = Output Config Pinb.4 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1 Dodano po 3 I oczywiście...
Spróbuj tak (nie testowane:)): [syntax=basic4gl]Config Portb.3 = Output ' OC0A Config Portb.4 = Output ' OC0B Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 Pwm0a = 0 Pwm0b = 0 Config Portd.5 = Output ' OC1A Config Portd.4 = Output ' OC1B Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm...
Zacznę od końca (przejrzałem oryginalne źródła): 3. put_char() by wysłać znak czeka, aż flag_tx_ready będzie inne od 0 (FALSE) Akurat odwrotnie. Czeka, aż flaga stanie się FALSE, czyli aż zakończy się bieżąca transmisja. Przy okazji. W deklaracjach zmiennych współużywanych przez program główny i przerwania (jak np. ta flaga) w oryginalnym kodzie brak...
ISR(INT0_vect) { ISR(TIMER3_OVF_vect) { TCNT3 = WARTOSC_PRZELADOWANIA; czas++;}} ISR(INT1_vect) {} Pomijając fakt że atmega16 nie ma timera nr3 ( tylko 0,1,2) ta konstrukcja wygląda dziwacznie :) skoro mam podłączony kwarc 16Mhz, to preskaler ustawiam na taktowanie zewnętrzne Taktowanie zewnętrzne wymaga fizycznego podłączenia sygnału taktującego z...
Kurka, namieszane... Nie bardzo wiem jak to zrobić z tym porównaniem. Naprowadź mnie. 1. Ustawiam licznik na daną częstotliwość występowania przerwania (powiedzieliśmy 1kHz). Z każdym nowym okresem załączamy wszystkie diody i inne urządzenia podpięte do pinów 74hc.. W tym miejscu mamy początek impulsu z każdym przepełnieniem timera. 2. Następnie musimy...
Najlepiej jest iść po kłębku: TIM_OCMode wpływa na tmpccmrx, który trafia do CCMR1/CCMR2. TIM_OCMode_x obejmuje bity 6:4, tak więc odpowiada za pole OCxM kanałów. Według RM0008, wartość reprezentowana przez TIM_OCMode_Timing przekłada się na 000: Frozen - The comparison between the output compare register TIMx_CCR1 and the counter TIMx_CNT has no effect...
Mam następujący kod programu. Moje pytanie brzmi: Dlaczego program nigdy nie wchodzi do przerwania, a przynajmniej tak pokazuje VMLab, w którym to symuluję. Czy trzeba jeszcze coś w jakimś rejestrze ustawić. Program ma wchodzić do przerwania w momencie kiedy licznik zrówna się z OCR1A. #include<avr/io.h> #include<avr/interrupt.h> #include<avr/signal.h>...
A change of the COM1x1:0 bits state will have effect at the first compare match after the bits are written. For non-PWM modes, the action can be forced to have immediate effect by using the FOC1x strobe bits. Być może w tym jest problem. OC1A jest prawdopodobnie inicjowane z wartością 0 do momentu wystąpienia pierwszego "compare match". W trybach "set...
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
Poszukałem, poczytałem, wypociłem coś takiego: [syntax=c] ... ISR(TIMER1_COMPA_vect) { if(ssek == 124) { sek = sek + 1; ssek = 0; } ssek = ssek + 1; TCNT1 = 0; } int main(void) { OCR1A = 0x7C; // do 124 TCNT1 = 0x00; TCCR1A = 0x00; TCCR1B |= _BV(CS12); // preskaler 1024 TCCR1B |= _BV(CS10); // preskaler 1024 TCCR1B |= _BV(WGM12); // tryb ctc TIMSK |=...
Jaki jest powód użycia operatora logicznego || w instrukcji TCCR0 |= ((1<<CS00) || (1<<CS01)); ? Moim zdaniem powinno być bitowe OR, czyli pojedynczy znak | , ponieważ w ten sposób raczej nie uzyskasz oczekiwanego preskalera. Korzystając ze sprzętowego PWM lepiej jest używać dedykowanego pinu OC0(PB3). Eliminuje to konieczność obsługi przerwania...
To czy sterownik na "tiny" czy na "mega" nie ma większego znaczenia. Łatwość wykonania sterownika BLDC zależy od tego co dany procesor zawiera. Procesor ATTINY461 zawiera 3 kanały PWM które zwierają po dwa wyjścia porównywania (Separate Output Compare Registers). Tak więc mamy 6 wyjść PWM co jest idealne do sterowania 3 fazami. Mało tego liczniki te...
Do metod Münchhausena to temu daleeeko... ;] Może i jest pewna analogia, gdyż przykład który podałem zwróci właściwy wynik jeśli dokładnie wiesz, jak szybko chodzi timer... Skoro ty chcesz tylko i wyłącznie przekonać się, czy PLL chodzi tak jak powinien, to może nie warto tutaj w ogóle sugerować się rdzeniem i jak on macha pinem , tylko włączyć timer...
Jak według tych wskazówek zrobić kod ; Wskazówka : ""Cały czas mowa o precyzyjnych częstotliwościach, współczynniku wypełnienia ,a delay to jedno z najgorszych z możliwych rozwiązań mając sprzętowe sterowanie GPIO, gdzie trzeba liczyć każdy cykl maszynowy jak w latach 80. W Generatorze DDS z EP 6/2018 jest sprzętowe sterowanie wyjściem: void Timer1_Start(uint8_t...
Witam Mam pewną wątpliwość/pytanie dotyczące przerwania dla timera1 w trybie CTC. W datasheetcie jest napisane, że mamy dwie niezależne jednostki Output Compare, no więc ustawiam: TCCR1B=(1 << CS10 |1 << CS11 | 1<< WGM12); //przykładowo-ustaw timer1 z preskalerem 64 //ustaw timer1 w tryb CTC OCR1A=1000; //przykładowa wartość...
Udało mi się skonfigurować tak jak chciałem, Więc zostawiam kod dla innych: void Init_Timer(){ count=1;//Reset ounter TCNT0 = 0;// Reset timer TCCR0 |= (1<<CS02) | (1<<CS00) | (1<<WGM01);// Set prescaler 1024, Set CTC Mode TIMSK |= (1<<OCIE0);// Enable Compare interrupt OCR0=100; //Set...
Witaj. Bit 7 – CTC1 : Clear Timer/Counter on Compare Match When the CTC1 control bit is set (one), Timer/Counter1 is reset to $00 in the CPU clock cycle after a compare match with OCR1C register value . If the control bit is cleared, Timer/Counter1 continues counting and is unaffected by a compare match. EDIT: Znowu BlueDraco mnie wyprzedził...
W jakich układach natrafiliście, lub zastosowaliście tyrystory lub triaki? Można kupić moduły SSR. SSR są zwykle bazowane na jakiejś formie triaka (chyba optotriak). Ja tak przerobiłem kolorofon na sterowanie przez artnet. Niestety tylko włącz/wyłącz (trzeba by detekcję fazy zrobić aby działało jako dimmer, niestety timery w ESP32 nie mają po kilka...
Czyli trzeba zmienić kod wyzwalania timera oraz preskalera tak? Edit: Nie..........., konfiguracja Timera0 jest będna.... 1. Zauważ że, w Mega8 Timer0 nie posiada trybu CTC. 2. Nawet, jeżeli zechciałbyś zamienic go na podobny (kompatybilny) processor z serii 48/88/168/328, lub inny "tinyxx" w których Timer0 jest lepszy i posiada możliwośc konfiguracji...
Takie "na kolanie" ale powinno działać [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 Config Pinb.3 = Input : Set Portb.3 : S1 Alias Pinb.3 Config Pinb.2 = Input : Set Portb.2 : S2 Alias Pinb.2 Config Pinb.1 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64 Dim I As Byte I =...
Glitch free. Typowy układ PWM opiera się na komparatorach. Z jednej strony komparatorów jest licznik stanowiący podstawę czasu, a z drugiej strony rejestry, do których ładuje się wartości, np. w STM32Fxx nazywają się CCRx, a w Xmega nazywają się CCn oraz CCnBUF, w PIC24 lub dsPIC nazywają się OCxR lub OCxRS i siedzą w module Output Compare. Podstawowy...
nie poszły: O9 - Extra button: ShopperReports - Compare travel rates - {946B3E9E-E21A-49c8-9F63-900533FAFE14} - C:\Program Files\ShopperReports\Bin\1.0.8.0\ShprRpr... O9 - Extra button: ShopperReports - Compare product prices - {E77EDA01-3C56-4a96-8D08-02B42891C169} - C:\Program Files\ShopperReports\Bin\1.0.8.0\ShprRpr... O10 - Hijacked Internet...
Chciałem zrobić na ukałądzie NE555 jeden układ miał zwarcie na VCC i GND, a drugi urwany PIN VCC to próbowałem wykombinować na Arduino Micro Pro. Dalej możesz. Pod poniższym linkiem jest program wraz ze szczegółowym wyjaśnieniem, jak wygenerować 1 MHz (a nawet więcej) z użyciem ATMega32U4 (Micro Pro lub Leonardo): https://harizanov.com/2013/04/crazy-high...
Mniej więcej tak: $regfile "Attiny2313.dat" $crystal = 4000000 Config Pind.3 = Output Config Pind.0 = Input Config Pind.1 = Input Config Pinb.3 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 8 Dim I As Byte S1 Alias Pind.0 S2 Alias Pind.1 Set Pind.1 Set Pind.0 Pwm1a = 0 Do If I...
Dla taktowania 8MHz, ale możliwe że trzeba zmodyfikować nazwy Pwm i Compare [syntax=basic4gl]Config Pinb.0 = Output Pwm0a = 70 Config Timer0 = Timer , Prescale = 1 , Compare0A = Toggle , Clear Timer = 1 Do Loop End[/syntax] a na rejestrach timera [syntax=basic4gl]DDRB = 0B00000001 'DDRB.0 = 1 (wyjście) OCR0A = 70 TCCR0A = 0B01000010 'COM0A1 COM0A0 =...
Fajnie zrobiony dostęp do bitów. Od kiedy to jest w Bascomie ? Prawie od zawsze! Czy w takim razie teraz zamiast Portb.0 powinienem dawać Portb.portb0 ? Wszystko powie Ci plik *.DAT Twojego procka. Np. dla ATtimy2313: [CONST] ;***** BIT DEFINITIONS PORTB0= 0; Port B Data Register bit 0 PB0= 0; For compatibility PORTB1= 1; Port B Data Register...
W sieci znalazłem taki tekst, czy według tych wskazówek można to zrobić ,jak ? W Generatorze DDS z EP 6/2018 jest sprzętowe sterowanie wyjściem: void Timer1_Start(uint8_t dzielnik) { // OCR1B=dzielnik; OCR1B=dzielnik; //Output compare toggles OC1A pin // TCCR1A |= 0x40; // COM1A = 1 TCCR1A |= 0x10; // COM1B = 1 //start timer without prescaler TCCR1B...
force output compare stm32 output compare compare timer0
telewizor philips gniazdo antenowe odświeżania pamięci wygłuszanie pomieszczeń
Renault Trafic: Wydmuchiwanie powietrza z filtra na wolnych obrotach Migająca czerwona kontrolka Start/Pauza w pralce Electrolux