Forum: Mikrocontroller und Digitale Elektronik 18F2550 als USB Device


von Gero N. (geronimo76)


Lesenswert?

Habe mir mal vorgenommen, bisschen mit USB rum zu experimentieren ... 
Also machte ich mich auf die Suche nach entsprechendem Code und wurde 
nahezu erdrückt, von der Menge der Informationen ... Die Anleitungen auf 
SPRUT bekomme ich auch nicht zum laufen ... nun meine Frage:
Ich brauche bzw. suche sowas wie ein Grundgerüst für die Umsetzung 
18F2550 als USB Device.. was ich später mit diesem Divece machen will, 
will ich dann selber als Code ergenzen (übungshalber erst einmal paar 
LED's ein/ausschalten ala SPRUT) .. Aber ich steige einfach nicht durch 
... so viele INCLUDES aus x unterverzeichnissen ... ect ...

hat wer nen Link oder ne eigen gebastelte "grundausstattung" für die USB 
device entwicklung?

von Wolfgang M. (womai)


Lesenswert?

Schau Dir mal diesen Beitrag an:

http://www.mikroe.com/forum/viewtopic.php?f=88&t=26891&hilit=usb

Ungefaehr in der Mitte findest Du ein komplettes - getestetes! - 
Demoprogramm von mir - d.h. sowohl Mikrocontroller-Firmware als auch das 
zugehoerige Programm fuer den PC. Sollte ohne Aenderungen lauffaehig 
sein. Allerdings ist der Mikrocontroller-Compiler MikroC von 
Mikroelectronika, nicht C18 von Microchip.

Wolfgang

von Helmut (Gast)


Lesenswert?

Hallo Wolfgang, hallo Gero,
ich bin auch mit Mikroe, allerdings in Basic, unterwegs.

Diese Compiler nehmen Einem die Arbeit mit den HID-Kram ab.

Kann ich nur empfehlen, inzwischen bin ich auf dem PIC32-Compiler 
unterwegs.
DAS SIND SPITZEN IC'S; MIT VIEL ROM und RAM.

Eine meiner Anwendungen sind hier:
http://www.ip-symcon.de/forum/f19/usb-funktions-kontroller-modul-8286/index2.html#post79881
Und auf Youtube unter
http://www.youtube.com/watch?v=qQIJpl2lpf8

Gruß Helmut

von Potter (Gast)


Lesenswert?

Am Einfachstens ist es mit der Firmware vom Hersteller. Bei Microchip 
bekommst Du den kompletten USB Stack frei Haus mit unzähligen 
Beispielen. Dazu brauchst Du:

- den Stack MCHPFSUSB (Download bei Microchip)
- die IDE MPLAB (Download bei Microchip)
- den C18 Compiler (Download bei Microchip)

Programmiert wird das Ganze über die ICSP-Schnittstelle (hierzu findest 
Du hier im Forum die Beschaltung).
Alles auf einem Steckbrett aufbauen, eine Demo auf den PIC laden und 
erst mal testen, ob es funktioniert. Falls nein, dann stimmt Dein 
Hardwareaufbau nicht. Falls ja, kannst Du das Projekt soweit kürzen, bis 
nur noch der Core übrigbleibt.

Allerdings, wenn Du Dich ernsthaft mit USB beschäftigen möchtest, dann 
empfehle ich Dir, den Stack von Grund auf selber zu programmieren. 
Stichworte hierzu: Enumeration, Control-Transfer, SETUP-Packet. Das Buch 
von Jan Axelson hilft dabei sehr gut.

Gruß Potter

von Gero N. (geronimo76)


Lesenswert?

langsam verliehr ich die Lust :( .. nix funktioniert .. hab mir die 
MCHPFSUSB  LIB runter geladen und bin dann nach spruts anweisungen 
vorgeggangen... davon abgesehen, das die Ordnerstrukturen anders sind, 
als beschrieben, findet er mal die eine, mal die andere datei nicht ... 
egal welche demo ich auch teste ... manchmal klappt es sogar mit dem 
dateien, dann schmeißt er mir fehlerhafte deklarationen raus .. oder ich 
soll eine datei anpassen usbcfg ... die ich aber nirgends finde :( alles 
echt deprimierend

von Jens (Gast)


Lesenswert?

Moin, ich habe die USB Device - CDC - Serial Emulator Demo erfolgreich 
auf dem 18F2550 zum laufen bekommen. Es sind nur einige Änderungen 
vorzunehmen da der Code u.a. für den 4550 ist. Nach der Anleitung von 
Sprut bin ich auch nicht zum Ziel gekommen da MC offenbar eine neuere 
Version der Lib eingestellt hat.

Zum tiefergehenden Verständnis suche ich noch ein Tutorial, welches auf 
die Demos von Microchip aufsetzt um diese in eigene Projekte 
einzubinden. Leider habe ich keine Anleitung dazu gefunden und der 
Quelltext ist nur sehr dürftig kommentiert.

von Gero N. (geronimo76)


Lesenswert?

ja, genau ... mit dieser hatte ich mich dann etwas ganauer auseinander 
gesetzt, da sie der sprut anweisung am nahesten kam. aber ich habe wohl 
im gegensatz zu dir, nicht alle nötigen änderungen vorgenommen.

von Michael L. (michaelx)


Lesenswert?

Hallo,

ich habe meine ersten Versuche genau wie Jens gemacht, und auch das Demo 
von Microchip vom 18F4550 auf 18F2550 umgebaut.

Bei Sprut gibt es auch ein interessantes Projekt, einfach mal anschauen:

http://www.sprut.de/electronic/pic/projekte/usb4all/usb4all.htm


Viel Erfolg.

von Joachim .. (zinnkruemel)


Lesenswert?

Hi Leuts,
es wird wahrscheinlich so sein wie's immer ist. Der Code würde zwar 
gehen, jedoch findet der Linker wohl den Kram nicht... echt traurig. 
Frage mich ob das bei Atmels IDE auch so gruselig ist.

Ich bin auf der Suche nach nem USB-Board auf 2550er Basis, aber 
möglichst kein DIP (wie das Olimex-Board). Auch keinen 16er, besser 18er 
(denke mal die sind in C einfacher zu handhaben, könnte mich aber auch 
täuschen, hab schon lange nix mehr mit den 16ern gemacht). Jibbed da was 
Nettes?

von Joachim .. (zinnkruemel)


Lesenswert?

An den Threadstarter:
Was ist aus deiner PIC DCF-Uhr geworden? Läuft sie mittlerweile?


Wie gestaltest du das USB-mäßig auf der PC-Seite? Verwendest du was 
fertiges?
Ich bin nicht so der PC-Programmierer, hab zwar mal mit der 
Express-Edition rumgeeselt aber habs dann irgendwann sein lassen. 
Knuffig wäre irgend ein Plugin für Open-Office oder irgendwas Einfaches, 
Konfigurierbares... wo man ein selbergemachtes Bildchen anklickt und 
damit Bit schaltet. Gibt's so was irgendwo?

von Michael L. (michaelx)


Lesenswert?

Hi Joachim.

Joachim ... schrieb:
> Hi Leuts,
> es wird wahrscheinlich so sein wie's immer ist. Der Code würde zwar
> gehen, jedoch findet der Linker wohl den Kram nicht... echt traurig.
> Frage mich ob das bei Atmels IDE auch so gruselig ist.

Wo hast/hattest du denn konkret Probleme? So hilft dein Einwurf dem Gero 
Nimo ja nicht wirklich weiter.

> Ich bin auf der Suche nach nem USB-Board auf 2550er Basis, aber
> möglichst kein DIP (wie das Olimex-Board). Auch keinen 16er, besser 18er
> (denke mal die sind in C einfacher zu handhaben, könnte mich aber auch
> täuschen, hab schon lange nix mehr mit den 16ern gemacht). Jibbed da was
> Nettes?

16er PICs mit USB stehen ja wohl sicher nicht zur Diskussion, zumal es 
von den beiden verfügbaren 16er Chips nie eine Version mit Flash gegeben 
hat. Mal ehrlich, wer will heute beim Entwickeln noch mit dem UV-Löscher 
herum wursteln, wenn es nicht unbedingt sein muss.

Ob es was Nettes gibt? - Frag doch mal die Suchmaschine deiner Wahl nach 
"nett+board+PIC+USB". :-D - Na gut, besser ohne "nett". ;-)

Hab ich zwar nicht, sieht aber nett aus:
http://www.diolan.com/pic/demoboard.html

SCNR :-P

Schönen Tag noch.

von Joachim .. (zinnkruemel)


Lesenswert?

>Wo hast/hattest du denn konkret Probleme?

Najaaah... C18-Manual bei aktueller V8.63 von 2005(!), inc-Pfade stimmen 
nicht, C18 liegt defaultmäßig auch wo anders, compilieren geht hinten 
und vorne nicht, dann macht man selber noch einen Fehler (oder 
mehrere)... ein hartes Brot für Einsteiger. Ich hab zwei volle Abende 
gebraucht bis alles lief.

>16er PICs mit USB stehen ja wohl sicher nicht zur Diskussion
Ich hab keine Ahnung ob's in der Richtung überhaupt was Sinnvolles 
gibt/gab.

von Holger W. (holgerw)


Lesenswert?

Ich habe eben das Sprut usb4all V7 auf einem 18F4555 zum Laufen 
gebracht.
Toll was der Sprut da zur Verfügung stellt !
Erst das Original HEX, dann auch selber compiliert.
Wichtig ist wirklich die Pfade anzupassen, das ist etwas mühselig, aber 
nach 15 Minuten suchen und einige Zeilen auskommentiert die er meinte 
nicht zu kennen läuft es jetzt auch.
Der Compiler sagt ja welche Dateien ihm fehlen und im Projekt müssen die 
Pfade dann halt angepasst werden. Einfach nach den Dateien suchen und 
die Angaben im Projekt anpassen... ja sagt sich so einfach....

von Gero N. (geronimo76)


Lesenswert?

Nach kleiner Pause wieder da..

>An den Threadstarter:
>Was ist aus deiner PIC DCF-Uhr geworden? Läuft sie mittlerweile?

Das DCF77 Modul lief bzw. läuft nun einwandfrei.. hatte noch einige 
änderungen in der abfrage vorgenommen und den Codeaufwand und sync-zeit 
zu verkleinern .. das signal ist hervorragend, habe nur sehr selten 
(Wetter) empfangsprobleme ... habe das DCF77 modul von reichelt ... kann 
ich hiermit nur empfehlen ...

Leider hab ich dann meinen letzten 18f4520 verheizt :( falsch aufs Board 
gesetzt -> kurzschluss -> defekt ... programmieren kann ich ihn lustiger 
weise noch ...

Nach dem DCF erfolg kamen erstmal neue Probleme mit Interrupts auf, die 
ich aber bis dato nicht lösen konnte, wegen def. PIC ... Interrupt 
umschaltung ect ,,,, hab ich in nen anderen Thread erörtert ....

So .. zurück zu USB ... ich habe dieses Project erstmal nicht weiter 
verfolgt, da es ja nur ein lückenfüller war umd die zeit zu überbrücken, 
bis mein neuer 18f4520 da is ...

Auch weitere versuche, einen standard serial emu über usb zu 
realisieren, schlugen fehl ... habs letztendlich aufgegeben und werde 
dieses project erst wieder aufnehmen, wenn ich USB benötige ... momentan 
hat wieder mein Aquarium/terarium-steuerung mit dcf77 vorrang .. sind 
nur noch nicht alle teile da ...

Das mit dem verheizen meiner PIC's passiert(e) mir leider nicht zum 
ersten mal .. manchmal, bzw. beim 44Pin'er bekomm ich einfach keine 
programmierverbindung hin (inCircuit) ,,, muss den immer von meinem 
breadboard abstecken -> in den programmer rein (ist ein einfach über 
serial angeschlossender brenner) -> brennen -> wieder aufs Board .. und 
dann passierts ... um ein raster versetzt -> AUA^^ .. vllcht liegt es am 
flachbandkabel,  das der Brenner den PIC nicht findet ... oder Kabel is 
zu lang ... ich weiß es nicht

von Joachim .. (zinnkruemel)


Lesenswert?

>Kabel is zu lang
Mein erster Brenner war auch n Selbstbaubrenner, ich konnte machen was 
ich wollte, mehr als 25cm Kabellänge war nicht drin. Einmal ging mir der 
Brenner aus unerklärlichen Gründen kaputt. Ehrlich gesagt: Ich habe an 
diese Stelle keine Lust mehr auf Selbstbau. Hab n ICD3 gekauft, 
zuverlässig und pfeilschnell.


Ich mach mittlerweile kaum noch was auf m Steckbrett (außer 
Analog-Forschung), mittlerweile hab ich vier kleine Olimex Boards, die 
sind ganz knuffig.

von Michael (Gast)


Lesenswert?

Gero Nimo schrieb:
> suche sowas wie ein Grundgerüst für die Umsetzung
> 18F2550 als USB Device

Im Franzis-Verlag gibt es ein Buch zu USB-Devices mit dem 18F2550. 
Genauen Titel weiß ich grade nicht, steht bei mir daheim im Regal und 
kann ich später mal posten ;)

von Michael L. (michaelx)


Lesenswert?

Joachim ... schrieb:
> mehrere)... ein hartes Brot für Einsteiger. Ich hab zwei volle Abende
> gebraucht bis alles lief.

2 Abende suchen und probieren sind doch ganz OK.

>>16er PICs mit USB stehen ja wohl sicher nicht zur Diskussion
> Ich hab keine Ahnung ob's in der Richtung überhaupt was Sinnvolles
> gibt/gab.

Ja, gab es schon: PIC 16C745 und 765

War aber nur Low-Speed und noch mit EPROM statt Flash. Man musste also 
zur Entwicklung die sehr, sehr teuren Packages mit Fenster verwenden, 
und mit UV löschen.

Das mal als kleiner Ausflug in die Geschichte ... ;-)

