Kategorie: Elektronik mit PICAXE und Arduino
Zugriffe: 2359

PICAXE, mein neues Spielzeug

 

Für mein aufwändigstes Boot, Projekt 476, stand ich irgendwann mal vor dem Problem den Druck des Druckluftvorrates messen zu müssen. Üblicherweise wird dies mit 2 einfachen Druckdosen gemacht die in Abhängigkeit vom Druck bestimmte Vorgänge schalten oder verriegeln.

Ich hatte mich allerdings für eine analoge Meßwertaufnahme entschieden und musste daher irgendwann mal das Problem der Druckauswertung lösen. Der einfachste Weg wäre eine simple Komparatorstufe mit nachgeschaltetem Relais gewesen um das Problem zu lösen. Da ich nicht so der Crack in Analogtechnik bin setzte ich mich mit Holger Becker in Verbindung. Der riet mir aber dazu es mal mit einem PICAXE zu probieren.

"Wat iss dat dann?" 

Von PICs weiss ich nur, dass nahezu alle unsere vereinsinternen, wohlbekannten Lieferanten von prozessorbasierter Elektronik diese Chips verwenden.

Ein PICAXE ist nun ein vorprogrammierter Pic, der zusammen mit einem sogenannten Compiler nun auch BASIC versteht. Das Akronym "BASIC" steht für "Beginners All-purpose Symbolic Instruction Code", was so viel bedeutet, wie "symbolische Allzweck-Programmiersprache für Anfänger". Auch wenn sich sich hier dem versierten Programmierer beim Wort BASIC die Fußnägel nach oben biegen, diese Sprache hat einige Änlichkeit mit Englisch und ist mit ein bisschen Einarbeitung recht einfach zu verstehen wenn man denn lernwillig ist. Sehr gute Links zum Thema BASIC findet man übrigens wie üblich via Wikipedia.

Ich habe vor vielen Jahren mal ein bisschem mit BASIC programmiert, damals noch auf einem ZX81, einem rudimentären Rechner mit sagenhaften 1KB RAM und 8KB ROM. Zwischendurch habe ich nochmal mit dem CControl Platinen von Conrad rumgespielt. Diese Platinen sind deutlich leistungsfähiger als ein PICAXE in der einfachsten Ausführung, leider aber auch um ein Vielfaches teurer. Ich habe die einzige im Betrieb befindliche Anwendung in meinem selbstgebauten Motorprüfstand, dort steuert sie einen Drehzahlmesser mit nachgeschaltetem LCD Display.

Die neuen PICAXE sind allerdings nun wesentlich kleiner als meine alten CControlplatinen. Was ich heute kurz vorstellen möchte kommt in diesem Fall in Form eines 8poligen ICs. Es sind speziell vorprogrammierte Bausteine des Typs 12F683 der Firma Microchip. Das muss man sich so vorstellen, das dieser Chip ein fest eingebautes Programm hat welches es erlaubt ein zusätzliches Benutzerprogramm dazu zu laden. Dieses ist natürlich kleiner als der maximale Speicherplatz den der Chip üblicherweise hat.

Auf dem Chip befinden sich 5 nahezu frei benutzbare Ports und atemberaubende 256Byte RAM zur freien Verfügung.

In Anbetracht der heutigen Speicherdimensionen hört sich das alles ziemlich poplig und lächerlich an, ist es aber nicht. In diesen winzigen Speicherraum passen schon recht ansehnliche Programme rein und mit ein paar Tricks lassen sich hier und da noch wertvolle Bytes sparen wenn man dann knausern muss. Aber keine Sorge, für kleine Steuerungs- und Ablaufprojekte reichen sehr wenig Speicher aus wie wir gleich noch sehen werden.

Der Preis für einen PICAXE des Typs "08M" liegt bei 3.57 Euro, das ist sehr günstig. Natürlich sind die "originalen" Chips von Microsoft günstiger, für mich als absoluten Laien war es aber nicht möglich diese in Assembler zu programmieren, daher bin ich auf die PICAXE ausgewichen.

Ein paar weitere Fakten zum 08M:

8 Pins

interne Takterzeugung 4MHz, auf 8MHz über Programm umschaltbar

interruptfähig

1-4 Digital-Out

1-4 Digital-In

0-3 Analog-In (10bit)

RC-Servo-Out

PWM-Out

Temp-In (Dallas Chips kompatibel)

