En programmeringsjakke for våre DougsWordClock.com DeskClock Boards: 9 trinn

En programmeringsjakke for våre DougsWordClock.com DeskClock Boards: 9 trinn

Innholdsfortegnelse:

Anonim

Hei - Det har vært * aldre * siden jeg sendte inn noe til Instructables for å gi tilbake til samfunnet, så jeg trodde jeg ville dele hvordan jeg bygget vår nye programmeringsrigger for brettene som brukes i www.dougswordclock.com DeskClocks.

Du vet hvordan det går, du har skapt et fantastisk prosjekt og fortalt mange mennesker om det og sikkert nok tonnevis av mennesker vil ha en for seg selv. Du får kretskortene laget og bruker aldre på å bruke loddemasse og komponenter, reflow lodding og installere komponentene som ikke er reflow, så begynner du å laste inn mikrokoden i kontrolleren slik at prosjektet gjør det det er laget for å gjøre ….. Wow - Hva mange skritt!

Laster mikrokoden ????? Yep - Som du kanskje vet, er en datamaskin uten programvare ganske ubrukelig. Alle våre klokker har et spesielt program lastet inn i dem slik at de kan fortelle tiden riktig. Når jeg bygger brettene for klokken, er det ingen programvare lastet inn i microcontroller-brikken (Chippen er for liten til å sette inn i en normal programmerer) - Denne prosessen setter programvaren inn i brikken slik at klokken kan fungere.

I gamle dager (for noen uker siden:-)) brukte jeg en bærbar PC, en USBTiny programmerer og den fantastiske AVRDUDE-programvaren til å programmere styrene - jeg ville sitte ved skrivebordet mitt i verkstedet, skrive programmeringskommandoen inn i datamaskinen, Hold programmeringskabelen mot klokken og trykk ENTER. Datamaskinen ville da pliktlig programmere styret for meg og jeg ville bli gjort. Den eneste fangen med dette er at jeg må sitte der hele tiden, så jeg bestemte meg for at en av mine ansatte kunne gjøre det i stedet …. Dessverre fant han at noen ganger flyttet han kabelen til en liten bit som forårsaket programmeringsjobben til mislykkes og han må starte igjen. For å sammensatte problemet, hvis det oppstod en loddingsfeil, ville USB-porten på min bærbare datamaskin slås av og USBTiny måtte kobles fra og resetes for å tilbakestille USB-porten ….. Det måtte være en bedre måte! hvordan gjorde de store guttene det?

Det viser seg at Big Boys (tm) har roboter som er veldig gode til å holde kabler fortsatt og funky elektronikk som kan gjøre testing. Fordi DougsWordClock.com løper ut av min garrage, var jeg ikke sannsynlig å komme dit noen gang snart, så hva kunne jeg gjøre for å gjøre livet enklere? Som min venn Mikal ville si …. "Bygg en jig!". (Note1)

Så her har vi Jig som Doug laget! Selv om den er spesielt utviklet for å programmere DougsWordClock.com DeskClock-kortene, kan konseptene her bli utvidet til alle andre mikroprosessorbaserte prosjekter du bygger i bulk, så les om hvordan jeg løste problemet og se hva du kan gjøre selv!

La oss begynne.

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

