PIC-Thermometer

Um Weihnachten herum wollte ich mein Glück noch einmal mit PICs versuchen.
Da mir Assembler immer noch nicht sympathischer geworden ist, musste etwas anderes her - Hochsprache!
Basic für PICs ist zwar ganz nett, aber nicht besonders schnell und irgendwie ist der Syntax auch komisch.
Irgendwann bin ich dann auf cc5x.de gestoßen. Gefiel mir irgendwie auf Anhieb - der Syntax ist schön, die Sprache fällt mir seitdem ich PHP "kann" auch recht leicht und dann konnte es eigentlich losgehen:
Die ersten Übungen, um LEDs blinken zu lassen klappten irgendwann auch und ich wollte mehr.

Da ich mein Außenthermometer mit DS75 schon länger als Stand-Alone haben wollte und das DSM-0822A nach der kurzen Zeit am PC auch nur noch herumlag, hatte ich einen Verwendungszweck für das Display und meine C-Versuche.

Als Mikrocontroller fiel die Wahl auf einen PIC16F84, da er für diese Anwendung mehr als genug I/O-Pins hat, einfach zu Programmieren ist (keine ADCs und UART, die man vorher abschalten muss) und recht günstig zu besorgen ist.

Da der PIC von sich aus kein I²C kann, muss es emuliert werden. Ich habe dazu das Beispiel von Michael Dworkin verwendet. Gleiches gilt für die Displayansteuerung.

Der Stromlaufplan ist meiner Meinung genauso einfach wie chaotisch. Der PIC bekommt seinen Takt von einem 4MHz-Quarz, MCLR standardmäßig auf High, an PB3 (warum eigentlich PB3? *irritiertkopfschüttel*) ist die Frostwarn-LED und an PA2 und PA3 hängt der I²C-Bus. Die Pullups müssen sein, da es der Bus verlangt. Aber wo ist der Anschluss für das LCD? Einfache Erklärung: Im Library war das Display nicht und ich war einfach nur zu faul, etwas zu zeichnen. Im Board ist es allerdings vorhanden ;)
Stromlaufplan

 

Die Anschlussleiste für den I²C-Bus fällt dieses mal etwas einfacher aus - Vias.
Hier wird auch das Display angeschlossen - Der Kontrastpoti muss wohl oder übel direkt an der Leitung des Displays angelötet werden.
Belegung von links nach rechts: +5V, SDA, SCL, GND.
Hier ist eine kleine Falle eingebaut: Die Anschlussbelegung entspricht nicht der, wie sie bei den anderen I²C-Projekten die sich auf meiner Seite befinden!

Zur Software selbst gibt es nicht viel zu sagen, da sie schon im Quelltext (fast) vollkommen kommentiert ist.
Zur Bedienung gibt es ein wenig zu sagen: Der Taster dient zur Umschaltung zwischen den Sensoren. Solange der Taster gedrückt wird, wird die Sensornummer angezeigt. Falls kein Sensor angeschlossen ist, wird dies auf dem Display mit
"---,--°C" angezeigt. Zudem blinkt die LED.
Falls sich die Temperatur unter 4°C befindet, leuchtet die LED durchgehend (Frostwarner).
Ein paar Features werden noch kommen - es ist ja noch einiges an Platz auf dem PIC ;)

Was mir an der Software noch fehlt: Minimal- und Maximaltemperaturspeicher.
Wird noch kommen... ...wenn ich Zeit und Lust habe ;)


Nachdem der 16F84A etwas überdimensioniert für das doch recht einfache Thermometer ist, hier eine Version mit einem PIC12F675:

Stromlaufplan
Die Schaltung fällt einiges kleiner aus, da als Taktquelle der interne RC-Oszi verwendet wird. Auf Lochraster ist die Schaltung etwa 2,5x3cm groß - wenn man es so nennen will. S1 ist wie in der oberen Schaltung zum Wechseln des Kanals, für JP1 ist mir noch kein sinnvoller Verwendungszweck eingefallen. Der Code sollte übrigens auch mit dem 12F629 funktionieren - einfach den Header in thermo.c ändern und neu kompilieren.

Die EAGLE-Dateien sowie Software (für beide PICs) gibt es im Download-Bereich.

Achtung: Bei negativen Temperaturen zeigen die Thermometer Mist an!
[Das lustige ist, dass es mir zur heißesten Zeit des Jahres aufgefallen ist - man muss ja schließlich wissen, wie kalt das Eis ist]
Sobald ich den Zeit/Lust habe werde ich die Software ändern. Dann gibt es evtl. auch kleine Erweiterungen (Extremwert-Speicher).