1wire-In (Dallas Chips kompatibel)

Infrarot-In (Sony-SIRC, 127 Befehle)

Infrarot-Out (Sony-SIRC, 127 Befehle)

Musikfunktionen: 4 eingebaute Melodien (Happy Birthday, Rudolf Red Nosed Reindeer, Silent Night, Jingle Bells), über Toneditor neue Sounds editierbar, auch monofone Klingeltöne ladbar

SerOut (bis 4800baud)

 

Um auf restlos alle Punkte des Prozessors einzugehen reicht hier der Platz bei weitem nicht und es ist auch garnicht der Anspruch, es gibt für den geneigten Leser aber mehr als ausreichen Literatur und Webseiten im Internet. Einige Links habe ich weiter unten angegeben. Es gibt sogar ein Forum in dem man Fragen stellen kann, dieses Forum wird von deutschen Generalimporteur der PICAXE betrieben und moderiert. Ich möchte aber doch mit diesem sehr kurzen Einblick in die Programmierung eines Chips zeigen, dass eine vollkommene Programmierniete wie ich es mit kleinen Schritten schaffen kann einfache Steuerabläufe selbst und recht unkompliziert selbst zu realisieren. 

 

Als erstes kleines Beispiel möchte ich mal eine simple Blinkschaltung vorstellen. Um es nicht ZU einfach zu machen, ist ein Eingang vorgesehen der das Blinken abstellt und zu einem Dauerleuchten wechselt. Etwas in der Art habe ich mal für Ralph Friedes "Collins" gebaut. Dort hängt der Steuereingang des Blinkers mit am Kompressor. Während die Turmlampe lustig vor sich hinblinkt wird beim starten der Kompressoren auf Dauerlicht umgeschaltet und somit der Umstand visualisiert. Ralphs Variante bestand aus ein paar Widerständen, zwei Dioden, Kondensatoren, einem NE555, einem Relais mit Transistor, noch einem Optokoppler zur Erfassung der Kompressorspannung, ein paar Schraubklemmen und einer Lochrasterplatine.

Für die symbolische PICAXE Lösung werden hier nur Chip, Widerstände und LED dargestellt.

 

 

 

Das Programm:

 

main: high 4 ;Ausgang 4 wird auf high gesetzt

if pin3 = 1 then goto main ;Wenn Pin 4 auf 1 geht dann zurück zu main

pause 300 ;Pause von 0,3 Sekunden

low 4 ;Ausgang 4 wird auf low gesetzt

pause 300 ;Pause von 0,3 Sekunden

goto main ;gehe zu main

 

 

Wie man sieht ist das Programm ziemlich simpel gehalten und nicht wirklich schwer zu verstehen. Das Ganze kommt mit 18 Bytes aus, also kaum der Rede wert.

Etwas verwirrend ist für mich die Bezeichnung der Pins des 08M Chips. Der EINGANG 3 liegt an PIN 4, der AUSGANG 4 liegt an PIN 3. In der Zeile 2 des Beispielprogramms ("if pin3...")sieht man das sehr schön. Damit ich da nicht durcheinander komme hab ich immer das Datenblatt geöffnet.

Bis hierhin hat sich von der Hardwareseite nicht wirklich der Aufwand gelohnt, der Prozessor spielt erst dann seinen Trumpf aus wenn es darum geht die Schaltung zu veredeln. Man könnte beispielsweise nun mit einem zusätzlichen Eingang die Bordspannung abfragen und das mit in die Blinkfrequenz einfliessen lassen oder die Temperatur der Kompressoren haben einen Einfluss auf die Farbe wenn man eine mehrfarbige LED nimmt. Der Chip bietet sogar die Möglichkeit mit sehr wenig Programmieraufwand auch ein Servo anzusteuern um damit beispielsweise einen mechanischen Vorgang auszulösen. 

 

Wie man sich vielleicht schon vorstellen kann sind der Fantasie keine Grenzen gesetzt. Sollten zu wenig Ports zur Verfügung stehen so kann man auf die unwesendlich teureren größeren Chips ausweichen.

Programmiert werden die Teile übrigens über eine billige Schnittstelle bestehend aus 9pol Buchse und 2 Widerständen. Der serielle Port steht an den meisten Rechnern noch zur Verfügung, ansonsten kann man sich auch mit einem preiswerten USB auf seriell Umsetzer behelfen. Die Dinger kosten bei Ebay kaum noch was und funktionieren gut. In dem Zusammenhang, die Programmiersoftware wird übrigens auch als Linux Variante angeboten. Ich habe diese in Benutzung, funktioniert einwandfrei und auch die USB Schnittstelle kann angesprochen werden.

 

