ATNEL tech-forum
https://forum.atnel.pl/

Możliwości komunikacji procesora AVR z komputerem przez USB
https://forum.atnel.pl/topic20852.html
Strona 1 z 1

Autor:  MSZ98 [ 9 cze 2018, o 21:00 ]
Tytuł:  Możliwości komunikacji procesora AVR z komputerem przez USB

Witam serdecznie wszystkich zainteresowanych!


Jestem całkiem nowy na tym forum i nie wiem do końca, czy dobrze robię dodając tu taki post przedstawiający możliwości ATmegi32 i biblioteki VUSB. Na ten przykład, na elektrodzie zostałem bardzo brzydko potraktowany, postanowiłem zatem wynieść się raz na zawsze z tego forum..


Chodzi o komunikację USB z procesorem ATmega32. Bardzo szybką komunikację umożliwiającą programowi komputerowemu błyskawiczne przesyłanie co 20ms paczki danych zawierającej 504 bajty.
Przesłane do atmegi dane to obrazek dla wyświetlacza od nokii 3310, który ów procesor mimo niedużej szybkości taktowania (16MHz) w locie wysyła za pomocą superszybkiej komunikacji interfejsem SPI do wyświetlacza. Będę starał dostać się na politechnikę świętokrzyską, a nie wypada przychodzić bez jakiejkolwiek wiedzy o wspaniałym, otaczającym nas dziś, jak niegdyś teraz już przestarzały port szeregowy interfejsie USB, dlatego też zrealizowałem ten pomysł.

Jak dla mnie efekt jest co najmniej satysfakcjonujący... To, co rysujemy w programie typu paint.. natychmiast pojawia się na wyświetlaczu od nokii.
Przesył jest na różnorakie sposoby zabezpieczony przed błędami. Skutkuje to bezbłędną komunikacją.
Sam program, który nazwałem Display Paint, czy jakoś tak.. jest w fazie rozwojowej. Dodam wiele funkcji, ale najważniejsza była dla mnie komunikacja.

Na wszelkie pytania, odpowiem w komentarzach.

Jakieś specyfikacje?

Aplikację pisałem w Javie, używałem bibliotek AWT, Swing i LibUsb4Java.
Program do atmegi pisałem w C, używałem biblioteki VUSB oraz własnej superszybkiej do wyświetlacza. Jakby ktoś chciał tę bibliotekę, to mogę udostępnić, ale myślę, że i tak dużo jest tego na internecie. Rzecz jasna ja polecam wszystkim samemu się odważyć coś napisać, bo jak się używa cudzych bibliotek, to zdobywa się mało expa! Rozważałem stworzenie własnej biblioteki do usb, ale pomyślałem, że tylko straciłbym czas, ponieważ VUSB napisane zostało naprawdę super, a w przyszłości podejrzewam, że wszystkie mikrokontrolery będą miały wbudowane interfejsy USB. Aaa.. jakby ktoś się chciał uczyć o USB, to polecam specyfikację usb oraz stronę microsoftu.. wystarczy wpisać "MSDN usb control transfer" na google i umieć angielski.


Kiedyś w wolnym czasie zrobię poradnik krok po kroku, jak przesyłać informacje z komputera do atmegi przez usb, bo niestety nie spotkałem w internecie takiego poradnika, który byłby zrozumiały i prosty.

Tym projektem powinny się interesować raczej osoby, które potrafią zarówno pisać programy na komputer, jak i programować procesory oraz interesują się elektroniką.


Wszystko jest zrealizowane bardzo prosto i wygodnie. USB daje 5V zasilania, a ja potrzebuję 3V, dlatego zbijam napięcie diodą LED podłączoną szeregowo.


ObrazekObrazekObrazek

Jedyny problem, z jakim się spotkałem, to że kiedy maluję wszystko na czarno, to wtedy urządzenie zaczyna się zacinać, jest to bardzo dziwny błąd, mimo to.. po chwili i tak sprzęt po mocnym laggu dochodzi sam do pełnej sprawności, bez jakichkolwiek błędów komunikacji. Po głębszych przemyśleniach dochodzę do wniosku, że jest to spowodowane wyższym poborem prądu przez wyświetlacz, kiedy jest w znacznym stopniu zamalowany. Prościej mówiąc.. jak wyświetlacz jest zamalowany bardziej, to zżera więcej prądu i tego prądu nie starcza dla procesora, procesorowi zaczyna się wtedy ucinać film..


