Keadwen Napisano Lipiec 6, 2011 Udostępnij Napisano Lipiec 6, 2011 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. Cytuj Link do komentarza Share on other sites More sharing options...
Armir Lipiec 7, 2011 Udostępnij Lipiec 7, 2011 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. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Keadwen Lipiec 7, 2011 Autor tematu Udostępnij Lipiec 7, 2011 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? Cytuj Link do komentarza Share on other sites More sharing options...
swierkdeck Lipiec 7, 2011 Udostępnij Lipiec 7, 2011 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. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Keadwen Lipiec 8, 2011 Autor tematu Udostępnij Lipiec 8, 2011 No pomysł z tym bajtem jest o niebo lepszy, że wczoraj na to nie wpadłem. Dzięki wielkie za pomoc. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!