Witam szanownych forumowiczów! Od niedawna staram się nauczyć języka C na AVR. Postanowiłem zbudować poza migającą diodą LED i całą resztą "mini projektów" odbiornik sygnału DMX. W zamierzeniu chcę zrobić DIMMER PACK (sterowanie jasnością 4 urządzeń, stąd 4 kanały i detekcja przejścia przez zero). Jednak przy pisaniu programu napotkałem dość znaczące...
Witam. Schemat całego układu: Przed położeniem uC do snu ustawiam stany wysokie na bazach tranzystorów (zmierzyłem prąd samych tranzystorów, poniżej 0.00uA bo miernik nie chwyta). Ustawiam wszystkie pozostałe piny w stan wysoki oprócz: pinów przycisków S1-S4 które mają być masą dla pinu przerwania INT0 (który ustawiam jako wejście i podciągam wewnętrznie),...
Ten kod jest wersją maksymalnie testową. Zawiera kupę niepotrzebnych rzeczy i jest w nim nieziemski bałagan - przepraszam. Jestem bardzo początkujący i próbuję pisać posługując się najprostszą składnią. Był pisany "na szybko", aby stwierdzić czy ta idea zadziała. I generalnia działa. Config Lcd = 16 * 2 $crystal = 1382400 ' fusebit ustaw xtal full swing...
Witam Mam problem z programem zliczającym przepełnienia timer2. Do lini TOSC1/2 podłączony mam kwarc zegarkowy 32,768kHz, chciałbym wykorzystać przerwanie od przepełnienia tego licznika do odliczania równej sekundy oraz wyświetlić wynik na ekranie LCD. Oto kod programu: long int licz=0; void init_timer(void) //Inicjalizacja timera { TIMSK...
Mam następujący problem, pisze program do zegarka, próbuję odliczać sekundy na timerze 2 w trybie asynchronicznym, podłączyłem kwarc zegarkowy do pinów 7 i 8 plus kondensatory 22pF. Naczytałem się datascheet'a poprzeglądałem przykładowe źródła i wyskrobałem kawałek kodu. Do portu PB0 jest podłączona dioda która ma sygnalizować odmierzoną sekundę. #define...
Witam Mam płytkę sterującą dwoma kanałami PWM - przez ULN oraz MOSFETY. Płytka ma dwa wejścia oraz wejście czujnika PIR - INT1. Ma przede wszystkim sterować włączaniem taśmy LED 12V z czujnika PIR ( oprócz tego z drugiego wejścia ). LED włączona przez PIR ma docelowo świecić określoną ilość czasu ( zależną od natężenia światła ) i się wyłączyć. Żeby...
chcialem zrobic sterowanie dioda rgb za pomoca 3 wyjsc pwm i tu jest problem bo chyba w bascomie nie mozna ustawic timer2 jako pwm za pomoca: config timer2 = pwm, pwm=8, compare a pwm= clear up" dlatego sam starem sie ustawic reczenie rejestry wedlug: , ale cos mi nie idzie i prosze o pomoc (moga byc jakies wskazowki) $regfile = "m8def.dat"...
Witajcie fachowcy! potrzebuje sprawdzonej procedury, która na wyjściu oc2 (pb3) pozwoli mi uzyskać przebieg pwm. help nic nie mówi o atmega 8, udało mi sie to metodą prób i błedów na atmega32 a na 8-mce nie działa... mile widziane asm lub bascom. z góry dziękuje za każdy rodzaj skutecznej pomocy.
Witam mam taki oto problem uzywam w programie dwoch tiemrow 8 bitowych, timer0 i timer2, wszytko bylo by ok gdyby nie fakt ze po zalaczeniu timera2, czesc prgramu obslugiwana przez timer0 przestaje sie wykonywac, (program nie wchodzi do oblugi przerwania zwiazanym z tiemrem0). i teraz pytanie jak pozbyc sie tego problemu? SIGNAL (SIG_OVERFLOW0)...
Witam, chciałbym użyć timera 2 jednakże jak tu uzyć dwóch kwarców (do taktowania uC i do taktowania timera), skoro w ATMega8 są to te same piny?
Witam Kod jak poniżej służy do zliczania czasu trwania jednego impulsu (ta funkcja działa prawidłowo) oraz do zliczania czasu (w celu zliczania ilości impulsów na jednostkę czasu). volatile unsigned char pomiar = 0; volatile uint32_t cw_impuls,impuls = 0; unsigned char sreg; float tc1; char czas[8]; void Inicjalizacja(void) { LCD_init();...
Witam, czy może ktoś spojrzeć na poniższy kod i napisać mi co w nim źle napisałem? Moim zamiarem było ustawienie przerwania na Timer2 z zewnętrznym kwarcem zegarkowym, aby co sekundę zmieniał wartość jakiejś zmiennej i wyświetlał ją na LCD. Niestety nie wiem dlaczego ale program nie odlicza mi sekundy ale mniej więcej minutę ;] Poniżej uproszczony kod...
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...
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 wszystkich. Czy ktoś może mi odpowiedzieć dlaczego w atmedze8 timer2 jako generator PWM przy wypełnieniu 1% generuje amplitudę od zera do +5v, a przy wypełnieniu 99% od 0 do -5V. Analogicznie wypełnienie 50% amplituda +- 2.5v. Czy to jest normalne zachowanie tego timera.
Witam wszystkich, rzadko pisze bo zwykle jakoś sobie radzę, ale po trzech dniach walki jestem zdesperowany i zaczynam szukać pomocy u Was. Zrobiłem emulację odbierania RS232 na nóżce INT0. Zbocze opadające oznacza że mamy bit startu. Tak startuje odbieranie: [syntax=c] ISR(INT0_vect){ // włączenie odbierania znaku na emulowanym UART 600bps GICR&=~(1<<INT0);...
Witam, Mam Timer1 zajęty do bardziej zaawansowanych pomiarów. Muszę niezależnie wygenerować częstotliwość około 5Hz na pinie. 1. Jak wygenerować tak małą częstotliwość Tim0 lub Tim2 bez udziału przerwań? 2. Jak w CTC ustawić, żeby po wyłączeniu Timera wartość na pinie pozostała niska (L)? Pozdrawiam.
Czy da się generować przerwania od timer2 przy każdym przepełnieniu w trybie CTC? Próbuję generować częstotliwość w zależności od ustawienia potencjometru, ale timer generuje przerwanie tylko raz, cały program poniżej: OCR2 zostaje wpisana tylko pierwsza odczytana wartość zaraz po starcie programu, dalej już nie generuje przerwań. Po wrzuceniu " OCR2...
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:
Jakiej wersji kompilatora używasz? Get RC5 domyślnie używa timera0 a Atmega8 to nie to samo co Atmega88 i timery są inne, inne rejestry sterujace. Zobacz do noty np. Timer/Counter Control Register TCCR0 w ATMega8 steruje preskalerem a w ATMega88 TCCR0B Timer/Counter Control Register B, dwa różne rejestry inne adresy, różne też są flagi zdarzeń timerów...
Witam, mam pytanie czy atmega8 w wersji niskonapięciowej bierze mniej prądu niz wersja 5V? W manualu prądy sa podane tylko dla wersji niskoprądowej (która jak wiadomo jest droższa i niedostępna w wersji temperaturowej -40...+85 - taka muszę zastosować) active 3,6mA; idle 1mA. atmega8-8PI | ||| | ||temp I=-40...+85, C=0...+70 | |wersja obudowy P=dip...
Witam, zrobiłem wysyłanie danych z MK do komputera kod jest wzięty od książki z strony atnela Co robię nie tak, chyba że jest ok a ja to źle interpretuję, wydaje mi się, że napis powinien się pojawić linijka po linijce. Pozdrawiam
Witam, Robiłem to kilkanaście razy na innych procesorach, a nie mogę zrobić na ATmega88PA. link do DSa: opis rejestrów TIMER0 na stronie 105 Timer1 i Timer2 mam ustawione w trybie PWM i działają bez zarzutu. Walczę już 2 dzień i nie rozumiem pewnych mechanizmów. - włączenie Timera0 powoduje, że pętla główna nie działa... Do portu PC0 (TQFP32) mam podłączoną...
Witam Mam problem z Atmega8 (taktowanie kwarc 16MHz) i timer2, na początek program: [syntax=c] void timer2Init(){ OCR2 = 0x01; // TCCR2 |= (1 << WGM21); // tryb pracy CTC TCCR2 |= (1 << CS21); // preskaler = 8 TIMSK |= (1 << OCIE2); // Odblokowanie przerwania CompareMatch } #define startTimer() uSeconds=0;TCCR2 |= (1<<CS21);...
Masz część programu którym steruję diody RGB u siebie w pokoju. Jest to mój programik testowy, dodatkowo wyjściami PWM można sterować pilotem Rc5. Korzystałem z niego przed napisaniem właściwego softu. W Bascomie jest błąd jeśli chodzi o trzeci kanał (wyjście OC2). Nie "sterujesz" nim przez pwm.., tylko ocr2=... Myśle że dojdziesz na podstawie przykładu....
Witam. Mam bardzo podobny problem dlatego nie chce zaczynać nowego wątku. Podobnie jak kolega Mateusz140m łącze PWM z ADC, jednak do generowania PWM wykorzystuje timer2. Dokumentacje myślę zrozumiałem dosyć dobrze. ADC działa, bo był testowany. Sam PWM także, jednak nie mogę połączyć jednego i drugiego. Vref jest podłączony do AVCC, natomiast do wejscia...
Każdy kiedyś patrzył na przykłady a nie od razu główkował. Proszę. Baw się dobrze. Przetestowany ;) [syntax=vbnet]'#########################... '# Program włącza jeden z trzech przekaźników w zależności # '# od tego ile razy lub jak długo naciesnieto przycisk # '# Jeden krótki Przekaznik1 na czas 1s # '# Dwa krótkie Przekaznik2...
Sorki, nie zauważyłem :( Ale wszystko jest tak jak pisałem wyżej, z tym że mega8535 ma cztery wyjścia OC: OC0 dla Timer0, OC1a i OC1b dla Timer1 oraz OC2 dla Timer2. Timer2 może pracować w trybie asynchronicznym (musisz ustawić bit AS2 w rejestrze ASSR) po podłączeniu kwarcu 32kHz do wyjść TOSC1 i TOSC2 (nie należy dodawać kondensatorów jak przy zwykłym...
Jako, że postanowiłem sobie przetestować "jak to się pisze w C, to co napisałem kiedyś w asm", załączam non-block kod z wykorzystaniem Timera0 (testowane na ATmega8515). Program działa na zasadzie "jeśli klikasz częściej niż 100 ms, to nic więcej nie wyklikasz". Żeby nie było, ze jest to taki gotowy gotowiec, dla ATmega8 należy zmienić kod na obsługę...
A spróbuj to: [syntax=c] /* Program do przetwarzania sygnału z 6 sygnałów 1-2ms (do sterowania serw modelarskich) na wypełnienie PWM. kwarc 11059200Hz procesor ATMega8 Wypełnienie PWM- 0 w okolicach sygnału 1.5ms Zwiększa się od 0 do max w zakresie 1.5-2ms Zwiększa się w zakresie 1.5-2ms od 0 do max Co 20us sprawdzamy stan pinów PORTB na który są podawane...
Poprawiłem kod żeby był czytelniejszy i nieco go skomentowałem: [syntax=c] /* układ ATmega88pa-pu 8MHz */ #define F_CPU 8000000 #define BAUD 9600 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <stdint.h> #include <stddef.h> #include <avr/interrupt.h> #include <util/setbaud.h> volatile...
Od kilku dni męczę się z ustawieniem timera (działającego równolegle z programem) na moim uC atmega8535. Jestem początkującym elektronikiem. Przeszukałem już naprawdę wiele tematów, pisałem do wujka google na wszystkie możliwe sposoby jakie tylko wymyśliłem. Nadal problemowo. Otóż po przeszperaniu internetu dokopałem się do następującego kodu: [syntax=c]...
rpal ale właśnie mam w kodzie odblokowane przerwania sei(); Zmieniłem zadania Timerow. Teraz Timer1 służy do PWM, a TImer2 do zliczania czasu w dekodowaniu RC5. Proszę jeszcze raz o sprawdzenie kodu //ATmega8L kwarc 4MHZ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile uint16_t g_licznik = 0; ISR (TIMER2_COMP_vect)...
Pomóżcie mi bo mnie krew zalewa. Atmega mierzy impulsy na wejściu zewnętrznego przerwania INT1. Timer2 służy jako podstawa czasu. Od około 240 kHz na INT1 miernik mierzy nie poprawnie, to znaczy nie występuję przerwania od Timera2 w trybie CTC i program wisi w pętli while, ale gdy przełączę zakres na generatorze na mniejszy to wyświetla mi się wartość...
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 =...
Starannie wykonane projekty zawsze doceniać należy :) Drobne uwagi: - rysuj schematy bez używania bus w ten sposób: - trochę wstyd eliminować drgania styków kondensatorami, skoro wolnej mocy obliczeniowej jest na oko z 95% :) Za odliczanie czasu odpowiada Atmega8, nie ma zewnętrznego podtrzymania ani układu RTC. Założeniem tego projektu była prostota,...
Witam szanownych forumowiczów. Wykonywany przeze mnie projekt to prosty sterownik lampek LED RGBW. Lampki sterowane są poprzez 4 kanały PWM, których współczynnik wypełnienia regulowany jest potencjometrami podłączonymi do 4 wejść ADC mikrokontrolera. Wyjścia PWM ustawione są w trybie fast PWM o częstotliwości 490Hz. No i poprawnie wykonana operacja...
e-L-Ka ma tylko możliwość zasilania niższym napięciem nawet 1,8V żadna ATmega nie ma RTC, zerknij do wątku też z dzisiejszą datą , gdzie to wyjaśniam... Nie ma znaczenia czy L, czy nie, obie wersje mają Timer2. Jako źródło najbardziej wiarygodne polecam stronę producenta i dokumentacje tam zawarta, link już podałem wyżej. Light-I
Kod w tagach umieszczaj, bo to nie jest czytelne. Ten kod nie ma obsługi termometru oraz daty. Nie sprawdzałem na poprawność kodu. Jeżeli ma to być na Atmega8 lepiej wykorzystać Timer2 na kwarc 32,768kHz jako wzorzec czasu. Data powinna mieć dzień tygodnia w formie całonazwowej oraz wykrywanie 30/31 dnia miesiąca oraz rok przestępny
Dzięki wielkie. Bardzo pomogłeś. Na takie rozwiązanie bym nie wpadł. Mógłbyś powiedzieć jeszcze jak policzyłeś to, że jeden bajt w przypadku 19200 zajmuje 500us? Oto obecny kod programu: [syntax=c] //pliki nagłówkowe #include <avr/io.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h> #include <avr/interrupt.h>...
Witam! Siedzę już drugi dzień nad multipleksem w budziku i tracę już cierpliwość. Podejrzewam, że problem leży w zmiennych. Jednak trudno mi go zlokalizować, bo za długo siedzę nad tym samym. Przydałoby się świeże spojrzenie na ten kod. Pokrótce opiszę problem. Po wstawieniu wartości odpowiadającej za wyświetlenie "--:--" do tablicy "toDisplay" nie...
Witam Od dawna przymierzałem się do zbudowania zegara nixie na sześciu lampach. W internecie jest sporo takich projektów, jednak większość z nich nie odpowiadała moim założeniom. Postanowiłem więc zaprojektować i wykonać zegar od podstaw wykorzystując podzespoły, które miałem pod ręką. Założenia Projektując układ kierowałem się poniższymi założeniami:...
Aby korzystac z rtc musisz podlaczyc kwarc 32,768 kHz do pinow PORTC 6 i 7. Ustawiasz timer2 na prace asynchroniczna i dobierajac prescaler na podzial przez 128 otrzymujesz przerwania co 1 s bez koniecznosci ladowania timera przy kazdym przerwaniu. Ponizej przedstawiam fragment kodu dla at90s8535 . Atmega8535 tez powinno dzialac. Sprawdz tylko czy nie...
Dodałbym, że Bascom odpowiedzialny jest jeszcze za koklusz i gradobicie. 1. M8 musi być ustawiony na pracę z kwarcu zegarkowego - FUSY. Powoduje to napędzanie M8 z generatora wewnętrznego RC 2. Trzeba skonfigurować Timer2, który jest zdolny do asynchronicznego taktowania z kwarcu 32768Hz - polecam helpa Config Timer2. 3. W przerwaniu od timera2 należy...
Witam Piszę program, który ma mierzyć długość impulsu podawanego z zew. źródła jakim jest odbiornik RC, częstotliwość impulsów to 50Hz, a ich długość mieści sie w przedziale 1ms-2ms. To mój pierwszy program na AVR w którym obsługuje przerwania zew. i mam pewien problem, program już napisałem, sprawdziłem go na symulatorze i wydaje się działać poprawnie,...
Wzbogaciłem mój program o to żeby odliczał jedną minute(praca jest wyświetlana na dwóch wyśw 7 segm.), oto kod: #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> /* cyfry na wyświetlaczu 0 0b10000001 129 1 0b11010111 215 2 0b01001001 73 3 0b01000011 67 4 0b00010111 23 5 0b00100011 35 6 0b00100001 33 7 0b11000111...
Witam ponownie. Słowa moje kieruje w szczególności do moderatora _Robak_, ale oczywiście pomoć innych też mile widziana. Posłuchałem Twojej rady i wziąłem się za budowe rostego sterownika do serw w oparciu o ATMega8. Od razu się przyznam, że analiza Twojego programu była dla mnie zbyt trudno, więc postanowiłem, że sam coś wyskrobie. #include "avr/io.h"...
Ja to sobie wykonałem w taki sposób ale zredukuj tutaj timer 0 bo jest on zbędny, możesz wykonać go w pętli timera2. [syntax=c] #define P1 (!(PINB & 0x02)) volatile unsigned char push =0; volatile unsigned char time_push =0; void TimerInit(void) { TCCR2 |= (1<<WGM21); //tryb pracy CTC TCCR2 |= (1<<CS22) | (1<<CS21) | (1<<CS20);//prescaler...
więc tak, schemat i fotka: wszystko działa, tylko tak jak pisałem z jakiegoś powodu procesor co jakiś czas wraca do początku maina. wszystkie zmienne zostają zresetowane, wpomniany MCUCSR nie rejestruje resetu. i dodam jeszcze kod [syntax=c] #define F_CPU 12000000L #include <avr/io.h> #include <stdio.h> #include <stdlib.h> #include...
pliki d_led.c , d_led.h , projekt_sygnalizator.c [syntax=c] ///////////////////////////////////// ////////// Made for atmega8, 16Mhz oscillator #include <avr/io.h> #include <avr/interrupt.h> #include "d_led.h" #include <util/delay.h> //Segments data volatile uint8_t seg1; volatile uint8_t seg2; //clock counter volatile uint8_t clk_counter=0;...
Witam ponownie Zrobilem tak : ustawiam jedna z koncowek portu procesora, co jest sygnalem dla pozostalej czesci ukladu do rozpoczecia generowania impulsu. W tym samym czasie uruchamia sie Timer2 zaczyna sie zliczanie przepelnien. Po zakonczeniu impulsu jego opadajace zbocze jest zrodlem przerwania INT1, co powoduje zatrzymanie Timer2. Teraz mnoze ilosc...
Atmega8 ma 3 kanały pwm, z czego 2 z Timer1 a 1 z timer2. Jest to trochę niewygodne. Czasami lepiej wziąć attiny2313 który ma 4 pwm, też rozdzielone na 2 timery. [url=www.elektroda.pl/rtvforum/topic2660... masz moją prymitywną konstrukcję na attiny13 z pwm programowym na 4 kanały, bo użyłem diody RGB i dodatkowo W.
Ach, Ty masz tutaj INT0 wyzwalane z zewnątrz w zerze sinusa sieci (100x /s), więc można z tego skorzystać. Zmień to: Mam teraz możliwość sprawdzenia poprawności działania programu, i niestety ale na oscyloskopie totalna cisza, żaden sygnał nie jest podawany na wyjście... W przypadku sterowania grupowego wygląda to tak: Gdy w przypadku sterowania fazowego...
Stworzyłem następny program. Położenie serva jest zmieniane za pomocą dwóch przycisków pilota RC5. Oto on: 'Jedno servo sterowane pilotem, 60 kroków $regfile = "m8def.dat" $crystal = 10000000 Config Pinb.0 = Output Config Int0 = Low Level Config Rc5 = Pind.2 Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 On Int0 Pobr_rc5 Dim Address As Byte , Command...
Jest jeszce asynchroniczna praca licznika TIMER2. Kwarc zegarkowy do nóżek OS1 i OS2 no i fuse bity na wewnętrzny generator.
Nie możesz tylko używać Timera2 do innych celów, bo właśnie jest on używany przez RC5 Funkcja GETRC5 domyślnie wykorzystuje Timer0 a nie Timer2. Oczywiście można to zmienić w konfiguracji, jednak autor tego nie czyni. Zatem pozostają mi dwie opcje, albo przestać używać timera0 do odliczania 1s odcinków czasu i zaprzęgnąć do tego timer2 (co może nie...
No to zacznijmy jeszcze raz:) Zacznę od konfiguracji Timera. Założyłem sobie że dokładność pomiaru ma być 100ms. uK Atmega8A-PU mam taktowany 1000000Hz [syntax=c] /*ustawienia TIMER2*/ TCCR2 |= (1<<WGM21); /*tryb CTC*/ TCCR2 |= (1<<CS20) | (1<<CS21) | (1<<CS22); /*preskaler = 1024*/ OCR2 = 97; TIMSK |= (1<<OCIE2); [/syntax]...
Witam, męczę się z pozoru łatwym problemem. Na zestawie uruchomieniowym działa termometr z lcd 2x16, wszystko działa lecz zapragnąłem stworzyć warunek, który włączyłby buzzer po przekroczeniu danej temperatury. Poniżej kod: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h>...
Ok, po krótkiej przerwie płytkę mam wykonaną pod powyższy schemat, jednak znajomy który zdeklarował się napisać kod nie może mu podołać. Wygląda to jakoś tak: [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> // definicje zmiennych do sterowania 6 kanałami programowych PWM // zmienne typu uint8_t, rozdzielczoć...
Witam serdecznie, jestem początkującym jeśli chodzi o programowanie w c na avr. Celem mojego zadania jest zaprojektowanie termostatu z użyciem czujnika temperatury dwóch diod sygnalizujacych, przycisku do programowania termostatu oraz przekaźnika jako elementu wykonawczego. Poniższy kod napisałem na atmega8 jednak można byłoby zastosować uboższego avr...
Witam :) Próbuje odpalić tryb CTC na Atmega8-przerwanie co 5ms i nie mogę sobie poradzić pomimo czytania PDF.Mało rzeczy robiłem na przerwaniach a jeśli już to na Atmega32 gdzie korzystałem z tego: Przerwanie co 5ms więc mam 1 sekundę. ATMEGA32: [syntax=c] TCCR0 |= (1<<WGM01); tryb CTC TCCR0 |= (1<<CS02)|(1<<CS00); preskaler = 1024...
Cześć, Wykonałem sterownik diod rgb. Początkowy zamysł był taki, żeby sterować pojedynczymi diodami rgb, i wszystko działało (funkcje: zwiększanie/zmniejszanie koloru czerwonego, niebieskiego i zielonego; wyzeruj kolory). Z racji tego, że ma to być (dosyć duże) nastrojowe oświetlenie do pokoju zrezygnowałem z 40 pojedynczych diod na rzecz 5 metrowego...
Cześć, tym razem chciałem napisać program, który wyświetli wynik konwersji ADC na czterech wyświetlaczach 7-seg: Pełny schemat:
Poniższy kod reguluje jasność podświetlenia LCD, więc dla potrzeb silnika musisz go przyspieszyć. timer0 w trybie PWM (do sterowania prędkością silnika): [syntax=c] //Konfiguracja TIMER0 w trybie PWM TCCR0 |= (1<<WGM01) | (1<<WGM00);// TRYB FAST PWM TCCR0 |= (1<<COM01) ; // Clear OC0 on compare match, set OC0 at BOTTOM,(non-inverting...
Akurat robiłem coś podobnego, ale bez pilota RC5 bo znalazłem na alledrogo podobne rozwiązanie za 20pln... masz w programie opóźnienie 3ms - sprawdź czy nie będzie to kolidować z odczytem pilota. poza tym używasz 2 Timerów, więc dlaczego wprowadzasz procesor w pętlę bezczynności? Ustaw przerwanie jednego Timera na 10ms i w nim zmieniaj wypełnienie PWM....
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...
Because in Bascom it`s only 15min here you have. After programming whole Eeprom is erased to &HFF (255) so programm store initial value (you can change this of course). Buttons on PIND.6 and PIND.7 are scanned every 5ms. If pressed shortly value will be incrased/decrased by one. If pressed long then autorepeat will incrase/decrase value every 275ms....
timer2 jest w stanie obudzić procka ale mam wątpliwości czy może zrobić to timer1. Próbowałem i timer1 nie chce budzić. Dodano po 12 Hmm chyba najlepszym rozwiązaniem będzie tryb power-save i budzenie przez timer2. Usypianie będzie odbywać się w pętli tak aby uzyskać czas 1s. Jak znacie lepsze rozwiązanie piszcie proszę. Dzięki za pomoc. Użycie watchdoga...
Witam... W przypadku ATmega8 kwarc 32,768kHz (zegarkowy) podpina się pod TOSC1 i TOSC2 te same piny co do "normalnego" kwarcu... Tak więc można wtedy albo popędzać uC z wewnętrznego generatora i ustawić timer2 do pracy w trybie RTC z kwarcem zegarkowym... (dokumentacja str 117)... Można też taktować uC kwarcem 32,768kHz... z tego co pamiętam... Z tego...
Witam Zachęcony sukcesami z płytką EVB 4.3 zaprojektowałem i zamówiłem swoją - na początek z AtMega8 w DIP. Do tego pamięć 24C32 oraz układ do RS485. Wszystkie układy mają kondensatory 100 nF ( stabilizator 7805 również + jeden elektrolit ). Całość ze złączem pod wyświetlacz 2*24 ( właściwe 4*12 ) Reset przez rezystor 10 K do +5V AtMega8L ( na 8 MHz...
Witam, próbuje zrobić sterownik silnika BLDC z wykorzystaniem uC Atmega8. Schemat i program zaczerpnąłem ze strony mikrokontrolery.blogspot. Układ został złożony zgodnie ze schematem: Jedyną różnice stanowią dolne tranzystory, ja użyłem IRFZ44N oraz zamiast dławika 10uH użyłem rezystor 10ohm. Ponad to zmodyfikowałem trochę program wydłużając czas rozruchu...
Skąd wiesz, że przerwanie się nie wykonuje? Wnioskuję po tym, że wrzucając do przerwania instrukcję RTC_Read_Time() wyświetla się godzina 00:00, a jeżeli wrzucę ustawianie flagi to nic się nie wyświetla. Dalej - włącz podciąganie na linii przerwania. Znalazłem jedno miejsce w kodzie gdzie ten rezystor mógł być przypadkowo odłączany i poprawiłem, ale...
Witam Generuje sobie melodyjkę przez timer2 działający w trybie fast PWM w mikrokontrolerze atmega8. Ogólnie dźwięk jest bardzo cichy wiec kupiłem wzmacniacz audio lm386 i już było o wiele lepiej ale dalej nie wystarczająco. Dlatego kupiłem drugi taki sam wzmacniacz ale teraz już nic nie słychać. Schemat: LS1 gra, a LS2 już nie. Mógłby mi ktoś wytłumaczyć...
Mógłby ktoś z was zerknąc w mój kod i sprawdzić co jest nie tak?? /***************************************... Chip type : ATmega8L Program type : Application Clock frequency : 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 ****************************************... #include...
Pokazuje pliki: KPD.h #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> unsigned char KPD_KeyPressed; unsigned char KPD_LastKey; unsigned char KPD_ScanRow; unsigned char KPD_KeyDown; #define CODE_MAX_LENGTH 8 #define CODE_ACCESS_LENGTH 4 #define CODE_ADMIN_LENGTH 8 #define BUFSIZE 20 void KPD_Init(void);...
Kolejny problem z moim zegarkiem ;) Układ pracuje na wewnętrznym oscylatorze 1MHz, a pod piny TOSC1 i TOSC2 podpięty kwarc zegarkowy 32.768kHz. Do jednego z nóżek kwarca podpięty kondensator 100nF. (jak go nie dam ma problemy ze startem, muszę go poruszać) Przerwanie wpisujące do zmiennej tick jedynkę jest uruchamiane przez Timer2 pracujący w trybie...
Robię mały projekcik, w którym potrzebuję 4 kanałów PWM. Chciałem to rozwiązać programowo, niestety nie udaje mi się ożywić mojego timera, a konkretniej przerwanie (zarówno overflow jak i compare) nigdy się nie wykonują. Umieściłem w funkcji obsługującej to instrukcję gaszenia diody, lecz program nigdy tam nie doszedł. Nie mam pojęcia co robię źle,...
atom1477 no bardzo prawdopodobne bo podłączyłem inną atmege zasilając tylko VCC i na AVCC było właśnie około 4,4V. W układzie z rolet, przy takim samym zasilaniu na AVCC jest 0V. Oj kolego, podstawy: Częstotliwość duża to nie jest, choć w tym projekcie spokojnie wystarczyło by 1Mhz także zmienię, pewnie zmniejszy to pobór prądu. Jak nie jest duża,...
Dodaję do swojego kodu funkcję sleep w trybie ADC Noise Reduction. Gdy uśpię uC w funkcji main, pobór prądu jest taki sam jak bez włączenia sleepa. Dopiero gdy uśpię go w pętli głównej, to wtedy prąd spada. Dlaczego? Nie wystarczy jednorazowo uśpić uC i niech sobie robi co chce w przerwaniach? Po co go usypiać przy każdym powtórzeniu kodu? No i dlaczego...
Witam. 1 - Stosuj aliasy. Np: drzwi alias portd.0 Później w kodzie po prostu drzwi = 1 lub drzwi = 0. bardzo poprawia czytelność kodu. 2 - Odczyt z przetwornika ADC powinien być do zmiennej WORD (przetwornik jest 10 bit). 3 - w pętli głównej masz instrukcje Wait. Powstaje problem ze sprawdzaniem stanu wejść, pętla może się wykonywać bardzo długo, w...
Ja nie widzę problemu. :D Timer1: CONFIG TIMER1 = COUNTER | TIMER | PWM , EDGE=RISING | FALLING , PRESCALE= 1|8|64|256|1024 , NOISE CANCEL=0 |1, CAPTURE EDGE = RISING | FALLING , CLEAR TIMER = 1|0, COMPARE A = CLEAR | SET | TOGGLE I DISCONNECT , COMPARE B = CLEAR | SET | TOGGLE I DISCONNECT , PWM = 8 | 9 10 , COMPARE A PWM = CLEAR UP| CLEAR DOWN | DISCONNECT...
witam ze specyfikacji wyczytalem ze ten procesor ma dwa wyjscia pwm, jedno pod wyjsciami pd4 (oc1b) i pd5 (oc1a) (timer1), a drugie pod wyjsciem pd7 (oc2) (timer2) .... pierwsze wyjscie dziala bez problemu natomiat drugiego nie moge skonfigurowac (pod bascom-em), wyskakuje mi error86 przy lini w ktorej konfiguruje timer2 ... nawet kiedy wpisuje: config...
Witam W projekcie robota staram sie uzyskac wykrywanie przeszkod za pomoca zestawu dioda nadawcza IR + TSOP1736. TSOPki maja strome charakterystyki czestotliwosciowe wiec staram sie jak najdokladniej uzyskac przebieg znamionowy 36kHz. Robie to przy uzyciu nastepujacego kodu: $crystal = 8000000 (...) Config Timer2 = Timer , Prescale = 8 , Compare...
Witam Mam problem z programem odmierzającym czas. Mikrokontroler współpracuje z czujnikami ultradźwiękowymi. Ogólne założenie programu jest takie że generuje paczkę 8 impulsów prostokątnych o częstotliwości 40KHz następnie 4ms na wyciszenie układu. Generowanie paczki wykonywane jest za pomocą Timera2 w trybie CTC. Następnie za pomocą Timera1 powinien...
Cześć! Przez nieuwagę upaliłem piny, na które wyprowadzone sa domyślnie timery, a potrzebuję PWMu. Wpadłem więc na pomysł, by użyć przerwań TIMERx_COMP. Niby przerwania są obsługiwane (jak dam głupotę w stylu {zapal_pin; czekaj; zgaś_pin; czekaj;}, to widać działanie), ale nie udało mi sie uzyskać PWMu, które mogłoby sterować ledem. Może miałby ktoś...
Dzięki za zainteresowanie panowie ;) Wrzucam poprawiony kod, serwomechanizmy nie reagują. Póki co zdecydowałem się w ciemno wykorzystać wartość zaproponowaną przez BlueDraco. Jeśli chodzi o prędkość serwomechanizmów, to nie jest to problem mniejsza prędkość, to w moim projekcie większa dokładność, po drugie prędkość zawsze będzie można zwiększyć. Ale...
Czesc Program ma za zadanie mierzyc szerokosc impulsu za pomoca przerwania INT1. W skrocie dziala to tak ze podczas zbocza narastajacego wykonuje sie przerwanie ktore wlacza timer. Timer ma swoje wlasne przerwanie od przepelnienia i zlicza pelne cykle przepelnienien. Gdy pojawi sie zbocze opadajace to wylacza timer i zapisuje jego wartosc ktora nastepnie...
Sprawa wygląda tak, że siedze nad tym długo, a w Internecie nie znalazłem nic, co by mi pomogło. Szukałem dość dużo i już zaczynam się frustrować. Nie chodzi o delay trwający 750ms, bo ten wyeliminowałem. Rzecz jest m.in. w tych, które trwają od kilku do aż 500µs (reset pulse). Śmiem przypuszczać, że to właśnie za przyczyną tych krótkich opóźnień...
Dalej jest źle. Timer2 liczy za szybko w stosunku do prędkości wykonywania się programu głównego. Bo on zgłasza przerwanie co 25ms a program główny wykonuje się ponad 2000ms. Musisz zatrzymywać Timer2 do czasu obsłużenia wyświetlacza. Mniej więcej tak (algorytm): While (1) { LCD "Start" _delay_ms(1000); 'Nie wiem po co,...
Witam Chciałbym zrealizować programowy tryb CTC dla licznika T0. Program testowy zwiększa wartość rejestru OCR2 o jeden co sekundę (licznik T1). Taktowanie zegara 16 MHz. Licznik T0 i T2 mają ustawiony preskaler /1024. [syntax=c] volatile uint16_t licznik = 0; volatile uint16_t licznik1 = 0; volatile uint16_t licznik2 = 0; volatile uint16_t licznik3...
Witam, swojego czasu zrobiłem sobie wyświetlacz widmowy, jednak po zabawach w bascomie stwierdziłem że ma to większy potencjał i postanowiłem z niego zrobić zegarek :) Tu zaczęły się schody w ramach testu stworzyłem tablice dla znaków od 0 do 9 plus ":" jako oddzielenie godzin od minut. Jednak program nie wyświetla poprawnie cyfr od 0 do 4 reszta wyświetla...
Witam , postanowiłem zrobic swój pierwszy zegarek na zew,kwarcu zegarkowym . kwarc podłaczyłem do tosc1 i tosc2 , wyswietlacz led do portów D i zasilanie wyswietlacza do portów C a do portów B przyciski , wyswietlacz jest dobrze podłączony jak i przyciski , ale pojawia sie problem z przerwaniem , program nie wykonuje przerywania(kod z niego działa testowałem...
uzyj szukaj. zaraz Freddie Chopin sie odezwie i bedzie sie z ciebie nabijal ( do Freddie Chopin nie przeszkadza mi to oczywiscie jak sie nabijasz nawet raz sie poplakalem ze smiechu z powodu twojej odzywki) I atmega8 nie posiada wewnetrznego rtc. Timer2 posiada jedynie tryb asynchroniczny
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...
Witam. Na forum jestem nowy, ale Atmege8 gryzę już od roku:). Zakładam że czytałeś datasheet'a od Atmega8 i niestety nie udało Ci się zrozumieć.Jeżeli tak to Ci pomogę. Po pierwsze w Atmega8 masz trzy timery/countery: -Timer0 8bit -Timer1 16bit -Timer2 8bit Timer1 i Timer2 możesz wykorzystać jako PWM,gdyż mają wbudowaną taką funkcje. Wiadomo że 16bitowy...
Dla kwarcu 4MHz jest to prescaler 64 i początkowa wartość licznika: 193 Dla kwarcu 8MHz prescaler to: 64 i początkowa wartość licznika: 131 To pokazuje kalkulator. Chciałoby się zakrzyknąć : a nie mówiłem :-P Aby wpisać do Timer2 początkową wartość, to używamy poleceń: TCNT2=początkowa_wartosc Timer2= początkowa_wartosc Counter2=początkowa_wartosc...
Witam, proszę o pomoc w rozwiązaniu problemu w tym programie, bo już nie wiem co jest nie tak. Program ma sprawdzać stan portu pind.2 do którego podłączony jest odbiornik podczerwieni w odstępach 444µs i zapisywać wyniki do eepromu w bajtach. Zrobiłem to tak: $regfile = "m8def.dat" $crystal = 16000000 Config Lcd = 16 * 1a ' lub Config...
Witam , Mam problem z uruchomieniem odbiornika/nadajnika RC5, mianowicie zbudowałem pilot i odbiornik, ale po wielu próbach nie udało mi się uzyskać założonego efektu.. Czy ktoś wie jaki jest błąd? Nadajnik : Schemat: Odbiornik: Jedyna zmiana to kondensator 10uf zamiast 4,7uf i TSOP1736. Podpięte do portu PB0 uC, natomiast do portu D , 7 diod LED -...
Witam Mam mały problem z tym dość prostym programem. Generalnie działa tak jak powinien, tylko przy włączeniu układu następuje krótkie załączenie przekaźnika. Jest to spowodowane tym, że początkowy odczyt z DS18B20 jest 85 stopni ( integer 850 ) co przekracza ustaloną przeze mnie początkową wartość 45 stopni ( integer 450 ). Próbowałem dać badanie warunku...
Witam. Robię zegar na ATmedze8L. Chciałbym go taktować kwarcem zegarkowym (tak, nie chcę podłączać pod timera tylko chcę taktować tym cały układ). Szukałem ale nie znalazłem nigdzie jednoznacznych opisów dla takiego kwarca. W nocie jest napisane: To use a 32.768kHz watch crystal as the clock source for the device, the Low-frequency Crystal Oscillator...