Treker (Damian Szymański) Napisano Grudzień 3, 2011 Udostępnij Napisano Grudzień 3, 2011 Witajcie, postanowiłem nową konstrukcję zaprogramować w C jednak nie mogę znaleźć rozwiązania jednego problemu. Regulator EDF potrzebuje 50Hz + regulację wypełnieniem, o ile dla 8MHz poniższy kod działa świetnie: DDRE |= (1<<PE3);//EDF jako wyjście TCCR3B |= (1 << CS31);//Preskaler 8 TCCR3A |= (1 << COM3A1) | (1 << COM3B1);// Fast PWM TCCR3A |= (1 << WGM31);//Fast PWM, ICR3 jako góra TCCR3B |= (1 << WGM33) | (1 << WGM32);//Fast PWM, ICR3 jako góra ICR3 = 20000;//50Hz OCR3A = 1100;//Wypełnienie Po zmianie kwarcu i przeliczeniu wartości: DDRE |= (1<<PE3);//EDF jako wyjście TCCR3B |= (1 << CS31) | (1 << CS30);//Preskaler 64 TCCR3A |= (1 << COM3A1) | (1 << COM3B1);// Fast PWM TCCR3A |= (1 << WGM31);//Fast PWM, ICR3 jako góra TCCR3B |= (1 << WGM33) | (1 << WGM32);//Fast PWM, ICR3 jako góra ICR3 = 5000;//50Hz OCR3A = 1100;//Wypełnienie Niestety w tym momencie już nie działa. Nie wiem czy źle coś przeliczam, jednak pewnie jest to bardziej problem z pierwszymi krokami jakie stawiam w C 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
dondu Grudzień 3, 2011 Udostępnij Grudzień 3, 2011 Witajcie, postanowiłem nową konstrukcję zaprogramować w C Poziom idzie w górę - brawo! Jaki masz kwarc w drugim przypadku? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 3, 2011 Autor tematu Udostępnij Grudzień 3, 2011 16Mhz, w kompilatorze i uC przestawione. Cytuj Link do komentarza Share on other sites More sharing options...
dondu Grudzień 3, 2011 Udostępnij Grudzień 3, 2011 Jaki jest objaw "nie działania"? Czy wcześniej w programie używasz timer3 na innych ustawieniach, czy to pierwsze ustawienia po resecie? Generalnie wygląda, że dobrze ustawiasz - drobne uwagi: Sygnał wyjściowy włączasz na pinie OC3A ustawiając go jako wyjście i wybierając tryb Clear OC3A on compare match, set OC3A at BOTTOM, (non-inverting mode) ale za pomocą: TCCR3A |= .... (1 << COM3B1); włączasz także Clear OC3B on compare match, set OC3B at BOTTOM, (non-inverting mode) , ale nie włączasz tego pinu jako wyjście (DDRE). Czy tak chciałeś zrobić? Dodatkowo komentarz sugeruje zupełnie coś innego niż faktycznie te bity ustawiają: TCCR3A |= (1 << COM3A1) | (1 << COM3B1);// Fast PWM Te bity nie ustawiają trybu FAST PWM, ale to mało istotne. 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
Treker (Damian Szymański) Grudzień 3, 2011 Autor tematu Udostępnij Grudzień 3, 2011 włączasz także Clear OC3B on compare match, set OC3B at BOTTOM, (non-inverting mode) , ale nie włączasz tego pinu jako wyjście (DDRE). Czy tak chciałeś zrobić? Drugiego wyjścia nie używa, zostało to z poprzedniego kodu. To są pierwsze ustawienia tego Timera. Ciężko mi określić "co" nie działa bez oscyloskopu później spróbuje coś miernikiem jeszcze posprawdzać jednak byłem (w sumie nadal jestem) przekonany, że to jednak coś w ustawieniach, bo skąd ta poprawna praca przy 8Mhz. Możliwe, że całkiem coś tutaj poplątałem, a działanie przy 8Mhz jest przypadkiem. Cytuj Link do komentarza Share on other sites More sharing options...
dondu Grudzień 3, 2011 Udostępnij Grudzień 3, 2011 No to poczekamy na oscyloskop. O ustawienia poprzednie pytałem, ze względu na sposób, w którym ustawiasz bity w C, gdyż czasami zapomina się o tym, iż w danym rejestrze już jakieś bity ustawiałeś. No ale skoro to po resecie to nie ma problemu, bo bity w tych rejestrach są zerowane. Patrząc w datasheet i Twój kod - wygląda OK. Jeszcze pytanie tak na wszelki wypadek: W opcjach projektu masz wybraną ATmega128? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 3, 2011 Autor tematu Udostępnij Grudzień 3, 2011 Tak, jest M128 ustawiona. Co do pomiarów to mogę jedynie miernikiem coś pomierzyć bez oscyloskopu. A może ja coś źle sobie "wymyśliłem" jak to generować, może powinienem inne tryby Timerów używać? Potrzebuję do tego regulatora sygnał 50Hz, a prędkością silnika mam regulować wypełnieniem (analogicznie jak sterowanie serwami). Cytuj Link do komentarza Share on other sites More sharing options...
dondu Grudzień 3, 2011 Udostępnij Grudzień 3, 2011 Tryb Fast PWM jest jednym z trybów, który możesz spokojnie wykorzystać do tego celu. Oscyloskop masz czy nie? A może port LPT do analizatora? Niestety nie mam takiej ATmegi żeby zrobić test. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 3, 2011 Autor tematu Udostępnij Grudzień 3, 2011 Oscyloskop masz czy nie?A może port LPT do analizatora? 2xNie. Jedyne co mogę to częstotliwość miernikiem sprawdzić, ale to później. Dam znać co udało mi się sprawdzić. Tak dla formalności, JTAG wyłączony, tryb zgodności też wyłączony. Cytuj Link do komentarza Share on other sites More sharing options...
dondu Grudzień 3, 2011 Udostępnij Grudzień 3, 2011 Ale kartę dźwiękową masz? Jeżeli tak to darmowe oscyloskopy: http://mikrokontrolery.blogspot.com/2011/04/darmowy-oscyloskop-i-analizator.html Cytuj Link do komentarza Share on other sites More sharing options...
kling Grudzień 3, 2011 Udostępnij Grudzień 3, 2011 //Ustawienie wyjsc DDRB |= (1<<PB6) | (1<<PB5); DDRE |= (1<<PE4) | (1<<PE3); /** * Konfiguracja timerow 1 i 3: * prescaler = 8 * tryb = Phase and Frequency Correct mode * ustwienie wyjsc OC1A, OC1B, OC3A, OC3B */ TCCR1A = (1<<COM1A1) | (1<<COM1B1); TCCR3A = (1<<COM3A1) | (1<<COM3B1); TCCR1B = (1<<WGM13) | (1<<CS11); TCCR3B = (1<<WGM33) | (1<<CS31); //Wartosc TOP ICR1 = 20000; ICR3 = 20000; Ja używam takich ustawień timera do sterowania czterema regulatorami modelarskimi. Sygnał o okresie 20ms, do OCR'ów wpisujesz wartości w mikrosekundach. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 3, 2011 Autor tematu Udostępnij Grudzień 3, 2011 kling, dzięki - Twoje rozwiązanie się sprawdziło. Cytuj Link do komentarza Share on other sites More sharing options...
fish Grudzień 3, 2011 Udostępnij Grudzień 3, 2011 Treker, przez regulator EDF masz na myśli regulator silnika bezszczotkowego, który wykorzystujesz w EDFie, tak? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 3, 2011 Autor tematu Udostępnij Grudzień 3, 2011 fish, tak 🙂 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!