^

 Zwei USB PIC Programmer mit FT232 Chip



FT232RT-Breakout-Boards und USB-seriell-Adapter werden zu PIC-Programmern

tt232rl Breadboard Programmerft232Board-blauManchmal muss es eben USB sein, weil wir keine der "altmodischen" Schnittstellen an unserem PC haben (Laptop). Falls doch, empfehle ich den 5PiP PIC-Programmer. Wie kriegen wir nun unsere Firmware oder das selbst geschriebene Programm für kleines Geld per USB auf einen PIC?
Erstmal brauchen wir eine Programmiersoftware. Das ist leicht, weil es dafür PICPgm gibt. Christian Stadler, der Autor von PICPgm hat einen einfachen USB-Programmer entwickelt, der auf Basis des FT245 Chips von FTDI funktioniert. Glücklicherweise kann der FT232 das was wir brauchen ebenso und PICPgm arbeitet auch mit dem Schwestermodell zusammen. Es kommt aber noch besser: Der nette eBay Fachhändler von anderen Ende der Welt verkauft uns fertige Breakout-Boards für sehr kleines Geld. Das rote Board kam für 3,70 und das blaue mit mehr nach außen geführten Pins für 4,70 € bei mir an (Versand inklusive!). Alternativ können wir auch einen USB-seriell Adapter benutzen. Da muss aber auch ein FTDI Chip drinstecken, andere funktionieren NICHT!

Für häufiges Programmieren sind die hier beschrieben Programmer allerdings zu langsam. Damit wir das einschätzen können: Die USB4All Firmware als Beispiel ist mit einem 5PiP in 24 Sekunden geflasht (inklusive Verify). Die USB-Teile brauchen dafür 806 Sekunden; das sind 13:26 Minuten. Oft stehen wir aber vor der Aufgabe, nur einmal einen jungfräulichen PIC befüllen zu wollen, dafür ist die Geschwindigkeit akzeptabel. Und kleine Anfänger-LED-Blink-Programme sind in ca. 6 Sekunden auf dem Chip.

Der USB4All zeigt einen weiteren Nachteil. Die Programmer können nur Low-Volt-Programming (LVP). Das haben nicht alle PICs. Außerdem muss oft ein Pin für LVP reserviert werden. Die USB4All Firmware hat in den Konfigurationsbytes die Einstellungen für High-Volt-Programming (HVP) gespeichert. Damit wir uns nicht selbst aussperren, kann das per LVP nicht umprogrammiert werden. Die Folge ist ein (logischer) Verify-Fehler im Config-Memory.

Das Geld für ein FT232-Breakout-Board ist in jedem Fall gut investiert. Es ist ein vollwertiger USB-seriell Wandler mit vielen Einstellmöglichkeiten, z.B. invertieren der Signale per Software (FTProg) und weiteren Möglichkeiten (Stichwort bitbanging).

Variante 1 - Der FT232-Breakout-Board-Programmer

AufbauNeben dem Board brauchen wir eigentlich keine weiteren Bauteile. Wir müssen lediglich die richtigen Strippen ziehen. Der Aufbau ist hier am Beispiel eines PIC18f4550 dargestellt. Das Board sorgt auch gleich für die Spannungsversorgung mit 5V. Auf dem Board befindet sich eine "selbstheilende" 400mA Sicherung. O.k., wenn dieser Strom durch unseren PIC geht, isser vermutlich hin. Also bitte gewissenhaft anschließen.

Letztlich muss das Board natürlich hochkant eingesteckt werden. Der PullUp Widerstand an MCLR sorgt dafür, dass wir über eine Spannung an PGM in den Programmiermodus wechseln können. Der PullDown Widerstand an PGM stellt sicher, dass der Programmiermodus vermieden wird, wenn keine definierte Spannung an PGM anliegt (Board ab oder spannungslos). Die Werte sind unkritisch.

Die Steckerbelegung ist Arduino-kompatibel und deshalb an sehr vielen Boards gleich.

PICPgm für Variante 1 einrichten

Jetzt müssen wir unseren neuen Programmer der Programmiersoftware PICPgm bekannt machen. Dazu wählen wir die Menüpunkte Hardware dann Hardware Selection/Configuration ... Sobald wir USB als Port einstellen, versetzt PICPgm den FT232 in den "bitbanging" Modus. Der Chip stellt jetzt keinen virtuellen seriellen Port mehr zur Verfügung, sondern eine Art parallele Schnittstelle. Voraussetzung ist der Treiber d2xx.dll. Normalerweise sollte das kein Problem darstellen, er wird bei der Installation standardmäßig mit installiert.

Port Tabelle ft232Die Pin-Nummern haben jetzt allerdings eine andere Bedeutung. Wie wir diese zu verstehen haben, verrät uns die kleine Tabelle. Wenn wir unseren PIC wie oben verbunden haben, passt die Einstellung wie im Bild rechts zu sehen. Theoretisch können wir alle Ports/Pins frei als Aus- oder Eingang verwenden. Bei mir ist PICPgm (Version 1.7.9.1) jedoch bei der Verwendung von Pin6 (DCD) oder Pin7 (RI) abgestürzt. Glücklicherweise haben wir genug Alternativen.

