Możliwe że, winne jest uruchamianie funkcji alternatywnej, nie jestem pewien czy poniższa formuła jest poprawna, chcę uruchomić funkcję alternatywną nr 2 na pinie nr 6 portu B: Nie jest, bo jak sam widzisz z tabeli potrzebne przesunięcie to 24 bity, a nie 6.
I teraz pierwsze pytanie: czy da się zliczać impulsy z zewnątrz używając Timer2? Wtedy bym podpiął do nóżki TOSC. The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation. Jak źle (lub dobrze) jest z tym w praktyce nie wiem. Tylko jeszcze zostaje...
Raczej 255 = 0xFF (8bit). Przerwanie wykonuje się przy zrównaniu licznika z wartością 255, licznik liczy w górę a preskaler to 256, zakładając częstotliwość CPU na 1MHz przerwania wychodzą co: 256/1MHz*255 = 65ms . (dla 8MHz to około 8ms) Tego co nie jestem pewien, to to czy licznik (mam na myśli rejestr TCNT1 ) jest zerowany przy wartości maksymalnej...
No OK. CPWMEQU 500 OPWMEQU 1000 PWM_Out EQU P1.2 dseg PWM:ds 1 PWMLL:ds 1 PWMLH:ds 1 PWMHL:ds 1 PWMHH:ds 1 bseg PWM_State: dbit 1 cseg ORG 0000H ;RESET LJMPINI ORG000BH;T0 overflow LJMP T0ov ORG 100H INI: movTL0,#low(0FFFFH-CPWM) movTH0,#high(0FFFFH-CPWM) setbPWM_Out movPWMHL,TL0 movPWMHH,TH0 movPWMLL,#low(0FFFFH-(OPWM-CPWM&...
Również w HW config później użyj bloku SFB 49 http://support.automation.siemens.com/WW...
Brakuje Ci drugiego : _delay_ms(500) Dodano po 4 Nie używam składni typu: _delay_ms(500), ponieważ w pliku delay.h jest następująca informacja: The maximal possible delay is 262.14 ms / F_CPU in MHz. Ale jest także napisane: When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality....
Zdaje się, że PWM-y generują przerwania a te pochodzą jak stwierdziłeś od zegarów. To w czym problem? Wyzwalaj pomiary A/D od przerwań PWM. Jak będzie za gęsto to dodaj prosty licznik w zmiennej z porównaniem i uruchamiaj przetwornik co n-te przerwanie od TOVn. Biorąc sygnał z wyjścia PWM i dzieląc go przez 2 uzyskasz przebieg o stałym współczynniku...
sbi i cbi nie powodują żadnej zmiany SREG więc zapisywanie i odtwarzanie SREG w tym przypadku jest niepotrzebne. Zgadza się, dlatego są zakomentowane na wypadek, gdyby jeszcze coś w tym przerwaniu miało być robione... :P Nie rozumiem tego. Skoro już używasz rejestrów is0 i is1 to czemu bezpośrednio do nich nie załadujesz ADCH i ADCL. Dlatego, że w...
Problem dla mnie pojawił się ze zrozumieniem wektorów przerwań które obsługują timer1. W dokumentacji jest tabela na stronie 46 W czym problem? Jak korzystasz z przerwania np. Timer/Counter1 Compare Match A czyli przerwanie w momencie gdy zawartość licznika (TCNT1) zgadza się z tym co wpisałeś do OCR1A to jeśli wcześniej w TIMSK ustawisz odpowiedzialny...
Popatrz sobie w moje listingi... poprawiłem Ci to już wcześniej. Myślałem że zrobisz kopiuj wklej :D
Przecież to Ty programujesz timer, a timer może po każdym okresie np. zgłosić przerwanie.
Witam Chciałem do kuchni wstawić czujnik PIR, ale z dodatkową zaletą, czyli stopniowym zwiększaniem i zmniejszaniem PWM, dodatkowo jeśli podczas zmniejszania PWM nadejdzie przerwanie INT1 od czujnika PIR, to program ma przestać zmniejszać, tylko zacząć zwiększać i to nie od zera, ale od wartości na której "zastało" go przerwanie INT1 od PIR. W sumie...
skonfigurować timer aby wygenerował przerwanie po X czasu.
Jak się bawisz Keilem, to prześledź sobie działanie programu w symulatorze jak nie masz debuggera. Zobacz też czy masz zdefiniowane przerwanie od systick i co ono robi, jak nie grzebałeś nic w pliku konfiguracyjnym, to z automatu on jest włączany na wartości domyślne.
Witam. Na moje oko tego już bardzo nie zoptymalizujesz w C. Pokaż może do czego to Tobie kompilator tłumaczy na asm (plik z rozszerzeniem *.lss). Będziesz miał pojęcie jak takie coś wygląda w asm. Jedyne co widzę na C, to: PORTB |= PORTB_MASK; Masz wykorzystany cały port, więc powineneś napisać: PORTB = 0xFF; Zaoszczędzisz jedną operację odczytu z pamięci...
Dla ćwiczeń - jak najbardziej. Edit: Edytowałeś post więc dodam: Jeśli musisz oszczędzić piny PWM lub timery do innych celów, to oczywiście rób PWM programowo. Ale wtedy musisz zadbać, by każde przerwanie wykonywało się szybko, by PWM się wyrabiał, bo znowu serwa będą drgać :)
Można wywołać przerwanie TIMERA, w trybie PWM, w momencie przeładowania licznika, a więc gdy licznik przekroczy ustawioną dla danej rozdzielczości wartość maksymalną. Musisz tylko włączyć przerwania dla danego Timera. Oczywiście częstotliwość wywoływania tego przerwania jest ściśle powiązana z ustawieniami PWM (jest równa częstotliwości działania PWM)....
Modyfikacja wypełnienia powinna być wykonywana w przerwaniu końca okresu timera generującego przebieg PWM. Obciążenie procesora takim przerwaniem jest prawie żadne, a cały kod to marne 6..8 linijek w C.
Nie, to jest lewitacja elektromagnetyczna i odwracam w ten sposób polaryzację cewki, kiedy PID wyliczy ujemną wartość (lewitujący obiekt przekroczy setpoint). To po co tu w ogóle PWM? Przerwanie w którym wyliczasz wynik PIDa nie może od razu ustawiać stanu pinu IO?
Otwórz sobie pdfa od procesora zajrzyj w sekcje Timer2, poczytaj, przejdź do opisu rejestrów i poustawiaj jak uważasz. Ogólnie dla liczników wybierasz prescaler czyli podział między zegarem (16Mhz dla Arduino) a wejściem licznika. Timer2 jest 8bitowy ma 256 wartości, więc masz kolejny podział. Jak potrzebujesz precyzyjnie to są tryby gdzie możesz zrobić...
Przecież ATmega może działać na 8 MHz na wewnętrznym oscylatorze. Jeśli nie zdążysz z obsługą przerwania, po prostu "zgubisz" przerwanie. W trybie PWM przy 8 MHz nie będziesz miał z tym problemu.
Generalnie w takich przypadkach nota układu twoim przyjacielem. Poczytaj to co napisałem w komentarzach. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { uint8_t i = 0; DDRD = 0xff; //TCCR2A |= (1<<WGM21)|(1<<WGM22); // źle ten tryb jest zarezerwowany TCCR2A |= (1<<WGM21) // CTC //TCCR2A |= (1<<CS20)|(1<<CS21)|(1<&l...
AVE... Przypuszczam, że źle napisałeś kod, dlatego generowany dźwięk się nie pokrywa z oczekiwanym. Większość mikrokontrolerów ma jakiś układ PWM wbudowany, podobnie jak i przynajmniej jeden timer. Ustawiasz moduł PWM na 50% wypełnienia, a timer na przerwanie co 13ms, a następnie w przerwaniu timera zmieniasz częstotliwość PWM. Upewnij się, że dobrze...
Odczyt przetwornika A/C też wprowadza jakieś opóźnienie, zwłaszcza jeśli używasz funkcji bezpośrednio AnalogRead(). Jak pisał przedmówca, mógłbyś użyć PWM-u, w "odbiornikach" ustawić przerwanie na wyzwalanie obydwoma zboczami i wewnątrz przerwania z użyciem funkcji micros() mierzyć czas stanu niskiego i wysokiego, a ich iloraz da Ci współczynnik PWM. Arduino...
Ale mieszasz. Ustawiłeś dwa cykliczne przerwania i dziwisz się, że coś nierówno miga. Tu w avr nie ma wielowątkowości sprzętowej i jedno przerwanie przeszkadza drugiemu. Przenieś i wyłącz to przerwanie to co masz w ISR(TIMER2...) do ISR(TIMER1...) . Idea programowego PWM i timerów jest właśnie w tym aby działało wszystko pod jednym wspólnym cyklicznym...
static uint16_t counter; static void pwm_IRQ (void) { uint32_t pwm_irq; ++counter; pwm_irq = PWM1IR; // Czytaj źródło przerwania PWM1IR = pwm_irq; // Czyść przerwanie if (499 == counter) { PWM1MR3 = wartosc_dla_wypelnienia_20; counter = 0; } else { PWM1MR3 = wartosc_dla_wypelnienia_5; } PWM1LER = 1 <<...
a ja chce zauważyć pewien średnik po while
No jak nadaję wartość w main()- to bez błędów. Nie rozumiem- dlaczego. Jak to nie rozumiesz dlaczego - to chyba nie dziwne, że wewnątrz funkcji można przypisać dane do pól struktury. Struktura zdeklarowana jako globalna- no bo przed main- a nadać wartości nie można. Jak nie nie można ???? A jak będę chciał zmienić te wartości w innej funkcji albo w...
Witam. Chciałem ustawić timer1 w taki sposób żeby przy 10bitowym trybie PWM wywoływał przerwanie zamiast zmieniać stan nóżki procesora. Robię to w ten sposób i nie działa: [syntax=cpp]TCCR1A |= (1<<WGM10)+(1<<WGM11)+(1<... //fastPWM 10 bit TCCR1A |= (1<<OCIE1A); //enable compare OCR1 interrupt TCCR1B = (1 << CS11);...
Tak poza tym coś mi tu nie gra. - ATmega8A może być taktowana do 16 MHz a nie 14 MHz - nawet przy 14 MHz częstotliwość w FastPWM wyjdzie ~54 kHz. Zmniejsz rozdzielczość, tworząc na przerwaniach programowy PWM. W przerwaniu przepełnienia Timer-a możesz ładować odpowiednią wartość, zmniejszając tym efektywnie jego rozdzielczość. Pamiętaj przy tym, że...
Witam, Uruchom normalnie Timer w trybie PWM. Teraz dodadkowo potrzebne Ci będa dwa przerwania tego timera: CTC i Timer Overflow. W przerwaniu CTC ustawiaj pin a w przerwaniu OVF go zeruj lub odwrotnie jeśli chcesz tryb invert PWM. Nie zapomnij o od maskowaniu przerwań i ustawieniu globalnej flagi zezwalającej na przerwania oraz nie przesadź z częstotliwością...
Problem tkwił w tej linijce TIMSK =(1<<TOIE1)|(0<<OCIE1A)|(0&l... |(0<<ICIE1)|(0<<OCIE0B)| (1<<TOIE0)|(0<<OCIE0A) ; Nie wiem dlaczego nie dziala, ale jak chce uruchmic samo przerwanie od timera 1 to taki zapis działa -> TIMSK =(1<<TOIE1); Po prostu czary :-)
tobiasz54: nie jest mi potrzebne przerwanie od PWM. Ma działać bez niego, zresztą same odblokowanie przerwania od PWM i napisanie jego obsługi nie spowoduje wejścia do funkcji obsługi przerwania. Żeby przerwanie wprowadzić do użytku trzeba odpowiedni wpis zrobić w LPC_PWM1->MCR
To co napisał kol. Krauser jest bardzo istotne, ponieważ włączasz przerwanie od porównania (1<<OCIE1B), a nie masz funkcji jego obsługi, co de facto powoduje skok do adresu 0000h, czyli rozpoczęcie działania programu od początku.. Drobna uwaga do komentarza: [syntax=c]TCCR1B |= (1<<CS12)|(1<<WGM12) ; // prescaler 512[/syntax] W Atmega8...
Radziłbym Ci zobic tak: Cały PWM zrób na przerwaniu od jakiegoś Timera; nie uzywaj zmiennych typu single, jeżeli częstotliwośc przerwań bedzie odpowiednio szybka wystarczy zmienna typu byte lub word. Obsługe LCD czy przycisków i innych obliczeń zostaw w pętli główne Przykładowy PWM dla portb.3: Gdzie a to jakas amienna a do b podajesz wartosc PWM (0-255)......
PWM jest dobierany na podstawie mocy dostarczanej do grzałki. Po wzroście napięcia na wejściu zwiększa się wartość PMW aż do momentu gdy moc zacznie spadać wtedy wyszukiwanie zostaje przerwane i pwm przy którym była największa moc zostaje ustawiony na stałe. Właśnie opisałeś zasadę działania MPPT...
To raczej zły pomysł. Wyjście prawdopodobnie ustawi się w ciągły stan 1. Trzeba wyłączać przerwanie od Timera i tyle.
Algorytmu za bardzo nie ma , zmniejszam albo zwiększam PWM w zależności od napięcia. Wywolywalem pomiar i zmiane PWM w przerwaniu co 4-32ms ale to nie pomagało.
Może spróbuj sterowania w inny sposób - za pomocą przerwania INT2 (wywoływanego przyciskiem) uruchamiaj i zatrzymuj licznik TC0 (parametry PWM są ustawione u Ciebie poprawnie) tzn ustawiaj bity TCCR0|=(1<<CS00)|(1<<CS01) kiedy chcesz uruchomić licznik i zeruj je jeżeli chcesz zatrzymać. Samo ustawianie wartości wypełnienia czyli rejestr...
Timer1 jest używany jako pwm. Sprawdź czy bez wywoływania pwm dla tego timera jest on wstępnie skonfigurowany - odczytaj po prostu jego rejestry.
Jak więc za pomocą timera0 wywołać przerwanie co 1s? To zaproponowałem. Oczywiście błąd będzie nieco większy bo nie uwzględnia czasu jednego cyklu maszynowego na TCNT0=61 (przypisanie jednobajtowe) ale nie będzie dramatycznie większy. Zależy co rozumiemy przez odliczanie 1s. Jakiś lepszy patent na ww. zadane pytanie?
To jeszcze zmień tablicę na char i pokaż program. Czy ustawianie PWM działa poprawnie? Czy program w ogóle wchodzi w przerwanie?
Nie da się na to pytanie odpowiedzieć nie widząc kodu. USART obsługujesz w przerwaniach? Pamiętaj, że na czs jego wykonania inne przerwania są blokowane, użycie nieblokujących handlerów przerwań wymaga głębszej analizy. Ale generalnie spójrz na to w ten sposób - procesor przez 40% czasu się nudzi. Więc dla 16MHz masz sytuację taką, jakbyś miał cały...
Nie podoba mi się twoje rozwiązanie. Ja bym to zrobił tak - timer odmierzający takty w rytm podstawowego okresu PWM (czyli przerwania np. 1kHz). Teraz zamiast tych porównań z licznikami, wrzuć wartość licznika do rejestru compare register. Dzięki temu masz przerwanie po przepełnieniu timera (nowy okres) - w tym przerwaniu inicjujesz wysyłkę danych po...
W obsłudze przerwanie Timer1 zrób tylko ustawianie flagi, a załączanie i całą resztę przenieś do pętli głównej, właśnie tu sprawdzające stan tej flagi. Zamiast grzebać programowo W Timer1, wykorzystaj możliwości Timer1 compare, np w trybie PWM, bez używania przerwania. Ogólnie polecam : http://www.easy-soft.tsnet.pl/modules.ph...
Cytując swojego posta: " Ale odłączyłem wogóle silniki i zostawiłem PWM'y wiszące w powietrzu. Dzieje się to samo. Tak jakby procesor liczył też PWM'a. " Nie jest to wina mostka H, ponieważ odłączony jest on zupełnie z układu. Problem nierozwiązany, proszę o wskazówki...
Nawiązując do wypowiedzi użytkownika "trol.six" sprzętowy PWM odpada ponieważ : 1/ pin PB1 ma być zarezerwowany wyłącznie na przerwanie zewnętrzne INT0; 2/ pin PB0 mógłby być wyjściem PWM sprzętowym ale dla uproszczenia schematu podałem jedną diodę jako wyjście, a co w przypadku jeśli chciałbym otrzymać ten sam przebieg na trzech innych pinach czyli...
Nie sadze zeby bez sprzetowego PWM dalo sie to zrobic, wykonanie procedury obslugi przerwania troche trwa i nawet jak bys mial 16mhz to musialbys w 16 taktach zmiescic skok do przerwania, wykonanie go i powrot. Najlepiej ustaw PWM choc nie wiem czy i on nie ma jakiegos ograniczenia
Na pewno ACSR = _BV(ACIE); // Komparator powinno wyglądać tak ACSR |= _BV(ACIE); // Komparator Nie ma już chyba uint16... I jeszcze jedno zmienną pwm musisz zadeklarować tak: volatile unsigned int pwm= 255; ważne jest słowo kluczowe volatile... Jak wygląda funkcja PWM_out()...?.?.? Może przepisuj pwm do OCR1A w obsłudze przerwania...
Preskaler 1024 tyczył się sprzętowego PWM. Jeśli 16MHz/64/4999 = 50 to 16MHz/1024/ 256 = 61Hz i to najniższa wartość jaką uda Ci sie osiągnąć..ale na sprzętowym PWM . Możesz jednak spróbować. Żeby mieć programowe PWM o rozdzielczości 100 kroków (to niecałe 7bit) to przy tym sposobie trzeba mieć przerwanie 100 razy szybsze. Dla 8 bit już nie jest tak...
Cześć, mam dziwny problem z STM32F030K6T6. Są dwa timery TIM1 i TIM3. TIM1 ma podpięte 4 kanały PWM. Sytuacja jest następująca: zezwolenie na przerwania pochodzące od TIM3 powoduje zaprzestanie działania PWM na kanałach 1,2,3. 4 działa poprawnie. W agonicznym poszukiwaniu problemu wyłączyłem wszystkie inne przerwania a kod obsługi IRQ TIM3 wygląda teraz...
Z instrukcji tej pompy wynika, że są dwie możliwości (tryby pracy) w przypadku braku sygnału PWM - przerwania przewodu sterującego. Praca pompy z pełną wydajnością i całkowite zatrzymanie pompy. Być może sprawdził by się prosty regulator PWM na układzie NE555 zasilanym napięciem 5V. Można kupić gotowe regulatory PWM na NE555 jak i cyfrowe z wyświetlaczem...
[quote="insmod,post=21511867" Zauważyłem, że jeśli wyłączę mqtt (na urządzeniu, nie w kodzie), odczyty są znacznie bardziej spójne.[/quote] Głównym pytaniem jest, gdzie leży problem, czy pomijamy wywołania przerwań z powodu przegrzania procesora? Może moglibyśmy opracować prosty scenariusz testowy, aby to sprawdzić, z najprostszym generatorem sygnału...
O temat już był przerabiany :), zapoznaj się z wątkiem [url=http://www.elektroda.pl/rtvforum/to... EDIT: Zauważ że w obsłudze przerwaniu jest włączane przerwanie, więc hardwarowy stos powinien być odpowiednio duży.
hmmm Przede wszystkim: Enable Interrupts On Timer0 Przerwanie Stop Watchdog Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256 'PWM=250Hz Load Timer0 = 195 To włączenie przerwania jest wstrętne w tym miejscu:P Co do wniosków... może spróbuj zwiększyć stos o...
Problemik z PWM i Przerwaniem Timera. Czy możliwe jest żeby PWM sobie działał, a Timer generował normalne przerwanie? Z tego za zauważyłem to nie bardzo. TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0); //8bit PWM, phase correct TCCR1B = (1<<CS12) | (1<<WGM12); TCNT1H = 0x57; TCNT1L...
Można uśredniać przebieg z rezystora pomiarowego (filtrem RC) i uzyskać w ten sposób wartość średnią prądu. I w zależności od niego sterować PWMem. Ale wymaga to specjalnego algorytmu żeby uzyskać stały prąd. Można też dać coś podobnego do regulacji na wzmacniaczu operacyjnym. Czyli każdej wartości zmierzonego prądu przyporządkować jakąś wartość PWMa....
Program po przejściu do podprogramu (obsługującego to przerwanie) zostanie wykonany raz, linia po linii tak program w pętli głównej.
Jeśli zmienisz 100 na 1, przerwiesz włączanie i wyłączanie ściemniacza PWM. Aplikacja musi wiedzieć, czy kanał jest ściemniaczem, czy przekaźnikiem / diodą / czymś binarnym.
Włączając przerwanie od Timera który robi PWM (czyli Timer1) i pomiar ADC robiąc w tym przerwaniu (w każdym razie wyzwalając go w tym przerwaniu). PWM trzeba ustawić w tryb Phase Correct. Wtedy pomiar będzie dokładnie w środku przebiegu (w niczym to nie przeszkadza, nie musi być na końcu).
Nie ma takiej możliwości. Ten mikrokontroler nie ma mapowania pinów. W zależności od PWM i obciążenia mikrokontrolera można natomiast zrobić PWM programowy w oparciu o timer i przerwanie.
Muszę po prostu zmieniać OCR2 w przerwaniu o zadanej częstotliwości? Tak.
Może spróbuj pozamieniać kolejność zapisywania bajtów DCRxH i DCRxL - nie pamiętam który powinien być pierwszy ale to ma znaczenie. Dziwi mnie trochę że nie jest wykorzystywane przerwanie. W dokumentacji jest jak wół napisane że przepełnienie licznika ATR powoduje przerwanie i zmianę stanu wyjścia.
Witam. Jeśli to ma być łańcuch z lampkami to ani nie jest ci potrzebna aż taka rozdzielczość aby używać do tego timera w trybie 32 bitowym , również nie jest ci potrzebna tak wysoka częstotliwość PWM-a .
Da się na wewnętrznym generatorze odliczyć godzinę... Ja jak chcę odliczyć skundę to ustawiam timer0 (16-bit) na tryb fast PWM włączam przerwanie od przepełnienia i ustawiam wartość TOP tak żeby przerwanie było co sekundę... Z dokładnością przy godzinie będzie pewnie kiepsko ale można zrobić kalibrację wewnętrznego generatora i sprawdzić...
Załączyłem przerwany przewód
Odpowiedź na Twoje pytanie jest trywialnie prosta. Rejestry które są buforowane (ARR, PSC i chyba jeszcze jakieś) aktualizują swój realny stan w momencie update'u, który występuje automatycznie w momencie przekręcenia licznika, czyli (w uproszczeniu) doliczenia do ARR. Ty w swoim wyjątkowo dziwnym kodzie fizycznie uniemożliwiasz wystąpienie update'u,...
Znaczy, w głównym programie masz obsługę PWM i do niego dokleiłeś obsługę kolejnych kanałów PWM z działającego programu? Czy przypadkiem oba fragmenty kodu nie mieszają sobie wzajemnie w ustawieniach? Jeżeli masz opóźnienie zrobione na pętlach i w trakcie wykonywania takiej pętli wystąpi przerwanie to czas jej wykonania będzie dłuższy niż zakładany....
A w jaki sposób mogę wygenerować 2 sygnały PWM za pomocą jednego timera? Korzystając z przerwania od porównania bądź przepełnienia i "ręcznego" zmieniania stanu pinów na przeciwny. Przy okazji w takim przerwaniu mógłbyś uruchamiać ADC co drugi cykl co by rozwiązałoby Twój problem. Oczywiście czas do następnego przerwania musi być dłuższy niż czas przetwarzania...
Zobacz cz na silniku wentylatora masz modul metalowy pwm. Bo cos tu sie kxxxxx nie trzyma.
Witam, Mam pytanie apropos podlaczenia przetwornika drogi oraz sygnalu wtrysku do uC. Wszyscy pisza o komputerach samochodwych, ale nie doszukalem sie informacji o samym impulsie. Z tego co wiem to wtrysk daje sygnal prostokatny (PWM), czy podobnie jest z przetwornikiem drogi? Czy moge oba sygnaly podpiac bezposrednio pod uC (przerwania) - zgodnosc...
I dobrze. Aby zmieniać wypełnienie musisz uciec się do pomocy przerwania ( to wada ,ale za to 1 timerem możesz mieć 4 zupełnie niezależne PWM). A działać może to mniej więcej tak (przykładowo): Timer0 ustawiasz na najmniejszy oczekiwany okres (rozdzielczość). Ustawiasz stan początkowy i jego przełączenie w EMR. MR ustawiasz na oczekiwaną długość stanu...
To nie są przerwania na PB1, 2, 3, a sprzętowe wyjścia timerów. NA ATmega8 masz trzy wyjścia PWM - dwa z T1 i jedno z T2. Nie wiem, ilu w końcu potrzebujesz. Jednego powinieneś użyć do generowania 36 kHz, kolejnego (a może dwóch) do sterowania silnikiem. Czemu mają służyć te zabawy z przerwaniem timera i programowym machaniem nogą uC?
ADC robi 3 pomiary na jeden cykl obliczeniowy. Z tych 3 pomiarów wykorzystujesz tylko 1. Jeżeli nie są synchroniczne, to może się pojawić dodatkowa częstotliwość w obwodzie sterowania. To zależy od częstotliwości charakterystycznej obwodu wyjściowego, m.in. pojemności kondensatora filtrującego. Ciebie trochę ratuje regulator PI, który realizuje prosty...
Przy 8MHz i tych ustawieniach Timera 2 częstotliwość PWM powinna być 156Hz jeżeli nic nie przeoczyłem. Czasy opóźnień są trochę naciągane (znaczy, krótkie), ale nie powinno to migać chaotycznie. Chyba, że przerwania się nie wyrabiają. Jaki masz poziom optymalizacji w kompilatorze?
Mam do rozwiązania pewien problem związany ze sterowaniem wartością PWM w zależności od stanu dwóch przełączników hebelkowych SW1 i SW2. Zmiany muszą uwzględniać włączanie i wyłączanie tych hebelków. Scenariusz wygląda następująco: SW1 i SW2 są wyłączone - PWM = 0 Włączam SW1 przy wyłączonym SW2 - PWM = 153 Przy włączonym SW1 włączam SW2 - PWM po upływie...
[syntax=c]//============================... // TIM3 Interrupt Handler //======================================... void TIM3_IRQHandler(void){ if(TIM3->SR & TIM_SR_UIF) // if UIF flag is set { TIM3->SR &= ~TIM_SR_UIF; // clear UIF flag } }[/syntax] AND zbyteczny az prosi...
Witam, kolego piotricz potrzebuje zrobić na Atmedze sterowanie fazowe. Powiedz mi jak rozwiązałeś to sterowanie programowo? Wykrywasz przejście przez 0 i co dalej się zieje z tym sygnałem? Jak on wpływa na PWM? Przerwania?
Ok, w takim razie proszę o wskazówkę jak pogodzic timer1 dla PWM i zrobić przerwanie co 0,2s dla wykonania podprogramu ( czas wykonywania ok. 0,16s). Przerwanie musi być dokładne ze względu na wyliczenia ilości energii. Jak narazie wszelkie próby na układzie A8, spełzły na niczym. Brak możliwości zastosowania PWM i drugiego licznika Timer 2 wywołania...
Postanowiłem wrócić do tematu. Układ można kupić jedynie na zagranicznych aukcjach. Trochę znam się na programowaniu mikro-kontrolerów. Czy udało by się to zrobić na jakimś AVR? Jeśli tak, na co muszę zwrócić uwagę? Chodzi mi o ogólną ideę programu. Na pewno muszę skonfigurować PWM, dobrać częstotliwość tego pinu oraz przerwanie od transoptora.
Incr Reference If Reference < R Then : Set Portb.2 : Else : Reset Portb.2 : End If 'red If Reference < G Then : Set Portb.3 : Else : Reset Portb.3 : End If 'green If Reference < B Then : Set Portb.4 : Else : Reset Portb.4 : End If 'blue Całość wywoływana przez przerwanie - przepełnienie licznika....
Dlaczego nie Timer ? Obsługa przerwania TIMER0_OVR w niczym nie przeszkadza w działaniu PWM, a mamy w ten sposób jakąś podstawę czasu, który można sobie odliczać w tym przerwaniu. Dokładność co do 3 miejsc po przecinku nie jest taka istotna przy dekodowaniu RC5... Co do kodu - to nie ma prawa tak działać, obsługa przerwania powinna być jak najkrótsza,...
Muszę zrobić tak że niezależnie od ilości czasu otwarcia wyrażonego w ms pierwsza część czyli pick (pierwszy stan na oscyloskopie) zawsze ma wynosić 1ms a reszta to naprzemienne otwarcie/zamknięcie w tempie które uniemożliwia zamknięcie cewki. Pierwszy pik możesz zrobić po prostu używając delay w microsekundach, kolejne piki używając PWM Caość można...
1 kwarc - ucierpi na tym "niezawodność' przerwanie zerujące - bez sensu, bo wyróżniasz jeden z procesorów Jeśli już, to niech wszystkie generują takie przerwanie a potem zsumować je do kupy i puścić na wszystkie naraz? A taki pomysł, żeby w przypadku wystąpienia pierwszej różnicy na wyjściach PWM generować przerwanie resetujące liczniki? To by załatwiło...
Witam. Dołączę się, ponieważ też mam problem z przerwaniem. W poniższym projekcie przerwanie PWM działa jak należy. wywołanie ustawione jest na 11.025 kHz. Problem w tym, że nie wykonuje się kod w pętli głównej który znajduje się po uruchomieniu przerwania. Mógłby ktoś zerknąć i wyjaśnić mi co jest nie tak? Jak widać po uruchomieniu PWM i jego przerwania...
witam troszke duzo kombinujecie a to jest bardzo proste w c wam nienapisze a tym barzdziej na '51 ale moge podac kod w basicu który łatwo przerobić na C PWM 8 bitowe f=100hz definiujemy 2 zmienne globalne Count i PWM1 i zmienną bitową out i przerwanie timera co 1/(100*256) s przerwanie: count=count+1 if count=0 then out=1 if count=pwm1 then out=0...
Nie bawiłem się ATtiny2313, ale jeśli ma PWM to da się zrobić jakieś odtwarzanie dźwięku z próbek. Robiłem takie coś na ATmega128. Puszczasz generator PWM na najwyższej częstotliwości i jakiś timer do generowania przerwania okresowo. Timer determinuje częstotliwość prókowania. Podczas każdego przerwania timera wpisujesz nową próbkę do rejestru generatora...
Witam mam problem z chyba skonfigurowaniem przerwań w "C" do tej pory takie "zabawy" robiłem w bascomie ale tam to każdy potrafi ;) mam przerwanie int0 z pcf8583 w międzyczasie odczytuje temperaturę z ds18b20 no i .. właśnie jak uruchomiłem PWM zaczęły się problemy, układ czasami się resetuje lub zawiesza zacytuje fragmenty: dodam ze pdf czytałem wielokrotnie...
Napisałem podobny programik na ATtiny2313 w zeszłym roku. Użyłem komparatora bo szkoda mi było przerwań. Można go przerobić na ATmega8 Jest na elektrodzie-attiny2313 bascom pwm działa.
PWM jest w 100% cyfrowy (o ile nie zamieniasz go potem filtrem na sygnał analogowy), prosty w implementacji (po stronie slave tylko PWM, po stronie Master jedno przerwanie). Gorzej z korekcją błędów, ale w sumie co tu korygować - to tylko jedno przejście z "0" do "1" i z "1" do "0". Mógłbyś zrobić prostą "korekcję" na zasadzie: 1.Puścić sygnał PWM o...
Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej) W przerwaniu: - sczytane wartości napięć i prądów i porównanie ich z wartościami zadanymi -jeśli prąd powyżej 1A niż zadany to wyjście napięciowe zmniejszone o połowę i wystawia zmienną kontrolną1 na 1 -Jeśli różnica 0,5A a 1A to napięcie zmniejszone...
No to jeżeli nie wykorzystujesz ADC ani AC, to możesz ADC wykorzystać jako dodatkowy timer w trybie free running. Nie musisz go odczytywać, ale przerwanie będą generowane i do wykorzystania. Być może wtedy zwolnisz sobie jakiś timer?
Czy jest mozliwosc wykorzystania timera do przerwania oraz pwm? potrzebuje 4 kanaly PWM+ wykorzystac przepelnienie timera do przerwania. Pozdrawiam
PWM jest oparte o przerwanie wewnętrzne, Do wyzwolenia trzeba użyć wektorów przerwań zewnętrznych PCINT0..5. Do tych przerwań trzeba mieć osobną procedurę obsługi. Patrz rozdział 9 Datasheet
Przychodzi Tobie prostokąt o wypełnieniu ok. 1-2ms co kilkadziesiąt ms. Musisz podłączyć ten sygnał pod przerwanie w atmega i timerem mierzyć czas pomiędzy zmianą sygnału z "0" na "1" a zmianą z "1" na "0". Z tej informacji generujesz odpowiednie PWM. PS. Ze względu na to, że nowsze atmegi mają więcej wyjść PWM polecam np. atmega88 zamiast atmega8.
Witam, Od jakiegoś czasu bawię się uC at90usb646. Do pinów portu B mam podłączony wyświetlacz LED. Zabrałem się za zrobienie programowego PWM. Wykorzystałem do tego dwa przerwania w trybie Fast PWM: przerwanie od przepełnienia licznika timer0 oraz przerwana od porównania wartości rejestru OCR z wartością rejestru TCNT0. Rozumiem że przerwania występują...
Witam serdecznie.Jestem totalnym laikiem w sprawach elektroniki, ale postaram się przedstawić w miarę zwięźle mój problem.Jestem posiadaczem pieca kondensacyjnego wolf tbg-40.Wszystko działało sprawnie.Pewnego dnia na piecu pojawił sie błąd nr 26 ( Wentylator nie wyłącza sie - wentylator nie przechodzi do stanu spoczynkowego.( możliwe przyczyny według...
problem juz chyba rozwiązałem - nie potrzeba do tego przerwań.
Jak przerwanie? To ma działać z automatu czy na przerwaniach? Bo jak na przerwaniach to musisz zerować w nim licznik, bo od ocr2b nie ma opcji ctc. Najlepiej zrób tak : ustaw licznik w tryb ctc i do ocr2a wpisz odpowiednią wartość skracającą cykl, do ocr2b wpisz dowolną wartość od 0 - ocr2a, ustaw bit COM2B0, włącz licznik z odpowiednim preskalerem....
Witam. Bardzo zainteresował mnie ten algorytm PWM . Chętnie obejrze ten kod w bascomie. Zawsze pisze programowy PWM na przerwaniach. Jesli to mozliwe to prosze przybliżyć ten wątek.
serialin przerwanie delphi przerwanie przerwanie timer0
ustawianie ręczne kanałów zabezpieczenie mikrokontrolera krups ea8010
telefunken czarny ekran mikrokomputer cobra1
Still RX20 kod błędu 02A087 – CAN-Bus, sterownik jazdy, diagnostyka, objawy, naprawa Młotowiertarka Total – sprzęgło bezpieczeństwa, usterki, naprawa, części zamienne