To dopiero taki testowy projekt. W sierpniu planuję zacząć budowę grawerki laserowej CNC opartej o VUSB, ATmegę32 i własny program komputerowy.


Aa.. żeby nie było tak na sucho, dam jakieś dowody zbrodni na tym urządzeniu, podaję link do filmu na youtube, który nagrałem wczoraj za pomocą mojego rozpadającego się smartphone'a.


Autor:  mirekk36 [ 9 cze 2018, o 21:30 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

MSZ98 napisał(a):
mimo niedużej szybkości taktowania (16MHz)

to zobacz to?



MSZ98 napisał(a):
Jakieś specyfikacje?

Aplikację pisałem w Javie, używałem bibliotek AWT, Swing i LibUsb4Java.


to może zainteresuj się TURNIEJEM RYCERSKIM ? ;)

https://mirekk36.blogspot.com/2018/05/t ... s-w-3.html

MSZ98 napisał(a):
Tym projektem powinny się interesować raczej osoby, które potrafią zarówno pisać programy na komputer, jak i programować procesory oraz interesują się elektroniką.

Masz 100% racji ale nie dziw się, że zbyt mało osób na to odpoiwada albo w ogóle nikt nie odpowiada ponieważ nie są to proste tematy dla początkujących - a ZDECYDOWANA większość osób początkujących w V-USB działa albo próbuje działać w trybie HID ... pewnie wiesz o co chodzi ...

mało kto podejmuje rękawicę aby zmierzyć się z tym zagadnieniem o jakim piszesz i stąd mało odpowiedzi - aczkolwiek szkoda że na forum ele.... jak zwykle włączają się tzw ŚPECE którzy niby wszystko wiedzą ale jedyne co ... to potrafią próbować wszystko obrzydzić


Krótko mówiąc temat fajny ale nie jest prosty dla początkującego i musisz zdać sobie z tego sprawę

Zobacz ten konkurs ogłoszony przeze mnie - obejmuje również prace w JAVA ... ale na tym polu nikt się jeszcze nie zgłosił

zgłosili się Rycerze w działach:

- C (Windows/Linux)
- C#
- Delphi (ja osobiście - ale że organizuję konkurs to nie mogę w nim startować)
- Node.js (bardzo ciekawy temat nawet dla mnie osobiście)

a ty jako pierwszy wspominasz o JAVA

Myślę, że to kwestia aby umieć się z poziomu JAVA dobrać do obsługi biblioteki DLL typu LibUSB0.DLL np pod Windowsem - kłopot polega na tym, że ja nie znam kompletnie JAVA więc nie umiem podpowiedzieć w tym zakresie niestety

ale podobnie jak ty uważam temat za bardzo ciekawy

------------------------ [ Dodano po: 2 minutach ]

Może się okazać, że na podstawie już dokonanych przez ciebie prac w JAVA możesz wygrać jedną z głównych nagród w TURNIEJU RYCERSKIM a przy okazji może się czegoś dowiedzieć gdy konkurs dobiegnie końca i Rycerze opublikują swoje kody źródłowe - wtedy może będziesz mógł porównać - a nawet jeśli robisz to na własnej implementacji V-USB to może podpatrzysz jakieś ciekawe dla siebie rozwiązania - z różnych języków programowania ;)

