Skocz do zawartości

[Atmega16][C] Walka z Timer1


Keadwen

Pomocna odpowiedź

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.

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.