Forum: Mikrocontroller und Digitale Elektronik USB-HID Beispiel für PIC18F2550 und XC8 - Compiler


von Jan (Gast)


Lesenswert?

Ich brauche Hilfe bei der USB-HID Firmware für einen PIC18F2550
Die verwendete IDE : MPLAB X IDE v5.25, Compiler XC8 v2.10

Eine bestehende Relaykarte für spezielle Messzwecke soll auf USB 
umgestellt werden. Verwendet wird dort der PIC18F2550. Zur Zeit steuert 
ein Windows10 PC (c# .net App) die Karte über die serielle 
Schnittstelle.
Die Anforderungen an die Kommunikation sind niedrig. (Hin und wieder 
wird ein Relay umgeschaltet und ein ADC wert zum PC übertragen) Die 
Hardware ist für USB vorbereitet. (20MHz Quarz, 1µF an VUSB). Bei der 
Umstellung auf USB gibt es Probleme.

Leider konnte ich kein USB-HID Beispiel für diese MCU für XC8 Compiler 
finden. Ich habe ein Beispiel aus der letzten Microchip MLA library 
(v2018_11_26) für einen pic18f46j50 als Startpunkt genommen.
USB_Device_-_HID_-_Mouse

Nach wenigen Modifikationen (Portanpassung für zwei LEDs und eine taste) 
konnte ich das Projekt für den 18f2550 kompilieren und flashen.
Nach dem anschließen des (pic18f2550) an einen windows10 PC über USB, 
wird es als Maus richtig erkannt. In diesem Beispielkode sollte sich der 
Mauszeiger in kreis bewegen. leider passiert nichts. (keine 
Datenübertragunbg)

Als nächstes habe ich ein anderes beispielprogram genommen.
USB_Device_-_HID_-_Custom" für pic18f46j50. Nach kleinen Modifikationen 
(wie oben, Portanpassung) konnte ich das Programm kompilieren und 
flashen.
Es wird vom PC wieder richtig erkannt, eine Datenübertragung ist leider 
nicht möglich. (zu diesem Beispiel gibt es eine kleine Windows App 
womit man eine LED toggeln  und eine Potispannung auslesen kann. Das LED 
toggeln und die Auslesung der Potispannung funktionieren nicht)

Ich habe in Datenblättern den USB-Kapitel für den pic18f2550 mit dem 
pic18f46j50 verglichen. Sie scheinen identisch zu sein. Der einzige 
Unterschied den ich finden konnte war in der usb-ram section.

pic18f46j50 usb ram : 0x0h .. 0xebfh (banks 0 to 14)
pic18f2550 usb ram : 0x400h .. 0x7ffh (banks 4 to 7)

Der PIC18F2550 kann nur auf bestimmte Speicherbereiche zugreifen. Könnte 
es daran liegen das ich keine Datenübertragung sehe?

Vielleicht hat hier jemand Erfahrung mit den USB Makros für die Pics und 
könnte mir einen Tipp geben.
Gibt es ein USB-HID Beispiel für den  pic18f2550 Und XC8 Compiler?
(Was ich brauche ist ein fertiges einfaches Beispielprojekt als Basis)

Gruss,
Jan

von Erni (Gast)


Lesenswert?

Ich habe leider keine Erfahrung, aber vielleicht kann dir
das Projekt USB4all von Sprut weiterhelfen:

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

PIC18F2455/PIC18F2550, mit Quelltexten für MCD und CDC.

Gruß
Erni

von Frank K. (fchk)


Lesenswert?

Ihr verwendet aktuell den PIC18F2550. Das ist ein sehr alter PIC. Es 
gibt inzwischen neuere Typen: PIC18F25K50 (5.5V tauglich) und 
PIC18F25J50 (3.3V).

Die Chips sind untereinander pinkompatibel.

https://www.microchip.com/wwwproducts/en/PIC18F2550
https://www.microchip.com/wwwproducts/en/PIC18F25K50
https://www.microchip.com/wwwproducts/en/PIC18F25J50

Es könnte weniger Arbeit sein, einfach auf einen aktuellen PIC 
umzusteigen als die recht neue MLA auf den ziemlich alten PIC 
zurückzuportieren. Und der PIC18F25J50 ist aus der gleichen Familie wie 
der PIC 18F46J50, von dem Du die Beispiele hast.

fchk

von Volker S. (vloki)


Angehängte Dateien:

Lesenswert?

Jan schrieb:
> Der PIC18F2550 kann nur auf bestimmte Speicherbereiche zugreifen. Könnte
> es daran liegen das ich keine Datenübertragung sehe?

Ja, das kann sehr gut daran liegen.
Such mal in deinem Projekt nach so was:
1
#define FIXED_ADDRESS_MEMORY
2
3
#define HID_CUSTOM_OUT_DATA_BUFFER_ADDRESS  0x500
4
#define HID_CUSTOM_IN_DATA_BUFFER_ADDRESS   0x540


(Auf den 25K50 umsteigen, wäre wahrscheinlich trotzdem sinnvoll)

Vor Jahren hatte ich ein USB Demo Projekt, welches aber nicht ohne 
einige Änderungen mit v2.10 compilierbar sein dürfte. Siehe Anhang 
(Configuration mit 4550) und 
http://picforum.ric323.com/viewtopic.php?f=46&t=103

PS: auch die Hinweise auf CDC aus dem MCHP Forum sollten bedacht werden.

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

Volker S. schrieb:
> welches aber nicht ohne
> einige Änderungen mit v2.10 compilierbar sein dürfte.

XC8 auf C90 Standard und die ADC Funktionen selber implementieren, da 
keine PLIB mehr vorhanden ist (OpenADC(), ConvertADC(), BusyADC())

<edit> gerade mal in die MLA 2018 geschaut. Das passendste Projekt wäre 
picdem_fs_usb.x. Das verwendet einen 4550.

: Bearbeitet durch User
von Jan (Gast)


Lesenswert?

Danke für die zahlreichen Antworten.
Ich werde manches ausprobieren und mich nochmal melden.

von Jan (Gast)


Lesenswert?

Vielen Dank an Volker S. für den Hinweis auf das Demoprojekt 
picdem_fs_usb.x in der MLA 2018.
Das habe ich leider übersehen, nicht gefunden bzw. falsch gesucht.
Das ist genau das was ich brauche. Ich habe es ausprobiert, die MCU von 
18F4550 auf 18F2550 geändert, und alles funktioniert wie erwartet. Der 
Grund warum das andere Projekt nicht lief war wahrscheinlich die Sache 
mit dem FIXED_ADDRESS_MEMORY. Die Datei fixed_address_memory.h war in 
dem Ursprungsprojekt (für den pic18f46j50) gar nicht vorhanden, da das 
USB Macro des neueren PIC diese RAM Zugriffsbeschränkungen nicht hat.

Danke an Frank für den Hinweis mit dem neuerem pic PIC18F25K50. Den 
schaue ich mir auch an. Der 18F2550 Ist tatsächlich sehr alt.

Volker S schrieb :
>>PS: auch die Hinweise auf CDC aus dem MCHP Forum sollten bedacht werden.

Ich wollte custom HID descriptor benutzen und nicht den CDC dienst. 
(natürlich muss ich die jetzige Windows App ändern, sie ist sehr 
rudimentär und muss sowie so geändert werden).
Das mit der seriellen Schnittstelle finde ich nicht sehr 
benutzerfreundlich. Jedes Mal muss man am Anfang den richtigen comport 
öffnen.

Ist custom HID nicht prädestiniert für Fälle wo selten wenig Daten 
übertragen werden?

Gruss,
Jan

von Volker S. (vloki)


Lesenswert?

Mir gefällt HID auch sehr gut. Ist inzwischen besser geworde, aber bei 
Windoof war es immer ein Gschiss mit dem Treiber für CDC.

Das Hauptargument für CDC war eine evtl. vorhandene Software auf dem PC. 
Wenn da eh was gemacht wird, dann fällt das IMO weg.

Mit HID kann man einiges an Daten übertragen. Bei füll Speed theoretisch 
64000 Bytes/s.

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.