Kod łatwiej byłoby analizować gdybyś dał komentarze. Bez tego trzeba szukać w nocie jaki preskaler ustawiłeś. Kod nie zadział z każdym serwomechanizmem. Okres powtarzania impulsów ma ok 4ms a powinien być ok 20ms. Na timerze 8 bit będzie jeszcze gorzej. Gdy ustawisz 16ms (więcej się nie da) to rozdzielczość wyniesie 64us. Zakres regulacji to od 512us...
Witam, Przeszukałem całą elektrodę i nie mogę znaleźć odpowiedzi na pytanie (jeśli źle szukałem przepraszam ;]): " Jak do licha sterować ruchem serwa-potencjometrem przez AVR " Czy muszę mieć osobny sterownik serwomechanizmów czy da się to rozwiązać programowo?. Jestem w fazie projektowania mechanicznego ramienia składającego się z 3-4 serw modelarskich(Tower...
Tu masz taki szkic jak to może wyglądać. Pierwsze naciśnięcie powoduje zapisanie numeru serwa w zmiennej i zmianę stanu. Ponieważ w Case zostało dopasowane jedno to cala reszta zostanie pominieta do następnej pętli. Czyli w nastepnym obiegu klawisz wybiera juz numer modułu bo poprzednio zmienil sie stan. Wybiera się numer modułu i znów stan sie zmienia...
Wywal inicjalizacje uarta i wszystko co jest w while(1) - tak żeby była pusta pętla. Nie wiem co to jest timerinit. Jak nie jest on wykorzystywany przez kod serwa to też to wywal. Zacznij po prostu od czystego kodu serwa i jak on będzie działał ok to zacznij krok po kroku dodawać resztę. W zależności od realizacji obsługi UARTa może on blokować procesor...
Trzeba mierzyć czas impulsu i jeśli wynik = ileśtam to wtedy dzieje sie cośtam Może : $regfile = "twój uP" $crystal = twój crystal Config Timer1 = Counter , Edge = Rising Config Portc = Input Do If Portc.1 = 1 Then Start Timer1 If Portc.1 = 0 Then Stop Timer1 End If End If For Timer1 = 100 To 200 Reset Porta.1 Next For Timer1 = 300 To 600...
I to juz bedzie caly program?? A po co jest te NoSound na koniec?? Cały (pamiętaj tylko, że zmienne są 16 bitowe czyli przypisania czy odejmowania muszą być 16 bitowe). Oczywiście można ograniczyć się do 8 bitów dla uproszczenia. W programie podałem częstotliwości. W docelowym programie musisz zapisać podzielniki = ftakt/f; gdzie ftakt - częstotliwość...
http://obrazki.elektroda.pl/5959558100_1... Witam :) Razem z kolegą chcielibyśmy się pochwalić naszą maszyną :) Jest to ramie robota oparte na serwomechanizmach modelarskich. Ja zająłem się sterowaniem i elektroniką, a kolega robił projekt 3D w SketchUp i konstrukcje http://obrazki.elektroda.pl/9008440700_1... Początkowo...
Program z pierwszego postu jest dobry. No może nie tak całkiem, ale konfiguracja timera jest dobra. Na początek lepiej ustawić wartości bliżej środka szerokości impulsu przewidzianego dla serwa. Czyli zamiast 800 i 2200 np. 1200 i 1800. Później można sprawdzić maksymalne wychylenia. No i wydłużyć czasy przerwy między zmianami OCR1A (np _delay_ms(1000))...
(at)takow kwarc wewnętrzny 8MHz ( przy mniejszym to w ogóle można o sterowaniu w ten sposób), reload=10. zakres 50 do 150 i ani grama mniej ani więcej (mam serwa sanwy i conrada) steruje na raz kilkoma serwami do tego płynne sterowanie mocą silnika + sygnalizacja + komunikacja z innym prockiem po porcie szeregowym i serwa stabilne. ale już pracuje...
Witam Was ponownie. Chciałbym abyście odnieśli się do tego kodu. Steruje na razie 1 serwem stąd atmega 8mhz (aby móc wysterować licznik2 do wartości 20ms) Mam rozumieć, że to jest programowy pwm? A może są jeszcze inne sposoby? #include <avr/io.h> #define F_CPU 8000000 #include <util/delay.h> #include <avr/interrupt.h> int volatile...
Witam Mam problem dotyczący sterowania serwomechanizmami za pomocą PWM przez ATMega8. Pewnie wielu napisze "szukaj w google". No ok, poszukałem i udało mi się wysterować serwomechanizm [syntax=c]#define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> int main(void) { int i,x; DDRB = 0xff; //konfiguracja portow TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1&l...
Zmodyfikowaliśmy program: #include <avr/io.h> #include <avr/interrupt.h> //Prescaller jest ustawiony na 256 przy 16MHz //2.5ms - 0x3E //polozenie poczatkowe - 0x20 - 0d32 - 0.528ms //polozenie koncowe - 0x94 - 0d148 - 2.38ms unsigned char volatile p1[8] = {0x90,0x90,0x90,0x90,0x30,0x30,0x30... unsigned char volatile...
A skąd takie wyliczenia, że tylko 24 ? Mówimy o sprzętowym PWM i parametrach sygnału sterującego, o których napisałem (chyba, że akurat Twoje serwo jest inne). Zakładając, że dałoby się dobrać taką częstotliwość taktowania mikrokontrolera, gdzie (po ewentualnym zastosowaniu jednego z dostępnych preskalerów) 256 taktów timera będzie trwało 20ms (tyle...
Metod to jest milion. Jedną z nich może być jak najbardziej zrobienie tego na procku ATmega8 jak i każdym innym gdyby miał robić tylko to ;) .... Do sterowania serwami spokojnie można napisać własną obsługę programową bez korzystania ze sprzętowych PWMów jeśli jest ich za mało w procku. Tak więc do wyboru do koloru ;) Ja właśnie w tym robociku wykorzystałem...
.. Czy moje założenia są poprawne? Przerwania nie będą potrzebne jeżeli: a)serwo masz podłączone do wyjścia OC1A i nie korzystasz z przechwytywania - tryb Fast PWM(Mode 14) b)serwo możesz podłączyć do wyjścia OC1B - tryb Fast PWM(Mode 15)
dlaczego się nie kręci 1 Bo może już ustawiło się w pozycji odpowiedniej dla 2ms i nie powinno się kręcić? Spróbuj zmienić impuls np na 1ms. 2 Masy połączone? 3 Serwo powinno się sterować timerem, a nie delajami. Ale w celach testowych wyrzuć z pętli obsługę wyświetlacza. Nie wiadomo co w niej jest, może jakieś przerwania rozciągają czasy.
Witam. Kłopot mam następujacy... walczylem dziś z modelarskim servo. Znalazłem program "gotowca" na AVRFreaks. kod poniżej: #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> /**************** Globale variable **************/ static enum {av1,paa1} servo1=paa1; static enum {av2,paa2} servo2=av2; unsigned...
Tak, to przerwania od timerów. W 4 mikrosekundowym powinno być minimum kodu, by się wyrobił
Poprawiłem kod żeby był czytelniejszy i nieco go skomentowałem: [syntax=c] /* układ ATmega88pa-pu 8MHz */ #define F_CPU 8000000 #define BAUD 9600 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <stdint.h> #include <stddef.h> #include <avr/interrupt.h> #include <util/setbaud.h> volatile...
proponuje znalezc mikrokontroler, ktory ma 8 PWMow [; PIC24, dsPIC - dla przykladu... wiekszosc ARMow rowniez ma ich sporo. a jesli sie nie da, to trzeba sobie zrobic na jednym timerze 'impuls' ktory bedzie rozdzielczoscia twojego PWMa - np co 100us. w przerwaniu od tego timera obsluzysz ile chcesz serw. przerwanie bedzie mialo swoje liczniki, ktore...
Moje pytanie brzmi czy "właściwy program" będzie wykonywany co 20ms?? Nie. Będzie wykonywany najszybciej jak się da. Wprawdzie ustawiłeś timer na jego przepełnienie co 20ms, ale nie korzystasz z niego do uruchamiania "właściwego programu". Aby to zrobić powinieneś: 0. zdefiniować zmienną globalną np.: volatile char WYKONAJ_PROGRAM; 1. włączyć przerwania...
Zrobiłem sobie programik pod Atmege8 wychylajacy serwo w jedna strone. Wiem, ze PWM można zrobić w pełni sprzętowo, ale jeszcze do tego nie doszedłem. #include <avr/io.h> #include <avr/interrupt.h> int b=0; int main (void) { DDRB |= (1 << 0); // Set LED as output TCCR1B |= (1 << WGM12); // Configure...
Witam mam następujący problem, napisałem coś takiego do obsługi PWM'a: ; pozycja środkowa 0x005A - 1,41 ms ; pozycja lewa 0x0022 - 0,53 ms ; pozycja prawa 0x0093 - 2,29 ms ; częstotliwość PWM 61Hz .include "m32def.inc" .EQUSYS_FREQ = 1 .DSEG .org 0x0060 .CSEG .org 0x00 reset: ldi r17, high(RAMEND) ldi r16, low(RAMEND) out...
A gdzie "wsiąkła" procedura obsługi przerwania TIMER1_COMPA_vect :?: Piotrek
Nie tak, możesz użyć dowolnych portów, tyle że musisz sterować nimi programowo, z przerwań od timera. To będzie bardziej skomplikowane niż aktualny kod, ale w sumie nic specjalnie trudnego.
Widziałem Twój sterownik. Pomogłoby mi gdybyś mógł dosyć szczegółowo opisać dwa przerwania timera1 i 2 oraz dlaczego takie a nie inne ustawienai liczników? Czy dobrze widzę,ze do odmierzania impulsów używasz licznika/timera2 czyli 8bit? fajnie byłoby gdybym miał jakieś odniesienie do dalszej pracy, bo musze obsłużyc w sumie 6 serw z dokladnoscia ok...
no tak, w sumie nie pomyślałem ;/ pętla ta działa ale ruch serwa jest skokowy, chyba że znacznie wydłużę albo skrócę pierwsze opóźnienie. Da radę jakoś temu zapobiec? w ofercie avt jest kit spowalniacz, gdzie wspomniane jest że do wykonania spowolnienia użyto timera. niestety nie wiem jak te informacje wykorzystać...
Witam, od kilku dni próbuję wygrać nierówną walkę z programowym pwm i usartem na atmedze8. Wysyłam z nadajnika dane za pomocą USART (sprawdzane wielokrotnie na bank są dobre) do płytki z atmegą i serwomechanizmem. Jeżeli serwo jest sterowane bez ingerencji danych z USART to wszystko działa jak trzeba, w momencie gdy chcę wysłać gotowe dane do płytki...
A tu: http://www.elektroda.pl/rtvforum/topic20... Masz na jednym Timerze i na 8 serw. Sterowanie z ADC i potencjometrów.
Tak się tego nie da zrobić dobrze - uruchom Timer do sterowania PWM i zmieniaj współczynniki wypełnienia na podstawie poleceń. zapomnij o pętlach z "delay"!
...Ja zapytam - dlaczego ? pytam powaznie . W skrócie: Procedura przerwania od Timer0, która steruje serwami, powinna być wywoływana co 10uS, a faktycznie jest wykonywana co 10uS+czas jej wykonania.Czym wolniejszy $crystal i więcej zadeklarowanych serw, tym gorzej :(
Witam, posiadam serwomotor marki SKF motion. Silnik ma maksymalne obroty równe 3300 rpm, napięcie to 90V. Silnik kupiłem na aukcji i niczego się o nim więcej dowiedzieć nie mogę. Ma z tyłu zamontowany enkoder, ma cztery wyprowadzenia. Doszedłem które jest do czego, na oscyloskopie sprawdziłem że działa. Napisałem sobie teraz obsługę enkodera na Atmega8....
[syntax=basic4gl]$regfile = "m328pdef.dat" $crystal = 16000000 '*** Timer0 Config for 500Hz Interrupt CTC Mode *** Config Timer0 = Timer , Prescale = 256 , Compare A = Disconnect , Compare B = Disconnect , Clear Timer = 1 Enable Compare0a : On Compare0a Int0_isr : Compare0a = 249[/syntax] Kompiluje się bez problemu. Co do ustawienia na rejestrach. Napisałem...
Witam, nie znam się, ale możesz na szybko spróbować na jednym timerze liczącym do 2.5ms z przerwaniem porównania przy wartośći dla serwa gdzie ustawiasz stan niski i przepełnienia, gdzie zmienisz serwo na kolejne, ustawiając wyjście serwa na wysokie i nową wartość porównania. W pętli głównej zmieniasz tylko wartości dla serw. Pewnie słaby sposób, ale...
Jeśli chodzi o kod to jest ok - z wyjątkiem return 0. W AVR ponieważ nie masz OS, main nie poiwnien się kończyć. W tym przypadku PWM generujesz sprzętowo więc return 0 nic nie zmienia, ale ogólnie bym się tego wystrzegał. Hmm, sądzę, że jeśli tego return 0 by nie było kompilator powinien wywalić warning. Albert avr-gcc nie jest głupi i już nie zgłasza...
Mój serwomechanizm bardzo mnie zaskoczył. Otóż okazało się, że PID oscyluje wokół wartości 1023 / 2 a nie jak było wcześniej wokół zera. Prawdę mówiąc to zadziałało przez jakiś przypadek ;) Stało się to od momentu gdy zacząłem sterować końcówkę mocy dwoma przebiegami PWM (odwrotnymi). W tej chwili rozszyfrowałem zasadę działania i wygląda na to, że...
"z tym serwem są problemy" - może uszkodzone, ja mam sześć sztuk TowerPro (może nie ten model) i wszystkie działają, tylko trzeba im sygnał podać. Co do sterowania: http://mil.ufl.edu/~achamber/servoPWMfaq... Jeszcze sugestia żeby serwo i układ zasilać osobno ze wspólną masą. Kod, zaznaczam że pisany dawno i NIE PAMIĘTAM CZY DZIAŁA!! (chyba lepsze...
Witam, próbuję wygenerować atmegą sygnał PWM sterujący serwomechanizmem. Mam jednak problem z prawidłową konfiguracją timera. Sygnał powinien mieć okres 20ms i w tym czasie należy zmieniać szerokość jedynki. Problem w tym że atmegę taktuje 16MHz i nie mogę uzyskać dokładnie 20ms. Z tego co rozumiem częstotliwość PWM mogę dobrać jedynie poprzez dobór...
Witam poniżej przedstawiam kod programu za srednikami jest poustawiany timer 16 bit który steruje serwomechanizmem z modeli RC i działa wszystko poprawnie (wyjscie OC1A do serwa) natomiast ja chcialbym to serwo wysterować 8 bitowym wyjscie (OC0/t0 pin1 do serwa) I niby wszytsko dobrze posutawialem ale serwo ani drgnie dlaczego? #include "avr.inc"...
Witam Krąży mi po głowie pomysł aby w motorku zbudować obrotomierz, chciałem wykorzystać Bascoma+Atmega8. Atmega może pobierać impulsy z czujnika halla który daje ładny prostokąt wiec nie ma problemu z zakłóceniami. Timer by liczył ilość impulsów przez 250ms a następnie po przekształceniu wzorami odpowiednimi podawał by na wyjście PWM na którym będzie...
Witam, W swoim programie chcę dodatkowo obsłużyć serwo modelarskie. Z powodu natłoku obliczeń chcę wykorzystać sprzętową obsługę Timera2 (na pin PD3). Niestety pozostałe Timery też mam zajęte. Jednak dla Atmegi328 z 16MHz wychodzi, że Timer2 może pracować najwyżej na 61Hz co może być za duże dla serw które lubią 50Hz. W tej chwili gdy mam 61Hz to serwo...
1) cyt: to jest całkiem inna bajka - ale co konkretnie Doktorze? 2) ramka 20ms w serwomechanizmach modelarskich może być niedokładna, nie ma znaczenia dla pracy dekodera, służy tylko do synchronizacji czyli określenia początku ramki i może być nierównomiernie wysyłana nawet kolejna ramka. Ważne są tylko impulsy poszczególnych serw. 3) czyli niepotrzebnie...
przeciez to jest tylko inicjalizacja timera, pozniej on sobie biega juz sam, ten kod wykonywany jest tylko raz . Myle sie ?
Dzięki Marcin za odpowiedź. W sobotę kupiłem TowerPro SG-5010, bo tamte, faktycznie za delikatne były, jak mi sprzedawca w sklepie pokazał (prawdziwe mini) ;-) Uruchomiłem serwo bez problemów. Sterowanie sygnałem z regulatora PI zbudowanego na Atmega16. Jedynie problem mam tego typu, że przy korzystaniu z drugiego timera Timer1 (Timer0 wykorzystuje...
Witam. Na wstępie chciałbym zaznaczyć, że jestem kompletnym nowicjuszem jeśli chodzi o mikrokontrolery, więc proszę o wyrozumiałość. Chcę wykonać model [url=http://en.wikipedia.org/wiki/Delta_... Delta z prostym sterowaniem (jeżdżenie po osiach XYZ). Jako napędy planuję użyć 3 serwa. Ostatnie kilka dni poświęciłem na dokształcanie się w zakresie...
Witam. Tworzę sobie programik do sterowania 16 serwami. wykorzystuję 2 timery timer2 generuje przez przerwanie odstępy 2.2ms. każdy impuls to obsługa 2 serwów, więc aby odsłużyć wszystkie mamy 8 impulsów(18.4ms) więc impulsy na serwo powtarzają się częściej niż te 20ms. więc tu jest dobrze. Timer 2 steruje timerem1, blok A obsługuje pierwszą 8 serw,...
Niestety żadnego potencjometru nie mam pod ręką. A może będzie prościej skorzystać z programowych PWM? Mam taki kod: http://obrazki.elektroda.pl/1002534200_1... Co jest źle?
Witam. Napisałem sterownik do serwa modelarskiego na Atmega 8. Teraz próbuje skomunikować ten sterownik z druga Atmegą 8, aby przesyłać pozycje zerwa z drugiej Atmegi do sterownika. Jednak napotkałem pewne kłopoty. Oto program do drugiej Atmegi: #include<avr/io.h> #include<util/delay.h> #include<uart.c> unsigned char dana=100; int...
Witam Nie rozumiem pytania, nie jestem biegły w programowaniu więc nie wszystko roumiem, ADSC ustawiam na 1 aby rozpocząć konwersje, po co mam czytać flage ADSC? Zauważyłem jeszcze jedną istotną rzecz, mianowicie jak podłączam zewnętrzne zasilanie, czyli nie zasilam układu z programatora to serwo gubi się szybciej. Program napisany na pwm również nie...
Proponuje zamknac temat problem rozwiazalem z pomoca ksiązki Pana Wiązani. Wspomina on tam że dobór parametru reload zależy od podanego kwarcu. Szkoda ze tak cieżko taką infrmacje wyciągnąć od bardziej doświadczonych kolegów , o dziwo w głębi internetu też jej nie znalazłem. Pozdrawiam i prawidłowy reload to 6 .
Czyli wykorzystywać tylko przerwanie TIMER0_OVF_vect? Próbowałem to zrobić, ale serwa zwyczajnie nie reagują, nie ruszają się - czyli wracam do problemu będącego de facto tematem tego tematu... Reasumując: Wykorzystuję jakiekolwiek przerwania? (jakie?) Jak realizuję pozbycie się "drgań" serwomechanizmów? (próbowałem zarówno sposobem BlueDraco, jak i...
Witam Nie znam C ale ciągle na forum robicie błąd pisząc że serwo steruje się sygnałem PWM, sterowanie powinno się odbywać sygnałem o szerokości około 1-2ms i stałym okresie powtarzania 20ms. Pierwsze doświadczenie, zmieniamy przy PWM okres powtarzania na 15ms, PWM się nam nie zmienia a szerokość impulsu sterowania serwa bardzo. Przydałoby się sterować...
Nie o to chodziło. Miałeś zrobić tak: [syntax=c] cli(); if(TCNT1 > servo1) PORTD &= ~SERVO1; //nakierowanie mechanizmu przerwania if(TCNT1 > servo2) PORTD &= ~SERVO2; if(TCNT1 > servo3) PORTD &= ~SERVO3; if(TCNT1 > servo4) PORTD &= ~SERVO4; sei(); [/syntax] Jeśli to nie pomoże to zrób tak: 1. Na timer1 włącz PWM sprzętowy w tryb Fast PWM, 10-bit (Mode...
Poszukaj software pwm. Na elektrodzie znajdziesz o sterowaniu serwami tematy. Można to zrobić na kilka sposobów,np możesz uruchomić timer co ułamek 20ms i sprawdzać jak do tej pory, ew każde serwo osobno z licznikiem liczącym do np 4ms. Zobacz: http://www.elektroda.pl/rtvforum/topic30...
Witam. Zrobiłem sterownik z ATmega8 do sterowania dwoma serwomechanizmami za pomocą pilota RC5. Program napisałem w Bascomie. Jeśli chodzi o zasadę działania serwa to w jednym z opisów znalazłem, że co 20ms należy podać stan wysoki o odpowiedniej szerokości (czyli częstotliwość jest stała). W Bascomie do obsługi serwa wykorzystywany jest 8-bitowy Timer0....
Witam Chcę się pochwalić moim pierwszym działającym w pełni robotem. Jest to Waldek Światłolub, ale zbudowany na uC ATmega8 i serwach. Jeśli ktoś nie wie jak działają: jeździ po podłodze a jak się poświeci latarką przed niego to kieruję się w stronę odbitego od podłogi światła. Konstrukcja nośna oparta o płytkę z laminatu, rzepy i taśmę dwustronnie...
Witam chcialbym zrobic sterowanie serwem na Timer0,serwo standardowe - 50Hz, sterowanie 1-2 ms. wiem ze 8 bitow troche to ogranicza. Nie wiem jednak jaki tryb pwm wziasc,jaki preskaler i jak ustawic zliczanie.. prosze o naprowadzenie. Dodano po 3 Mogłbym odmierzac np 1,5 ms na timerze ,zmieniac stan,pozniej 18,5 ms i znowu stan zmieniac,wlasciwie chyba...
Ja się dziwię dlaczego nie używasz timer'a do dokładnego odmierzania czasu... Przecież po to one są...
Witam. Jak zaczynalem pracowac nad hexapodem ciezko bylo mi znalezc jakis krotki i w miare przejrzysty kontroler serwomechanizmow. Napisalem taki, plus mozliwosc sterwania serwami przez RS232. Wklejam je tutaj i mam nadzieje ze sie komus keidys przyda:) Algorytmy sa dosyc proste, jak by ktos chcial to moge wytlumaczyc jak co dziala zeby mozna bylo przystosowac...
Witam szanowne forum, nie jestem zagorzałym modelarzem jednak udało mi się popełnić projekt sterowania serwomechanizmami do helikoptera T-REX 600. Przedstawiony poniżej układ ma za zadanie z wykorzystaniem interfejsu USB -> FT232 -> Atmega 8 sterować wychyleniem serwomechanizmów oraz docelowo prędkością obrotów silnika bez-szczotkowego RCM BL650L za...
........, a podpowiedzcie mi jak mogę obsłuzyc Rc5,serwo i pwm? Pozdraiwam Dla obsługi RC5 i kontroli serva użyłeś w sumie 2-ch timerów... ATMega8 posiada wbudowane 3 timery , zastosuj więc ten trzeci do 'produkcji' PWM''. Jeżeli ten ostatni (dotychczas wolny) jest Timer1, to ma on dwa kanały dla PWM, na których możesz generowac praktycznie dwie różne...
dzięki za odpowiedz, co do użycia innego timera to nie bardzo, bo chcę mieć regulowane serwo w 1024 krokach, więc na 8 bitowym timerze się nie da.... z kolei input capture wystarczył by mi 8 bitowy, niemniej tej opcji 8 bitowe timery nie mają ;( wiec nie bardzo się da, chyba tylko większą atmege128 w to wsadzić.... pozdrawiam Krzysiek
Wrzucam moją wersję programu do obsługi 4 serw. W ostatnim tygodniu zakupiłem swoje pierwsze dwa serwa, więc mogłem się pobawić problemem ich sterowania. Z powodu, że mam tylko dwa, jedynie dwa kanały są sterowane z przetworników ADC. Pozostałe są obsługiwane przez przerwania, ale nie ustawiane. Wartości dla serw wpisuje się w tablicy serwa_val[]. Doświadczalnie...
Jeśli to zwykłe serwo modelarskie to interesują cię tylko impulsy 1ms i 2ms co 20ms. Spokojnie można to zrobić na przerwaniach od dowolnego timera. PWM tu trochę nie bardzo pasuje. Edit: Muszę się poprawić - 0,3ms i 2,3 ms co 20ms
... macie pomysł jak to rozwiązać? Zrób to, jak nakazuje zdrowy rozsądek :!: Wykorzystaj np. timer1 w trybie 14, a serwo podłącz do wyjścia OC1A(PD5), bo to co Ty teraz wyrabiasz, to jest ... tragedia :cry:
Witam. Jestem początkujący jeżeli chodzi o mikrokontrolery. Chciałbym prosić kogoś bardziej doświadczonego o sprawdzenie poprawności mojego programu. Działanie: Sterowanie 3 silnikami BLDC i 1 serwo za pomocą PWM. uC otrzymuje przez UART literę oznaczającą funkcję, następnie ma ją zrealizować. Silniki podłączone będą przez regulatory modelarskie, a...
ATmega324PA jak napisałem w pierwszym poście. Schemat w załączniku. Inicjalizacja IO: [syntax=c] #define SHCPon DDRA |= _BV(0);PORTA |= _BV(0); //SCK/SRCLK pin 11 ////////////////////////////////poprawić połączenia na płytce #define SHCPoff DDRA |= _BV(0);PORTA &= ~_BV(0); #define DSon DDRA |= _BV(3);PORTA |= _BV(3);//SI/SER/DS pin14 #define DSoff...
Tak jak w temacie. Chciałem użyć 16-bitowego PWM na Timerze1, Poprzednio na ATTiny13 zrobiłem i serwo działało bez zarzutów (oczywiście 8-bitowy timer) Tu pocę się i nie działa: void initPWM() //inicjalizacja timera { //OCR1A = 40000; OCR1AH = 40000>>8; OCR1AL = 40000 & 0xFF; //TOP = 40000 TCCR1A = (1<<WGM10) | (1<<WGM11)...
Jeżeli chodzi o schemat to jest pewien kłopot. Nie robiłem tego układu na uniwersalnej płytce drukowanej czy coś podobnego. Jestem szczęśliwym posiadaczem [url=http://www.sklep.propox.com/index.p... ewaluacyjnego na którym chce najpierwsz zrobić, przetestować i mieć prawidłowo działający układ a później do niego zaprojektować...
Aha. rozumiem. Może ja wkleję kody programów dla lepszego zrozumienia całości problemu. Dodano po 2 Program do pierwszej atmegi, wysyłającej sekwencje 4 danych co 20 ms #include<avr/io.h> #include<util/delay.h> #include<uart.c> #include<HD44780.c> #include<stdlib.h> unsigned char dana[4]; int i=0; void Dana_Init()...
A jak tmf wyobrażasz sobie zrobienie tego na samym liczniku timera? Wtedy cała pętla główna w programie jest zajęta, jeśli myślimy o takim samym algorytmie... Nie wiem cy to dobry pomysł, ale można by umieścić całą obsługę PWM w przerwaniu od timera... Poza tym mam takie pytanie do kolegów posiadających większą wiedzę ode mnie, co jest szybsze - sprzętowy...
Zmiana wypełnienia w przerwaniu jest standardową praktyką przy wykorzystywaniu PWMa. AVR ma bufor, który dba o to aby nową wartość PWM wpisać w odpowiednim momencie więc nie można mówić o tym, że to standardowa praktyka Można mówić, bo nie chodzi wyłącznie o wyeliminowanie glitchów przy zapisie. Chodzi też o synchronizowanie zapisów jako takich. Ten...
Te dziwne rzeczy o których piszesz w swoich postach, to po prostu efekt pisania blokujących się programów. Otóż odpalając funkcję _delay() na okres czasu jaki ma odmierzyć, zatrzymujesz procesor, który wtedy mieli bezproduktywnie w kółko, nie robiąc nic poza tym. Do tego, jeśli nie wyłączysz przerwań na czas wejścia w _delay(), przerwania przerywają...
Witam Wszystkich, To mój pierwszy post na forum, jakoś jak do tej pory wszystkie odpowiedzi udawało się znaleźć. Ale pojawił się następujący problem: Wykorzystuje ATmega8 do sterowania trzema serwami (jeden timer-jedno serwo). Z samym sterowaniem na przyciskach wszystko jest ok i nie to jest problemem. Nie wiem jak sobie poradzić z transmisją danych...
Męczę sie już z tym 3 dni i nie mogę wyłapać błędu , jak na AtMedze8 podobnie pisałem to wszystko działało elegancko , a na 32ce serwo nie chce się ruszyć. 16 MHz [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> #include <avr/interrupt.h> #define F_CPU 16000000UL #define czekaj...
Ok. Zrób tak. Jeden timer przepełnia się co 20ms - generuje odstępy pomiędzy impulsami sterującymi serwem. Po każdym przepełnieniu odpalasz drugi timer który przepełnia się co czas równy rozdzielczości sterowania serwem i wysterowujesz wszystkie linie sterujące serwami na 1. W timerzeod rozdzielczości inkrementujesz jakąś zmienną pomocniczą, np. licznik....
Freddie, ok wiem, ze to zależy od czasu działania przerwania uartu. Przeciez z tego co napisałem łatwo wywnioskować, że przerwanie od uartu jesli nastąpi miedzy przerwaniami od pwm'a to wymaga szybkosci takiej aby zakończyło się przed następnym wywołaniem przerwania od timera. ale opoznienie miedzy bajtami musze zrobić jakoś inaczej. Pomożecie? a Co...
Witam, W Arduino posiadam 6 sprzętowych kanałów PWM. Jednak potrzebuję obsłużyć ich 7. Podpowiedziano mi, że mógłbym użyć dekodera (np. BCD -> DEC), jednego timera i przerwaniami obsługiwać kilka serw. Zacząłem kombinować i stworzyłem większy niż kilkulinijkowy kod, który kompletnie nie działał. Zacząłem go stopniowo upraszczać, aż doszedłem właściwie...
Pomóż mi lepiej zrozumieć. Po "PWM" powinien być przecinek? Pomiędzy "liczyć" a "gdy" powinna być kropka? Tak jak mówisz po PWM przecinek pomiędzy liczyć a gdy postaw kropkę. "Gdy wartość rejestru TCNT przekroczy wartość zapisaną w rejestrze wtedy..." Zapisaną, w którym rejestrze? W OCRn? Tak w rejestrze OCRn. Zatem, jeżeli dobrze zrozumiałem: 1. Ustawiam...
Witam. Zacznę od tego, że jestem amatorem/początkującym więc moje programy gównie opierają się na tym co znajdę w internecie + jakaś znikoma wiedza :) Chciałem zrobić sterowanie serwem w zależności od temperatury. Założenia: -Mikrokontroler atmega8 -Pomiar temperatury DS18B20 -Sterowanie serwem "binarne" dwa wybrane przeze mnie położenia do sterowanie...
Witam Mam problem z sterowaniem serwomechanizmem. Zrobiłem program który działa na mniejszych serwach TowerPro SG-90. Ale gdy podłącze serwomechanizm MG996r to po parokrotnym szybszym poruszaniu serwa serwo się zacina i kręci w jedną stronę. Zakres sygnalu do sterowania serwem to 190-240. Bardzo proszę o pomoc z góry dziękuję niżej wklejam cały mój...
Witam, Mój problem jest dziwny. Mam przetestowany układ na płytce stykowej, program też działał bez zarzutów. Wykonałem PCB złożyłem, ATmega normalnie została zaprogramowana i reaguje. Zczytałem pomiary temperatury przez UART- też działa. Obecnie sterowanie jest dwustanowe, docelowo będzie PWM i PID. A teraz moje 2 problemy: 1) Sterowanie MOSFETEM....
Witam. Jak widać jest to mój pierwszy post na tym forum. Na wstępie chciałbym prosić o wyrozumiałość - jeżeli temat znalazł się w nieodpowiednim miejscu, popełniłem jakiś błąd w składni tytułu czy coś tego typy, prosiłbym moderatora o poprawkę i pouczenie jak w przyszłości uniknąć powielenia problemu. Jestem w trakcie pisania pracy inżynierskiej dotyczącej...
No właśnie tego się obawiałem. Timer1 ogarnąłem ale obydwa wyprowadzenia wykorzystuję do sterowania podwójnego mostka H. Wiem, że można napisać program w C na AVRy do sterowania serwem nie używając PWMa natomiast nie wiem jak to zrobić, żeby pętla nieskończona w której będę miał podawania impulsów na serwo wykonywała się równolegle z inną częścią programu...
Witam, posiadam żyroskop ( piezo-gyro PG-03) Odchylenie podawane jest w postaci impulsów do serwo mechanizmu ponieważ jest to żyroskop modelarski. W jaki sposób można odczytać przez Atmegę 16 wychył tego żyroskopu w Bascomie? Próbowałem z ADC ale poległem, myślałem o wykorzystaniu timerów ale jeszcze za bardzo ich nie ogarniam dlatego zwracam się o...
Podłączałem dwa różne serwa, już bez tranzystora (bo w sumie to tylko sygnał i coś mi się powaliło z tym tranzystorem ;) ), bezpośrednio na pinie PB0. Na oscyloskopie sygnał wygląda poprawnie, a serwa nie są w żaden sposób blokowane mechanicznie, więc nie wiem gdzie może leżeć przyczyna problemu. Tu jeszcze dorzucam kod na mikro: [code[syntax=c] #define...
Niby wszystko jest w porządku a za żadne skarby nie chce poprawnie działać. Kiedy przy timerze 2 ustawiam wartość prescalera na 256, to wychyla się w prawo, a jak na 1024 to w lewo. Ma to też wpływ na prędkość ruchu i siłę, ale nie rozumiem dlaczego. Poza tym cały czas lekko drży. Na razie używam wewnętrznego oscylatora, bo nie dopatrzyłem i wlutowałem...
Witajcie Konstruuję robota/samochodzik, którego sercem będzie atmega8A, napędem 2 przerobione serwa TowerPro SG 5010, a kamerą(telefonem) będzie obracało tanie mikroserwo. Serwa od napędu będą sterowane przez sprzętowy 16 bitowy timer , który ma dwa wyjścia (OC1A, OC1B). Tutaj nie ma żadnego problemu. Serwo kamery mógłbym obsługiwać przełączając na...
O ile pamięć nie myli: Me=k•Ψ•It k - stała konstrukcyjna ψ - strumień wzbudzenia It - prąd twornika Z tym obcowzbudnym do serwonapędu robota to tak średnio. U mnie w szkole na dyplomówce gość puszczał zegar(timer), żeby odłączyć wzbudzenie w razie braku pracy przez jakiś czas. Oczywiście był to układ nietrzymający pozycji (momentu)...
Witam Chcę zrobić taki przełącznik jak w linku, oczywiście nie musi to być smd potrzebuje: 1. Program (najlepiej na atmega8) 2. jakiś schemacik ideowy do takiego włącznika Dla was napisanie takiego programu to pewnie jakieś 5 minut ja jednak nienajlepiej sobie radzę z timerami dlatego zwracam się do was na forum. Oto ten link http://www.nastik.pl/elektroniczny-przel...
Witam w przypadku mikrokontrolerów jestem początkujący więc proszę o wyrozumiałość. Próbuję wysterować 2 serwa za pomocą PWM z pierwszym poradziłem sobie na timerze 1 OC1A i wszystko ładnie chodzi jednak niemam pojęcia jak ustawić drugi (OC1B). Serwa są już przerobione na 360*, generalnie chodzi o wysterowanie czy mają się oba kręcić w lewo,prawo lub...
Mam mały projekt do zrobienia, którego głównym celem jest po naciśnięciu przycisku uruchomić sekwencję sterującą serwomechanizmem, a na koniec włączyć buzzer. Wygooglowałem tutoriala z gotowym już kodem, który zacząłem dostosowywać do moich wymogów, lecz napotkałem małe przeszkody. Może na początek kod, który już mam: http://obrazki.elektroda.pl/4621961000_1...
Witam, jestem w trakcie budowy robota. Będzie to połączenie line follower'a z robotem, którego zadaniem będzie omijanie przeszkód. Jako czujniki linii zastosowałem TCRT5000, a moduł odpowiedzialny za wykrywanie przeszkód to dwie diody IR oraz odbiornik TSOP. Częstotliwość dla diód generowana jest przez ATTiny13A. Która wysyła sygnał na piny PD2 i PD3...
Dziękuję za podpowiedzi. Co do uwagi MirekCz: 1) Poniżej kod, który próbowałem,m wszystko na Atmega8, z wewnętrznych oscylatorem (1Mhz): define F_CPU 1000000 #include <avr\io.h> #include <avr\delay.h> //Main int main() { DDRC = 0xffff; int a; while(1) { //Próba wychylenia serwo w jedną stronę for(a = 0; a <...
Poprostu chce się krok po kroku nauczyć programowania mikrokontrolerów.W internecie znalazłem przykładowe filmiki czy artykuły o migających diodach. No nie jest to za ambitne, chodzi mi o to czy jak już trochę się nauczę czy będzie to można dalej wykorzystywać. Właśnie dlatego zaczyna się od migania diodami, żeby uczyć się krok po kroku. Miganie diodą...
Koledzy mam małą zagwostkę. Potrzebuje rozkodować 2 sygnały ppm - sygnały pochodzące z odbiornika RC do serwa. Sygnał ma taka postać: Poniżej zrzuty z oscyloskopu: Długość impulsu 1.2ms serwo wychylone na maxa w lewo http://obrazki.elektroda.pl/5131828000_1... Długość impulsu 1.9ms serwo wychylone na maxa w prawo http://obrazki.elektroda.pl/6968753000_1...
Witam serdecznie. Mam pewien problem ze zrozumieniem sterowania serwonapędów. Próbuję zaprogramować ruch serwa ( Tower Pro SG-5010) przez sprzętowe PWM. Żyła sygnałowa serwa podpięta do PB1/OC1A , zasilanie 5V, masa wspólna z mikrokontrolerem. Częstotliwość taktowania to 8MHz. Oto mój kod: [syntax=c]#include <avr/io.h> int main() { DDRB = (1<<PB1);...
Zrobiłem jakiś czas temu taki układzik na attiny-13 do sterowania dwoma serwami i linijką diodową pokazującą położenie. Niestety do obsługi dwóch serw trzeba po zaprogramowaniu zablokować ISP: '(Program sterownika dwóch serwomechanizmów. Mikrokontroler Attiny 13. Funkcjonalność: Sygnały Ppm 1 - 2 ms: Sygnał Ppm Serwo1 - Port Pb0 - Pin 5...
http://obrazki.elektroda.pl/4871444500_1... Steropes Witam, chciałem przedstawić robota klasy linefolower. Pracowałem nad nim w wolnym czasie około roku wliczając różne wersje. Jak zwykle chciałem odejść od stereotypów i głównego nurtu linefolowerów. Głównym celem było, aby robot mógł widzieć linie przed nim, by mieć trochę więcej czasu...
1. Sprawdź jak działa samo serwo po podłączeniu zasilania, a jak po jego odłączeniu. 2. Pokaż schemat. 3. Pokaż kompletny program. 4. Zastanów się, jaki tryb pracy Timer1 włączasz, a w konsekwencji do jakiej wartości zlicza Timer1 i jak to się ma do 1Mhz (którym taktujesz mikrokontroler) oraz standardu sygnału sterującego serwem? http://obrazki.elektroda.pl/3955387700_1...
atmega podłączyć serwo serwo sterować atmega timer atmega przerwa
pompy scania simson kabel stacyjka wtyczka angielska
pralka electrolux ewt1262tdw sprzedaz anteny
Sprawdzenie przewodu między regulatorem a ECU w Ford S-Max Wymiana sprzęgła dwumasowego Opel Meriva B 1.7 CDTI