Autor:  MSZ98 [ 9 cze 2018, o 21:37 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

Napisałem bibliotekę do Javy, do obsługi tego dziadostwa. Jest tak banalnie prosta, że ma 4 metody: usbSendData(), usbReadData(), connect(), disconnect().
Wystarczy znać podstawy Javy, żeby napisać program z przyciskami.. albo w konsoli chociaż..

A na elektrodzie, to mnie zaczęli moderatorzy blokować, że niby ironizuję, czy jakoś tak.. zakute łby..



To właśnie, jeżeli dobrze zrozumiałem z tym turniejem, chodzi chyba o to, że można z poziomu PC przesyłać informacje przez różne magistrale.
No to.. właśnie taki był zamysł tego, co zrobiłem.. PC => USB => ATmega32 => SPI => Wyświetlacz..
Taki... emulator pinów z komputera. Coś, co Raspberry Pi ma już samo w sobie..

Autor:  mirekk36 [ 9 cze 2018, o 21:53 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

dobra zostawmy elektrozgrozę - bo wiadomo jak tam jest

V-USB to fajna biblioteka na potrzeby programowego podejścia do USB .... więc w czym masz problem ? I nie pisz, że wystarczy znać podstawy Jaby - bo to, że ty je znasz to nie znaczy że inni na forum je znają ...

a zatem postaraj się opisać bardziej szczegółowo problem - być może będę w stanie coś podpowiedzieć - ale jak mówię nie na poziomie JAVA bo ja nie znam JAVA ani w ząb, ale z poziomu np Delphi/Pascal z powodzeniem nawiązuję komunikację z V-USB

nie ważne zatem szczegóły syntaktyczne danego języka - być może uda się coś podpowiedzieć na poziomie bardziej ogólnym ale najpierw trzeba umieć jakoś wyzizolować problem no i dobrze go opisać ... nie zaś pisać że to jakieś podstawy JAVA

Autor:  MSZ98 [ 9 cze 2018, o 21:57 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

Dziękuję bardzo, ale nie mam żadnych problemów. Chciałem tylko pokazać, że ATmega32 nadaje się do stworzenia strumienia przesyłu danych z komputera przez USB.
Myślę, że jeżeli będzie mi się chciało bawić z tym dalej, to będę mógł bez problemu pokazać na tym wyświetlaczu widok z kamery internetowej na żywo..

Autor:  mirekk36 [ 9 cze 2018, o 22:17 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

no to bardzo dobrze ;) bardzo ciekawe zagadnienie ;) żeby z poziomu JAVA robić sobie takie ciekawostki przy użyciu V-USB ;)

Autor:  MSZ98 [ 9 cze 2018, o 22:23 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

Hmm.. tak zastanawiam się teraz nad tym konkursem.. w filmie mówi Pan wyłącznie o LibUsb, natomiast nie wyłapałem informacji wystarczających do zrozumienia, co jest dokładnie celem konkursu.

Chodzi o to, by zrobić komunikację I2C, albo SPI z komputera używając LibUsb.. Tylko że to fizycznie niemożliwe.. Trzeba by przez LibUsb skontaktować się z procesorem AVR i użyć go, aby skontaktować się z I2C lub SPI. Czy o to Panu chodziło?

Proszę o wybaczenie za takie zadręczanie, ale czasami ciężko pojmuję coś na szybko.

Dziękuję za odpowiedzi.

Autor:  mirekk36 [ 10 cze 2018, o 02:52 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

MSZ98 napisał(a):
Trzeba by przez LibUsb skontaktować się z procesorem AVR i użyć go, aby skontaktować się z I2C lub SPI. Czy o to Panu chodziło?

Ale dobrze rozumiesz, o to chodziło ... a dokładniej mówiąc o skorzystanie z gotowego już hardware jakim jest programator ATB-USBasp który ma zaimplementowane komendy API do tego celu. I właśnie żeby się posługiwać tymi komendami API, opisanymi w PDF na stronie producenta:

http://atnel.pl/programator-atb-usbasp.html

można używać LibUSB z poziomu komputera w różnych językach programowania ...

Tak tylko o tym wspomniałem jak zobaczyłem, że umiesz korzystać z LibUSB w JAVA ... o ile też dobrze zrozumiałem ;)

Autor:  MSZ98 [ 10 cze 2018, o 09:02 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

Tak, jak wspomniałem, całe oprogramowanie użyte do tego "wyświetlacza na usb" pisałem sam, na komputerze używałem LibUsb, żeby móc korzystać z USB, a na mikroprocesorze, ponieważ to jest ATmega32 i nie ma wbudowanego USB, jak np. ATmega8U2, ATmega16U2, ATmega32U2, korzystam z dzieła Pana Starkjohanna, jakim jest VUSB. A wszystkiego uczyłem się z 5 źródeł: specyfikacja oraz kod VUSB, wikipedia po angielsku, specyfikacja USB, MSDN - bardzo dobrze wytłumaczone transfery kontrolne, specyfikacja LibUsb.

Ponieważ używam javy, to używam biblioteki LibUsb4Java. Taka sama, jak LibUsb, tylko że na javę. Podam przykład..

Transfer kontrolny w LibUsb:

libusb_control_transfer ( libusb_device_handle * dev_handle,
uint8_t bmRequestType,
uint8_t bRequest,
uint16_t wValue,
uint16_t wIndex,
unsigned char * data,
uint16_t wLength,
unsigned int timeout
);

Transfer kontrolny w LibUsb4Java:

LibUsb.control_transfer (
DeviceHandle devHandle,
byte bRequestType,
byte bRequest,
word wValue,
word wIndex,
ByteBuffer data,
long timeout
);

Jak widać w javie nie operujemy na niskopoziomowych wskaźnikach do pamięci, jak libusb_device_handle *, ale na obiektach typu DeviceHandle.
Już w C++ byłoby podobnie, jak w javie. W javie nie ma też parametru wLength, ponieważ on jest częścią ciągu bajtów, jakim jest ByteBuffer, a w C bez niego nie byłoby nawet wiadomo, gdzie kończy się wskaźnik unsigned char * data.
Ja sprowadziłem tę funkcję do postaci bez bitmapy bmRequestType, która między innymi określa kierunek danych w "Data Stage" transferu kontrolnego.
Ogólnie, żeby VUSB odebrało do funkcji USB_PUBLIC uchar usbFunctionSetup() transfer kontrolny, to trzeba odpowiednio skonfigurować bmRequestType, dlatego łatwiej było mi napisać funkcję typu sendData, readData, niż za każdym razem musieć się bawić bezpośrednio z LibUsb.



Gdzie Panu wysłać kod, program i resztę?



Aaa.. chciałem Panu jeszcze wspomnieć, że kilka lat temu, swoje pierwsze kroki z mikrokontrolerami robiłem przy Pańskich godzinnych filmach. Bardzo dziękuję i za to.
Niestety, jak pan widzi po schemacie.. nie wiele dobrego weszło mi w krew.. nawet nie stosuje kondensatorów przy rezonatorze :P.

Autor:  mirekk36 [ 10 cze 2018, o 11:00 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

MSZ98 napisał(a):
Tak, jak wspomniałem, całe oprogramowanie użyte do tego "wyświetlacza na usb" pisałem sam, na komputerze używałem LibUsb, żeby móc korzystać z USB, a na mikroprocesorze, ponieważ to jest ATmega32 i nie ma wbudowanego USB, jak np. ATmega8U2, ATmega16U2, ATmega32U2, korzystam z dzieła Pana Starkjohanna, jakim jest VUSB


Dlatego od razu zobaczyłem i doceniłem twój spory wkład pracy - sam wiem ile to kosztuje, że tak powiem ... no trzeba troszkę posiedzieć ale efekty są świetne

oczywiście o tym konkursie to tak przy okazji powiedziałem widząc, że te zagadnienia nie są ci obce a na dodatek akurat wpasowujesz się w kategorię JAVA w tym konkursie ;)

MSZ98 napisał(a):
Ja sprowadziłem tę funkcję do postaci bez bitmapy bmRequestType, która między innymi określa kierunek danych w "Data Stage" transferu kontrolnego.
Ogólnie, żeby VUSB odebrało do funkcji USB_PUBLIC uchar usbFunctionSetup() transfer kontrolny, to trzeba odpowiednio skonfigurować bmRequestType, dlatego łatwiej było mi napisać funkcję typu sendData, readData, niż za każdym razem musieć się bawić bezpośrednio z LibUsb.

No i DOKŁADNIE tak się to robi i do tego również sprowadza się korzystanie z tego API dla ATB-USBasp ... nie wiem czy widziałeś na forum, ale już dwóch poważnych Rycerzy startuje - jeden z nich tworzy program w C# , a drugi w bardzo dalekim mi języku programowania - chociaż to nie jest może stricte język - ale za to bardzo interesujący: Node.js - również rewelacyjne efekty pokazał już ten kolega na forum ...

gdybyś jeszcze ty coś zrobił w Java ;) to pięknie zamknęłyby się wszystkie kategorie konkursu ;)

MSZ98 napisał(a):
Gdzie Panu wysłać kod, program i resztę?

Prześlij na mój adres biuro@atnel.pl ale tylko wtedy jeśli zgadzasz się na upublicznienie kodu, żeby później inni również mogli z tego skorzystać w Java. Jeśli wolałbyś aby nie publikować - co ja oczywiście SZANUJĘ - to wtedy z kolei nie za bardzo można wziąć udział w tym konkursie a zatem nawet nadsyłać swojej pracy ...

Tymczasem jeśli masz już takie duże doświadczenie w Java z LibUSB to wydaje mi się właśnie, że po zapoznaniu się z dokumentacją API dla ATB-USBasp byłbyś w stanie nawet na sucho, jak to się mówi napisać chociażby mały programik do migania diodą LED i gdyby działał - a źródła byś chciał pokazać również albo szczególnie innym tu na forum, czy ja to później zrobię ogłaszając zwycięzców - no to uważam, że również miałbyś dużą szansę na wygranie właśnie tego programatorka plu DODATKU do niego ;)