Ein weiteres Programm habe ich für Manfred Schröder geschrieben. Er hat sich einen Bagger gebaut welcher hydraulisch angetrieben wird. Die dazu benötigte Pumpe wird über einen bürstenlosen Motor angetrieben welcher permanent läuft und keiner Steuerung seitens der Fernbedienung bedarf. Dummerweise kann man keinen einfachen Servotester nehmen da der verwendete Roxxy Regler beim Start einen Impuls von 1,5ms erwartet und nach ein paar kurzen Gedenksekunden erst auf den gewünschten maximalen Wert gefahren werden kann.

Ich habe also den Chip so programmiert, dass nach Anlegen der Spannung ein Mittenimpuls generiert wird und nach einer Verzögerung von 5 Sekunden die Länge des Impulses auf ein mit einem Poti einstellbaren Wert gefahren wird. Das ist mit sehr wenig Zeilen Code schnell programmiert. Verfeinert wird das Ganze noch um einen Jumper. Mit diesem kann ein Programmiermodus eingestellt werden mit dem der Mittenimpuls genau justiert werden kann. Zu diesem Zweck wird der Jumper gezogen und mit dem Poti der gewünschte Mittenwert eingestellt. Dieser Wert wird am Poti ausgelesen und im internen Speicher des Chips abgespeichert. Nachdem der Jumper nun gesetzt wurde springt das Programm auf Betriebsmodus und der nun am Poti eingestellte Wert wird zur Endstellung des Servos ausgelesen. Dieser Wert ist während des Betriebes verstellbar und hat keinen Einfluss auf den abgespeicherten Wert der Programmierprozedur. Die unterschiedlichen Modi werden über verschiedene LEDs angezeigt.

 

Dies ist das dazugehörige Programm:

 

; kompressor pic für manni schröder.

;servo an pin 7, progled an pin 6, betriebsled an pin 5, programmierschalter an pin 4, poti an pin 3

;picaxe 08m @ 4mhz

;funktion: beim start wird geprüft ob schalter gesetzt. wenn ja, dann programmierung und speicherung der mittelstellung. nach umlegen des schalters betrieb. 

;servomitte wird gesetzt und nach 5 sekunden in eine mit poti wählbare position gesprungen

 

init:

servo 0 , 75     ;servo initialisieren

if pin3 = 1 then gosub schalter ;programmierschalter gesetzt?

low 2   ;betriebsled aus

low 1 ;programmierled aus

read b0 , b1 ;programmierte stellung in eeprom lesen

servopos 0,b1 ;servoposition setzen

wait 5 ;5 sekunden warten

main: 

high 2 ;betriebsled an

gosub ausg ;servoposition ausgeben

goto main ;schleife

schalter: ;programmierschalter ist gesetzt

high 1 ;programmierled an

gosub ausg ;servoposition ausgeben

write b0, b1 ;wert in eeprom ablegen

if pin3 = 1 then goto schalter ;progschalter noch gesetzt?

low 1 ;nein, dann programmierled aus

goto main

ausg: 

readadc c.4 , b1 ;potiwert lesen

servopos 0 , b1 ;und ausgeben

return

 

 

Wie man sieht ist das Programm schon ein wenig aufwändiger, sind ja auch schon 54 Bytes. Aufgrund der Dokumentation an der rechten Seite ist jeder Punkt einzeln in seiner Funktion beschrieben. Kommentare werden mit einem vorangestellten ; gekennzeichnet und nicht weiter vom Programm beachtet

 

Um ein Programm zu testen hab ich mir eine einfache Testplatine gebaut [bild0]. Darauf sind 3 Potis, 3 Leuchtdioden und ein 4poliges Mäuseklavier als Ein/Ausgabekomponenten [bild3]. Alle Komponenten können völlig frei über Steckverbindungen mit den Pins des PICAXE verbunden werden und bin dadurch nicht an fest verdrahtete Verbindungen gebunden. Ausser diesen Teilen ist noch ein Spannungsregler und ein Pfostenverbinder aufgelötet. Als Spannungsquelle nehme ich irgendwelche rumliegenden Akkus, der fließende Strom ist recht klein. [bild2]

