Am Wochenende wollte ich einen Temperatursensor über Pi4J vom Raspberry Pi aus auslesen. Das hat letztendlich auch geklappt, war aber wesentlich aufwändiger als gedacht.
Kategorie-Archiv: Hardware
20 Jahre Computermuseum der Universität Stuttgart
Zum 20. Jahrestag des Computermuseums der Universität Stuttgart hat das Informatik Forum Stuttgart (infos) zu einem Festkolloquium eingeladen. Der Leiter des Computermuseums, Klemens Krause, hat in einer Live Präsentation einen 50er Jahre Röhrencomputer LGP-30 vorgestellt. Er besteht aus 113 Röhren und 700 Germanium-Dioden und besitzt einen Trommelspeicher von 4096 Worten à 31 Bit. Der Ton der Aufnahme ist leider nicht besonders gut, da ich nur ein Smartphone zur Verfügung hatte.
Ultraschall Sensor
Ich wollte schon seit längerer Zeit mal etwas mit einem Ultraschall Sensor machen. Also habe ich mir bei Reichelt kurzerhand ein Sender – Empfänger Paar gekauft und mal an meinen Signalgenerator sowie Oszilloskop angeschlossen.
Meine naive Annahmen, dass ein Ultraschallempfänger so eine Art Mikrofon für hohe Frequenzen und ein Sender ein Lautsprecher für hohe Frequenzen sei, hat sich aber schnell zerschlagen. Naiv deshalb, weil ein Blick in das Datenblatt zeigt, dass beide Komponenten relativ Schmalbandig um die 44 kHz arbeiten. Das deutet darauf hin, dass hier stark mit Resonanzeffekten gearbeitet wird.
Am Sender reicht schon ein Burst mit nur einer Periode aus, um am Empfänger ein breites Signal zu erzeugen.
Da ich nicht weiß, wo innerhalb des Gehäuses der Sender bzw. der Empfänger liegt, habe ich bei der Distanzmessung eine Unsicherheit von etwa 5 mm. Da ich auf der Empfängerseite keinen klaren Startpunkt habe, ist es auch schwierig, die Laufzeit exakt zu bestimmen. Am Genausten wäre es vermutlich, wenn man die Hüllkurve ermittelt und dann das Maximum sucht. Allerdings vermute ich, dass hier dann eine Änderung der „Lautstärke“ zu erheblichen Messfehlern führt.
Da das Empfangssignal im Ruhezustand erstaunlich stabil ist, verwende ich den ersten sichtbaren Ausschlag als Messpunkt. Bei Abständen von (ca.) 25, 20, 15, 10 und 5 cm komme ich auf Zeitunterschiede von jeweils ca. 150 Mikrosekunden. Das würde eine Schallgeschwindigkeit von 330 m/s ergeben. Die Abweichung zur echten Schallgeschwindigkeit liegt bei dieser einfachen Ablesemethode im erwarteten Rahmen.
Ich werde in den nächsten Tagen wohl eine Umstellung auf einen Microcontroller machen. Dann ist der Ablesezeitpunkt weniger willkürlich. Zudem kann kann man bei Laufzeiten im einstelligen Millisekundenbereich durchaus 100 Messungen pro Sekunde durchführen und einen Mittelwert bilden. Mal sehen, ob ich dann genauere Daten bekomme.
Besuch im IBM Computermuseum in Böblingen
Ich war heute auf einer IBM Veranstaltung in Böblingen. Am Ende hatten wir das Glück, dass wir noch die nicht öffentliche Computersammlung besichtigen konnten. Leider kam meine einfache Handy-Kamera nicht besonders gut mit der Beleuchtung zurecht, aber es sind doch ein paar brauchbare Bilder entstanden.
Frequenzzähler/ Periodenmesser mit einem PIC32 – Teil 2
Da ich am Wochenende im Augenblick stark in die Vereinsarbeit (wsb-calw.de) eingebunden bin, geht es mit meinem kleinen Projekt nicht so schnell voran wie gewünscht. Ich habe in dieser Woche aber doch ein paar weitere Schritte geschafft.
Die erste Hürde lag darin, dass ich nicht den kompletten Microstick einbauen wollte. Zum einen ist es zu teuer, für jedes kleine Bastelprojekt ca. 40 EUR auszugeben. Zum anderen wollte ich ein echtes Microcontrollerprojekt haben und nicht einfach nur eine fertige Modulplatine einbauen.
Eigentlich ist es auch nicht kompliziert. Für die Programmierung und das Debugging sind 5 Leitungen vorgesehen: GND und +3.3V, Daten und Takt sowie Reset. Also habe ich den PIC aus dem Microstick herausgenommen und auf meine Platine gesetzt. Die 5 Leitungen habe ich von der Platine mit dem Adaptersockel auf der Unterseite verbunden. Et voià – der PIC wurde von der Entwicklungsumgebung nicht gefunden. An dieser Stelle hätte ich mir eine Stunde Fehlersuche ersparen können, wenn ich mir den Schaltplan des Microstick richtig angesehen hätte. Dort kann man nämlich genau sehen, dass einige Prozessorpins nicht mit dem Adaptersockel verbunden sind. Unter anderem Reset und +3.3V.
Nachdem ich die Verbindung vom Adaptersockel entfernt und direkt in PIC Fassung eingesteckt hatte, lief die Kontaktaufnahme problemlos. Nun hatte ich den Stand, dass ich einen externen PIC32 programmieren und debuggen konnte.
Der nächste Schritt war dann Fleißarbeit: den Siebensegmentdecoder und den 1 aus 16 Demultiplexer vom Steckbrett auf meine Lochrasterplatine versetzen. Das wäre eigentlich einfach gewesen. Unglücklicherweise habe ich für die Verbindungen einen Draht mit einer extrem weichen und wärmeempfindlichen Isolierung verwendet. Und mir dabei gleich einen Kurzschluss zwischen zwei Datenleitungen eingebaut.
Um es noch etwas komplizierter zu machen, habe ich an dem Multiplexer auch noch den Enabled Eingang offen gelassen. Da ein offener CMOS Eingang auf irgend einem Pegel hängt, bekommt man eine extrem unzuverlässige Schaltung. Bei mir blieb das Display dunkel – bis ich mit dem Finger in die Nähe des ICs gekommen bin. Alleine die Nähe hat ausgereicht, dass der Pin mit 50 Hertz Netzfrequenz ein- und ausgeschaltet hat. Wieder ein Abend verloren, bis ich das gefunden hatte.
Der nächste Abend ging dafür drauf, die 9 PNP Transistoren für den Multiplexer auf der Anodenseite einzulöten und Basiswiederständen zu versehen. Dabei hatte ich im Vorfeld den benötigten Platz etwas knapp kalkuliert. Es hat zwar alles gepasst, ist aber etwas gedrängt und schief. Nun ja – später ist es in einem Gehäuse und man sieht es nicht mehr.
Jetzt läuft aber alles und der nächste Schritt besteht darin, eine interruptgesteuerte Anzeigeroutine für den Multiplexer zu schreiben. Der Lötkolben kann ein paar Tage ausruhen.
Frequenzzähler/ Periodenmesser mit einem PIC32 – Teil 1
Im Internet hatte ich vor ein paar Wochen ein Verfahren gefunden, wie man einen Frequenzzähler mit guter Genauigkeit und Messauflösung aufbauen kann. Das Original wurde mit einem AVR Prozessor aufgebaut. Da ich ein PIC32 Projekt durchführen wollte, habe ich diesen Prozessor gewählt, auch wenn ein einfacheres Modell gereicht hätte.
Bei ebay konnte ich für wenige Euro 9-stellige blaue Siebensegment Displays erwerben. Da mein PIC32 Modell nicht gerade üppig mit Pins bestückt ist, habe ich einen normalen Siebensegment Decoder 7447 verwendet. Das hat auch den angenehmen Vorteil, dass ich gleich eine Open Collector Ansteuerung für die LEDs habe. Den Dezimalpunkt kann ich im Augenblick noch nicht ansteuern, dafür werde ich noch ein Port-Pin spendieren müssen.
Zum Multiplexen der einzelnen Stellen habe ich einen 1 aus 16 Decoder 74154 verwendet. Ich hatte auch überlegt, einen 1 aus 8 Decoder (74138) zu verwenden und die neunte Stelle dann direkt anzusteuern. Das hätte die Schaltung aber umfangreicher gemacht und bringt kaum eine Einsparung. Dann sind eben 7 Schaltzustände ungenutzt. Das kann ich später dazu verwenden um zusätzliche LEDs zur Statusanzeige anzusteuern.
Da ich die Segmente mit mindestens 30 mA ansteuern möchte (laut Datenblatt sind 30 mA erlaubt, deshalb wird das Display es auch überleben, wenn der Multiplexer mal stehen bleibt), kann ich die Stellenumschaltung nicht direkt vom IC aus ansteuern. Es müssen bei der Anzeige der Ziffer 8 ca. 240 Milliampere geliefert werden. Also erfolgt die Ansteuerung über einen PNP Darlington Transistor der mit dem Emitter an Plus liegt. Der Decoder zieht den ausgewählten Kanal freundlicherweise auf 0 – genau passend zur Ansteuerung des Transistors, natürlich mit einem Vorwiderstand. Vermutlich hätte hier statt eines Darlingtons auch ein normaler PNP Transistor gereicht.
Die TTL ICs betreibe ich mit den vorgeschriebenen 5 Volt, den PIC mit 3,3 Volt. Der High Level des PIC hat aber auch bei nur 3,3 Volt einen ausreichend hohen Pegel um von den TTL ICs als High erkannt zu werden.
Für den Prototypen auf dem Steckbrett habe ich nur 3 Stellen verkabelt. Der nächste Schritt besteht darin, das Ganze dann vollständig auf einer Platine aufzubauen. Sobald die Anzeige dann steht, geht es an den Zählerteil.
Etwas zum Nörgeln habe ich zum Schluss aber noch: die Port-Pin Verteilung bei den 28 Pin PIC32 ist übel. Vom Port A stehen prinzipiell die ersten 5 Bit zur Verfügung – die Einschränkung deshalb, weil ich nur PA0 und PA1 tatsächlich zu einer Ausgabe überreden konnte. PA2 und PA3 gehören scheinbar dem Programmieradapter. Die Verwendbarkeit von PA4 habe ich nicht überprüft.
Beim Port B ist es auch nicht toll. Er ist auf den ersten Blick vollständig – aber nein: die Bits 6 und 12 fehlen ganz. Zwei weitere Bits sind durch den Oszillator belegt und ich habe noch nicht herausgefunden, wie man sie als Ausgang verwenden kann. Da ist es schon mühsam, vier zusammenhängende Bits als Bus zu finden. Das hätte man vielleicht auch sinnvoller aufteilen können.