logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sterowanie serwem TGe9 na Atmega8 - skokowe ruchy, WinAVR, FCPU 1MHz

student.PB 06 Mar 2012 20:46 9404 28
  • #1 10643220
    student.PB
    Poziom 9  
    Witam serdecznie.

    Borykam się z problemem sterowania serwem (TGe9).Atmega8, język C.

    Pracuję na WinAVR. W makefile jak i podczas kompilacji oprogramowanie mówi, że FCPU wynosi 1MGhz, czyli ICR1 jest wyliczone prawidłowo. Problem polega na tym iż serwo bardzo skokowo idzie do zadanej pozycji. Powolutku małymi szarpnięciami. Na początku myślałem, że mam złą długość sygnału, ale na forum znalazłem wątek z którego wynika, że użytkownikowi właśnie na atmedze 8 taki kod programu chodzi bez problemu. Co najdziwniejsze kiedy ręcznie wychyle je w lewo i daje zasilanie na procesor , idzie ono szybciej do zadanej pozycji niz kiedy wychyle je w prawo. Mimo wszystko obie drogi są wolne i skokowe. Kiedy np zmienie wartość OCR1A na 1000, przyjmuje on inną pozycję, czyli jakby trochę działa prawidłowo, ale niestety trochę nie :P

    Serwo zasilam z baterii 9v puszczonej przez stabilizator 7505, masa wspólna dla mikrokontrolera i serwomechanizmu.

    Będę bardzo wdzięczny za ewentualnie uwagi/propozycje rozwiązania problemu.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 10643287
    janbernat
    Poziom 38  
    I co- takie coś:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    To kompilator tak bez protestu przyjmuje?
    Wklej cały kod w znacznikach SYNTAX bo się nie chce tego oglądać.
    No i pokaż co kompilator Ci napisał.
  • #3 10643653
    sulfur
    Poziom 24  
    A może to jest wina tego, że napięcie zasilania serwa jest inne niż znamionowe ? Ewentualnie prąd, który jest w stanie "na raz" oddać bateria jest zbyt mały - no ale ta teoria jest naciągana...
  • #4 10644088
    student.PB
    Poziom 9  
    -------- begin --------
    avr-gcc (WinAVR 20100110) 4.3.3
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    Size before:
    AVR Memory Usage
    ----------------
    Device: atmega8
    
    Program:     136 bytes (1.7% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    
    
    
    Compiling C: szakal.c
    avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./szakal.lst  -std=gnu99 -MMD -MP -MF .dep/szakal.o.d szakal.c -o szakal.o 
    szakal.c:7: warning: function declaration isn't a prototype
    
    Linking: szakal.elf
    avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=szakal.o  -std=gnu99 -MMD -MP -MF .dep/szakal.elf.d szakal.o --output szakal.elf -Wl,-Map=szakal.map,--cref     -lm
    
    Creating load file for Flash: szakal.hex
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock szakal.elf szakal.hex
    
    Creating load file for EEPROM: szakal.eep
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
    	--change-section-lma .eeprom=0 --no-change-warnings -O ihex szakal.elf szakal.eep || exit 0
    
    Creating Extended Listing: szakal.lss
    avr-objdump -h -S -z szakal.elf > szakal.lss
    
    Creating Symbol Table: szakal.sym
    avr-nm -n szakal.elf > szakal.sym
    
    Size after:
    AVR Memory Usage
    ----------------
    Device: atmega8
    
    Program:      96 bytes (1.2% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    
    
    -------- end --------
    
    
    > Process Exit Code: 0
    > Time Taken: 00:06


    żadnych errorów, jeden chyba mało znaczący warning

    jeżeli chodzi o baterię to wątpie, gdyż wczesniej podczas różnego rodzaju prób sterowania serwem bez PWM, przez przypadek wychodziły różne szybkie przeskoki także bateria na pewno jest w stanie ruszyć te małe serwo.
  • #5 10644804
    PiotrPitucha
    Poziom 34  
    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ć z rozdzielczością conajmniej 8 bitową, teraz sobie liczymy, zmiana od min do max to około 1ms i tu chcemy 8 bitów, 9 to 2ms, 10 to 4ms, 11 to 8ms, 12 to 16ms.......
    Nie dojechaliśmy nawet do 20ms a już potrzebujemy 12 bitów, Atmega ma PWM 10 bitowy więc na sterowanie serwa zostaje 5-6 bitów, reszta marnowana jest na przerwę synchronizacyjną.
    Oczywiście można zrobić PWM programowy ale to stawianie problemu na głowie.
    Piotr
  • #6 10645113
    dondu
    Moderator na urlopie...
    PiotrPitucha napisał:
    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.

    I to nie jest PWM? Hmm, to jak to nazwiesz?

    PiotrPitucha napisał:
    Oczywiście można zrobić PWM programowy ale to stawianie problemu na głowie.

    Ooo, jednak PWM? Zdecyduj się :)

    PiotrPitucha napisał:
    Przydałoby się sterować z rozdzielczością conajmniej 8 bitową, teraz sobie liczymy, zmiana od min do max to około 1ms i tu chcemy 8 bitów, 9 to 2ms, 10 to 4ms, 11 to 8ms, 12 to 16ms.......
    Nie dojechaliśmy nawet do 20ms a już potrzebujemy 12 bitów, Atmega ma PWM 10 bitowy więc na sterowanie serwa zostaje 5-6 bitów, reszta marnowana jest na przerwę synchronizacyjną.Piotr

    No to trzeba kombinować, liczyć i w końcu wybrać sposób realizacji zadania.


    PiotrPitucha napisał:
    Oczywiście można zrobić PWM programowy ale to stawianie problemu na głowie.

    Czyli jaka jest Twoja konkluzja? ATmega8 nie może sterować serwem?


    @Student.PB

    Sterowanie serwem TGe9 na Atmega8 - skokowe ruchy, WinAVR, FCPU 1MHz
  • #7 10645201
    PiotrPitucha
    Poziom 34  
    Witam
    Ten sposób sterowania to PPM z definicji.
    W szczególnych warunkach wygląda ja PWM, ale zmiana okresu powtarzania w PWM spowodowałaby ruchy serwa a w PPM nie, ja już dawno zdecydowałem, tam ma być PPM.
    Co do liczenia wykazałem tylko że sprzętowy PWM z Atmegi jest za mało dokładny do poruszania serwem.
    PWM programowy umożliwia uzyskanie większej dokładności bo nie jesteśmy ograniczeni 10 bitami PWMa sprzętowego.
    NIGDY nie mówiłem że Atmega8 nie jest w stanie obsłużyć serwa, wprost przeciwnie jestem w stanie założyć że obsłuży conajmniej 8 serwomechanizmów.
    - generujemy przerwanie co 20ms
    - wystawiamy logiczną jedynkę na wyjście procesora
    - odliczamy założony czas ( 1-2 ms )
    - wystawiamy logiczne zero na wyjściu
    i to cała procedura.
    Pozdrawiam
  • #8 10645257
    dondu
    Moderator na urlopie...
    PiotrPitucha napisał:
    NIGDY nie mówiłem że Atmega8 nie jest w stanie obsłużyć serwa,

    Ależ ja nie twierdzę, że tak mówisz, pytałem jedynie:

    dondu napisał:
    Czyli jaka jest Twoja konkluzja? ATmega8 nie może sterować serwem?

    ponieważ podważałeś metodę PWM, a nie proponowałeś rozwiązania.

    PiotrPitucha napisał:

    PWM programowy umożliwia uzyskanie większej dokładności bo nie jesteśmy ograniczeni 10 bitami PWMa sprzętowego.
    ...wprost przeciwnie jestem w stanie założyć że obsłuży conajmniej 8 serwomechanizmów.
    - generujemy przerwanie co 20ms
    - wystawiamy logiczną jedynkę na wyjście procesora
    - odliczamy założony czas ( 1-2 ms )
    - wystawiamy logiczne zero na wyjściu
    i to cała procedura.

    Czyli jednak programowo całość lub prawie całość, a wcześniej pisałeś tak:
    PiotrPitucha napisał:
    Oczywiście można zrobić PWM programowy ale to stawianie problemu na głowie.

    Zdecyduj się.
  • #9 10645274
    student.PB
    Poziom 9  
    Czyli wychodzi na to że jednak wysyłam zły sygnał :( Pierwszy raz mam do czynienia z PWM`em, ale chce go dobrze opanować gdyż będę musiał go wykorzystać w kilku projektach a później tego bronić.

    PiotrPitucha napisał:

    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ć z rozdzielczością conajmniej 8 bitową, teraz sobie liczymy, zmiana od min do max to około 1ms i tu chcemy 8 bitów, 9 to 2ms, 10 to 4ms, 11 to 8ms, 12 to 16ms.......
    Nie dojechaliśmy nawet do 20ms a już potrzebujemy 12 bitów, Atmega ma PWM 10 bitowy więc na sterowanie serwa zostaje 5-6 bitów, reszta marnowana jest na przerwę synchronizacyjną.


    PiotrPitucha napisał:

    - generujemy przerwanie co 20ms
    - wystawiamy logiczną jedynkę na wyjście procesora
    - odliczamy założony czas ( 1-2 ms )
    - wystawiamy logiczne zero na wyjściu
    i to cała procedura.


    Kurcze to w koncu 20ms czy nie 20ms? :)


    Może ktoś kiedyś miał podobny problem i go rozwiązał i chce podzielić się swoimi wnioskami i przemyśleniami ?
  • #10 10645278
    dondu
    Moderator na urlopie...
    student.PB napisał:
    Jeżeli chodzi o serwo to trochę się zgubiłem, bo wszystkie tutoriale, posty na forum piszą strikte 20ms długości trwania , a tu nagle się okazuje że nie 20? To ile? :)

    Popatrz na załączony rysunek. Na nim jest wszystko dokładnie pokazane i opisane.
  • #11 10645366
    student.PB
    Poziom 9  
    Rozumiem wszystko co jest na rysunku i jest to zrealizowane w programie. Kwestia skąd powstają te skoki, szarpnięcia.
  • Pomocny post
    #12 10645390
    PiotrPitucha
    Poziom 34  
    Witam
    student.PB przyjmij że koło 20 ms, teoretycznie powinno być 20 ms ale wielu producentów stosowało odstępstwa od tej zasady tak samo jak od tego że neutrum w serwie jest 1,5 ms. Odchyłki okresu rzędu 10% każde serwo będzie tolerowało, neutrum trzymałbym się 1,5 ms bo jest prawie pewne że na takie serwo trafisz.
    dondu co do metody to zaproponowałem... oczywiście programowa ale nie PWM, PPM ma tą zaletę że na jednym wyjściu można zakodować kilka kanałów, znacznikowane są tylko początki impulsów kanałowych, szerokość znaczników koło 200 µs, każdy następny jest końcem sygnału serwa i początkiem sygnału następnego ( lub innego urządzenia PPM ).
    Uprzedzając pytanie dlaczego tak a nie inaczej, radio ma jedno wejście modulacyjne i jest to idealna metoda na transmisję kilku kanałów, na dodatek by transmisja była pewna nadajnik pracuje w przerwach między impulsami co jest wygodniejsze dla ARW odbiornika.
    Dlaczego 8 kanałów a nie 12 dla przykładu ?
    Załóżmy że mamy wszystkie serwa na max, 12 x 2 ms= 24 ms a okres 20 ms....
    Identyfikacja przerwy synchronizacyjnej jest robiona zwykle na bardzo prostym układzie RC i musimy mieć margines bezpieczeństwa że zostanie ona wykryta.
    Piotr
    Ps. Rejestry PWM są w Atmedze8 16 bitowe, mój błąd ale nie zmienia to mojego poglądu na temat sposobu generowania sygnału dla serwomechanizmów.
  • #13 10645429
    dondu
    Moderator na urlopie...
    @PiotrPitucha
    Ale co ma do tego tematu transmisja radiowa? Autor nic nie pisze o tym, że chce przesyłać sygnał sterowania kilku serw drogą radiową. Na razie temat dotyczy sterowania jednego serwa za pomocą ATmega8.

    student.PB napisał:
    Rozumiem wszystko co jest na rysunku i jest to zrealizowane w programie. Kwestia skąd powstają te skoki, szarpnięcia.

    Pokaż schemat.
  • #14 10645802
    student.PB
    Poziom 9  
    Nie moglem odszukac bibliotek z serwami o ile takie w eaglu są, także mam nadzieje ze jasno i przejrzyscie. Schemat układu bardzo skomplikowany. Zasilanie procesora, serwa i PWM z PB1 :)


    Sterowanie serwem TGe9 na Atmega8 - skokowe ruchy, WinAVR, FCPU 1MHz
  • Pomocny post
    #15 10645829
    dondu
    Moderator na urlopie...
    No tak ... nie czytasz datasheetów.
    Zacznij więc od tego artykułu i znajdujących się tam linków: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html
    I nie spiesz się, czytaj dokładnie, by zrozumieć i zastosuj się do prawidłowego podłączania tego, co widać na Twoim schemacie.

    Następnie wrzuć do sprawdzenia porządnie poprawiony schemat.
  • #16 10645845
    tmf
    VIP Zasłużony dla elektroda
    PiotrPitucha napisał:
    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ć z rozdzielczością conajmniej 8 bitową, teraz sobie liczymy, zmiana od min do max to około 1ms i tu chcemy 8 bitów, 9 to 2ms, 10 to 4ms, 11 to 8ms, 12 to 16ms.......
    Nie dojechaliśmy nawet do 20ms a już potrzebujemy 12 bitów, Atmega ma PWM 10 bitowy więc na sterowanie serwa zostaje 5-6 bitów, reszta marnowana jest na przerwę synchronizacyjną.
    Oczywiście można zrobić PWM programowy ale to stawianie problemu na głowie.
    Piotr


    Ale coś twoje założenia są nie teges, bo M8 ma 16-bitowy timer i 16-bitowy PWM. Więc w trybie PWM rozdzielczość sterowania servem będzie wystarczająca. Co prawda M8 nie jest tu może najlepszym wyborem, ale co do zasady timer w trybie PWM do sterowania servem jest całkiem rozsądnym pomysłem. W każdym razie lepszym niż robienie programowego PWM, jeśli myślimy o rozdzielczości i dokładności lepszej niż kilkaset mikrosekund.

    PiotrPitucha napisał:

    dondu co do metody to zaproponowałem... oczywiście programowa ale nie PWM, PPM ma tą zaletę że na jednym wyjściu można zakodować kilka kanałów, znacznikowane są tylko początki impulsów kanałowych, szerokość znaczników koło 200 µs, każdy następny jest końcem sygnału serwa i początkiem sygnału następnego ( lub innego urządzenia PPM ).
    Uprzedzając pytanie dlaczego tak a nie inaczej, radio ma jedno wejście modulacyjne i jest to idealna metoda na transmisję kilku kanałów, na dodatek by transmisja była pewna nadajnik pracuje w przerwach między impulsami co jest wygodniejsze dla ARW odbiornika.
    Dlaczego 8 kanałów a nie 12 dla przykładu ?
    Załóżmy że mamy wszystkie serwa na max, 12 x 2 ms= 24 ms a okres 20 ms....
    Identyfikacja przerwy synchronizacyjnej jest robiona zwykle na bardzo prostym układzie RC i musimy mieć margines bezpieczeństwa że zostanie ona wykryta.
    Piotr
    Ps. Rejestry PWM są w Atmedze8 16 bitowe, mój błąd ale nie zmienia to mojego poglądu na temat sposobu generowania sygnału dla serwomechanizmów.


    To może od końca - dlaczego tak ci ten PWM przeszkadza? Jasne, jak mam 1 16-bitowy PWM to jest problem, ale nawet prosta M8 ma dwa, a są odpowiednie procesory, które mają po kilkanaście, nie mówiąc już o timerach z rozszerzeniem rozdzielczości. Generowanie tego programowo wygląda prosto w prymitywnej aplikacji, ale wystarczy, że gdzieś będziesz potrzebował opóźnienie, albo intensywnie korzystasz z przerwań lub handler przerwania będzie się wykonywał np. 100 us to leżysz i kwiczysz, tym bardziej, że owe 200us rozdzielczości daje zaledwie parubitową rozdzielczość w sterowaniu serva.
    Co do radia, to nawiążę do naszej niedawnej dyskusji. Owszem, przyjmując że musimy korzystać ze starych modułów radiowych to masz rację. Ale czy musimy?
  • #17 10646546
    PiotrPitucha
    Poziom 34  
    Witam
    Zacznę od końca a może od początku...
    Po co robimy sterowanie serwa? Zakładam że sterowanie jest centralne a układ sterowany wyniesiony gdzieś bo inaczej to wystarczyłby potencjometr 555 i kilka elementów pasywnych, no może Attiny 8 końcówkowe i potencjometr :).
    Zakładam to bo pytający napisał że to wprawka, że układ będzie rozbudowany do kilku serw.
    Zapominam o radiu, ale transmisja sygnału szeregowego jest tańsza i pewniejsza niż ciągnięcie kilku kabli, zważywszy że dekoder jest tańszy niż metr kabla wybieram zawsze transmisję szeregową.
    Z pewnością obsługa PWM jest prosta dla jednego serwa, ale wygenerowanie PPM dla kilku serw jest zadaniem karkołomnym, oczywiście jak mamy kilka serw każde na innym wyjściu procesora to PWM jest odpowiednie do tego celu.
    200µs w transmisji nam niczego nie psuje, bo minimalna długość sygnału dla serwa to koło 1ms, ma natomiast wielką zaletę przy transmisji na większe odległości.
    Pomyśl jak wygladać może sygnał na drugim końcu 100 metrowego kabla, czy serwo zobaczy Twój 1,5ms sygnał jako 1,5ms a może tylko 1,3ms?
    stosując impulsy 200µs jako znaczniki początków masz pewność że odtworzony sygnał będzie miał 1,5ms co najwyżej będzie lekko przesunięty w fazie, bo o początku i końcu impulsu zawsze będzie decydowało to samo zbocze.
    Owo 200µs nie wpływa na rozdzielczość impulsów sterujących i możemy ją ustawić z każdą rozsądną dokładnością.
    Widać to w tym linku Link
    Używam PWM do innych celów :) i nie jestem mu z zasady przeciwny.
    Piotr
  • #18 10646578
    dondu
    Moderator na urlopie...
    PiotrPitucha napisał:
    Zapominam o radiu, ale transmisja sygnału szeregowego jest tańsza i pewniejsza niż ciągnięcie kilku kabli, zważywszy że dekoder jest tańszy niż metr kabla wybieram zawsze transmisję szeregową.

    Dlaczego ciągle piszesz o transmisji sygnału sterowania serw, skoro autor tematu o niczym takim nie pisze?
    Może po prostu autor tematu buduje samodzielnego robota albo jakieś inne urządzenia typu automatyczny toster :)
    To że autor zastosował serwo modelarskie nie oznacza, że musi to być samolot sterowany radiowo lub robot gąsienica z długimi przewodami w środku.

    Gdyby autor pisał o sterowaniu na odległość, nasze podpowiedzi byłyby inne.
    Zapytajmy więc autora tematu: Czy to będzie jakiś konkretny projekt, czy tylko uczysz się obsługi serw?
    bo może intuicja PiotrPitucha ma nad nami przewagę :)
  • Pomocny post
    #19 10648046
    janbernat
    Poziom 38  
    student.PB- skopiowałem Twój program, wgrałem na ATmega8 i zmierzyłem sygnał
    oscyloskopem.
    Daje sygnał 2ms co 20ms.
    Czyli powinno działać- pod warunkiem że:
    ATmega jest zasilana po ludzku- ma wszystkie kondensatory między odpowiednimi pinami, zasilacz ma też takie kondensatory jak lubi, serwo jest zasilane z oddzielnego zasilacza i ten drugi zasilacz ma też takie kondensatory jak lubi.
    No serwo lubi dużo prądu- zależnie od wielkości.
    Dopóki nie nauczysz się po ludzku podłączać układów będziesz się zastanawiał czy to program czy to układ.
    Czyli tak jak dondu Ci napisał- http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html
    Ale nie wiem dlaczego nie podał Ci linka do tego:
    http://mikrokontrolery.blogspot.com/2011/04/pieklo-poczatkujacych.html
    Swoją drogą jak chcesz coś dla ośmiu serw to pałęta się na elektrodzie mój program do sterowania ośmiu serw przy pomocy ośmiu potencjometrów.
    Jest on chyba kompromisem między czysto sprzetowym sterowaniem a czysto programowym.
  • #20 10648085
    student.PB
    Poziom 9  
    Serdecznie dziękuje za udzielanie się w temacie. Uwaga użytkownika dondu była trafiona w dziesiątke aczkolwiek każdy poszerzył trochę moją wiedze. Skoki te były powodowane resetowaniem się procesora? Nie wiem czemu co i jak, ale podpiąłem pod reset Vcc przez rezystor 10k i wszystko śmiga jak trzeba. Doszkoliłem się trochę w temacie i popracuję trochę z jednym serwem, aby ostatecznie stawić czoła sterowaniu aż 8 serw. Niestety, albo i stety, myślę, że będzie fajna zabawa - mam taki projekt do zrealizowania, aczkolwiek nic nie będzie sterowane radiowo, ani na duże odległosci. Myślałem, że będę musiał sterować tymi 8ma serwami przy użyciu 8 atmeg, zsynchronizowanych w jakiś sposób 9tką atmegą heheh ( wiem wiem śmiejecie się teraz ze mnie ), ale czytając wasze rozmowy oraz konsultując się tu i tam wiem, że nie będzie takiej potrzeby :P Ktoś rzucil hasło multiplexer? Póki co skupie się na opanowaniu programowym do perfekcji jednego serwa, aby chodziło tak jak mu zagram. Ważny jest czas, projekt wymaga jak najszybszych ruchów serwa w małym zakresie. Chce wykorzystać maxymalną prędkosc daną przez producenta 0.15s/60`, tak, żeby dochodziło i od razu wracało, nie czekało ani mili sekundy, ani nie zaczynało zbyt szybko ruchu w drugą stronę nie dochodząc do zadanej pozycji. Dziękuję jeszcze raz za pomoc. Mam nadzieję ze po zanzajomieniu sie z zagadnieniem zaprogramowanie 8 serw nie będzie masakrycznie trudne. W ostateczności zgłoszę się po pomoc, ale to już po doszkoleniu się, aby nie zadawać głupich pytań :)

    dzięki również za pomocne linki- te "dla początkujących". hehe chłonę je wszystkie jak dużą pizze po 5 piwach :P:P rzuciłem okiem na układ pinów atmegi : vcc gnd i polecieli. a tu sie okazuje ze nie wystarczyyy :)
  • #21 10648139
    dondu
    Moderator na urlopie...
    Niepodciągnięty do Vcc pin RESET i w dodatku nie włączony Pull-up wewnętrzny = łapanie zakłóceń, które w tym wypadku prawdopodobnie powodały reset mikorkontrolera. W Spisie treści na dole jest dział Zasilanie i zakłócenia - warto poczytać całość.

    Piekiełka sugerowanego przez Janka Ci nie pokazałem, bo uważam, że czytasz uważnie i podchodzisz do sprawy bardzo fajnie :)
    Powodzenia w dalszych pracach, a na koniec rada - zawsze wrzuć schemat i program - szybciej znajdziemy i pomożemy.
  • #22 10648154
    janbernat
    Poziom 38  
    A jak już opanujesz PWM to zajrzyj tu:
    https://www.elektroda.pl/rtvforum/topic2084991.html
    na jeden z końcowych postów.
    Może program można jeszcze poprawić- ale taki jak jest ma pewne zalety.
    Działa bez problemu dla ośmiu serw.
    No i wcale nie musi być ośmiu potencjometrów- zmienna sterująca może być dowolna a nie z ADC.
  • #23 10648924
    student.PB
    Poziom 9  
    To co kilka dni temu było czarną magią teraz wydaje się takie proste :) Podpiąłem pod to samo wyjście diodę i zmieniając wartości ICR OCR trochę intuicyjnie oraz obserwując to, że dioda rozjaśnia się mrugając, lub płynnie, ile to wszystko trwa czasu , jak to się ma do taktowania uC - po dwóch godzinach zabawy i tęgiej rozkminy mogę pisać z tego doktorat;-) (jk).
  • #25 10648991
    student.PB
    Poziom 9  
    Muszę starą skrzynkę z piwnicy przynieść, tam jest LPT a na dodatek nie muszę się o nią martwić, że coś zepsuję :P

    Ps. Może ktoś kiedyś dotrze do tego wątku z podobnymi problemami, także kolejna uwaga, którą zaznaczam : serwo nie pracuje tak jak należy na baterii 9v ! :) Przed chwilą próbowałem zoptymalizować ruch i coś mi się ciągle nie zgadzało z tymi delayami aż rozładowalem całą bateryjkę, odkopałem dwie stare, połączyłem szeregowo i eureka! Nie były to stare baterie a obie nówki, 18v i serwo się odmuliło! Wszystko działa z zegarkiem w ręku i prędkosc zgodna ze specyfikacją techniczną. (btw wiem, że chodzi o prąd[natężenie] nie napięcie) w każdym razie jutro rozcinam starą zepsuta myszkę na usb i będę ciągnąć zasilanie z kompa bo juz mi zbrzydły te bateryjki co padają co chwilę:P
  • #26 10649739
    PiotrPitucha
    Poziom 34  
    Witam
    USB możesz dość łatwo upalić..... jak masz starego peceta to wyciagnij z obudowy zasilanie 5V lub 12V i podepnij serwa przez stabilizator.
    Brak portów w Atmedze? , co jeszcze chcesz podpiąć ?, jeśli jesteś na granicy to pomyśl o Atmedze8 w SMD, tam masz dwa piny więcej ( konkretnie 2 ADC ).
    Piotr
    Ps. baterie 9V mają dużą rezystancję , jeśli już łączysz to łącz je równolegle, forsowanie napięcia przed stabilizatorem nie ma sensu, powoduje tylko większe straty na ciepło.
  • #27 10649821
    student.PB
    Poziom 9  
    Spalić port czy spalić serwo i uC zasilaniem z portu ? Jakiś opór przed stabilizatorem nie wystarczy?
  • #28 10652831
    PiotrPitucha
    Poziom 34  
    Witam
    Miałem na myśli spalenie portu USB, prawidłowo zasilonego serwa to znaczy plus do plusa, minus do minusa i napięcie zalecane przez producenta spalić się nie da chyba że zablokujesz go mechanicznie i podasz komendę by się ruszało.
    Rezystor szeregowy pogarsza własności takiego układu i może grozić wzbudzaniem, jeśli już to daj bezpiecznik.
    Pozdrawiam
  • #29 10652920
    janbernat
    Poziom 38  
    Najlepiej niczego nie spalić ale podłączyć prawidłowo.
    Przecież serwo ma jakieś dane techniczne- a pobór prądu i napięcie zasilania są podstawowe.
REKLAMA