Eine Programmierlehre für unsere DougsWordClock.com DeskClock-Karten: 9 Schritte

Eine Programmierlehre für unsere DougsWordClock.com DeskClock-Karten: 9 Schritte

Inhaltsverzeichnis:

Anonim

Hey - Es ist * Ewigkeit * her, seit ich etwas an Instructables geschickt habe, um es der Community zurückzugeben. Ich dachte, ich würde mit Ihnen teilen, wie ich unser neues Programmier-Rig für die Boards gebaut habe, die in den DeskClocks von www.dougswordclock.com verwendet werden.

Sie wissen, wie es geht, Sie haben ein großartiges Projekt geschaffen und vielen Leuten davon erzählt und sicher genug, dass Tonnen von Leuten eines für sich haben möchten. Sie lassen die Leiterplatten herstellen und verbringen einige Zeit damit, Lötpaste und Komponenten aufzutragen, Reflow zu löten und die Nicht-Reflow-Komponenten zu installieren. Anschließend laden Sie den Mikrocode in den Controller, damit das Projekt das tut, wofür es entwickelt wurde. Wow - Was für viele Schritte!

Laden des Mikrocodes ????? Ja - wie Sie vielleicht wissen, ist ein Computer ohne Software ziemlich nutzlos. Alle unsere Uhren haben ein spezielles Programm, damit sie die Uhrzeit korrekt anzeigen können. Wenn ich die Karten für die Uhren baue, ist keine Software in den Mikrocontroller-Chip geladen (Der Chip ist zu klein, um ihn in einen normalen Programmierer zu stecken) - Bei diesem Vorgang wird die Software in den Chip gesteckt, damit die Uhr funktionieren kann.

In den alten Tagen (vor ein paar Wochen:-)) benutzte ich einen Laptop, einen USBTiny-Programmierer und die wunderbare AVRDUDE-Software, um die Boards zu programmieren. Ich saß in der Werkstatt an meinem Schreibtisch und gab den Programmierbefehl in den Computer ein. Halten Sie das Programmierkabel gegen die Uhr und drücken Sie ENTER. Der Computer würde dann die Platine pflichtgemäß für mich programmieren und ich wäre fertig. Der einzige Haken dabei ist, dass ich die ganze Zeit dort sitzen muss, also habe ich beschlossen, dass einer meiner Mitarbeiter es stattdessen tun kann … Leider stellte er fest, dass er das Kabel manchmal ein kleines Stück verschoben hat, was den Programmierjob veranlasste scheitern und er müsste von vorne anfangen. Wenn ein Lötfehler auftrat, musste der USB-Port meines Laptops heruntergefahren und der USBTiny entfernt und neu angeschlossen werden, um den USB-Port zurückzusetzen. Es musste einen besseren Weg geben !! Wie haben die Big Boys das gemacht?

Es stellt sich heraus, dass die Big Boys (TM) Roboter haben, die Kabel ruhig halten können, und funky Elektronik, die Tests durchführen kann. Da DougsWordClock.com nicht mehr über genügend Speicherplatz verfügt, war es unwahrscheinlich, dass ich bald dorthin komme. Was könnte ich also tun, um unser Leben leichter zu machen? Wie mein Freund Mikal sagen würde … "Baue eine Schablone!". (Anmerkung 1)

Also hier haben wir die Jig, die Doug gemacht hat! Obwohl es speziell für die Programmierung der DougsWordClock.com DeskClock-Karten entwickelt wurde, können die Konzepte hier auf jedes andere mikroprozessorbasierte Projekt erweitert werden, das Sie in großen Mengen erstellen. Lesen Sie also, wie ich das Problem gelöst habe, und sehen Sie, was Sie selbst machen können!

Lasst uns beginnen.

-------------------------------------------------------

