Jeżeli to jest przetwornica to nie pisz UPS. To kwestia tylko zamiany przed główną pętlą Do Loop: Reset tr1 Set tr1 W kodzie tym początkowym. Pamiętaj o tych 10ms.
Jeżeli nie używasz przerwań to ich nie włączasz. Wprawdzie nie włączasz głównego, ale włączasz od timera (TIMSK1), dlaczego? Wzór z dokumentacji dla CTC: F = Fclk / (2 * N * (1+OCR1A)) = 16000 / ( 2 * 8 * 2000 ) = 16000 / 32000 = 0.5Hz Sterowanie pinem OC1A dla CTC: [syntax=c]TCCR1A = 1<<COM1A0[/syntax] .
Przecież to jest taka sama metoda jak tutaj opisywana.
Przekształciłem taki wzorek http://obrazki.elektroda.net/89_12697288... wyliczam z niego OCRnA czyli ilość zliczeń timera, a zamiast częstotliwości zadanej daje funkcje liniową (formułkę np. 0,0478*ACD + 0,952 => i ona mi daje częstotliwość liniowo zależną od ACD w granicach od 1 do 50 Hz) Więc teraz chyba rośnie ona liniowo ??? myślicie że dobrze...
A może by tak dwa liczniki zaprzęgnąć do jednego zadania... Timer0 byłby generatorem PWM 8-bit z regulowanym wypełnieniem, z zewnętrznym taktowaniem z koncówki T0. Timer1 byłby generatorem o regulowanej częstotliwości (Tryb CTC) i za pomocą przerwań zmieniałby stan końcówki wyjściowej, którą to podłączysz do wejścia T0.
Jak jest z dokładnością zegarka RTC w Atmega8? Słyszałem plotki, że nie chodzi to zbyt idealnie. Potrzebuję zrobić zegar do zliczania tylko dni i zastanawiam się czy jest sens stosować zewnętrzny układ RTC. Układ musi mieć podtrzymanie zegara z baterii/kondensatora w przypadku zaniku zasilania. Śmiało możesz użyć np. Timer1 w trybie CTC jako generatora...
Sposobów znalazłoby się kilka, ale ja proponuję: Włączenie "generatora" [syntax=basic4gl]Config Timer1 = Timer , Prescale = 8 , Compare A = Toggle , Clear Timer = 1[/syntax] Wyłączenie "generatora", przez "odłączenie" wyjścia OC1A, od portu(pinu). [syntax=basic4gl]Config Timer1 = Timer , Prescale = 8 , Compare A = Disconnect , Clear Timer = 1 [/syntax]
Grala1 - Nie wiem czy ta wersja spełni oczekiwania : '$prog &HFF , &HE1 , &HD9 , &H00 ' Fusebity fabryczne !!! $sim ' dyrektywa opuszczania zwłoki (usunąć ten wiersz przy wgrywaniu w chip) $regfile = "m8def.dat" ' dyrektywa kompilatora o rodzaju procka ATMega 8 $crystal = 16000000 ' określenie kwarca 16 MHz Config Pinb.1 = Output...
Rezonator w MHz, a w przypadku ATtiny13 zewnętrzny generator.
Zestaw kupiłam w AVR ale uszkodził mi się procek Zwracałem się z prośbą o zakup proca ale bez odzewu - po co ta konspiracja. W projekcie użyto wda sygnały PWM (PB3/4) o przeciwnych fazach. Jest to tryb dead time na Tiny85 Tu jest przykład http://www.hilltop-cottage.info/blogs/ad... Jak napisze soft to...
Oj, ale Kolega słabo szuka: http://www.arduino.cc/playground/Code/Ti... Aktywujemy przerwania i przerwanie od timera, przypisujemy jakąś funkcję, potem zmieniamy okres co jaki ma następować przerwanie - bez ani jednej bezpośredniej operacji na rejestrach...
symulator bascoma jest bardzo dokładny i liczy co do taktu. jeżeli program opiera sie na przerwaniach timera to należy włączyć okienko "Slim Timers" , wtedy symulacja trwa trochę dłużej ale bierze pod uwagę przerwania timera. co do compare1a to jest to rejestr poruwnawczy timera1. co takt zegara jest on poruwnywany z zawartościa timera (czyli licznika)...
Na 99% będzie ok. -właściwie wszystkie zegarki na nim pracują. Zazwyczaj jest w formia malutkiego walca z nóżkami. Wtedy jako systemowy zegar może zostać użyty wewnętrzny generator RC.
Prosze bardzo: 'Program regulujący prędkość obrotową silnika DC 12 V 'Do sterowania wykorzystano sygnał PWM 'Częstotliwość przebiegu PWM ok. 254 Hz - 8 MHz/510/64 'Przycisk S1 zwiększa prędkość obrotową silnika 'Przycisk S2 zmniejsza prędkość obrotową silnika $regfile = "m8def.dat" 'informuje kompilator o pliku 'dyrektyw mikrokontrolera $crystal...
Witam, Atmega 8, Timer1. Prosty generator: przerwanie od timera1 ze skróconym cyklem, pętla główna pusta, w przerwaniu zmieniam stan portu. Niby proste... Oto kod: http://obrazki.elektroda.pl/8467182600_1... Są to regularne skrócenia cyklu z 1.085ms na 0.6355ms. Proszę o wyjaśnienie co to jest i jak sie tego pozbyć?
Witam chce użyć procesora AT90S2313 do sterowania szybkości silnika. I chyba najlepiej do tego będzie nadawał się licznik timer1 skonfigurowany, jako PWM. Czytałem o tym w pomocy, ale jakoś niewiele mi to gada:( z jakiego pinu będą wychodzić te impulsy??? Z T1(PD5) czy OC1(PB3) czy jeśli wpisze te „dosconnet” to wyjściem biedzie T1 a jeśli...
Witam ! Mam mały problem mianowicie potrzebuję za pomocą procesora Atmega8 wygenerować dwa przebiegi odwrócone w fazie (na wyjściach OC1A i OC1B) Czy jest to możliwe do realizacji programowej ? Pozdrawiam KOD (dwa generatory): Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Compare B = Toggle , Clear Timer = 1 Compare1A=100 Compare1B=100
A czy mogę prosić o napisanie programu w BASCOMie generatora 36kHz w przewaniu TIMER1 ?? Dodano po 23 Atmega8 10Mhz - Kwarc
Z PWM będzie ci ciężko, w twoim linku na końcu jest to opisane w czym problem. Nie uzyskasz równego kroku. To już lepiej wziąć jakiś zewnętrzny generator i procesorem go tylko przestrajać.
Przetwornik D/A do prostokąta...? A po kiego grzyba...? ATtiny26 ma PLL (64MHz) z której taktować można procesor i Timer1... W trybie pwm max 500kHz...
jezeli chodzi o czasy zegara to nie sa az tak bardzo tragiczne (od 60 do 100 us) wiec chyba Bascom sobie z tym poradzi, w moim programie mam generator na timer1 ktory dla kwarcu 8MHz (prescaler = 64)i wartosci w rejestrze licznika 65530 daje mi przerwanie co 40us... moze juz ktos napisal taka komunikacje i moze sie podzielic doswiadczeniami ?? Pozdrawiam
Trochę "szybsza" wersja (do 15,5krpm): [syntax=c]//storage variables const byte plen = 120; const boolean pattern[plen] = {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1...
Jeśli chodzi o PWM to dorzucam Ci 2 programy sterowania PWM za pośrednictwem 2 przycisków w języku BASCOM. 'Program regulujący prędkość obrotową silnika DC 12 V 'Do sterowania wykorzystano sygnał PWM 'Częstotliwość przebiegu PWM ok. 254 Hz - 8 MHz/510/64 'Przycisk SI zwiększa prędkość obrotową silnika 'Przycisk S2 zmniejsza prędkość obrotową silnika...
potrzebny jest mi generator fali PWM o zmiennej częstotliwości i wypełnieniu. Moim licznikiem jest timer1 pracujący w trybie CTC. Nie analizowałem kodu, bo przekombinowałeś. Jak chcesz mieć zmienne wypełnienie to użyj trybu FastPWM (tryb 15 z wartością TOP w OCR1A), a nie CTC. W trybie tym częstotliwość zmieniasz za pomocą rejestru OCR1A, wypełnienie...
$crystal = 11059200 Dim Licznik As Long Dim Czestotliwosc As Single Config Int0 = Falling Config Timer1 = Timer , Noise Cancel = 1 , Prescale = 1 On Int0 Licz On Timer1 Przerwanie_co_1ms Enable Interrupts Enable Int0 Enable Timer1 Timer1 = 54477 Do Loop End Przerwanie_co_1ms: Timer1 = Timer1 + 54477 Licznik = Licznik + 1 Return Licz: Stop Timer1...
Po co stosujesz Timer1 do generowania sygnału buzera . Zastosuj buzer z generatorem a Timer1 wykorzystaj do czegoś innego. Zmień strukturę programu , dokładnie opisuj poszczególne linijki kodu , musimy zgadywać co autor miał na myśli ? Wywal wszystkie Wait'y z programu Przykład jak powinieneś układać linie kodu : If Przycisk = 0 Then 'jeśli przyciśnięty...
Ja się tam na BASCOMie nie znam, ale ten program to wyglada mi na generator liczb pseudolosowych ;) Weź się skup i zastanów co chcesz uzyskać. Kompletnie nie rozumiem, co Ty robisz z tym T. Co to ma reprezentować? Podpowiem, że jeżeli chcesz wyświetlić liczbę X z zakresu 0..99 na swoim wyświetlaczu, to byłoby to chyba coś takiego (zakładając, że wyświetlacz...
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
Wewnętrzny generator nie jest zbyt dokładny, trzeba się liczyć z błędem nawet do kilku procent.
W uproszczeniu częstotliwość sprzętowego generatora PWM to następująca zależność: F oscylatora / Prescaler / X, i tak: dla rozdzielczości Pwm=8 bitów X=510, dla rozdzielczości Pwm=9 bitów X=1022, dla rozdzielczości Pwm=10 bitów X=2046. Przykład dla rozjaśnienia: F kwarcu = 8MHz, rozdzielczość generatora PWM=9 bitów (możliwe 8,9 i 10), Prescaler=8 (możliwe...
Witam. Potrzebuje zliczać impulsy z dwóch transoptorów szczelinowych. Problem polega na tym że jeżeli ustawię: np. Timer0 - obsługa przerwań, Timer2 - Generator PWM, to zostaje mi tylko Timer1 do zliczania impulsów. Dlatego też chciałbym spytać jak rozwiązać ten problem aby zliczać impulsy z dwóch transoptorów(potrzebne 2 timery w trybie liczników)....
Właśnie przed chwilą też uruchomiłem zegar na ATMega8 choć wykorzystujący kwarc 32kHz (tzw. zegarkowy) niezależny od generatora głównego procesora. Jeżeli chcesz pozostać przy swoim pomyśle (równie dobrym) to w BASCOM-mie po kompilacji przejdź do opcji programatora gdzie będziesz miał trzy zakładki FlashROM ,EEPROM i Lock and Fuse Bits. Więc wybierz...
Ten kod to tak dawno napisany że wiele by można w nim poprawić. Jednak działa i też dawno temu dochrapał się wersji przenośnej, bateryjnej, na Mega8 albo coś podobnego (nie pamiętam). Służy dzielnie do różnych zadań. Można symulować czujniki Halla w autach i podobne rzeczy :D http://obrazki.elektroda.pl/2071243700_1... Co do przeróbki...
Witam Wszystkich! Chciałbym się poradzić w temacie pracy PWM(timer1) w ATMega8. Robię układzik który ma sterować obrotami silnika DC i problem polega na tym ze gdy wykonuje procedurę odswierzania LCD (Bus mode - 4bit), generator na czas obsługi LCD przestaje pracować. Czy zna ktoś moze przyczyne takiego zachowania?
(at)redcap16 ciekawe jak chcesz, hakerze, rozkodować kod maszynowy :D (at)mikimause9 coś takiego uskrobałem na szybko: [syntax=c]#define PWM_PIN 11 //numer pinu, na którym ma się pojawić PWM bool pwm_on, state = false; void setup(){ noInterrupts(); pinMode(PWM_PIN, OUTPUT); digitalWrite(PWM_PIN, LOW); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 104;...
Konfiguracja timera '51 jest inna : [syntax=basic4gl]Składnia: CONFIG TIMERx = COUNTER | TIMER , GATE = INTERNAL | EXTERNAL , MODE = 0 | 1 | 2 | 3 gdzie: x0 – TIMER0, 1 – TIMER1, Opis: TIMER0 i TIMER1 mogą pracować jako liczniki impulsów zewnętrznych gdy pierwszy parametr jest ustawiony jako COUNTER. Impulsy zliczane muszą być dostarczane...
Czyli liczy 10x za wolno. A czy dobrze ustawiłeś w programatorze fusebit odpowiedzialny za to z jakiego generatora ma korzystać? Bo wygląda że korzysta z wewnętrznego 1MHz
Impulsy robię albo przyciskiem podpiętym z jednej strony do +5V a z drugiej do PB1 lub generatorem z karty muzycznej ale w obu przypadkach to sam czyli zero.
Witam Też się męczyłem jak zrobić sprzętowo bez żadnych przerwań generator około 36 kHz i 40 kHz. Polecam książkę Pana Piotra Góreckiego "Mikrokontrolery dla początkujących" (oczywiście o Bascomie). To naprawdę jest to jedno z nielicznych źródeł gdzie rzetelnie są rozpisane funkcje Timer1 po polsku. Właśnie testowałem układ Pana Góreckiego na At90S2313...
Witam, .......... Czy arduino uno posiada może wbudowany licznik który działa niezależnie od programu? Tak aby przerwaniem co sekunde mógłbym sprawdzać jaka jest wartość w liczniku który liczyłby impulsy? TAK! Arduino posiada ich trzy, funkcjonujące totalnie niezalenie od wykonywanego programu, z pewnymi jednak warunkami lub ograniczeniami. Są to :...
Mam prostokąt (PWM) na timer1. Czy zliczać Timer1 czy Timer0? Timer ma być ustawiony na time czy counter. Wydaje mi się że najlepiej byłoby ustawić na zliczanie impulsów czyli counter i po odliczeniu 59 zatrzymać Timer1 na czas 1 lub 2 impulsów. Wszystko OK ale nie udaje mi się to w praktyce. Albo nie generuje nic, albo nie zatrzymuje po odliczeniu....
Witam. Próbuję zrobić prosty obrotomierz do samochodu na Attiny2313. Do testów z jednego Attiny2313 zrobiłem prosty "generator" 100Hz Kod: $regfile = "attiny2313.dat" $crystal = 4000000 Config Pinb.0 = Output Config Timer1 = Timer , Prescale = 1 Timer1 = 45536 On Timer1 Czas Enable Timer1 Start Timer1 Enable Interrupts Portb.0 = 0 Do Loop...
Witam. Przeszukałem dokładnie internet i nie znalazłem podobnego przykładu stąd zapytanie. Czy może ktoś podpowiedziec jak napisać obliczenia na zmiennych ? Mam zadanie napisać listing i zaprogramować procka , który będzie mierzył ile impulsów z timer1 mieści się w przerwaniu INT1 , tzn. kiedy INT1 =1 wtedy ile w tym czasie impulsów zliczy Timer1. Licznik...
Przepraszam za dłuższą nieobecność. Nie mając nic nowego (i mądrego) nie pisałem. Ale w międzyczasie polutowałem zestaw startowy, a ostatnio napisałem inny program, który umożliwia (w zamyśle) liczenie dokładniej częstotliwości dla "paczki" impulsów, tym razem około 500 Hz. Wiem, że to dosyć skomplikowany tok myślenia, pewnie można to zrobić prościej,...
Witam wszystkich, jestem początkujący w AVR i potrzebuje porady. Napisałem program do zliczania czasu (timer0) oraz generacji prostokąta na 40khz (timer1- fast pwn 16bitowy) Ogólnie to atmega pracuje na 1Mhz nie daje kwarcu.. Moje pytanie czy jest możliwość zrobienia generatora na 40kHz na innym timer0 lub timer 1 (8 bitowe) bo timer 1 jest 16-bitowy...
Witam. Mam takie o to zagadnienie, potrzebuje zrobić regulowany generator 0-15hz. Na wyjściu sygnał prostokątny, albo tylko same impulsy mogą być. Wszystko było by fajnie, ale muszę do tego użyć Timera i przerwania. A nie mam w ogóle pomysłu od czego zacząć i jak to zorganizować. Potrzebuję zrealizować coś takiego aby nie zależnie od głównej pętli...
Z zegarkowymi zazwyczaj jest jeszcze gorzej, bo te dostepne w malych walcowych obudowach sa dostosowane do stalej temp., co wynika bezposrednio ze srodowiska w ktorym sa uzywane - na dloni temp. jest stala i wyzsza niz otoczenia. Mozna sie wiec spodziewac duzej, stalej odchylki. Jesli autorowi taka dokladnosc wystarczy to nie ma o czym mowic. Jesli...
Wzorcowy układ : http://obrazki.elektroda.pl/6609990300_1... i program ze znanej książki : [syntax=vb]'Program sterowania jasnością dwóch diod LED za pomocą sygnału PWM 'Rozdzielczość sygnałów PWM 8 bitów 'Częstotliwość sygnału PWM ok. 15,6 kHz $regfile = "m8def.dat" 'informuje kompilator o pliku 'dyrektyw mikrokontrolera $crystal =...
Program ma za zadanie sterować określonym wyjściem - coś w rodzaju software'owego PWM tzn. co około 20ms ma być impuls o szerokości 1ms do 2ms w zależności od żądznego wypełnienia. SIGNAL (SIG_OVERFLOW0)// procedura Timer0 { SERVO_OFF;// servo = 0; TIMSK &= 0xFD;// zatrzymanie Timera0 } SIGNAL (SIG_OVERFLOW1)// procedura Timer1 { TCNT1 = 179; // Wewn©trzny...
zarzuciłem do pętli głównej Stop Timer1 Waitms 5 Start Timer1 i przy tym TSOP-y nie reagują. Za długo siedzę przy tym i już głupieje od tego. Udało mi się uzyskać zasięg 50cm ale potrzebuję 100cm. :( cry
Nierozpoznanie takiego polecenia jak TCNT1. Zmieniłem natomiast Timer1 = Timer1 + 1 na Timer1 = 65450 i już bardzo pomogło bo udało się osiągnąć 11kHz. Zmieniałem też wartość Timer1 miedzy 65450 a 65535 ale nic to nie pomagało. Czy od tej wartości Timer1 liczy do przepełnienia czyli 65536 określona liczbę cykli i dopiero robi kolejny krok w programie?...
Witam. Napisałem poniższy program do generowanie impulsów o różnej częstotliwości . Zauważyłem jednak, że przy szybkim zwiększaniu częstotliwości timer1 tak jakby się zacinał na okres około 1s i potem wszystko jest ok. Prośba o informację czy ktoś spotkał się z podobnym zjawiskiem. Regulacja częstotliwości polega na zmianie wartości rejestru ORC1A (rejestr...
mi to wygląda dobrze. Obliczenia trafne, program też ok... Rozumiem że "dana" jest zadeklarowana gdzieś wcześniej. Sprawdz dla pewności czy jak napiszesz itoa(2000, dana, 10); lcd_puts(dana); Czy to wyświetli Tobie na LCD 2000 poprawnie. Poza tym z czego masz generator? Może on daje ciała? Może masz coś z fusami źle? Pozdro.
Chodzi o coś takiego? [syntax=c] ISR ( TIMER1_OVF_vect); { CZUJNIK_WYSOKI; _delay_us(320); CZUJNIK_NISKI; _delay_us(10000); } [/syntax]
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...
Po pierwsze, nie wysyłaj printf skoro chcesz odmierzać dokładnie. Po drugie, jeśli chcesz sprawdzić co jest nei tak to zapamiętaj w przerwaniu wartość licznika jaka jest w momencie przerwania i ją wyślij uartem. Po trzecie, zeruj licznik w przerwaniu. Po czwarte, musisz mieć dokładny kwarc/generator. Po piąte, używaj typedef i definicji zmiennych uint8_t...
Eeeee.... to znaczy? Konfig portu D jest chyba dobry (PD0 do PD6). Dodam, że nie zastosowałem generatora zewnętrznego, a gdy nie zdefiniuję timera, wtedy wszystko (oprócz zegarka oczywiście) działa dobrze.
Dopiero teraz doszedłem do tego, że na samej górze napisane jest jak wół ze Timer1 ma pracować jako CTC. Właśnie kombinuje jak go ustawić. Dodatkowo żel ustawiłem dzielnik, dla Timera1 i zapewne, dlatego wychodziły bzdury.
Witam. Jak wczytać zamiast wartości I (For I = 0 To 255), elementy tablicy i nimi wysterować wypełnieniem? Tab1: Data 94 , 61 , 115 , 13 , 97 , 127 , 73 , 79 , 127 , 127 , 119 , Data 107 , 127 , 95 , 89 , 64 , 255 , 65 , 0 , 100 , 90 , 65 , 60 , Data 127 , 125 , 60 , 70 , 80 , 0 , 65 , 90 , 65 , 0 , 78 , 63 , 10 , Data 3 , 10 , 28 , 15 , 60 , 127 ,...
a ustawiłeś Fuse Bity?? Bo jeśli nie masz ustawionych to ATmega pracuje z częstotliwością 1MHz. Musisz ustawić Fusy na albo 8MHz na wewnętrznym generatorze albo ustawić Fusy na zewnętrzny kwarc. i mniej więcej kod by tak wyglądał: $regfile = "m8def.dat" $crystal = 8000000 Cursor Off Dim Czestotliwosc As Long Const Licznik = 22336 Config Timer1...
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
Dobra, Panowie działa, jak ktoś mówił że problem jest z generatorem to miał racje. Dałem kondensator między generator a nano i działa. Mimo tego plan jest do bani bo powyżej około 20Hz chyba zaczynają na siebie włazić funckje print i przerwanie - zaczynają się duże wahania odczytów. Dla wolniejszych częstotliwości jest super. Pewnie trzeba będzie jedno...
Wiem że atmega16 ma tryb CTC który próbowałem bezskutecznie włączyć. Kolega Zumek napisał że bascom ma w tym miejscu błąd i nawet po zastosowaniu jego wskazówek nie mogłem tego trybu uruchomić a było by to najlepsze rozwiązanie. Męczę się już z tym przebiegiem strasznie i nic mi nie wychodzi. Może ktoś by mi napisał gotowca do bascoma jak skonfigurować...
1. Czy nie będzie przeszkadzać że jest 20nF zamiast klasycznych 22nF? Raczej pF. 20, czy 22 raczej bez znaczenia, chociaż ja dałbym 12-15 pF. Podane wzory we wskazanym linku przez kol. (at)stmx są ok, tylko trzeba uwzględnić pojemność wejścia MCU oraz pojemność ścieżek. Stąd te 15 pF max myślę, że jest lepsze. 3. Użyte kondensatory trochę się różnią...
Na pierwszy rzut oka w kwarcu. Nie możliwe żebyś zastosował kwarc 4915.2MHz do taktowania Atmega8 ale tu nie no to chodzi bo (chyba) masz kwarc 4.9152MHz. Sprawdz wartość _freq_time. 1. Timer1 ma tylko albo aż 16 bitów. 2. Nie zna C i nie wiem czy integer może przyjmować taką wartość.
Witam. Na forum jestem nowy, ale Atmege8 gryzę już od roku:). Zakładam że czytałeś datasheet'a od Atmega8 i niestety nie udało Ci się zrozumieć.Jeżeli tak to Ci pomogę. Po pierwsze w Atmega8 masz trzy timery/countery: -Timer0 8bit -Timer1 16bit -Timer2 8bit Timer1 i Timer2 możesz wykorzystać jako PWM,gdyż mają wbudowaną taką funkcje. Wiadomo że 16bitowy...
Witam! Ponieważ potrzebuję miernik częstotliwości do 160MHz, postanowiłem przerobić nieco projekt AVT3003. Zamiast kwarcu 10Hhz i AT90s2313 włożyłem ATTiny2313 z generatorem kwarcowym 20MHz. Przy takim taktowaniu należało zmienić również program. W komentarzu ' moja zmiana wskazałem, co zmieniłem - trzy linie programu. Problem jest taki,że podłączony...
Timer0 i timer1 używają tego samego preskalera. Dlatego instrukcja prescale=64 zmienia warunki dla funkcji getrc5. Zajrzyj do noty katalogowej ATtiny2313 i nie pisz głupot więcej. Dodano po 14 Odmierz20ms1: 'funkcja obsługi serwa1 Timer1 = 65286 'przy wartosci 65286 timer1 bedzie generował przerwanie co 2ms Incr Licz2ms1 'zwiększ licznik zliczający...
Witam Chciałem zrobić prostu generator przebiegu prostokątnego. uP AT89C2051 kwarc 11059200. częstotliwość generowana około 38 kHz czyli czas impulsu około 0,013 ms. Napisałem taki programik: Config Timer1 = Timer , Mode = 2 , Gate = Internal counter0 = 242 On timer0 impuls Enable Interrupts Enable Timer0 start timer0 do loop impuls: P3.2 = not P3.2...
Ostatecznie zdecydowałem się na wykorzystanie trybu ICP w liczniku TIMER1. Jest to najlepszy sposób liczenia współczynnika wypełnienia w tym mikrokontrolerza. Kod pomocniczy zaczerpnąłem z tego forum, ktoś nieżle nawet mierzył stan wysoki z generatora. Pozdrawiam. Zamykam temat.
Panowie ulepiłem taki oto kod [syntax=csharp] #include "Arduino.h" #include <avr/interrupt.h> //zbocze low-high(TCCR1B |= (1<<ICES1); TIFR1 |= (1<<ICF1); zbocze = 1;); //zbocze high-low(TCCR1B &= ~(1<<ICES1); TIFR1 |= (1<<ICF1); zbocze = 0;); volatile uint32_t Aktualny_stan_Licznika =0; volatile uint32_t Ostatni_stan_okresu...
a jak przy pomocy assemblera wyslac np 40 bitow na pin np 0.8 ? bo wlasnie ja mam podobny problem staram sie zrobic generator stanow logicznych ... taki w ktorym moglbym sobie zmieniac co ma generowac procesorek w danym czasie ,ale jestem za slaby w programowaniu pomoze ktos ? ;/
emarcus dzięki teraz już gra. Mam jeszcze takie pytanie bo tak jak wcześniej pisałem docelowo chcę zrobić miernik indukcyjności. Przejrzałem projekty mierników w necie i na elektrodzie i są oki tylko większość z nich opiera się na mikrokontrolerze PIC 16F84A. W sumie mam wsad do procka w asm ale kiepsko znam asemblera wiec postanowiłem napisać własny...
Witam Potrzebuję zbudować licznik który po zliczeniu określonej liczby impulsów wykona jakąs czynność. Jako generator impulsów wykorzystałem kontaktron magnes i filtr RC Początkowo napisałem program obrotościomierza i wszystko działa ok. A Teraz po małych zmianach nic nie zlicza. Wykorzystuję Timer1 $regfile = "m16def.dat" $crystal = 1000000...
Witaj. Zajrzałem do helpa - Timer1=Czestotliwosc jest prawidłową instrukcją. Wcześniej masz - Dim Czestotliwosc As Byte a później operujesz na 16-bitowym Timerze1. W ATtiny26 Timer1 jest 8-bitowy, ale w Mega8 już 16-bitowy. Zmień na - Dim Czestotliwosc As Word i sprawdź rezultat. teedd
pubus - Wykorzystałem Twój kod, i liczy nawet. Tylko niestety nie to, co trzeba :D Czyli na timerze 2 generuję przerwania co 10ms, a na INT2 zliczam impulsy ze skrzyni. Timer1 miał liczyć czas wtrysku, czyli sygnał narazie z generatora podłączyłem pod nóżkę PD5 (OC1A). No i nic nie liczyło, ale jeśli sygnał podłączyłem pod wejście zliczania impulsów...
Całkowicie zapomniałem o temacie :) Z problemem poradziłem sobie w następujący sposób, jest to wycinek z większego programu więc coś może być źle wycięte :) [syntax=c] //--------------------------------------... // Dołączone biblioteki //--------------------------------------...
Mam problem z przerwaniem od timer1, wywołuje się ok. 64x wolniej niż wynika z obliczeń. Przykładowy prosty program: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Dim 1ms As Word 1ms = 0 Dim A As Byte A = 0 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5...
Ok dzięki panowie już teraz rozumiem. Pobrałem sobie ze strony BTC z zaproponowanej książki przykładowe programy BASCOm i pewnie chodzi o ten właśnie kod ?? 'Program regulujący prędkość obrotową silnika DC 12 V 'Do sterowania wykorzystano sygnał PWM 'Częstotliwość przebiegu PWM ok. 254 Hz - 8 MHz/510/64 'Przycisk S1 zwiększa prędkość obrotową silnika...
Udało mi się! 'Przykład generowania fali prostokątnej niezależnie od CPU 'procesor AT Mega8 'zegar wewnętrzny 1 MHz 'piezo pomiędzy PB.1 a +5V 'UWAGA!!!, ATMEGA8 ma domyślnie załączonego Wachdoga!!!. Trzeba wyłączyć bezpiecznik!!! $regfile = "m8def.dat" $crystal = 1000000 Dim I As Byte Ddrb.1 = 1 'port b.1 wyjściowy '---------------------------------------...
Od pewnego czasu próbuje się uporać z programem jak poniżej. Zasadniczo program składa się z dwóch części generatora 36kHz na Timer0 i z PWM na Timer1. Osobno programy działają w 100 procentach. Jednak po złączeniu jak poniżej generator 36kHz jest nie aktywny natomiast PWM działa. Próbowałem różnych sztuczek, i nic ... Gdzie popełniam błąd. Podejrzewam...
Nie wiem, co ma do tego kod programu, ale proszę, możesz go wykorzystać |) [syntax=basic4gl] $regfile = "m8def.dat" 'INICJALIZACJA GENERATORA $crystal = 8000000 Config Timer1 = Timer , Prescale = 256 Enable Timer1 Load Timer1 , 31500 On Timer1 Inkrement Enable Interrupts 'DEFINICJA PORTOW I USTAWIENIE ICH STANU POCZATKOWEGO Config Portd.2 = Output Config...
Witam Myślę że trzeba by to zrobić korzystając z trafo.Inaczej nie widzę możliwości jak sterowanie napieciem (wielkością napiecia) .PWM zapewni tylko zmianę napięcia po stronie pierwotnej.Trzeba by spróbowac...'Program regulujący prędkość obrotową silnika DC 12 V 'Do sterowania wykorzystano sygnał PWM 'Częstotliwość przebiegu PWM ok. 254 Hz - 8 MHz/510/64...
1. Używasz nowych wektorów przerwań, ale starej funkcji SIGNAL. Zamiast niej używaj ISR(): http://www.nongnu.org/avr-libc/user-manu... 2. Zmienna accumulator jest 16-to bitowa a nie dbasz o sprawdzanie, czy już przekroczyła rozmiar tablicy. Rzeczywiście to pewnie jest jedna z przyczyn, zmieniłem na: 3. Poza tym, jaki sens...
Nie wiem dlaczego tak jest, ale kiedy zmieniłem jedną linijkę programu program zaczął w miarę poprawnie działać. Chodzi o zbocze wyzwalania funkcji przechwytywania w tej części programu gdzie jest inicjacja Timer1 , należy zainicjować Timer1 tak, aby reagował na zbocze opadające. TCCR1B&=~(1<<ICES1); //wyzwalanie przechwytywania zboczem opadajacym...
Dodałem: [syntax=c]ISR(TIMER1_COMPA_vect) { }[/syntax]Teraz chociaż funkcja Test() wykonuje się raz, tak jak powinna. Zmieniłem tryb ADC na pojedynczy: [syntax=c]void InitADCSingle(void) { ADMUX = _BV(REFS0) | _BV(REFS1) ;// Napięcie odniesienia wewnętrzne, AREF podłączony z GND przez 100n //| _BV(MUX0); // Kanał ADC1 ADCSRA = _BV(ADEN) // Aktywacja...
co do waitms masz absolutną rację, tylko że program symulatora jest synchronizowany przerwaniami timera. Zwróć uwagę na komendę bitwait flag, set Poniżej podprogram generujący jedynkę. W każdym cyklu pętli procedura czeka aż procedura przerwania generowanego przez timer, ustawi zmienną flag i dopiero idzie dalej. A czy ma być wygenerowany dłuższy czy...
Jeśli to np. timer1 to ustawiasz to bitami w rejestrze TCCR1A (przykład dla ATmega8): http://obrazki.elektroda.pl/3181773500_1... Przykład dla kanału A pin OC1A: [syntax=c]TCCR1A |= (1<<COM1A1) | (1<<COM1B1); //lub TCCR1A |= _BV(COM1A1) | _BV(COM1B1);[/syntax]
Dodano po 14 Witam serdecznie Nie zauważyłem że to kolega Niveasoft , wczorajsza pomoc o generator z Timera1 naprawdę mnie zaskoczyła , prosto i skutecznie. Z tym tematem kręcę się w kółko również wokół Timer1 bo do tego węższego impulsu będzie potrzeba dodać około 20% do porównania czy na pewno jest węższy od tego co idzie za nim. Wiem że pisałem...
Odnośnie kolegi który myśli że nie umiem czytać, otóż umiem ! Wykrzykniki odłóż na półkę i zachowaj dla siebie. Albo chcesz się czegoś dowiedzieć na forum albo jeśli sam lepiej wiesz to po co pytasz? a więc dam sobie przypuśćmy preskaler/1. Myślałem, że muszę ustawiać bity CS1...tak by ustawiać jakieś zewnętrzne zegary z jakimiś zboczami. Z tego co...
Witam Mam do zrobienia generator na atmedze w którym zadaję częstotliwość oraz wypełnienie sygnału prostokątnego. Udało mi się odpalić i generator i PWM z osobna ale mam problem z ich połączeniem. Chcę taktować Timer2 (na nim robię PWM) z wyjścia Timera1. Czysto teoretycznie wydaje mi się to możliwe ponieważ Timer2 może pracować w trybie asynchronicznym....
Witam. Z pewnych przyczyn musiałem przejść z pisania oprogramowania w Bascom na C. I pojawił się problem. Mianowicie chodzi o konfigurację Timera1 tak aby był generatorem, którego częstotliwość zmienia się wpisem do rejestru pwm1a. Pwm1a = 312 Config Timer1 = Timer , Prescale = 8 , Compare A = Toggle , Clear Timer = 1 On Compare1a Impuls Enable Interrupts...
Po dluzszej przerwie i irytacji wynikajacej z nieznajomosci C i keila znow wzialem sie za ten programik. Stwierdzilem ze odmierzanie czasu "na sztywno" i zczytywanie kolejnych bitow jest kiepskim rozwiazaniem i sprobowalem najpierw zmierzyc czas pomiedzy kolejnymi bitami a pozniej zczytywac w oparciu o ta wartosc. Nabazgralem programik, troche ogarnalem...
Usiłuję napisać program takiego miernika i podczas analizy konfiguracji timer-ów w różnych tego typu projektach a szczególnie w jednym (ale o tym później) pogubiłem się trochę i pojawiły się wątpliwości. Do testów używam platformy arduino nano (atmega328p, 16MHz, 5V) i na chwilę obecną napisałem coś takiego: [syntax=c]#include <Wire.h> #include...
Proponuję użyć dowolnego uC z dwoma licznikami, ale niekoniecznie atmega8 ;) Pierwszy pracuje w trybie pomiaru częstotliwości lub pomiaru czasu (Input Capture). Drugi pracuje jako generator przebiegu wyjściowego, pędzony np. z zegara systemowego. Wartość zmierzona przez pierwszy licznik jest argumentem funkcji modyfikującej częstotliwość i/lub wypełnienie...
- znikaja dane w komorkach pamieci, a ja je niestety potrzebuje. A gdzie masz tak napisane że znikają. O ile napięcie nie spadnie poniżej 1.5V to masz ZAGWARANTOWANE że dane będą zachowane. 1. WDT do budzenia - zly pomysl. Przy prostym programie i małym projekcie jest to idealne rozwiązanie do okresowego budzenia procesora. Może ideologicznie dziwnie...
Dzieki za "łopatologię", dzięki temu stworzyłem coś takiego: $regfile = "2313def.dat" $crystal = 8000000 Config Pinb.1 = Output Config Pinb.0 = Output Config Timer1 = Timer , Prescale = 256 Config Int0 = Rising Dim A As Integer Enable Interrupts Enable Timer1 Enable Int0 On Int0 Zlicz Do Cls Lcd A Waitms 100 Loop End Zlicz: Start Timer1...
Dalsza część zmagań. Jako generator impulsów zastosowałem zwykły switch, który zwiera pin ICP1 do VCC. I teraz rodzi się pytanie. Po jednym kliknięciu zmienna "koniec_pomiaru" powinna być równa 0 i tym samym dioda nie powinna się włączać. Natomiast jest inaczej. Pierwsze kliknięcie po uruchomieniu procesora powoduje załączenie się diody. Czyli tak jakbym...
[syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat" 'informuje kompilator o pliku $crystal = 8000000 'informuje kompilator o częstotliwości oscylatora Reset Pinb.1 'Sterowanie podświetleniem: Reset - włączone Set - wyłączone Config Pina.7 = Input 'port wejściowy PRZYCISK Config Pinb.1 =...
Timer2 jest nieco inny niż Timer1. Timer2 w M8 może pobierać sygnał zegarowy z oscylatora taktującego procesor bądź z kwarcu małej częstotliwości. Spróbuj dodać do Config Timer2 ASYNC = OFF . Skieruje to do Timera 2 sygnał zegarowy generatora uC. P. S. Jak chcesz sprawdź to sobie ustawieniach rejestrów. Mnie się nie chciało. Poczytaj sobie helpa. No...
generator częstotliwości timer1 atmega8 timer1 generator bascom generator impulsów timer1
phoenix recovery ciągnik łamany bdp285 bdp286
panele winylowe panele podlogowe
Niewystarczająca ilość wody w Siemens EQ6 - przyczyny i rozwiązania Whirlpool AWM 6071 nie wypompowuje wody przy wirowaniu - przyczyny i rozwiązania