Montag, 24. März 2014

Gehäuse-Einbau planen – Teil 1

Als Anschlüsse sollen herausgeführt werden:
  • PL4 (5V Power) als 5,5mm/2,1mm DC-Hohlbuchse
  • PL6 (MMBASIC Pins) als Sub-D 25f 
  • PL8 (PWM out) als 3,5mm stereo Klinkenbuchse
  • LED1 (SD-Zugriff, rot) und LED2 (Power, grün) versenkt eingebaut in Frontplatte
  • PL1 (PS/2 Tastatur), PL2 (USB), PL3 (SD-Karte) und BZ (Summer) als Gehäusedurchbrüche
Folgende Erweiterungen sollen noch nachrüstbar sein:
  • PL7 (ct Lab) als Sub-D 9f
  • PL11 (Reset) als Kurzhubtaster
  • JP1 (Bootloader) als verdeckter Taster (auch Kurzhub-)
  • evtl. Akku für netzunabhängigen Betrieb
Und natürlich muss der TFT auch eine passende Öffnung bekommen.

Das erste Problem war die richtigen / interessanten Abmessungen zu finden, und zwar sowohl vom Maximite als auch vom Gehäuse. Vom TFT Maximite gibt es zwar auf dem github eine Art Maßbild (TFT MM Dimensions.pdf), allerdings hat diese Zeichung zwei gravierende Mängel:
  1. Es ist nur das 4.3'' Display eingezeichnet, das 5'' Display wird überhaupt nicht erwähnt.
  2. Es fehlen einige wichtige Abmessungen (z.B. größte Höhe aller Bauteile, sehr wichtig sonst passt das Gehäuse nicht).
Beim Gehäuse sieht es ähnlich schlecht aus. Von proMa findet sich überhaupt nichts Nützliches (keine Angabe zu Innenmaßen in irgendeiner Form). Von gie-tec gibt es immerhin eine Beschreibung des Profils mit Zeichnung. Dummerweise fehlen auch hier wichtige Maße (wie hoch ein Gehäuse aus zwei Profilen aufeinander ist muss man sich zusammenrechnen, die Höhe der Stege auf der Innenseite fehlt komplett, …). Prinzipiell könnte man die Zeichnung ausmessen, allerdings müsste sie dafür eine gewisse Mindestqualität besitzen.

Was bleibt als Lösung: Gehäuse und TFT Maximite (soweit noch nicht vorhanden) bestellen, die Maße „am lebenden Objekt studieren“ bzw. ausmessen und selbst eine Zeichnung erstellen.

Samstag, 15. März 2014

Total Recompile - Der Fehlerteufel schlägt zu

Leider war in meinem Post vom 02.03.14 ein Fehler.

In der Datei "IOPorts - TFT_Maximite.h" war der Befehl "#define FINALBUILD" auskommentiert. Dadurch waren MMBasic Pin 5 und 6 trotzdem nicht benutzbar. Da ich die Firmware streng nach meiner selbst geschriebenen Anleitung gebaut hatte, war der Fehler auch dort enthalten.

Dummerweise hatte ich die Tests dann mit einer anderen Version durchgeführt, die zusätzliche Änderungen enthielt, die ich nicht veröffentlichen wollte. Dort hatte ich die Auskommentierung der entsprechenden Zeile entfernt, d.h. alles funktionierte einwandfrei.

Der Post vom 02.03.14 ist jetzt korrigiert und eine neue (diesmal hoffentlich wirklich fehlerfreie) Firmware ist im Post vom 10.03.14 verlinkt.

Tut mir leid für den Fehler. Ich hoffe, ich habe nicht zuviel Verwirrung gestiftet.

Montag, 10. März 2014

Total Recompile - Das Ergebnis: TFT_Maximite_44Brb.hex

Nachdem mich mehrere Leute danach gefragt haben und Geoff sein Einverständnis gegeben hat hier nun auch die fertige, selbst gebaute Firmware.

Änderungen gegenüber MMBasic Version 4.4B:
  • PL7 und PL9 werden unterstützt und sind benutzbar
  • die neuesten Touch-Funktionen sind eingearbeitet
Haftungsausschluss: Bei dieser Firmware handelt es sich nicht um einen offiziellen build sondern um eine selbst gebaute Version, die nach bestem Wissen und Gewissen erzeugt wurde. Ich übernehme keinerlei Garantie oder sonstige Gewährleistung. Jede Verwendung erfolgt auf eigenes Risiko. Die Bereitstellung dieser Version wurde von Geoff Graham freigegeben.


Downlaod: TFT_Maximite_44Brb.zip

Sonntag, 2. März 2014

Total Recompile - MMBasic neu bauen

