Witam, Pracuję na ATmega16 taktowanym wewnętrznym oscylatorem RC. Chciałem wykorzystać Timer1 do odmierzania czasu np. 1s lub 1min (po zastosowaniu preskalera 1024), a Timer2 razem z przerwaniem zewnętrznym do wykonania regulacji fazowej. Kiedy chce tylko odmierzać czas, albo tylko regulować fazowo to wszystko działa poprawnie. Jednak kiedy chcę połączyć...
Cześć, mam napisać "prosty" program dla ATmegi2560. Po wciśnięciu przycisku na porcie A, ma on zapalić odpowiadającą mu diodę na porcie B. Dioda ma się świecić 1 sekundę a potem ma zgasnąć. Za podtrzymanie świecenia mają odpowiadać przerwania timera1, a program ma się zaczynać od ustawienia flagi przerwania int0. Int0 działa, po wciśnięciu przycisku...
Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka z Arduino. Temat oczywiście nie zastąpi w pełni czytania noty...
Dzień dobry! Mam taki o to problem, przerzuciłem notę ale nie mogę jakoś ogarnąć jak uruchomić drugi timer 8 bitowy, przykładowo: Proszę pamiętać o używaniu znaczników syntax . Opcja Listing kodu . - arnoldziq
Witam, bardzo proszę o pomoc. Zrobiłem układ na Atmega32 z podłączonymi diodami do całego PortuA, oraz do PortuB Pin2 (PB2) dekoder podczerwieni TSOP31236 (testowałem też na TSOP31238). Wykorzystać chciałem bibliotekę IRMP a w załączniku spakowany cały projekt z plikami biblioteki irmp.
Witam... To będzie sporo pisania więc trzymajcie się... ;) #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> #include <stdlib.h> #define F_CPU 8000000 //wewnętrzny generato na 8Mhz #define PARITY_NONE 0 #define PARITY_EVEN (1<<UPM1) #define PARITY_ODD ((1<<UPM1)|(1<&...
Witam mam kolejny problem z nieszczęsną atmega128. Napisałem program który działał na ATmega16 i chciałem go przenieść do atmega128 no i jest problem. Program w ogóle nie działa. W przerwaniu powinny się zwiększać wartości zmiennych. Niestety chyba nie zwiększają się :/ program wchodzi do przerwania bo wstawiłem tam naprzemienne ustawianie i kasowanie...
Witam zaciekawił mnie kod arduino funkcji millis(), która liczy czas od załączenia układu. Byłby mi ktoś w stanie wyjaśnić jak ta funkcja działa. Wg mnie jest ona troszkę zbyt skomplikowana jak na proste zliczanie czasu. Podejrzewam, że chodzi o jej dokładność, żeby się czas nie rozjechał. Wrzucam jedyny kod jaki udało mi się znaleźć w Internecie. Strasznie...
Witam Do "kompletu" brakuje mi obsługi zegara DCF77. Tzn. uruchamiałem już wcześniej na Atmega8 i nie było problemów. Jednak przy tym układzie wykorzystuję Timer, przerwania - może konfiguracja jest zła ?. Timer0 - liczniki i flagi Timer1 - DCF77 Timer2 + INT0 - odbiór RC5 INT1 - przerwanie od PCF8574 Całość działa, do momentu podpięcia sygnału zegara...
ATMega8 ma 3 timery: 2x 8-bitowy(Timer0 i Timer2) i 1x16-bitowy(Timer1). Niestety, w obu podanych przez Ciebie przypadkach wykorzystany jest Timer1, więc będziesz musiał spróbować zmodyfikować któryś z programów tak, aby działał na 8-bitowym timerze. Tutaj masz co nieco napisane o tych wszystkich magicznych rejestrach i są także przykładowe kody:
16 bitowe timery w tym modelu mają trzy rejestry OCRxA/B/C i są dostępne trzy przerwania w trybie CTC nazywające się ISR(TIMER4_COMPA/B/C_vect){ Ale z noty katalogowej wynika że tryb CTC porównuje liczbę zliczeń z wartością zapisaną w OCRxA i tego nie da się zmienić więc jak wykorzystać pozostałe dwie funkcje wywołujące przerwanie (TIMER4_COMPB_vect...
Witam... Próbuje poskładać timer (kuchenny) odliczający minuty na atmega8... Na wejcia TOSC1 TOSC2 wpięty jest kwarc 32768Hz... A do wyświetlania chciałem użyć ICM7217AIJI (Intersil ale to samo co MAX... chyba)... Podpiełem linie COUNT, RESET, UP/DOWN i DISPLAY CONT bezpośrednio pod uC... Wejscie STORE do masy i SCAN również do masy tyle, że przez kondensator...
Witam, $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output Config Pind.1 = Output Config Timer2 = Timer , Prescale = 128 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 8 Cls Cursor Off Portd.0 = 1 Portd.1 = 0 Set Portd.4 On Timer2 Czas1s Dim Licz8ms As Byte Dim Wartoscpwm As...
PS. Kolego forumowy piotrva wypalasz się nam w pomocy, jak wielu doświadczonych już elektroników/programistów dajesz odpowiedzi które są powierzchowne i nie bardzo sensowne dla początkującego. A wiem że posiadasz wiedzę w temacie :) Co racja to racja ;) Mimo iż za doświadczonego się nie uważam ;) Problem leży w tym, że kod był chyba pisany nie dla...
Witam Napisałem taki program do regulacji prędkości silnika. [syntax=vbnet] $regfile = "m32def.dat" Enable Interrupts $crystal = 16000000 $baud = 9600 Config Portb = Input Set Portb.1 Config Pind.4 = Output Config Porta = Input Dim Freq As Long Dim Pomoc As Byte Dim A As Integer Dim P As Integer P = 0 Config Timer1 = Counter , Edge = Falling Enable...
Czy dla uzyskania przerwania co 0,5s, 1s, lub 2sek musze użyc w przypadku Atmega8 timera1 16bit, czy mogę to też jakoś zrobić na 8-bitowym timerze0? Zakładam częstotliwość zegara 1Mhz-4MHz. (pracuję nad mruganiem diody :) widocznym dla oka przy uzyciu przerwania od timera)
Witam ,napisałem sobie następujący program który ma pełnić funkcję prowizorycznego zegarka. W obsłudze przerwania timer inkrementuję sobie sekundy , ale gdy chce wyświetlić je w main ciągle wyświetla zero na led. Natomiast gdy ostatnią linijkę kodu zamieszczę w obsłudze przerwania działa ok . W związku z tym moje pytanie jak zrobić, żeby przekazywać...
Znalazłem na forum kod dostosowałem do swoich potrzeb: /* Test serwo*/ /* Programik przykladowy */ /* typ uC: ATmega8 1MHz */ /* licznik/timer1 w trybie PWM */ /* Sygnal impulsowy (50Hz) na wyprowadzeniu PB1(OC1A) */ /* Przyciski sterujace szerokoscia impulsu przylaczone miedzy PD2 i mase oraz PD3 i mase */ #define F_CPU 1000000L...
Atmega32. Pytanie jest konkretne Timer2 z PWM na wyjściu PB3 zamienić na dowolne inne. Chodzi mi o rozwiązanie programowe. Na razie zrobiłem to na TOGGLE i działa ale w wartościach skrajnych pwm przyjmuje 50%.
Witam, tworzę menu dla mojego termometru z wykorzystaniem 3 przycisków. Sęk w tym, że nie chcę to za bardzo działać i nie wiem za bardzo co powoduję, że nie mogę kontynuować programu. Sprawa wygląda tak, że mamy teoretycznie jak na razie zdefiniowane 2 ekrany, które wyświetlają temperaturę pokojową oraz zewnętrzną. Wykorzystałem do tego zmienne uint8_t...
Witam. Otóż mam taki problem ;) Dwa czujniki DS18b20 podłączone są do osobnych pinów Atmegi168, PINB0, PINB1. Chciałem to zrobić w ten sposób aby w przerwaniu ustawiana była flaga (co sekundę) która realizowana była w pętli głównej while(1), w ten sposób, aby co sekundę na zmianę wykonywany został convert oraz odczyt. Wydaje mi się, że wszystko zrobiłem...
W związku z informacją w nocie katalogowej ATMEGA328P o treści: "2. Unstable 32kHz Oscillator The 32kHz oscillator does not work assystem clock. The 32kHz oscillator used as asynchronous timer is inaccurate. Problem Fix/ Workaround None." W jaki sposób obiawia się owa niestabilność, i czy faktycznie niema sensu używania timer2 w roli RTC w przypadku...
Witam W programie wykorzystuję dwa timery: Timer0 i Timer2. 0 służy do zliczania zmiennej powstającej w czasie programu i do jego działania (narazie) nie mam zastrzeżeń. Problem jest z Timerem2. Służy on do zapalania diody na określony przez użytkownika czas (wartość czasu ustawiana przyciskami +-). Po wciśnięciu przycisku zapalającego diodę, świeci...
Witam Planuje zrobić sobie miernik częstotliwości różnych kształtów napięcia: sinus, prostokąt, trójkąt. Zamianę sinusa i trójkąta na prostokąt mam już zaplanowaną. Zostało mi tylko zmierzenie częstotliwości sygnału prostokątnego o amplitudzie 5V i przedziale częstotliwości od około 10 kHz do 500 kHz. Chciałbym to zrobić na mikrokontrolerze ATmega8...
Witam, mam problem z poprawną obsługą trybu CTC timera 0 w Atmega16. Taktowanie z wewnętrznego RC 8 MHz. Na wejście INT0 (aktywne zboczem narastającym) podaję prostokątny sygnał kluczujący o f=50 Hz i wypełnieniu 25%. W każdym okresie tego sygnału chcę go próbkować cztery razy - 20 ms okres dzielę na cztery, uzyskując 4 'bity', każdy o szerokości 5...
Witam. Ostatnio zainteresował mnie pomiar natężenia światła, potrzebuję go do wykonania projektu. Pomiar dokonuje czujnikiem TSL235R, który podaje mi odpowiedź w formie częstotliwości. Chciałbym aby ktoś przyjrzał się temu co narazie wklepałem do kompilatora, bo nie jestem pewien, czy wszystko będzie grało? Może zacznę od kodu, wtedy zadam pytania itp....
One właśnie mają wartość początkową. Gdy zmienne są deklarowane jako globalne na początku programu, to z automatu mają wartość równą 0. Sprawdzałem to w AVRstudio. Nawet jeśli coś by było z nimi nie tak, to do Timer3 ładuję wartość 125, więc ma program z czego odliczać. Także to nie to, bo zliczanie działa. Coś jest na 100% z rejestrem OCR, bo gdy ładuję...
Witam Potrzebuję zrobić zegar na ATMEGA8535 i nie mogę uruchomić pracy asynchronicznej. Kwarc zegarkowy podłączony do XTAL1/2. Program wstępny poniżej. Analogiczny program (ze zmianą ASSR.5 = 1) dla ATMEGA88 działa poprawnie. Proszę o pomoc. Pozdrawiam Jacek Program napisany w "BASCOM AVR" [syntax=basic4gl][/syntax] $regfile = "m8535.dat" $crystal =...
Doczytalem na internecie ze ta biblioteka nie działa na Atmega8 bo korzysta ż Timer0 który fizycznie nie istnieje w tej Atmedze. Wiec zostaje mi napisanie wszystkiego od nowa lub kupno innej atmegi :P
Witam Mam układ na Atmega32, który mierzy kilka parametrów ( temperatury, wilgotność, ciśnienie ) i zapisuje na karcie SD. Timer0 wykorzystuje do włączania flag Timer1 w trybie PWM do sterowania jasnością, na podstawie wartości odczytanej z czujnika światła Timer2 jest potrzebny do zapisu na karcie SD Chciałem uruchomić odbiór RC5 ( odbiornik jest na...
Witam, mam jakiś błąd w sofcie, który powoduje, że po odłączeniu i włączeniu zasilania program nie działa prawidłowo. Zresetowanie atmegi bez odłączenia zasilania powoduje że wszystko chodzi już dobrze. Próbowałem różne ustawienia fuse'ów, kwarc 12MHz, CKOPT włączony, ustawiony najdłuższy możliwy czas opóźnienia włączenia. Testowałem na wewnętrznym...
Witam. Jestem w trakcie wykonywania projektu. Sterowanie PWM-owe ogniwem peltiera załączanym mostkiem typu H, z sprzężeniem zwrotnym na czujniku PT100 odczytywanym z ADC. Pierwsze kroki to budowa układu, z odczytem ADC, kalibracjom i skalowaniem. Zrealizowałem, i działa. Gdy zacząłem pisać kod z timerami zakończył się schody. Dlaczego wyrzuca mi błąd...
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...
Hej, Potrzebuję pomocy w opanowaniu pomiaru: napięcia (3x) i prądu (rezystor 0.1om) Ciągle wychodzą mi głupoty i nie wiem gdzie popełniam błąd. Chciałbym mierzyć napięcie 0-5.5V i prąd 0-2.5A Na początek schemat (ze schematu wykroiłem co zbędne) i kod (tu tylko to co potrzeba do pomiarów) aby było wiadomo o czym gadam ;) No i teraz moje obliczenia:...
Problemik z PWM i Przerwaniem Timera. Czy możliwe jest żeby PWM sobie działał, a Timer generował normalne przerwanie? Z tego za zauważyłem to nie bardzo. TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0); //8bit PWM, phase correct TCCR1B = (1<<CS12) | (1<<WGM12); TCNT1H = 0x57; TCNT1L...
Witajcie. Robię malutkie projekty korzystając z Bascoma. Do tej pory wyłącznie na 2313 i jakoś sobie radziłem. W nowym projekcie postanowiłem zastosować Atmega8535 i od razu natrafiłem na problem. Mianowicie po włączeniu przerwań od Timer0 nic nie działa jak powinno. Pomimo tego że procedura obsługi wyświetlacza jest wołana z obsługi przerwania na wyświetlaczu...
Może to co napiszę jest trochę prymitywne ale działa, sprawdziłem :-) No więc można też tak: Start Timer0 Do Loop Until We=1 Timer0=0 Do Loop Until We=0 Wynik=Timer0 We to dowolny pin. Prescaler timera trzeba ustawić tak żeby mierzony impuls zmieścił się w zakresie 0 - Tmax (zależy ile masz bitowy Timer). Nie potrzeba tu żadnych przerwań. Wada jest...
Hej! Jest możliwe ustalenie konkretnej częstotliwości sygnału PWM w AVR. Da się sterować serwem modelarskim bez problemu. W Datasheet od ATmegaXX znajdziesz opis timerów. Jest tam wiele trybów pracy możliwych do wybrania. Ja pamiętam że do uruchomienia serwa użyłem trybu poprawnej fazy i częstotliwości. Potem na podstawie częstotliwości kwarcu i nastaw...
A stan Timera0 się zmienia? Ja też mam problemy z tym. Ale pod pojęciem "tym" kryje się nie Timer, lecz BASCOM. W BASCOMie niektóre rzeczy nie działają z niektórymi procesorami (np. Timery w ATMEBA88 nie działają, w ATMEGA8 już tak. BASCOM ma źle przypisane adresy rejestrów IO).
W dalszej części opisu funkcji pisze że w przypadku kiedy wartość pauzy będzie większa niż graniczna, to funkcja zmniejsza dokładność nie informując o tym użytkownika i umożliwia pauze do ok. 6,5s z tego co pamiętam. Ale tak jak piszesz to raczej nie ma wpływu na niepoprawne działanie... Nie wiem może to symulator ma jakieś błędy ?
To przerwanie nie działa mi jak należy :| Albo ja znowu robię coś źle. Jak zrobię bez przerwań np tak: overflowT3 = 0; // czas = 0 (zero przekręceń licznika) //ETIMSK |= _BV(TOIE3); // zezwolenie na przerwania dla T3 TIMSK |= _BV(TOIE0); // zezwolenie na przerwania dla T0 TCNT0 = 240; // ustawienie wartości (max-16),...
Mam taki problem: chcę w programie wykorzystywać przerwania od przepełnienia dwóch timerów (0 i 1). W timer0 mam obsługę wyśw. LED i opóźnienie dla klawiatury a w timer1, z założenia wywoływanym co 100ms, coś jakby zegar z minutami i sekundami, choć nie jest to najważniejsze bo to program testowy. Problem w tym, że przerwanie od timer1 wcale się nie...
Tutaj nie chodzi o rozdzielczość przetwornika ale o rozdzielczość Timera. Choć i ADC jest kiepski. No ADC nawet gorszy, ale on będzie przetwarzał wartości liniowo. A Timer nie. Timer będzie przekształcał okres przebiegu więc częstotliwość będzie przetwarzana nieliniowo. Oczywiście dane będą przeliczane funkcją 1/x ale chodzi o to że wynik działania...
CONFIG TIMER0 = PWM jest obarczone specjalną właściwością: działa tylko na wybranych mikrokontrolerach. Do sprawdzenia eksperymentalnie. Dlatego lepiej będzie licznik skonfigurować na poziomie bitów z TCCR0(A/B), a wartość ładować bezpośrednio do OCR0(A/B). No i nie zapominaj, że rodzina ATmega to nie jeden układ tylko ponad 30 i nie wszystkie mają...
...., podałem mu dwa przykłady prostych, jednolinijkowych makr, których wynik działania miał podać. W 100% podał błędny. Utwierdzanie kogoś takiego, że makra są super to jak danie 2 latkowi pistoletu. hyhyhyhy "przykłady" dobre sobie, ktoś kto nigdy nie doczytał dokładnie na temat działania preprocesora, zawsze tak samo odpowie na te twoje "przykłady"...
Witam. Mam problem z prawidłowym odczytywaniem danych z eepromu atmega 8. Dzieje się to po kilkunastu startach procesora, zamiast np. 90 wskakuje mi 10 lub inne głupoty... do procka mam podłączony kwarc 8MHz z każdego +5V 100nF, reset podciągnięty do +5V przez 5,1k i kondensator 100nF do masy, fusy mam ustawione na CKOP = 0 , kwarc zewnętrzny czyli...
Timer działa i generuje przerwanie co około 4 sekundy świetnie, ale jest jeden problem zanim wejdzie w pierwsze przerwanie przez około minutę przerwań nie generuje. Podmieniłem atmegę na inną, działa identycznie... Dopisałem parę linijek na początku pracy ze zmianą portuB i opuźnieniem delay_ms i dopisane linijki się zrealizowały, ostatni stan się "zamroził"...
ale w takim razie pozostaje jeszcze sprawa przeładowywania wartości TCNTx w przerwaniu skoro nie korzystasz z CTC. Nie przeładowuje, ponieważ jeżeli w ogóle wejdzie w przerwanie to znaczy, że timer działa. Dioda się zaświeci i będzie w takim stanie przez wieczność. :) Pozdrawiam
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
Wydaje mi się że się da. Oczywiście nie po całkowitym odłączeniu zasilania ale po przejściu na zasilanie bateryjne. Ale musisz dokładnie przestudiować PDF. W trybie power save procesor pobiera kilka uA a Timer2 działa. No i timer2 asynchronicznie z kwarcem zegarkowym- jak napisał tadzik85. Wszystko zależy od pojemności ogniwa. Poza tym zegar wewnętrzny...
Czyli gdzie jest znak = ma być , ? wszędzie? Zegar mam na 8MHz.Już zmieniłem. Bit 103 jest na zero, watchdog na jeden zrobiłem tak $regfile = "m128def.dat" $crystal = 8000000 Config Pina.0 = Output Config Timer 0 = Timer , Prescale = 256 On Timer0 Odmierz_1s Dim Licz_8ms As Byte Enable Interrupts Enable Timer 0 Load Timer0 = 250 Do Loop End Odmierz_1s:...
Dziękuję! O to właśnie mi chodziło. Teraz rozumiem działanie timera.
Witam, mam problem z napisanym przez mnie kodem. Założenie jest takie, że przy puszczonym przycisku Timer1 skonfigurowany jako Fast PWM ma mi powoli rozjaśniać listwę RGB. W momencie przyciśnięcia swicha Timer0 ma odliczyć 5 sekund i PWM ma mi ściemnić listwę. Ma to działać dla 4-ech niezależnych od siebie kanałów. Póki co zacząłem zrobić Fast PWM i...
Tak jak piszesz. Żyroskop podaje sygnał sterujący serwem. Czyli jest to sygnał prostokątny. Gdzie dla neutralnej pozycji serwa co 20 ms występuje impuls o czasie trwania 1,5ms. Dla maksymalnego odchylenia serwa w lewo impuls ten skraca się do 1ms. A dla maksymalnego wychylenia w prawo - wydłuża do 2ms. Po opisie żyroskopu, można wywnioskować iż odchylenie...
No i jeszcze jak zamierzasz wyświetlać czas? To też będzie miało udział w bilansie prądowym. Chcę go wyświetlać na wyświetlaczu LCD 16x2. Ogólna koncepcja zakłada wyświetlanie czasu tylko po podłączeniu zasilania zewnętrznego. Zastanawiam się jednak jeszcze nad opcją aby na baterii wyświetlacz także pokazywał czas jednak bez podświetlania. Po podłączeniu...
W zależności od tego, jak to oprogramujesz, możesz przyjąć, że max. częstotliwość przerwań moe być w okolicach od kilku do 40 kHz. O tym, jak działa timer, przeczytasz wszystko w doc2486.pdf.
Witam, próbuje wykonać prosty odtwarzacz midi w oparciu o mikrokontroler atmega8535. Bazując na przykładach z internetu udało mi się temat jakoś wstępnie ogarnąć. Niestety na atmedze nie uruchamia mi się zegar o który oparte mają być programy. Wszystko jakby "wisi". Dodam że programuję w C w środowisku Code Vision AVR. W celu zlokalizowania problemu...
Witam jestem nowy na forum i w mikrokontrolerach. Po wielu godzinach doszedłem do tego, że aby instrukcja zawarta w ISR została wykonana muszę dorzucić pewną ilość cykli zegarowych w postaci np. pętli "for". Czy ktoś może mi pomóc zrozumieć dlaczego tak się dzieje ? Niezrozumiałe jest także to, dlaczego w pliku "*.lss" po funkcji "main" jest polecenie...
Witam Tak jak w temacie :D Program, który napisałem obsługuje 5 serw. Timer 2 działa w trybie pwm, w OCR2 ustawia odpowiednie wyjście na 1, a przy przepełnieniu ustawia wejścia wszystkich serw na 0. Wartość OCR2 zmieniam przy pomocy uswitchów, ale problem polega na tym, że jak zmienię wartość zmiennej globalnej choose(wgl nie związanej z rejestrem OCR2),...
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);...
W jakim środowisku działasz? Jesteś pewny nazwy tego wektora? Nie ma żadnych ostrzeżeń? Bo mnie się tu coś nie zgadza: [syntax=c]ISR(TIMER0_COMPA_vect){}[/synt... Tak chyba powinno być prawidłowo: [syntax=c]/* Timer/Counter0 Compare Match */ #define TIMER0_COMP_vect_num19 #define TIMER0_COMP_vect _VECTOR(19) #define SIG_OUTPUT_COMPARE0 _VECTOR(19)[/syntax]
Tak jak najbardziej 2^16 to 65536 tyle że największa liczbajaką możesz zapisac to 65535 ponieważ 0 też jest stanem 0x0000; Problem rozwiązany, zmieniłem sposób zatrzymywania timera na TCCR1B = 0x00; nie wiem czy to była przyczyna ale zaczęło działać, dodatkowo wyzerowałem wszystkie możliwe rejestry " na wszelki wypadek" tuż przed konfiguracją timera1....
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
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...
Witam! Mam problem (a właściwie 2) z moją lampą. Zmontowałem lampę led wg. własnego schematu. Komunikuje się ona z tabletem/komputerem za pośrednictwem Bluetooth HC-06. Układ działa poprawnie lecz pojawił się problem z zawieszaniem. Mianowicie po ok 30-60min główny program zawiesza się (żadne dane po USART nie są wymieniane). Niestety nie udało mi się...
Użyj symulatora. To potężne narzędzie. Można nawet zadawać wartości które program odczyta z ADC dla każdego z kanałów z osobna.. To jednak nie wszystko. Ma wbudowany emulator wyświetlacza. To nic że nie chcesz wyświetlać na LCD. Możesz każde swoje obliczenia matematyczne które ma wykonać mikrokontroler wyświetlić w postaci wyniku na tym LCD i już wiesz...
Dzień dobry, chciałbym opisać zegar szachowy mej konstrukcji. Pomysł zbudowania takiego zegara zrodził się w mej głowie, kiedy w okresie zainteresowania mikrokontrolerami chciałem stworzyć coś, co będzie sterowało wyświetlaczem LCD. Nie chcąc kopiować oklepanych pomysłów typu wyświetlenie napisu "hello world" czy zwykły zegarek, postawiłem na konstrukcję,...
Arduino wymyślono po to abyś nie musiał grzebać w rejestrach. Jeśli to potrafisz nie nie używaj arduino. Oczywiście możesz zmieniać rejestry timerów ale przez to niektóre funkcje mogą przestać działać: Napisz co chcesz osiągnąć a nie jakimi metodami to będzie można coś podpowiedzieć.
Witam, Z racji tego ile już zrobiłem na atmegach to aż wstyd pisać taki post, ale ręce już mi opadają.... Mam układ ATmega1284p, na który przenoszę kod obsługi modbus'a RTU który już skutecznie odpaliłem na kilku innych atmegach. Ta jednak jest oporna. Drogą śledztwa doszedłem, że winny jest niedziałający timer0. Zacząłem więc go rozbierać na czynniki...
wielkie dzieki za taki odzew :) niestety caly czas nie rozumiem jednej rzeczy zamieszczam plik zrodlowy w ktorym pomiedzy dyrektywa .ORG 0x00 a instr rjmp Reset znajduje sie instr nop. bez niej po wgraniu programu na kosc nic sie nie dzieje 8O .INCLUDE "m32def.inc" .CSEG .ORG 0x00 nop ; O CO CHODZI?!?!?! rjmp Reset .ORG OVF0addr rjmp Timer Timer: cpi...
#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> char s[] ="0101011010101010101010101010"... static volatile unsigned int a; SIGNAL (SIG_OVERFLOW1){ TCNT1H = 0xd9; TCNT1L = 0x99; PORTB=s[a++]&0x01; if(a==27)a=0; } int main(void) { DDRB=0xff; TCNT1H...
witam. może ktoś wie o co chodzi i poradzi jak zrobić: timer1 na wartości preskalera 1 lub 8 działa normalnie (tzn. w całym swoim zakresie wywołując przerwanie od przepełnienia). gdy zmieniam preskaler na 64 i więcej timer1 przestaje działać. popatrzyłem sobie do ilu dolicza timer. wiec przy preskalerze 256 jest to 3216, a przy preskalerze 1024 - 804....
Wyraziłem się nieprecyzyjnie. :( PORTA= PINB; Mam coś takiego, ale to przepisuje mi cały port B na port A. A jak przepisać 3 pin portu B na drugi pin portu A? Jest jakaś prosta instrukcja, czy trzeba kombinować z iloczynem logicznym i if? PORTB.2= PINB.1; Takie coś mi nie działa. Może nie podłączyłem jakiegoś include? PORTA= (PINB & 0b00001000);...
Witam potrzebuje zrobic program ktory bedzie w odpowiednich odstepach czasu wywolywal przerwanie i w tym przerwaniu bede sobie mogl wykonywac dalsze funkcje problem w tym ze nie dizala mi taki najbardziej podstawowy program Symuluje to w proteusie i nie chce zapalac pinub.1 chodzi mi o taki test powinna sie pojawic 1 na pb.1 przy wywolaniu przerwania...
Obliczenia są +/- poprawne, pod warunkiem, że procesor rzeczywiście jest taktowany 12,8MHz. Domyślnie atmega8 działa na wewnętrznym rezonatorze 8MHz który jest dodatkowo dzielony przez 8. Żeby to zmienić musisz przeprogramować fuse bity. Najlepiej to zacznik od uzyskania częstotliwości 1Hz na jakimś pinie - miganie LED przy czasach rzędu 3,1ms dość...
Przejrzałem już chyba wszystko na sieci (łącznie z notą oczywiście) i wszędzie podają taki sposób ustawiania timera: adres 0 <- 4 (lustawiony bit 3 włącza timer) adres 7 <- 0 (zerowanie na wszelki wypadek licznika - tu układ zlicza) adres 8 <- B01000010 (konfiguracja timera) adres 15 <- 10 (zapis odmierzanych 10ciu sekund) Udało mi się zliczyć...
No i są problemy :) #include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> const uint8_t signal[4][256] = { {128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170, 173, 176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211, 213, 215, 218, 220, 222, 224, 226, 228,...
Program działał niepoprawnie, gdyż jak zwrócono uwagę w polskiej wersji helpa do AVR Działa niepoprawnie to nie to samo co nie działa . Znam ten cytat - przecież sam go napisałem :P Choć to wynika z przyjętej dawno temu konwencji w CONFIG TIMER1 i nie jest ona precyzyjna.
Mam problem aby zmienić taktowanie timera z wew. generatora atmegi na zew. kwarc zegarkowy (timer 1). Po podłączeniu kwarcu do wejść TOSC1 i TOSC2, ustawiłem flagę CS12 i zmieniłem liczbę zliczanych cykli. Po tych zmianach nic się nie dzieje (nie są zliczane sekundy itd.). Co jeszcze trzeba zrobić? Szukałem, ale niby nic więcej nie trzeba było ustawiać...
Właśnie wszystko z tą ATmega 64 robię na podstawie pdf-a, mam z nią pierwszy raz do czynienia, ale o kompatybilności z 103 ustawianej przez producenta nie wiedziałem. Mam jednak taki problem: gdzie w AVR Studio mogę zmienić ten fusebit M103C? Dodano po 9 Znalazłem, nazywa się "CompMode" i po odznaczeniu wszystko działa jak należy. Wielkie dzięki wszystkim...
Przykładowy program który działa na symulatorze lecz po przesłaniu do uP nie działa , zależy mi na tym by Potrd.4 był w stanie wysokim po przepełnieniu timer0(po 8,2 ms) ale niestety:(proszę o pomoc $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 Config Pind.4 = Output Bramka Alias Portd.4 Enable Interrupts Enable Timer0 On Timer0 Tim Do '...
Witam. Mam taki problem i nie bardzo wiem czemu tak sie dzieje. Prosty programik: ________________________________________... .......... Config Portd = &B11111111 Portd = &B00000111 Config Timer0 = Timer , Prescale = 64 On Timer0 Czas Enable Interrupts Enable Timer0 Start Timer0 Do Loop End Czas: Timer0 = 254 Toggle Portd.0 Return ________________________________________...
teraz się kompiluje bezbłędnie, a z ciekawości zapytam, dlaczego nie chciało działać na timerze0?? Hmmm, wiesz? ..... już tak dawno nie robiłem nic w Bascomie, że ciężko mi teraz przeanalizować co może być problemem. Być może trzeba by popatrzeć w notę i porównać czym różnią się rejestry Timera0 i Timera2 ? a może znowu jakiś babol w Bascomie? - po...
Witam :) Po kilku dniach zabawy udało mi się zbudować układ składający się z ATMEGA16 (kwarc zewnętrzny 8 MHZ, rs232) i: - czujnika podającego na pin A1 napięcie 0.2-4.7V - czujinka podającego częstotliwość 4-40kHz na pin PBO. Po przestudiowaniu podstaw BASCOMu i lekturze forum udało mi się napisać oddzielne programy do obsługi tych czujników. Jednak...
Nie, w programie nie ma żadnej innej instrukcji która używałaby timera0 (nie ma nawet żadnego waita), a przerwanie od timer2 skacze tylko do jednego podprogramu. Gdzies wyczytałem że getrc5 blokuje przerwania, ale znowu zewnetrzne przerwanie podłączone do INT1 działa... ;/ I bądź tu człowieku mądry...
Witam, proszę o info czemu mi to nie działa. Działenie powinno być takie: przerwanie zewn INT4 powoduje podanie kolejno 67, 67 i 66 impulsów w kolejnych uruchomieniach. Realizuję to przez załączenie T0 w obsłudze INT4. T0 odlicza 250us i ustawia zmienną i aby wykonał się switch() w pętli głównej. Na wyjściu PE2 chcę uzyskać 67 pulsów o częstotliwości...
Witam Mam już gotowy działający układ na Atmega8-16AU. Problem polega na dołożeniu jeszcze jednej funkcji bez konieczności zmian mechanicznych. Timery T0 i T1 są już wykorzystane. Z pinu PortD.3 mrugam sobie diodą LED z założoną częstotliwością. Może ma ktoś pomysł jak programowo czytać z portu D.3 i przeliczać na częstotliwość. bo wiem, że się różni...
Coś nie bardzo wychodzi mi wywołanie przerwania INT0 po przepełnieniu Timera0. Poniżej kod (usunąłem zbędną funkcję wyświetlającą, która działa poprawnie). Program powinien: - po restarcie wyświetlić korpkę (robi to poprawnie) - po każdym przerwaniu wyświetlać kursor (i to nie działa bo nie ma przerwania). Nie istotne jest że każde przerwanie ponownie...
Atmega8 itp Czy Timer0 działa gdy jest w sleep typu POWER DOWN? Innymi słowy czy aby oszczędzać energię (podczas wyłączania urządzenia) przed włączeniem POWER DOWN powinienem wyłączać timer0 ustawiony na wzbudzanie INT0 (obsługa klawiszy i wyświetlacza) ? Dla wyjaśnienia INT1 poziomem 0 włącza układ wychodząc z POWER DOWN.
1. TCCR1B -> CS12:0 2. TCCR1A -> ustawić bit WGM12 Kwarc będzie 8MHz Wiem czym są przerwania, ale nie wiem jak wyglądają od strony kodu. Nie wiem jak napisać kod do: - wciśnięcie przycisku uruchamia timer (jak wystartować timer?) - TCNT1 uzyskuje wartość równą OCR1A(??) w trybie CTC i uruchamia przerwanie, które dodaje 0.1ms itd itp - puszczając przycisk...
Witam! Napisałem sobie obsługę klawiatury matrycowej 3x4 w bascomie. Nie używam umieszczonej tam funkcji getkb(), ponieważ podłączona jest do różnych portów. Sprawdzanie wciśniętych przycisków chcę przeprowadzić w przerwaniu od wewnętrznego zegara TIMER0. Na ATmega32 wszystko bez problemu działa. Płytka, pod którą to robię działa niestety na ATmega8515....
Wie ktoś pod jakim adresem znajduje się obecnie ten tutorial? Ewentualnie inny(najlepiej spolszczony) dotyczący timerów / liczników w Atmegach? Link do tego tutoriala cytowany jest na wielu forach, niestety... nie działa.
Witam mam taki problem gdy uruchomię ten program to żarówka bardzo miga. Zliczyłem ilość wywoływanych przerwań i wyszło że na 400 detekcji zera jest 100 przerwań od timera w czasie 4 sekund. Więc detekcja zera działa prawidłowo. Używam Atmega168, kwarc 16Mhz. F_CPU ustawiłem w kompilatorze i działa napewno 16Mhz
Witam szanownych kolegów! Piszę mając nadzieję, że ktoś pomoże mi rozwiązać mój problem z którym borykam się już któryś dzień :( Otóż programuję w Bascomie Atmegę 644pa-pu do komunikacji po UART z modemem ZTE2639AT. Mam problem ze sprawdzaniem siły sygnału GSM. Otóż chciałbym przy pomocy przerwania od timera0 wykonywać takie sprawdzanie a jego wynik...
Witam Napisałem program, który dekoduje sygnał DCF77 ( ustawia flagę ), następnie zapisuje ( przy pierwszym uruchomieniu ) wartości zmiennych do PCF8563 i cztery razy na dobę wysyła przez RS485. do tego dwa razy na dobę koryguje czas w PCF8563. I to działa bez problemu. Do celów testowych mam podłączony LCD. Chciałem dołączyć możliwość pomiaru i wysyłania...
Po wielokrotnym sprawdzeniu kodu niestety nie udaje mi się ruszyć fast PWM na atmedze 8, stąd prosił bym o obejrzenie kodu i stwierdzenie gdzie występuje usterka. Do PB3 podłączona jest diodka, na ADC daję z dzielnika napięć 0 do 2,5V. Kod: [syntax=c]#include <avr/io.h> #include <util/delay.h> int main (void) { DDRB|=(1<<PB3); DDRC&=~(1<<PC5);...
Poprawiłem tytuł na bardziej oddający problem i zgodny z regulaminem p. 3.1.15. LordBlick Jestem początkującym w języku C i ogólnie w programowaniu procesorów.Dlatego prosze o wyrozumiałość. Chciałem zrobić timerek zasilany z baterii, który co 8sek ma zmienić stan portu. Przymierzam się do zastosowania trybu Powerdown, ale najpierw muszę poradzić sobie...
Witam, od kilku dni próbuje zrobić regulator trzech diod led PWM na ATMEGA88 (programator AVRASP). Timer1 (wyjścia PB1, PB2) działa bez zarzutu, ale już Timer2 (PB3) nie daje znaku życia. Próbowałem już wszystkich kombinacji z ustawieniami, rejestrami, bitami, trybami, podłączeniem diod, zmianą procesora (na ten sam typ) odłączaniem ukladu od programatora...
Jeśli chodzi o odczyt ID DS18B20, zrobiłem coś takiego: [syntax=basic4gl] Do Locate 1 , 13 Lcd T_solar1 Locate 2 , 13 Lcd T_solar2 If Flaga_wybor = 0 Then If Flaga_ds = 1 Then If Numer_ds = 1 Then Adres = 40 T_solar1 = Ss Gosub Odczyt_eeprom Elseif Numer_ds = 2 Then Adres = 48 T_solar2 = Ss Gosub Odczyt_eeprom End If Flaga_ds = 0 Flaga_wybor = 1 End...
Faktycznie, problemem był średnik, teraz wszystko działa. Dzięki wszystkim, idę poczytać o volatile i tym trybie CTC.