english versionenglish

Universell einsetzbarer USB-Interface-Chip

mit PIC18F2455 o.ä.


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage


Allgemeines
Einleitung
Was ist der USB4all
Was ist der USB4all nicht
Anwendung
Download
bekannte Probleme, Tipps u.s.w.

zurück zu PIC-Projekt
Foto USB4all-Platine


Allgemeines

Firmwareaktualisierung:

mit Bootloader
funktioniert
Stromversorgung:
Bus-powered (max. 100mA)

nötige externe Bauelemente:
1 Quarz, 4 Keramikkondensatoren, eine Miniaturdrossel
digitale IO-Ports: max. 20 oder 31
TTL-Pegel, Output max 20mA funktioniert
ADC: 10 Kanäle 10 Bit (PIC18F2455/2550) / 12 Bit (PIC18F2458/2553) funktioniert
RS232: 1
300..115000 Baud funktioniert
I2C: 1
Master-Mode, 100/400/1000kHz
funktioniert
SPI:
1  (+ 6  CS)
750 kHz ... 12 MHz funktioniert
Schieberegister:
1
50 Hz .. 50 kHz
funktioniert
Microwire-Bus: 1
750 kHz ... 12 MHz
funktioniert (ungetestet)
PWM-Ausgänge: 2
max. 10 Bit Auflösung, 3kHz ... 480kHz funktioniert
interner Datenspeicher (EEPROM):
192 Byte funktioniert
LCD-Anschluss: 2
jeweils bis 2x40 oder 4x20 Zeichen mit HD44780-Controller funktioniert (2- oder 4-zeilig)
Schrittmotoranschluss: 4 x ABCD-Phasen
4 Hz..10000 Hz  Halbschritt/Vollschritt (unipolarer Motor)
funktioniert

4 x L297-Interface
4 Hz..1000 Hz funktioniert
Frequenzmesser:
1
Fmax = 50 MHz, 5 Dezimalstellen genau, beste Auflösung: 10 Hz
funktioniert
Modellbau-Servos:
max. 13
Einstellung in jeweils 100 Stufen
funktioniert
Impulszähler: 2
0 .. 65535
funktioniert
RF12-Funkmodul:
1

in Arbeit
Funktionsübersicht



Einleitung

Mit dem Aussterben der Legacy-Anschlüsse (RS232- und Parallelport) muss der Bastler auf den USB-Port umsteigen, wenn er ein Bastelprojekt mit dem PC verbinden will. An anderer Stelle auf der Hompage habe ich die Informationen vermittelt, die nötig sind, um mit USB-PIC-Controllern ein USB-Interface zu entwickeln.
Viele Bastler haben aber nicht die Zeit, um tief in die Softwareinnereien des USB-Interfaces einzudringen. Sie hätten lieber eine fertige Lösung, die man als "Black-Box" in sein Bastelprojekt einbaut, und die alle USB-Probleme löst.

So etwas gibt es schon: die IO-Warrior. Die Chips dieser Familie werden zu einem fairen Preis vertrieben, und vereinfachen die Entwicklung von USB-Geräten ungemein. Sie haben aber auch einige Schwächen und Grenzen. Deshalb habe ich auf Basis des PIC18F2455 meinen eigenen Interface-Chip entworfen, der meinen Ansprüchen eher genügt. Ich nenne ihn USB4all. Es gibt ihn in zwei Geschmacksrichtungen:
  • USB4all-MCD (bessere Performance)
  • USB4all-CDC (einfachere Nutzung)
Stromlaufplan


IO-Warrior
USB4all-MCD
USB4all-CDC
Vorteile
erprobte Lösung,
einige Typen brauchen keinen Quarz,
bus-powered bis zu 500mA,
Entwicklungsumgebung,
benötigt keinen Treiber,
Firmware kann mit Bootloader aktualisiert werden,
schnellere USB-Anbindung,
analoge Eingänge mit 10- oder 12-Bit-ADC,
PWM-Ausgänge (quasi analog),
Schrittmotorausgang,
Frequenzmesseingang,
interner EEPROM,
Servoansteuerung,
höherer Datendurchsatz,
Firmware kann mit Bootloader aktualisiert werden,
analoge Eingänge mit 10- oder 12-Bit-ADC,
PWM-Ausgänge (quasi analog),
Schrittmotorausgang,
Frequenzmesseingang,
interner EEPROM,
Servoansteuerung,
benötigt keinen Treiber,
Nachteile
keine analogen Ein-oder Ausgänge,
Steuerbefehle mit geringem Komfort,
etwas höherer Bauteileaufwand,
Ansteuerung über spezielle Softwareschnittstelle,
keine Entwicklungsumgebung,
bus-powered bis maximal 100mA,
etwas höherer Bauteileaufwand,
bus-powered bis maximal 100mA,



