Jak miło czyta się kolejne wątki twórczości Open Hardware, które zbliżają nas do kosmosu ;-)
Otóż, okazuje się, że są na świecie fanatycy (czyt. fascynaci) wysyłania sztucznych satelitów i do tego testują kod Open Source na orbicie. Cały pic polega na tym, że projekt ArduSat powstał na kickstarter.com i pozwoliłz założenia programistom umieszczać swój kod na orbicie - a to dla każdego GEEKa, fana sci-fi, marzyciela-elektronika ;) ... zaiste fenomenalny pomysł !!!
Ta powyższa wiadomość wstrząsnęła mną dość konkretnie, bo w sumie konstrukcyjnie nie jest to jakiś zaawansowany twór (zawiera 16-cie mikrokontrolerów AVR t.j. używam\ słynny projekt Arduino. Można powiedzieć, że jest to wieloprocesorowy projekt kompatybilny z Arduino.
Autorzy założyli, że jeden mikrokontroler będzie odpowiedzialny za jeden typ pomiaru, co może okazać się dość racjonalne na orbicie. Dlatego, że przy tak zmiennych warunkach atmosferycznych, w szczególności temperaturowych krzem może zachowywać się dość nieprzewidywalnie. Rozdzielenie kompetencji na wiele mikrokontrolerów jednoukładowych (czyli wyspecjalizowanych procesorów z przetwornikami w środku) zapewni utrate jednego pomiaru, jeśli zawiedzie procesor a nie 16-tu, gdyby wszystko było mierzone jednym kontrolerem. Oczywiście, jest też niezbędny nadzorca, który został tam zainstalowany i pełni rolę watchdoga oraz spina magistralę danych modułu.
Dla miłośników areonautyki i startów rakiet załączam pełnometrażowy dokument, który pokazuje umieszczenie ArduSat na orbicie :-) Przyjemnego oglądania i rozmyślania... byćmoże to Wy wpadniecie na kolejny takiej skali pomysł użycia popularnych 8-bitowych procesorów w wielkim eksperymencie
Konstrukcja robota i sposób jego programowania obejmuje szereg dokumentacji i procedur. Zebrałem kilka myśli na temat tych zagadnień. Nic, co jest przedstawione tutaj jest wprost niezbędne, ale możliwe, że zaciekawie tych, którzy chcą zbudować od zera robota. W tym wpisie zainspirowałem się materiałami z GitHub oraz licznymi forami na temat budowy robotów.
Jak zacząć z konstrukcją robota ?
Robot składa się z zestawu elementów mechanicznych oraz elektronicznych, które działają zgodnie z napisanym programem.
Niektóre elementy są wykonane na wymiarm do tego celu często wykorzystywany jest program QCad lub AutoCAD. Czasami wystarczający jest dla nas edytor wektorowy Inkscape, dlatego że jest prostszy w użyciu niżeli jakiekolwiek narzędzie CAD. Co ciekawe posiada też eksporty do GCODE, aby dokonać frezowania na podłączonej do komputera maszynie CNC.
Warto wesprzeć się wiedzą z zajęć praktyczno-technicznych na temat obsługi narzędzi ręcznych. Nie wszystko musimy wykonać na drukarce 3D lub na ploterze CNC. Jest to oczywiście udogodnienie dla każdego inżyniera, kiedy projekt przygotowany w oprogramowaniu CAD wygeneruje dla nas dokumentację produkcyjną CAM.
Mając dane dla obrabiarki numerycznej o wektorach cięcia lub wiercenia np: w formacie Gerber lub GCODE jesteśmy w stanie zlecić prace mechaniczne firmie zewnętrznej na wybranych wcześniej materiale (np: plexi, sklejka, aluminium, ). Dokłądność wykonanie mechanicznych części zostanie zagwarantowana przez firmę wykonującą frezowanie, cięcie, wiercenie. I tutaj dochodzimy do dość ważnego szczególu - jakość wykoniania części mechanicznych ma znaczenie.
Okazuje się bowiem, że każde przesunięcie, nieprecyzyjne wykonania w robotach np: jeżdżących stanowi problem w postaci poprawnej jazdy po linii prostej. Często też drgania z silników przenoszą się na obudowe i może się okazać, że np: przy zakręcaniu nasz robot niedeterministycznie jeżdżi lub montaż zasilania nie będzie właściwy. Z powyższych podowód często przed złożeniem fizycznych części robota musimy sprawdzić ich dopasowanie, precyzję i jakość. Często używam pilnika ew. papieru ściernego, aby obrobić delikatnie obudowę bazową robota i zapewnić sprawniejsze pasowanie składanych elementów, złącz, źrub oraz łożysk.
Oczywiście wiele projektów robotów raz z dokładnymi wzorami do frezowania jest dostępnych na licencji GPL lub Creative Commons, co wiele ułatwia ludziom, którzy chcą przeskoczyć fazę przygotowania mechanicznych podzespołów robota.
Modelownie robota w programie 3D
Od wielu lat projektanci robotów zyskują coraz więcej narzędzi do wsparcia ich pracy i czcęsto też pasji. Jedną z wielu aplikacji do projektowania robotów niewątpliwie jest mój ulubiony Blender. Możemy zamodelować robota w trzecch wymiarach, postawić go w świecie wirtualnym używając wbudowanego w Blendera silnika fizyki i spowodować, że będzie działał, głównie dzięki temu, że w Blenderze mamy możliwość programowania logiki, akcji w języku Python. Daje nam to niesamowite możliwość przetestowania naszego robota o fizycznych wymiarach i masie w piaskownicy (Sandbox) bez ruszania się od tego narzędzia projektowego. To co symulujemy sobie w programie 3D na pewno oszczędzi naszego czasu na wielokrotnyc próbach i błędach.
Metoda prób i błędów - rzeczywista ścieżka w innowacji
Uważam, że to jest najważniejsza część w procesie tworzenia robotów. Jest to naturalna metoda pracy w każdej innowacji, wynalazku i projekcie o dużym poziomie skomplikowania. Musisz posiadać determinację i wierzyć w swoje możliwości rozwoju w wielu dziedzinach: mechanika, konstrukcje, automatyka, elektronika, programowanie, algorytmika. Jest też taka opcja, że znajdziesz drużynę i razem wspólnie osiągniecie sukces w budownie robota i byćmoże wystartujecie w jednym z wielu konkursów robotycznych. Do tego momentu musisz wiedzieć, że każdy mały błąd i krok wstecz gwarantuje przy odpowiedniej determinacji duży sukcecs w przyszłości.
NIe wstydź się swojego robotycznego pająka
Często też mamy do czynienia z sytuacją, że robimy coś do szuflady. Jest to sytuacja dość niekorzystna, gdyż nie mamy okazji zestawić swojego dzieła z naturalnym krytycyzmem osoby spoza żyjącej w naszym mózgu wizji :-) Polecam Wam, aby oddać swoją zabawkę robotyczną na jedną godzinę dziecku porzyczyć do zabawy innemu koledze. Na pewno wnioski i spostrzeżenia będą na tyle istotne, że zainspiruje nas to do budowania kolejnej wersji naszego "pająka" - mam tutaj na myśli robota, któremu zwisają kable, nie do końca dokręconego, nie zupełnie skończonego, ale wykonanego własnymi rękami. I właśnie to się liczy najbardziej, że udało Wam się osiągnąć kolejny stopień wtajemniczenia i dajecie sobie radę z problemami technicznymi. Tak rodzą się inżynierowie :-)
Napędy, sterowniki silników i zasilanie
Każdy konstruując robota chciałby posiadać uniwersalny napęd oraz elektronikę do niego. Oczywiście nie jest to takie oczywiste, że każdy napęd w robocie można nazwać dedykowanym i tylko w robotach amatorskich możemy sobie ze względów edukacyjnych pozwolić na takie uproszczenia. Dlaczego tak jest, że napędy zależą od zastosowania robota? Otóż, każdy robot ma swoje przeznaczenie w przemysle, czy produkcji. Nie jesteśmy przez to w stanie wytworzyć uniwersalnego napędu o jednej ekstra małej masie, bo robot spawalniczy potrzebuje innego napędu oraz przyspieszenia niżeli robot jeżdżący po planecie Mars we własnym dedykowanym pojeżdzie. INnego typu napęd będzie miał robot latający np: drone niżeli robot mieszający produkty spożywcze. Każdy z powyższych przykładów posiada swoje specyficzne cechy napędu, a co za tym idzie specyficzne sterowniki.
Budując napęd amatorskiego robota możemy wybrać silnik: DC (z przekładnią, enkoderem lub bez nich), krokowy, serwomechanizm z obrotem 260 stopni. Ten wybór zależy od ceny i rozmiarów oczywiście, bo czasami budując microsumo lub minisumo musimy zwrócić szczegółną uwaŋ na wybór napędu i zasilania, gdyż w rozgrywkach sumo robotów mamy ograniczenia regulaminowe
Na szczęście budując prototyp prostego robota na rynku dla celów amatorskich mamy dostęp do wielu płytek sterowników silników DC oraz krokowych. Dodatkowo silniki są dostępne w tak wielu opcjach, że wybór jest bardzo elastyczny.
Myślę, że jest taka drobna rzecz, która nam zawsze przemyka przy budownie robotów jak grubość osi silnika. Wiele razy dzięsiąte części militetra w wyliczonym otworze i odpowiedniej osi silnika spowodowały w moich prototypach robotów, że koło jest zbyt słabo osadzone i wpada w wiracje. Następstwem tego są wibracje na kołach, czyli robot zjeżdża delikatnie z trasy. Oczywiście można to skorygować programowo i wręcz należy, ale jeśli uczymy się budowania robotów, to każda linika nadmiarowego kodu w pierwszych programach jest zbędna i szczególnie kiedy można jej uniknąć zapewniając dobre dopasowanie mechaniki :-)
Istotna pułapka to również prąd silnika oraz max. prąd sterownika, bo kiedy robot nasz zatrzymuje się na przeszkodzie i nie mamy obsługi pomiaru prądu na silnikach oprogramowanej, wówczas może dojść do przegrzania i przepalenia silników ew. sterowników. Uwaga! W warunkach domowych łatwo przez nieuwagę doprowadzić do pożaru, przed czym przestrzegam. Każdy sterownik napędu powinien posiadać zabezpieczenie prądowe i powinniśmy być świadomi mocy naszych silników oraz dostosować grubość przewodów do prądu przepływającego pezez nie, aby uniknąć wypadku.
Ważne również jest użycie akumulatorów lub baterii, których moc i masa jest dopasowania do naszej konstrukcji. Musicie uważać też na akumultory Li-Ion oraz Li-Po, bo ich niewłaśniwe użycie grozi wybuchem lub zagrożeniem dla Wazsego żdrowia. Dobierajcie baterie też do warunków np: nie wiele systemów zasiania akceptuje wodę lub wilgoć, co też warto uwzględnić
Co do softu ułatwiającego projektoranie zasilania i napędów to mamy kilka opcji w OPenSource, oto lista kilku.
Lista aplikacji dla elektroników:
Powyżej umieszczone programy wspierają nas w budowie elektroniki robota, nie tylko napędów, więc jak widać w świecie OpenSource mamy sporo gotowego softu dla projektów elektroniki w naszych robotach.
Zasadniczo nie mogę pominąć fraktu, czym zajmuje sie elektronika w robocie. Otóż jest to serce zasialania i sterownia robota, więc jest niezbędna i od jakości jej wykonania zależy powtarzalność zachowania robota, czyli gwarancja dobrej zabawy z naszym robotem.
O co chodzi w tej jakości ? Zasadniczo w tym, aby płytka PCB była wykonana dość praktycznie ew. stosujemy uniersalną płytką i gwarantujemy, że nie będzie zimnych lutów, czyli przerw w połączeniach lutowanychc. Dodatkowo warto zapewnić kondensator elektrolityczny przy każdym rozgałęzieniu zasilania, co zapewni filtrowanie skoków napięcia i zakłuceń, gdy nie mamy odrębnego zasilania do części napędowej i części cyfrowej. Bo zakładam, że posiadamy jedno źródło zasialani bez skomplikowanych konwerterów napięć.
Praktyczną opcją jest użycie Arduino
lub jego klonów z gotowymi sterownikami silników, które posiadają już wspomniane zabezpieczenia i nie musimy się tym przejmować.
Programowanie + mikrokontrolery jednoukładowe AVR z użyciem Arduino
Oczywiście implementując algorytmu działania naszego robota niezbędne jest dla nas środowisko. Oto mój sprawdzony w boju zestaw bibliotek, które pomagają mi na budowanie softu dla mikrokontrolerów jednoukładowych AVR i zapewniają kompilację bez posiadania dedykowanego środowiska.
Moje repozytorium na github.com z frameworkiem do zaabawy z AVR
Powyżej linkowany zestaw narzędzi uratował mnie, kiedy nie było jeszcze Arduino. Natomiast obecnie mamy świetnie rozwijający się projekt środowiska IDE do programowania mikrokontrolerów AVR, który ma szansę stac się wygodnym lkikalnym standardem i tego temu projektowi OpenSource życzę. Zachęcam Was do zgłębiana wiedzy o aplikacji Arduino oraz platformie Arduiono, gdyż jest to moim zdaniem najprostsze środowisko do nauki programowania sterowników robotów.
Społeczność Arduino IDE stale rozwija się i przybywają nowe bibliteki. Przykładem takiej biblioteki, którą przetestowałem mogę polecić do budoway amatorskiego robota jest pakiet Motor dla Arduino IDE, który pozwala nam na sterownie niezależnie dowolną ilośćią silników, poprzez sterownik fizyczny oparty o uład scalony L293.
Nagła potrzeba poznania kilku prezentacji spowodowała wystąpienie owego artykułu w szeregi moich dodatkowych zajęć i odświeżenie tematyki mikrokontrolerów jednoukładowych AVR. Ostatnio moim celem jest zbudowanie sobie własnego modułu Arduino i przetestowanie go we współpracy z Linuxem. Cel szczytny, czasu mało, do tego w kraju nabyć gotowca lub chociaż PCB nie da się :) więc lutownica + laminat + wytrawianie obwodów drukowanych moim przyjacielem ... po walkach postaram się zaprezentować coś w rodzaju wrażeń z budowy mojego Arduino na początek z mikrokontrolerem AVR ATmega8 + port szeregowy (ot takie wspomnienie - wiem, że USB jest dziś standardem). Argumentem jest najpewniej chęć używania rozwiązań OpenHardware i OpenSource ze wsparciem społeczności ludzi zainteresowanych rozwojem w kierunku tworzenia robotów i innych coraz popularniejszych tworów współczesności. Jednym słowem mam dość tworzenia od zera API do kolejnego systemu uP, testowanie, kodowanie swojego systemu osadzonego, obsługi IO, etc ... koniec z odkrywaniem już odkrytego ;-)
Aha, może nie każdy sobie zdaje sprawę, ale w takim telefonie komórkowym temat systemów wbudowanych oraz mikrokontrolerów przewija się w każdym calu. Android, Symbian i wiele innych systemów osadzonych to przykłady pokrewnych tematów. Same hasła powinny wyjaśnić rangę budowy jakże prostego i taniego systemu dydaktycznego, od którego te szczytne hasła wyrosły. Niebawem zaprezentuję efekry prac, tymczasem zmykam do lutowania :-)
Filozofia OpenSource dociera zarówno do twórców software, jak również hardware. W ukryte zakamarki elektroniki, do jednostek arytmetyczno-logicznych, pamięci Flash, do mikrosystemów, do wszystkich zakątków, które możemy sobie wyobrazić. Skoro telefon może być na otwartym oprogramowaniu, to dlaczego nie pralka, lodówka, odkurzacz, roboty przemysłowe :-) Dla ułatwienia zabawy z mikrokontrolerami dziś polecam gotowy, do nabycia lub samodzielnego montażu zestaw Arduino z interfejsami USB lub RS-232
Temat zainteresował mnie otwartym podejściem do nauki programowania urządzeń wbudowanych. Wszystkie schematy oraz informacje konstrukcyjne są dostępne za darmo :-). Tani hardware oraz rozbudowane podręcznik i biblioteki w językach C, Java i Python do pobrania z sieci. Bogactwem otwartych rozwiązań jest także prostota użycia. Atutem jednakże są niezliczone przykłady potwierdzające możliwości modułu. A dla chcących połączyć swój system mikroprocesorowy z interfejsem 3D systemu animacyjnego Blender również się coś znajdzie :)
[ 56.193165] NET: Registered protocol family 10 [ 56.193313] lo: Disabled Privacy Extensions [ 56.193520] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 66.331696] nas0: no IPv6 routers present [ 851.674370] usb 2-1: new low speed USB device using ohci_hcd and address 2 [ 851.912107] usb 2-1: configuration #1 chosen from 1 choice [ 852.180868] cdc_acm 2-1:1.0: ttyACM0: USB ACM device [ 852.189322] usbcore: registered new interface driver cdc_acm [ 852.189896] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters [ 863.085900] usb 2-1: USB disconnect, address 2 [ 910.664830] usb 2-1: new low speed USB device using ohci_hcd and address 3 [ 910.902548] usb 2-1: configuration #1 chosen from 1 choice [ 910.906498] cdc_acm 2-1:1.0: ttyACM0: USB ACM device $ avrdude -? $ sudo ls /dev/ttyACM0 /dev/ttyACM0 $ sudo less /dev/ttyACM0 /dev/ttyACM0 is not a regular file (use -f to see it) $ sudo less -f /dev/ttyACM0 $ avrdude -m t2313 -p /dev/ttyACM0 avrdude: invalid option -- m Usage: avrdude [options] Options: -p Required. Specify AVR device. -b Override RS-232 baud rate. -B Specify JTAG/STK500v2 bit clock period (us). -C Specify location of configuration file. -c Specify programmer type. -D Disable auto erase for flash memory -i ISP Clock Delay [in microseconds] -P Specify connection port. -F Override invalid signature check. -e Perform a chip erase. -O Perform RC oscillator calibration (see AVR053). -U :r|w|v:[:format] Memory operation specification. Multiple -U options are allowed, each request is performed in the order specified. -n Do not write anything to the device. -V Do not verify. -u Disable safemode, default when running from a script. -s Silent safemode operation, will not ask you if fuses should be changed back. -t Enter terminal mode. -E [,] List programmer exit specifications. -y Count # erase cycles in EEPROM. -Y Initialize erase cycle # in EEPROM. -v Verbose output. -v -v for more. -q Quell progress output. -q -q for less. -? Display this usage.
avrdude project: $ avrdude -m t2313 -p /dev/ttyACM0 -c usbasp avrdude: invalid option -- m Usage: avrdude [options] Options: -p Required. Specify AVR device. -b Override RS-232 baud rate. -B Specify JTAG/STK500v2 bit clock period (us). -C Specify location of configuration file. -c Specify programmer type. -D Disable auto erase for flash memory -i ISP Clock Delay [in microseconds] -P Specify connection port. -F Override invalid signature check. -e Perform a chip erase. -O Perform RC oscillator calibration (see AVR053). -U :r|w|v:[:format] Memory operation specification. Multiple -U options are allowed, each request is performed in the order specified. -n Do not write anything to the device. -V Do not verify. -u Disable safemode, default when running from a script. -s Silent safemode operation, will not ask you if fuses should be changed back. -t Enter terminal mode. -E [,] List programmer exit specifications. -y Count # erase cycles in EEPROM. -Y Initialize erase cycle # in EEPROM. -v Verbose output. -v -v for more. -q Quell progress output. -q -q for less. -? Display this usage.
avrdude project: $ avrdude -m t2313 -P /dev/ttyACM0 -c usbasp avrdude: invalid option -- m Usage: avrdude [options] Options: -p Required. Specify AVR device. -b Override RS-232 baud rate. -B Specify JTAG/STK500v2 bit clock period (us). -C Specify location of configuration file. -c Specify programmer type. -D Disable auto erase for flash memory -i ISP Clock Delay [in microseconds] -P Specify connection port. -F Override invalid signature check. -e Perform a chip erase. -O Perform RC oscillator calibration (see AVR053). -U :r|w|v:[:format] Memory operation specification. Multiple -U options are allowed, each request is performed in the order specified. -n Do not write anything to the device. -V Do not verify. -u Disable safemode, default when running from a script. -s Silent safemode operation, will not ask you if fuses should be changed back. -t Enter terminal mode. -E [,] List programmer exit specifications. -y Count # erase cycles in EEPROM. -Y Initialize erase cycle # in EEPROM. -v Verbose output. -v -v for more. -q Quell progress output. -q -q for less. -? Display this usage.
$ avrdude -p m8 -c stk500v2 -P /dev/bus/usb/001/014 avrdude: ser_open(): can't open device "/dev/bus/usb/001/014": No such file or directory $ avrdude -p m8 -c stk500v2 -P /dev/AVR avrdude: ser_open(): can't open device "/dev/AVR": No such file or directory $ avrdude -p m8 -c stk500v2 -P /dev/ttyACM0
avrdude: stk500v2_command(): command failed avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
avrdude done. Thank you.
$ avrdude -p m8 -c stk500v2 -P /dev/ttyACM0
avrdude: stk500v2_command(): command failed avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
avrdude done. Thank you.
$ avrdude -p t2313 -c stk500v2 -P /dev/ttyACM0
avrdude: stk500v2_command(): command failed avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
avrdude done. Thank you.
$ avrdude -p t2313 -c stk500v2 -P /dev/ttyACM0 -F
avrdude: stk500v2_command(): command failed avrdude: initialization failed, rc=-1 avrdude: AVR device initialized and ready to accept instructions
avrdude: stk500v2_command(): command failed avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device.
looking at device '/class/tty/ttyACM0': KERNEL=="ttyACM0" SUBSYSTEM=="tty" DRIVER=="" ATTR{dev}=="166:0"
[ 4003.035799] usb 2-1: USB disconnect, address 5 [ 5253.262662] usb 2-1: new low speed USB device using ohci_hcd and address 6 [ 5253.500452] usb 2-1: configuration #1 chosen from 1 choice [ 5253.504384] cdc_acm 2-1:1.0: ttyACM0: USB ACM device [ 6125.721804] usb 2-1: USB disconnect, address 6 [ 6130.036372] usb 2-1: new low speed USB device using ohci_hcd and address 7 [ 6130.274132] usb 2-1: configuration #1 chosen from 1 choice [ 6130.278060] cdc_acm 2-1:1.0: ttyACM0: USB ACM device [ 6399.501693] usb 2-1: USB disconnect, address 7 [ 6404.684821] usb 2-1: new low speed USB device using ohci_hcd and address 8 [ 6404.922588] usb 2-1: configuration #1 chosen from 1 choice [ 6404.926555] cdc_acm 2-1:1.0: ttyACM0: USB ACM device $ sudo avrdude -p t2313 -c stk500v2 -P /dev/AVR-Doper-USB-Programmer -F
avrdude: stk500v2_command(): command failed avrdude: initialization failed, rc=-1 avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x000000 avrdude: Yikes! Invalid device signature. avrdude: Expected signature for ATtiny2313 is 1E 91 0A avrdude> stk 4 >>> stk 4 avrdude: invalid command "stk" avrdude> stv 4 >>> stv 4 avrdude: invalid command "stv" avrdude> help >>> help Valid commands:
dump : dump memory : dump read : alias for dump write : write memory : write ... erase : perform a chip erase sig : display device signature bytes part : display the current part information send : send a raw command : send parms : display adjustable parameters (STK500 only) vtarg : set (STK500 only) varef : set (STK500 only) fosc : set (STK500 only) sck : set (STK500 only) help : help ? : help quit : quit
Use the 'part' command to display valid memory types for use with the 'dump' and 'write' commands.
avrdude> read >>> read Usage: dump [] avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.229 MHz SCK period : 2.2 us avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.229 MHz SCK period : 2.2 us avrdude> sck 1 >>> sck 1 avrdude: stk500v2_set_sck_period(): p = 1.0 us too small, using 1.1 us avrdude> sck 2 >>> sck 2 avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.229 MHz SCK period : 2.2 us avrdude> sck 3 >>> sck 3 avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.229 MHz SCK period : 3.3 us avrdude> sck 4 >>> sck 4 avrdude> help >>> help Valid commands:
dump : dump memory : dump read : alias for dump write : write memory : write ... erase : perform a chip erase sig : display device signature bytes part : display the current part information send : send a raw command : send parms : display adjustable parameters (STK500 only) vtarg : set (STK500 only) varef : set (STK500 only) fosc : set (STK500 only) sck : set (STK500 only) help : help ? : help quit : quit
Use the 'part' command to display valid memory types for use with the 'dump' and 'write' commands.
avrdude: stk500v2_command(): command failed avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
avrdude: Device signature = 0x000000 avrdude: Yikes! Invalid device signature. avrdude: Expected signature for ATtiny2313 is 1E 91 0A avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.229 MHz SCK period : 4.4 us avrdude> help >>> help Valid commands:
dump : dump memory : dump read : alias for dump write : write memory : write ... erase : perform a chip erase sig : display device signature bytes part : display the current part information send : send a raw command : send parms : display adjustable parameters (STK500 only) vtarg : set (STK500 only) varef : set (STK500 only) fosc : set (STK500 only) sck : set (STK500 only) help : help ? : help quit : quit
Use the 'part' command to display valid memory types for use with the 'dump' and 'write' commands.
avrdude> fosc 12.0000 >>> fosc 12.0000 avrdude: stk500v2_set_fosc(): f = 12 Hz too low, 14 Hz min avrdude (fosc): failed to set oscillator_frequency (rc = -1) avrdude> fosc 12000000 >>> fosc 12000000 avrdude: stk500v2_set_fosc(): f = 12.000 MHz too high, using 3.686 MHz avrdude> fosc 12000 >>> fosc 12000 avrdude> quit >>> quit
avrdude: Device signature = 0x000000 avrdude: Yikes! Invalid device signature. avrdude: Expected signature for ATtiny2313 is 1E 91 0A avrdude> avrdude> fosc 1.229 MHz >>> fosc 1.229 MHz Usage: fosc [M|k] | off avrdude> fosc 1.229M >>> fosc 1.229M avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.843 MHz SCK period : 4.4 us avrdude> fosc 12.00M >>> fosc 12.00M avrdude: stk500v2_set_fosc(): f = 12.000 MHz too high, using 3.686 MHz avrdude> fosc 12M >>> fosc 12M avrdude: stk500v2_set_fosc(): f = 12.000 MHz too high, using 3.686 MHz avrdude> fosc 1.229M >>> fosc 1.229M avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.843 MHz SCK period : 4.4 us avrdude> help >>> help Valid commands:
dump : dump memory : dump read : alias for dump write : write memory : write ... erase : perform a chip erase sig : display device signature bytes part : display the current part information send : send a raw command : send parms : display adjustable parameters (STK500 only) vtarg : set (STK500 only) varef : set (STK500 only) fosc : set (STK500 only) sck : set (STK500 only) help : help ? : help quit : quit
Use the 'part' command to display valid memory types for use with the 'dump' and 'write' commands.
avrdude> part >>> part
AVR Part : ATtiny2313 Chip Erase delay : 9000 us PAGEL : PD4 BS2 : PD6 RESET disposition : possible i/o RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail :
dump : dump memory : dump read : alias for dump write : write memory : write ... erase : perform a chip erase sig : display device signature bytes part : display the current part information send : send a raw command : send parms : display adjustable parameters (STK500 only) vtarg : set (STK500 only) varef : set (STK500 only) fosc : set (STK500 only) sck : set (STK500 only) help : help ? : help quit : quit
Use the 'part' command to display valid memory types for use with the 'dump' and 'write' commands.
avrdude> sck >>> sck Usage: sck avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.843 MHz SCK period : 4.4 us avrdude> sck 1 >>> sck 1 avrdude: stk500v2_set_sck_period(): p = 1.0 us too small, using 1.1 us avrdude> sck 1 >>> sck 1 avrdude: stk500v2_set_sck_period(): p = 1.0 us too small, using 1.1 us avrdude> parms >>> parms Vtarget : 4.9 V Varef : 0.0 V Oscillator : 1.843 MHz SCK period : 1.1 us avrdude> sck 2 >>> sck 2 avrdude> parms >>> parms Vtarget : 5.0 V Varef : 0.0 V Oscillator : 1.843 MHz SCK period : 2.2 us avrdude>
$ whereis avrdude avrdude: /usr/bin/avrdude /etc/avrdude.conf /usr/share/man/man1/avrdude.1.gz $ touch /tmp/123.hex $ chmod a+wrx /tmp/123.hex $ less /tmp/123.hexqqqq /tmp/123.hexqqqq: No such file or directory $ less /tmp/123.hex $ cat /tmp/123.hex :2000000012C02AC029C028C027C026C025C024C023C022C021C020C01FC01EC01DC01CC0C1 :200020001BC01AC019C011241FBECFEDCDBF10E0A0E6B0E0ECE9F0E002C005900D92A03661 :20004000B107D9F710E0A0E6B0E001C01D92A036B107E1F710D021C0D3CF08958FEF87BB7C :2000600081BB18BA12BA08958FEF88BB82BB089518BA12BA08958FEF87BB80BB849B04C055 :1C00800088B3847088BB01C0C29A859B04C088B3827088BBF3CFC19AF1CFFFCFD6 :00000001FF $
Marcin Bielak, architekt i programista biznesowych aplikacji internetowych. Stawia od początku na wysoką jakość produktu. W programowaniu wykorzystuje: Open Source, Linux, Python, Golang, ECMAScript/JavaScript.