Gast
#4144628
Hallo zusammen, ich habe mich kürzlich mit AVR's beschäftigt, das sind 8Bit ARM Prozessoren die mit bis zu >20Mhz laufen. Es gibt sehr kleine Boards z.B. : OLIMEXINO-85S http://www.olimex.com/Products/Duino/AVR/OLIMEXINO-85S/open-source-hardware Die Arduino IDE auf die ich mich jetzt beziehe kann "normal" lediglich über eine RS232 Verbindung einen Baustein ansprechen. Diese kleinen AVR-Boards haben keinen FIFO / Serial Baustein was eine Kommunikation lediglich direkt über die Pegelleitung Rx/Tx ermöglicht. Entsprechend gering sind die Übertragungsraten. Die Lösung zur Kommunikation ohne RS232 liefert Digispark: http://digistump.com/wiki/digispark/tutorials/connecting Allerdings muss dann auch der Bootloader des Bausteins sowie die Arduino-IDE auf Digsipark umgestellt werden. Den Bootloader kann man sich auf der Seite samt dem hex file herunterladen und mit der micronucleus.exe auf den Baustein übertragen. Vorher sollte man die Spezial Version der Arduino-IDE von Digistump installieren hier werden gleich die Treiber aus der usblib mit installiert. Diese IDE kann problemlos parallel zur Original IDE installiert sein. Im weiteren beziehe ich mich auf den Baustein ATtiny85. Nach dem man die IDE installiert hat, kann man diese nun über das Menu Tools/Board/Digsipark(default 16.5 Mhz) umstellen. Und das auschlaggebend Example über File/Example/DigsiparkUSB/Echo auswählen, und den Baustein damit laden. Jetzt kommt's ! Wenn man das Example auf den Baustein geladen hat, sieht man erstmal nichts. Es ist nun der C/C++ Programmierer der über Windows mit dem Baustein kommunizieren will. Was nun gänzlich un-dokumentiert ist, ist wie das genau erfolgen soll. Das Digsipark verwendet nämlich die sog. VUSB-Lib dies ist eine auf dem Mikrocontroller basierende Abwandlung der usblib und wird über die Arduino-IDE beim Kompilieren des Samples in das AVR-Projekt verlinkt, so das dieses Baustein über drehen von internen Pins über die Tx/Rx Leitung als USB -Gerät auf dem Windows PC erscheint. z.B. Als Joystick / Keyboard /Maus oder wie im Echo -sample als "DigiUSB" mit dem man "reden" möchte. Auf der PC Seite muss man ein Console basierendes Projekt erstellen, und die usblib herunterladen so das die libs/dll/include für die Kommunikation über usblib hergestellt werden kann. Die libusb gibt es hier : http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/1.2.6.0/ Im C/C++ Projekt(VisualStudio) die Pfade für Include und Lib auf die, aus dem Archiv erstellten analogen Verzeichnisse erweitern. Der Treiber wurde bereits bei der Installation der veränderten DigsiPark Arduino-IDE installiert, kann aber im Bin verz. des Archives jederzeit erneut installiert werden, z.B. wenn man das ganze weiter geben möchte. Primitives aber einfaches Beispiel, das zum Kommunikation -Erfolg führt:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
Es ist also die Art der Parameterisierung der missbrauchten Funktion usb_control_msg, um einzelne bytes hin oder her zu transferieren. Diese Ansprechung habe ich nach langer recherche und vielen Experimenten heraus gewonnen. Der Baustein war in der Lage fehlerfrei bis zu 1[KB/s] an Daten zu senden und weit weniger zu empfangen, die ganze Sache führt zum crash des Bausteins wenn man versucht zu viel Eingaben zu senden. Die Basis der Kommunikation sollte also ein Byte -Befehlscode sein, aufgrund dessen der Baustein größere Datenmengen absetzt. Das Senden von Daten an den Baustein geht nur schleppend, das Empfangen ist erstaunlich flott. Basierend auf ein turturial das so leider aber nicht funktinierte: http://codeandlife.com/2012/01/22/avr-attiny-usb-tutorial-part-1/ Ich habe inzwischen eine Mutithread pipeline Klasse entwickelt, wo eine birdirektionale Kommunikation mit dem Baustein wunderbar funktioniert. Und das mit einer nicht sichtbaren PC-CPU -Auslastung. Der Baustein sollte Codetechnich nicht mit weiteren library's belastet werden, dieser hat gut zu tun mit der Abhandlung der VUSB -Lib, liefert aber noch genug Zündstoff seine Port's und analogen Daten an den PC zu übertragen,oder Befehle zu empfangen, man sollte zusehen keine Stringoperationen oder komplexe Programmstrukte auf den Kleincomputer anzuwenden. Für Fragen oder Besserungs-Vorschläge einfach melden. Viel Erfolg Karsten