von Gero N. (geronimo76)


Lesenswert?

mhh, ich werd wohl mal das beispiel von sprut nachbauen ,,,
http://www.sprut.de/electronic/pic/projekte/usb4all/usb4all.htm

sieht einfach aus und sollte meinen ansprüchen genügen ... mal sehe, wie 
es läuft

von Tobi D. (fanti)


Lesenswert?

schade, dass du das DCF77 Modul nicht mit dem 2550 aufgebaut hast, das 
habe ich mir vorgenommen aber bis jetzt wurde es leider noch nix, da ich 
mich vor der Modul-Signalauswertung scheue

Ich kann mich holgerw nur anschließen, das usb4all von sprut ist der 
hammer!
USB anschließen und mitgeliefertes Testprogramm starten, einfacher gehts 
nicht.
Ich bin gerade dabei mich dort einzuarbeiten und eine eigene 
PC-Steuersoftware in C zu schreiben.

Wenn du ein eigenes Projekt machen möchtest, dann benutze doch 
das"USB-Interface-Beispiel". Ok, die Einrichtung ist wie schon erwähnt 
etwas aufwändig bis alle Pfade stimmen aber wenn es dann läuft, rennt es 
ohne Probleme.

von Joachim .. (zinnkruemel)


Lesenswert?

