3ders.org – Adafruit’s 3D printed PiGRRL Zero puts retro gaming in your pocket | 3D Printer News & 3D Printing News

Adafruit’s Ruiz Brothers have posted a tutorial for the PiGRRL Zero, their latest Gameboy-style, 3D printed emulator. The PiGRRL Zero, which packs 14 buttons and a 2.2′ color display into its tiny landscape casing, is built around the $5 Raspberry Pi Zero.

Quelle: 3ders.org – Adafruit’s 3D printed PiGRRL Zero puts retro gaming in your pocket | 3D Printer News & 3D Printing News

Das elektronische Schaf

Lange ist es her, seit ich mich um das elektronische Schaf gekümmert habe. Mit dem Unterboden war ich nicht wirklich zufrieden. Nun habe ich mich endlich mal an einen neuen Versuch gewagt.

links: neue Version, rechts: alte Version

 

Die Motoren sind nun um 5° nach unten geneigt. Das ergibt ein bisschen mehr Bodenfreiheit und die Drehungen sollten ein bisschen leichter gehen. Eine 10° Neigung müsste ich auch noch mal ausprobieren.

Um 5° geniegte Motoren auf allen Achsen

Da der Raum für den Motor zu eng war, ist beim Eindrücken des Motors das Gehäuse ein bisschen aufgeplatz (links zu sehen). Die Layerhafung ist bei diesem Versuch auch nicht so ganz gut. Gedruckt habe ich mit ABS.

Dafür war die Haftung am Druckbett zu gut.

Am Druckbett haftendes ABS

Obwohl die Maße 170 mm x 128 mm betragen hat sich keine einzige Ecke des  Modells vom Druckbett abgehoben. Leider haftete das Modell auch nach dem Abkühlen noch so stark am Druckbett, dass ich es nur mit Mühe runterbrechen konnte. Vor dem Drucken kippe ich ein wenig Aceton (Achtung gut lüften!) auf das Druckbett und schwenke ein paar mal etwas ABS darin herum. Das ABS löst sich im Aceton etwas auf und klebt dann nach dem Trocknen am Druckbett fest. Die Schicht ist dabei kaum zu sehen, aber es reicht vollkommen aus, um als Haftgrund zu dienen.

Ich werde nachher noch mal einen Druck starten. Mit veränderter Motoraufnahme (etwas weiter), dickeren Wänden (2mm auf 4 mm) und leicht erhöhter Drucktemperatur (234°C auf 237°C). Druckzeit ca. 6 Stunden.

DEFCON Ampel, die Zweite

Um den Kollegen anzuzeigen, dass man gerade nicht unbedingt gestört werden möchte, habe ich eine kleine Ampel in Anlehnung an die DEFCON Einteilung (Grün und Blau sind getauscht) gebastelt.

Zuerst hatte ich als Gehirn der Schaltung einen Arduino Mini Pro verwendet. Da ich nur die 5V Version besitze und das Ganze mit einem kleinen Lithium-Akku betreiben wollte, brauchte ich auch noch einen Step-Up Wandler auf 5V. Die Billigdinger, die ich hier rumliegen habe, taugen aber leider nicht viel. Sie machen zwar, was sie sollen und es funktioniert auch, aber sie geben einen fiesen Pfeifton von sich. So kann die Ampel dann nicht auf dem Schreibtisch stehen.

Also habe ich mir eine andere Möglichkeit überlegt. Mein Hundeblinklicht habe ich auch von Arduino Mini Pro auf ATTiny85 gewechselt. So wollte ich es nun auch machen. Hab zwar nur noch einen ATTiny 45 hier liegen, der ist aber auch nicht viel anders als der 85er. Der ATTiny45 hat insgesamt 8 Pins. Zwei dienen der Spannungsversorgung und ein weiterer kann nicht so ohne weiteres als Aus- oder Eingang verwendet werden. Der RESET Pin. Den brauche ich, so wie er ist, zum Programmieren des ATTiny. Bleiben also noch 8 minus 3 also 5 Pins über. 3 LEDs und zwei Taster wären dann auf traditionelle Weise möglich. Das war mir bedeutend zu wenig. Immerhin hatte ich bereits 5 LEDs und 6 Taster in der ersten Version eingebaut.

