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...
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...
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. 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...
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 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ć...
Wykorzystując tryb Fast PWM musiałbym tak dobrać preskaler itimera i częstotliwość pracy uC aby licznik przepełniał się co około 20ms. Jakiś czas temu widziałem wątek na forum gdzie jeden z forumowiczów próbował uzyskać taki efekt, i z tego co pamiętam nie jest to łatwe, a dodatkowo nie uzyskam tego na pewno z kwarcem 16Mhz, tak aby reszta programu...
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...
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...
(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...
Bieżący program wygląda następująco: #include <avr/io.h> #include <avr/interrupt.h> unsigned char volatile p1[8] = {0x50,0x90,0x90,0x90,0x30,0x30,0x30... unsigned char volatile p2[8] = {0x90,0x90,0x90,0x90,0x30,0x30,0x30... unsigned char volatile p3[9] = {0x90,0x30,0x90,0x30,0x90,0x30,0x50...
Witam Napisałem prosty program używający timera1 i timera 2 do zliczania częstotliwości, Chciałbym użyć dodatkowo serwa do mojego projektu ale używając intrukcji Servo coś nie tak dzieje się z serwem . Po włączeniu zasilania ciągle pracuje i próbuje przekręcić się o 360 stopni "ciągle pracuje". Kiedy w kodzie spełniony jest warunek i uruchamia się komenda...
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, $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output Config Pind.1 = Output Config Timer2 = Timer , Prescale = 128 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 8 Cls Cursor Off Portd.0 = 1 Portd.1 = 0 Set Portd.4 On Timer2 Czas1s Dim Licz8ms As Byte Dim Wartoscpwm As...
Skupmy się na Twoim sterowniku.. : timer1 (16bit) : ISR(TIMER1_COMPA_vect) { if (pierwszy == 1) PORTA=0; else PORTC=0; TCCR1B=(0<<CS12); TCNT1L=0x00; } ISR(TIMER1_COMPB_vect) { if (pierwszy == 1) PORTC=0; else PORTA=0; } Wiem, że w jednym momencie dajesz ustawienia na dwa serwa, tak jak...
Panowie prośba. Męczę się i męczę i czytam i czytam.... i gdy coraz więcej czytam to się coraz bardziej gubię. Mam wrażenie, że DS od Atmega 168 jest napisany w strasznie zagmatwany sposób. Przejdźmy do sedna: Chcę ustawić końcówkę OC2B by generowało mi na niej przebieg prostokątny o okresie 8ms. No i tu mam problem bo opis z helpa bascoma dla timera2...
Witajcie, Mam do dyspozycji tylko timer 2, chciałbym aby generował on PWM o zadanej częstotliwości (np 2kHz) i wypełnieniu zależnym od wartości w rejestrze. Równocześnie chciałbym aby w kodzie wykonywało się przerwanie z tą samą częstotliwością. Podejrzewam, że da się to zrobić, ale nigdy nie byłem dobry w timery :D Ktoś pomoże?
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...
Witam, Poniżej zamieściłem prosty kod, który nie mogę samemu przetrawić:) Proszę o pomoc . . . void configure_timers() { /* Wpisuje do rejestru GTCCR wartość 1 w bity TSM i PSRSYNC, dzięki czemu mikroprocesor przechodzi w tryb synchronizacji a ja mogę bez obaw konfigurować oba liczniki/timery na raz */ GTCCR = 1 << TSM | 1 << PSRSYNC; //Ustawiam...
Witam Zacząłem sprawdzać przerwanie TIMER1 w trybie przepełnienia. Na symulatorze program normalnie działa jednak w rzeczywistości inaczej. .include "m8def.inc" .equ przyciski = portc .equ in_przyciski = ddrc .equ wyjscie1 = portb .equ out_wyjscie1 = ddrb .equ wyjscie2 = portd .equ out_wyjscie2 = ddrd .equ wys0 = portd0 .equ wys1 = portd1...
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. Mam następujący problem - chciałem użyć timera 2 do pracy asynchronicznej z zewnętrznym rezonatorem kwarcowym (zegarkowym) o częstotliwości 32,768 kHz. Czyli ATmega powinna być taktowana wewnętrznym szybkim oscylatorem, a jedynie ten timer zegarkowym. Kod: #include <avr/io.h> int main (void) { DDRD |= (1 << 0);...
Mam następujący problem, pisze program do zegarka, próbuję odliczać sekundy na timerze 2 w trybie asynchronicznym, podłączyłem kwarc zegarkowy do pinów 7 i 8 plus kondensatory 22pF. Naczytałem się datascheet'a poprzeglądałem przykładowe źródła i wyskrobałem kawałek kodu. Do portu PB0 jest podłączona dioda która ma sygnalizować odmierzoną sekundę. #define...
Witam Zrobiłem sobie zegarek na ATmega8. Ustawiłem wewnętrzny "kwarc" na 8Mhz ale sekunda trwa u mnie krócej o kilkanaście ms i po 1 minucie zegarek śpieszy kilka sekund :/ powiedzcie mi co tu jest źle. przecież preskaler jest dobrze ustawiony. #define cbi(add,bit) ((add) &=~(1<<bit)); #define sbi(add,bit)...
Witam, mam problem z ustawieniem przerwania od timera0 na atmega8, jestem początkujący jeśli chodzi o assembler... Problem leży w tym że, uP jest taktowany z wewnętrznego zegara 1MHz, i jeśli mam ustawiony prescaler na 8 czyli rejestr TCCR0 na 2 to powinienem otrzymać obsługę przerwania co 8us a na oscyloskopie otrzymałem igiełkę co 2ms;/ nie wiem co...
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...
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))...
Tak, to przerwania od timerów. W 4 mikrosekundowym powinno być minimum kodu, by się wyrobił
Napisałem program do obsługi dwóch serw taki: [syntax=c]#define F_CPU 1000000 //częstotliowość pracy uP #include <avr/io.h> #include <inttypes.h> //biblioteka zmiennych int main (void) { DDRD=0xFF; //port d jako wyjscia DDRB=0x00; //port b jako wejscie TCCR1B=0x01; // bez preskalera (1mhz) int servo[24]={1000,2000,3000,4000,0,0,0,0,0...
Już problem rozwiązałem :) Mimo wszytko dzięki za podpowiedzi bo jak zacząłem się przyglądać co się dzieje wg wskazówek to wpadłem na problem przypadkiem, w pliku konfiguracyjnym biblioteki podaje się max i minimalne wychylenie serwa i zamiast wpisać 80 miałem 70 i po prostu serwo obracając się wychodziło poza zakres i program próbował to skorygować...
Dzień dobry! ;) Mam problem z obsłużeniem UARTu wraz z programowym PWM. PWM steruje serwomechanizmem (w przyszłości nawet sześcioma - buduję robota kroczącego). Jego kod zapożyczony jest z forum, a konkretnie z tematu: http://www.elektroda.pl/rtvforum/topic11... W momencie, gdy wprowadzam obsługę UART, PWM przestaje działać. Docelowo przez UART...
...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. 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...
Jesli w symulatorze masz pokazane ze nie jest ustawiony rejestr, to tak wlasnie jest. Zmylic cie moze opytmalizacja, wtedy program dosc "skacze" i nie idzie po kolei. Jesli chodzi o pwm i symulacje, to sobie ja daruj, w avrstudio symulacja timerow jest zbugowana.
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"!
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...
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ć...
Możesz spróbować puścić Timer w trybie CTC. TOP wpisujesz do OCR1A a to co wpisywałeś do tej pory do OCR1A wpisujesz do OCR1B. w przerwaniu od OCR1B ustawiasz wybrany dowolny pin na 0 a w przerwaniu od OCR1A ustawiasz go na 1. Kod więc różni się bardzo niewiele:) Z tym, że trzeba te dwa przerwania dopisać, ale nie są jakieś masakrycznie trudne, bo chyba...
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...
Przychodzi Tobie prostokąt o wypełnieniu ok. 1-2ms co kilkadziesiąt ms. Musisz podłączyć ten sygnał pod przerwanie w atmega i timerem mierzyć czas pomiędzy zmianą sygnału z "0" na "1" a zmianą z "1" na "0". Z tej informacji generujesz odpowiednie PWM. PS. Ze względu na to, że nowsze atmegi mają więcej wyjść PWM polecam np. atmega88 zamiast atmega8.
Zacznij od przestawienia uC na 8 MHz. Mając timer 1 zaprogramowany na dwa przebiegi PWM, w przerwaniu końca okresu odpalaj timer 0 lub 2 zaprogramowany na czas impulsu trzeciego serwa i zatrzymuj go w jego przerwaniu - tak chyba będzie najprościej.
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 Jeśli myślałeś o ATMEGA8 to znaczy, że interesują cię AVRy? Można wziąć coś innego z serii ATMega, dzięki czemu będziesz miał więcej kanałów PWM. Lecz timery w ATMega są dosyć niewygodne (sztywny preskaler)...
A tu: http://www.elektroda.pl/rtvforum/topic20... Masz na jednym Timerze i na 8 serw. Sterowanie z ADC i potencjometrów.
Witam, Magistrala 1-wire posiada dość mocne restrykcje czasowe co do trwania poszczególnych stanów na DQ. Przerwanie Timera, a wiec wykonanie podprogramu związanego z obsługa przerwania, powodowało zmianę długości tych czasów, gdyż są one generowane softwaerowo przez Bascom. Czasem może się zdarzyć że kolizja i tak wystąpi pomimo że teraz wszystko jest...
[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 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...
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...
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...
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...
Witam! Jestem początkujący w tym temacie, od niedawna uczę się programować mikrokontrolery AVR. Po pierwszych programach typu migająca dioda przy użyciu funkcji delay oraz opanowaniu timerów na tyle aby one sterowały diodą chciałbym "oswoić" serwomechanizm : TowerPro SG90. Trochę czytając na internecie oraz oczywiście dokumentacje atmegi328p udało mi...
Witam! Od kilki dni mecze sie z problemem napisania dzialajacego kodu dzieki,za ktorego pomoca bylbym w stanie sterowac serwomechanizmem. Przeszukalem juz chyba wszystkie mozliwe zroodl,a jednak tym razem googli prawdy mi nie powiedzialo :) bo wszystkie kody, ktore znajdowaly dawaly ten sam efekt. A mianowicie majac uP atmega128 - 16 Mhz zewnetrzny...
"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...
........, 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...
http://obrazki.elektroda.pl/5214176000_1... Witam. Przedstawione rozwiązanie powstało z myślą o zdalnym (radiowym) sterowaniu modelem samochodu. Umożliwia płynne regulacje: kierunku (lewo/prawo) oraz prędkości ruchu (przód/tył). Rozkaz typu "włącz/wyłącz" pozwala np. uruchamiać sygnał dźwiękowy (klakson) lub włączać światła. Spośród...
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...
Witam, Szukam i znaleźć nie mogę. Muszę wysterować serwomechanizm. PWM 50Hz i sterowanie wypełnieniem. Problem w tym, że w ATmedze8 Timer1 mam już nieodwołalnie zajęty(odmierza czas, steruje grzałką) chciałbym użyc Timera0 lub Timera2. Przy kwarcu 16MHz i trybie CTC PWM do rejestru OCR2 wpisuję wartość 155 dostaję 50Hz. Teraz moje pytanie: jak wysterować...
Ograniczeń sprzętu się nie pzeskoczy. Tylko jak już robić to programowo to można dla wszystkich trzech serw, kod taki sam, a zostaje jeden timer więcej. Ale powstaje problem pod postacią jitteru wejścia w przerwanie, jeśli mikrokontroler wykorzystuje jeszcze inne przerwania. Ponieważ ATMega ma jednopoziomowy system przerwań zrobi się bałagan. A może...
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...
atmega serwo serwo atmega atmega podłączyć serwo
rejestrator konig centrali pożarowej dallas klucz
malowanie nitro malowanie nitro
Regulacja odprężnika w silniku Andoria S320 Saunier Duval F72 – błąd czujników NTC, różnica temperatur, diagnostyka kotła