>Ich bin gerade dabei mich dort einzuarbeiten und eine eigene
>PC-Steuersoftware in C zu schreiben.

Hi,

das klingt ja super interessant, würde mich da vielleicht mit 
anhängen...
halt uns aber auf dem Laufenden.

In C? Nicht C++?
Linux oder Win? Express Edition?

von Gero N. (geronimo76)


Lesenswert?

Tobi D. schrieb:
> schade, dass du das DCF77 Modul nicht mit dem 2550 aufgebaut hast, das
> habe ich mir vorgenommen aber bis jetzt wurde es leider noch nix, da ich
> mich vor der Modul-Signalauswertung scheue

ich kann dir kurz meine Ansätze erläutern, was das auswerten des dcf77 
signals angeht...

hardwareseitig leite ich das signal, mit vorgeschaltetem transistor auf 
die INT1 und INT2 eingänge ... INT1 = Interrupt bei sinkender Flanke, 
INT2 bei steigender. Timer1 läuft bei mir in 10ms takt ...

1. nach einschalten dauert es bis zu 20 sek. bis das dcf modul was 
sendet ,,, solange ist datenausgang auf LOW ...
2. sobald du die erste steigende Flanke empfängst (INT2) gehts los ...
3. du empfängst eine Sinkende Flanke -> timer1 auf 0 setzen -> Timer1 
starten
4. du empfängst eine Steigende flanke -> timer1 stoppen -> wert auslesen 
und entsprechend deiner betaktung die MS ausrechnen
5a. signallänge rund 800ms -> ein HIGH wurde gesendet
5b. signallänge rund 900ms -> ein LOW wurde gesendet
5c. signallänge > 1500ms -> die 59. sekunde wurde erreicht ...
6. jedes Low bzw High schreib ich in ein Array
7. ich merke mir, wann die 1500ms signallänge war ...
nach erreichen einer arraylänge von 60 ist lesevorgang abgeschlossen ... 
jetzt muss man nur noch die versetzung der bits umrechnen (wann kam das 
1500ms signal -> das nächste signal war eig. Bit 1 (sek1)

somit kannst du dir leicht die positionen für minuten stunden ect 
errechnen ... den BCD in brauchbare werte umwandeln ... fertig

nach meiner methode dauert es genau 60sek, bis alle daten empfangen 
wurden ... nicht mehr und nicht weniger.

am ende werte ich noch die parity bits aus + ob die daten relevant sind 
(stunden zw. 0 und 23 ... ect) wenn ja -> die DCF empfang beenden, 
ansonsten neustart ---

in 9 von 10 fällen funktioniert es tadellos ... machmal verschluckt er 
bits aber seitdem ich auch die relevanz der daten auswerte, ist dieser 
fehler auch minimal ...
nebenbei läuft noch ein zähler, der die versuche zählt ... nach 5 
unbrauchbaren durchläufen bricht er die ganze routine ab und versucht es 
1h später nochmal .. machr dann den sonstigen kram, aber ohne auf 
zeit-schaltungen einzugehen

von Michael (Gast)


Lesenswert?

So, bin wieder daheim und kann nun das Buch benennen falls es 
interessieren sollte (ich find es gut).

Titel: USB in der Messtechnik
Verlag: Franzis
ISBN: 978-3-7723-5509-7

Leider hab ich mich etwas vertan was aber nicht unbedingt ein Problem 
sein sollte. Im Buch wird nicht der 18F2550 verwendet sondern der 
18F4550.

von Gero N. (geronimo76)


Lesenswert?

Michael schrieb:
> So, bin wieder daheim und kann nun das Buch benennen falls es
> interessieren sollte (ich find es gut).
>
> Titel: USB in der Messtechnik
> Verlag: Franzis
> ISBN: 978-3-7723-5509-7
>
> Leider hab ich mich etwas vertan was aber nicht unbedingt ein Problem
> sein sollte. Im Buch wird nicht der 18F2550 verwendet sondern der
> 18F4550.

Sollte ansich kein Problem sein, da beide nahezu identisch sind ... der 
4550 ist halt ein 44Pin'e rmit entsprechend mehr port/IO-Pins.

werd mir mal die lektüre bei gelegenheit zu gemüte führen

von Tobi D. (fanti)


Lesenswert?

Joachim ... schrieb:
> In C? Nicht C++?
> Linux oder Win? Express Edition?

Sorry, wollte eigentlich nur in den Raum werfen, dass das usb4all viel 
potential hat.
Ich habe mich für c# entschieden, da ich dort eine ansehnliche GUI ohne 
großen Aufwand "zusammenbasteln" kann. (Win, nicht die Express)

Gero Nimo schrieb:
> ich kann dir kurz meine Ansätze erläutern, was das auswerten des dcf77
> signals angeht...

danke für den Überblick, klingt gut durchdacht
motiviert mich dann doch demnächst ein paar freie Stunden in das Modul 
zu investieren :)

