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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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