Rs4all - Universell einsetzbarer RS-232-"Fernsteuerung"

mit PIC18F2455


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


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

zurück zu PIC-Projekt
Foto
Rs4all


Allgemeines

Firmwareaktualisierung:

nur mit Programmiergerät

Stromversorgung:
5 VDC,  >10 mA

Taktversorgung:
intern oder 8-MHz-Quarz

digitale IO-Ports: 18
TTL-Pegel, Output max 20mA funktioniert
ADC: 10 Kanäle 10 Bit (PIC18F2455/2550) / 12 Bit (PIC18F2458/2553) funktioniert




I2C: 1
Master-Mode, 100/400/1000kHz
funktioniert
Schieberegister: 1

funktioniert
PWM-Ausgänge: 2
max. 10 Bit Auflösung, 500 Hz ... 80 kHz 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: 3 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:
11
Einstellung in jeweils 100 Stufen
funktioniert
Impulszähler: 2
0 .. 65535
funktioniert
Funktionsübersicht



Einleitung

Vor einigen Jahren habe ich mir USB4all ausgedacht, per USB steuerbarer Chip, der einige typische Interfaces bereitstellt. Man fragte ich dann, ob man so etwas  nicht auch mit einer RS232-Steuerung bauen könnte. Schließlich erlaubt RS232 bei niedrigen Datenrate viel längere Kabel als USB.
Hier ist nun das vorläufige Ergebnis. Das Ganze ist noch nicht kompromisslos gestaltet, aber dient als Diskusionsgrundlage.

Die Ansteuerung erfolgt wie beim USB4all-CDC. Allerdings ist die Datenrate des COM-Ports auf 9600 Baud einzustellen. Zwei der vom USB4all bekannten Pins fehlen (RC6 und RC7). Dadurch entfallen leider auch SPI- und Microwire-Interface Es gibt nur drei ABCD-Schrittmotorinterfaces und 11 Modellbauservos. Beim Schieberegister-Interface ändert sich geringfügig die Pinbelegung. Ein RS232-Interface gibt es nicht, da es ja durch die Steuerung belegt ist. Es wäre auch nicht gerade sinnvoll.

Der Rs4all lässt sich sowohl mit wie auch ohne RS232-Treiber-IC betreiben.
Die nebenstehende Schaltung stellt die Version ohne RS232-Treiber-IC dar. Dabei schützt der Widerstand R1 den Mikrocontroller vor Überspannungen. Das RS232-Interface wird hier mit Spannungen außerhalb der Spezifikation betrieben, aber moderne PCs haben damit erfahrungsgemäß keine Probleme. Insbesondere bei kurzen Kabeln zwischen Rs4all und PC kann diese preiswerte Lösung verwendet werden. Pin 15 (D-) ist dafür mit Vdd (+5V) zu verbinden.
Soll ein RS232-Treiber-IC verwendet werden, dann muss Pin 15 (D-) mit Vss (0V) verbunden werden.
Pin 14 (Vusb) ist frei zu lassen.


Stromlaufplan Minimalversion

Der Rs4all lässt sich sowohl mit wie auch ohne 8-MHz-Quarz betreiben. Ist der Quarz vorhanden, dann wird er automatisch benutzt. Fehlt der Quarz, dann wird als Ersatz ein interner Taktgenerator benutzt. Die Nutzung eines Quarzes ist nur angeraten, wenn die Frequenzzählerfunktion mit hoher Genauigkeit benötigt wird, oder wenn der Rs4all bei extremen Temperaturen eingesetzt werden soll.
Der Quarz ist dann zusammen mit zwei Kondensatoren an die Pins 9 und 10 anzuschließen. (siehe diese Schaltung zum Vergleich)

Als Stromversorgung wird eine 5V-DC-Spannungsquelle benötigt. Zulässig sind Spannungen von 4,2V bis 5,5V. Die Stromaufnahme des Controllers liegt unter 10 mA. Dazu kommt noch der Stromverbrauch eventuell angeschlossener Verbraucher.

In die obige Schaltung muss die Betriebsspannung an JP1 eingespeist werden. Die Zweite Schaltung (Version 3) hat dagegen Gleichrichter und Spannungsregler bereits integriert. Sie kann mit Gleich- oder Wechselspannung von 9V ... 24V betrieben werden. Bei großen Eingangsspannungen muss die termische Belasdtung von IC2 geprüft werden. Bei Bedarf ist er mit einem passenden Kühlkörper zu versehen.

Die Zweite Schaltung verwendet eine andere Belegeung der Steckerleisten. Sie erlaubt es an PortA und PortB diverse Testplatinen anzuschließen.
Stromlaufplan  Version3



Was ist der Rs4all
Der Rs4all ist ein Interfacechip, der es erlaubt, verschiedene Hardware komfortabel über ein RS232-Kabel vom PC aus zu steuern. Es handelt sich um einen handelsüblichen PIC18F2455 (man kann auch z.B. einen PIC18F2550 verwenden), der mit einer spezielle Firmware programmiert wird.



Was ist der Rs4all nicht
Der Rs4all 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 Rs4all 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 RS232 ausgelesen werden, und dann wieder vom PC via RS232 zum LCD-Display geschrieben werden.



Welcher Mikrocontroller ist der richtige
Die Firmware wurde für den PIC18F2455 geschrieben. Sie funktioniert ohne Änderungen im PIC18F2550, PIC18F2458 und PIC18F2553.
Mit PIC18F2455 /2550 hat der ADC eine Auflösung von 10 Bit.
Mit PIC18F2458 /2553 hat der ADC eine Auflösung von 12 Bit.



Anwendung
Der Rs4all verwendet einen RS232-Port (z.B. COM1) und benötigt deshalb keinen speziellen Treiber.

Die gesamte Steuerung des Rs4all ist bewusst einfach (und identisch zum USB4all) 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 Rs4all 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 Rs4all
Bedeutung Rs4all 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 Rs4all Bedeutung Rs4all 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 Rs4all Bedeutung Rs4all 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 Rs4all Bedeutung Rs4all 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 8-kHz-Rechteck mit einem Tastverhältnis von 50% ausgeben (PWM 1):
PC sendet zum Rs4all Bedeutung Rs4all antwortet
0x57 - 0x01 - 0x00
Einschalten des PWM1 mit 8 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 Rs4all Bedeutung Rs4all 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



bekannte Probleme, Tipps u.s.w.

Die ersten produzierten PIC18F2455/2550 hatten diverse Bugs und Eigenarten. Eine davon betrifft das RS232-Interface und verhinder die Nutzung dieser frühen Versionen in diesem Projekt. Die problematischen Chips wurden bis 2005 produziert und werden von Microchipp-Programmiergeräten als "Revision A3" erkannt. Meine Brenner erkennen sie als "Revision 0x02". Alle jüngeren Versionen der Chips können eingesetzt werden

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 Rs4all durch das RS232-Kabel 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 Rs4all 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

03.07.2012
- Layout für Version3 (ohne RS232-Treiber, mit Spannungsregler)

07.06.2012
- Bugfix: Pins von PortB gingen unkontrolliert auf High
- Layout für Mini-Version (ohne RS232-Treiber)

03.04.2012
Prototyp


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