Anmerkung 1 - Anfang 2000 kam mein bester Freund Mikal in meine Werkstatt, als ich ein Set Regale baute. Ich verlegte Verbindungen, was eine langweilige, sich wiederholende Aufgabe war. Mikal sagte: "Baue eine Vorrichtung!" Ich sagte "Zu hart - ich werde bald fertig sein" - Er sagte "Nee, lass es uns einfach tun" … wir taten es. Kurz gesagt, die Einfachheit, eine Vorrichtung zu bauen, zusammen mit der Tatsache, dass ich nicht daran gedacht habe, traf mein Ego hart … Ich entschied, dass es nutzlos war … (Go-Figur).. Irgendwann bin ich rausgerutscht es und beschlossen, einen Artikel zu schreiben, um der Welt zu beweisen, dass ich nicht nutzlos war - Also entwarf ich ein PIC-basiertes elektronisches Würfelprojekt. Es wurde sogar von der Zeitschrift Silicon Chip veröffentlicht - (http://archive.siliconchip.com.au/cms/A_102324/printArticle.html) Wahre Begebenheit und wahrscheinlich der Beginn für mich, wieder Mikrocontroller für Projekte und das Schreiben von Artikeln zu verwenden..:-)

Zubehör:

Schritt 1: Die DeskClock-Platine

Zuerst habe ich mit dem DeskClock Board angefangen. Als ich es entwarf, stellte ich einen 6-poligen Anschluss zur Verfügung, über den ein Programmierkabel angeschlossen werden konnte. Hier ist ein Foto der Platine mit den verschiedenen Anschlüssen.

Natürlich - wenn wir Komponenten auf die Platine laden, bestücken wir diese Anschlüsse nicht - sind sie einfach zum Programmieren und Testen da.

Die Seite auf diesem Foto auf der Rückseite der Platine im Gegensatz zur Vorderseite der Platine mit allen LEDs wird zuerst bestückt. während der Herstellung.

Ich habe diese Karte verwendet, um die Position und den Abstand der verschiedenen Verbindungen, mit denen ich mich verbinden wollte, sehr sorgfältig zu messen.

Nun - wie habe ich mich mit dem Board verbunden? Schön, dass du gefragt hast. Ich habe Pogo Pins benutzt!

Schritt 2: Pogo Pins und andere Hardware

Pogo-Pins werden von Profis verwendet, um temporäre Verbindungen zu Platinen herzustellen, wenn sie diese testen. Sie sind in vielen Größen und Formen erhältlich und verfügen über einen präzisen Federmechanismus, der sicherstellt, dass der Stift mit gleichmäßigem Druck gegen das Board gedrückt wird.

Ich habe meine Pogo-Stifte von einem Lieferanten bei eBay mitgebracht. Sie waren so günstig, dass ich glaube, sie sind jetzt lebenslang verfügbar. Derselbe Anbieter stellte mir auch die andere knifflige Hardware zur Verfügung, mit der ich die Platine festklemmen musste.

Hier sind ein paar Fotos der Stifte selbst, der raffinierten Platinenklemme und der Abstandshalter für die Gummiplatine.

Schritt 3: Messen und Herstellen der Halterung für die Platine

Also habe ich die Pogo Pins und andere Montageteile. Ich habe die Lochgrößen und Abstände sorgfältig gemessen und ein Layout für meinen Laserschneider erstellt. Ich hätte auch einfach Löcher mit einem Bohrer bohren können, aber der Cutter leistet einen wunderbar wiederholbaren Job.

Ich beschloss, die Löcher so zu platzieren, dass sich die Stifte nicht in der Mitte der Polsterlöcher befanden - dies stellte sicher, dass die Stifte fest mit der Platine in Kontakt kamen.

Ich habe auch Platz für die Klemme und einige Laschen für die Rückseite des Boards entworfen.

Bei der DeskClock-Platine ist eine 2,1-mm-Axialsteckdose auf der Platine installiert, für die ich ein Entlastungsloch vorsehen musste, und schließlich vergessen Sie nicht, dass die Gummilaschen die Rückseite der Platine tragen.

Schritt 4: Ein Himbeer-Pi für das Gehirn und ein 1,8-Zoll-Farbdisplay

Ich brauchte etwas, um meinen Laptop zu ersetzen, also entschied ich mich für den Raspberry PI.

Es kann einfach an der Basis des Programmiergeräts montiert werden und verwendet ein einfaches 26-poliges Kabel, das an die GPIO-Pins angeschlossen ist, um die DeskClock-Platine und das Display sowie den Kippschalter zu verbinden.

Die spezifische Pin-Konfiguration, die ich verwendet habe, ist nicht wichtig - Sie werden Ihre eigene verwenden, basierend auf Ihren Anforderungen.

Das verwendete Display ist ein 1,8 "-Display von Sainsmart - ich habe einen Haufen davon vor 6 Monaten mitgebracht, falls ich eine Verwendung für sie gefunden habe - dies war nur die Verwendung! Ich folgte Marks Blog http://marks-space.com/ 2012/11/23 / raspberrypi-tft / zur Neuerstellung eines Linux-Kernels zur Unterstützung der Anzeige.

Mark hatte recht - das Kompilieren des Kernels auf dem Pi war ein langsamer Prozess - ich ließ ihn über Nacht laufen.

Das Display zu verdrahten war einfach und ich hatte ziemlich schnell ein funktionierendes FrameBuffer2-Gerät.

Schritt 5: Eine Tasche für das 1,8 "-Display

Ich brauchte eine Möglichkeit, das LCD-Display an der Schablone zu befestigen, damit es nicht klapperte. Ich bin mit einer einfachen ID aufgetaucht - Bauen Sie einfach eine Winkeltasche dafür.

Es befindet sich an der Vorderseite des Geräts in einem Winkel, so dass der Benutzer das Display leicht sehen kann.

Das Display passt fest, sollte es jedoch herausrutschen, und die 3-mm-Nylonschraube hält an Ort und Stelle.

Es ist lustig, ich habe 20 Jahre lang vergessen, wie einfach es ist, mit Acryl zu arbeiten. Ich habe es im Laden in der Schule benutzt und es dann prompt vergessen. jetzt hat meine werkstatt eimer mit dem zeug:-)