Nachdem auch von Carsten Meyer kein baldiges update (u.a. wegen der touch-Geschichte) zu erwarten ist habe ich mich entschlossen die Firmware mit allen nötigen und nützlichen Änderung selbst zu bauen sprich: total recompile

Das hört sich viel komplizierter an, als es ist. Hat man erst einmal die nötigen Tools installiert ist das Erzeugen einer hex-Datei sehr einfach. Auch das Hochladen der Datei ist unproblematisch.

Vorarbeiten

Eine der Grundvoraussetzungen, den MMBasic-Quelltext, hatte ich bereits. Alles was noch dazu fehlte war ein compiler und eine Möglichkeit die FW auf den TFT Maximite zu bekommen.

Leider gibt es den compiler nicht einzeln, man muss sich das komplette MPLAB-IDE herunter laden. Der Empfehlung aus dem c't Hardware Hacks Artikel folgend habe ich mir die Version 8.9 aus dem Archiv von microchip besorgt. Das Archiv findet man entweder über die Suchmaschine seines Vertrauens oder hier:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2115
Die letzte Version der 8.9er IDE ist die 8.92:
http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_92.zip
Bevor man sich das aber installiert sollte man sich über folgende Dinge klar sein:
  1. Die Installation braucht 1,2 GB Plattenplatz!!!
  2. Das IDE verewigt sich an allen möglichen Orten im Betriebssystem und ist nur äußerst schwer wieder vollständig zu entfernen.
Eine Linux-Version gibt es nicht. Allerdings habe ich das MPLAB-IDE mit wine (Version 1.6.2-7 unter Debian jessie) zum Laufen bekommen. So ganz reibungslos ist die Installation aber trotzdem nicht verlaufen, wobei der Fehler meiner Meinung nach nicht bei wine liegt.

Es brauchte 6 Anläufe bis endlich ein komplettes MPLAB installiert war. Zwischendurch gab es immer wieder Abbrüche und kryptische Fehlermeldung. Letztendlich habe ich alles komplett deinstalliert und eine neue "custom installation" durchgeführt. Dabei habe ich bemerkt, dass MPLAB sich selbst nicht rückstandsfrei entfernt, und dass selbst bei manueller Nacharbeit das Setup mir immer noch die exakte Liste der vorher gewählten Komponenten präsentiert. Man sollte sich also gut überlegen ob und wohin man das installiert, schon allein wegen des enormen Platzbedarfs. Wine oder eine virtuelle Maschinen bieten sich hier an, da man beides sehr einfach wieder rückstandsfrei entfernen kann.

Welche Komponenten man braucht hängt davon ab wie man letztendlich das fertige Kompilat übertragen will / kann. Wenn man so wie ich den bereits installierten Bootloader nutzen kann genügt folgende Auswahl:

Wichtig sind die Häkchen bei "32-bit MCU", "MPLAB C32 Suite" und "MPLAB Sim". Wenn ich "AN851 Bootloader" und "MPLAB ICD 3" weg gelassen habe gab es bei der Installation kryptische Fehlermeldungen.

Als nächstes muss man den MMBasic Quellcode in ein geeignetes Verzeichnis kopieren. Der Einfachheit halber habe ich alles direkt auf C: unter C:\MMBasicSource kopiert.

Dann wird es interessant. Man startet MPLAB und lädt das Projekt TFT_Maximite.mcp (zu finden unter MMBasicSource\Maximite\MPLAB\). Nachdem man sich vergewissert hat, dass unter "Configure" --> "Select Device" der richtige Prozessor (PIC32MX695F512L) eingestellt und unter "Project" --> "Build Configuration" --> "Release" ausgewählt ist kann man mit "Project" --> "Build All" den Kompiliervorgang starten.

Wenn alles erfolgreich durchgelaufen ist (dauert je nach Computer Sekunden bis Minuten) findet man unter MMBasicSource\Maximite\Output u.a. die Datei "TFT_Maximite.hex". Diese Datei ist nicht identisch mit "TFT_Maximite_44b1.hex" vom github sondern dürfte in etwa dem entsprechen, mit dem der TFT Maximite ausgeliefert wurde.

Um letzte Pannen auszuschließen kann man die frisch erzeugte hex-Datei auf den TFT Maximite laden (s.u.) und versuchen ob er damit läuft. Nicht erschrecken, das Tastaturlayout ist dann erst mal wieder auf "us" eingestellt. Sollte der Maxi nicht starten kann man trotzdem noch die letzte Version vom github "TFT_Maximite_44b1.hex") hochladen, dann läuft wieder alles.

Angeblich ist es unmöglich den TFT Maximite unter Verwendung des bootloader zu bricken (die SW so zu zerschießen, dass man gar nichts mehr mit dem Teil anfangen kann).

Quelltext anpassen und neu kompilieren

Ist man in der Lage funktionierende hex-Dateien zu erzeugen kann man sich daran machen den Quellcode anzupassen.

