-
Notifications
You must be signed in to change notification settings - Fork 2
Opbouwinstructies
Opbouw-instructies Alternatieve besturingsprint voor de WoordKlok
De instructies voor de mechanische opbouw (LED's plaatsen, magneten plaatsen, enz), staan in de oorspronkelijke handleiding uit 2016: Handleiding. Tips:
- na het schilderen de gaatjes opnieuw boren met een boortje van 4.9mm
- plaats achter het kunststof scherm twee lagen bakpapier als diffuser.
Bouw de **pcb ** op. Begin met de lage componenten (weerstanden) en plaats steeds hogere componenten. Alle componenten komen aan de bovenzijde, dat is de zijde met de witte opdruk. Let op bij het plaatsen van de ic’s: Ze zijn niet allemaal hetzelfde georiënteerd. Let dus op de deuk in de behuizing van het ic, deze moet overeenkomen met de witte opdruk. De diode moet geplaatst worden zoals op de foto is te zien. Eventueel kun je voetjes gebruiken voor de ic’s maar die heb ik niet meegeleverd. Let op de hoogte: het geheel moet passen in de uitsparing in het houten frame. Dat moet op zich geen probleem zijn. Plaats de ESP01 nog niet!
Sluit een 6V gestabiliseerde DC [u]voedingsbron [/u]aan op de aansluitingen +6V en GND. Let op de polariteit. Meet met een universeelmeter of de spanning op het punt +5V op header JP2 ten opzichte van het punt GND 5V is. Mocht dit niet zo zijn, schakel dan onmiddellijk uit. Meet met een universeelmeter of de spanning op het punt 3V op header SV1 ten opzichte van het punt G (G=GND) 3,3V is.
Ik lever de ATMEGA voorgeprogrammeerd. Maar indien de ATMEGA nog niet is geprogrammeerd, doe dat dan nu d.m.v. een in-system programmer zoals hieronder beschreven. Verbind hiertoe de volgende aansluitingen op JP2: GND, MISO, MOSI, CLK, RESET met de ISP. Laad hiermee de hex file in de ATMEGA. Zet ook de lfuse.
Indien je een [u]oscillosoop [/u]bezit, kun je nu de signalen “Columns” meten. Verbind deze via een weerstand van 1k naar GND. Hier horen blokgolven op te staan met een frequentie van ongeveer 70Hz en een duty cycle van ongeveer 6%. Op de rows zul je geen signaal meten tenzij je deze via een weerstand met +6V verbindt. Bezit je geen oscilloscoop, ga dan naar http://www.marktplaats.nl en schaf zo’n ding aan voor enkele tientjes.
Met ingang van december 2018 is de software voor de ESP01 uitgebreid met WifiManager en lever ik de ESP01 voorgeprogrammeerd. Het is niet langer nodig om de ESP01 opnieuw te programmeren om ssid(naam) en wachtwoord van je lokale wifi netwerk erin te zetten. WifiManager
Plaats de ESP01 op de pcb. Liefst met een voetje als dat past qua hoogte binnen het houten frame. Op de allereerste versie van de print ontbraken twee weerstanden van 10k op de pcb. Voeg deze weerstanden op de achterkant van de pcb toe. Het gaat om twee weerstand tussen de aansluitingen van de ESP01, namelijk een weerstand tussen GPIO0 en VCC (3,3V) en een weerstand tussen GPIO2 en VCC (3,3V). Zie de ESP01 cheat sheet voor de aansluitingen. Op de huidige prints is dit niet van toepassing, daar zitten de weerstanden gewoon op.
TIP voor het plaatsen van de ESP01 op een voetje. Je zult merken dat als je de ESP01 op het voetje plaatst, het geheel eigenlijk te dik is om netjes te passen binnen het frame. Je kunt dit als volgt oplossen. Haal de ESP01 uit het voetje. Je ziet dat de 8-polige aansluitplug van de ESP01 bestaat uit 8 koperen pennetjes in een stukje plastic. Verwijder het plastic met een schroevendraaier of een mes o.i.d. Verkort daarna de metalen pennetjes met een kniptang allemaal een stukje (3mm). Plaats de ESP01 weer op de print. Het geheel is nu 3mm minder dik en past beter in het houten frame. N.B. probeer niet het plastic te verwijderen van de (female) connector op de besturingsprint, dat gaat niet.
Plaats de pcb in het houten frame en zet hem met twee moertjes vast. De twee koperen boutjes aan de linkerkant blijven ongebruikt. Laat deze wel zitten (met de moertjes erop) i.v.m. de gewichtsverdeling (anders gaat je klok misschien scheef hangen). LED’s aansluiten zoals getoond in het word-document. Let op de aansluitingen van de hoek-LED’s. Er blijft één ongebruikte “row” over (voor uitbreidingen?). LDR aansluiten op de aansluitingen “sensor”.
Sluit een 6V gestabiliseerde DC voedingsbron aan op de aansluitingen +6V en GND. Let op de polariteit.
De klok geeft nu (na een animatie) weer “[u]het is twaalf uur[/u]”. Binnen enkele seconden (maximaal 1 minuut) moet hij de juiste tijd weergeven. Als dit niet gebeurt, de signalen op TXD en RXD monitoren met de USB-naar-serieel-TTL adapter/ESP01 adapter. Gebruik alleen de RXD aansluiting van de USB-naar-serieel-TTL adapter en verbind deze beurtelings met de TXD en de RXD aansluitingen van SV1.
Als de klok op twee uur blijft staan en/of superlangzaam loopt, dan loopt de ATMEGA mogelijk niet op de juiste cpu-snelheid. Dit kan veroorzaakt worden door het onjuist programmeren van de fuse bits van de ATMEGA, met name lfuse. Dan zou de oscillator van de ATMEGA wel eens niet middels het kristal van 16MHz werken, maar op de interne RC-oscillator op 1 of 8 MHz. Dan functioneert de communicatie met de ESP01 niet (die communicatie loopt dan ook 2 of 8 keer te langzaam).
Firmware voor de ATMEGA compileren en flashen (Ik lever de ATMEGA voorgeprogrammeerd, dus dit mag je overslaan) Download Atmel Studio van https://www.microchip.com/mplab/avr-support/atmel-studio-7 en installeer het. Creëer een nieuw project genaamd WoordKlokCharles. Kies voor de programmeertaal c en voor de microcontroller ATMEGA88 of ATMEGA328 (afhankelijk van welke je wilt gebruiken). Er verschijnt een template met enkele regels c-code. Vervang deze code door gedownloade c-code van de WoordKlokCharles. Compileer het project. Indien er geen fouten zijn, ontstaat er een hex-file in de Debug directory onder de directory van het project.
Indien je een programmer bezit waar je de ATMEGA in kunt steken, plaats dan de ATMEGA daarin en programmeer hem. Dit kan ook met een Arduino. Programmeren kan vanuit Atmel Studio of d.m.v. het programma avrdude. Het programmeren kan ook later nog gebeuren d.m.v. een in-system-programmer (ISP).
Avrdude http://savannah.nongnu.org/projects/avrdude/ Voor het gebruik van avrdude/usbasp moet je meen ik een niet gesignede driver gebruiken. Windows 10/11 verzet zich tegen het gebruik van ongesignede drivers maar met enige moeite is dat wel te doen (zie bijv. https://www.howtogeek.com/167723/how-to-disable-driver-signature-verification-on-64-bit-windows-8.1-so-that-you-can-install-unsigned-drivers/). Je kunt ook een Arduino gebruiken als ISP, dit is bijv. beschreven op https://www.arduino.cc/en/Tutorial/ArduinoISP
Voorbeeld van het programmeren met avrdude, een usbasp programmer en een DOS-box: avrdude -c usbasp -p ATMEGA328 --B 8 -U flash:w:WoordKlokCharles.hex Achter -c moet je programmer staan, dat kan ook bijv. stk500v2 zijn Achter -p moet je type ATMEGA staan. Opmerking. Als je de ATMEGA88pa hebt, dan is die standaard niet ondersteund door avrdude (althans niet door de versie die ik hier al jaren op mijn pc heb staan). Deze lijkt echter erg op de ATMEGA88, alleen de signature is anders. Dat kun je op twee manieren oplossen: Voeg het part ATMEGA88PA toe aan C:\Program Files (x86)\WinAVR\bin\avrdude.conf Kopieer het blok ATMEGA88 en pas de id en desc aan (PA toevoegen) en de signature (moet zijn: 0x1e 0x93 0x0f;). De andere manier is: gebruik -p ATMEGA88 -F -F betekent: override signature check.
Programmeer de ATMEGA voor het gebruik van een [u]kristaloscillator[/u]. Uit de fabriek runt de ATMEGA namelijk op een interne RC-oscialltor en die is voor ons doel niet nauwkeurig genoeg. Dit gebeurt door het zetten van de zogetehen lfuse (low fuse). De opdracht luidt (voorbeeld een ATMEGA328P en usbasp): avrdude -p m328p -c usbasp -B 8 -U lfuse:w:"0xF7":m
Het uitlezen van de lfuse kan met: avrdude -p m328p -c usbasp -B 8 -U lfuse:r:"con:":i Voorbeeld output hiervan: avrdude: writing output file "con:" :010000006699 :00000001FF De lfuse is in dit geval 0x66 (99 is de CRC controle). Dat zou F7 moeten worden.
Achteraf wijzigen van de firmware en van de fuse bits in de ATMEGA gaat via JP2. Dit heb ik getest met avrdude en usbasp en het werkt.
Opmerking: als je zelf de onderdelen inkoopt, koop dan geen ATMEGA328 die al is geflasht met Arduino. Deze bevatten een bootloader die we niet gebruiken in de woordklok. Bovendien zijn deze beschermd tegen herprogrammeren. Die bescherming is er wel weer af te halen, maar het is onnodig gedoe.
De software voor de ESP01 compileren en flashen Firmware voor de ESP01 compileren. Ik lever de ESP01 voorgeprogrammeerd, dus dit mag je overslaan. Download en installeer de Arduino IDE van http://www.arduino.cc. Ga naar Voorkeuren/preferences en voor de volgende url in bij additional board managers: http://arduino.esp8266.com/stable/package_esp8266com_index.json Ga naar Tools.hulpmiddelen->board->board manager/bordenbeheerder. Zoek naar de esp8266 by ESP8266 Community versie 2.4.1 Maak een soldeerverbinding op de ESP01 adapter tussen GND en GPIO0. Hiermee zet je de ESP01 in programmeer-mode. (Handig: zet er een jumpertje op, dan kun je de verbinding naar believen in programmeermode of run-mode zetten). Prik de ESP01 in de ESP01 adapter en sluit deze aan op een vrije usb poort. Start Apparaatbeheer en noteer de toegewezen COM-poort.
Start de Arduino-IDE en selecteer board: Generic ESP8266 Module. Zet de COM-poort. Download de software voor de ESP01 en plaats deze in het arduino venster. Vul de gegevens van jouw eigen wifi netwerk in: SSID en wachtwoord.
Kies: Schets -> Bibliotheek gebruiken -> ESP8266Wifi, Time en Wifi. Als deze bibliotheken nog niet in het menu voorkomen, moet je ze eerst toevoegen met de bibliotheekbeheerder. Kies de volgende library's: ESP8266Wifi by Ivan Grokhotkov Time by Michael Margolis
Compileer. Upload. Start vanuit Arduino het terminal-venster en controleer dat er data binnenkomen. Controleer a.d.h.v. de logging of de wifi verbinding tot stand komt, of de verbinding met de network time protocol (ntp) server tot stand komt, en of hij de tijd correct ophaalt. Deze is in UTC, dus kan 1 of 2 uur afwijken van de lokale tijd in Europa. De correctie naar lokale tijd vindt plaats in de ATMEGA. Voor de bepaling zomer/wintertijd is ook de datum nodig, dus ook die wordt doorgegeven van ESP01 naar ATMEGA.
Opmerking: als je ESP01 en adapter inprikt met de GPIO0-GND doorverbonden, dan start de ESP01 in program mode. Na het programmeren staat hij in run-mode. Unplug je nu het geheel en plug je weer in, dan staat de ESP01 weer in program-mode en zal dus geen output tonen in het terminal-venster. Wil je dit wel, dan moet je GPIO0-GND losmaken en daarna inpluggen. Dan start de ESP01 in run-mode. Zie verder de ESP01 cheat sheet https://adlerweb.deviantart.com/art/ESP8266-ESP-01-Module-Pinout-Diagram-Cheat-Sheet-575950438 .
Gebruik de ESP01 adapter met de gele connector (dus niet de ESP01 zelf) als [u]USB-naar-serieel-TTL[/u] omzetter (of gebruik een andere USB-naar-serieel-TTL adapter). Verbind de GND, RX(D) en TX(D) aansluiting van de adapter met de corresponderende aansluitingen op SV1. Voor de aansluitingen van de ESP01 en de adapter, zie de ESP01 cheat sheet https://adlerweb.deviantart.com/art/ESP8266-ESP-01-Module-Pinout-Diagram-Cheat-Sheet-575950438 Verbind de USB-aansluiting met een PC. Start “Apparaatbeheer” op de pc (type windows-toets en type: “apparaatbeheer”) en noteer het com-poortnummer, bijvoorbeeld COM2. Start een terminal-emulator, zoals PUTTY. Stel deze in op “serieel”, 15200b/s en verbind deze met de genoteerde com-poort. Op het scherm moeten nu allerlei leesbare meldingen verschijnen. Als dat niet zo is, verwissel dan RXD en TXD.
Achteraf wijzigen van de firmware in de ESP01 gaat het makkelijkst als deze in een voetje is gestoken. De ESP01 kan dan worden uitgenomen en met behulp van de ESP01 adapter worden geprogrammeerd. Het nadeel van deze oplossing is dat het geheel daarmee dikker wordt dan wat past in de behuizing. De ESP01 steekt dan als het ware aan de achterkant een beetje daaruit. Daarom is er wat voor te zeggen om de ESP01 zonder voetje op de moederprint te solderen. Het is dan nog steeds mogelijk om achteraf de ESP01 te programmeren. Hoe dat moet, staat beschreven in Achteraf programmeren ESP01.