Skocz do zawartości

[Atmega16][C] Walka z Timer1


Pomocna odpowiedź

Napisano

Witam,
dzisiaj po prostu się zawiesiłem. Pierwszy raz wykorzystuje Timer1 w Atmega16 i chciałbym podzielić go na dwa nie zależne 8bitowe kanały z trybem FAST PWM lub PWM (z korekcją fazy).

Zamieszczam poniżej fragment kodu dotyczącego ustawień sprzętowego PWM'u

	TCCR1A |= (0<<COM1A0)|(1<<COM1A1)|(0<<COM1B0)|(1<<COM1B1);	
TCCR1A |= (1<<WGM10);
TCCR1B |= (1<<WGM13);
TCCR1B |= (1<<CS10);		// Preksaler = 1

Widziałem post dondu (link), siedziałem też troszkę z kartą katalogową, ale jednak postanowiłem poprosić o sprawdzenie, ponieważ nie mam pewności czy dobrze zrozumiałem.

A jaką częstotliwość chcesz mieć. Jeżeli to ma być sterowanie to najlepiej 1kHz.

TCCR1A = (1<<WGM10)| (0<<WGM11)| (1<<COM1A1)| (0<<COM1B1);
TCCR1B = (0<<WGM12)| (0<<WGM13)| (0<<CS10)| (1<<CS11)| (0<<CS12); 

To jest konfiguracja dla atmegi 128 ale powinno być zgodne. Tu masz ustawienie dobre do silników przy kwarcu 18 i 16MHz. Masz tu z korekcją fazy.

  • Pomogłeś! 1

No ja chciałbym osiągnąć własnie PWM do sterowania wejściami EN dla L298. Wszystko będę sterował kwarcem 16MHz.

Dzięki za pomoc, jednak godzinka spędzona przy karcie katalogowej dala konkretny wynik.

Pozdrawiam

[ Dodano: 07-07-2011, 20:42 ]

Chciałbym dorzucić jeszcze jedno pytanie, bez zakładania nowego tematu.

Otóż jaki sposób jest najbardziej optymalny do zapisu danych (cyfrowych 0/1) z CNY70.

Mam ich 8 i zastanawiam się czy zastosować tablicę wielowymiarową czy są jakieś inne sposoby? Nie chciałbym bawić się w if/else bo to spowolni robota maksymalnie.

W przypadku tablicy jak mialo by to wyglądać?

uint8_t aktualny_stan[2][2][2][2][2][2][2][2] 

Czy coś w tym stylu jak u góry, jeśli tak to w jaki sposób zapisać dane do poszczególnych komórek?

Po co taka wieeelka tablica? Masz 8 czujników (cyfrowych), więc wystarczy jednobajtowa zmienna. Jeśli masz wszystkie czujniki na jednym porcie, to zastosuj najprostsze

uint8_t czujniki = PINx

Potem, jeśli chceszdostać się do pojedynczego stanu, to przepuszczasz zmienną czujniki przez maski bitowe i jest to bardzo szybki sposób.

Jeśli natomiast nie masz czujników na jednym porcie, to musisz poprzesuwać odpowiednie bity danych portów i przesunięte włożyć do jednej zmiennej. Albo nie bawić się tylko zrobić skróty z #define i odwoływać się bezpośrednio.

  • Pomogłeś! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...