Attiny261 i sterownie serwem

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
stratus
-
Posty: 29
Rejestracja: 08 sty 2008, 14:40
Lokalizacja: z poligonu (Wodzisław Śląski)
Kontakt:

Attiny261 i sterownie serwem

Post autor: stratus » 20 sty 2011, 23:53

Witam! Mój problem był nieraz poruszany, ale jak dotąd moje umiejętności programowania nie pozwalają mi tego ogarnąć. Muszę zmusić Attiny261 (z kwarcem 16MHz) do niezależnego sterowania 2 serwami. Sygnał około 50Hz i impuls 1-2ms. Najleszy byłby do tego timer, ale właśnie z nim mam problem :cry: Dodam, że program pisze w C.
Bardzo proszę o pomoc :roll:

Pozdrawiam

keruseykaryu

Post autor: keruseykaryu » 21 sty 2011, 6:21

stratus pisze:Dodam, że program pisze w C.
Żadnego programu tu nie widzę. Najpierw pokaż co napisałeś.

stratus
-
Posty: 29
Rejestracja: 08 sty 2008, 14:40
Lokalizacja: z poligonu (Wodzisław Śląski)
Kontakt:

Post autor: stratus » 21 sty 2011, 16:32

Sam program jest banalnie prosty więc nie ma sensu go tu zamieszczać.

Może trochę inaczej wyjaśnie mój problem:
jestem za tępy, żeby ogarnąć timery w avr i nie mam zielonego pojęcia jak je ustawić, żeby na wyjściu mieć 2 niezależne sygnały 50Hz z impulsem 1-2ms, przy zegarze uC 16MHz.

keruseykaryu

Post autor: keruseykaryu » 21 sty 2011, 19:15

stratus pisze:Sam program jest banalnie prosty więc nie ma sensu go tu zamieszczać.
Czyli oczekujesz od nas gotowca. :P
jestem za tępy, żeby ogarnąć timery w avr i nie mam zielonego pojęcia jak je ustawić, żeby na wyjściu mieć 2 niezależne sygnały 50Hz z impulsem 1-2ms, przy zegarze uC 16MHz.
Program napiszesz SAM czy tego chcesz czy nie.
Jak potrzeba Ci 1 do 2ms to licznik należy tak ustawić by mieć przynajmniej przerwania co 0,5ms (500us) resztę załatwi oprogramowanie. Teraz do pisania! No i przyda Ci się jakiś AVR Timer Calculator, których jest parę do znalezienia na stronach.
Jedna wskazówka. Prescaler ustaw na 64. Reszta Twoja.

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 21 sty 2011, 20:31

A czytales w ogole co jest napisane o timerach w nocie katalogowej?

stratus
-
Posty: 29
Rejestracja: 08 sty 2008, 14:40
Lokalizacja: z poligonu (Wodzisław Śląski)
Kontakt:

Post autor: stratus » 28 sty 2011, 14:44

Jestem właśnie po dokładniejszej lekturze not katalogowych i poradników. Moim zdaniem najlepszym wyjściem byłoby generować sygnał w trybie Fast PWM, bez przerwań itp. Napisałem już proste ustawienia, ale średnio działają... Przy kwarcu 16MHz dałem preskaler 1024.

Kod: Zaznacz cały

TCCR1A |= (1<<COM1A1) | (1<<COM1B1);  
TCCR1A |= (1<<PWM1A) | (1<<PWM1B);              

OCR1A = 24;  
OCR1C = 255;

TCCR1B |= (1<<CS13) | (1<<CS11) | (1<<CS10);  
Nie wiem za bardzo gdzie jest błąd :cry: Moglibyście coś podpowiedzieć?

keruseykaryu

Post autor: keruseykaryu » 28 sty 2011, 17:39

stratus pisze:Napisałem już proste ustawienia, ale średnio działają...
A bardziej szczegółowo? Co nie działa? Przebieg jest inny - jaki?

No i co z ustawieniami portu. Bo tu go nie widzę.

stratus
-
Posty: 29
Rejestracja: 08 sty 2008, 14:40
Lokalizacja: z poligonu (Wodzisław Śląski)
Kontakt:

Post autor: stratus » 28 sty 2011, 18:24

Kod z Ustawieniami portów:

Kod: Zaznacz cały

DDRB = 0xff;
PORTB = 0xff;

TCCR1A |= (1<<COM1A1) | (1<<COM1B1);  
TCCR1A |= (1<<PWM1A) | (1<<PWM1B);              

OCR1A = 24;  
OCR1C = 255; 

TCCR1B |= (1<<CS13) | (1<<CS11) | (1<<CS10);  

Dodam jeszcze, że z musu Timer musi działać tylko na 8 bitach.

Kod działa i serwo się kręci, ale zmiana OCR1A o 1 powoduje albo drganie serwa albo jego szybkie kręcenie w drugą stronę.


EDIT:
Problem rozwiązany! Temat do zamknięcia.

ODPOWIEDZ