Der ATTiny 45 sitzt unter den Tastern; vorne links zu sehen.

 

Über Spannungsteiler kann man unterschiedliche Spannungen am Analogeingang anlegen und im Code auswerten. Das erfordert zwar ein bisschen mehr externe Beschaltung, dafür ist die Anzahl der Taster dann nicht mehr begrenzt (praktisch wird es bei > 20 Tastern schon schwierig). Das Ganze erfordert dann auch nur noch einen Pin.

Stümperhaft bemalt, aber für einen Prototypen reicht es

Dann sind nun noch 4 Pins frei. 3 LEDs mit PWM sind mit Bordmitteln machbar oder ich verzichte auf PWM und habe dann 4 LEDs. Dennoch habe ich erst mal mit 3 LEDs und PWM angefangen. So hatten wenigstens alle 6 Taster eine Funktion.

Danach ist mir dann eingefallen, dass man LEDs antiparallel schalten kann. Einfach die Polarität tauschen und schon leuchtet die eine oder die andere LED. So wie bei Charlieplexing. In dem Fall musste ich mich dann aber vom integrierten PWM verabschieden. Mit Charlieplexing und PWM wären nur 4 LEDs möglich gewesen (beim ATTiny 45).

Schaltplan der Ampel

Statt die LED nun sanft ein und ausfaden zu lassen, blinken sie nun einfach. Mit zwei Tastern kann man die Blinkfrequenz verlangsamen oder beschleunigen. Mit übrigen zwei Tastern kann man nun das Tastverhältnis (Duty Cycle) zwischen An und Aus beeinflussen. Tja und wenn man nun die Blinkfrequenz ganz hoch setzt, hat man ein Software PWM 🙂 Ich könnte jetzt wieder das sanfte ein und ausfaden einbauen. Ich werd’s aber wohl lassen. Das Blinken und Blitzen hat auch was.

Hier der Code, den ich mit der Arduino IDE geschrieben habe. Wenn ich die Funktion analogRead(x) nun noch ersetzen kann, ist der Code auch mit anderen IDEs kompelierbar.

 

 

ArcadePi nächster Teil

Vor langer Zeit  hatte ich mal damit angefangen, eine tragbare Spieleconsole mit einem RaspberryPi zu bauen. So eine Art PiGRRL – Raspberry Pi Gameboy. Mein zweiter Versuch war dann schon etwas aufwändiger. Das ganze Gehäuse habe ich selber entworfen und mehrere Versionen auf meinem 3D Drucker ausgedruckt.

Das Display ist ein 4,3 Zoll großer TFT Monitor, den man für Rückfahrtkameras nutzt. Im Gegensatz zu den Displays, die speziell für den RaspberryPi verkauft werden, ist so ein Monitor bei Amazon schon für um die 20 Euro zu haben.

Nachdem dann der ganze ArcadePi zusammengebaut war und funktionierte, schlief das Projekt wieder ein. Einige Dinge haben mit nicht gefallen und bei dem jetzigen Neuanfang habe ich die Chance, diese Dinge zu ändern.

Bei dem neuen ArcadePi wollte ich zuerst eines dieser RaspberryPi Displays nutzen, die man über die GPIO Pins anschließt. Dies Vorteile als auch neben dem Preis einige andere Nachteile:.

Vorteile

  • Digitale Übertagung
    • Die Daten werden nicht Analog, sondern mit digitalen Signalen auf das Display geschoben
    • Dadurch bleibt die Grafik frischer und wirkt nicht so verwaschen.
  • Es ist (gefühlt) stromsparender
    • Einen genauen Beleg habe ich nicht. Es liegt sicherlich daran, dass ich einen 4,3 Zoll Monitor genutzt habe, der offensichtlicher Weise mehr verbraucht als ein 3,5 Zoll Monitor.