------------------------ [ Dodano po: 1 minucie ]

MSZ98 napisał(a):
Niestety, jak pan widzi po schemacie.. nie wiele dobrego weszło mi w krew.. nawet nie stosuje kondensatorów przy rezonatorze

wiesz do prototypu, na stykówce przy takim prostym projekcie to ja też często nie daję kondensatorów do kwarca ;) ... ale mówię do prototypów ... za to myślę, że jeśli tworzysz gotowe urządzenie dla klienta np - to raczej na pewno dbasz o dobre praktyki projektowania ;)

Autor:  MSZ98 [ 10 cze 2018, o 13:21 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

Przejrzałem API tego całego USBASP, ale nie widzę nigdzie Vendor ID ani Product ID. Czy może napisać program, w którym będzie Pan mógł wpisać ID urządzenia i producenta?


Przy okazji chciałem zapytać o coś.. Otóż.. kiedy korzystałem z VUSB, to zauważyłem, że VUSB nie przyjmuje ode mnie transferów kontrolnych bez "Data Stage".
To znaczy, parametr wLength ustawiam na 0. I nie wiem do końca, czy to VUSB nie chce przyjąć takich transferów, czy LibUsb ich nie wysyła.
I to jest właśnie pytanie.. udało się Panu do VUSB wysłać transfer kontrolny o parametrze wLength = 0?

Autor:  mirekk36 [ 10 cze 2018, o 13:35 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

MSZ98 napisał(a):
Przejrzałem API tego całego USBASP, ale nie widzę nigdzie Vendor ID ani Product ID. Czy może napisać program, w którym będzie Pan mógł wpisać ID urządzenia i producenta?

Nie dość że widać VID i PID - to wystarczy w necie wpisać USBASP .... VID PID i masz pan od razu ;) toż to najpopularniejszy programator do AVRków na świecie

Autor:  MSZ98 [ 10 cze 2018, o 13:46 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

Ok, dziękuję.

Autor:  MSZ98 [ 18 kwi 2020, o 09:33 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

Link do programów i kodu źródłowego
https://www.dropbox.com/s/d94ygt4dbs5or ... a.zip?dl=0

Autor:  mirekk36 [ 18 kwi 2020, o 09:57 ]
Tytuł:  Re: Możliwości komunikacji procesora AVR z komputerem przez

I bardzo fajnie - przyda się ludziom szczególnie po projekcie ORANGEBOOK ;) Ja tam w ogóle nie umiem pisać w Java no ale przecież wielu innych chętnie używa tego języka.

tylko może dodam ten twój plik ZIP jako złącznik na forum, bo takie linki dziwne do dropboxów i innych stron później znikają i są dziury na forum.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/