Tak wiem że należy odpalić timer na początku i zatrzymać na końcu i odczytać jego wartość.. no nic. Dziękuję za wypowiedzi tak czy inaczej.. Odp. kol. Draco była troche sarkastyczna, bo na tak prostą procedurę nikt, kto ma choć troche rozeznania w tej dziedzinie chyba (!) nie szuka pomocy. Mopzesz to zrobić na kilka sposobów: 1. mierzyc czas metodą...
Do takich timerów jest przeznaczony CD4541 i zrobi to dużo lepiej od NE555. Ale może ATmega ma jakiś wewnętrzny timer, który by dał się użyć?
Albo Config- albo str.112 pdf.- i poprzednie i następne. Polecam to drugie rozwiązanie. "tak by była możliwość dodania czasu martwego. " Nie da się z automatu. Mają to ATtiny 25/26/45/85- o ATMega nic mi nie wiadomo. W ATtiny25/45/85 znajduje się układ DTG-Dead Time Generator- to o co Ci chodzi.
.... W pętli głównej sprawdzam na okrągło bit 0 rejestru 0 układu ( sprawdzam flagę alarmu timera). .... "Additionally, a timer alarm can be programmed by setting the timer alarm enable (bit6 of the alarm control register). When the value of the timer equals a pre-programmed value in the alarm timer register (location0F), the alarm flag is set ( bit1...
Jak np mam kilka innych procedur które zabierają dużo czasu. Np pomiar ds18b20 albo wyświetlanie na LCD a chciałbym je wykonywać co pewien ściśle określony czas.
Config pind.2 = input
Czyli zrobić zewnętrzne przerwanie na te funkcje??
Zmienna count powinna być volatile .
Spprawdzilem handlary i ma on postac timer1_compb_vect ale tez nie dziala Zrobilem przerwanie od przetwornika AC z handlerem isr(adc_vect) i dziala ale po jego wywolaniu sie wiesza procek. Trzeba jakies rejestry mu odkladac na stos czy cos?
Zamiast delay() możesz użyć millis(). Biblioteki dla wielowątkowości też znajdzesz. Dla krokowców możesz użyć biblioteki AccelStepper: http://www.airspayce.com/mikem/arduino/A... Dostępne biblioteki możesz przeglądać w menadżerze: https://www.arduino.cc/en/Guide/Librarie...
2 serwa można zrobić całkowicie sprzętowo TCCR1A = _BV(WGM11); /* Fast PWM, ICR1 is top */ TCCR1B = _BV(WGM13) | _BV(WGM12) /* Fast PWM, ICR1 is top */ | _BV(CS11) /* div 8 clock prescaler */ ; OCR1A = 3000; // to jest chyba dla zegara 16 Mhz - to by odpowiadało impulsom 1.5 ms OCR1B = 3000; ICR1 = clockCyclesPerMicrosecond()*(...
1. Owszem poprzez dodanie np. dzielnika rezystorowego. 2. Mogą jeżeli timer nie zostanie skonfigurowany do PWM.
Też na początku myślałem o rezystorze tylko nie wiedziałem czy to bedzie bezpieczne. Jak dodasz diodę zenera to będzie bezpieczne. Teraz myśle jak wysterować lampke może jakimś mosfetem tylko jak to zrobić aby powoli sie lampka gasiła ? Poczytaj o PWM. Czyli sterowanie szerokością impulsu. W ATmega robisz to na timerze i nie obciąża Ci programu. Choć...
Tak cały czas pozostaje w środowisku eclipse z winavr. Właśnie skończyłem przeinstalowywanie całego pakietu od początku z nowym projektem włącznie i wciąż to samo. Zastanawiam się czy mogą mieć na to wpływ jakieś elementy sprzętowe.. (at)alagner U mnie też warningów brak, tylko w układzie nie działa tak jak powinno. Generalnie to zrobię kilka flag i...
Dziękuje za pomoc. Zrobiłem najpierw jak radził technics6 - dodałem linie kodu i sprawdziłem projekcik ale nie pomogło. OSC jest zdeklarowane bo uzywam w całym duzym programie go (tak jak powiedziałem zamieściłem fragment sprawiający problem). Rozwiązaniem problemu okazała się rada Freddie Chopina ze zmienna typu volitile. Dziękuje Wam za help
Panie kolego po prostu naucz się pisać kod przejrzyście nie tylko dla potrzeb forum i innych osób ale przede wszystkim dla siebie, co to znaczy? zobacz jak powinno się zrobić inicjalizację takiego timera w trybie CTC: Dodano po 4 tymczasem pamiętaj że jeśli bit ma mieć wartość = 0 to NIGDY nie ustawia się zera tak ;) TCCR0 |= ( 0 <<CS02); !!!!...
Tojmak987123 pomyliłeś pojęcia: Szerokości wypełnienia nie mierzy się w Hz tylko w procentach lub jednostkach czasu (np. mikrosekundach). Twój program wywołuje przerwanie Timera0 co (256-194)*64 cykli zegara, Timer1 jest ustawiany 5 razy rzadziej czyli co 19840 cykli zegara tylko tyle możesz nim odmierzyć (a nawet trochę mniej ze względu na czas ustawiania)....
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.
Chciałbym się upewnić w pewnej sprawie. Przeszkadza mi konieczność oczekiwania na konwersję tmperatury przez DSa nawet te ~100us przy rozdzielczości 9 bitowej to za dużo. Czy można zamiast waitus wykorzystać timer i zrobić odpowiednią procedurę z warunkami gdzie odczyt będzie realizowany po iluś tam przepełnieniach timera i tak w kółko ?
Nie przesadzaj nie jest tak źle, o ile przeliczniki da się łatwo ogarnąć. Tak najwięcej pracy jest z wyświetlaczem bo o ile to wyświetlacz segmentowy czy tft w postaci liczb to jakoś pójdzie tak wyświetlacz graficzny będzie najwięcej pracy i tu chyba lepiej by było sięgnąć po jakieś "HMI" Atmega 328P jest złym wyborem bo ma jeden timer w ICP ale da...
Witam, Wykorzystałem w swoim projekcie timer PWM i chciałbym dokonywać pomiarów napięcia po jakimś czasie od zmiany stanu z 0 na 1. Czy zrobić to za pomocą dodatkowego Timera? Może jakieś inne rozwiązania? Projekt na ATmega 168PA
4. Podłączenie sygnału z wyjścia PWM do ADC1 aby ponownie spróbkować sygnał PWM A po co? Po to aby odczytać ile kroków wykonał silnik. Sygnał PWM niski wysoki niski to jeden krok na wejście STEP. I chce żeby pwm był jakoś ogarniczony. Aby silnik wykonał na przykład 20 kroków - nie więcej. Na ATMega możesz to zrobić tak jak ci napisał kol. piotrva....
8Mhz /256 daje 31 250. 31250/125 daje 250 (ms) (250 -125ms) * 8 (co ósme przerwanie) = 1s.
A jak uzyje IR bez modulacji to co moze sie stac? Pomiar to bedzie maksimum 15cm i nie ma byc super dokladny. Sam ze zwykłych diod i fotodiod/tranzystorów nie zrobisz pomiaru odległości, co najwyżej cos na zasadzie "jest? nie ma?" Żeby mierzyć odleglość za pomocą światła potrzebne jest zastowowanie układów z pewnego rodzaju linijkami CCD. Generalnie...
Witam! FµC=8 MHz , prescaler = 1024. Timer 0. Wychodzi częstotliwość: 7812.5 Hz = 7.8125 kHz. Wyświetlacz 7 segmentowy 4 cyfrowy migocze właśnie przy takiej częstotliwości. Dopiero przy preescalerze 64 jest OK. Czy to jest normalne? Przecież już przy 4 * 50 Hz = 200 Hz nie powinno migotać. :/
A więc rozumiem, że mam zrobić to wszystko w pętli głównej? [syntax=c]while(flag){ LCD_GoTo(0, 0); rtc_get_time_s(&h, &m, &s); sprintf(datetime, "%02d:%02d:%02d", h, m, s); LCD_WriteText(datetime); _delay_ms(300); }[/syntax] Czy tak jest ok?
zobacz na stronę http://www.avrbeginners.net/ Dobrze udokumentowane przykłady i opis dziania AT90S i ATMEGA Timery,UART,rejestry itp.
To rozwiązanie chcę użyć do zliczania sygnałów z czujnika. Na chwilę obecną zliczam impulsy na zmiennej i jest taki efekt, że w trakcie zliczania program wykonuje zliczanie i nie mam możliwości przełączać innych wyjść. (zliczanie jest jednym etapem gdzie musi zostać wykonana określona liczba obrotów)
Jedyne co da się zrobić to odpowiednio operując bezpośrednio na rejestrach zwolnić piny PC0-PC1 jako normalne piny I/O. Timer2 tak czy inaczej nie nadaje się do użycia...
Chciałem zobaczyć czy po książce "Mikrokontrolery dla początkujących" p. Piotra Góreckiego, coś zostało mi w głowie. Chyba jednak mało Kolega zapamiętał. W książce autor pisze wyraźnie aby jak najmniej używać poleceń wait. A kolega zrobił na nich Zegar! A od czego atmega ma timery?
Dlaczego przy wypełnieniu 100 % stoi, a przy 0 % coś tam się dzieje ? Co oznacza PWM o wypełnieniu 100%? To już nie są impulsy, to jest napięcie stałe. Dlatego zmieniłem preskaler na 1024 i teraz mam częstotliwość 488 Hz oraz okres 2 Nadal nie rozumiesz. Potrzebujesz częstotliwości ok. 50Hz, a nie 488Hz. Proponuję to zrobić w osobnym projekcie na timerze...
Uruchomić timer w trybie CTC. Tryb CTC [syntax=vbnet]CONFIG TIMER1 = ..... CLEAR TIMER = 1[/syntax]
Ok, Czy na Atmega też się da? Oczywiście, to zrobisz i na starym '51. Atmegi są bardzo różne - Atmega8 i ATmega4809 to dwa różne światy. Ale generalnie, każda ma timer, który może działać w trybie capture, w którym możesz mierzyć częstotliwość lub wypełnienie. Każda potrafi także sprzętowo generować PWM. Aczkolwiek przy podanych przez ciebie częstotliwościach...
Tylko że problem leży w bascomie a nie w mikrokontrolerze. Gdyż bascom nie widzi timera 3 jako źródła generowania sygnału PWM. Można to chyba zrobić zapisując odpowiednie bity do rejestrów, ale dokładnie co i jak to nie wiem, dlatego proszę o pomoc.
Po Config Timer0 wpisz dodatkowo TCCR0 = 4 Config Timer0 = Timer , Prescale = 256 Tccr0 = 4 Tylko musisz coś zrobić z START TIMER0 i STOP TIMER0 bo one przywrócą wartość po CONFIGu i program dalej nie będzie działał. Najprościej będzie usunąć te instrukcje. dodano 20 Sie 2008 08:05 Mail z opisem błędu poszedł już do MCS Electronics. Zbaczymy jaka będzie...
TCCR0=0x07; // port G jako wejście Że co? int main(void) { char digit } Funkcja main obejmuje nawiasem kilka funkcji przerwań. To się w ogóle kompiluje? Pół biedy że funkcja main. Pętla while(1) to obejmuje! Po za tym to SIGNAL pozamieniaj na ISR. ISR jest nowsze i przez to zalecane (choć w sumie kodu wynikowego pewnie to nie zmieni). I przy okazji...
(at)R-MIK Robienie krótkich impulsów na timerze w ATMega jest bez sensu, bo ten timer nie ma trybu one-shot. Do tego celu trzeba kreatywnie wykorzystać inny układ peryferyjny... Oczekujesz, że podeślemy ci gotowy kod, który ty pod swoim nazwiskiem opublikujesz jako przełomowe odkrycie?:) Może by i tak było, gdybyś w międzyczasie nie zraził do siebie...
Dla konfiguracji resetowania się watchDoga po 4 sekundach : Mcusr = &B00000000 'Zerowanie rejestru aby wyłączyć bit 3 czyli WDRF. 'Dokonywanie jakichkolwiek zmian w WatchDogu musi dokonywać się w ściśle określonej sekwencji wpisów do rejestru 'WDTCSR. Jako pierwszy krok trzeba zrobić wpisanie wartości 1 do bitu numer 4 nazywanego WDCE.Pozostałe bity...
Witaj. 1. Nie znam VMLAB, ale czy prawidłowo definiujesz F_CPU? 2. Czy symulator nie potrzebuje osobnej definicji częstotliwości do prawidłowego określania czasów symulacji? Tak jest w symulatorze w Atmel Studio. 3. Volatile: http://mikrokontrolery.blogspot.com/2011... Posklejałeś ten program z kilku - no ale każdy kiedyś zaczyna...
Dodam że w programie poprawiłem błędy składni a nie popatrzyłem na schemat i nie poprawiłem błedów logiki. Na schemacie podłączone masz tylko wyjście OC1A więc odwoływanie się w programie do PWM1B jest całkowicie bezcelowe. Do tego DC_on_off to alias pinu OC1A czyli Timera1 który został ustawiony w tryb generowania sygnału PWM. W takim trybie Timer...
Wpadałem na kanał Tu sie zaczęły problemy myślałem ze jak nie mam ATmegi328 to uda mi sie wgrac programatorem USBasp prosty program w HEX "zaswiecenia LED" do Leonardo ATmega32u4 i cos pomieszałem po ponownym wybraniu zaznaczając w aplikacji ProgISP Prawdopodobnie w pierwszej instancji nic nie pomieszałeś, bo taka jest generalna procedura wgrywania...
Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. A to co było??? oczywiście mi pomylił się autor ale tytuł ten sam ;) więc ją masz Co do wydajności prądowej to chyba też dostałeś już odpowiedzi różne, albo drivery ULN albo zwykłe tranzystory żeby ją zwiększyć i po ptakach Żeby nie robić na jednej nodze jednej diody nawet przez te tranzystory to...
Witam, Niedawno zrobiłem programik, który generuje 3przebiegi przesunięte w fazie. Triggerem dla pierwszego przebiegu jest detektor zera sieci na INT0. Chciałem całą obsługę generowania sygnałów zrobić na przerwaniu Timera. Ale mój ból jak wywołać przerwanie Timera natychmiast po otrzymaniu sygnału na INT0 Wykombinowałem sobie takie o to rzeczy tuż...
No to żeby już wyczerpać temat ostatecznie to chciałem jeszcze wykorzystać tryb porównania licznika i zrobić PWM. I tutaj nasuwa mi się pewna wątpliwość a mianowicie np. w procesorze atmega mam wyprowadzenia typu OC0, OC1A itp. i te wyjścia są związane z timerami i do nich mogę podłączyć np.diodę i płynnie ją rozjaśniać i ściemniać. W nucleo patrząc...
Zrobiłem zegarek na Atmega32 przy kwarcu 8MHz. na dobę przyspieszał 5 do 7 sekund:-)
Jezeli dasz prescaller 256 to musisz zliczyc 31250 impulsow aby odmierzyc sekunde.
W dokumentacji niestety dla licznika 1 nie występuje preskaler 128. Występuje natomiast 256. Zakładając, że licznik pracuje w trybie CTC (WGM12 =1) i zakładając 8MHz źródło sygnału zegarowego (tak jak jest w komentarzu w kodzie) należy wpisać do OCR1A= 31249 oraz ustawić preskaler na 256 czyli CS12=1 A tak na przyszłość ...nota katalogowa. Tam wszystko...
Niezależnie od tego, jak to zrobisz, do zliczania czasu należy użyć sprzętowego timera. Start i stop, czy też odczyt czasu timera można zrobić na wiele sposobów, zapewne w przypadku ATmega najłatwiej będzie przy użyciu przerwań od wejść.
Tak. Tylko mniej świadomość że procek będzie odrywany od pracy wieloma nieprzydatnymi impulsami. Ewentualnie po pierwszym impulsie na INT, wyłącz przerwania na czas drgań. Jak teraz masz podłączony kontrakton ? INT podciągnięty pod +5V ? Jak INT wyzwalasz ? W docelowym projekcie koniecznie czujnik kontraktonowy zamień na jakiś halotron albo transoptor...
To chyba za dużo kombinacji zrobiłem na Atmega 328, analog wykorzystałem jako reg czasu potencjometrem.
Jeżeli piszesz w C i używasz avr-libc, to przerwania "nieblokujące" (takie które mogą być przerwane przez inne przerwanie (lub nawet same przez siebie, trzeba uważać)) deklaruje się tak (przykład dla INT0): ISR(INT0_vect, ISR_NOBLOCK) { jakiś kod } Dzięki temu sei() zostanie wywołane prędzej, niż zrobiłbyś to wewnątrz procedury sam.
Takie pytanie mi się urodziło... czy da się w jakiś sposób zmienić piny wyjścia dla timera (OC1A, OC1B)? Oczywiście................., że się nie da. Chyba, że sobie zrobisz programowy PWM to wtedy możesz mieć nie dość, że więcej kanałów to jeszcze na tych pinach, na których ci się żywnie spodoba.
Niekoniecznie musi być XMEGA. To co musisz zrobić to nadać dwom sygnałom marker czasowy. Ponieważ jeden timer w ATMega ma tylko jedno wejście ICP, to musisz wykorzystać dwa timery. Wtedy każdy z nich będzie przechwytywał impuls z jednego wejścia. Ponieważ w ATMega tylko większe procki mają dwa 16 bitowe timery będzie to pewien przerost formy. Dlatego...
Jeżeli chcesz koniecznie jednym timerem odczytywać sygnały z dwóch oddzielnych źródeł rozumiem że potrzebujesz również programowego oddzielenia tych danych. Jeżeli sygnały na jednym i drugim enkoderze nie będą się zmieniały jednocześnie możesz zastosować jakikolwiek multiplekser sterowany z procka ewentualnie jest wiele innych układów buforów itp pozwalających...
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...
Witam Mam problem z zaprogramowaniem uC. W którym miejscu masz problem? Pierwsze, co musisz zrobić to zadecydować, który z timerów skonfigurujesz do liczenia czasu. W jakim trybie ten timer ma pracować (nie wszystkie wbudowane w "mega" timery posiadają te same opcje do wyboru i są ponadto różnej 'długości'). W zależności od taktowania procesora, wybranego...
Potrzebujesz tylko jednego przerwania - timera. Jeśli zrobisz PID z danymi typu float, to chyba nie ma szans, żeby to zadziałało na AVR.
jedyne co mi przychodzi do głowy to jakaś "szpilka" w momencie konfliktu, gdy OCR0=0 I tak jest! Przy wartości 0 w rejestrze OCR0 odpowiedzialnym za wypełnienie sygnału PWM na wyjściu pojawia się szpilka -już nie pamiętam ile trwa w stosunku do wartości 1 w tymże rejestrze (ale dużo krócej-chyba około 1/5 czasu dla wartości 1 w OCR0). Problem jest...
Możesz zrobic tak - zliczać 11059 impulsów w liczniku 16-sto bitowym. Da Ci to częstotliwośći 10000,01 Hz czyli z błędęm w zasadzie do skorygowania kwarcem (kondensatorem, trymerem). Co do RS-a - to błąd całkowicie akceptowalny (dla skorygowanej do 11059000 Hz częstotliwości). P AK
Nie ,nie ma takiej możliwości ,żeby zmienić w prosty sposób priorytety przerwań. Można to zrobić przez zabiegi programowe lub zastosować mikrokontroler z rodziny x-mega ,który ma znacznie bardziej rozbudowany mechanizm przerwań i możliwość ustawienia priorytetów .Poza tym może warto przemyśleć sens takiego zabiegu ,bo to rzadka sytuacja kiedy uart miał...
Czy RTC (zegar czasu rzeczywistego) używający Timera 2 w trybie asunchronicznym , działa nawet wtedy gdy wyłączone sa przerwania globalne ? ... kwarc, preskaler oraz Timer2 nie potrzebuje przerwań ale to nie wystarcza do zrobienia całego RTC to wystarcza do zrobienia przerwania co 1 sekundę a reszta zegara musisz zrobić programowo i to właśnie na przerwaniu...
Proszę o informacje, gdzie w nocie katalogowej można znaleźć informacje na temat priorytetów wykonywania przerwań, jeżeli wystąpią w tym samym czasie. Nie można, ale ten co ma niższy adres w tablicy wektorów wykona się pierwszy jak przyjdą w tym samym czasie. Co najwyżej możesz właczyć przerwania na początku obsługi aby umożliwić obsługę kolejnych...
Nie da się. Skoro timer dzieli częstotliwość, to jak masz np. /10 i /11 to różnica niewielka, ale już /3 i /2 to różnica ogromna i zawsze tak będzie. Można to kompensować odcinkowo zmieniając częstotliwość taktowania timera, wprowadzać generatory frakcyjne, PLL itd. Tyle, że nie zrobisz tego w ATMega128, bo tam masz do dyspozycji tylko prosty preskaler....
$regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Prescale = 1 Config Portb = 255 Config Portc = 255 Config Portd = 255 Portb = 0 Dim A As Byte 'Czerwony Dim B As Byte 'Zielony Dim C As Byte 'Niebieski Dim D As Byte 'Czas A = 0 B = 255 C = 255 D = 4 Zolty: Do Pwm1b = A Set Portb.4 Waitms...
Musisz zrobić połączenie pomiędzy sygnałem WN i wejściem ATmega. Musisz znaleźć sposób aby połączyć dwa obwody o różnym napięciu, sposobów jest wiele: transoptor, hallotronowy czujnik prądu do Arduino itd. Polecam pisać program na Arduino, będzie znacznie łatwiej niż innymi sposobami. A Basica to chyba mało kto używa, teraz programuje sie głównie w...
Witam, Jak kolega chce wszytko zrobić na uP to wskazana przez kolegę ATmega starczy, uP raczej sobie nie poradzi ze wszystkim na kwarcu zegarkowym będzie zbyt wolny więc kombinacja kwarc zegarkowy + wewnętrzny oscylator RC jest konieczna. Większość ATmeg posiada tylko 2 timery dlatego też trzeba by rozwiązać pomiar czasu i multipleksowanie wyświetlaczy...
Taka składnia dotyczy tylko Timer1/Timer3/Timer4/Timer5. Nie zadziała poprawnie dla Timer0 i Timer2. Choć z moich osobistych obseracji to najnowszy BASCOM-AVR i spora grupa procesorów poprawnie obsłuży taką składnię: CONFIG TIMER0 = PWM , PRESCALE = 1 | 8 | 64 | 256 | 1024 , COMPARE A PWM = CLEAR UP | CLEAR DOWN | DISCONNECT , COMPARE B PWM = CLEAR...
Ale to się da zrobić bez _delay(). Po prostu wystawiasz żądanie odczytu- zapominasz o tym na 1s a program robi swoje- a po 1s przerwanie Ci przypomina o odczycie. To jest może nieco trudniejsze do zrozumienia- ale program powinien chodzić bez żadnego _delay(). No może jak masz pojedyncze us- ale już setki us- to trzeba nad tym popracować.
No to trzeba od razu pisać, że zestaw :) Zamiast Timera, przestudiuj ADC - zrobimy wszystko na nim w trybie Free Running. Timery zostaną Ci do innych celów na przyszłość.
\ 1. Rozumiem, że ustawienie odpowiedniej częstotliwości da mi czas, który jest mi potrzebny? Tak, program z tego postu demonstruje rejestry i bity których odpowiednie ustawienie spowoduje daną częstotliwość przerwać timerów, a w konsekwencji odpowiednią częstotliwość wysyłania tekstu / migania diodą, jednak obecny ustawiony czas jest przykładowy, nawet...
Witam Nie bardzo rozumiem po co do tego zadania aż trzy timery. Da się to wszystko zrobić na jednym !!! -- pozdrawiam
Przede wszystkim przeczytaj datasheeta. ATmega posiada timer z trybem PWM. No i sprecyzuj w jakim języku chcesz to napisać.
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
http://obrazki.elektroda.pl/3637756900_1... http://obrazki.elektroda.pl/6313868300_1... Zrealizowałem w tym roku swoje postanowienie jeszcze sprzed zeszłej zimy i zrobiłem sobie wreszcie własny sterownik pieca CO. Na początek pytanie "dlaczego"? Otóż oryginalny dostarczony z piecem przede wszystkim miał 6 poziomów nadmuchu...
Pojutrze rok szkolny się zacznie to ze szkoły coś wypożyczę, więc nauka pójdzie od przodu, a co może być nie tak, że nadal timer nie działa? Jak zrobiłem tak jak mi tadzik kazał to działał drugi a 0 już nie ;/
Config Pinb.3 = Output 'Config Timer0 = Pwm , Prescale = 1 , Compare Pwm = Clear Down Set Tccr0.pwm0 Set Tccr0.com00 Set Tccr0.com01 Set Tccr0.cs00 Ocr0 = 127 'T2 już normalnie ;) Config Timer2 = Pwm , Prescale = 1 , Compare Pwm = Clear Down Ocr2 = 127
bezpośrednio z bascoma się nieda. trzeba by wpisać odpowiednią wartość do rejestru sterującego timerem ale niepamiętam dokładnie jak to sięrobi, trzeba by zajżec do noty katalogowej tam wszystko dokładnie opisane. ale mozna zrobić inna sztuczkę $regfile = "m8def.dat" Config Pinb.1 = Output $crystal = 1000000 Config Timer1 = Timer , Prescale...
Sam widzisz, że musisz odmierzać czas. Każdy projekt z mikrokontrolerem zaczyna się od przerwania timera. Bez tego nie da się zrobić prawie nic.
Witam, niestety ale chyba coś jest nie tak? Na wstępie należałoby wyjaśnić że nie ma czegoś takiego jak "automatyczne przeładowanie timera" (reload/load timer1 powiedzmy). Termin ten jest związany z procedurą konfiguracji timerów występującą tylko w trybie "Normal", gdzie każdorazowo początkowa wartość timera musi być wpisana przez processor. Taka...
Taki bubel całkowicie krzyżuje mi plany Masz rację, zrobiłeś bubel ;) który na szczęście można naprawić na kilka sposobów, z których najprostszy to wywołanie sei() w funkcji obsługującej przerwanie. Dlaczego tak się dzieje - po prostu dlatego, że na początku obsługi przerwania samo z siebie wywołuje się cli(). Najczęściej unika się tak długo trwających...
Oj lepiej dokładnie zapoznaj się z dokumentacją zanim zaczniesz takie herezje pisać... Nie jestem "debeściakiem" wystarczy dokładniej przejrzeć dokumentację i trochę pogłówkować... ATmega posiada 3 timery z czego timer2 (8-bit) posiada możliwość pracy z kwarcem 32,768kHz... Kwarc taki podpina się pod wejścia TOSC1 i TOSC2... Co prawda są one wspólne...
Witam, chciałbym zrobić nietypowy nadajnik IR na Atmega 8. Nie Sony nie RC5, nietypowy. Sygnał ma mieć 38kHz, kluczowanie znam. Pytanie: czy te 38kHz mogę uzyskać za pomocą timera w trybie PWM 50%? Czy mogę ustawić dowolną częstotliwość, bo wydaje mi się że nie. Chciałbym jednym timerem generować falę prostokątną a drugim kluczować ją komendami START...
janbernat jak najbardziej cię rozumiem, jednak nie poruszam tu kwestii bezpieczeństwa, większość czasu sam operuję to windą więc zdaję sobie sprawę z zagrożeń, jednak też nie jestem bezmyślnym człowiekiem i teren wokół windy zawsze mam zabezpieczony na całej linii, na dole zawsze są tablice ostrzegawcze i bariery dla osób postronnych, jednak wypadki...
Zastanów się nad swoją pętlą główną. Odczytujesz B (czyli ADC) tyle razy na sekundę ile razy wykona się ta pętla. A tempo jej wykonywania się determinuje szybkość wysyłania znaków przez UART. W efekcie twoje "samplowanie" jest zależne od prędkości UART. Piszę w cudzysłowiu bo prawdziwe samplowanie masz 8kHz, tyle, że samą zmienną B odczytujesz inną...
A change of the COM1x1:0 bits state will have effect at the first compare match after the bits are written. For non-PWM modes, the action can be forced to have immediate effect by using the FOC1x strobe bits. Być może w tym jest problem. OC1A jest prawdopodobnie inicjowane z wartością 0 do momentu wystąpienia pierwszego "compare match". W trybach "set...
generalnie nie wczytując się w kod za bardzo, to nie podałeś funkcji main i nie wiadomo co tak w ogóle tam jest. Ogólnie kod działa na przerwaniach - zewnętrznych czujnika i timerów. Co mogę napisać nie widząc funkcji main, to: - podłącz czujnik podczerwieni pod IN1 (PD3), - wywołaj w main rc5_init(); - później włącz przerwania przez sei(); ogólnie...
"Buforowany CTC" bo wartość OCR0 po zmianie nie daje efektu natychmiast (jak w normalnym CTC) ale czeka do końca cyklu. W efekcie nie powstaje zaburzenie (swing) przy zmianie wartości OCR0 (czyli czestotliwości). Z tego powodu ten tryb bardziej nadaje się do jakiś wobuloskopo podobnych zastosowań czy do sterowania np przetwornicy. Prawdę mówiąc nie...
... Nigdy nie dołączałem modułów w assemblerze do moich projekcików i nie wiem czy dobrze zrobiłem. No niestety , nie popisałeś się :-P Zobacz na adres , do którego jest kopiowany R24 6d2:8b bd out0x2b, r24; 43 r24 został skopiowany do GPIOR2(0x2B) , a nie do PORTD(0x0B) i zonk :| Nie chce mi sie tłumaczyć dlaczego tak się stało , więc dam Ci gotowca...
Witam, nie znam Bascom i dość słabo Atmega. Podejrzewam jednak, że problemem jest realizowane w przerwaniu ładowanie timera nową wartością. Przyjęcie przerwania wymaga jakiegoś czasu, a timer cały czas "cyka". Kiedy ładujesz go obliczoną wartością (250) zdążył już coś naliczyć, w związku z tym Twój zegar się późni. W efekcie dobierasz eksperymentalnie...
A ja proponuję sięgnąć w takim razie po jakąś książkę o mikrokontrolerach - jest ich pełno - albo poczytać w necie i chociaż zdobyć jakąś podstawową wiedzę bo jak będziesz zadawał na elektrodzie do ilu może zliczyć 8bitowy timer itp - to hoo ho - zadasz ich chyba ze 2 miliardy zanim zrobisz pierwszy program do migania diodą LED Tymczasem pierwszy lepszy...
Timer2 nie ma 'edge detektora', więc na którym zboczu miałby zlicza impulsy? Timery działają, dlaczego miałyby nie działać? Widocznie jakoś producent zrealizował tę możliwość. Rzecz w tym że w tym trybie, wejście dostosowane jest do typowego oscylatora 32,768Hz, więc pozostałe parametry są niezbyt istotne, i mogą się dziać różne rzeczy. ;) Zrobiłem...
W ostatecznym rozrachunku wyjdzie na to samo... Niestety nie, Bity są kodowane w 3 cyklach Te 1: --_ 0: -__ (minus = stan wysoki, podkreślenie stan niski) czyli znaczenie ma czas trwania stanu wysokiego, zaś w preambule znaczenie ma czas trwania stanu niskiego co do zegara masz rację, ale na razie chodzi o oszacowanie czy da się zrobić software'owo...
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...
Dzięki za odp. na razie udalo mi sie to zrobić przy użyciu polecenia _delay_ms() ze standardowej biblioteki, ale wiem, że to pójście na łatwiznę ;). Obsługe minut i wyświetlania juz w zasadzie skończyłem. Nie wiem, czy coś będę musiał zmieniać przy przejściu na timery.
No to bez problemu, wykorzystaj SPI/USART w trybie SPI, wtedy dane musisz podawać 8 razy rzadziej niż pixelclock (a nawet rzadziej, bo USART ma bufor), czemu podoła zwykła ATMega. XMEGA to nawet może spać podczas generowania obrazu, bo generacją linii zajmuje sie DMA, a synchronizacji timery :)
1. W jakim języku piszesz? 2. Kalkuluje się to tak: Masz kwarc 16 000 000 Hz (16 MHz) i dajesz sobie jeden z dopuszczonych prescalerów, np. 64 i wtedy timer zlicza Ci impulsy z częstotliwością 16 000 000 / 64 = 250 000 Hz, czyli jeden impuls timera to 4*10^-6 s lub inaczej aby odmierzyć 1s musisz zliczyć 250 000 impulsów, Jako, że Timer0 jest 8 bitowy...
Musisz zanegować sygnał PWM (powiedzmy IN1) i wyprowadzenie IN2. Możesz negować sprzętowo zmieniając konfigurację lub wpisując do OCR wartość 255-pwm. Aby nie było szarpnięć itp musisz zrobić to w chwili przepełnienia timera. Zmieniając kierunek, silnik stoi (no raczej powinien, bo zmiana kierunku na max obrotach to nie jest dobry pomysł) i wydaje się,...
Tego nie widziałem. Znalazłem za to informację że dotyczy to rezonatora pracującego jako generator wytwarzający główny sygnał zegarowy: http://obrazki.elektroda.net/9_123515576... A po drugie, akurat w ATMega8 jest błąd w krzemie i te wewnętrzne kondensatory nie działają (tzn. FuseBit ich nie włącza). Użycie rezonatora jako źródła sygnału dla...
Halogeny też będą zabronione ?? a co do projektu, właśnie zakończyłem projekt na uczelnie gdzie wykorzystuję sterowanie halogenem. jest to zrealizowane w ten sposób, że mam 100 poziomów jasności (0-100%). Sterowanie fazowe oczywiście i triak załączany impulsem. Logicznie, program działa tak: 1) system detekcji zera (transoptor) wykrywa moment w którym...
Witam, Chcę zrobić prosty licznik impulsów na mikrokontrolerze Atmega16 i wyświetlać ilość impulsów na wyświetlaczu LCD. Impulsy prostokątne będą doprowadzone z zewnątrz z generatora zbudowanego np: na kostce NE555... Pozdrawiam, Rafał Czy masz jakiś specjalny powód budowy zewnętrznego generatora impulsów na 555 mając do dyspozycji 3 timery (T0,T2...
zrobi timer elektroniczny zrobi komputer atmega timer atmega przerwa
skuter kranik orion hotelowy darmowe programy diagnostyczne
schemat hilti citroen xsara schemat
Bezpiecznik wentylatora Thermo King 200MAX - lokalizacja i specyfikacja Klekot wtrysków w BMW X3 E83 2.0i N46B20B z LPG