Nachteile

  1. Das Display muss erst konfiguriert werden, damit es überhaupt etwas anzeigt.
    • Wenn es dann erst mal läuft, ist das auch nicht weiter schlimm
  2. Das Display ist langsam
    • FPS
    • Video Lag

Am störensten ist das Video Lag. Dieser liegt bei 20 bis 30 ms. Klingt erst mal nicht viel. Aber wenn man dann mal Super Mario Brothers spielt, ist das schon sehr deutlich zu spüren. Durch diesen Lag springt man immer zu spät und stirbt ständig. Ich bin zwar kein guter Mario Spieler, aber zumindest im ersten Level verliere ich kein Leben, wenn ich über einen VGA oder HDMI Monitor spiele. Bei 30 Milli-Sekunden Lag ist das schon frustrierend. Man könnte sich an den Lag anpassen, aber will man das wirklich?

Ich habe hier noch einen weiteren kleinen TFT Monitor im 3,5 Zoll rumliegen (auch ca 20 Euro bei Amazon). Diesen will ich diesmal verwenden. Der 4,3 Zoll Monitor verbraucht mir zu viel Strom und 3,5 Zoll sind ausreichend groß.

Bald soll es weitergehen.

Für mich hilfreiche Links zum ATtiny

Ich benutze gerne den Arduino in seinen verschiedenen Formen. Alle Anschlüsse sind leicht erreichbar (steckbar) und die Programmierung mit der Arduino IDE ist für gewöhnlich auch ein Kinderspiel. Der Nachteil ist, dass so ein Arduino, auch in den kleinen Varianten, immer noch recht groß ist und auch viel Strom verbraucht. Also musste mal was Neues her. Am besten sollte es auch noch weitest gehend kompatibel mit dem Arduino sein. Da bin ich dann auch den ATtiny gestoßen. Immerhin werden auf dem Arduino auch die Chips von Atmel verbaut. Nur diesmal sollte es eben ein ATtiny statt des ATmega sein.

Den ATtiny gibt es in verschiedenen Ausführungen. Ich habe mir zum Testen einen ATtiny12, ATtiny45 und ATtiny85 besorgt. Jeweils in der Duchsteckversion mit 8 Beinchen. Von Außen sind alle Versionen gleich. Nur im Innern ergeben sich kleine Unterschiede. So hat beispielsweise der ATiny85 drei PWM Ausgänge und der ATtiny 45 nur 2.

Für mein Hundeblinklicht ist es wichtig, dass die Elektronik sparsam mit der Energie umgeht. Zusätzlich habe ich noch nach einer einfachen Möglichkeit gesucht, die Elektronik mit einem einfachen Taster statt eines Schalter abzuschalten. Der ATtiny funktioniert auch ohne Spannungsstabilisierung. 1,8 V bis 5,5 V Betriebsspannung benötigt der kleine Chip. Ideal für einen 3,7 V Lithium-Akku, dessen Spannung von 4,2 V bis ca 3,6 V geht.

Ich fassen einmal kurz meine erreichten Vorteile des ATtiny gegenüber des Arduinos auf.

  • Einsparung des Schalters zum Abschalten der Elektronik
  • Wegfallen des DC-DC Spannungswandlers von 3,7 V auf 5 V
  • ATtiny ist bedeutend kleiner als ein ganzes Arduino Mini Bord
  • ATtiny ist günstiger
  • ATtiny ist stromsparender

 

Unten: Gehäuse mit Arduino Mini, Oben: ATtiny Das aktuelle Gehäuse ist sogar noch einmal etwas kleiner geworden.

Die Größeneinsparung ist schon enorm. Aber auch die Kosteneinsparung ist sehr gut. So ein Arduino Mini (Klon) kostet ca. 8 Euro, vielleicht auch nur 5 Euro. Der ATtiny nur um die 1 Euro. Kostenintensiv ist auch der DC-DC Wandler. Der von mir verwendete Pololu Wandler kostet um die 4 US$. Der eingesparte Schalter kostet nur ein par Cent. Aber man spart auch noch Platz im Gehäuse 🙂