Wie schon beim 5PiP beschrieben, können wir die Pegel einzeln mit einem Voltmeter messen, indem wir auf die Schaltfläche Enable Test drücken und die entsprechenden Häkchen setzen. Hinweis: Wenn wir Data Out wählen, muss Data In automatisch mitkommen.

Hinweis zur PGM-Einstellung: Es gibt neuere PICs, bei denen der MCLR und PGM auf demselben Pin liegen. Dieser PIN muss bei aktiviertem Low-Volt-Programming im Betrieb HIGH-Pegel haben. PICPgm "hinterlässt" aber LOW-Pegel. Das bedeutet, der PIC läuft nicht an, solange der PGM-Pin mit dem Programmer verbunden ist. Wir können uns behelfen, indem wir die PGM invertieren (Häkchen bei Invert setzen). ACHTUNG: Bevor wir andere PIC-Typen programmieren wollen, müssen wir das wieder zurücksetzen!

ft232Board-PicPgm

Variante 2 - Der FT232-Adapter-Programmer

Versuchsaufbau mit DA70156

Wenn in einem USB-seriell-Adapter ein FT232 Chipsatz steckt, können wir auch den zum Programmer umstricken. Allerdings handeln wir uns diverse Nachteile gegenüber dem Breakout-Board ein:  Durch den integrierten Pegelwandler / Pegelinverter haben wir es wieder mit erhöhten und negativen Spannungen zu tun. Darum müssen wir wieder Widerstände und ggf. Schottkydioden einsetzen (der abgebildete 16F1509 braucht eine an PGD). Genaueres dazu ist zum 5PiP-Programmer erklärt.

Adapter-Schaltplan

Schön wär's gewesen, wären die Spannungspegel groß genug für HVP. Die 6,3 Volt bei meinem Digitus DA-70156 reichen dafür leider bei weitem nicht; bleibt also nur LVP. Verbaut ist bei mir übrigens kein MAX 232, sondern ein SIPEX SP213. Vielleicht liegt es daran.

Auch können wir nicht Aus- und Eingänge frei konfigurieren. Nur was bei RS232 als Ausgang vorgesehen ist, können wir als solchen benutzen. Gleiches gilt sinngemäß für die Eingänge. TxD als Taktleitung (PGC)  zu verwenden, ist bei mir außerdem gescheitert. Macht nix, sendet TxD eben die Daten.

Die Versorgunsspannung stellt uns der Adapter (zumindest ohne Bastelei) nicht zur Verfügung.

PICPgm für Variante 2 einrichten

PicPgm Einstellungen für den
Adapter

Das Einrichten der Programmer  Konfiguration ergibt sich natürlich wieder aus unseren Verbindungen zwischen Schnittstelle (dem Adapter) und dem PIC. Die Pin-Nummern entsprechen denen, die im Schaltbild als ft232"PinX" angegeben sind. Der im Adapter verbaute Pegelwandler macht es erforderlich, alle Pegel zu invertieren.

Haben wir einen PIC, der HIGH-Pegel an PGM zum Laufen braucht, können wir das Häkchen bei PGM / Vdd entfernen. Weitere Hinweise dazu haben wir ja schon unter "PICPgm für Variante 1 einrichten" gelesen.



PullUps und PullDowns

Ob wir PullUp oder PullDown Widerstände brauchen, hängt von unserem PIC ab. Meine modernen 16f und 12f Typen mit kombiniertem Pin für HVP und LVP haben vermutlich einen internen PullUp und brauchen keinen externen Widerstand. Das bedeutet aber auch, dass der für den Betrieb erforderliche Pegel an PGM je nach Typ HIGH oder LOW sein muss! Bei meinen PICs mit separaten MCLR- und PGM-Pins funktioniert folgendes:
  • MCLR Pin mit hochohmigen Widerstand (Richtwert 100 kOhm) nach Vdd (Versorgungsspannung) ziehen.
  • PGM Pin mit hochohmigen Widerstand (Richtwert 100 kOhm) nach Vss (Masse) ziehen.

Getestete Controller

Mit den Programmern konnte ich alle meine LVP-tauglichen PICs bearbeiten, als da wären:
12f1501, 12lf1501, 12f1522, 12f1822, 12f1824, 12f1840, 16f1509, 16f1786, 16f1939, 16f628a, 16f886, 18f13k50, 18f14k50, 18f4550,


Links und Downloads

  • GCB@Syn - Download für das Komplettpaket mit fertig für die hier beschriebenen Programmer konfiguriertem PICPgm
  • Nur die Programmer-Konfigurationsdatei (pgmifcfg.xml) für PICPgm aus GCB@Syn
  • PICPgm Homepage



Zur Startseite


Haftungsausschluss    Impressum

© Frank Steinberg