Może zamiast kombinować dalej to przeczytaj sugestie kolegi? TCCR1A musi mieć ustawione zarówno COM1B1 jak i COM1A1. A ty w zależności od wywołanej komendy uruchamiasz tylko jeden lub drugi PWM, a nigdy obu jednocześnie. Czyli rozwiązanie to TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
WGM11 i WGM10 razem z bitami WGM12 i WGM13 z rejestru TCCR1B ustalają własnie tryb pracy. Table 39 na stronie 99 Datasheeta ATMegi8 z 07/2007. Inne procesory to inne numery tabelki i strony w Datasheecie, ale opis prawie identyczny. Podałem przykład dla ATMega8 żebyś wiedział gdzie szukać.
Użyłeś tej wersji która obecnie jest widoczna powyżej? Bo na początku wkleiłem z błędem. Jeśli tak, to spróbuj jeszcze tej: [syntax=c]Zero: 'zresetuj licznik Timer1 = 0 Tccr1b = &B00000000 'ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10 Tccr1a = &B00100000 'COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 Tccr1a = &B00100100 'COM1A1 COM1A0 COM1B1 COM1B0...
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 =...
Po pierwsze to wypadałoby napisać jaką częstotliwością taktujesz procka m8 na którym chcesz to zrobić i czy na pewno poprawnie ustawiłeś w nim fusebity po drugie, czy przypadkiem nie mylą ci się totalnie nazwy bitów bo w przykładach wyżej używasz np bitów CS02 i CS00 dla Timera1 (teoretycznie mogą akurat pasować ich pozycje ale jeśli takich literówek...
To właśnie zostało uruchomione - musi działać. Pisane pod WinAVR [syntax=c] #define SET(port, bit) port|=(1<<bit) #define RESET(port, bit) port&=~(1<<bit) #define NOT(port, bit) port^=(1<<bit) //Przerwanie wywolywane 100 razy na sekunde ISR(TIMER1_COMPA_vect)// == SIG_OUTPUT_COMPARE1A { NOT(PORTD,PD6); } int main (void) { SET(DDRD,PD6);...
Wszystko jest w dokumętacji... http://www.atmel.com/dyn/resources/prod_... PDF strona 74 wszystko o 16-bit Timer... Poczytaj o dostępie do Rejestrów 16 bitowych... PDF str. 95 opis rejestrów... I tak na wszelki wypadek przykład konfiguracji PWM... volatile uint16_t pwm=10; void PWM_Init (void) { TCCR1A = 0b10110010;...
"z tym serwem są problemy" - może uszkodzone, ja mam sześć sztuk TowerPro (może nie ten model) i wszystkie działają, tylko trzeba im sygnał podać. Co do sterowania: http://mil.ufl.edu/~achamber/servoPWMfaq... Jeszcze sugestia żeby serwo i układ zasilać osobno ze wspólną masą. Kod, zaznaczam że pisany dawno i NIE PAMIĘTAM CZY DZIAŁA!! (chyba lepsze...
PWM PWM'owi nie równy - fast-pwm, pc-pwm.... Tu jest kawalek kodu wygenerowanego ze źródła z C na ATmega8 - myślę, że trzeba zmienić tylko nazwy rejetrów i wartości początkowe void init_timer1_pwm(void){ c4:cf 93 pushr28 c6:df 93 pushr29 c8:cd b7 inr28, 0x3d; 61 ca:de b7 inr29, 0x3e; 62 DDRB |=(1<<PB1); //...
Tutorial do avr taki znalazłem: http://avr.elektroda.eu/?q=node/8 Jak byś czegoś w sieci szukał, to raczej unikaj tutoriala z patron.net, uczy złych nawyków i jest nieco nie na czasie. Pomiar częstotliwośći na AVR realizuje się w miarę łatwo, przy wykorzystaniu timerów, jeden timer pracuje jako licznik impulsów z zewnątrz, a drugi odmierza czas, mozna...
Witam. Chcę przedstawić szopkę Bożonarodzeniową. http://obrazki.elektroda.pl/9749389200_1... Całość wykonana własnoręcznie z pomocą kochanej żonki. Opiszę co i jak. Szopka ma ruchomy żłobek, dwie pochodnie i ognisko, na filmikach wszystko widać. Opiszę konstrukcję, do sterowania wszystkim użyłem Atmegi8. Trzy sprzętowe kanały PWM posłużyły...
W dalszym ciągu nie poprawiłeś WGM12. Jak wspominałem bit ten znajduje się w TCCR1B a nie w TCCR1A.
Witam wszystkich. Zaprojektowałem i uruchomiłem zegarek z wyświetlaczami LED(SA10-21GWA) i układem PCF8583 współpracującym z mikroprocesorem Atmega8 oraz układami PCF8574AP na szynie TWI(i2c). http://obrazki.elektroda.net/21_12497604... http://obrazki.elektroda.net/58_12497606... http://obrazki.elektroda.net/95_12497605...
Jaki procesor? Bo prawdopodobnie mylisz TCCR1A z TCCR1B Dla Atmega8 WGM13 i WGM12 są w TCCR1B.
Witajcie, Potrzebuję konfiguracji timera 1 dla atmega8 aby wykonywał funkcję z częstotliwością ~244Hz (zegar 16MHz i preskaler 2^16) . Chciałbym uniknąć używania dodatkowych bibliotek. Będę wdzięczny za przykładowy kod :) jakąś Przy okazji; jeśli użyję do tego celu timera 1, mogę równocześnie używać wyjść OC1A oraz OC1B jako zwykłe wyjścia I/O? Timer1...
[syntax=c]int main(void) { // ustawienie końcówki OC1A (PB1) sprzętowy PWM jako WYJŚCIE DDRB |= (1<<PB1) ; // ustawienia TIMER1 OCR1A = 499; //500 TCCR1A = (1<<COM1A0);//toggle TCCR1B = (1<<WGM12) | (1<<CS10); // tryb CTC + zegar 1MHz while(1); } [/syntax] Nie musisz uruchamiać przerwania bo licznik sam będzie machać nogą z częstotliwością...
Sorry że tak późno, ale komuś może się przyda. [syntax=csharp]#include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> #include "hd44780.h" volatile char dziesiatka = 0; volatile int sekunda = 0; volatile int flaga = 0; char tekst[10] = "Gotowy"; int main (void) { TCCR1A = ((0 << WGM11) | (0 << WGM10)); // ustawienie...
Przykład: TCCR1A =(1<<COM1A0) | (1<<COM1A1) | (1<<WGM11) | (1<<WGM10); TCCR1B=0x01; OCR1A =wypełnienie;
Poprawione ldi r16 , ((0<<WGM11)|(0<<WGM10)|(1<... ; praca w trybie Fast PWM ; WGM11 = 0 , WGM10 = 1 , ;Ustawienie bitów COM 10 powoduje, że TOP jest w ICR1A out TCCR1A , r16 ; zapis do rejestru Mam jeszcze takie pytanie. W Atmega8 jest możliwość osiągnięcia 3 przebiegów pwm i sterowanie ich wypełnieniem ? Są...
po ustawieniu rejestrów podanych wyzej nic sie nie zmienia [syntax=c]void timer_init() { TCCR1A |= (1 << WGM12)|(1 << CS12)|(1<<COM1A0);//CTC ,preskaler256 TCNT1 = 0; //wartosc poczatkowa timera TIMSK |= (1<<OCIE1A); // przerwanie Compare Match A OCR1A = 31250;//porównanie wartosci (około 1s) }[/syntax]
No niestety, nie rozumiem jeszcze tego na tyle, żeby to zadziałało... Jak ustawiam TCCR1A = (0<<COM1A1) to mi nie działa... Spróbuję jeszcze później. Dziękuję za pomoc, ale tak jak powiedziałem, jeszcze się uczę i niektórych rzeczy nie rozumiem.
Udało mi się! 'Przykład generowania fali prostokątnej niezależnie od CPU 'procesor AT Mega8 'zegar wewnętrzny 1 MHz 'piezo pomiędzy PB.1 a +5V 'UWAGA!!!, ATMEGA8 ma domyślnie załączonego Wachdoga!!!. Trzeba wyłączyć bezpiecznik!!! $regfile = "m8def.dat" $crystal = 1000000 Dim I As Byte Ddrb.1 = 1 'port b.1 wyjściowy '---------------------------------------...
Witam. Chciałem skorzystać z Timera1 w procesorze Atmega8 w trybie fast PWM nastawiłem rejestry w nastepujący sposób: TCCR1A |= _BV(WGM11) | _BV(WGM10) | _BV(COM1A1) | _BV(COM1B1); TCCR1b |= _BV(WGM13) | _BV(WGM12) | _BV(CS10); DDRB = 0xFF; Oczywiście wszystsko się kompiluje itd. ale problem występuję gdy próbuję wpisać do OCR1A coś większego niż 0x03FF...
Witam. Mam taki problem; od jakiegoś czasu próbuję uruchomić w uC ATmega8 sprzętowy PWM, na liczniku OCR1A i ciągle mi nie działa - natomiast OCR2 działa bez problemu. Pewnie robię jakoś głupotę, ale nie mogę się dopatrzyć o co co tu chodzi. Już nawet kopiowałem gotowe kawałki kodu z stron, gdzie był gotowy działający program i też nic. To jeden z kodów...
Dzięki za porady. Problem rozwiązałem stosując tryb CTC. Nie wiem czemu te Fast PWM nie działało ale już trudno. CTC mi aktualnie wystarcza :) Aktualny kod mojej funkcji square_wave jeśli kogoś interesuje: [syntax=c]void square_wave(uint16_t freq, uint16_t duration){ TCCR1A = _BV(COM1A0); //OC1=!OC1 TCCR1B = _BV(WGM12) | _BV(CS10); //CTC + preskaler...
Dodać polecenie ustawiające wartość TOP (rozdzielczość) w rejestrze OCR1AH/1AL. Skonfigurować pin portu z wyjściem OC1B jako wyjście. W TCCR1A ustawić tryb pracy wyjścia PWM OC1B za pomocą bitów COM1B0/COM1B1. Wypełnienie wpisywać do OCR1BH/1BL, ale nie większe niż pozwala na to wartość z OCR1AH/1AL.
Hej, Na przykład tak: #define AKU_PWM OCR1A // Wartość PWM dla Timera1 ............ .............. // Timer1 jako PWM TCCR1A = _BV(COM1A1) | _BV(WGM11) ; TCCR1B = _BV(WGM12) | _BV(CS10); // dziewięcibitowa PWM z Timer 1 OCR1AH = 0x01; OCR1AL = 0xFF; AKU_PWM = 10; // Pozdrowienia
Nie jest poprawny. Przede wszystkim potrzebujesz tryb w którym wartość TOP można programować, np. na ICR1. To pozwoli ci ustalić częstotliwość. W tryba z korekcją warto pamiętać, że częstotliwość jest dwukrotnie niższa. Następnie przy pomocy OC1x można ustalić szerokość impulsu. Przy czym OC1x<TOP, w przeciwnym wypadku to nie zadziała. Aby zobaczyć...
Regulacja częstotliwości? Sprzętowo? Owszem. Ale kosztem rozdzielczości PWM. Trzeba włączyć tryb z wartością TOP ładowaną do Capture1. Potem w programie: zmiana Capture1 daje zmianę częstotliwości, ale wymaga też przeliczenia wartości Pwm1a/1b. Samo wypełnienie zmienia się w Pwm1a/1b, ale trzeba zawsze brać pod uwagę wartość z Capture1 by nie wpisać...
Hmmmm... Juz dziala.. Ale problem lezal w czym innym.. Natoimast nie wiem, dalczego dioda podlaczona pod PB1 miga, zamiast swiecic swiatlem ciaglym... Dodano po 27 Przejrzalem sobie dokumentacje ATMega8, ale nie moge rozszyfrowac takiego zapisu, jaki znalazlem w jednym z kodow w necie TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0)...
Przy PWMie nie potrzeba procedury obslugi przerwania;> To powinno dzialac;) #include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRB = 0xFF; TCCR1A =_BV(COM1A1)|_BV(WGM11)|... TCCR1B =_BV(CS11)|_BV(WGM13); OCR1A=1500; ICR1=2000; sei(); while(1) {...
Cześć jestem nowy na forum więc się przedstawię jestem Kamil mam 14 lat i od niedawna zajmuję się programowaniem. problem w tym że jestem początkujący i w sumie nie rozumiem kilku rzeczy . :| Dlatego proszę o wyrozumiałość. Moje pytanie dotyczy generatora 36 khz napisałem prosty program, ale oczywiście nie działa, ponieważ sedno problemu tkwi w tym...
Witam, potrzebuję wygenerować przerwanie analogicznie do stworzonego w atmega8. W Atmega8 użyłem Timer1 tryb CTC, teraz chcę osiągnąć podobny efekt na pic16f1716. Może ktoś pomóc? [syntax=c] void Init_Timer1A(void) { TCCR1A = 0x00; TCCR1B =(1<<CS11) | (1<<CS10) | (1 << WGM12); //tryb CTC (WGM12), Prescaler = 64 (CS11,cs10) clk = 8Mhz...
Witam, Chciałem zrobić opóźnienia w programie dla Atmega8. Wykorzystałem przerwania, ale przy symulacji programu w AVR Studio okazuje się że program po około 260 mikro sekundach resetuje się(wraca do funkcji main() ). Nie jet to spowodowane raczej watchdogiem bo jest on wyłączony. Czy ktoś potrafi mi powiedzieć dlaczego tak się dzieje? Aha, oczywiście...
;konfiguracja licznika timera-PWM licznik #1 (at)8bitowy push acc sbi DDRB, DDB1 ;Port B1 jako wyjsciowy(PWM) in acc, TCCR1A ldi acc,0<<COM1A1|1<<COM1A0|0<... out TCCR1A,acc ldi acc,TCCR1B cbr acc,1<<WGm12 ;ustawianie w tryb pracy poprawnej fazy sbr acc,1<<WGm13...
Cześć, napisałem program do obsługi serwa(jest to serwo Tower Pro),program działa, ale mam problem polegający na tym, że przy starcie zasilania serwo wykonuje szybki ruch z pozycji w której się znajduje (do góry) , i zaraz wraca do pozycji określonej przez OCR1A czyli do pozycji w której było przed włączeniem zasilania. Chciałbym wiedzieć czy mogę się...
Witam, mógłby mi ktoś sprawdzić kod, szczególnie ustawianie adc? Zmiana rezystancji na potencjometrze ma powodować ruch serwa o kat proporcjonalny do zmiany rezystancji. Wcześniej zrobiłem dla jednego kanału adc i było ok ale po zmianach na dwa kanały serwa tylko drgają. enable PWM on port B1 in non-inverted compare mode 2 TCCR1A |= 2 << 4; //...
Pokaż cały kod. Autor postu zachował się chamsko wobec niego - takim nie należy pomagać tylko ignorować. ?? Czym kogokolwiek według Ciebie uraziłem :O ?
Nie dostaję żadnego ostrzeżenia :cry: Teraz nie wkleję kodu bo wyjechałem na kilka dni z domu ale oto co robię: -ustawiam pin PB1 jako wyjście (OC.1A) -wpisuję liczbę do rejestru OCR1A -ustawiam rejestry TCCR1A i B na tryb CTC (to jest chyba mode 4), bity COM na "togggle OC1A on compare match" -zezwalam na przerwania od przepełnienia (w rej. TIMSK)...
Własnie sie zastanawiam w jaki sposób zmieniać prescaler timera jesli klawisz jest wciśnięty. nie podoba mi sie to że za każdym razem czyta tą instrukcje if else dlatego zrobiłem to tak. ale cos nie do końca działa DDRD = (1<<4); // dioda do testów sei(); GICR=_BV(INT1); MCUCR =_BV(ISC11); DDRD &=~_BV(PORTD3); PORTD = (1<<3); DDRB =(1<<PORTB1);...
Witam Od jakiegoś czasy chce zrobić zegarek na atmega8. Do odliczania sekund użyłem unsigned int i=0; void wait(long t) { long cnt = 0; TCCR1A = 0; TCCR1B = 3<<CS10; TCNT1 = 0; TIFR |= (1<<TOV1); while(cnt < t) { if(TIFR & (1<<TOV1)) { cnt += 65536; TIFR |= (1<<TOV1);...
Kurde juz nie wiem? Mam licznik z CTC napisany w ten sposób: void SINGAL (SIG_OUTPUT_COMPARE1A) { PORTB^= _BV(PB1);//generacja fali nonej 36kHz //OCR1A = 2800; } a w main : TIMSK = (1<<OCIE1A); TCCR1A = (0<<COM1A0); TCCR1B = (1<<WGM12)|(1<<C... OCR1A = 13; // ms sei();...
Witam. Potrzebuję W tym liczniku obrotów: [syntax=c]#include <avr/io.h> #include <stdio.h> #include <avr/interrupt.h> #include <util/delay.h> #include "HD44780.h" //tutaj ustaw własne zasady pomiaru #define POMIAR_ILOSC_IMPULSOW_NA_OBROT 4 //ilość inpulsów na jeden obrót #define POMIAR_ILOSC_OBROTOW 10 //ile obrotów ma trwać...
W programie poniżej dekrementuję zmienną globalną(volatile) "time" w przerwaniu. Problem tkwi w tym, że dekrementacja działa prawidłowo tylko gdy zainicjuję zmienną globalną "time" początkową wartością, natomiast ja chcę podawać wartość zmiennej do dekrementacji w głównej pętli while(1) tak jak to jest w kodzie poniżej (który oczywiście nie działa)....
Witam, proszę o wyjaśnienie zasady działania sygnału PWM [syntax=c]int main(void) { DDRB |= LED1 | LED2; //Wyjścia LED //Inicjalizacja Timer1 (PWM) TCCR1A |= (1<<COM1A1) //Zmiana stanu wyjścia OC1A na niski przy porównaniu A | (1<<COM1B1) //Zmiana stanu wyjścia OC1B na niski przy porównaniu B | (1<<WGM11); //Tryb 14 (FAST PWM, TOP=ICR1)...
Witam, mam pewien problem, próbuje przerobić kod do sterowania diody z Attiny 2313, na Atmega8 taktowana wewnętrznym 1MHz z tematu: [url=http://www.elektroda.pl/rtvforum/to... Kod Oryginalny: [syntax=c]#include <avr/io.h> #define REDout OCR0A #define BLUEout OCR0B #define GREENout OCR1BL void PWMint(void) { DDRB |= 1<<PORTB2;...
Już wszystko jasne - jedyne pytanie zadaję na końcu. Przygodę z PWM zaczynam od sterowania jasnością diody. Atmega8 + diody + rezystorki 330Ω Ćwiczenie polega na cyklicznym rozjaśnianiu i ściemnianiu diody 3 diody podłączone do PB1, PB2, PB3 w założeniu tylko PB1 (OC1A) powinna świecić zgodnie z PWM. Ustawiłem tryb Fast PWM 8bit Kod: #include...
Witam, dzięki za zainteresowanie tematem! Jeżeli chodzi o przerwania, to też już to trenowałem i nie zadziałało, zaraz zamieszczę kod. Aż strach pomyśleć, co będzie robiło takie wywołanie: _delay_us(562.5); Zgaduję, że wykonanie tego może zająć i z 10 ms. Dlaczego tak? Kod z przerwaniami: [syntax=c]#include <avr/io.h> #include <util/delay.h>...
Witam Skorzystam z tematu aby zaprezentować mój problem. Zakładaj proszę własne tematy, bo to Twój problem, a nie problem tamtego autora. Otóż napisałem program do regulacji poprzez PWM prędkością silnika jednak temat przerwałem i wróciłem do niego po kilku miesiącach i teraz siedze już drugi dzien na tym i nie mogę pojąć czemu program wcześniej działał...
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...
bascom tccr1a tccr1a atmega tccr1a bascom
500gb seagate barracuda ulead studio video radio jedynka
serwer minecraft serwer minecraft
Renault Scenic 1.6 16V - kontrolka przed nagrzewaniem Zamienność tranzystorów KTC3205-Y-AT i 2SC3205