USB-Interface-Beispiel

mit PIC18F2550

zurück zu 18F-Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage


USB mit 18F2550
Einige 18F-PICs haben ein USB-Interface. Dessen Nutzung ist aber nicht ganz einfach, da man zunächst mehrere Hürden nehmen muss. Dieses kleine Beispiel soll demonstrieren, wie man ein USB-Interface einsetzt.

Einleitung
Schaltung
Vorbereitung
Download
Firmware Compilieren, Device anschließen
Das Windowsprogramm benutzen

zum USB-Bootloader

zurück zu 18F-Lernbeispiele



Einleitung
Was wird mit diesem ersten USB-Test erreicht: Der PIC18F2550 ist bei Reichelt für € 7,10 erhältlich.


Schaltung
 
anklicken zum Vergrößern Ein PIC18F2550 ist 
  • mit einem USB-Interface am PortC,
  • LEDs am PortB und 
  • einem Poti am PortA (AN0=RA0) ausgestattet.
  • Als Taktquelle wird ein 20-MHz-Resonator verwendet


Es eignet sich dafür:


Vorbereitung
Folgende Schritte sollte man zuerst durchführen:

Studium:

Software: Von meiner Homepage folgende beide ZIP-Dateien herunterladen


Die Microchip Custom Driver firmware entpackt sich in das Verzeichnis C:\MCHPFSUSB. Dort sollte man sie auch belassen. Man kann dieses Verzeichnis auch auf eine andere Festplatte verschieben, aber MCHPFSUSB sollte auch dort in der Wurzel der Platte liegen, sonst können einige Quelltext-Pfade für den Compiler zu lang werden.
Der Windows-Treiber liegt in C:\MCHPFSUSB\Pc\MCHPUSB Driver\Release

Den Ordner C:\MCHPFSUSB\fw\Demo  wird das Projektverzeichnis für dieses Beispiel. Er enthält ein Demo-Programm für das PICDEM FS USB-Board von Microchip. Der Anwendungsprogrammteil ist auf das PICDEM FS USB-Board zugeschnitten. Deshalb ersetze ich ihn mit einem einfacheren TestProgramm.
Der Firmwareteil wird aber erst einmal unverändert übernommen:

Folgende Files ersetze ich durch eigene Files:


main.c

Diese Datei ist das Hauptprogramm der Firmware. Es ruft die Initialisierung  auf und startet dann eine Schleife in der USB-Service-Routine und die User-Software wechselseitig aufgerufen werden. Dieses File enthält in der neuen Version (Firmware 1.2) einige spezifische Anpassungen an die Microchip-Testboards (PIC-Typ-abhängige Configuration und ADC-Pin-Initialisierung), die ich entfernen musste.


user.c
Diese Datei enthält


user.h
Diese Datei enthält


usbcfg.h

Diese Datei enthält Definitionen für das USB-Interface. Da ich das Interface vom Microchip-Demo unverändert übernehme, kann ich auch diese Datei fast unverändert übernehmen.
In dieser Datei habe ich nur die folgende beiden Definitionen entfernt,
 
.
#define USE_SELF_POWER_SENSE_IO
#define USE_USB_BUS_SENSE_IO
.

da sie spezifisch für das PICDEM FS USB Demo-Board waren. Dieses Board überwacht mit den Pins RA1 & RA2 das Vorhandensein von Betriebsspannung vom USB-Bus und vom Netzteil des Testplatine. Da ich ein rein Bus-powered-Device haben will, brauch ich das nicht. Durch das Löschen der beiden Definitionen verzichtet die Firmware auf die Spannungsüberwachung.
 

io_cfg.h
Diese Datei beschreibt den Hardware-Aufbau. Genau genommen ist hier festgehalten, an welchen Pins LEDs oder Potis ... angeschlossen sind. Auch sind Makros zum Ein- und Ausschalten vorhanden. Zur Nutzung auf meiner 28-Pin-Testplatine waren massive Änderungen nötig.


Firmware Compilieren, Device anschließen

Das Zip-File mit der Firmware herunterladen. Es enthält die folgenden Files


Das Paket mit den 5 Dateien auspacken, und die Dateien in die richtigen Directorys kopieren. Dabei überschreibt man zwangsläufig die Orginaldateien.

Man kann nun der Einfachheit halber das gelieferte MCHPUSB.HEX-File verwenden, oder man compiliert es noch einmal neu:

Mit einem Programmiergerät (z.B. Brenner5 mit der Software P18) wird dieses HEX-File nun in den PIC18F2550 gebrannt.

Der PIC wird in die Testplatine eingesetzt, und diese via USB-Kabel mit dem PC verbunden.

Ist der Microchip Custom Driver noch nicht installiert, dann fordert Windows jetzt dazu auf. (Er liegt unter C:\MCHPFSUSB\Pc\MCHPUSB Driver\Release.)
 
Hat alles geklappt, dann wird die Experimentierplatine im Gerätemanager als PIC 18F4550 Family Device aufgelistet. Ich habe zwar einen 18F2550 verwendet, das kann der Treiber aber nicht wissen. 

(Am deaktivierten Multimedia-Controller meines PCs sollte man sich nicht stören, das ist eine DVB-S-Karte, die ich nur für VDR-Experimente unter Linux einsetze, und die deshalb unter Windows abgeschaltet ist)


Das Windowsprogramm benutzen

Das Zip-File mit dem Windowsprogramm herunterladen. Es enthält das gesamte Delphi5-Project, und dabei auch die fertige EXE-Datei.

Das Programm usbtest.exe starten.
 
Ein Druck auf den obersten Button (_MPUSBGetDLLVersion) fragt die Version der mpusbapi.dll ab, über die man mit der USB-Testplatine kommunizieren kann.  Die Versionsnummer ist normalerweise 00010000.

Auf einen Druck auf den zweiten Button hin (_MPUSBGetDeviceCount) ermittelt die DLL die Anzahl der angeschlossenen Testplatinen. Da nur eine Platine angeschlossen ist, lautet das Ergebnis 00000001.

Ein Druck auf den dritten Button  (Firmware-Version) liefert den Wert, der in der Datei user.h als  MAJOR_VERSION & MINOR_VERSION  definiert wurde. Das sollte 2.0 sein.

Mit den 8 kleinen Buttons kann man die LEDs Nr. 1..3 (an den Pins RB0..RB3) ein- und ausschalten.

Bei einem Druck auf Potentiometer wird die Spannung an AN0 (RA0) gemessen, und das Ergebnis ausgegeben. (Angezeigt wird nicht die Spannung in Volt  sondern die beiden Ergebnisbytes des ADC  mit einem Dezimalpunkt als Trennzeichen. Daraus kann man aber die Spannung errechnen.)

Ein Druck auf Reset setzt das USB-Device zurück. Es meldet sich ab und gleich darauf wieder an (was Windows mit dem üblichen Geräuschen begleitet).

Falls die Testplatine unheimlich langsam reagieren sollte, dann im Windows-Gerätemanager für das "PIC 18F4550 Family Device" dem Computer NICHT erlauben das Device zum Energiesparen abzuschalten.


zurück zu 18F-Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 05.03.2006
letzte Änderung 02.02.2008