Als letzte Erweiterung der Testplatine wurde noch ein Sockel für einen Typ 18m Prozessor vorgesehen. Dieser Chip ist leistungsfähiger und hat mehr Ein- und Ausgänge. Auch hat dieser Chip einen sogenannte I2C Schnittstelle die sehr einfach angesprochen werden kann. Diese ist sehr interessant für mich da ich sie für einen Servotester für I2C Fahrtregler brauche. Ansonsten kann man mit dieser 2 Draht Schnittstelle auch weitere andere Chips ansprechen wie z.B. ein LCD Display, Uhrenchips etcetc. Die Möglichkeiten sind nahezu unbegrenzt. Eine Porterweiterung um 8 Ausgänge sieht man auf Bild 4

In meiner Testplatine kann der Chip auch direkt programmiert werden. Erstaunlicherweise kann ich den Chip im laufenden Betrieb umprogrammieren und nach Programmierende startet er automatisch das eingespielte Programm. SEHR komfortabel, ich bin wirklich beeindruckt wie einfach und unkompliziert das geht. Es reicht eine einfache serielle Schnittstelle aus wie sie noch an älteren Rechnern zu finden ist. Sollte der Rechner nicht mehr über eine Serielle verfügen kann man auch einen USB zu seriell Wandler benutzen. Die Software stellt da keine grossen Ansprüche sodass eine einfache Variante genügen sollte.

Ich habe es oben schon erwähnt, der 8M Chip ist als kleinster Vertreter der PICAXE Familie bereits mit einer Servo-Out Funktion versehen.

Das heisst, man braucht nur einen Wert im Programm an einen Befehl anzuhängen, und schon fährt ein angeschlossenes Servo in eine bestimmte Position.

Auf diese Weise ist sehr einfach beispielsweise ein Servotester zu bauen den man noch über eigene Funktionen erweitern kann was mit einem üblicherweise benutzten NE555 nicht zu realisieren ist. Beispielsweise eine automatische 0-100% Funktion die vom Servo angefahren wird und man steuert nur noch die Geschwindigkeit mit dem Poti. Alles einfach per Programm zu realisieren.

Für uns sehr interessant ist das der BASIC Interpreter auch über einen Befehl verfügt der zum einlesen eines RC Signales benutzt werden kann. Das Ergebnis dieses Befehls ist ein Wert der zwischen 80 (0,8ms) und 220 (2,2ms) liegt. Ich habe mal das Ergebnis mit der Anzeige meines Unitest 2 verglichen, bei den vom Unitest angezeigten (und daher generierten) 1,9ms schaltet der PICAXE in einem Testprogramm tatsächlich bei einem Wert von 190. Ein 2Kanal Schalter ist daher einfach zu implementieren und kann durch geschickte Programmierung wesentlich leistungsfähiger da störunanfälliger sein als bespielsweise eine einfache Schaltung mit CMOS Gatter wie sie z.B. auf Conrad 2K Schaltern sind. Unnötig zu erwähnen das diese Schaltung auch einfacher im Aufbau ist.

 

Die PICAXE Familie verfügt auch über weit leistungsfähigere Vertreter. Diese haben z.B mehr Ein-Ausgabe Ports oder die verbesserte mathematische Funktionen. Dazu gibts mehr analoge Eingänge (bis 10 bit, also 1024 Schritte), z.B. um Spannungen zu messen oder Temperaturen über preiswerte NTC Widerstände. Auch der bereits weiter oben erwähnte I2C Bus ist erst ab dem Typ 18M zu haben. Die per Programm maximal zu erreichende Taktfrequenz liegt je nach Chip von 31kHz bis 64MHz!

 

Wie gesagt, das hier ist nur ein sehr kleiner Ausschnitt über das was mit diesen kleinen Käfern möglich ist. Es soll ein Anstoss sein, eigene kleine Projekte zu verwirklichen die ansonsten nur mit erhöhtem Hardwareaufwand und viel Zeit realisierbar gewesen wären.

 

Einige Internetlinks:

http://www.picaxeforum.co.uk/

http://www.roboter-teile.de/Oxid/index.php

http://www.rev-ed.co.uk/picaxe/

http://picaxe.zierath-software.de/schaltungen.html

http://www.roboter-teile.de/phpBB/index.php

http://www.phanderson.com/picaxe/picaxe.html