Witam, przy ustawionym preskalerze np na 80 przerwanie zostaje wywołane, ale gdy zmniejsze preskaler to przerwanie się nie wykonuje. #include "stm32f10x.h" void RCC_Conf(void); void Show(int); void GPIO_Conf(void); void NVIC_Conf(void); void TIM_Conf(void); . . . int main(void) { #ifdef...
Mam taki oto kod przerwania od Tim2 [syntax=cpp] void TIM2_IRQHandler(void) { if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) { TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); if (TF) { GPIO_ResetBits(GPIOB , GPIO_Pin_10); TIM2->PSC=7200; TIM2->ARR=7500; } else { GPIO_SetBits(GPIOB , GPIO_Pin_10); TIM2->PSC=72; TIM2->ARR=6; } TF=~TF; } } [/syntax]...
Dzień dobry. Do układu wgrałem przykładowy program, PWM input obliczający częstotliwość, dostarczony do STM32F4-Discovery. Zamiast licznika TIM4 wykorzystałem licznik TIM5. Układ działa prawidłowo. Oblicza właściwą częstotliwość Inicjalizacja licznika: 2. Configure the Time base unit as described in the first part of this driver, if needed, else the...
Wracam do tematu [; Wzmacniacze różnicowe (robione ręcznie z OPAMPa i rezystorów)są fajne, ale tylko w teorii, bo niedokładność elementów zabija całą ideę. Po zastanowieniu skłaniam się do tej "klasycznej" metody pomiaru w której mierzony jest czas ładowania / rozładowywania kondensatora. Biorąc pod uwagę fakt, że mało interesuje mnie konkretna rezystancja,...
Witam, tak jak w temacie napięcie z czujnika którym odczytuje przemieszczenie (Half-bridge LVDT) zmienia sie o 200 mV - tj. 6.345 V-6.545 V - zmiana napięcia jest liniowa. Mam już działający kod programu ale po testach wydaje mi się za mało precyzyjny do mojego urządzenia i nie wiem niestety jak zrobić bardziej precyzyjny odczyt. Kombinowałem na różne...
Witam. Posiadam następujący kod do mikrokontrolera ARM sam7 : Mój problem jest następujący: Chciałbym aby co 1 sekundę ekran gasił się i zapalał. Niestety nie mogę ustawić timera, tak aby się przepełniał co 1 sekundę. ( Zmiana następuje częściej niż sekunde, a mi potrzebna dokłądnie sekunda) Niestety nie wiem dokłądnie jak ustawić zegar, preskaler lub...
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...
powiem tak,że będziesz miał problem z uzyskaniem wsadu do tego urządzenia bo niema go w wykazie programów na płycie CD z PE. Ale jak chcesz to mam schemat częstotliwościomierza na PIC-u do pomiaru od 1Hz-50MHz z wsadem do PIC-a.Mogę podesłać.Opis ze strony rosyjskiej.Zakres można rozszeżyć po zastosowaniu preskalera.
Witam. Mam taki problem ktorego nie moge rozwiazac mianowicie Potrzebuje zrobic generator o plynnej regulacji wypelnienia impulsu oraz jego czestotliwosci. bezproblemowo zrobilem plynna regulacje wypelnienia ale plynnie regulowac jego czestotliwosc to juz problem. Jak mam zrobic plynna regulacje? jak timer1 w trybie PWM ma mozliwos wyboru tylko jednej...
Ciągle zaglądam, jednak chwilami się gubię ;p Czyli preskaler jest ustawiany jedynie przez TCCR0B. Czyli na Timer0 nie ma mżliwości uruchomienia dwóch trybóow np PWM i CTC, gdyż tylko w rejestrze TCCR0A można ustawić jedną wartość, nie ma jako alternatywnego TCCR0B -bo on służy do ust preskalera. Dobrze mówię? Został mi tylko Timer1, żeby zrealizować...
No nie do końca, można stałą Const wpisać, co jak wiesz jest raczej jednoznaczne. Zresztą już dałem radę, należy tylko piny zmieniać poprzez wpisanie np takiego kodu: [syntax=basic4gl] If Bt1 = 0 Then : Adca_ch0_muxctrl = &B00000000 : End If If Bt2 = 0 Then : Adca_ch0_muxctrl = &B00010000 : End If If Bt3 = 0 Then : Adca_ch0_muxctrl = &B00101000 : End...
AVRy nie posiadają możliwości ustawienia czasu próbkowania. No mają pośrednio poprzez ustawienie preskalera. Czyli rozpiętośc czasu konwesji jest czterokrotna. Zanim pojawi się kolejne przerwanie od ADC, to zazwyczaj kondensator jest już przeładowany Przerwanie pojawia się wtedy kiedy konwersja jest gotowa. Avr-y niestety pod względem rozrzutu parametrów...
Twoje rozwiązanie jeszcze wczoraj próbowałem użyć ale działa tak samo jak moje czyli nie działa. problem rozwiązałem sam jakieś 2h temu po wczytaniu się w data_sheet OCR2 jest podwójnie buforowany przy dowolnym PWM więc tak czy inaczej dopiero w następnej bramce czasowej TIMER2_COMP_vect co daje poprawne buforowanie bo aktualnie się spóźniało 1 diodę,...
Już wiem gdzie popełniłem błąd. Nie doczytałem dokładnie artykułu o częstotliwości próbkowania. W związku z tym nie zmieniałem ustwień preskalera, który dzielił przez 2. Więc częstotliwość próbkowania wynosiła 4MHz, co zdecydowanie wychodzi poza zalecany zakres 50-200kHz. Obecnie poprawiłem kod: [syntax=c]//Inicjalizacja ADC ADCSRA = (1<<ADEN)...
(at)Marek_Skalski Tymbardziej nie rozumiem, dlaczego po przestawieniu na HSE w CubeMX wskazuje taktowanie szyn APB na 8 MHz a ja muszę takie zmiany wprowadzać. Co do funkcji ustawiającej zegar to jeśli projekt używa SPLa to wcale nie ma pewności, że faktycznie ten zegar masz ustawiony na 8 MHz, bo równie dobrze może być jednak ustawiony na zupełnie...
Mam miernik częstotliwości zrobiony na PIC 16F84A i program przystosowany do podłączenia preskalera 1:10 . Do linii gdzie połączona jest 1 noga PIC-a z 6 nogą LCD (E) przez rezystor zwierana jest do +5V lub do masy . zwarcie do masy - 15.000.00 MHz zwarcie do +5V - 150.000.0 MHz ja mam preskaler 1:100 i potrzebuję aby przełącznik przesuwał mi o jedno...
No już wszystko jasne - lewy licznik 40103 to tzw dzielnik A a prawy to dzielnik N. CD4001 realizuje logikę przełączania modułu preskalera +1 . Szkoda że tego nie narysowałeś. 4046 to detektor fazy a binarny licznik 4020 zapewnia sygnał referencyjny dzieląc f kwarcu na częstotliwość rastra strojenia. Klasyk Spróbuj zbadać jaka jest częstotliwość referencyjna...
Obstawiam na złe ustawienie preskalera ADC, ale nie wiem jak taktowany jest mikrokontoler. Dla 1MHz dałbym podział przez 8: ADCSRA |= (1<<ADEN)|(1<<AD... |(1<<ADPS1)|(1<<...
Poczekaj cos zobacze w kodzie. Moze coś wspólnie wymodzimy. Czy użyłeś bramki 74hc74 jako preskalera?Jak nie to zewżyj do masy pin PORTA2 i napisz co i jak zobacze na mailu moze jeszcze mam schemat tego miernika najnowszy. Dodano po 12 Prosze to sa materiały jakie ja dostałem od konstruktora tego miernika.
Witam wszystkich, rzadko pisze bo zwykle jakoś sobie radzę, ale po trzech dniach walki jestem zdesperowany i zaczynam szukać pomocy u Was. Zrobiłem emulację odbierania RS232 na nóżce INT0. Zbocze opadające oznacza że mamy bit startu. Tak startuje odbieranie: [syntax=c] ISR(INT0_vect){ // włączenie odbierania znaku na emulowanym UART 600bps GICR&=~(1<<INT0);...
Jutro jeszcze sprawdzę jak będzie działać Attiny 45. Może coś uda się osiągnąć. Zrobiłem trochę testów na attiny13 i po nich jestem bardzo sceptyczny co do użyteczności funkcji micros() w takim zastosowaniu jak metoda użyta w twoim szkicu. Mam obawy że na attiny45 problem może być ten sam, tylko nieco mniejszy, z powodu możliwości wyższego taktowania....
Prawie dobrze, tylko trochę nie doczytałeś :) , możesz to zrobić tak jak zacząłeś wpisując sam do rejestru WDTCSR, ale musisz zrobić to w dwóch krokach. Najpierw odblokować zabezpieczenie ustawiając w rejestrze bity WDCE oraz WDE (istotna jest tutaj suma logiczna z zawartością rejestru, żeby nie wyzerować preskalera i nie spowodować kolejnego resetu...
W jaki sposób zmienić taktowanie? Jeżeli zmienię taktowanie za pomocą preskalera bez grzebania w fusebitach otrzymam zamierzony efekt? Przyznaję sie, że nie znam się za bardzo na zmianie taktowania i nie chcę uwalić płytki. O ile rozumiem zmieniając prelakser zmniejsze o połowę prędkości uart, czyli jeżeli ustawie na 9600 w rzeczywistości będzie pracować...
Próbowałeś testowo wyłączyć przerwania komentując TIMSK2 = (1 << OCIE2A); oraz while(data_ok == 0); ? Wtedy też nie działa? EDIT: Ewentualnie spróbuj zwiększać wartość OCR2A (od 50 do 100), bez zmiany preskalera.
Dzieki za podpowiedź. To HAL miałby taki narzut czasowy ? Identycznie temat wyglądał z bibliotekami standardowymi. Sprawdzę oczywiście. Ale ta sama funkcja wpuszczona w zwykłego "while" generuje przebieg kilka MHz. Nie bawiłem się priorytetami przerwań bo przy takich zegarach (180MHz) chyba raczej nie ma sensu jesli problem jest przy 400kHz. Program...
Pomogła zmiana preskalera. Dodatkowo AREF podłączyłem kondensatorem 100nF, AVCC jest filtrowane przez cewkę i kondensator. Pomiary są stałe. Poniżej finalna funkcja i inicjalizacja pomiarów. [syntax=c] void init_adc(void) { ADMUX |= (1<<REFS0); ADCSRA |= (1<<ADEN) | (1<<ADPS1) | (1<<ADPS2); } uint16_t pomiar(uint8_t kanal) {...
Oczywiście możesz czasy po prostu podzielić przez 16 A nie pomnożyć? Tzn. wiadomo, że czasy trzeba zapewnić takie same, a więc pomnożyć ewentualne stałe na bazie których odmierza się opóźnienie. Albo na przykład pomnożyć wartości dla sprzętowych liczników, jeśli na bazie ich odmierzasz sobie czas. Jeśli korzystasz z delay.h z avr-libc, to tak jak pisze...
Energooszczędny błyskacz LED ze średnim poborem prądu poniżej 5uA? Tak, z XMEGA32E5 udało mi się tego dokonać. 5 lat błyskania LEDem na zasilaniu z 2 paluszków alkalicznych? Czas pokaże. Ponad 10 lat przy baterii litowej CR123A? Z pewnością możliwe, gdyby nie drobne przeszkody techniczne. Dodatkowo, chcę przedstawić pomysł na niebanalną obudowę mogącą...
Witam wszystkich majsterkowiczów :D Oto mój jeden z pierwszy programów napisanych na ATMEGE 8. Dotychczas programowanie mikrokontrolerów traktowałem jako zabawę, używając do tego BASCOMA i zestawu Treningowego. Obecnie stoję przed zamiarem budowy pewnego urządzenia ale przed rozpoczęciem prac chciałbym mieć pewność że część programowa będzie ok. Sam...
Umieściłem wszystko w przerwaniu ale dalej miga, pomaga tylko zmiana preskalera np na 64 ale to nie jest rozwiązanie bo ewidentnie przy preskalerze 256 powinno działać bez żadnego migotania. Zauważyłem, że jak ustawie taką samą częstotliwość przy preskalerze 64 i 256 np ok 490HZ czyli dla preskalera 64 to OCR0=127, a dla preskalera 256 OCR0=32 to przy...
no z tym twoim 100Hz to nie mam pojęcia co się dzieje - ale ja już czasem różne dziwne rzeczy miałem w Bascomie kiedyś przy korzystaniu z Wait'ów w jakichś specyficznych sytuacjach. Oczywiście nie zwalam tu żadnej winy na Bascoma - bo zwykle czas gonił i nigdy nie miałem go na tyle aby dogłębnie przeanalizować co było nie tak - więc nie wiem - ale wymyślałem...
Kurcze jakby kolega mieszkał bliżej to wypiłbym z nim piwko:) tak jest, zerowałem timer, ale w preskalerze znajdowały się oczywiście zliczane impulsy zegara podstawowego, zmiana preskalera powodowała dokładniejsze symetryczne impulsy, po resetowaniu w przerwaniu od sieci wartości preskalera są równiutkie impulsy, zero mrugania, o to chodziło:) Swoją...
Witam. Fuse bit (prescaler /8) istniejący (włączony) fizycznie w mikrokontrolerze chcesz usunąć (wyłączyć) programowo ? Tak to zrozumiałem z Twego postu. Ten fusebit w ATMega88 powoduje tylko zmianę domyślnego ustawienia preskalera zegara, program może sobie sam wartość preskalera zmienić i olać ten fusebit. Więc tak, da się w tym przypadku wyłączyć...
Są tam trzy zmiany programu: 1. Możliwość kalibracji oscylatora poprzez zmianę zawartości rejestru OSCAL (około ±1%) - dana pod adresem 3FF (teraz minimalna częstotliwość). 2. Zmiana preskalera WDT - dana 3007 pod adresem 1AE. Daje to dwukrotne wydłużenie okresu zadziałania wybudzenia mikrokontrolera (teraz około 2,3 s). Oryginalna wartość pod...
Witam :) Czy ktos programuje moze w asemblerze i moze podpowiedziec w jaki sposob obslugiwac przerwania od TMR0. Probowalem zrobic prosty timer (po zalaczeniu zasilania liczy sekundy) z wyswietlaczem LCD korzystajac z przerwan od timera. Niestety nigdy nie udalo mi sie osiagnac takiego efektu, ktory sobie zalozylem. Zmiana wartosci poczatkowych dla...
Twój program - po poprawkach - działa :) #include <avr/io.h> #define F_CPU 16000000UL #define _0_0125ms ( ( 0.0125 * ( F_CPU / 8000UL ) ) - 1 ) //polowa okresu 40kHz int main(void) { DDRB|=(1<<3); // ustawienie portu PB3 (OC2) jako wyjscie TCCR2|=(1<<CS21)|(1<...
Większa częstotliwość to więcej zakłóceń, ale to raczej nie tu tkwi przyczyna. Miałem ATmega8 z kwarcem 16MHz i wyniki z ADC ('przetaktowanego' o 50kHz) stabilne, czasen tylko pojawiał się szum na poziomie 1LSb. Wobec tego: - Jak wygląda Twoja płytka? - Jak wygląda obwód zasilania ADC? - Czy dostosowałeś program do nowej częstotliwości zegara? (ewentualna...
I niestety coś jest nie tak ponieważ niezależnie jaki preskaler ustawie ... To mnie dziwi , bo zmiana preskalera , powinna powodować zmianę częstotliwości , z jaką wywoływane jest przerwanie. czy jaka wartość dam do OCR1A to przerwanie jest wywoływanie zawsze co około 2 sekundy To mnie nie dziwi , bo w trybie w którym aktualnie pracuje Twój Timer ,...
mostek to układ L289N wiec w 100% nadaje się do silnika. Silnik to DC MOTOR DGM-210-2A DC 24V 1A 116 rpm 7KG-cm do tego jest przekładnia oryginalna od silnika 1:27. konfiguracja PWM PINSEL1 |= 0x00000400;//Enable pin 0.21 as PWM2 PWMPR =30;// 0x00000001;//Load prescaler PWMPCR = 0x0002000; //tryb pracy //PWM channel 2 double edge control, output enabled...
Witam, Przeniosłem własnie "na pałę" (tj. totalnie bez zaglądania do RM) fragment kodu z F1 obsługujący TIM2 (inicjalizacja plus obsługa przerwania). Jedyna zmiana jaką zrobiłem, to była zmiana preskalera dla nowej F taktowania licznika. Program zadziałał bezproblemowo. Nie wgryzałem się na razie dokładnie w RM na poziomie rejestrów, ale nasuwa się...
Zaraz będzie, że krytykuję albo się naśmiewam, ale widzę tutaj poważne braki w wiedzy. I właśnie na to liczę, że ktoś mi wytknie braki w wiedzy ;) Wiem, że SSD1289 wypada słabo w porównaniu z konkurencją. Nie mogę się zgodzić natomiast co do zawężania obszaru. Jest to jak najbardziej możliwe w tym układzie. Rejestry 0x44, 0x45, 0x46 umożliwiają zawężenie...
Rozumiem ze będzie tu potrzebne wykorzystanie millis. Do PWM? Można ale to kiepska metoda. Mała rozdzielczość, kiepska precyzja (duży jitter). W przypadku zawieszenia przerwań (np obsługa 1-Wire przez GPIO), PWM zostaje zatrzymany. Taki PWM to do regulacji kontrastu LCD się nadaje. Praktycznie każdy mikrokontroler ma sprzętowy PWM a AVR każdy (może...
Witam Mam taki problem z tym prockiem używam PWM do sterowania serwami i potrzebne mi czasy od 0.9 do 2.1ms uzyskuje to na preskalerze 3 dla kwarce 7 ale wczoraj mialemtaki problem ze zmienialo mi sie wypelnienie ze zmiana preskalera mialem50% i przy 1 bylo spoko ale juz jak zmienilem na 2 i wyzej to zmienial wypelnienie! Dzisiaj to juz inny problem...
witam !! z tego co wiem wyjście ( wejście ) MC służy do zmiany współczynnika podziału preskalera ( 10/11 , 64/65 np ) ta synteza działa właśnie tak . napisz w google MC145152 a dowiesz się wszystkiego . pozdrawiam !! ps a gdzie i za ile kupiłes MC 12022 ?
Witam Próbuje zmusić Mega16 do wygenerowania przebiegu o czestotliwości powyżej 100kHz (w domyśle 500kHz) ale niestety pacjent odmawia współpracy... na kwarcy 11059200 maksymala częstotliwość to 40kHz dla 16MHz podskoczyła do 59kHz. I nic nie daje zmiana wartości preskalera i/lub ładowanie wartości do timera (testowane z timerem 1 i 0)... Czy ktoś borykał...
Nie ma standardowych wartości, ile sobie założysz, tyle masz. Nie ma też czegoś takiego jak standardowy VCO, parametry dobiera się stosownie do potrzeb. Jest wiele rozwiązań, niektóre pracują z częstotliwościami poniżej 1Hz, a inne z częstotliwościami kilkudziesięciu i więcej GHz. To samo dotyczy zakresu napięcia wejściowego, ale najczęściej mieści...
Momento, zaraz przeczytam pdfa i może coś sie wyjaśni Już wiem Ten kontroler nie ma WDCE, tylko bit odpowiedzialny za możliwość wyłączenia watchdoga: WDTOE, który musi byc zaprogramowany w tym samym cyklu co WDE (w celu wyłaczenia watchdoga), a dokładniej: Wpisujesz dwie jedynki (bity WDTOE i WDE) a następnie w ciągu 4 cykli wpisujesz 0 do WDE i dopiero...
Witam. Nie bede sie juz wypowiadal na temat wiedzy wiec napisze wprost: Kondensatory blisko lm317 nic nie daly Zmiana preskalera takze nie pomogla Odlaczenie tranzystora BD912 takze nie pomoglo Dodanie rezystora pomiedzy wejscie ADC a mase takze nie pomoglo Co do wzmacniacza operacyjnego to nie mialem jeszce z nim stycznosci w praktyce wiec raczej nie...
OMG:) no dobra. Działa. Kod kopiowałem gdzieś z archiwum forum i przy zmianie preskalera musiał się wkraść błąd, szczególnie że ja preferuje zapis heksadecymalny. Co ciekawe chyba bez forum bym nie uruchomił tego, bo pierw próbowałem na liczniku 0. Sęk w tym, że teraz też się nie da- ustawiam wszsytko jak jak dla licznika 2, oczywiscie dodaję DDRB=0xFF...
Po dodaniu pustej instrukcji procesor wiesza się w momencie wystąpienia przerwania... Może inny przykład: #include <avr/io.h> #include <avr/interrupt.h> volatile int a,b; SIGNAL(SIG_OVERFLOW2) { TCNT2 = 0xCD; a++; if(a == 148) //milisekunda { a = 0; b++; } if(b == 1000) //sekunda { b = 0; PORTD...
racja tam zrobiłem błąd ale zmiana preskalera nawet na 1024 nic nie pomaga. najdziwniejsze jest to, ze na mega16 ten program działa i nie wiem dlaczego :/ jakie mogą być różnice pomiędzy tymi procesorami które uniemożliwiają uruchomienie tak prostego programu?
Tak jak pisałem wcześniej zmiana preskalera z 64 na 8 skutkuje tym że nie wyświetla się nic. RESOLUTION = 240 Przy mniejszej prędkości szczelina jest większa, ale też do pewnego stopnia. Powiększa się i nagle wyświetla się cały okrąg, przy czym jak dalej zwlaniam prędkość to szczelina znowu powstaje i tak w kółko. W drugą stronę jest podobnie, przyspieszamy...
To mój pierwszy post na tym forum, więc witam wszystkich użytkowników. Od jakiegoś tygodnia bawię się ARMami, używam płytki ZL31ARM z prockiem STM32F103RBT6. Po kilku próbach zdałem sobie sprawę, że standardowa biblioteka ST to jakieś nieporozumienie i zacząłem pisać programy po prostu operując na rejestrach. Zatrzymałem się na pewnym problemie częstotliwością...
Udało mi się odpalić program z książki Pana Wiązani, ale tam timet odmierza 1s Jak to przeliczyć? Jest jakiś na to wzór? Rzeczywiście musiało się 'udac odpalić' bo ten program nie jest pozbawiony błędów (!) \ A jak zrobić żeby odmierzał np 10 sekund? Zmiana preskalera wydłużyła max do 2sekund czas. Aby timer1 odmierzył inne/dowolne interwały czasu,...
Procedura zmiany preskalera taktowania jądra jest sprawdzona przez ustawienie Timera na przerwanie co 1 sek, więc tego jestem pewien. Nie wiem po co niektórzy wypowiadają się błędnie na temat $crystal. $crystal jest punktem odniesienia dla kompilatora w celu przeliczenia i dobrania ustawień. Dalej nie wiem dlaczego kompilator wymusza błędnie U2X0. PS...
uC mam na płytce z modułowa, ale do rzeczy. W porównanie z Atmegami tutaj ADC jest dość dziwne, więc na podstawie tego: napisałem taki kod: /usr/bin/sh: /c/WinAVR-20100110/bin/avr-gcc: Bad address make: *** [main.o] Error 126 Jak się tego pozbyć? Bo to mija ot tak raz po minucie raz po godzinie, co zrobić żeby to się nie pojawiało...
No w sumie jak to przemyślałem to fakt tu jest zależność prądu nie napięcia więc regulacja będzie się zaczynać od 6V-7V i będzie logarytmiczna. Nie do końca wiem jak dodać te kolejne 8X stopni bo rozumiem że po zmianie preskalera samo się to nie stanie? Program pisany w Bascomie. Nie zależy mi na tym "wygładzeniu" jakoś szczególnie ale jeśli się da...
Całkiem źle programujesz timer. Kolejność: PSC, ARR, SMCR CCMRx CCER DIER CR1 Główny błąd - to zaczynanie od CR1 - włączasz timer przed zaprogramowaniem go. Jeszcze taki drobiazg: TIM1->SR = (uint16_t) ~TIM_SR_UIF; - wyrzuć (uint16_t) Zmiana preskalera wymaga wygenerowania update.
Zmierzyłem przebiegi również podczas programowania kontrolera i się okazało że jednak timer działa poprawnie ale tylko przez jeden cykl, później dostaje kociokwiku. Zakładając że CPU=2MHz, dzielnik zegara = 8 i PER=30000 to wychodzi na to że przerwanie powinno wystąpić po 0,12s co jest przedstawione na kalkulatorze na obrazku. Okazuje się że jest na...
Owszem, aby zmienić PSC należy wyczyścić flagę, jednakże ustawiam to tylko raz. Eh, starałem się w miarę czytelnie przedstawić kod, przepraszam, jeżeli sprawia on trudność w odczycie. No tak zrobiłem, zrobiłem przerwanie od zbocza opadającego i narastającego, nie jest to za dobre rozwiązanie i raczej jest ono do poprawienia. Jednakże mam problem z...
Witam Dziękuję za pomoc. Zmiana preskalera na 1024 pomogła ( taki preskaler używam przy multipleksowaniu wyświetlaczy LED i tak już zostało ). Nawet jest lepiej niż poprzednio, bo przedtem pierwsze wywołanie odczytu NTP dawało jakieś dziwne wartości - zawsze były takie same - 08:26:27, a teraz za pierwszym pobraniem NTP już pokazuje co trzeba. Natomiast...
Dla AVR 20MHz czas zegarowy wynosi 50ns czyli mamy zapas. Dla 72Mhz czas taktu 13ns o trzy razy za szybko. Tyle już wiem. Jednak dalej nie widzę rozwiązania problemu... Pytanie tylko, czy STM32F33 zmieni stan pinu z taką prędkością. Maksymalnie mógłby zmienić z f = fsys/2 czyli 36MHz więc nadal tylko 27 ns. Może zmiana preskalera zegara taktującego...
Przydatne informacje o avrkach. Skoro autor zaczął już wnikać w listy rozkazów, to warto wspomnieć że AVRki dzielą się na subarchitektury rdzenia (AVR, AVRxm, AVRxt, AVRrc) , gdzie poza zróżnicowaniem w rozkazach występują też różnice w czasach ich wykonywania. Takie właśnie było moje zdziwienie gdy Tiny10 miał inne timingi od Tiny13, po czym odkopałem...
Nieprawda. Zmiana wypełnienia w przerwaniu jest standardową praktyką przy wykorzystywaniu PWMa. Zmiana preskalera już nie. Nie można użyć trybu 16 bitów dla Timera2. Jak widzisz w moim kodzie te kanały mają nazwy PWM2 i PWM3. PWM0 i PWM1 były z Timera1, jedynego jaki ma 16 bitów. Zatem kombinowanie miało sens. Dzięki niemu miałem 4 wyjścia do serw....
Fabrycznie preskaler dzieli przez 6 I w tym mikrokontrolerze zmienia się to w rejestrze MCLKCTRLB . A tu jak to zmienić I przykład zmiany ustawień preskalera [syntax=c] ccp_write_io((void*)&(CLKCTRL.MCLKCT... | 1 << CLKCTRL_PEN_bp /*Prescaler division: 2X and Prescaler enable */); [/syntax]
Ze względu na wysoką cenę profesjonalnych liczników częstotliwości, małe możliwości tanich (długi czas pomiaru i mała rozdzielczość pomiaru niskich częstotliwości) zdecydowałem się na budowę własnego urządzenia. Założenia: - Główny wyświetlacz LED, pomocniczy graficzny 128x64 OLED. - Równoległy, maksymalnie sprzętowy pomiar kilku parametrów. - Pomiar...
Witam, zbudowałem następujący układ: ( Potencjometry mają po 100kilo ohmów. ) Układ jest generatorem z regulowaną częstotliwością i długością pulsu, regulowaną za pomocą potencjometrów. Niestety mam dziwny problem z jego obsługą. Kiedy programowo WYŁĄCZĘ wyświetlacz wszystko działa elegancko. Kiedy jednak wyświetlacz jest włączony pojawia się problem!...
No więc idąc za waszymi poradami skonstruowałem program który generuje sygnał w oparciu o PMW. Na symulacjach wszystko jest ok. Niestety kiedy programuję prawdziwy mikrokontroler pojawia się pewien kłopot. Wypełnienie działa prawidłowo mogę sobie je regulować odpowiednim potencjometrem. Problemem jest częstotliwość. Kiedy potencjometr wykręcony jest...
Poniższy projekt jest kolejnym urządzeniem zgłoszonym do konkursu „7400 competition” w 2012 roku. Autor pragnął zaprezentować urządzenie, na którego widok pierwszą myślą jest „wow” albo „to jest obłędne!”. Tak też powstała idea stworzenia tagu RFID z wykorzystaniem jedynie układów logicznych z serii 74xx. Tag RFID...
nie mierz częstotliwości, tylko OKRES! V=o/t V - prędkość w m/s t - okres jaki upłynął pomiędzy dwoma następującymi po sobie impulsami z czujnika o - obwód koła w metrach Tak działają fabryczne liczniki, dzięki temu mierzą już bardzo małe prędkości. dodatkowo przejechany dystans otrzymasz dodając z każdym impulsem obwód koła do całkowitego dystansu...
Witam, napisałem program korzystający z USART-u. Zmiana stanu na wybranych wejściach uC ma powodować wysyłanie trzybajtowych pakietów danych. Wysyłanie odbywa się za pomocą przerwania USART_UDRE_vect. I oto dziwna rzecz: Pomimo, iż w SREG ustawiony jest najstarszy bit, w UCSRA sprzęt wystawia flagę pustego bufora, czyli UDRE jest ustawiony i wreszcie...
Otóż tak. Sprawa się ma następująco. Rozuiem że chcesz na wyjściu otrzymać sygnał prostokątny o wypełnieniu 50% i regulowanej częstotliwości. Ja proponowałbym takie rozwiązanie: #include <avr/io.h> int main() { DDRB=0xff; //Port B jako wyjście TCCR1A=_BV(COM1A0); //wyjście OC1A jest przełączane przy osiągnięciu wartości OCR1A...
Napisałem delay oparty o timer konfiguracja TIM1: void TimerConfig() { RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_ClockDivision=... TIM_TimeBaseStructure.TIM_CounterMode=TI... TIM_TimeBaseStructure.TIM_Period=72; TIM_TimeBaseStructure.TIM_Prescaler=1;.....
Generalnie na pierwszy rzut oka program jest prawidłowy. Nie zauważyłem jednak wcześniej, że używasz timera0 do generowania PWM, więc nie możesz go zatrzymywać tak jak sugerowałem. Niewskazane jest także resetowanie preskalera, choć dla silnika to nie ma znaczenia. Jeśli masz wolny timer 1 lub timer2 możesz to zrobić na nim według wcześniej przedstawionego...
Eclipse lub AVR Studio + GCC + Atmega8 Chciałbym zautomatyzować sobie liczenie ilości cykli zegara procesora, które wykonuje dany fragment programu. Jest to dla mnie istotne, a w czasie pisania kod często ulega zmianie i liczyć muszę od nowa ręcznie. W manual-u GCC v4.5.2 na stronie 281 rozdz. 6.3 znalazłem jedynie informacje jak policzyć objętość...
Witam! Mam program, który wykorzystuje liczniki do wysyłania impulsów o danej częstotliwości. Częstotliwością steruję za pomocą zmiennej okres1, która jest mnożnikiem preskalera. Np. preskaler=8 clkio=1000000Mhz okres1=127, czyli co 8*128=1024us zmienia się stan na danym pinie przerwania od przepełnienia licznika (dla timera1a jest to pd5), co znaczy,...
Na wstępie znajduje się „tło historyczne” przybliżające przyczyny powstania projektu, jeżeli ktoś jest zainteresowany jedynie kwestiami technicznymi proszę przejść od razu do części poświęconej skróconemu opisowi konstrukcji sprzętowej. Jak to się zaczęło Odkąd sięgam pamięcią, zawsze byłem zafascynowany radiem. Gadające pudełka żywo rozbudzały...
Usiadłem przy Atmedze328P i uruchomiłem SPWM dla Twojego przykładu. Zdefiniowałem następujące wyjścia sygnałów: - PD0 - sterowanie lewym dolnym MOSFETem mostka H - PD1 - sterowanie prawym dolnym MOSFETem mostka H - PD5 - sterowanie lewym górnym MOSFETem mostka H - PD6 - sterowanie prawym górnym MOSFETem mostka H Wyjścia PD5 i PD6 są niezmienialne, ze...
Witam. Tak się zastanawiam , po co tak komplikowac sobie życie i "pilnować" timera w głównej pętli :wink: Jestem ciekaw , w jaki sposób regulujesz długość impulsu i czy to ma wpływ na okres generowanego przebiegu.Proponuję zmienić troszkę kod przerwania i regulować wypełnienie poprzez zapis odpowiedniej wartości do zmiennej w programie głównym , a resztą...
Kiedyś popełniłem taki programowy PWM x 3 do sterowania RGB (ot tak dla fantazji :D) Config Timer1 = Timer , Prescale = 1 'dla prescale=8 przerwanie co ok 4 ms dla 256 co 15 ms dla 1024 co 64 ms Config Int0 = Falling 'Config Portb.6 = Input 'Set Portb.6 ' Końcówka Dla Int0 Ddra = &B01111111 ' ustawienie portu a jako wyjście Config Rc5 = Pinb.6 Pwm_r...
Witam Chciałbym uzyskać dowolną częstotliwość przebiegu PWM a nie tylko wynikającą z częstotliwości oscylatora i preskalera. W ATTiny26 istnieje taka możliwość przy użyciu parametru "OCR1C" który powoduje "skrócenie" licznika PWM i tym samym dowolną zmianę częstotliwości. ATMega48 nie posiada takiego parametru. Czy istnieje inna możliwość dokonania...
Kolego jacynka84 . Układy MCS-51 nie posiadają konfigurowalnego preskalera. Jest tylko dzielnik przez 12. Wykonałem go na procesorze 89c2051 z 12MHz kwarcem. Program sam do niego pisałem i wydaje mi się że powinno być wszystko dobrze bo wyliczenia się zgadzają a jednak jest chyba coś nie tak. Gdyby BASCOM był idealny to działałoby to porawnie - z błędem...
Kombinujecie jak koń pod górkę. Jakieś wyliczenia, przeładowywania sprzętowego licznika, jakieś PWMy... ' Copyright by ZbeeGin $crystal = 8000000 ' ========================================... ' STEROWANIE TRIAKIEM Config Int0 = Change On Int0 _sync50hz Triak Alias Portd.6 Licz = 49 Impuls = 0 Regimpuls = 0 ' licznik timer0 - generator...
Wszystko powinno być tak proste, jak to możliwe, ale nie uproszczone – Albert Einstein. Taka idea przyświecała przy projektowaniu tego układu, żeby zrobić ciekawą i funkcjonalną rzecz przy zastosowaniu możliwie najprostszych rozwiązań. Urządzenie można zastosować jako miernik od 1/4Hz do 100MHz, licznik impulsów do 100 000 000, a także jako prosty...
Bardzo dziękuję za te informacje. W przyszłości będę to rozbijał na dwie linie(zerowanie i ustawianie bitów rejestru). Tymczasem, po przeczytaniu datasheet, a konkretnie sekcji dotyczącej Timer0 i Timer2, stwierdziłem, że mogę po prostu wpisać jedną liczbę do np. rejestru TCCR0. Np TCCR0 = 0b00001111. To powinno spowodować włączenie pinów 7:4 jako wejścia...
Witam kolegów! Ustawiłem na atmedze128 timer 1 i 3 w tryb ctc. skorzystałem z nich z tego względu, że są 16-bitowe i liczyłem na większą dokładność. regulacja przy zmianie wartości ocrx jest nieliniowa i o tym wiedziałem. jednak muszę ustawiać częstotliwość ok 60khz z dokładnością do 0,1khz. Rzecz w tym, że przy niższych częstotliwościach regulacja...
mam już wizję całego programu, pojawił się niespodziewany problem którego od kilku godzin nie mogę przeskoczyć... otóż wg wyliczeń wyszło mi, ze aby w PWMie uzyskać 36kHz to należy dołączyc zewnętrzny kwarc o czestotliwości 9,216MHz (preskaler=1). W związku z kwarcem zmieniłem procka na ATtiny 2313, kwarc podpiąłem pod XTAL1 i XTAL2 i do masy przez...
Sprawdzę dopiero jutro jak to działa bo siedzę na 2 zmianie. Jeżeli by to nie poszło to można tak jak mówisz wykorzystać ICP1. Wtedy ( wg. mnie ) na wejście T1 dam sygnał z generatora zewnętrznego na kwarcu np. 125kHz 50% Po co z zewnętrznego. Użyj wewnętrznego. Nie wiem jaka dokładność chcesz otrzymać (po preskalerach sądzę, że niewielką). Jeśli dużą,...
Po kompilacji programu atmega powinna zapodac sygnały na portach: PB1,PB2,PB3 - są to sygnały na 3 serwomechanizmy. U mnie właśnie nie ma tych sygnałów. Poniżej Kod programu: [syntax=cpp] #define F_CPU 1000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <string.h> #include <avr/signal.h>...
Buduję pewien układ zawierający dwa mikrokontrolery ATMega328. Nazwijmy je A i B. Mikrokontroler A ma kwarc 16MHz, a mikrokontroler B ma kwarc 8MHz. Mikrokontrolery są połączone przewodem 4-żyłowym o długości ok. 30cm, z których dwie żyły to zasilanie i masa, trzecia żyła łączy B0 mikrokontrolera A z C4 mikrokontrolera B, czwarta żyła łączy B1 mikrokontrolera...
Żeby pisać na mikrokontrolery w C++ trzeba znać ten język bardzo dobrze. Niestety mikrokontroler to nie PC i nie "wybacza" nieprzemyślanych konstrukcji, które kończą się alokacją ogromnych ilości pamięci. Tak konkretniej to chodzi mi o nieprzemyślane używanie klas. C na mikrokontrolery jest znacznie łatwiejszy. A mógłby ktoś napisać w C++ i w C program...
Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka z Arduino. Temat oczywiście nie zastąpi w pełni czytania noty...
Program bez przetwornika ADC. Program działa prawidłowo Dodano po 42 Od kiedy praca dyplomowa jest tajna? Pytam z ciekawości- kiedyś była jawna na całym etapie pisania. Dlaczego w pętli głównej blokujesz przerwania- potem wykonujesz sporo obliczeń- a potem odblokowujesz? A co będzie jak w tym czasie pojawią się dwa przerwania? Jedno pójdzie się kochać....
Jednak niezależnie od trybu, zmiany OCR należy dokonywać w przerwaniu timera (najlepiej OVF). Co prawda mechanizm buforowania zapewnia brak zniekształcenia impulsu, ale jeśli w trakcie jednego cyklu timera dwukrotnie zmienisz OCR to pierwsza zmiana zniknie wprowadzając zniekształcenie. Jak się nie zmieścisz w cyklu to będziesz miał dwa cykle o identycznej...
Tak wiem, że zmienne float to nie najlepszy pomysł ale stwierdziłem, że skoro mam zapas pamięci to nic się nie stanie jeśli sobie na nie pozwolę :) Chyba, że mam obawiać się o stos? Mimo wszystko jest zajęta prawie połowa pamięci flash, a do tego dochodzi jeszcze to, że są również zmienne lokalne tego typu. A nie zamieściłem całego bo jak pisałem wcześniej...
Witam, proszę o wyjaśnienie zasady działania sygnału PWM [syntax=c]int main(void) { DDRB |= LED1 | LED2; //Wyjścia LED //Inicjalizacja Timer1 (PWM) TCCR1A |= (1<<COM1A1) //Zmiana stanu wyjścia OC1A na niski przy porównaniu A | (1<<COM1B1) //Zmiana stanu wyjścia OC1B na niski przy porównaniu B | (1<<WGM11); //Tryb 14 (FAST PWM, TOP=ICR1)...
Witam, mógłby mi ktoś sprawdzić kod, szczególnie ustawianie adc? Zmiana rezystancji na potencjometrze ma powodować ruch serwa o kat proporcjonalny do zmiany rezystancji. Wcześniej zrobiłem dla jednego kanału adc i było ok ale po zmianach na dwa kanały serwa tylko drgają. enable PWM on port B1 in non-inverted compare mode 2 TCCR1A |= 2 << 4; //...
Witam ! Janchar - mam parę uwag odnośnie Twojej konstrukcji. Najpierw chciałbym stwierdzić, że ogólna koncepcja częstościomierza jest całkiem sensowna i fajnie, że ten układ zrobiłeś. Natomiast nie ustrzegłeś się co najmniej dwóch błędów. Po pierwsze ! Wielokrotnie w tym wątku pojawia się pojęcie "dokładności" przyrządu. Niestety za każdym razem całkowicie...
Już wszystko jasne - jedyne pytanie zadaję na końcu. Przygodę z PWM zaczynam od sterowania jasnością diody. Atmega8 + diody + rezystorki 330Ω Ćwiczenie polega na cyklicznym rozjaśnianiu i ściemnianiu diody 3 diody podłączone do PB1, PB2, PB3 w założeniu tylko PB1 (OC1A) powinna świecić zgodnie z PWM. Ustawiłem tryb Fast PWM 8bit Kod: #include...
Na podstawie informacji zawartych tutaj: oraz zgodnie z sugestiami w poprzednich wypowiedziach zrobiłem sobie w celu przetestowania taki oto program: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> int time=0, flaga=0; int main (void) { DDRB |= (1 << 0); // Ustawienie bitu LED jako wyjćcia TCCR1B |= (1 << WGM12); //...