To co sugerowal Tajwoj - źle ustawiłeś preskaler, powinno być: TCCR0 = 0b00000101;
Wg http://www.nongnu.org/avr-libc/user-manu... musisz zmienić nazwę wektora przerwań na TIM0_OVF_vect Porównaj sobie datasheet attiny13 z datasheetem atmegi8 żeby skonfigurować timery. Do skonfigurowania timera w attiny służą rejestry TCCR0A i TCCR0B, w atmedze8 jest tylko TCCR0 http://www.atmel.com/images/doc2535.pdf http://www.atmel.com/Images/Atmel-2486-8...
To zależy. Z opisu autora (nie analizowałem kodu) wynika, że timer jest zatrzymany, stąd kolejność nie ma znaczenia. Przy okazji mała poprawka, bo zamiast TCNT0 podałem TCCR0. Zerując TCCR0 zatrzymamy timer ponieważ w tym mikrokontrolerze są tam tylko bity preskalera.
Masz zły wektor przerwań. http://www.atmel.com/images/atmel-2486-8... http://www.nongnu.org/avr-libc/user-manu... Ustawiłeś przerwanie od overflow timera. TCCR0 nie ma bitu WGM01. Zajrzyj do manuala jak to poustawiać.
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...
Wyrzuć te delay'e. Zmienną licznik jak radzili koledzy zmień na volatile. Zmień sei(); na SREG |= (1<<7); Jeśli będzie działać, to zapytam jakiej wersji avr studio używasz? [syntax=cpp] #include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t Count = 0; ISR(TIMER0_OVF_vect) { Count++; TCNT0 = 0; } int main(void) { DDRB = 0xFF;...
#define TIMER_ON_64() TCCR0A|=(1<<CS00)|(1<<CS01); Bity CS00, 01, 02 są w TCCR0B. WGM02 też jest w TCCR0B a WGM00 i 01 w TCCR0A. P.S. W ATmedze88
we wklejonym kodzie jest O nie zero, no chyba ze go przepisałeś ręcznie ;] po błędach wyraźnie widać że: TCCRO TCNTO nie jest zadeklarowane bo takich nie ma, jest : TCCR0 TCNT0
można tak [syntax=c] TCCR0 &= ~((1<<CS02)|(1<<CS01)|(1<... [/syntax] spowoduje to zatrzymanie licznika
Na przykładzie timera0 ;wektory przerwań .org 0x00 rjmp reset .org 0x09 rjmp przerwanie_timer0 reset: .def acc = r16 .def maska = r17 ;### START TIMER0 in acc, TCCR0 ldi maska, 0b00000111 ; 3 ostatnie bity to ustawienie preskalera or acc, maska out TCCR0, acc in acc, TIMSK ldi maska, 0b01000001 or acc, maska out TIMSK, acc ; odblokowanie przerwania...
Sam to pisałeś czy gdzieś znalazłeś ? [syntax=c]TCCR0 &= ~(_BV(CS01) | _BV(CS02)); //clock prescaler = 1[/syntax] Nie wiem ile jest tam jeszcze takich dziwolągów, ale powyższe po resecie nie ustawia prescalera na 1 jak w komentarzu [syntax=c]TCCR0 |= 1<<CS00; //clock prescaler = 1[/syntax]
Witam! Zauważyłem dziwne zjawisko: Generuję np: 10000 impulsów na jednym pinie za pomocą timera0, a na innym pinie również 10000 impulsów za pomocą timera2. Oba timery są 8-bitowe i oba ustawione są na ten sam preskaler TCCR=5 ; i oba mają tą samą wartość TCNT=5. Generację zaczynam w tym samym czasie i o dziwo mam różne częstotliwości przebiegów. Dlaczego...
Po Config Timer0 wpisz dodatkowo TCCR0 = 4 Config Timer0 = Timer , Prescale = 256 Tccr0 = 4 Tylko musisz coś zrobić z START TIMER0 i STOP TIMER0 bo one przywrócą wartość po CONFIGu i program dalej nie będzie działał. Najprościej będzie usunąć te instrukcje. dodano 20 Sie 2008 08:05 Mail z opisem błędu poszedł już do MCS Electronics. Zbaczymy jaka będzie...
TCCR0 = _BV(x<<CS00); Źle użyłeś makra _BV. _BV(x) jest równoznaczne z ( 1 << x ), czyli w Twoim przypadku próbujesz wykonać podwójnie przesunięcie bitowe. Jeżeli x = 3 (CS00=0): _BV(3<<CS00) = _BV(3) = (1<<3) = 0b00001000 czyli TCCR0 będzie równe 0b00001000 . Innymi słowy, próbujesz ustawić bit tylko do odczytu, zamiast...
Nie bardzo mi się chce wnikać w przyczyny , więc wrzucę Twój zmodyfikowany kod: #include <avr/io.h> #include <avr/interrupt.h> #define PWM_out(value) OCR0 = value void delay(void){ volatile unsigned int i; for(i=5000;i;i--); } unsigned char pwm=127; int main(void) { DDRD = 0x00; PORTD = 0xFF;...
A masz oscyloskop zeby steirdzic ze rzeczywiscie sie nic nie dzieje? Ja wrzucilem taki program do megi16 #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT SIGNAL(SIG_OVERFLOW0) { PORTD=0xFF; } int main(void)...
Jeżeli korzystasz z makr Lighta'I to musisz być konsekwenty. W oryginalnym kodzie jest TCCR0=T0div; gdzie T0div jest odpowiednikiem preskalera 256. W Twojej funkcji widze TCCR0=0x02; co ustawia prescaler na 8. Oczywiście zakłądam że masz właściwą wartosć F_CPU. Dla kwarcu 11,0592MHz do TCCR0=0x04 a do TCNT0=0xD4 i powinno działać.
1. To czy port jest wyjściem czy wejściem jest zdeterminowane przez elektronikę układu i rzadko istnieje potrzeba zmiany tego statusu po jednokrotnym ustawieniu. W twoim przypadku ustawiasz DDRB=0xff na początku funkcji main() i nie ma potrzeby zmiany tego w każdym wywołaniu procedur diody1_4() i diody5_8(). Nie jest to duży błąd ale dobra praktyka....
No cóż teoretycznie chyba bedzie działać ale ładne to to nie jest :D 1. linie kodu TCNT0 = 0; // ustawienie zegara na zero - przyznaje to wlasnie robi natomiast TCNT0=1; // rozpoczecie pracy zegara - z tym sie nie zgadzam , bo licznik liczy od momentu wpisania 0x05 do rejestru TCCR0, i nie zatrzymuje sie tylko leci dopóki nie wpiszesz 0 do TCCR0 oprócz...
Nie mam pojęcia jak zrobić prescaler na tym rejestrze TCCR0 w Bascom. Ale czy tałem że im większy ten prescale tym mniejsza dokładność ,może lepiej zostać przy tym co jest ?
TCCR0 = 1<<CS01 | 1<<CS01; tu mam ustawiony rejestr zeby zliczal mi impulsy podzielone w preskalerze przez 64 , chyba , ze cos jeszcze trzeba ustawic
Otóż przycisk mi działa raz na 20+ prób a i to nie zawsze... ;/ [syntax=c]TCCR0 |= (1 << CS00) | (1 << CS02); TCCR2 |= (1 << CS20) | (1 << CS21) | (1 << CS22); TIMSK |= (1 << TOIE0) | (1 << TOIE2); TCNT0 = 253; TCNT2 = 0;[/syntax] atmega8
Szkoda. Wprawdzie potrzebowałem 24MHz i ucieszyłem się że ten na 20MHz chodzi i na 24MHz. Ale liczyłem na to że jak zdobędę ten na 24MHz to łyknie ze 30MHz. Szczególnie że okazało się że 24MHz mi nie wystarczy. Wczoraj przypadkiem odkryłem w datasheecie dodatkowe rozkazy (muls, mulsu, fmul, fmuls, fmulsu, movx, lpm, Rx, Z, lpm, Rx, Z+). Pomoc BASCOMa...
Witam Mam prośbę o rozjaśnienie pewniej sprawy - mam do Atmegi8 podpięty odbiornik IR (SM3385P) cudo to zostało wymontowane z jakiegoś odbiornika Czujnik podpięty jest pod PB0 - do tego posiadam pilot TTS35AI - od zestawu SkyStar2 - do przetestowania wykorzystałem program ze strony http://hobby.abxyz.bplaced.net/index.php... Kod poniżej...
Po pierwsze - jeśli chcesz się przekonać czy kod działa to go uruchom i to sprawdź. Po drugie - nie wiem po co tak bardzo grzebiesz w rejestrach timera, wpisujesz jakieś własne wartości do TCNT0 i TCCR0 w przerwaniu, jaki to ma cel? Uruchom przerwanie i zapomnij o nim: [syntax=c]#define KEY_UP(PINB & (1<<3))//PB3 - przycisk UP - do masy. ......
Otóz tak wygląda pewien program do zczytywania komend z czujnika podczerwieni do którego wysyłane są sygnały za pomocą pilota w standardzie RC5: Poprawiłem tytuł. LordBlick
A słyszał kolega kiedyś o czymś takim jak nota aplikacyjna PDF do procka? bez czytania tego - zawsze będzie kolega spędzał wiele dni i nocy nad rozwikłaniem tak prostej "zagadki" a wystarczy zajrzeć do noty procka ATtiny2313 (przecież jest w necie za free) - zajrzeć do interesującego cię rozdziału n/t Timera0 a dokładniej: 8-bit Timer/Counter Register...
Witam, Czy nakierowałby mnie ktoś w jaki sposób wykorzystując PWM można zrealizować płynne sterowanie jasnością diody LED przy użyciu pilota nadającego w standardzie RC5? Do tej pory udało mi się zrealizować płynne sterowanie jasnością diody wykorzystując PWM i microswitche - oto kod: [syntax=c]#define F_CPU 8000000UL #include <avr/io.h> #include...
A czego miałem szukać w nocie katalogowej? Ewentualnych odpowiedzi na ewentualne pytania dotyczące kodu... U mnie CALL oznacza rcall. OK, ale i tak bez ustawienia wskaźnika stosu się nie obędzie. Oto poprawna i sprawdzona wersja na timerze : #define F_CPU1000000 .nolist #include <m8515def.inc> ; Prohibits use of non-implemented instructions (ATmega8515)...
Witam. Czy ma ktoś jakieś pojęcie na napisanie poprawnego programu działającego pod atmega8 na counter0, który odliczał by1 sekundę? Drugie pytanie to, czy może mi ktoś wyjaśnić dlaczego jak ustawię bit TOIE0 oraz I-bit SREG to jak debuguje krokowo program to zawartość rejestru TCNT0 skacze mi dopiero od bitu 1, a powinien od 0. Dlaczego? Po preleceniu...
Kod który zamieściłem jest na ATTiny2313 więc nie powinno być problemu z przeniesieniem na ATMega8 - wystarczy sprawdzić i ew. zmienić nazwy rejestrów. Mam nadzieję że Ci się przyda. void PWMint(void) { DDRB |= (1 << PORTB2); DDRD |= (1 << PORTD5); // jako wyjscia DDRB |= (1 << PORTB4); TCCR0A =...
skorzystaj z pinu ICP1 i Input Capture Timera1, w rejestrze ICR1 bedziesz mial zliczone impulsy miedzy kolejnymi impulsami na pinie ICP1, w obsłudze przerwania Input Capture dodaj zerowanie timera. Dodano po 16 A jak chcesz to zrobic na INT0 to char zmienna=0; int wartosc; ISR(EXT_INT0_vect) { if (zmienna==1) { cbi(TCCR1B,CS11);//wylacz...
Ja bym to zrobił tak: #define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> unsigned char tovs; SIGNAL(SIG_OVERFLOW0){ TCNT0 = 1; // timer stop tovs++; // zmiana stanu co 16 przepełnień timera if(tovs % 16 == 0) PORTB ^= _BV(0); TCNT0 = 0; //timer start } int main(void) { DDRB...
Po 2 teraz juz sam nie wiem :| bo przeciez co ma dorzeczy to ze u mnie zmienna "licznik" ma wartosc 4000? Przeciez to jest zmienna wewnetrzna w porgramie.Bo jesli chodzi o wartosc zliczana przez licznik to wynosi ona L=250, czyli aby uzuskac 1 sek to: 1s=250x4000; gdzie TCCR0=2 (CK/8) bo kwant czasu wynosi 1us. Nie wiem moze sie myle.... Pozdarwiam...
Witam, Robiłem to kilkanaście razy na innych procesorach, a nie mogę zrobić na ATmega88PA. link do DSa: http://www.atmel.com/images/Atmel-8271-8... opis rejestrów TIMER0 na stronie 105 Timer1 i Timer2 mam ustawione w trybie PWM i działają bez zarzutu. Walczę już...
Witam. Mam pewien problem żeby na tym mikrokontrolerze zrobić czasomierz. Gdy napisze w bascomie działa ok, ale jak w WinAVR to już nie. #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> SIGNAL (SIG_OVERFLOW0) { PORTD = ~PORTD; } int main(void){ DDRD=0xff; PORTD=0xff; TIMSK = _BV(TOIE0);...
Hej. Po pierwsze Timer0 w atmedze8 nie ma PWM A więc do PWM możesz korzystać tylko z Timera 1 oraz Timera 2. Po drugie twój problem leży w nazwach poszczególnych rejestrów konfiguracyjnych atmegi 8 sprawdź w dokumentacji atmegi8 jak w rzeczywistości nazywają się rejestry TCCR0A, TCCR0B, OCR0A bo tego dotyczy komunikat błedu. Poza tym pamiętaj że port...
Witam, mam problem z ustawieniem przerwania od timera0 na atmega8, jestem początkujący jeśli chodzi o assembler... Problem leży w tym że, uP jest taktowany z wewnętrznego zegara 1MHz, i jeśli mam ustawiony prescaler na 8 czyli rejestr TCCR0 na 2 to powinienem otrzymać obsługę przerwania co 8us a na oscyloskopie otrzymałem igiełkę co 2ms;/ nie wiem co...
Pisane na żywca, nie wiem czy się skompiluje od strzału: #include <avr/io.h> #include <avr/signal.h> #define LED PORTC.0 uint8_t liczba; SIGNAL (SIG_OVERFLOW0) { TCNT0=0x05; if(liczba++==250) { PORTC=~PORTC; liczba=0; } } int main( void ) { DDRC=0x0FF; PORTC=0; TCCR0=0x04; TCNT0=0x05; TIMSK=0x01;...
Na wstępie widzę, że popełniłem straszną gafę. Zczytywałem stan portu przez PORT zamiast PIN:) Napisałem dwie kolejne wersje. ISR(TIMER0_OVF_vect)// { TCNT0=39; //1.728ms if (bit_is_set(PORTD,IR)) {IR_CMD[i]=1;} else {IR_CMD[i]=0;} i--; if (i==0) {TCCR0=0x00; i=13; _delay_ms(1000);...
Programuję w ASM ale tylko Atmega8/16 więc wklejam ci taki przykład: [syntax=asm] .CSEG .org 0x0000 //poczatek deklaracji skokow dla przerwan rjmp _poczatek reti reti reti reti reti reti reti reti rjmp _150_timer0 //przerwanie overflow timer0 reti reti reti reti reti reti reti reti reti _poczatek: in r16, TIMSK//timer0 overflow interrupt enable ori...
Witam drogich kolegow. Z uwagi na to, że jest to mój pierwszy post prosze z góry o wyrozumiałość. Mam następujący problem: Potrzebuje skonfigurować i wygenerować sygnał PWM na mikrokontrolerze Atmega8. Konieczne jest, żeby ustawić wszystkie rejestry ręcznie. Jest to mozna powiedzieć wstęp do mojej pracy INZ. Z tematem gryze się juz od dluzszego czasu...
Piszę w C, ATMega8. Inicjalizacja Timera: TIMSK = 1<<TOIE0; // odblokowanie przerwania od licznika TCNT0 = LCNT0; // wpisanie wartości początkowej TCCR0 = 5; // ustawienie trybu pracy licznika Procedura obsługi przerwania: SIGNAL (SIG_OVERFLOW0) { TCNT0=LCNT0; licz1++; if (licz1==100) //uplynela 1s { licz1=0; if (sekundy==59)...
W timerze miało być TCCR0|=(1<<CS00); , teraz timer działa ok. Puki co kombinuję dalej z samą obsługą silniczka (dzięki za powyższą radę, tablica to lepszy pomysł) i największą zagwozdką dla mnie jest wypełnienie.
Na początek zdecyduj jakie przerwanie ci jest potrzebne... Jeżeli od timera to szukaj opisu przerwania w rozdziale opisującą jego konfiugurację... Po pierwsze trzeba uaktywnić przerwania czyli sei() Przerwania timerów aktywuje się w rejestrze TIMSK... Odpowiednio uart w swoich rejestrach posiada bity odpowiadające za aktywację przerwania od TX, RX itd......
Witam, Mam dziwny problem w mikrokontrolerem. Z nieznanych mi powodów restartuje mi się on gdy ustawiam źródło odniesienia dla przetwornika ADC. Co ciekawsze, dokona kilku restartów i za którymś razem uruchamia się poprawnie, a co lepsze przetwornik działa dobrze. Kod w tej chwili wygląda tak: http://obrazki.elektroda.pl/5684753500_1...
Zamiast tego całego config timer0 itd. wpisz sobie: TCCR0A=&b00100001 TCCR0B=&b00000011 i póżniej wszędzie gdzie masz pwm0b wpisz OCR0B. powyższego nie sprawdzałem - na żywca z dokumentacji. Za ok. 2h sprawdzę to coś ci napiszę :D Dodano po 2 Wygląda na to, że ten kod zaczął ci działać :D . To, że żarówka ci od razu się zapala i gaśnie to nic dziwnego....
Witam, Wydaje mi się iż zapisuje wszystko poprawnie z datasheet jednak coś jest niepoprawnie... Wiem sprawa banalna ale za pomoc bede wdzieczny. [syntax=c] #include <avr/io.h> // definicja IO #include <avr/interrupt.h> // dolaczenie naglówkowego potrzebnego do obsl. przerwan #include <util/delay.h> // proste opuznienia // dioda LED...
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...
O, widzę, że ktoś oprócz mnie również ma ten problem :D Przede wszystkim musisz uwzględnić ten pin SS, o którym wspomniałeś, bez tego ani rusz. Za każdym razem gdy coś wysyłasz po SPI musisz ustawiać SS na zero, a po wysłaniu SS na 1. Warto również zajrzeć do bibliotek, które udostępnia Atmel, jest to nota AVR319, do pobrania stąd [url=http://www.atmel.com/devices/ATTINY...
Czy tu chodzi, aby ustawić bit WGM w tryb normalny i CTC więc: TCCR0 |= (1<<WGM00);. Czy dobrze myślę? Źle myślisz. Zobacz jakie bity masz w tym rejestrze w M8. Niby ustawiłem bit WGM na tryb CTC w atmedze 8 TCCR0 |= (1<<WGM10); i 1 krzyżyk znikł :) Również źle. Jak wyżej. Lecz czytając wypowiedź kolegi wyżej przestawiłem na timer1 komendą...
Piszę ponownie, ponieważ jako, że z układem nie mam już problemu mam problem z napisaniem programu. W swoim rozwiązaniu chciałbym użyć dwóch przerwań od TIMER0 oraz zewnętrzne INT0. Teraz tu moje pytanie czy te dwa przerwania zaimplementowane w ten sposób jak poniżej, nie wpłyną na niedokładność pomiaru i czy jest może na to lepszy sposób. Mój kod:...
Buduję prosty sterownik na atmedze 8, chcę obsługiwać klawiaturę w przerwaniach od timera0 ale atmega nie widzi procedury obsługi przerwania i resetuje się. Jeżeli zatrzymam timer albo wyłączę przerwanie timera, albo wyłączę globalnie przerwania to nie resetuje się. Kod procedury obsługi przerwania (funkcje do LCD są w pełni sprawne, nawet gdy ISR jest...
Udało mi się skonfigurować tak jak chciałem, Więc zostawiam kod dla innych: void Init_Timer(){ count=1;//Reset ounter TCNT0 = 0;// Reset timer TCCR0 |= (1<<CS02) | (1<<CS00) | (1<<WGM01);// Set prescaler 1024, Set CTC Mode TIMSK |= (1<<OCIE0);// Enable Compare interrupt OCR0=100; //Set...
PWM ustawiasz dosyć prosto dwoma rejestrami: TCCR0 =0x69; //Tu ustawiasz tryb, preskaler, sposob zliczania - szczegoly w dokumentacji Atmela OCR0 = wypelnienie; //Tu wpisujesz wypelenienie np. 128 to wypelnienie 50% (przy liczniku 8-bitowym) Ja to tak robie na ATmega16 i dziala bez problemu. Oczywiscie PIN OC0 musi być jako wyjście
[syntax=basic4gl] $regfile = "m8515.dat" $crystal = 8000000 Config Portb.1 = Output 'RW LCD Portb.1 = 0 Config LCD = 16*2 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6 cls lcd "test" wait 1 cls Config Timer0 = Timer , Prescale = 1024 Tccr0 = 4 On timer0 Multi_kl Enable Timer0 Enable...
Witam, Próbuję uruchomić przerwanie timera 0 w ATMega8583 i jakoś nie mogę. W założeniu ma być to tryb pracy normalnej - licznik krąży i jak się przepełni to następuje przerwanie. Pewnie robię coś nie tak, tylko nie wiem co. Próbuję tak (to tylko fragmenty kodu dotyczące przerwania): .CSEG .ORG 0x0000 rjmp reset .ORG OVF0addr rjmp timer_0 reset:...
Pierwsze pytanie - czy w inny sposób udaje ci się coś wyświetlić na LCD? I drugie - tam jest funkcja dodająca transakcje, która przy okazji włącza timer. Poprawiłeś ją? Chodzi o tą: [syntax=c] bool LCD_PutText_B(uint8_t x, uint8_t y, char *txt, LCD_trans *buf, bool autodel) { buf->cmd=LCD_Text; buf->Ready=false; buf->SelfDel=autodel; //Czy zwolnić pamięć...
Witam. Pewnie zabrzmi to głupio aczkolwiek lubię się upewnić czy pewne rzeczy robię dobrze czy też źle. Jako iż nie dysponuję w tym momencie pod ręką programatorem to nawet nie mogę sprawdzić czy dobrze piszę czy nie. Rozchodzi się o zmianę programu napisanego na Atmegę16 tak aby pasował do Atmegi8. Jest to nadajnik podczerwieni o określonej częstotliwości...
Witam. Walczę z tym już od dłuższego czasu. z serią At90S nie miałem żadnych problemów, a jak AtMegi i AtTiny zastąpiły tą serie to przestałem czaić o co chodzi. Mianowicie: Atmegę 8535 taktuję zewnętrznym kwarcem 16MHz. do tego 2 kondensatory 22pF. Fusy ustawione tak: CKSEL0...3=0 - odhaczone CKOPT=0 - zaznaczone Napisałem prosty programik, który po...
Ostateczeni zrobiłem to w ten sposób: //ustawienie przerwania cli ldi r16,(1<<CS11) ;ustawienie preskalera na 8 out TCCR0,r16 ldi r16,(1<<TOIE0);ustawienie przerwania gdy licznik taki sam jak A out TIMSK,r16 ldir16, 0xff out TCNT0, r16 sei // nop bo prescaler i trzeba poczekac kilka cyklow w zaleznosci od niego nop nop nop...
Witam poniżej przedstawiam kod programu za srednikami jest poustawiany timer 16 bit który steruje serwomechanizmem z modeli RC i działa wszystko poprawnie (wyjscie OC1A do serwa) natomiast ja chcialbym to serwo wysterować 8 bitowym wyjscie (OC0/t0 pin1 do serwa) I niby wszytsko dobrze posutawialem ale serwo ani drgnie dlaczego? #include "avr.inc"...
Hej. Od jakiegos czasu mecze sie z SPI. Napisalem program dla Mastera i dziala. Problem tkwi w Slave. Gdy puszczam symulacje w AVR Studio nie chce mi sie ustawic bitu USISIF w rejestrze USISR. Robie to tak: USISR|=(1<<USISIF); Master - Atmega8515 Slave - Attiny26 Attiny26 nie ma SlaveSelect wiec musialem je zrealizowac programowo. Zastosowalem...
| = (1<<CS00). Jednak ja wciąż polecam użyć Timera1 i jego trybu CTC, wtedy na wyjściu OC1A. Nie potrzeba wtedy obsługiwać żadnego przerwania, ustawiasz wyjście OC1A w tryb TOGGLE ( rejestr TCCR1A ) i będzie ono zmieniało stan w rytm przepełnień timera. A timer będzi liczył (przez prescaler jaki ustawisz) do wartości jaka sobie ustawisz w OCR1A....
Witam. Jak widać jest to mój pierwszy post na tym forum. Na wstępie chciałbym prosić o wyrozumiałość - jeżeli temat znalazł się w nieodpowiednim miejscu, popełniłem jakiś błąd w składni tytułu czy coś tego typy, prosiłbym moderatora o poprawkę i pouczenie jak w przyszłości uniknąć powielenia problemu. Jestem w trakcie pisania pracy inżynierskiej dotyczącej...
Witam. Postanowiłem sobie zaprojektować i stworzyć dalmierz ultradźwiękowy. Odbiornik z równoległym rezystorem (kilka kOhm - filtracja zakłóceń) podłączyłem pod wyjścia komparatora. Nadajnik początkowo miałem podłączony przez MOSFET N do OC1A, ale przy braku efektów podłączyłem bezpośrednio do tego wyjścia. Objawy: wynik jaki cały czas uzyskuję to około...
Bardzo prosze o pomoc z timerem1 w mikrokontrolerze Atmega8. Czytam tą dokumentacje i wydaje mi się, że wszystko dobrze zrobilem a mimo wszystko nie działa. Chce by przy przepełnieniu zapaliły się diody. Oto mój kod: #include <avr\io.h> #include <avr\signal.h> #include <avr\interrupt.h> SIGNAL (SIG_OVERFLOW1) { sbi(PORTC,PC5); } int...
Witam. Posiadam program do zegara VFD, lecz posiada tak zwane duchy. Po zastosowaniu większego rezystora ograniczającego prąd siatki też można ten efekt zniwelować ale czy można byłoby zrobić to w programie? Btw czy można przerobić program dodatkowo na to żeby pokazywał datę? Wrzucam program: [syntax=C] ////////////////////////////////////////...
Ta linijka w sumie nie ma potrzeby istnieć. Według mnie wystarczy wywołać: Timer0_Init()' i potem Timer0_RegisterCallbackFunction( jakaś funkcja ) i powinno chodzić. Jednak nic się nie dzieje. Samo Timer0_Init wygląda tak: void Timer0_Init(void) { //mt char i; uint8_t i; // Initialize array of callback functions for (i=0; i<TIMER0_NUM_CALLBACKS;...
Nie wiem dlaczego Timer0 nie generuje przerwania przepełnienia licznika. Zegar 12MHz Preskaler 1024 Każde przerwanie zmienia bit głośnika na przeciwny (XOR) czyli częstotliwość dźwięku to częstotliwość przerwań podzielona przez 2. Głośnik ma zakres od 20Hz - 20kHz Częstotliwość oczekiwana: f = 12MHz / 1024 / 2 = 5860Hz Dźwięk się nie pojawia niezależnie...
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...
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...
Witam. W moim projekcie muszę skorzystać z trybu Fast PWM. Odwołuję się bezpośrednio do rejestru: [syntax=vbnet]TCCR0A = WGM00 , WGM01 'Fast PWM[/syntax] Kompilator zwraca błąd: 242 Wystąpił brak zgodności zmiennych Jeżeli wpiszę z jednym argumentem kompiluję się prawidłowo. [syntax=vbnet]TCCR0A = WGM01 'tylko, że to tryb CTC [/syntax] Tak samo zachowuje...
Robię PWM na porcie 8-bitowym OC0 i czy w takim wypadku do deaktywacji PWM'a wystarczy wpisać TCCR0 = 0x00?
TCCR0A = (1<<CS02) | (1<<CS00);; Na początek: bity CS są w rejestrze TCCR0B, a nie w TCCR0A. Chyba zajrzałeś nie do właściwej noty. Oczywiście uwaga kolegi (at)Mari(at)(at)(at)n jak najbardziej słuszna.
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ś...
Witam Jestem w trakcie przenoszenia programu w C z megi8 na tiny13 i niewiem jakie nazwy dać rejestrom od Timera0 bo te z megi8 byly traktowanie przez kompilator jako błędy. Z dokumentacji wywnioskowałem, że rejestry różnią się "0" na końcu nazwy... Więc pozmieniałem to w całym programie w ten sposób: [syntax=c]outb(TCNT0,TimerValue); // Przypisz nową...
Dzieki, bardzo użyteczny sposób, którego nie znałem. Ostatecznie wyglada to tak var.h: #ifndef F_CPU #define F_CPU 8000000 #endif #define LCD PORTC #define LCDE PC6 #define LCDRS PC7 #define D7 PC2 #define D6 PC3 #define D5 PC4 #define D4 PC5 #define LCDREG DDRC #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #define...
Witam. Założenie jest takie, aby dioda podłączona do wyjścia timera0 zapalała się i gasła na 1s. Wpisuje więc do rejestru TCCR0 1 i mam preskaler 1 co daje pojedyńczy kwant czasu = 125ns (1/8000000 = 125n) czyli żeby odmierzyć 1s potrzebuje zliczyć to 8000000 razy :P, ale że TCNT0 ma pojemność 256 bitów zastosujemy dodatkowy licznik. czyli zliczymy...
Witam, Napisałem program, który docelowo miał odbierać dane z komputera przez modem BT HC-05 interfejsem UART oraz potwierdzać odebranie danej, oraz wysyłać dane z ADC jeśli przyciśnięty zostanie przycisk (w rzeczywistości jest to wycinek pewnego programu, więc niektóre zmienne etc. mogą być bez sensu). Odczyt ADC wykonuję wykorzystując przerwania capture...
Momentami odnoszę wrażenie, że nie wiesz co piszesz. Do pomiaru długości nie potrzebujesz dodatkowego timera oprócz tego t0. Wystarczy, że będziesz sprawdzał co określony czas, jeśli na wejściu będzie ten sam stan co poprzednio, to będziesz zwiększał pomocniczą zmienną. Jeśli stan się zmieni, to dopiero zapiszesz wartość do np.tablicy, żeby później...
No to próbuję: [syntax=c] //* \section OA Original author //* Andy Gayne is the original author of this application note. //*/ //program z noty Atmela 136 //przerobiony na ATMega8, kwarc 11059200 i okrojony program #include <avr/io.h> #include <avr/interrupt.h> //! Pin mappings #define CHMAX 6 // maximum number of PWM channels #define PWMDEFAULT...
napisałem tak i nie działa ;/ gdzie może być błąd? (tranzystor PNP do OC1A - PB1 atmega8). sprawdziłem przed chwilą w bascomie, i telewizor reaguje na komendy rc5send z BASCOMA. unsigned int RRR=0; void rc5send(void) { TCCR0 |= (1<<CS00); TCCR0 |= (1<<CS01); // use CLK/64 prescale TCNT0 = 0x6F; //888 cykli dla...
proszę bardzo: #include <avr/io.h> #include <avr/interrupt.h> int liczba; SIGNAL (SIG_OVERFLOW0) { if(liczba++==675) { PORTC=~PORTC; liczba=0; } } int main( void ) { DDRC=0xFF; // port C jako wyjście PORTC=0x00;; // początkowy stan portu C - niski TCCR0=0x03; // prescaler 64 TCNT0=0x00; //...
Witam, mam następujący problem. Chciałem przetestować timer0 w Atmega8-16PU, aby gasił i zapalał diodkę co jedną sekundę. Obliczyłem, że przy kwarcu 8MHz i ustawieniu preskalera na CK/8 program w C powinien wyglądać następująco: #include <avr/io.h> #include <avr/sfr_defs.h> int main(void) { DDRB = 255; PORTB = 0; TCCR0 = 2;...
Cześć. Napisałem swój pierwszy program na przerwaniach, ale nie działa on do końca tak jak zamierzałem. Układ jest taki, że pod port B mam podpiętą diodę/diody, a pod wejście wywołujące przerwanie PD3 (INT1) mam podłączony oscylator o zmiennej częstotliwości w zakresie od 0 do +/- 30Hz. Program miał polegać na tym, że powyżej granicznej częstotliwości...
Właśnie z tej strony korzystałem pisząc cały kod:) Uporałem się juz z problemami, przedebugowałem kod i co się okazało: powodem błędów było wyłączanie i włączanie przerwań, w stylu ACSR = 0x04; /*...*/ ACSR = 0x00; Wtedy przerwanie włączało się samo, podobnie z TIMSK. Prawidłowo powinno być tak: #include <avr/io.h> #include <avr/interrupt.h>...
ginar: twoja porada okazała się słuszna, chociaż dalej mam problem. I nadal nie wiem jak sobie z nim poradzić. Nie zmodyfikowałem co prawda funkcji, tylko zmodyfikowałem mój program (tak było znacznie szybciej). Co zrobiłem? Zmieniłem położenie następujących linijek, umieszczając je już po wysłaniu wszystkich komend do LCD: sei(); TIMSK = 1<<TOIE0;...
A zaglądałeś do DS ? Bo widzę, że niespecjalnie. Sygnał podpinasz pod nogę T0 a licznik konfigurujesz na zewnętrzny sygnał zegarowy. TCCR0 = (1 << CS02) | (1 << CS01); // External clock source on T0 pin. Clock on falling edge. i teraz w TCNT0 masz liczbę impulsów. Odpalasz jeszcze jeden timer i co chwilę obliczasz prędkość...
Układ ma dzialac tak ze przyciskiem gasi/wlacza ledy. Ukad jest tak zbudowany ze wlacznik jest ok 20m od procka ale to nie problem, jesli uklad steruje jedna dioda lub jedym halogenkiem (przez IRFZ 44N) ale jesli zamiat tego jednego halogenka podepne halogeny w kuchni to uklad wlacz sie i wylacz sie ale jesli wlacze diody to po pewnym czasie ( kilka...
[syntax=c]#define F_CPU 8000000L //Częstotliwość taktowania #include <avr/io.h> #include <avr/interrupt.h> #include "kod_binarny.h" char Znak; int main(void) { DDRB = Bx11111111; TCCR0 |= Bx00000101;//Timer0: sygnał z oscylatora, presklaer 1024 TIMSK |= Bx00000001; //Timer0: włączenie przerwania z Timera sei(); while(1) { Znak = Bx10010111;...
Witam, tak się zastanawiam - może mi ktoś podpowie dlaczego mam taki dziwny jak na razie dla mnie efekt, że ten samiuśki program , który napisałem dotąd na ATmega8 i zajmuje już prawie całą pamięć flash bo 95% czyli ok 7846 bajtów - po skompilowaniu dla procka ATmega168 - nagle zajmuje o nieco ponad 1kB !!!! więcej w pamięci flash ???? zmiany, które...
Mam pewien problem. Pobrałem z internetu bibliotekę do LCD HD44780, działa ładnie ale pod m.in. ATMega32 a pod ATMega8 nie kompiluje się. Postanowiłem ją poprawić i jak łatwo się domyśleć nadal nie działa ;/ Kompiluje się teraz ale nie nic nie wyświetla. Powiedzcie gdzie popełniłem błąd? Kod po zmianie: #include "delay.h" volatile uint16_t...
witam dopiero uczę się programowć avry. chciałem pobawić się w sterowanie serwa modelarskiego na atmega8 i tu od razu zonk. program wykorzystuje timer0, procesor działa na wew. oscylatorze 8MHz. generalnie to na wyjsciu miala sie pojawiac fala prostokątna H=1,5ms L=18,5ms ale serwo osiąga tylko jedną skrajną pozycję i koniec. kod jest poniżej, czy widać...
Witam, Mam problem z poniższym programem. Timer0 odlicza 1ms i generuje przerwanie. W programie obsługi przerwania zmienna "znak" przyjmuje wartość znak=15, a chyba powinna przyjmować wartość znak=34. Dlaczego program nie uwzględnia mi przypisania znak=34, które znajduje się w pętli for? Pozdrawiam Listing programu: [syntax=c].................................
Witam, mam następujący problem z Timerem w Atmedze 8, kod który kompiluję jest zwykłym przykładem z książki, które polega na generowaniu fali prostokątnej. Cały problem polega na tym, że kompilator wyrzuca błąd: ../Cwiczenie2.c:10: error: expected expression before '=' token Kompiluję pod AVR Studio i AVR GCC: #include <avr/io.h> #define...
robisz pętlę for np na 40x25ms. Spróbuje :>, to dam znać. #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define tau0 6; main() { unsigned int=3200; DDRB=0x01; TCNT0=tau0; TCCR0=1; //ustawia presckaler for(; { while(bit_is_clear(TIFR,TOV0)); //sprawdza przepełnienie TCNT0=tau0; licznik--; if(licznik==0)...
Próbuje zrobić odbiornik kodu podczerwieni X sat. Opis tego standardu jest na stronie http://www.sbprojects.com/knowledge/ir/x... Napisałem program w avr-gcc, ale gdzieś jest błąd bo do portu cały czas podstawia tą samą wartość. Program testowałem w VMLAB-ie i wszystko symulowało ok. Dla sprawdzenia dałem zmiane stanu jednego wyprowadzenia na przeciwny...
Witam Wszystkich, To mój pierwszy post na forum, jakoś jak do tej pory wszystkie odpowiedzi udawało się znaleźć. Ale pojawił się następujący problem: Wykorzystuje ATmega8 do sterowania trzema serwami (jeden timer-jedno serwo). Z samym sterowaniem na przyciskach wszystko jest ok i nie to jest problemem. Nie wiem jak sobie poradzić z transmisją danych...
Czy chodziło o coś takiego jak poniżej? Co myślicie o wartościach: TCCR0 = 0x03; TCNT0 = 247; TIMSK = 1 << TOIE0; ?? Zegar wewnętrzny 1MHz. #include <avr/interrupt.h> int button_is_pressed(void) { if(bit_is_clear(PINB, 0)) { delay(25); if(bit_is_clear(PINB, 0)) { // delay(50);...
tccr0 atmega tccr0 atmega32 tccr0 atmega128
termostat danfoss parametry junkers cerapur podłączyć sterownik amplituner instrukcja
mikrofala usterki mikrofala usterki
Czujnik temperatury spalin W212 2.2 CDI uszkodzony Mercedes W212 2.2 CDI - Kod P2080, Czujnik EGT