Schritt 6: Machen Sie den Pi ein Programmierer

Der nächste Teil des Builds bestand darin, eine Software zu finden, mit der ich die Platine direkt mit dem Pi programmieren konnte. Ich habe mich für die Methode entschieden, die Steve Marple in seinem Blog erklärt hat:

In meinem Fall habe ich verschiedene GPIO-Pins verwendet, da das 1,8-Zoll-LCD-Display damit in Konflikt geriet.

Es gab ein lautes Quietschen der Freude, als ich entdeckte, dass der Pi richtig programmierte.

Einige Leute haben Level Shifter verwendet, um den PI zu schützen - ich habe es nicht getan und das Projekt funktioniert einfach.

Schritt 7: Ein Kippschalter zum Trennen der DeskClock-Platine

Ich beschloss, einen Kippschalter zu installieren, um die DeskClock-Platine von der Stromversorgung zu trennen und dem PI mitzuteilen, wann es Zeit war, zu starten.

Der Switch war ein DPDT, daher wurde eine Hälfte an +5 V und die andere Hälfte an einen nicht verwendeten GPIO-Pin angeschlossen.

Wenn der Schalter ausgeschaltet war, war der GPIO-Pin geerdet, und wenn er eingeschaltet war, war der GPIO-Pin hochgezogen. Ich habe einen 100-Ohm-Widerstand verwendet, um sicherzustellen, dass der GPIO-Pin gepuffert wurde, falls er als Ausgang festgelegt wurde.

Schritt 8: Software im Pi, um alles zusammenzubinden

Als nächstes habe ich mein erstes Python-Programm geschrieben.

Ich bin ein C-Programmierer - Glücklicherweise gibt es eine Menge Tutorials, die helfen können.

Ich habe den größten Teil des Codes aus einer Reihe von Beispielen erhalten, in denen jemand seinen PI als Wetteranzeige verwendet hat.

Hier ist der Code für das Python-Skript, das die Schaltfläche liest und die Anzeige steuert

#! / usr / bin / python

Pygame importieren

Import sys

Importzeit

von Zeit zu Zeit importieren

import os

Unterprozess importieren

Importieren Sie RPi.GPIO als GPIO

GPIO.setmode (GPIO.BCM)

