1. Nie definiuj zegara w kodzie tylko w opcjach kompilatora: http://mikrokontrolery.blogspot.com/2011... 2. Problem natomiast pojawia się wówczas, gdy funkcja obsługi przerwania wykonuje się długo. Docelowo będzie sterować portami przez około 16 sekund. Przerwanie ma się wykonywać krótko i tego zawsze się trzymaj, bo łatwo...
Nie, , teraz widzę zmiana CS00 na CS01 nie objawia sie zmianą częstotliwości przerwania (powinno być 8x mniej) ;/
spr dodać 'volatile' przy deklaracji zmiennej, możliwe że kompilator optymalizując wpisuje na stałe wartość zadeklarowaną na początku, w przerwaniu jej wartość się nie zmienia, dla kompilatora jest ona w tym miejscu jako stała ...
#define F_CPU 1000000 Jak uzyskałeś częstotliwość 1MHz? ATTINY13 ma wewnętrzny RC=9.6MHz. Po podziale przez 8 daje 1.2MHz. Bez zewnętrznego sygnału albo grzebania w OSCCAL ciężko jest uzyskać 1MHz. Tak na marginesie to częstotliwość powinno się definiować w ustawieniach projektu. Dodatkowo delay w pętli głównej przerywanej przerwaniami nie będzie wiarygodny....
Chodzi o to, że zmiana napięcia na PC0 jest właściwie odczytywana przez przetwornik i zapisywana do zmiennej pomiar. Od tej wartości zależy częstotliwość przerwania. Następuje zmiana deklaracji OCR1A. Idea jest taka, że zmieniając napięcie na wejściu PC0 chcę uzyskać zmianę częstotliwości przerwania ISR(TIMER1_COMPA_vect). Wszystko jest w porządku do...
Jak i gdzie masz zdefiniowaną częstotliwość zegara F_CPU?
Nie wiem, czy do końca zrozumiałem Twoją odpowiedź, gdyż kłóci się z tym co obserwuję w układzie. Mogę zmieniać częstotliwość jednego z kanałów w trakcie wykonywania programu. Problem został rozwiązany, dany kanał przy zmianie okresu jest załączany i wyłączany w procedurze obslugi przerwania.
Gratuluję wytrwałości :) Jest jeszcze jedna rzecz, którą będę chciał zrobić - dodać dodatkowy timer, żeby zmienna lesser_delay_counter (flaga przyjmująca 4 stany w zależności od tego co ma być wyświetlone na ekranie "czas, temperatura, cisnienie, hPa") była niezależna od timera wyznaczającego częstotliwość multipleksowania, Jako alternatywę proponuję...
Jak masz wolno-zmienny enkoder (impulsator) to można podpiąć kanały A i B pod wejścia zwykłe. Program: jak jest A i narasta (zbocze) B to funkcja zwiększ rejestr (+1), a jak jest B i narasta (zbocze) A to zmniejsz (funkcja -1) rejestr szybkości krokowej. Można podłączyć pod szybki licznik (wtedy praca w przerwaniach) ale trzeba analizować: czy zawartość...
Jaka jest aktualna częstotliwość zegara? Jak często uruchamiane jest przerwanie? Ile trwa naciśnięcie przycisku? Musisz zmieniać opcje tylko kiedy przycisk został naciśnięty, nie przytrzymany. Dodaj do przerwania warunek sprawdzający poprzedni stan przycisku. Pomyśl nad wyeliminowaniem delay.
Napisał, że program nie działa tak jak chce, ale nie napisał czy w jakikolwiek sposób sprawdził czy układ wykonuje obsługę przerwania. Choćby przez zapalenie LEDa. W podanym przykładzie zmiana częstotliwości nastąpi dopiero po 15 sekundach. Czy autor czeka tyle? A może fusa ma ustawionego na 1Mhz i zmiana nastąpi za 120 sekund? JarekC
Częstotliwość wyjściowa wynika z faktu, że odtworzenie jednego okresu z tablicy wymaga wykonania 240 kolejnych odczytów czyli, że: Fwy=Fprzerwań/240 {Rąbnąłem się w pierwszym poście :oops: } A ogólnie: Fwy:=Fprzerwań/N gdzie Fprzerwań - częstotliwość przerwań N - długość tablicy sinusa. Użyta metoda zmiany częstotliwości przerwań dla zmiany Fwy ma pewną...
Wielkie dzięki za naprowadzenie! Faktycznie - SysTick_Config "odkonfigurowywał" mi źródło zegara. Wyrzuciłem to ponowne ustawianie źródła i teraz działa dobrze. Dokumentację czytałem, funkcję przechodziłem wiele razy krok po kroku... ale widocznie ze zmęczenia i frustracji ciągle przegapiałem ten jeden bit :). Co do 4x za szybkiego migania - jednak...
Ponieważ aktualnie mierzę się z podobnym problemem w driverach zaimplementowanych w moim RTOSie, powiem Ci szczerze, że taki sposób obsługi SPI jest po prostu niemożliwy do zrobienia poprawnie i tak żeby osiągnąć jakąś rozsądną częstotliwość. Sytuacja którą obserwujesz jest stosunkowo prosta. Natychmiast po uruchomieniu transmisji masz pierwsze przerwanie...
Dodatkowy wpływ na błąd ma niedokładność częstotliwości generatora kwarcowego. Błąd w sekundach na dobę, wyraża się wzorem: \Delta=86400*(1-\frac{fwzr}{f}) \Delta - błąd w sekundach na dobę (wartość ujemna oznacza spóźnianie się) fwzr - częstotliwość wzorcowa (czyli to co ma być np. 4000000 Hz) f - częstotliwość rzeczywista kwarcu lub generatora kwarcowego...
Obsługa UART jest przerywana TIMEREM i dlatego gubi znaki. Zrób odbiór UARTU na przerwaniach, odbieraj w nim tylko pojedynczy znak i ładuj go do bufora (nie czekaj w tej funcji,aż odbierzesz wszystkie znaki), a po odebraniu końcowego znaku ustawiasz flagę, że skończył. I w pętli głównej dekodujesz sobie na spokojnie tą ramkę. Popróbuj może jeszcze ze...
I tu dochodzimy niestety do szukania maksimów, lub zmiany częstotliwości wyzwalania przerwania przy krokach dX. Najlepiej jak byś trafiał w końcowe indeksy. Albo przynajmniej bardzo blisko. Samym dX przy takich krokach tego nie zrobisz.
O ile dorze rozumiem idee tego przerwania (nie miałem okazji wykorzystać go w praktyce) to określona zmiana na którymkolwiek pinie z grupy wywołuje przerwanie... i teraz myślałem, żeby za pomocą prostych warunków zliczać, który wywołał i ile w danym czasie. Problem widzę w momencie, gdy przykładowo czujnik A wywoła przerwanie w bardzo krótkim czasie...
Uwaga! 1) Jeżeli zmienną licznik będziesz miał zadeklarowaną wewnątrz funkcji obsługującej przerwanie to przykładowa deklaracja powinna wyglądać tak: static uint8_t licznik = 0; 2) Jeżeli natomiast zmienną licznik zadeklarujesz gdzieś w programie głównym, wtedy powinieneś ją przykładowo zadeklarować jako: volatile uint8_t licznik = 0; po co te "przedrostki"...
Istnieją dwie cyfrowe metody pomiaru częstotliwości: 1. Pomiar ilości impulsów wzorcowych w trakcie trwania okresu sygnału mierzonego. Konkretnie mierzymy imp. wzorcowe w trakcie trwania połowy okresu - zwykle, gdy jest poziom wysoki. W takiej sytuacji jeżeli zmierzysz N imp. wzorcowych w trakcie połowy okresu, to: Tx=2*N*Tw, gdzie Tx okres przebiegu...
Dziękuję bonanza za pomoc Twoja się bardzo przydała, dodatkowo okazało się, że środkowy pin od potencjometru w środku był przerwany, dziwna sprawa, ale zlutowałem go na nowo i zmiana częstotliwości potencjometrem już działa :) https://obrazki.elektroda.pl/5980137100_...
Sądzę że to niemożliwe do policzenia podczas kompilacji ponieważ w programie może być pętla, a kompilator nie wie ile razy zostanie wykonana. W moim kodzie akurat w tym miejscu nie ma pętli ale są 3 warunki czyli co najmniej 2 bliskie skoki. Czyli też nei wiadomo ile czasu się bedzie wykonywać, bo skok to 3 cykle, a brak skoku to dwa cykle. Może są...
Na nie możesz policzyć? Chyba że nie wiesz jak :D Masz 8MHz. A przerwanie przychodzi z częstotliwością 125Hz (dlatego trzeba 125 razy odliczyć aby wyszła 1 sekunda). Preskaler Timera 256. 8000000/256/125 = 250. I dlatego jest Load Timer0 = 250 Teraz chcesz kwarca 7372800. Więc musisz tak kombinować aby uzyskać jakąś sensowną liczbę przerwań i sensowny...
Witam, próbuję zrobić cyfrowy metronom - póki co składa się on z wyświetlacza 7-segmentowego i dwóch przycisków służących do wyboru tempa (BPM). Zegar wewnętrzny ustawiony na 1MHz. Mam jednak problem z napisaniem części kodu odpowiedzialnej za "piszczenie" buzzera w wybranym tempie. Korzystam z timera 1 w trybie 4 (CTC) z preskalerem 8, co według moich...
Oczywiście, że się da. Najładniej wygląda regulacja podświetlenia przez PWM, z płynną zmianą jasności. I tak musisz mieć jakiś timer - zaprogramuj timer na zgłaszania przerwań z częstotliwością np. 200 Hz (to będzie dobre i do PWM), a w przerwaniach odliczaj czas wykonywania różnych czynności, np. gaszenia podświetlenia.
Witam dzisiaj usiadłem przy tym drugi sygnale PWM i starałem sie go zrobić według Twoich wskazówek ale cos mi jeszcze nie działa. Zrobilem przerwanie IRQ. int main(void) { #define T0EM0 1 #define T0EMC0_TOGGLE (3<<4) #define T0MCR_Reset_on_MR0 0x2U #define T0TCR_Counter_Reset 0x2U #define T0TCR_Counter_Enable 0x1U #define...
No problem jak mawiają Rosjanie. "Dzień dobry Towarzyszu Wojtku. Niestety mało robiłem na TB31202 i nie mogłem znaleźć do niego konkretnych opisów. Kiedyś miałem zadanie przestroić radiostację z pasma 470MHz na 430MHz. Zmiana częstotliwości w procesorze radiostacji była niemożliwa, dlatego też zrobiłem tak: linie sterujące z procesora na TB31202 przerwałem...
Nowa płyta PCB umożliwia korzystanie z jednej jak i drugiej częstotliwości. To tylko mała żonglerka zworkami W sumie to obie częstotliwości dadzą podobne wynik, apteka byłaby jakby ktoś chciał robić z kobry generator serwisowy.... to wówczas będzie trzeba co do Hz ustawiać. Mam fajną procedurę na proste dżingle do programów... np. aby zmiana pozycji...
Jak rozumiem chcesz defakto dzielić częstotliwość przebiegu jeżeli tak to nic prostszego: pętla for inkrementowana stanem wysokim np. i po osiągnięciu określonej ilości powtórzeń zmiana jakiegoś pinu "wynikowego" na stan przeciwny. problem się zacznie jak będziesz chciał podzielić przez liczbę inną niż wielokrotność 2 nie mam pomysłu jak takie dzielenie...
Z odpowiednim filtrem sinusoida >100kHz też wyglądałaby dobrze. Ale Prostokąt czy piła już nie :-) Zanikanie przebiegu podczas przestrajania to zamierzony efekt, czy "bug"? Nie zamierzony, nie bug. W czasie generowania przebiegu wykonywany jest program: [syntax=avrasm] 1: add r18, %0;1 cycle adc r19, %1;1 cycle adc %A3, %2;1 cycle lpm ;3 cycles out...
Możesz zrobić to na dwa sposoby: 1. przez regulację częstotliwości timera który generuje przerwanie 2. przez regulację skoku w banku próbek przy dużym skoku podstawowym (np 100-200) zmiana +1/-1 powinna dać bardzo mały krok w zmianie częstotliwości sygnału wyjściowego.
Tak na szybko - 8000000/8/28= w przybliżeniu 35714 kHz (czujnik, który podałeś spokojnie to obsłuży). Ustaw zegar na 8000000, Prescaler 8, a Counter odświeżaj wartością 242. Dlaczego 242 ?, bo 256-242=14. Dlaczego wynikiem ma być 14, a nie 28 ? Jeśli w przerwaniu użyjesz Toggle PortX.Y to z urzędu częstotliwość na pinie będziesz miał dwa razy niższą,...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
W starych SoundBlasterach pomagało wyłączenie 16bitowego DMA zasobach urządzenia ew. przestawienie na inne przerwanie i adresy, w skrajnych przypadkach zmiana częstotliwości magistrali systemowej lub jeśli zakłócenia przechodzą na kartę zewnętrznie to obić aluminium :D
Chce mierzyć impulsy z zakresu 10kHz do 120kHz... 89cx051 (at)24MHz + Basic = Ciężka(niemożliwa?) sprawa przy 120kHz. Może w asm dałoby radę , ale Basic :( Zmienił bym także koncepcję/sposób pomiaru , a mianowicie: Sygnał podaję na INT0 i odwrócony(zanegowany) na INT1 , włączam bramkowanie liczników T0 i T1 i niech zliczają cykle maszynowe.T0 liczy...
Twoje procedury obsługi przerwań są stosunkowo długie. Np. ISR(TIMER1_COMPA_vect) trwa ok. 670 taktów zegara. Z kolei odstęp między kolejnymi przerwaniami przy zmiennej okres1=127, jak sam napisałeś, wynosi 8*128=1024 taktów. Jeżeli zmienną okres1 zmniejszysz np. do 80 taktów, to przerwania będą częściej niż trwa ich obsługa, więc niektóre zostaną po...
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 ,...
Dzięki za odpowiedź. Patrzyłem sobie na szybkość działania migając LEDem. Opóźnienie było robione pętlą for (kompilowaną do SUBS, CMP, BNE.N) więc program ciągle skakał i nie było za bardzo widać rezultatu działania prefetchingu. Co do biblioteki ST to znam opinię o niej, sam znalazłem błąd w siostrzanej bibliotece do USB. Tutaj jednak nie było z nią...
Okazało się, że po zmianie częstotliwości APB2 , przestał mi działać prawidłowo PWM, który steruje układem, który to ten generuje sygnały na wejściach EXTI. Wystarczyła poprawa w konfiguracji PWM, po zmianie częstotliwości APB2. Temat zamykam.
Wytyczne są takie: - Atmega32 - pomiar co 0,2s wejść ADC ( czyli przerwanie np Timer1) - PWM ( i tu musi byc osobny układ lub druga atmega) częstotliwość ok 1kHz - oczywiście ewentualna zmiana aktualnego procentu wypełnienia PWM też co 0,2 sek. Z tego co sie orientuje to wykorzystanie 2 przerwań nie jest proste, a my tego nie potrafimy. Ważne jest to...
Może napisze to bardziej łopatologicznie. 1)Mam napisany program generujący PWM SPRZĘTOWY na PB3 (atmega8) 2)Generuje przerwanie w trybie porównania 3)W uchwycie przerwania robie funkcje TOGGLE na dowolnym wyjściu 4)Problem pojawia się dla wypełnienia 0 i 255 (wiem dlaczego) pojawia się też po wyjściu z wartości skrajnych (przebieg zmienia polaryzacje)...
[syntax=csharp]#include <avr/io.h> #include <avr/interrupt.h> //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PB0 //definicja LED2 (do którego pinu podłączony LED2) #define LED2 PB1 //definicja początkowej wartości timera #define timer_start 6 //zmienna pomocnicza-licznik używana w przerwaniu volatile uint8_t cnt=0; void...
100 Hz to nie jest jakoś specjalnie dużo no chyba że masz wolnego bardzo procka. Jak się domyślam 100Hz częstotliwość pwma na kanał co daje Ci 1.2kHz na całość sterowania. Teraz tak jeśli masz te 100Hz to efektu migania diodą raczej nie powinieneś obserwować chyba że wraz ze zmianą wypełnienia niefortunnie zmieniasz również częstotliwość pwma ?. Ja...
Po pierwsze aktualizacja CCRx powinna następować w pewnych określonych momentach. Dlaczego: wyobraź sobie, że licznik jest np równy 100, CCRx 105. Tym momencie zmieniasz ten CCRx na 99. Co się dzieje. Licznik będzie liczył do końca, przekręci się i doliczy do 99 - dając takie PWM o innej częstotliwości. Można włączyć preload register (rejestr CCMRx...
Częstotliwość tu nie odgrywa większej roli. Regulację uzyskuje się przez zmianę śrendiego czasu wyświetlania cyfry. Czyli np, dwa przerwaina timera - overflow - zmiana cyfry, przerwanie compare - wygaszenie wyświetlacza. Regulujesz jasność przerwaniem compare, dla 16-bitowego licznika masz głębię 16-bitową (teoretycznie). Tego typu koncepcję masz pokazaną...
rozumiem, że sygn zewn zbędny jeśli fusy są ustawione na wewn. Czy po ustawieniu ich na zewn i podłączenie sygnału zewnętrznego nie zablokuje mi możliwość programowania uC przez ISP? Tylko domyślam się w co znaczy "zakładać" dokładność i rozumiem że trzeba coś obliczyć. Mógłbyś mi pomóc? Czy do tego powinienem określić dokładność jaką potrzebuję dla...
100Hz wziąłem z - Ocr1a = 2857 (1,4kHz), a w Ocr1b = 3333(1,2kHz) to układ generuje tylko pierwszą częstotliwość z OCR1A, no bo 2957 taktów przychodzi szybciej i TIMER1 się zeruje, a wiec nigdy nie ma przerwania z OCR1B,przez co nigdy nie zmiana się stan końcówki PB.2 - Ocr1a = 3333(1,2kHz), a w Ocr1b = 2857(1,4kHz), to oba układy generują mniejszą...
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
Proponuję zmianę m8 na m88 wtedy każde z wejść może wyzwalać przerwanie zewnętrzne. Częstotliwość przebiegu albo zadać na stałe a raczej na stałe ustalić czas przy jakim ma nastąpić co najmniej jedna zmiana stanu. Jeżeli nie nastąpi to ALARM. Można by też próbować rozpoznawać częstotliwość za pomocą średnich kroczących. Pozwoli to "rozpędzić" urządzenie,...
Piszesz, że wiesz jak działa multiplekser, a w algorytmie ani śladu tej wiedzy. Już na początku włączasz przerwania od !INT0. Na schemacie ten pin nie jest do niczego podłączony. Gdzie tu logika? Co do samego MPXa, jeżeli chcesz skanować kanały, to potrzebujesz licznik, który będzie generował sygnał przerwania i adresował kolejny kanał MPXa z określonym...
Właśnie na nowo podszedłem do CTC, prawie, że udało mi się opracować. Zanim wypuszczę nową wersję, to mam parę wątpliwości: 1. Czy to prawda, że CA80 tak naprawdę wykorzystuję tylko dwa kanały CTC? Czy dobrze rozumiem, że oba kazały są pobudzane tylko przez pozytywkę w wersji "z CTC", a konkretnie przez generatory o częstotliwości regulowanej potencjometrem?...
(at)exlibris71 Musi być to zrealizowane na jednym timerze. I tak jak u ciebie tak i u mnie wygląda program główny, w którym inicjuję wartości początkowe wyświetlanych cyfr, włączam przerwania i dalej mam pustą pętlę z warunkiem, że jeżeli zmieni mi się bit odpowiadający za częstotliwość odświeżania cyfr, to inkrementuje mi sekundnik i później wywołuje...
Już dziś nie zajrzę do Twojego kodu (pewnie jutro wieczorem), ale jeśli chodzi o częstotliwość próbkowania, myślę że się pomyliłeś. Normalnie ATMEGA może zbierać prawie osiemdziesiąt tysięcy próbek na sekundę. Ja podałem kod na gwarantowane 1000 pps, a Ty chcesz spowolnić jeszcze ADC? To peryferium działa niezależnie od procesora i zmiana częstotliwości...
Lpt to jest nic innego jak 17 pinów odzwierciedlonych w 3 portach 0x378 - 0x37a, rs232 to jest cały kontroler który ma 2 bufory, 2 rejestry przesówane, detektor błędów (parzystości), blok współpracy z modemem (wejścia/wyjścia: dtr,rts,dsr,cts,ri,dcd), programowalny generator częstotliwości więc system ustawi ten układ na jakąś częstotliwość, wpisze...
Witam ponownie po dłuższej przerwie. Przed świętami ponownie zabrałem się do "programu" i mimo iż zastosowałem się do rady by dokładniej czytać RM, mam kłopot z ARR. Żeby zobrazować: Powiedzmy, że programik zmieniam sekwencje świecenia diod (przy pomocy switch) zmiana wyzwalana przerwaniem, a szybkość zmiany regulowana wartością ARR. z menu na lcd wybieram...
Tutaj jest program w C częściowo można coś zobaczyć: https://www.elektroda.pl/rtvforum/viewto... ustawiasz timer1 (drobne zmiany na częstotliwość), w przerwaniu ISR(TIMER1_COMPA_vect) obsługujesz czas. Reszte kodu wyrzucasz. Musisz jeszcze dopisać testowanie czasu w tym przerwaniu, plus jakiś sposób ustawiania czasu. Czas możesz ustawić...
Witam! Chciałem wykorzystać timer0 do dokładnego odmierzania czasu, jednak coś powoduje zawieszenie całego programu. Dzieje się tak gdy próbuję odczytać wartość zmiennej w obsłudze przerwania lub w pętli głównej programu. Przerwania od timera są na pewno obsługiwane ponieważ działa zmiana stanu portu w obsłudze przerwania. Kod wygląda następująco: //ZMIENNE...
Witam. Mam problem na który sensownej odpowiedzi nie znalazłem, w nocie katalogowej także nie ma opisanego takiego przypadku za to jest kilka innych które mi średnio pasują do czegokolwiek. Mianowicie potrzebuje produkować przebieg o niezależnie programowalnej częstotliwości i czasie trwania stanu wysokiego. Parametry tego przebiegu to częstotliwość...
Reasumując: P0-22 wykorzystałem jako STEP do sterownika silnika(zmiana stanu w przerwaniu timera0) P0-21 wykorzystałem jako DIR w sterowniku(zapala też mi zewnetrzną diodę jak 1) W przerwaniu liczę ilość przerwań. [syntax=c] void TIMER0_IRQHandler (void) { LPC_TIM0->IR = 1; /* clear interrupt flag */ timer0_counter++; //pclksel0_val = LPC_SC->PCLKSEL0;...
Ok wiec tak . mam częstotliwość wejściowa , zmienna i muszę ja niejako online zmieniać w gore lub w dół. problem w tym ze jak robię to na przerwaniach( wykrywanie zbocza, odmierzanie czasu) to mi się przerwania nachodzą i gubi niektóre przez co zmiana jest np zamiast 2,3 jest 2,6 i to też zależy od F.
Algorytm nie jest idealny, poprostu dla wartości feedback poniżej ustawionego napiecia dodaje 1 do wartości pwm (0-255) Z jaką częstotliwością to sie wykonuje? Robisz to w przerwaniach czy pętli głównego programu? Zmiana wartosci duty dzieje sie w petli loop. Czestotliwosc jest ustawiona na 31460Hz na pinie 1 przez zmiane timera0 w attiny. Dodano po...
Robiłem taki i faktycznie działa, nie migota. Tylko mam właśnie problem z tym że w zależności od godziny, różne diody się będą świecić (będzie ich więcej niż 3). Czyli będę musiał i tak umieścić show() w loopie, co spowoduje że będzie migotać. I dlatego nie wiem do końca jak to powinno wyglądać W zależności od godziny. Planujesz zbyt daleko nie ogarniając...
Dzięki kordirko za info! kondensatory mam SMD i różne dawałem, kwarc też podmieniałem, ten sam procek w drugim układzie chodzi poprawnie, ścieżki też są bardzo krótkie. Problem w zasadzie rozwiązał się jak przylutowałem rezonator z trzema wyprowadzeniami czyli piki ma w środku niestety nie posiadam takich rezonatorów o odpowiedniej częstotliwości. To...
Najprościej chyba to zrobić w przerwaniu od jakiegoś timera. W każdym wywołaniu sprawdzasz warunki dla każdego silnika: "jeżeli prędkość_aktualna>prędkość_zadana to prędkość_aktualna+1" "jeżeli prędkość_aktualna<prędkość_zadana to prędkość_aktualna=prędkość_zadana" Potem w tym przerwaniu zamieniasz "Prędkość_aktualna" na odpowiednią wartość PWM...
Fakt, temat dziwaczny. Przykład - zliczanie zbocz w przerwaniu. Kod obsługi przerwania wygenerowany w C vs najprostsza obsługa asemblerowa. Policzyć cykle zegarowe w jednymi drugim przypadku i przeliczyć na dopuszczalną częstotliwość zmian na linii wejściowej przerwania.
Witajcie ! Wracam po latach do elektroniki - kiedyś zrobiłem wykrywacz metali Stuart2 na PICu, teraz chciałbym zrobić sobie ten projekt całkowicie po swojemu, od nowa i na AVR. Czytam o programowaniu AVRa i o przerwaniach - że w przerwaniu nie powinno się umieszczać opóźnień. PRogram musi działać w dużym reżimie czasowym - jest to wykrywacz PI. Wymyśliłem...
A czy zmiana ustawień filtrowania - przerwania coś daje? Bo na tym przykładzie przerwania są wyłączone. Port LPT3 jest wykrywany i działa z drukarką więc może problem jest w programatorze, za długie kable na przykład lub za duży kondensator resetu przy procesorze. Lub zmniejsz częstotliwość transmisji w PonyProg. N.
Chciałem zrobić tak ze jak odczytam wszystkie próbki z bufora to ustawiam zmienna read na 1 wtedy następuje wczytanie kolejnych próbek z pliku do bufora i znowu wysyłanie tych próbek na pwm W czasie 125us to raczej za wiele na tym nie odczytasz. :) Jeśli jesteś pewien że timery i odczyt z karty działa, to zrób sobie przebieg 8000/32 = 250Hz. Odczytaj...
no widzę, że jednak chęci są rzeczywiście na maxa ;) ... ok jak już to wybierz "rozwiązanie 1", które przedstawiłeś. Jest o tyle korzystniejsze, że nie wymaga dodatkowych elementów a przy prądzie diody 20mA spokojnie zapewni zasięg co najmniej kilku metrów bez problemu ;) Drugie też można stosować ale diodę trzeba włączyć w obwód kolektora (pomiędzy...
Myślę, że na podstawie wiadomości takich jak: częstotliwość kwarcu i ilość cykli potrzebnych do wykonania danego polecenia, możnaby napisać symulator, który dokładnie oblicza takie rzeczy jak czas po jakim nastąpi przerwanie. Chyba twórcy Bascom-a czegoś niedopracowali. Albo po prostu moje założenie jest błędne. :?: Czekam na dalsze opinie. Może wyjaśnienie.
http://obrazki.elektroda.pl/6223122300_1... Domyślną metodą kontroli napięcia 230 V AC jest kontrola poprzez triak. Tak zrealizowany jest każdy ściemniacz. Kontrola taka oparta jest o kontrolę fazy - triak jest otwierany jedynie na pewną część sinusa napięcia przemiennego. http://obrazki.elektroda.pl/2250705900_1...
Nie wiem jaka częstotliwość impulsów bedzie chciał mierzyć. Nie znam też czasu trwania imulsu. Rozwiązań jest kilka. - użycie wejścia Tx timera. Możesz zliczać Fmax = Fcpu / 2. - w przerwaniu od timera sprawdzasz czy nastąpiła zmiana stanu piny. Tak zmierzysz do kilku kHz - impulsy doprowadzasz do wejścia INTx. Tak zmierzysz kilkadziesiat kHz. Najlepsza...
http://obrazki.elektroda.pl/2563369400_1... Witam wszystkich! Chciałbym zaprezentować pewien mały projekt, który wykonałem na prezent. Jest to drzewko szczęścia, w którym rolę liści pełnią diody LED RGB. Był to jeden z moich pierwszych projektów oraz pierwszy zawierający część analogową (dlatego zarówno projekt jak i wykonanie nie jest...
Czy może jest jakieś oczywiste rozwiązanie, które zrobi to czego oczekuję na atmedze328, tylko go nie dostrzegam? Tak, zwiekszyc długość timera software'owym licznikiem, przy takich częstotliwościach możesz zmieniać stany na portach programowo, w przerwaniu timera, jeśli nie przeszkadza ci związany z tym jitter. Prawdopodobnie że dało by się użyć hardware'owego...
Ale wtedy sprzętowo nie zrealizuję zmiany stanu na pinie wyjściowym i zostają mi tylko przerwania i programowa zmiana stanu, tak? Czyli nie ma odpowiednika CTC w STM? Wybacz może głupie pytania, ale w porównaniu do AVR jest tego sporo, a siedzę 3 dzień dopiero. Albo jakbym wpisywał jednocześnie do rejestru ARR i CCR te same wartości, zadziałało by to?...
Nie o to mi chodziło ale mniejsza z tym :) Poprawka oprogramowania z 14 kwietnia. Dziś sobie przypomniałem, że jak zaczynałem robić oscyloskop (jeszcze na wyświetlaczu L2F50) miałem go w drugą stronę (Jakby do góry nogami) i dlatego zapisywanie do bufora próbek musiało być wykonywane od tyłu żeby potem dobrze było to wyświetlać. I zapomniałem potem...
Jest tak wiele zmiennych, że wybór optymalnego algorytmu zależy od środowiska którym dysponujesz: - czy uC będzie miał jeszcze jakieś zadania ? - jaki będzie gradient czasu pomiędzy zmianami w poszczególnych sygnałach. - jak będzie zadawana zmiana wypełnienia, bo okres jest stały 10ms ? Moja magiczna kula ze względu na ładną pogodę wywróżyła: - uC nie...
http://obrazki.elektroda.pl/8130467300_1... Witam, chciałem zaprezentować mój mini termometr. Jest to już druga wersja. Zbudowałem ją ponieważ za każdym razem jak patrzyłem na poprzednika aż mnie skręcało jak pomyślałem co jest w środku. Pierwowzór zrobiłem na kawałku starej płytki uniwersalnej i płytce z wyświetlaczem. Na zdjęciu widać...
Przede wszyskim sprecyzuj jakie sygnały chcesz badać - częstotliwość i szerokość badanych impulsów (granice). Od tego zależy czy wybrana metoda jest dobra. Po drugie sprecyzuj co chcesz badać - mierzysz szerokość impulsów, czy interesuje cię różna reakcja na zbocza? Wśród AVR masz różne rodziny, ATTiny, ATMega, XMEGA, niektóre znich mają specyficzne...
Przerwanie od PIO, każda zmiana stanu powoduje pobranie danej z PIOA_PDSR i zapisanie do tablicy No tego to napewno dużo się nie zmieści, bo jeśli zrobisz w ten sposób to będziesz musiał dla każdej zmiany zapisywać czas zmiany dla każdego pinu oddzielnie. A to zajmie dużo miejsca. Dodatkowo jeśli inny bit się zmieni w chwili gdy po poprzedniej zmianie...
1. Uruchomiłem timer z przerwaniem i liczę nim do przepełnienia, czy włączam zmianę czy nie częstotliwość generowana na pinie portu jest ta sama - pomiar oscyloskopem. 2. No tak, to sprawdzę. 3. Czyli jeśli sygnał zegarowy pobieram z zegara RC2MHz to mam taktowanie 2MHz z PLL a jeśli taktuję RC32MHz to z PLL mam 8MHz? W każdym razie sygnał przepełnienia...
Z tego co zauważyłem, mikrokontroler taktujesz częstotliwością 1MHz. Przy preskalerze 1024 częstotliwość taktowania timera będzie równa 1000000Hz/1024=976,5625Hz. Z tego wniosek, że w ciągu 1 sekundy timer zlicza 976,5625 impulsów. Biorąc pod uwagę, że timer jest 16-bitowy przepełni się 1 raz na (65536/976,5625) 67,108864 sekund. Jeśli nie musisz schodzić...
Przykładowo możesz wykorzystać dwa liczniki. Jeden do regulacji częstotliwości, a drugi do regulacji wypełnienia. - licznik pierwszy odlicza czas pomiędzy okresami od 1 sek dla 1Hz do 50 ms przy 20Hz. - licznik drugi oblicza czas trwania impulsu. Powiedzmy że zmiana stanu pinu X generuje przerwanie uruchamiające licznik drugi który po upływie zaprogramowanego...
Attiny2313 ma możliwość sprzętowej generacji PWM a jeżeli nie chcesz używać sprzętowej generacji to pozostaje ci przerwanie od timera i zmiana stanu wyjść w odpowiednich cyklach. Generacja PWM w pętli głównej to nie jest dobre rozwiązanie bo wypełnienie będzie ci pływać w zależności od tego co będzie robił program zaszyty w pamięci uP.
Panowie, zdaję sobie sprawę z niedoskonałości takiego rozwiązania - dla tego nieco napisałem o źródle taktowania dla miernika. Czym lepsze źródełko tym pomiar ma więcej sensu. Jeśli zastosujemy dobry generator nawet bez kompensacji temp to już będzie o niebo lepiej. Po za tym porobiłem trochę testów i zwiększenie temp rezonatora o kilka stopni wprowadza...
Korzystając z chwili wolnej poskładałem zestaw i przeprowadziłem kolejne testy. Tym razem wspierając się oscyloskopem. https://obrazki.elektroda.pl/1456926200_... Bazując na ustawieniach preskalera autora w/w artykułu uzyskałem przerwanie co 976,56Hz (16MHz/64/256) które wygląd tak: [syntax=c]ISR(TIMER0_OVF_vect)//przerwan... po przepełnieniu...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
Ok ale czy zmiana stanu na IO zabiera aż 20 cykli? poza zmianą stanu nic innego się tam nie dzieje ;] funkcja zmiany stanu na wyprowadzeniu: [syntax=csharp] static __INLINE void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal ) { LPC_GPIO[portNum]->MASKED_ACCESS[(1&l... = (bitVal<<bitPosi); } [/syntax] oraz odczyt:...
Jeżeli to, co pokazałem jest poprawne, to w reszczcie nic raczej nie namieszałem, ponieważ w pozostałej części jest tylko sprawdzanie czyjników i w momencie wyzwolenia alarmu zmiana stanów na portach i to wszystko działa prawidłowo. Jeżeli zmienię w deklaracjach stan zmiennej c z 0 na 1 to wykonywana jest druga część programu, gdy zrobię odwrotnie wykonywana...
Niestety zmiana nazwy przerwania nic nie daje :cry:.Dzięki za rady te lepsze i te gorsze :P.Ale nadal czekam, aż ktoś pomoże to rozgryźć.Dodam jeszcze że w fusebitach nic nie grzebałem - są fabryczne. P.S.:Jedyne co zmieniałem to linijkę w pliku Makefile: F_CPU = 1200000 (Fabryczna częstotliwość taktowania procka to 9,6MHz/8 (fusebit CKDIV)), a makefile...
Dopisałem do rejestru TCCR1B bit WGM12 który według tabeli ustawia CTC, oraz skasowałem zerowanie licznika w funkcji przerwania. http://obrazki.elektroda.net/61_12865649... Przeglądają jeszcze dokumentację natknąłem się, że częstotliwość tego równa jest połowie częstotliwości zegara, tak więc zwiększyłem wartość do porównania 2x i teraz nawet...
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...
Ponieważ podczas pracy na silniku 24V 10A BUZ11 wytrzymuje maksymalnie 5min i się przegrzewa. Te 10A to odczytujesz z tabliczki znamionowej czy to wynik pomiaru? Pamiętaj że prąd w impulsie może być o wiele większy. Czym to zasilasz? Zmierzyłeś rezystancję silnika dla prądu stalego (omomierzem)? Przy okazji jeśli on nie da rady to czy modyfikacja jw...
Zmiana wypełnienia w przerwaniu jest standardową praktyką przy wykorzystywaniu PWMa. AVR ma bufor, który dba o to aby nową wartość PWM wpisać w odpowiednim momencie więc nie można mówić o tym, że to standardowa praktyka Można mówić, bo nie chodzi wyłącznie o wyeliminowanie glitchów przy zapisie. Chodzi też o synchronizowanie zapisów jako takich. Ten...
Teraz pytanie do mistrzów, które mnie nurtuje -jak to zrobić dla 3 kanałów wykorzystując 1 timer? Software'owo? Prosto: unsigned char pwm1; unsigned char pwm2; unsigned char pwm3; void TimerISR(){ static unsigned char cnt; /* Przeladuj timer */ TH0 = ....; TL0 = ....; cnt++; if (pwm1 < cnt) OUT1 = 1; else OUT1 = 0; if (pwm2...
Mam Attiny2313 i zamierzam ją wykorzystać. Zdaje się, że Attiny2313 może przyjmować przerwania z 8 wejść. Owszem. Jest taka możliwość. Z tym, że zawsze jest to jedno przerwanie PCINT i do Ciebie zależy sprawdzenie jaka zmiana stanu wywołała to przerwanie. Ponadto znajduje się ono niżej w hierarchii przerwań układu. Stosowanie INT0 i INT1 jest moim...
Zmiana planów - attack/release zamiast ADSR do wewnętrznego filtra. Najprościej jak się da, jak w ARP Odyssey i Micromoogu. Dwie gałki mniej. Ja bym zrobił tak (i tak zrobiłem) - w przerwaniu uart'a przenoszę odebrany bajt do akumulatora. Jeżeli najstarszy bit jest ustawiony - wtedy odebrano status, jeśli wyzerowany dane. Analizuję status czy jest note...
Większość przykładów znalazłem w Asemblerze... Nie zastanawiałeś się, dlaczego? Kod w C jest zwykle mniej optymalny, przez co nie daje się uzyskać tak dużych częstotliwości, jak w przypadku asm. Jeszcze będę musiał pominąć for bo zajmuje za dużo cykli. No to jeżeli zamierzasz przerzucić wystawianie próbek do przerwania timera, to jednak radziłbym napisać...
Witam Zrób to jak za starych tranzystorowych czasów, 100K na bazę tranzystora, emiter na masę a kolektor na przerwania w procesorze, można dać jeszcze diodę z bazy na masę by w drugiej połówce nie płynął prąd przez tranzystor. Detekcja jednego zera wystarczy, częstotliwość sieci jest w miarę stabilna by zmiana w jednym okresie robiła Ci różnicę. Jak...
500 obr/min to jest około połowa tej częstotliwości. A skąd taki wniosek? 500obr/min=8,33obr/s 8,33obr/s*1024imp/obr daje nam częstotliwość ok. 8,5kHz Poza tym 160kHz dotyczy jednego kanału, więc nie trzeba mnożyć przez 2. EDIT: W innych pytaniach chodziło o to, że może po prostu nie da się mierzyć tego w ten sposób nawet jeżeli napisać by program...
zmiana częstotliwości pilota zmiana częstotliwości monitora zmiana częstotliwości pamięci
mieszacz bf966 creative volume control schemat czujnik klimatyzacja
ekspres philips zapowietrzony zapchany odpływ skroplin
Ford Focus Mk2 radio 6000CD Sony nie działa po odłączeniu akumulatora – kod PIN, blokada, bezpieczniki Fujifilm FinePix S1800 – czy ładuje akumulatory AA przez USB podczas zgrywania zdjęć?