von Gero N. (geronimo76)


Lesenswert?

für die USB - Windowsanwendung werd ich, falls ich den 18f2550 mal zum 
laufen bekomme, eine Application mit hilfe von delphi schreiben.

Aber soweit ist es noch lange nicht ... will erstmal mein 
terrarium-project beenden .. danach sollte eig. ein 
Home-Automation-projekt kommen .. vllcht zieh das usb project vor ...

von Holger W. (holgerw)


Lesenswert?

Ich hab auch Sachen mit Delphi vor und schon Änderungen am Sprut 
Programm gemacht. Meld dich mal wenn du was vorhast, vielleicht kann man 
sich ergänzen.
Im Moment versuche ich gerade über USB ein am 18F4455 hängendes LCD per 
I2C anzusteuern...

von Gero N. (geronimo76)


Lesenswert?

Holger W. schrieb:
> Ich hab auch Sachen mit Delphi vor und schon Änderungen am Sprut
> Programm gemacht. Meld dich mal wenn du was vorhast, vielleicht kann man
> sich ergänzen.
> Im Moment versuche ich gerade über USB ein am 18F4455 hängendes LCD per
> I2C anzusteuern...

yo, gern .. bissel brainstorming bringt immer was ... aber wie gesagt, 
dieses projekt dauert noch ... warte immer noch auf meine bauteile von 
reichelt, um mein derzeit. projekt beenden zu können ,,, und da muss ich 
auch erst noch paar offene fragen klären ...

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
Noch kein Account? Hier anmelden.