Merknad 1 - I begynnelsen av 2000 dro min beste venn Mikal inn i verkstedet mitt da jeg bygde et sett med hyller - jeg var rutende ledd, noe som var en kjedelig repetitiv oppgave - Mikal sa "Bygg en Jig!" Jeg sa "For hardt - Jeg vil bli ferdig snart" - Han sa "Nahh, la oss bare gjøre det" …. Vi gjorde. Lang historie kort, enkelheten til å bygge en jig, kombinert med det faktum at jeg ikke tenkte på det, slo meg Ego hardt … Jeg bestemte meg for at det var ubrukelig …. (Gjøre figur).. Til slutt slo jeg ut av det og bestemte seg for å skrive en artikkel for å bevise for verden at jeg ikke var ubrukelig - Så jeg designet et PIC-basert elektronisk terningprosjekt. Det ble til og med publisert av Silicon Chip magazine - (http://archive.siliconchip.com.au/cms/A_102324/printArticle.html) Sann historie, og sannsynligvis begynner jeg å bryte tilbake til å bruke mikrokontroller for prosjekter og skrive artikler..:-)

forsyninger:

Trinn 1: DeskClock Board

Først begynte jeg med DeskClock-brettet. Da jeg laget det, ga jeg en 6-polet kontakt for å tillate en programmeringskabel tilkoblet - Her er et bilde av brettet, som viser de forskjellige kontaktene.

Selvfølgelig - når vi legger komponenter på brettet, fyller vi ikke disse kontaktene - de er bare der for programmering og testing.

Siden i dette bildet på baksiden av brettet, i motsetning til forsiden av brettet med alle lysdiodene - det blir befolket først. under produksjon.

Jeg brukte dette brettet til å nøye måle plasseringen og avstanden til de forskjellige tilkoblingene jeg ønsket å koble til.

Nå - hvordan koblet jeg meg til styret? Glad du spurte. jeg brukte Pogo pins!

Trinn 2: Pogo Pins og annen maskinvare

Pogo pins er det profesjonelle bruker til å lage midlertidige tilkoblinger til brett når de tester dem. De er tilgjengelige i mange størrelser og former, og har en presisjonsfjærbelastet mekanisme for å sikre at pinnen trykkes mot brettet med jevnt trykk.

Jeg tok min Pogo pins fra en leverandør på eBay - De var billige nok til at jeg tror jeg har en levetidsforsyning nå! Den samme leverandøren ga meg også den andre vanskelige maskinvaren som jeg trengte å bruke for å klemme brettet ned.

Her er et par bilder av pinnene selv, den nifty board klemmen, og gummi bordet avstand mounts.

Trinn 3: Måling og montering for styret

Så, jeg har Pogo Pins og annen montering maskinvare. Jeg har nøye målt hullstørrelsene og avstanden og laget en layout for min laserskriver. Jeg kunne også bare ha boret hull ved hjelp av en bor, men kutteren gjør en vakkert repeterbar jobb.

Jeg bestemte meg for å plassere hullene slik at pinnene ikke var i midten av putehullene - dette sørget for at pinnene kontaktet brettet fast.

Jeg har også designet plass til klemmen og noen faner på baksiden av brettet.

Når det gjelder DeskClock-brettet, er det en 2,1 mm aksial stikkontakt som er installert på brettet, at jeg måtte gi et lettelsehull for, og til slutt, ikke glem gummibæringene for å støtte det baksiden av brettet.

Trinn 4: En Raspberry Pi for hjernen og en 1,8 "fargeskjerm

Jeg trengte noe for å erstatte min laptop, så jeg bestemte meg for å bruke Raspberry PI.

Den monteres enkelt på undersiden av programmereren, og bruker en enkel 26-veis kabel koblet til GPIO-pinnene for å koble til DeskClock-bordet og skjermen og bryteren.

Den spesifikke pin-konfigurasjonen som jeg brukte, er ikke viktig - du vil bruke din egen basert på dine behov.

Skjermen som ble brukt er en 1,8 "skjerm fra Sainsmart - jeg tok en bunke av dem 6 måneder siden, hvis jeg fant en bruk for dem - dette var bare bruken! Jeg fulgte Marks blogg http://marks-space.com/ 2012/11/23 / raspberrypi-tft / for å gjenoppbygge en Linux-kjernen for å støtte skjermen.

Mark var riktig - kompilering av kjernen på Pi var en SLOW prosess - jeg lot det løpe over natten.

Koble opp skjermen var enkel, og ganske raskt hadde jeg en fungerende FrameBuffer2-enhet.

Trinn 5: En lomme for å holde 1,8-tommers skjerm

Jeg trengte en måte å montere LCD-skjermen på jiggen slik at den ikke rattet rundt. Jeg cam opp med enkle ides - Bare bygg en vinklet lomme for den.

Den sitter pent på forsiden av enheten, i en vinkel for brukeren for lett å se skjermen.

Skjermen passer godt, men i tilfelle det skal avgjøre, og 3 mm nylonskrue holder på plass.

Det er morsomt, jeg glemte i ca 20 år hvor lett Akryl er å jobbe med. Jeg brukte den i butikk på skolen, så glemte det umiddelbart. nå har verkstedet mitt ekko av ting:-)

Trinn 6: Gjøre Pi være en programmerer

Den neste delen av bygningen var å finne programvare som tillot meg å programmere styret direkte med Pi. Jeg bestemte meg for å bruke metoden som Steve Marple forklarte på sin blogg:

I mitt tilfelle brukte jeg forskjellige GPIO-pinner som 1,8-tommers LCD-skjerm i konflikt med dem.

