I detta tredje inlägg introducerar jag displayerna och hur de skall styras. Det blir lite tekniskt så om det är något som är oklart är det bara att fråga på i kommentarerna. Jag har förenklat beskrivning något, så om någon vill ha fler detaljer är det också bara att fråga på 🙂

Displayerna

Tiden kommer att visas på fyra stora 7-segmentsdisplayer. De är helt mekaniska – varje segment är anslutet till en liten tvålägesaktuator. Om man lägger på en spänning på mellan 12-15 volt åt ena hållet vrider sig segmentet åt ena hållet och vice versa. Det är alltså polariteten på den pålagda spänningen som avgör hur segmentet vrids. Det är dessutom så att det räcker med en puls för att vrida segmentet – de behåller sedan sitt läge.

CIMG1018

Bilden ovan visar en hel display – man ser elektromekaniken på segmenten som inte är utfällda.

Närbild på vridmekaniken.

Styrning av displayerna

Det enklaste sättet att vrida displayerna på hade varit att kontrollera när en siffra skall ändras och då vrida alla sju segmenten till rätt läge. Detta innebär dock att vissa segment kommer att få pulser i onödan – en ändring från 8 till 9 innebär t.ex. bara att ett enda segment vrids.

Min implementation tar hänsyn till detta genom att använda ”bör/är-värdesstyrning”. Det innebär att man håller koll på hur displayerna är inställda just nu (ärvärdet) och jämför kontinuerligt detta med önskat läge (börvärdet). Om någonting har ändrats skickas det ut en puls för att vrida ett segment. Detta gör att ärvärdet tar ett steg närmare börvärdet. Sedan fortsätter scanningen. Detta gör dessutom att uppdateringen av displayerna är helt fristående från resten av beteendet vilket ger en fin uppdelning av funktionaliteten. Allt jag behöver göra är att ge min displaydrivare en börvärde så löser sig allt automatiskt. Vi kan ta ett enkelt exempel:

Just nu ligger siffran ”1” ute. Vi antar att det representeras av mönstret ”0000011”. Sedan vill jag lägga ut siffran ”2”. Vi antar att det representeras av mönstret ”1110001”. Precis i ögonblicket som siffran ”2” bestäms är då ärvärdet ”0000011” och börvärdet ”1110001”. Om vi antar att scanningen börjar på MSB (biten längst till vänster) kommer displayen att gå igenom lägena ”1000011”, ”1100011”, ”1110011” för att slutligen hamna på ”1110001”. Mellan varje läge ändras endast en bit, från ärvärdet till börvärdet.

 

Fysiskt gränssnitt

Det är rätt irriterande att displayerna vill ha spänning åt olika håll – som digitalkonstruktör tycker jag inte om negativa spänningar överhuvudtaget. Min lösning består av ett gäng drivkretsar som består av ett gäng drivtransistorer. Genom att använda dubbla sådana överallt går det enkelt att lägga på ”negativ spänning” genom att helt enkelt lägga på 12V åt fel håll.

Kretsarna som jag använder är TD62783AP respektive ULN2801 – köpta på elfa. De skiljer sig lite från vanliga buffertkrestar. För den elektronikintresserade kan jag meddela att det rör sig om darlingtondrivare. En normal buffert (t.ex. 74AC245) ger ut hög spänning om inspänningen är hög och låg spänning om inspänningen är låg. ULN2801 jordar utgången om ingången är hög, annars hä#mce_temp_url#nger ledaren bara i luften. TD62783AP fungerar på samma sätt fast tvärt om – om ingången är hög läggs hög spänning (15V) ut, annars hänger ledaren i luften. Genom att använda båda typerna av kretsar kan jag styra spänningen hur jag vill.

Varje display har en gemensam anslutning och 14 segmentanslutningar. 7 av segmentanslutningarna används för att vrida segmentet åt ena hållet, de övriga 7 för att vrida åt det andra hållet. Genom att antingen lägga 12V eller jord på commonpinnen aktiveras segmentet så att man genom att lägga lämplig spänning på någon av de 14 segmentanslutningarna kan vrida ett segment.

CIMG1027

Detta gör att det behövs totalt 14 segmentutgångar och två select-utgångar (en med 12v och en med jord) per display. För fyra displayer behöver jag alltså 14+4*2=22 utgångar. Det gör att jag klarar mig med 2 drivkretsar av varje slag eftersom de innehåller 8 drivare var.

CIMG1017

Bilderna ovanför visar uppkopplingen av gränssnittet – ganska rörigt och en massa sladdar överallt. Det är bara anslutet en display här, jag vill få det att fungera innan jag börjar med flera displayer. I nästa inlägg kan jag förhoppningsvis visa lite bilder och någon film på ett fungerande segment – men det blir för mycket för det här inlägget. Dessutom har jag inte riktigt fått allt att fungera som det ska än heller 🙂

4
Leave a Reply

avatar
2 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Martin LHenrik BerntssonAnton Karmehed Recent comment authors
  Subscribe  
senaste äldsta flest röster
Notifiera vid
Anton Karmehed
Admin

Lite kul att se mekanisk teknik parad med elektronik. Först när du berättade om klockan förstod jag det som att du tänkte köra en digitaldisplay, men detta blir ju bra mycket tydligare och omständligare så förstår att du valde detta. 😉

Det är något speciellt med hemmasnodda kretskort och kabelhärvor! Ser fram emot att se videon också på displayen in action.

Henrik Berntsson
Admin

gillar den mekaniska visningen skarpt det är lite NASA raketnedräkning över dem 😀 en bild på vilka segment som är i ordningen kanske hade förtydligat lite till exemplet med segmentens sifferkombinationer? Vore coolt om man kunde ha en röst som säger "Game over minus 5 minutes" eller nåt 8)

Martin L
Gäst
Martin L

Hmm, kanske skulle bygga en modellraket bara för att kunna räkna ner med klockan? Får bli nästnästa projek ti sådana fall 🙂

Jag hade tänkt att få in lite ljudeffekter, men tiden räcker nog inte till. Den måste ju förbättras till nästa år också!