Nun ist der ATtiny da. Wie soll der nun programmiert werden. Ein dafür geeigneten „Flasher“ habe ich mir nicht gekauft. Mit einem Arduino soll das Ganze auch funktionieren. Also mal kurz rumgesucht und folgenden Link (neben anderen) gefunden: http://www.frag-duino.de/index.php/maker-faq/37-atmel-attiny-85-mit-arduino-arduinoisp-flashen-und-programmieren Dort wird beschrieben, was man machen muss, damit man mit Hilfe eines Arduinos den kleinen ATtiny mit Daten füttern kann. Zuerst hatte ich es mit einem Arduino Leonardo versucht, aber damit klappte es nicht. Mit einem Arduino Mega funktionierte es dann.

Danach habe ich nach einer Möglichkeit gesucht, den ATtiny in einen Energiesparmodus zu versetzten. Auch hier gibt es diverse Programmbeispiele. Angefangen habe ich mit diesem hier: http://www.arduino-hausautomation.de/2014/emils-ampel-attiny45-im-tiefschlaf/ Eine kleine Ampel wird per Knopfdruck eingeschaltet. Nach einer bestimmten Zeit wird der ATtiny wieder schlafen geschickt. Den dort abgebildeten Code musste ich noch ein bisshen anpassen, damit der ATtiny per Knopfdruck aufgeweckt und auch wieder schlafen geschickt werden kann.

 

 

Pinbelegung ATTiny
Pinbelegung ATtiny 45 – Seite 2

Mega      Duem
D53       Reset (SS)
D51       D11 (MOSI)
D50       D12 (MISO)
D52       D13 (SCK)
Gnd       Gnd
+5         +5

Auch dieser Link war hilfreich: http://playground.boxtec.ch/doku.php/arduino/attiny Hier werden ein paar der ATtiny Typen verglichen.

 

Um den Code auf den jetzigen Stand zu bringen, musste ich einiges lesen. Auch das anfangs kryptisch wirkende Datenblatt des ATtiny hat sich mir ein wenig geöffnet. Hier ist noch ein Quellcode zu finden, in dem die Verwendung der Register ausführlich beschrieben ist: http://matt16060936.blogspot.de/2012/04/attiny-pwm.html
Zu guter Letzt habe ich mich noch mit den Interrupts auseinander gesetzt. http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html

Meine Methode „lauflicht()“ ist so gestaltet, dass die ohne die Funktion delay auskommt. So war es möglich, schnell auf einen Tastendruck zu reagieren. Bei Verwendung von delay hätte der Taster während des delays nicht reagiert. Mittlerweile müsste ich soweit sein, dass ich den Taster komplett als Interrupt definiere. Dann müsste der ATtiny auch während der Wartephase reagieren. Das probiere ich später noch mal aus.

Hundeblinklicht V5 – Nachtrag

Im letzten Code gab es ein paar Unstimmigkeiten. Beim Testen habe ich festgestellt, dass durch die Schaltung selbst im Power Down Modus immer noch etwas über 1 mA fließt. Der Grund dafür war ganz einfach. Statt in den Power Down Modus zu gehen, wurden einfach nur die LEDs ausgeschaltet. Von Außen macht das keinen Unterschied, aber der Stromverbraucht ist schon enorm unterschiedlich.

Den Code habe ich nun etwas geändert. Leider funktioniert mein Code nun nicht mehr mit dem ATTiny45. Statt dessen habe ich nun den ATTiny85 eingebaut. Der Stromverbrauch im Power Down Modus liegt nun bei 0,1 µA. Diesen Wert zeigt jedenfalls mein Messgerät an.

Die Stromsparfunktion müsste eigentlich auch mit dem ATTiny45 funktionieren. Vielleicht finde ich noch heraus, was da schief läuft.