Was ist der USB4all
Der USB4all ist ein Interfacechip, der es erlaubt, verschiedene Hardware komfortabel über den USB-Bus vom PC aus zu steuern. Es handelt sich um einen handelsüblichen PIC18F2455 (oder einen ähnlichen Microcontroller), der mit einer spezielle Firmware programmiert wird.



Was ist der USB4all nicht
Der USB4all ist kein Steuercontroller zum Aufbau einen vom PC unabhängigen Gerätes. Er kann keine direkte Verbindung zwischen den angeschlossenen Geräten/Interfaces herstellen.

Beispiel:
Der USB4all kann sowohl Spannungen messen, wie auch ein LCD-Display ansteuern. Er kann aber nicht selbständig die gemessene Spannung direkt am LCD anzeigen. Vielmehr muss die Spannung vom PC via USB ausgelesen werden, und dann wieder vom PC via USB zum LCD-Display geschrieben werden.



Welcher Mikrocontroller ist der richtige
Die Firmware wurde für den PIC18F2455 geschrieben. Braucht man mehr als 20 digitale IO-Pins oder mehr als 10-Bit Auflösung beim ADC, dann muss man aber einen anderen Typ einsetzen.
Die Firmware funktioniert ohne Änderungen im PIC18F2550 / 2458 / 2553 / 4455 / 4550 / 4458 / 4553.
Welche Typen sich im konkreten Fall eignen, entnimmt man der folgenden Auflistung:

ADC-Auflösung
Mit PIC18F2455 /2550 /4455 /4550 hat der ADC eine Auflösung von 10 Bit.
Mit PIC18F2458 /2553 /4458 /4553 hat der ADC eine Auflösung von 12 Bit.

Anzahl der IO-Pins
Mit PIC18F2455 /2550 /2458 /2553 stehen 20 digitale IO-Pins zur Verfügung.
Mit PIC18F4455 /4550 /4458 /4553 stehen 31 digitale IO-Pins zur Verfügung, wenn die 40-Pin-Firmware verwendet wird.



Anwendung
Der USB4all-MCD verwendet den gleichen Microchip-Treiber, den auch mein Bootloader und der Brenner8 benutzen. Die Schnittstelle für den Programmierer stellt die Microchip-DLL "mpusbapi.dll" zur Verfügung.
Der USB4all-CDC verwendet einen emulierten RS232-Port (z.B. COM3) und benötigt deshalb keinen speziellen Treiber.

Die gesamte Steuerung des USB4all ist bewusst einfach gehalten. Jeder Steuerschritt erfolgt stets nach folgendem einfachen Schema:
Der codierte Befehl besteht aus mehreren Bytes.

1. Byte
Das 1. Byte adressiert das Subsystem des USB4all, an das der Befehl gesendet werden soll. Es gibt folgende Subsysteme:
2. Byte
Das 2. Byte legt die Art des Befehls fest. Dabei gilt meistens:
Bei einigen Subsystemen weicht das Schema etwas ab, es wäre z.B. unsinnig, eine Zeichenkette zum ADC zu schreiben.

3. Byte ...
Ab dem 3. Byte hängt die Bedeutung vom Befehl ab.



Beispiele:

LCD-Display initialisieren und ein "A" auf ihm ausgeben:
PC sendet zum USB4all
Bedeutung USB4all antwortet
0x55 - 0x01 - 0x00 Einschalten des LCDs mit der Standardkonfiguration 2-Zeilen x 16-Zeichen 16 Nonsens-Bytes
0x55 - 0x02 -'A' Senden des 'A' 16 Nonsens-Bytes


LCD-Display initialisieren und den 10-stelligen String "Hallo Welt" ausgeben:
PC sendet zum USB4all Bedeutung USB4all antwortet
0x55 - 0x01 - 0x00
Einschalten des LCDs mit der Standardkonfiguration 2-Zeilen x 16-Zeichen 16 Nonsens-Bytes
0x55 - 0x02 - 0x0A - 'Hallo Welt' Senden von  'Hallo Welt' 16 Nonsens-Bytes


Die Spannung am analogen Eingang AN0 messen:
PC sendet zum USB4all
Bedeutung USB4all antwortet
0x51 - 0x01 - 0x01 - 0x00
Einschalten des ADC mit einem analogen Eingang, AN0 ist ausgewählt
16 Nonsens-Bytes
0x51 - 0x03 Abfragen der Spannung
0x51 - 0x03 - low - high
Das Low-Byte enthält die unteren 8 Bit des Messergebnisses, während die beiden oberen Bits im High-Byte stehen.


Die Temperatur aus einem am I2C-Bus angeschlossenen LM75-Chip auslesen::
PC sendet zum USB4all
Bedeutung USB4all antwortet
0x54 - 0x01 - 0x00 - 0x00
Einschalten des I2C-Busses 16 Nonsens-Bytes
0x54 - 0x05 - 0x48 - 0x02
Abfragen der Temperatur
0x00 - 0x05 - 0x48 - 0x02 - Grad - Nachkommastelle
Das Grad-Byte enthält die Temperatur in Grad, während das Bit 7 des nachfolgenden Bytes weiteren 0.5 Grad entspricht.