#Stellen Sie das Framebuffer-Gerät auf den TFT ein

wenn nicht os.getenv ('SDL_FBDEV'):

os.putenv ('SDL_FBDEV', '/ dev / fb1')

os.putenv ('SDL_VIDEODRIVER', 'fbcon')

def displayTime ():

# Dient zum Anzeigen von Datum und Uhrzeit auf dem TFT

screen.fill ((0,0,0))

font = pygame.font.Font (Keine, 50)

now = time.localtime ()

zum Einstellen von ("% H:% M:% S", 60), ("% d% b", 10):

Zeitformat, dim = Einstellung

currentTimeLine = strftime (Zeitformat, jetzt)

text = font.render (currentTimeLine, 0, (0,250,150))

Surf = pygame.transform.rotate (Text, -90)

screen.blit (Surf, (dim, 20))

def displayText (Text, Größe, Linie, Farbe, ClearScreen):

# dient zum Anzeigen von Text auf dem TFT-Bildschirm

wenn clearScreen:

screen.fill ((0,0,0))

font = pygame.font.Font (Keine, Größe)

text = font.render (Text, 0, Farbe)

textRotated = pygame.transform.rotate (Text, -90)

textpos = textRotated.get_rect ()

textpos.centery = 80

if line == 1:

textpos.centerx = 90

screen.blit (textRotated, textpos)

elif line == 2:

textpos.centerx = 40

screen.blit (textRotated, textpos)

def main ():

globaler Bildschirm

pygame.init ()

Größe = Breite, Höhe = 128, 160

schwarz = 0,0,0

ROT = 255,0,0

GRÜN = 0,255,0

BLAU = 0,0,255

WEISS = 255,255,255

fail_cnt = 0

GPIO.setup (18, GPIO.IN)

pygame.mouse.set_visible (0)

screen = pygame.display.set_mode (Größe)

displayText ("DougsWordClock", 20, 1, GREEN, True)

displayText ("150mm Programer", 20, 2, BLAU, Falsch)

pygame.display.flip ()

Schlafenszeit (5)

displayText ("Firmware Rev", 20, 1, RED, True)

displayText ("20130520", 40, 2, WHITE, False)

pygame.display.flip ()

Schlafenszeit (5)

während wahr:

displayText ("Waiting", 30, 1, GREEN, True)

displayText ("Insert Board", 20, 2, BLAU, Falsch)

pygame.display.flip ()

if (GPIO.input (18)):

displayText ("Programming", 30, 1, (200,200,1), True)

displayText ("Wait 10 Sec", 30, 2, RED, False)

pygame.display.flip ()

Und hier ist das Shell-Skript, das die Programmierung tatsächlich ausführt:

#! / bin / sh

cd / home / pi

sudo avrdude -c gpio -p m169 -Ueffnung: w: 0xf5: m -Ueffnung: w: 0xDa: m -Ueffnung: w: 0xFF: m -Ueffnung: w: DeskClock-Prod.hex

Natürlich wird Ihre Vorrichtung eine andere Software haben:-)

Schritt 9: ES FUNKTIONIERT ALLES !!!

Schließlich hatte ich das Los verbunden, und es funktionierte ein Vergnügen!

Ich habe eine Menge darüber gelernt, wie man diese kleinen 1,8-Zoll-LCD-Displays ansteuert, und bin jetzt an der Reihe, Geräte für triviale Pi-Projekte zu entwickeln.

Wie auch immer - Hier sind ein paar Fotos davon in Aktion.

Genießen.

Wohin von hier?

Nun, das ist eine coole Frage. Im Moment programmiert der Programmierer einfach die Platine und überprüft, ob das Mikro korrekt geflasht wurde. Wir überprüfen den Betrieb der LEDs visuell (daher das helle Display). Im nächsten Schritt wird eine Funktion hinzugefügt, die mit dem Trittbrett kommunizieren kann, um die Genauigkeit der RTC-Chip / Kristall-Kombination zu überprüfen und den Zeitverlauf mit einem Internet zu vergleichen Standard. Das sollte nicht zu schwer sein …..:-)