Touch.c und Touch.h

Carsten Meyer hat auf github eine aktuellere Version der touch-Funktionen abgelegt. Wenn man diese verwenden möchte muss man beide Dateien nach MMBasicSource/Maximite/MMSource kopieren. Da diese aber nicht mehr 100% mit den alten Funktionen kompatibel sind muss man im gleichen Verzeichnis aus noch die Datei "External.c" anpassen. Es ist eine Funktion umbenannt worden, d.h. man muss "item_init" durch "item_active" erstzen.

IOPorts - TFT_Maximite.h

Um die Anschlüsse PL7 und PL9 nutzen zu können muss man diese Datei (zu finden unter MMBasicSource/Maximite/MMSource/IOPorts) anpassen.

Als erstes sollte man im Kopf den Dateinamen ändern:

Das ist zwar nicht zwingend notwendig schadet aber in keinem Fall.

Dann muss weiter unten eine Zeile eingefügt werden:

Macht man das nicht kann man später Pin5 und Pin6 nicht verwenden.

Um mehr als 20 I/O-Pins verwenden zu können muss die entsprechende Variable geändert werden:

Grundsätzlich könnte man bis zu 40 Pins verwenden. Da die analogen Pins auf dem TFT Maximite aber überhaupt nicht verwendet werden kann man sich die letzten 6 Pins sparen.

Jetzt muss man nur noch die Pins selbst definieren:

Diese Zeilen kann man aus IOPorts – ColourMM.h kopieren. Damit ist auch festgelegt, wie man die entsprechenden Pins verwenden kann.

Hat mal alle Änderungen gespeichert kann man mit "Project" --> "Make" (oder wer auf Nummer sicher gehen will mit "Build All" eine hex-Datei erzeugen.

hochladen und testen

Wie man auf einen TFT Maximite eine neue Firmware lädt findet man auf der Seite des Color Maximite:
http://geoffg.net/maximite.html

Unter der Überschift "MMBasic Updates" gibt es ein zip-file mit der aktuellst Firmware. Darin enthalten ist ein pdf (Loading New Firmware.pdf) welches die Prozedur beschreibt und eine BootLoader.exe für Windows.

Für Linux und Macintosh gibt es zum Glück das Programm MPHidFlash welches auch in der Prozedur beschrieben wird. Das Programm kann hier herunter geladen werden:
http://code.google.com/p/mphidflash/

Der einzige Schwachpunkt ist die Abhängigkeit von der Bibliothek libhid, welche in aktuellen Distributionen nicht mehr enthalten ist. Für debian können die erforderlichen Pakete aber auf archive.debian.org herunter geladen werden:
http://archive.debian.org/debian/pool/main/libh/libhid/libhid0_0.2.15+20060325-2.2_i386.deb
Wer das Programm selbst kompilieren will benötigt noch das zugehörige dev-Paket
http://archive.debian.org/debian/pool/main/libh/libhid/libhid-dev_0.2.15+20060325-2.2_i386.deb

Unter Linux funktioniert der Firmware Upload folgendermaßen:
  • TFT Maximite einschalten solange JP1 (BOOTLOADER) gebrückt ist, das Display blinkt dann hell dunkel.
  • TFT Maximite an den PC anschließen, lsusb sollte folgendes Gerät anzeigen:
    Bus xxx Device xxx: ID 04d8:fa8d Microchip Technology, Inc.
    Befindet sich der TFT Maximite nicht im Bootloader Modus erscheint eine andere product ID:
    Bus xxx Device xxx: ID 04d8:fd52 Microchip Technology, Inc.
  • Die Übertragung der hex-datei mit folgendem Befehl starten:
    ./mphidflash -v 04d8 -p fa8d -n -w TFT_Maximite.hex
    Während der Übertragung bleibt der Bildschirm dunkel und fängt erst nach der Übertragung wieder an zu blinken.

Wenn die Fehlermeldung "Error: Device not found (is device attached and in Bootloader mode?)" erscheint, der TFT Maximite aber im Bootloader Modus ist und von lsusb angezeigt wird kann MPHidFlash nicht auf den USB-Anschluss zugreifen, dann muss das Programm mit root-Rechten ausgeführt werden:
sudo ./mphidflash -v 04d8 -p fa8d -n -w TFT_Maximite.hex

Wer dem Programm oder dem ganzen Upload-Prozess misstraut kann auch zuerst versuchen die letzte Version vom github ("TFT_Maximite_44b1.hex") hoch zu laden bevor er sich an die selbst erstellte TFT_Maximite.hex wagt.

Nach Upload und erfolgreichem Neustart steht der TFT Maximite erst mal wieder auf us-Tastaturlayout. Außerdem muss evtl. das Display-Poti nachgestellt werden und eine touch-Kalibrierung durchgeführt werden.