Einen 47kHz-Rechteck mit einem Tastverhältnis von 50% ausgeben (PWM 1):
PC sendet zum USB4all
Bedeutung USB4all antwortet
0x57 - 0x01 - 0x00
Einschalten des PWM1 mit 47 kHz, 8 Bit Auflösung 16 Nonsens-Bytes
0x57 - 0x02 - 0x80 - 0x00
Tastverhältnis 50 %
16 Nonsens-Bytes


Einen Schrittmotor 50 Halbschritte rechts herum drehen lassen:
PC sendet zum USB4all
Bedeutung USB4all antwortet
0x5D - 0x01 Einschalten des 1. Schrittmotorinterfaces 16 Nonsens-Bytes
0x5D - 0x02 - 0x32- 0x00- 0x06- 0x00 sofort 50 Halbschritte rechtsherum mit 1000 Hz drehen
16 Nonsens-Bytes





Download
Hier liegt
Alternativ lässt sich auch die 28-pin USB-Testplatine verwenden.



mögliche Erweiterungen
Durch den enthaltenen Bootloader ist ein Softwareupdate auf eine erweiterte oder korrigierte Firmware kein Problem. Neue Versionen können unter Windows mit der Software USBoot (ab V 2.0) in den USB4all geladen werden. Dabei ist als Target der verwendete PIC-Typ (z.B.PIC18F2455) auszuwählen.
Geplant sind für die Zukunft:



bekannte Probleme, Tipps u.s.w.

Im Handbuch (bis zur Version 10) ist die Sendeflanke des Schieberegisterinterfaces falsch angegeben.

Der in der Schaltung vorhandene Kondensator zwischen Vdd und Vss war ursprünglich mit nur 100 nF etwas knapp bemessen. Hier sollte ein deutlich größerer Typ (1 uF .. 10 uF) eingesetzt werden.

Die deafult-Einstellung beider PWM-Kanäle (0x57 - 0x01 - 0x00) ist 47 kHz und 256 Abstufungen. (Im Handbuch stand früher noch 12 kHz mit 1024 Abstufungen.)

Wenn das I2C-Interface benutzt werden soll, dann müssen beide Leitungen des Busses durch Widerstände von ca. 1,8 Kiloohm mit Vdd (+5V) verbunden werden. (siehe hier)

Da der USB4all durch den USB-Bus galvanisch mit dem PC verbunden ist, ist der Referenzpegel für alle Signale der Masseanschluss (GND) des PC. Handelt es sich dabei nicht um einen Laptop, dann ist dieser Referenzpegel also die Schutzerdung. Wird der USB4all in Geräten eingesetzt, die ihrerseits nicht geerdet sind, dann ist das bedeutungslos. Andernfalls muss das aber beachtet werden.

Werden Modellbau-Servos und asynchrone Schrittmotorsteuerung gleichzeitig verwendet, dann vermindert sich die maximal mögliche Schrittgeschwindigkeit gleichzeitig betriebener Schrittmotoren von 1000 Hz auf nur 30 Hz ... 80 Hz (je nach Anzahl der Servos).



Entwicklung

17.07.2012
Firmware V10-Bugfix:
- Bugfix Schieberegister-Input-Funktion

10.05.2012
Firmware V10:
- gleichmäßigerer Lauf der Modellbauservos
- 40-Pin-Version für PIC18F4455 / 4550 / 4458 / 4553
-12-Bit ADC unterstützt (für PIC18F2458 /2553 /4458 /4553)

23.01.2012
Firmware V9:
- Empfangspuffer für RS232
- Bugfix I2C read from slave

22.08.2011
Firmware V8:
- Erweiterung von 5 auf 10 ADC-Eingänge
- 2 zusätzliche 16-Bit Impulszähler
- Bugfix I/O-Pins am Port C

04.06.2010
Firmware V7:
- Codeverschlankung und -vereinheitlichung
- 2 zusätzliche ABCD-Schrittmotorinterfaces
- ABCD-Schrittmotorinterfaces nun mit

03.05.2010
Firmware V6:
- Bugfix bei PWM mit 1024 Schritten
- SPI-Blocktransfer
- Bugfix: SPI Slave-Select-Leitungen

25.04.2010

Firmware V5:
- unterstützt SPI, Schieberegister, Mikrowire
- Bugfixes

20.11.2009
Firmware V4: Unterstützt Modellbau-Servos

27.03.2008
Firmware V3: Umstellung auf Microchip Framework 1.2

03.05.2007
Prototyp


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 22.04.2007
letzte Änderung: 20.07.2012