woensdag 20 augustus 2014

7-segment programmer

Ik was al eventjes op de sukkel met mijn 7-segment potjes. Niet dat ze niet goed werken hoor, integendeel. Maar ook mijn versie 2.0 had geen goede mogelijkheid om de coördinaten te programmeren. Ik had eerst wel één klein drukknopje voorzien, maar dat bleek al lang onhandig en niet betrouwbaar te zijn.

Nu is het wel gelukt, er hoort nu zowaar een echte 'programmer' bij. Misschien moet ik de versienummer nog eens verhogen dan ;-)

Het principe is simpel: het 7-segment potje heeft een kleine connector onder de display zitten. Via die connector kan ik de microcontroller verbinden met de PC en de software opladen. Het probleem is dat de software meteen de coördinaten bevat die het potje aan de geocacher gaat tonen. Nu speelt dat voor mij niet zo'n rol, want ik kan programmeren wat ik wil. Maar als ik iemand anders potjes wil doorgeven, dan zou ik elke keer de coördinaten vast moeten programmeren voor de CO (cache owner) en hij zou die ook nooit meer kunnen aanpassen.

Dat is dus bij deze opgelost. Een tweede microcontroller met extra software 'praat' nu met het potje. Via een toetsenbord kan de CO de coördinaten ingeven die het potje daarna kan tonen in een bos.



Als je een nerd bent en/of gewoon wil snappen hoe dat nu werkt, kan je verder lezen ;-)

In principe is het heel simpel om twee microcontrollers met elkaar te laten spreken. Ze doen dat met een interne SPI bus, een seriële bus die enkele pinnetjes bezet houdt van de chip. Daar zat nu net het grote probleem: ik heb alle pinnetjes, inclusief die van de bus, al in gebruik om de display aan te sturen. Daarom moest ik iets anders verzinnen en dat had heel wat voeten in de aarde.

Ik moest een manier verzinnen om de twee microcontrollers met elkaar te laten praten (de eerste hangt aan het toetsenbord en de tweede aan de display) terwijl de tweede ook coördinaten toont. Zoiets kan nooit omdat die pinnetjes nu eenmaal bezet zijn, de display hangt eraan vast. Maar ik kan onze ogen een beetje voor de gek houden door de display eventjes te doven en dan een korte puls te sturen naar de eerste.

Om zoiets te doen zonder ongelukken, heb ik een logic analyzer nodig. Ik probeerde het eerst zonder, maar dat gaf ongelukken (lees: kortsluitingen). Ik moest immers een strakke timing aanhouden omdat de twee microcontrollers op dezelfde draadjes spanning gaan zetten. Als ze dat samen doen, ontploft de boel (bij wijze van spreken hé).

Omdat ik zo'n logic analyzer niet kan betalen, kocht ik deze Chinese versie van 9$. Het ding is geniaal in zijn eenvoud en toch extreem krachtig in prestaties. Er kunnen acht kanalen aangesloten worden die je kan bekijken op je PC met bijgeleverde software. Ik moest maar twee kanalen zien, dus dat volstaat.




Dit eerste scherm toont het signaal van twee pinnetjes die de chips dus delen. De pinnetjes worden in chip 2 dus ook gebruikt om de display te besturen. Af en toe schakelt de display uit en stuurt ie een korte puls naar chip 1. In de 'normale' toestand zie je een blokgolf op kanaal 0 & 1. Dat komt omdat de display niet op volle kracht werkt, hij wordt gedimd om de batterij te sparen. Af en toe komt dus die puls die je aan de rechterkant ziet verschijnen (het witte balkje met enkele extra pulsen).



Met de logic analyzer kan ik die puls erg vergroten en dan zie je dit. De puls wordt herkend door de eerste chip en die geeft nu een antwoord in vier stappen. Dat zijn de vier witte balkjes die volgen.



Zo één balkje ziet er zo uit. Kanaal 0 geeft 8 pulsen als kloksignaal en kanaal 1 heeft nu seriële data op de stijgende flank van de klok. Als je nu een nerd bent en snapt dat de lsb eerst werd verstuurd, dan weet je normaal dat hier het getal 8 werd verstuurd ;-)

In de praktijk wil dit zeggen dat chip 2 altijd korte pulsen uitstuurt tussen de coördinaten. Die zijn zo kort dat je ze niet ziet. Maar als je chip 1 verbindt met de kleine connector, ontstaat er een gesprek tussen de twee chips. Via het toetsenbord kan je intikken wat chip 1 moet vertellen aan chip 2. Die zal dat opslaan in zijn EEPROM geheugen zodat dat nooit verloren gaat.

Geen opmerkingen:

Een reactie plaatsen