Hallo, falls es weitere Leute hier gibt, die auf Basis von Igor Ceskos USB-Implementation eigene Projekte entwickeln wollen: Hier gibt es Gelegenheit zum Erfahrungsaustausch. Ich fange mal an: (Vorschlag: Erfahrungen bitte laufend durchnummerieren, wegen Bezugnahme) 1. Die beiden Keramikkondensatoren am Quarz sollten lieber doch nicht eingespart werden (15pF). Der Quarz schwingt sonst nicht sicher. 2. Der Mega8 wird mit 3,5 Volt (bei mir: 3,3V) außerhalb der Spezifikation betrieben. Das ist kein Problem, auch nicht beim ISP. Bei mir tuts der serielle Programmer von Olimex in Zusammenarbeit mit der neuesten Version von Ponyprog (2.06c Beta Jul 27 2003), die Version davor tats (unter Windows XP) nicht. Damit der Quarz immer sauber läuft, hab ich sicherheitshalber die CKOPT-Fuse gesetzt (kostet etwas mehr Energie, aber die haben wir ja) 3. Die beiliegende Software arbeitet klaglos. Ich verwende den Treiber und die DLL unverändert. Zusätzlich zur Demo-Applikation verwende ich zum Testen VBA-Makros, die dann direkt ins Excel-Blatt schreiben. Folgendes z.B. zum Senden (also Downstream): Dim RS232Buffer(10000) As Byte Dim RS232BufferLength As Long ... RS232Bufferlength = 10000 RS232BufferLength = DoRS232BufferSend(RS232Buffer(0), 0, RS232BufferLength) ... Entsprechendes zum Empfangen mit DoGetRS232Buffer(RS232Buffer(0), 0, RS232BufferLength). 3. Downstream-Bandbreite: (PC->AVR) enttäuschende 8ms für jedes Byte, macht ca. 125 Bytes pro Sekunde. Ich hab einiges rumgetrickst, da ist wohl nicht mehr zu machen. Es wird immer nur ein einziges Byte transportiert, auch wenn der Name der Routine anderes suggeriert. Es gibt dieselben Zeiten, wenn die ...BufferSend...Routine jeweils byteweise aufgerufen wird. Im Assemblertext sieht man auch, dass jedes Byte nach Übernahme in den USART einzeln per USB quittiert wird. Ein Fifo (wie in Upstream-Richtung) ist nicht vorhanden. 4. Upstream-Bandbreite: konnte ich noch nicht sehr genau messen, aber mindestens 2kB pro Sekunde. Dann ist der uC aber schon nahe an seiner Grenze (Bei mir leuchtet eine LED, solange die Int0-ISR bearbeitet wird, die ist dann spürbar heller) 5. Abfragezyklus: Egal, wie oft die DLL angefragt wird: neue Daten (Upstream) gibt es alle ca. 20ms. 6. Möglicherweise gibt es im Firmware-Fifo (Upstream) einen Softwarefehler: manchmal mischen sich Nullen in den Datenstrom. Passiert generell öfter, wenn wenig Daten fließen. Ich habe den Verdacht, dass das beim Leerlaufen des Fifos passiert. Muss noch genauer untersucht werden. 7. Mein Projekt: Das definitv billigste Selbstbau-Messinterface für meine Schüler, kein Steckernetzteil mehr, Messen und Steuern über Excel/VBA im Anfängerkurs "Rechnergestützte Physikalische Messtechnik". Ist aber noch lange nicht fertig. RS232 brauche ich gar nicht, hab ich in der Firmware umgeflanscht, so dass ich zum Messen (Upstream) einen Bytestrom von den verschiedenen I/O-Einheiten (speziell ADC und Timer1/Input Capture (für präz. Zeitmessungen)) bekomme. Der Timer1 läuft schon als 32-Bit Zeitstempel für die Messungen. Die Schüler empfangen in einer Endlosschleife den Datenstrom und fischen die entsprechenden Ereignisse heraus, um bestimmte Messprobleme zu bearbeiten. (Die Schüler sollen also nicht den Mega8 programmieren, deshalb werde ich auch kein ISP vorsehen) Das wars erstmal. Lasst mal was hören! Mit freundlichem Gruß Frank
Mir leuchtet nicht so direkt ein wieso das billig sein soll wenn man noch VBA und Excel kaufen muss. Ich hab das Teil unter Linux angesprochen und da benoetigt es etwa eine DIN-A4 Seite C-Source und es laeuft. Allerdings ist die Uebertragungsrate wirklich nicht sehr hoch und der Prozessor kann nicht mehr soviel nebenbei machen. Deshalb habe ich jetzt einen USBN9604 am Mega8. Damit komme ich so auf 6-7kb/s und die Bandbreite wird dadurch begrenzt das der USB-Controller ueber einen seriellen Datenbus angesprochen wird. Ausserdem habe ich natuerlich jede Menge Rechenzeit im Mega8 uebrig um mit meinen Daten auch noch was zu machen. Olaf
Hallo Olaf, könntest du den C-Source vielleicht mal posten? Würde mich echt interessieren wie man das teil unter Linux ansprechen kann...
VBA muss man nicht kaufen, das ist im Lieferumfang von Excel & Konsorten enthalten. Statt dessen lässt sich auch VBScript und OpenOffice verwenden - keins der beiden muss gekauft werden.
warum zum teufel excel verwenden.. open office sollts doch auch tun.. sonnst wäre da noch visualisierung mit dem iis... ist für nt4,98,95,2k,... doch kostenlos... und über asp kannst com-objeckte ansprechen... wobei wir da schon bei vbs wären.. nur da sind oberflächen nicht brauchbar einfach hinzutrixen... und im vorletzten..also dezember war doch irgendwas mit software die daten vergewaltwuzln kann... so matlab zeug nur billiger (kann das nicht octave auch ???) das sollte auch mit com-objekten umgehn können...etwas entwicklungsarbeit dann sollte aus der (wenn es sie schon gibt) dll ein com-server werden... dann kannst eigentlich auch von anderen rechnern auf das teil zugreifen dank DCOM ;) btw.. ich bin noch immer verfechter der ethernet methode.... ip-stack drauf... simpel interface auf irgend einem port auf machen... und dann kommen die daten schön brav über tcp/ip in jedes OS rein... ich werde mir aber mal das usb zeug anschaun... weil interessieren würds mich schon... nur 125byte/sec das ist schon etwas mager.... obwohl wenn das senden vom avr schneller geht kann ich mir eigentlich nur vorstellen das die dll langsam ist... gibts dazu ein referenz-design und software für winavr??? ich muss heut eh noch in richtung stadt...dann nehm ich mir gleich das zeug alles mitheim g 73 de oe6jwf / hans
Ich fuerchte ich werde die naechsten zwei Tage sehr beschaeftigt sein, aber wenn ich es nicht vergesse lege ich den Source am Wochenende auf meine Homepage. http://www.ruhr.de/home/criseis/ Olaf
Das Basic im OpenOffice ist halt etwas gewöhnungsbedürftig, aber das liegt natürlich am Gewöhnungsbedürftigen und nicht am OO. Bei mir liefen der Zugriff auf DLLs und auch COM-Objekte recht bald, damit konnte ich schnell alles auf OO-Basic umstellen (allerdings unter Windows). Leider gilt wie überall auch in meiner Schule, dass MS-Office zwar kostet, aber schon bezahlt ist. Ich kann also dort nicht umsatteln, weil es nicht der Schulpolitik entspricht. Übrigens: so guten und flotten Support wie im OO-Forum habe ich vorher noch nie erlebt.
an Hans: es gibt wenige Argumente für USB außer dem Preis. Deshalb braucht eine USB-Minimal-Lösung für 7 Euro nicht gegen Ethernet anzutreten. Das ist eben eine andere Liga. Für die Messwerte, die ein Mega8 pro Sekunde produzieren kann, reicht die Upload-Bandbreite von 2kByte/s völlig aus. Und mit dem eingebauten Timer kann man damit z.B. Zeiten auf die Mikrosekunde genau messen. Das gibt es sonst nicht für das Geld. mfg Frank
an Olaf: Denkst Du bitte daran, die C-Source auf Deine Homepage zu legen (oder hier zu posten)? -Danke! Noch was: hast Du die LibUSB verwendet? An alle: Diesen unglaublichen Codeschnipsel fand ich in der AVR309 im Sourcecode: ;------------------------------------------------------ ;CheckCRCIn: ; kiss USBBUFPTRY ; kiss ByteCount ; ldi USBBUFPTRY,InputBuffercompare ; rcall CheckCRC ; pope ByteCount ; pope USBBUFPTRY ; lip Ihr habt doch bestimmt Ideen, wie man das übersetzen könnte...
Ups...haette ich doch fast vergessen: http://www.ruhr.de/home/criseis/usbtest.tgz Das laeuft bei mir mit usblib-0.1.8. Erwartet keine Wunder, das ist ein Quick+Dirty Hack um die Funktion zu testen. Olaf
Ich möchte den Beitrag nicht kaputt machen, aber meine Frage scheint hier am besten aufgeheben zu sein. Ich habe das ganze mit einem AT90S2313-10PI nachgebaut und habe das Problem, das Windows zwar ein USB:Gerät erkennt, angeblich auch ein Treiber installiert (ohne das ich sagen muß welchen) dann aber schreibt es funktioniet nicht richtig (das USB-Gerät). Ich habe das HEX-File mit PonyProg2000 unter XP fehlerfrei gebrannt. Der Quarz hat zwei 22pf Kondensatoren. Kann mir da evtl jemand helfen? Spannungen sind ok. Ob der Quarz schwingt kann ich ohne Oszi leider nicht messen. Müssen irgendwelche Fusebits gesetzt werden? PonyProg2000 Hat mir nur Lock1 und Lock2 aktiv angezeigt. CKOPT war schonmal garnicht mit in der Liste. Wenn ich die .INF für den Treiber installiere habe ich auch kein Erfolg.
Ganz egal welches Problem du hast, wenn Windoof bei dir einen Treiber installieren will muss es schon ein USB Device gefunden haben und damit das passiert muss da schon einiges an kommunikation zu deinem Microcontroller gelaufen sein. Du kannst dir also sicher sein das der Mega8 erstmal laeuft. Olaf
An Günther und Olaf: Sobald der 1k5-Widerstand D- hochzieht, reagiert XP. Auch wenn gar keine Kommunikation stattfindet, meldet er das Gerät mit "...aber funktioniert nicht richtig". Zu Deinem Problem: Ich kenne nur den großen Bruder des 2313, den 4433. Dort müssen gar keine Fuses aktiviert werden. (CKOPT gibts nicht, weil er die Stromsparfunktion eben nicht hat.) Wenn Ponyprog tadellos arbeitet, mußt Du weiter nach nem Hardwarefehler suchen. Ich glaube, dass noch keine Kommunikation statt gefunden hat. mfg Frank
zu 3. Downstream-Bandbreite: das Teil ist doch ein Hid Device oder ? dann geht bei LO Speed eben nur eine Transaktion /8 ms wieviele Bytes hängt vom Hid Descriptor ab (max 8). Das ist Teil der USB Spec, die man halt nicht umgehen kann. Ich weis jetzt nicht was für eine Schule das ist und was das Lernziel ist. Ich bin aber generell schon der Meinung das Schüler mehr davon hätten, wenn du eine vernuftige HW einsetzen würdest (auch wenn es etwas kostet). Steuerung in Exel halte ich schon für etwas unglücklich. Ich habe zwar allen Respekt vor der Lösung von Igor vor allem wenn man mal überlegt wie lange der programmiert hat um das zum laufen zu bekommen. Thomas
Für das sameln von erfahrungen ist das wiki denk ich eine bessere Plattform
schaut euch mal die usb-specs www.usb.org an bei usb 1 kann alle 1 ms ein frame gesendet werden für jeden daten-frame (mit 8 byte maximum daten) sind zusätzlich 2 frames als quittung nötig. wenn nun nur ein usb gerät am bus hängt, dann macht das theoretisch ca. 333 daten-frames die sekunde mal 8 sind dass dann ca. 2.5kByte/s Daten-Rate. und usb 2 ist mit einem avr in sw nicht zu machen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.