Det var høyt gnist når jeg oppdaget at Pi var programmering riktig.

Noen har brukt nivå shifters for å beskytte PI - jeg gjorde det ikke og prosjektet virker bare.

Trinn 7: En vekslebryter for å fjerne strøm fra DeskClock Board

Jeg bestemte meg for å installere en byttebryter for å fjerne strøm fra DeskClock-brettet, og for å fortelle PI når det var på tide å starte.

Bryteren var en DPDT, så en halv koblet til + 5v og den andre halvdelen var koblet til en ubrukt GPIO-pin.

Når bryteren var slått av, ble GPIO-stiften jordet, og når den var på, ble GPIO-pinnen trukket høyt. Jeg brukte en 100 ohm motstand for å sikre at GPIO-pinnen ble bufferert dersom den ble satt til å være en utgang.

Trinn 8: Programvare i Pi til å knytte det hele Togehter

Deretter skrev jeg mitt første Python-program.

Jeg er en C-programmerer - Heldigvis er det spenner av opplæringsprogrammer for å hjelpe deg.

Jeg fikk mesteparten av koden fra et sett med prøver hvor noen brukte PI som værvarsel.

Her er koden for Python-skriptet som leser knappen og styrer skjermen

#! / Usr / bin / python

importere pygame

import sys

importtid

Fra tid til annen importtid

importere oss

importere delprosess

importer RPi.GPIO som GPIO

GPIO.setmode (GPIO.BCM)

# sett frambuffer enheten til TFT

hvis ikke os.getenv ('SDL_FBDEV'):

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

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

def displayTime ():

# brukes til å vise dato og klokkeslett til TFT

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

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

Nå = time.localtime ()

for innstilling i ("% H:% M:% S", 60), ("% d% b", 10):

timeformat, dim = innstilling

currentTimeLine = strftime (timeformat, nå)

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

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

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

def displayText (tekst, størrelse, linje, farge, clearScreen):

# brukes til å vise tekst på TFT-skjermen

hvis clearScreen:

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

font = pygame.font.Font (ingen størrelse)

text = font.render (tekst, 0, farge)

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

textpos = textRotated.get_rect ()

textpos.centery = 80

hvis linje == 1:

textpos.centerx = 90

screen.blit (textRotated, textpos)

elif linje == 2:

textpos.centerx = 40

screen.blit (textRotated, textpos)

def main ():

global skjerm

pygame.init ()

størrelse = bredde, høyde = 128, 160

svart = 0,0,0

RØD = 255,0,0

GREEN = 0,255,0

BLUE = 0,0,255

WHITE = 255,255,255

fail_cnt = 0

GPIO.setup (18, GPIO.IN)

pygame.mouse.set_visible (0)

skjerm = pygame.display.set_mode (størrelse)

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

displayText ("150mm Programer", 20, 2, BLUE, False)

pygame.display.flip ()

time.sleep (5)

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

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

pygame.display.flip ()

time.sleep (5)

mens det er sant:

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

displayText ("Insert Board", 20, 2, BLUE, False)

pygame.display.flip ()

hvis (GPIO.input (18)):

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

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

pygame.display.flip ()

Og her er shell-skriptet som faktisk gjør programmeringen:

#! / Bin / sh

cd / home / pi

sudo avrdude -c gpio -p m169 -Ufuse: w: 0xf5: m -U hfuse: w: 0xDa: m -U lfuse: w: 0xFF: m -Uflash: w: DeskClock-Prod.hex

Selvfølgelig vil din jig ha forskjellig programvare:-)

Trinn 9: Det fungerer ALLT!

Til slutt hadde jeg mye tilkoblet, og det virket en godbit!

Jeg lærte en haug om å kjøre disse lille 1,8 "LCD-skjermene, til det punktet hvor de nå er min tur til enheten for trivielle Pi-prosjekter.

Uansett - her er et par bilder av det i aksjon.

Nyt.

Hvor kommer fra her?

Vel, det er et kult spørsmål - For øyeblikket programmerer programmereren bare brettet og verifiserer at mikroen ble blinket riktig. Vi inspiserer LED-driften visuelt (det vil si den lyse skjermen). - Det neste trinnet er å legge til en funksjon som kan kommunisere med løpebrettet for å validere nøyaktigheten av RTC-brikken / krystallkombinasjonen, sammenligne tidsforsinkelsen med en internett standard. Det burde ikke være for vanskelig …..:-)