Co to za przerwanie? Od porównania? Przepełnienia? Czy może od przechwycenia - co sugerują komentarze. Nie używasz innych przerwań? Załącz cały program.
Uruchomić timer w trybie CTC. Tryb CTC [syntax=vbnet]CONFIG TIMER1 = ..... CLEAR TIMER = 1[/syntax]
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ć?
Cześć Robie nadajnik i odbiornik podczerwieni w jednym korzystam z przerwania od przechwytywania czy na czas nadania muszę zablokować przerwanie wywołane zboczem opadającym lub narastającym (Timer1).Czy może nie muszę?????????
Jaka jest maksymalna częstotliwość pracy kwarca wewnętrznego Atmegi8? ATmega nie ma w środku kwarc u , tylko oscylator RC, to tak gwoli ścisłości. Mam ustawione 4Mhz i kiedy ustawiam prescaler w timerze 16bitowym na 64 (TCCR1B|=1<<CS11|1<<CS10;) tak aby przerwanie spowodowane przepełniniem timera było wywoływane mniejwięcej co 1s 4000000/64/2^16...
No właśnie timer1 ma przerwania co 1ms. Używam panelu dotykowego nextion, korzystając z gotowej biblioteki arduino przesyłam dane po RS z prędkością 9600bodów. Nadawanie zostaje przerwane przez timer1, a przy dokończeniu nadawania cała transmisja nie zawsze sie zgadza, dlatego zależałoby mi żeby zmienić priorytet przerwania USART2 na wyższy niż timer1
Tak, o ile procesor nie będzie w uśpieniu. Jeśli będzie to wymagana jest funkcjonalność asynchronicznego wybudzania, czego ATMega nie ma dla zboczy, wyłącznie dla poziomu. Trzeba też pamiętać, że zmiany krótsze niż okres zegara mogą być przez MCU niezauważone. Oczywiście dla kwartcu 14 MHz i impulsu 20us nie jest to problemem.
A mówią Ci coś takie pojęcia jak: atomowość zmiennej, semafory, kolejka ..... Jeżeli nie to tu szukałbym przyczyny. Pamiętaj że przerwania, to tak jakby wielowontkowy system.
Jak sinus ma przejść pełen to przerwanie wyłączaj i podawaj statyczny stan ciągle na triaka.
ad 1:Podaj F rezonatora np. 8mhz config timer1 = timer,prescale 256 'konfiguracja timera load timer1 , 31250 'załadowanie timera 1s on timer1 odliczanie 'określenie która procedura ma byc wykonana co 1s enable interrupts 'właczenie przerwań enable timer1 'właczenie timera1 dim twoja_zmienna as long ' twoja pętla do "jakis tam twój program" loop odliczanie:...
A co przeszkadza w wykorzystaniu przerwania INT0?
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)....
Użyj przerwania od przechwytywania kiedy uc wykryje zmianę stanu na pinie ICP1 z niskiego na wysoki to jak będziesz miał odblokowane to przerwanie oraz będziesz miał odpowiednią reakcję(w tym przypadku to ma być zbocze narastające bo z 0 do 1) to wywoła si się przerwanie i w tym przerwaniu możesz zobaczyć ile timer1 zliczy ci impulsów
Moze inne przerwanie blokuje przerwanie timera, sam z siebie nie ma prawa sie zablokowac ;) Sprawdzasz przebiegi na oscyloskopie, czy tylko zgadujesz ze sie przycina ?
Panowie. wracając do sedna sprawy: czy możliwe jest w trybie PWM poprawnym fazowo użycie przerwania TIMER1 COMPB?
Nie ma znaczenia czy pętla główna jest pusta czy nie. Ja uczyłem się na programie właśnie tak skomponowanym. Cały program był wykonywany podczas przepełnienia licznika. Co do podziału to proszę ATMEGA 8 na zegarze 8MHz Config Timer1 = Timer , Prescale = 256 'konfiguracja timera On Timer1 Cykl 'realizacja podprogramu cykl po przepełnieniu Enable Interrupts...
W AVR studio u mnie też to ladnie działa. A w układzie rzeczywistym jest zupełnie inaczej :/. Z tego co zaobserwowałem wygląda na to że moja ATMEGA nie powraca z części KONFIGURACJA_PINOW, ale nie wiem czemu.
A więc tak. Dodałem obsługę przerwania i dodatkowo dodałem zapalenie diody led kiedy nastąpi skok do Timer1_handler . Ale taki skok nigdy nie następuje! Chociaż mam zadeklarowane : On Timer1 Timer1_handler Nosave Odtwarza plik do samego końca. Ale skok do przerwania nie następuje.
\ 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...
Nie obraź się ale Twoja metoda pomiaru częstotliwości jest "trochę" zagmatwana :) Korzystasz z timera w dziwaczny sposób a funkcje typu Delay() w połączeniu z przerwaniami nie działają poprawnie i nadają się co najwyżej do migania diodą. Natomiast pomiar częstotliwości można zrealizować np. tak: 1. Ustaw timer aby generował przerwanie w stałych odstępach...
Program zajmuje 50%. Może i jest źle napisany ale działa.. Ja bym to stwirdzenie troche skorygował; Program działa tak jak jest napisany!... bo - "Jest jeszcze jeden problem." Co jakiś czas temperatura podskakuje o 10 stopni a czasami nawet do 200 podskoczyło co spowodowało zbędne załączenie przekaźnika. Z czym jest problem? Popatrz na pracę timera0,...
Włączając przerwanie od Timera który robi PWM (czyli Timer1) i pomiar ADC robiąc w tym przerwaniu (w każdym razie wyzwalając go w tym przerwaniu). PWM trzeba ustawić w tryb Phase Correct. Wtedy pomiar będzie dokładnie w środku przebiegu (w niczym to nie przeszkadza, nie musi być na końcu).
Wektorów przerwań szuka sie nie tyle w dokumentacji winavr co w dokumentacji kontrolera, który się programuje. Nazwa wektora to nazwa przerwania ze spacjami zastąpionymi podkreślnikiem i dodanym przyrostkiem _vect np przerwanie od przepełnienia timera 1 w atmega 32: w dokumetnacji sekcja Interrupts (str. 42) 10 $012 TIMER1 OVF Timer/Counter1 Overflow...
Jak ustawic timer 1 żeby liczyl 16bit a nie 8? bo to co napisalem ponizej to zawsze tylko liczy w TCNT1L a to co wpisałem w TCNT1H automatycznie wymazuje przy kolejnym cyklu dlaczego? :( .cseg .org 0x00 rjmp start .org 0x06 rjmp timer1 .org 0x11 Start: Ldi Acc, 1; ustaw preskaler timera 1 na 1 Out TCCR1A, Acc Out TCCR1B, Acc Ldi Acc, 0x80 ; wpisz wartosć...
Najprawdopodobniej jest gdzieś błąd w kodzie tak sytuacja nie powinna mieć miejsca. Sprawdź czy to "podświetlenie" jest przypisane do dobrego wektora przerwania (Timer1 w Twoim przypadku). Jeśli możesz to wrzuć cały kod wtedy coś więcej można będzie powiedzieć. pozdrawiam, Marcin
Może używając timer1 i jakąś zmienną przechowującą ilość przerwań wywołanych przez ten timer - czyli co przerwanie timera zmienna+1 i jeśli osiągnie jakąś tam wartość (czyli ileś tam przerwań timera = jakiś czas (zależny od kwarcu)) to wtedy spełniać ten warunek.
Czy dobrze zrozumiałem? INT włącza Timer, który dla max prędkości zliczy np. 2000 taktów, więc w pętli głównej gdzie dokonuje obliczeń po ustawieniu flagi (dokonaniu pomiaru) powinien być warunek, żeby program nie obliczał jeśli timer<2000? Coś w stylu: do if flaga then if timer1>2000 tu robi obliczenia i wyswietla predkosc ... loop
Witam! Chcę ustawić TIMER1 w atmedze 16 tak aby generował przerwania mniej więcej co sekundę w trybie CTC (dodam, że nie zależy mi na aptekarskiej precyzji). W tym celu ustawiłem następujące rejestry: TCCR1A |= (1<<WGM12); //tryb ctc , timer1 TCCR1B |= (1<<CS12)|(1<<CS10); //prescaler 1024 / OCR1A = 7813; // 8MHz/1024 TIMSK |= (1<<OCIE1A);...
Chyba tutaj jest pogrzebane nadmiarowe wygaszanie z wzajemnością: Mielenie tego w pętli nie ma sensu, warto zaprząc tu przerwania od Timera (Jest jeszcze Timer3, gdyby z czymś kolidowało użycie Timer1), a pętla główna niech tylko oblicza odpowiednie wartości licznika.
Robi się to prosto na wejściu ICP Atmegi, mierzysz czas pomiędzy kolejnymi zboczami, raz jest opadające, raz narastające itd.. potem to tylko interpretacja wyników, liczenie bitów i po odliczeniu 64 bitów z transmitowanych 66, bo dwa ostatnie dla uproszczenia procedury pomijasz. wyświetlasz na LCD lub wysyłasz po RS232 do komputera, a tam wyświetlasz...
Witam Wyświetlacz musisz zrobić w przerwaniu. Częstotliwość odświeżania każdego powinna wynosić minimum 50Hz. Lepiej unikać dokładnej częstotliwości 50Hz. Może to być np. 53.5Hz. Jeśli ma np. 4 takie kostki to częstotliwość powinna wynieść 4 * 53.5Hz czyli 214Hz lub jak kto woli przerwanie powinno być wywoływane co 4,67 milisekundy. Od tego bym zaczął....
O tez ciekawie!!! Ja mam tylko koncepcje co do wykrycia Synchro: ATmega po zmianie z 1 na 0 wywoływane jast Int0 wtedy uruchamia się Timer1 i liczy impulsy do pojawienia 1 na tym porcie i zatrzymuje Timer1 sprawdzam czy licznik 62500 przeszedl ponad dwa razy jak tak to nie bylo zmiany z 1 na 0 w 59 sekundzie wtedy powinienem zliczac od nowa Timerem1...
Kod jest prosty, bo siedze nad nim od dawna i już wyrzuciłem wszystko co było zbędne. Zależy mi na tym by na wyświetlaczu pojawił się napis "Timer0 OK". [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h> #include "LCD/lcd44780.h" void timer_start (void); volatile uint16_t...
Witam W projekcie wysyłanych będzie około 800bytów danych do PC i w PC bedzie na bieżąco wyświetlane. Do czego zmierzam. W czasie kiedy bedę obsługiwać przerwanie od Timer1 może pojawić się sygnał do PC, że dokonywana bedzie tramsm,isja. W atmega8 nie mozna ustawiać priorytetów przerwań w odróżnieniu do 8051. Kiedy pojawiało mi się przerwanie do timer1...
Witam, Nie będę zakładał nowego tematu. Mam podobny problem. Atmega 2560 + 16Mhz. Przy tym ustawieniu timera przerwanie powinno być generowane co 0,5s. Natomiast jest generowane co 1s. 256/16000000= 16us*65536=1,048576s 65536-31250=34286 co daje 0,5s [syntax=basic4gl] $regfile = "m2560def.dat" $crystal = 16000000 Config Portg.5 = Output : Portg.5 =...
Dokładnie tak. Pytanie z jakiego uP korzystasz? Np.: tiny2313 ma 4 wyjścia OC: OC0A i OC0B dla Timer0 oraz OC1A i OC1B dla Timer1. Dla mega8 masz trzy wyjścia OC: OC1A i OC1B dla Timer1 oraz jedno dla Timer2 (OC2) Co do wejść oznaczonych TOSC1 i TOSC2 - w kontrolerach ATmega służą do podłączenia kwarcu zegarkowego (32kHz). Przy wykorzystaniu licznika...
Przecież twój kod się nawet nie powinien kompilować, więc jest faktycznie zły :) Jak sobie wyobrażasz zagnieżdżenie ISR? Mieszasz nowe makra (ISR) ze starymi (SIGNAL). Poza tym ATMega nie ma czegoś takiego jak priorytety przerwań. Przerwanie TIMER1_COMPA_vect nie zostanie przerwane, chyba, że jawnie odblokujesz wszystkie przerwania co zapewne doprowadzi...
Można by się też zainteresować rejestrem ADCSRB i sprzętowo wyzwalać ADC od timer0 lub timer1. A wynik odczytywać w przerwaniu ISR(ADC_vect) i w nim ewentualnie zmieniać kanały. P.S. Wasza dyskusja na temat volatile sprawiła że zacząłem szukać- i co przykładowo znalazłem: "volatile uint8_t overflow; // | // -- volatile jest konieczne ze względu na sprawdzanie...
A możesz podłączyć impulsu do INT0 i INT1 Ustawić przerwania zboczem narastającym jako przerwania takie procedurki: [syntax=avrasm] procINT0: inc R5 sbis PORTD,INT0 reti rjmp procINT0 procINT1: inc R4 sbis PORTD,INT1 reti rjmp procINT1 [/syntax] W głównej pętli tylko zerujesz R5 i R4 , czekasz aż będą miały wartość różną od zera i porównujesz który...
Zajmiemy się na początek faktem, że ATmega16 posiada trzy przerwania zewnętrzne. Na pinach: D2 - INTO 0 D3 - INTO 1 B2 - INTO 2 Więc Podłącz PCF pod pin B2. Natomiast Timer1 pozostaw do ciekawszych rozwiązań. Dokładniej do ominięcia Waitms. Podłącz PCF i się Odezwij, będziemy kontynuować.
Program na ArduinoMega działa bardzo dobrze, więc postanowiłem przenieść go na procesor Atmega 328p - ten sam co w większości płytek Arduino. Układ pracuje na wewnętrznym oscylatorze 8MHz, bootloader wgrany, program też. Pojawił się niestety problem, którego nie potrafię zlikwidować - przerwanie od przycisku powoduje restart procesora... Jeżeli dodam...
Pozwolę sobie jeszcze raz nadużyć Waszej uprzejmości i znowu zwracam się z prośbą o pomoc Sprawa dotyczy sterownika do serwonapędu (na razie jednego, później rozbuduje do 8). Taktowanie 8MHz. Oto kod programu: [syntax=c]#include<avr/io.h> #include<avr/interrupt.h> #include<HD44780.c> #include<util/delay.h> #include<stdlib.h>...
Mam mały problem chcę zrobić prosty miernik częstotliwości w bascomie do ok. 600KHz Warunek ma mierzyć z dokładnością 1Hz i niestety nie wychodzi mi to. Taimer 1 mam skonfigurowany jako taimer (Config Timer1 = Timer , Prescale = 8) taimer 0 skonfigurowany jako licznik (Config Timer0 = Counter , Edge = Falling ) z resztą zamieszczam fragment kodu [syntax=basic4gl]$regfile...
Masz 3 źródła przerwań od każdego z rejestrów osobno. Tryb ctc ładuje albo z OCR1A albo z ICR1. Za pomocą wymienionych przez ciebie bitów możesz zapisując do nich jedynkę wymusić taki efekt jaki by wystąpił w momencie gdy licznik jest równy danemu rejestrowi OCR1 (A,B,C). Efektem tym jest zmiana stanu wyjścia licznika (pinu portu) jeśli takowe wykorzystujesz....
Sorry, że wam się wtrące ale też pracuje nad komputerkiem dla Vectry B Silnik na wtrysku paliwa więc wysarczy zmierzyć czas otwarcia wtryskiwacza i tu moje pytanko. Jak najlepiej odmierzyć czas otwarcia wtryskiwacza oraz ilość wtrysków na jednostke czasu? Wtryskiwacz jest sterowany masą wiec spoko można użyć przerwań z końcówki INT1 do wykrycia otwarcia...
Możesz również zrobić to w podobny sposób jak masz na myśli. Wykorzystaj przerwanie od przepełnienia licznika. Wcześniej jednak musisz wyliczyć odpowiednią wartość rejestru licznika timer1. W ten sposób dobierając inny prescaler możesz uzyskać bliższy wynik do 1us. Co do tego co zasugerował przedmówca. Jest to najprostszy sposób dla wywołania opóźnienia....
robie uklad gdzie chce wykorzystac element max6575lzut.. zapoznalem sie z dokumentacja jednakze nie otrzymuje wartosci zmierzonej.. moze wiecej szczegolow.. uklad podlaczylem do wejscia portd.2 (int0) uP atmega 8... wybralem 5us/K (przez odpowiednie polaczenie wyprowadzene ukladu max).. w programie na wstepie ustawiam port jako wyjscie i ustawiam w...
Wykonalne i niespacjalnie wymagajce ;) Ja bym do tego wykorzsytal timer1, poczytaj w datasheecie tam o timerach i sprzetowych pwmach. Wykorzystujac dwa kanaly jednego timera mozesz ustawic przesuniecie w fazie, tylko jak przesuniecie bedziesz mial polowe okresu to wypelnienie bedzie moglo byc maks 50%. Ale to tak na szybko co mi do glowy przychodzi....
Witam. Urzyłem w moim programie Timer1. I od razu wynikł tu problem. Pomimo użycia podobno dokładnego odliczania i tak sekundy są naliczane zbyt wolno (przynajmniej na wyświetlaczu). Wie ktoś z jakiego powodu? Oto istotna część programu: TCCR1B |= ((1 << CS10) | (1 << CS11)); //częstotliwość przez 64 if (TCNT1...
Witam. Chciałbym wykorzystać przerwania timera1 w Atmega32 do realizacji pojedynczego pomiaru wartości na ADC. Timer ustawiam w tryb "PWM with phase correct", a ADC na pojedynczy pomiar: [syntax=c] //ustawienia timer1 TCCR1A |= (1<<WGM10) | (1<<WGM11); TCCR1A |= (1<<COM1A1); TCCR1B |= (1<<CS11); //POZWOLENIA NA PRZERWANIE TIMSK...
Teraz Timer1 powinien mierzyć okres a po przeliczeniu zmienna Liczba powinna podać częstotliwość. Sygnał podaje na INT0 i wyświetlacz zaczyna szybko migać więc nie widać jaki jest wynik. Podaje 84Hz ale wyniku na LCD brak. Sam fakt że wyswietlacz 'miga' oznacza że coś tam jednak się pokazuje. Problem jest, że wynik nie pozostaje na długo bo jest natychmiast...
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...
Rozumiem a czy któs z WAS mógłby zerknąć i powiedzieć mi co mam tutaj zmienić. Dim Adress As Byte , Command As Byte Dim Odebrano As Bit , Flaga As Bit Dim X As Byte Config Pind.2 = Input : Portd.2 = 1 Config Timer1 = Timer , Prescale = 8 'co 2usek przy 4MHz Stop Timer1 On Timer1 Przer Config Int0 = Low Level On Int0 Rc Enable Int0 Enable Timer1...
Oczywiście, że wiem jakich timerów używam. Chodziło mi o to, żeby nie szukać po dataszicie co i gdzie trzeba sprawdzić. No już poszukałem, i zrobiłem sprawdzania rejestrów TIMSK, ale myślałem, że może jest jakaś bascomowa funkcja w rodzaju : If timer1=enabled then... Z tą obsługą błędów też masz oczywiście rację, tyle, że pisząc dawno temu ten program...
... sorry ale to kolejne pytanie na forum z serii "dla jasnowidzów - magia i mistyka" ;) ... no jak można zadać pytanie "... dlaczego mi nie działa Timer1 w ATmega8???" i koniec! (no nie przepraszam kolega autor podał jeszcze wg niego garść dodatkowych informacji dzięki którym jasnowidzowie z forum mogą się rzucić na rozgryzanie tematu - a mianowicie...
Niestety Bascom jest niedorobiony. Ilez to ja niekiedy spedzilem czasu bo cos mi nie chodzilo. Co wersja to inny blad. W jednej wersji nie chodzily mi np. timery na Atmega 16, prescaler blednie sie ustawial itp. Warto jest podgladnac rejestry i sprawdzic czy aby Bascom nie wpisal tam glupot. Jesli wpisal glupoty a to najczesciej jest przyczyna probowac...
Witam Chciałem nauczyć się regulacji fazowej i popełniłem taki układ na podstawie tego co wyczytałem w internecie http://obrazki.elektroda.pl/1619199600_1... I do tego taki program [syntax=vbnet] $regfile = "m32def.dat" $crystal = 16000000 Config Com1 = Dummy = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'konfiguracja...
Witam Zadeklarowałem przepisowo Timer1 jako PWM: Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Disconnect , Compare B Pwm = Clear Up , Prescale = 8 Obciążyłem wyjście również przepisowo rezystorem 4k7 (dalej jest baza tranzystora) i teraz czary: wszystko działa ale jak wpisuję do PWM1B = 0 (zero) to procek pobiera 150mA i się gotuje (ale działa)....
No więc wykonałem jako takie bramki z tego co miałem pod ręką. Następnie na płytce stykowej złożyłem dwa układy odbiornika i o ile jeden wydaj się działać dobrze o tyle ten drugi jest czuły na otoczenie, tzn wyzwala przerwanie przy dotknięciu płytki ręką, przy jej poruszeniu, nawet jak puknę w biurko 0,5 m dalej. Dzieje się tak niezależnie czy układ...
Witam Mam pytanie dotyczace ustawienia Timera 16bitowego w atmega 128. Kwarc 8Mhz. Chce odmierzyc 1ms. Czy moj sposob postepowania jest sluszny? (1/8Mhz)*40000=5ms wiec ustawiam (timer1) TCCR1B=(0<<CS12 | 0<<CS11 | 1<<CS10); (no prescaling) oraz TCNT1H=0x63; TCNT1L=0xBF; Moim celem jest odczytywanie ADC co 5 ms i chce zebrac 2000 pomiarow,...
Witam, mam problem z uruchomieniem programu do zliczania impulsów na T1 przez 1 sekundę. Wyświetla mi ciągle zero. Co źle ustawiłem z Timerami ?? Atmega 32 [syntax=c] #define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <hd44780.h> volatile unsigned char licznik = 0; //liczba...
Cześć, mam pytanie odnośnie Timerów w uC ATmega. Potrzebuję następujących opcji: - zliczanie impulsów z dwóch enkoderów - generowanie dwóch przebiegów PWM - generowanie przerwania co kilka ms. W ATmedze 32 mam 2 timery 8-bitowe i 1 16-bitowy. Wymyśliłem tak, że za pomocą timerów 0 i 2, zliczam impulsy. I teraz pierwsze pytanie: czy da się zliczać impulsy...
Szanowni Forumowicze, staram się z byle błahostką tutaj nie pojawiać, ale niestety natrafiłem na problem w trakcie programowania µC z którym nie potrafię sobie poradzić. Ćwiczę programowanie w C i od kilku dni testuję Timery na Atmega8. Udało mi się zaprogramować je na wszystkie znane mi sposoby. Niestety po zmianie programu i konfiguracji na płytce...
Skupmy się na Twoim sterowniku.. : timer1 (16bit) : ISR(TIMER1_COMPA_vect) { if (pierwszy == 1) PORTA=0; else PORTC=0; TCCR1B=(0<<CS12); TCNT1L=0x00; } ISR(TIMER1_COMPB_vect) { if (pierwszy == 1) PORTC=0; else PORTA=0; } Wiem, że w jednym momencie dajesz ustawienia na dwa serwa, tak jak...
Używam Timera1 z Atmega164P w trybie CTC, Atmega ma kwarc 16MHz, interesujący kawałek programu wygląda tak: Konfiguracja Timera: void Timer1_Init(void) { DDRD |= (1<<PD7); // PD7 wyjście PORTD |= (1<<PD7); // PD7 <= 1 TCCR1B = (1<<WGM12)|(1<<C...
Witam serdecznie. Szukałem już chyba wszędzie, próbowałem kilkunastu innych programów i problem ciągle zostaje nie rozwiązany. Otóż piszę program do sterownika pieca. Posiada on 3 czujniki DS18B20, 3 przekaźniki i 1 triak do sterowania pompki kolektorów. Wszystko działa bez zarzutu. Problem pojawia się dopiero po włączeniu przerwania od INT0 (regulacja...
Witam, Chciałbym dowiedzieć się jak mogę łatwo przeliczyć preskaler i czas przerwać, tak abym mógł odmierzać czas na ATMEGA_32 16Mh Timerem1 oraz Timerem0. Z góry dzięki za pomoc. ----------------------------------------... (PS. Jestem początkującym użytkownikiem tego forum mimo, że od roku czasu jestem na nim zarejestrowany....
Witam Mam problem z timerem w uc Atmega 8. Chciałem sobie napisać zegar,ale nie mogę tego zrobić przy użyciu timera,bo timer w ogóle nie generuje przerwania :| licznik chodzi i się przepełnia,bo wyświetliłem sobie jego wartość na lcd żeby sprawdzić co jest nie tak...załączam kod programu,bo już nie mam pomysłów co może być nie tak $crystal = 8000000...
Witam. Podczas projektowania robocika 4 kołowego z 4 silnikami(pololu lub HL149) chciałem założyć na oś 4 tarcze z myszy kulkowej i układ opto (dioda IR +fototranzystor podwójny)+komparatory LM358D Planuje kontrolować przebytą drogę jak i kierunek obrotu kół(coś ala kontrola trakcji), 8 wyjść z komparatorów planuje podłączyć pod 8 przerwań zewnętrznych...
...A dlaczego bajzel? Ano dlatego , że w kodzie nie ma procedury przerwania dla Timer1 , więc procek chcąc obsłużyć przerwanie T1 , poszed by w przysłowiowe maliny. Co się stanie w podanym programie gdy w czasie obsługi przerwania wystąpi następne przerwanie ? Nic się nie stanie. W AVR-ach , w czasie obsługi dowolnego przerwania , zerowana jest globalna...
Witam. Od pewnego czasu zajmuje się wykonaniem sterowania na mikro-kontrolerach AVR. Nadajnik pracuje na atmega 8 a odbiorniki na atmega 16. Mój system to zestaw 15 odbiorników i 1 nadajnika. Połączone jest to wszystko za pomocą magistrali RS485 za pośrednictwem Sn75176 z przełączaniem odbiór nadawanie. To tyle odnośnie układu docelowego. Do celów diagnostycznych...
To chyba nie kwestia wyważenia, tylko tego, że jest tak solidnie zamocowane, no i w końcu silnik od HDD jest dość mocny. Jest w tym sporo prawdy. Śmigło jest przykręcone w kilku miejscach a dodatkowo silnik ten ma tak zwartą konstrukcję, że mam wrażenie, że samochód mógłby po nim przejechać. Mimo to projektując płytkę starałem się rozmieścić elementy...
Witam wspólnotę chciałbym zaznaczyć że z wykształcenia jestem mechanikiem, a z programowaniem nie miałem wcześniej styczności. Przeczytałem książeczkę która mowiła o programowaniu w jezyku bascom, i stworzyłem taki o to kod programu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 'licznik do odmierzania...
Zobacz tak. Napisałem na kolanie bez sprawdzania, ale może zafuczy ;) Na marginesie funkcja Getrc5() używa Timer0 i powinieneś zostawić go w spokoju czyli do innych rzeczy, jeśli potrzebne, użyć Timer1 lub Timer2. [syntax=vbnet] $regfile = "m8def.dat" $crystal = 8000000 $hwstack=64 $swstack = 32 $framesize=128 $baud = 9600 Config Portb = &B11111111...
krotki opis proramu, po wykryciu przerwania pierwszy raz na INT0 uruchamia timer i odlicza czas do drugiego przerwania, po drugim przerwaniu i kolejnych na PA2 jest wystawiany impuls trwajacy 200us, impuls jest opoznany w stosunku do sygnalu wejsciowego w zaleznosci od okresu sygnalu. Problemem okazalo sie dodatkowe opoznienie wprowadzone przez obsluge...
No dobra. Pierwsze kroki. Teoria: http://ep.com.pl/files/3561.pdf Aplikacja do testów: http://www.mcselec.com/index.php?option=... Kod bootloadera: http://avrhelp.mcselec.com/index.html?lo... 1. W urządzeniu na ATmega644p stosuję wewnętrzny oscylator 8MHz i prędkość transmisji po UART 4800 baud (8N1,...
Witam, kod nie jest moje autorstwa, więc nie chcę go umieszczać . W każdym razie algorytm jest realizowany w następujący sposób: 1. Wysłanie za pomocą UARTu informacji do uC o zezwoleniu na regulację prądu + wysłanie wartości współczynników regulatora i prądu referencyjnego. 2. Jeśli ustawiona jest flaga zezwalająca na regulację, oraz ustawiona jest...
wygląda na to że antenki mam dobrze przylutowane. jako antenki używam kawałki drucików które miałem dołączone w paczce razem z rfm-ami. nie wiem czy są one odpowiednie, nie za bardzo się znam na sygnałach radiowych. moje moduły też chodzą na 868Mhz. tzn powinny chodzić, bo nie chodzą i nie wiem dlaczego. obydwa rfm-y mam podpięte do atmegi8 na 10Mhz...
Witam, wiem że w sieci jest 1*e^6 lub więcej gotowych liczników impulsów, lecz ja chciałbym mieć pełną kontrolę nad moim kodem, a nie kopiować bezmyślnie. Tak więc sprawa tyczy się zliczania impulsów 5V od obrotów i prędkości w motocyklu. Do tego celu chcę wykorzystać układ AVR ATMega 16 lub mniejszy (po przeróbce w kodzie). PYT1: Obrotomierz kręci...
Witam, W dokumentacji dowolnego mikrokontrolera ATmega z łatwością można odnaleźć tablicę z wektorami przerwań, np. taką: 1 $0000 RESET 2 $0002 INT0 External Interrupt Request 0 3 $0004 INT1 External Interrupt Request 1 4 $0006 INT2 External Interrupt Request 2 5 $0008 INT3 External Interrupt Request 3 6 $000A INT4 External Interrupt Request 4 7 $000C...
podzielę się wnioskami z badania trybu Fast PWM w ATmega 32. Wszystko co tyczy się trybu 5,6,7 zgadza się reguluje się tylko wypełnienie i rodzaj przebiegu (odwrócony i bez odwrócenia; wielkość wypełnienia za pomocą OCR1A lub OCR1B) By regulować częstotliwość(okres) i wypełnienie , trzeba wybrać tryb , w którym TOP-em jest OCR1A lub ICR1 , za wyjątkiem...
Nie jest to kod do jakiegoś Pentium. To prosta ATmega. A że, długo nie używałem i nie pisałem ,to stąd problemy. Jakby mógł Koś, zerknąć na kod i wytknąć błędy to będę cheppi. ( Program ma za zadanie, zmierzyć czas pomiędzy dwiema szczelinami na obracającym się kółku. wykorzystany transoptor) [syntax=c]#include <avr/io.h> #include <avr/interrupt.h>...
tak, można mierzyć długości półbitów ale zauważ że wtedy wstrzymuję główny program na czas odbioru całej ramki. Ale jest rozwiązanie, pobieram dane co pół bitu a nie co cały. Wtedy gdy otrzymam np 01 to mam 1, 10 to mam 0, a gdy dostanę 11 lub 00 to znaczy że bit jest błędny. Przerwanie Timer0 muszę więc wykonać 2x częściej, ale mam dokładniejszy odbiór...
Optymalizacji ciąg dalszy. Obie funkcje wywoływane tylko raz. Dlaczego po zrobieniu inline dla timer0_init() kod maleje o 6bajtów natomiast timer1_init() rośnie o 14bajtów? Optymalizacja na -Os. Powinna być jakaś logika a w tym nie ma :( ... void timer0_init(void){ //x8 //timer0 compa atmega_x8 TCCR0A set0 b(WGM00); TCCR0A set1...
Witam kolegów mam taki problem potrzebuje programu do mierzenia prędkości obrotowej silnika. Idea pomiaru jest znana, wykorzystywany jest do tego transoptor obiciowy. Ale to nie jest celem mojego wywodu. Potrzebuje krótkiego pomiaru obrotów zbudowanego na licznikach. Oscylator zewnętrzny 8MHz. Układ już wykorzystuje globane przerwania pochądzące od...
Wszystko (no prawie wszystko) jest opisane w datasheet'ie. Założenia jak rozumiem są takie: - procesor ATmega88 taktowany kwarcem zegarkowym 32kHz Tutaj masz datasheet do tego procesora: [url=http://www.google.pl/url?sa=t&rct=j...
Hmm, moim zdaniem gdzieś jest zmienna 8 bitowa (Byte) musisz zmienić ją na większy typ. np. Word, Long. zmienna word Dodano po 1 A czy trzeba konfigurować port Config Pinb.0 = Input Set Portb.0 pod counter0 atmega 32 Dodano po 11 [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 8 $framesize = 24 Config Lcd = 16...
http://obrazki.elektroda.pl/3499461100_1... Jest to bardzo specyficzna konstrukcja i prawie na pewno nikomu oprócz mnie nie przyda się w tej konkretnej postaci jaką tu opisuję, ale zawsze pozostają walory edukacyjne, nauczenie się jak coś zrobić albo jak czegoś w żadnym wypadku nie robić :D Urządzenie jest protezą dzięki której omijam...
na każdym który napiszę jest tak samo, w nowym temacie powyżej podałem ustawienia fuse bitów, zaraz wkleję kawałek na którym teraz się bawię Dodano po 4 to kod na którym teraz się bawie '***************************************... '-------------------- konfiguracje ----------------------------------------... $regfile...
W oparciu o Wasze rady oraz [url=http://www.avrfreaks.net/index.php?... Guide to AVR Timers i przydatną stronę [url=http://www.et06.dk/atmega_timers/]A... Timer/Counter/Prescaler Calculator w wolnym czasie sklepałem taki kawałek kodu: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h>...
Witam wszystkich, projekt powstał na przełomie marca/kwietnia tego roku w wyniku zapotrzebowania na pompkę perystaltyczną potrzebną przy realizacji pracy magisterskiej. Nigdy wcześniej nie miałem do czynienia z elektroniką (nie licząc podłączania diod z rezystorem i prostych zasilaczy na LM7812) a tym bardziej z mikrokontrolerami. http://obrazki.elektroda.pl/2272591900_1...
Ciąg dalszy bojów z tym kodem i jeżeli to możliwe prozba o dalszą pomoc. Wiec tak , obecnie podaję czas pracy silnika X1 oraz czas postoju T(klawiszami zwiększam albo zmniejszam parametry X1 oraz Y). Generalnie będzie to jeden z dwóch trybów pracy, drugi ma być z ciągłą regulacją płynną klawiszami UP i Down. O co teraz proszę - o pomoc w skonstruowaniu...
Witam. Mam problem z kodem. Wszystko się kompiluje ale zawartość funkcji void wyswietlwynik(float dana) nie uruchamia się. Jeśli zawartość tej funkcji jest w pętli while(1) wszystko jest ok [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "HD44780.h" #include "HD44780.c" float adc; void inicjalizacjatimerow()...
31249 jest dla preskalera 256 i 1 s i dla częstotliwości wyjściowej 1Hz , natomiast 15624 jest też dla praskalera 256 i 1s ale dla częstotliwości 2Hz To dopiero miszmasz... Trzeba uporządkować...moja wersja to przerwanie od timera (gdy wartość rejestru OCR1A zrówna się z stanem licznika) co 1s (1Hz). Przy generacji przebiegu(a więc zmieniając stan...
Witam. Napisałem sterownik do serwa modelarskiego na Atmega 8. Teraz próbuje skomunikować ten sterownik z druga Atmegą 8, aby przesyłać pozycje zerwa z drugiej Atmegi do sterownika. Jednak napotkałem pewne kłopoty. Oto program do drugiej Atmegi: #include<avr/io.h> #include<util/delay.h> #include<uart.c> unsigned char dana=100; int...
Witam, sytuacja wygląda następująco: chce zrobić PWM'a w przerwaniu TOV1, który sterowany jest z ADC. Problem polega na tym, że kod, który jest w tym przerwaniu nie powoduje żadnej zmiany na wyjściu PWM, jeżeli przenoszę kod do pętli nieskończonej wszystko chodzi jak należy i nie wiem dlaczego to w przerwaniu nie działa. Ponad to, gdy w przerwaniu tuż...
Czesc, No niestety nie hula... probowałem tego. Myśle ze atmega jest zryta jakos... Mimo tego, ze mam obsługe przerwań i tak, wiem ze to musi działać bo skopiowałem to z mojego poprzedniego projektu, to mi się restartuje atmega. Zwrać na płytce nie ma. [syntax=c] #include <avr/io.h> // Załaduj bibliotekę input/output #include <avr/interrupt.h>...
Witam! Kolega poprosił mnie o zrobienie mini-komputerka do Opla Corsy, mającego wyświetlać dane na wyświetlaczu radia. Problem pojawił się, kiedy zechciałem wyświetlać na bieżąco prędkość - program zgłupiał (choć, raz na kilka odświeżeń wyświetlacza pojawiła się poprawna prędkość) a przy większych prędkościach Atmega ulegała resetom lub się zawiesza....
Nie. Robię to mniej więcej tak: czekam na przejście przez zero i w czasie półokresu włączam i wyłączam na określony czas dmuchawę. Jestem pewien, że można to zrobić łatwiej, ale musiałem całość szybko uruchomić, a że ten sposób działał to już tak zostało. Póki co dmuchawa się nie popsuła przez takie sterowanie :P. [syntax=basic4gl] $regfile = "m16def.dat"...
Witam Proszę o wskazówki dotyczące polecenia incr. W celu poznania i zrozumienia przerwań (jak to wygląda, z czym się je i jak liczy) od kilku dni wertuję co możliwe i czytam, czytam, a następnie próbuję... "Urodził" mi się taki oto programik: If Portd.7 = 0 Then Incr Czas Czas kilkakrotnie "przeskakuje" całą wartość byte. Dochodzę do wniosku że INCR...
atmega timer1 timer1 atmega bascom timer1 przerwać
sterowanie spawarki prawa konsument zbiornik nadkole
pętla prądowa skymaster 32sh1000
Jak sprawdzić, czy SMS został odczytany? Czy zamrażarka może zakłócać kabel światłowodowy?