Driva 2x3 7-segmentsdisplayer?

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
EPG
Tidigare pellebeefmaster
Inlägg: 395
Blev medlem: 28 mars 2005, 20:27:58
Ort: Oskarshamn
Kontakt:

Driva 2x3 7-segmentsdisplayer?

Inlägg av EPG »

Jag liksom mina föräldrar är anställda på Oskarshamns kärnkraftverk (OKG), jag är instrumentare och min pappa har varit anställd i driftorganisationen på O2 sedan innan jag ens var född, de senaste åren har han dock varit dagtidsgående. Mamma har en annan tjänst och har varit anställd sedan 1980-talet hon med men inte riktigt lika länge som farsan.
Sedan i somras så är det numera bara O3 som är i drift på halvön och därför har man monterat ned lite effekttavlor lite här och var på bygget (eller rivningskåken rättare sagt) eftersom att effekttavlor som visar noll megawatt är ändå ganska meningslöst.

En sådan effekttavla la jag beslag på :wink:
DSC_0187.JPG
Min tanke är att få igång den så att den visar siffror igen och styra den med arduino eller liknande.
Dessutom vill jag att siffrorna är lite "levande" så att det ser verklighetstroget ut och inte siffrorna ligger helt statiskt på samma värde hela tiden, i alla fall den sista siffran så att t.ex O1 pendlar mellan 485 och 495 men oftast ligger runt 490.

Tanken är att ge den till farsan i present så småningom sen.

Det är alltså 2x3 7-segmentsdisplayer jag vill driva, varje segment består av 4st seriekopplade lysdioder och de drivs via en CA3081 som jag gissar funkar som förstärkare så att dioderna drivs via transistorutgångar. CA3081:an styrs i sin tur av en MC14511BCP.

Jag googlade fram ett datablad på Motorolakretsen och såg att den har en utgång för varje segment (a,b,c,d,e,f,g) samt ett gäng ingångar (A,B,C,D,LT,LE,BI).
Detta tycker jag verkar lite onödigt krångligt och tycker det vore enklare om man bara kunde styra displayen med fyra bitar (alltså A,B,C,D) och skippa LT,BI,LE.
Jag googlade lite och hittade en krets som heter "DM7446" som verkar funka precis så, är denna krets lämplig att använda sig av eller finns det något ännu bättre? 7446:an verkar ju lite halvt ovanlig men fördelen är att pinlayouten på utgångarna a - g ligger på samma ben som på MC14511BCP:an.

Med 2x3 7-segmentsdisplayer och varje display måste drivas av 4 bitar så behöver jag alltså en arduino med totalt 24 utgångar. Vilken bör jag välja?
Är det kanske billigare med två stycken arduino där var och en har 12 utgångar?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av EPG 5 oktober 2017, 09:54:20, redigerad totalt 1 gång.
cosmox
EF Sponsor
Inlägg: 3854
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av cosmox »

Kul present :)
Du kan också ta en MAX7219 så behöver du bara fem trådar till displayen :)

https://datasheets.maximintegrated.com/ ... AX7221.pdf
EPG
Tidigare pellebeefmaster
Inlägg: 395
Blev medlem: 28 mars 2005, 20:27:58
Ort: Oskarshamn
Kontakt:

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av EPG »

Igår innan jag gick och la mig så var det någon som hade svarat i tråden och tyckte att jag kunde multiplexa signalen direkt från Arduinot, på så sätt behövde jag bara använda mig av fyra utgångar för signalen och en aktiveringssignal för varje displayblock, alltså totalt 10 utgångar. Vad tog det inlägget vägen?

Cosmox:
Den där drivkretsen du länkar till verkar ju ha 24 ben, jag tänkte mig en krets som passar rakt uppåner i samma position som MC14511:an (som har 16 ben).
Men du kanske menar att jag ska ha den centralt placerad för styrningen istället för direkt från ett Arduino?
För jag förstår inte riktigt hur jag styr själva MAX7219:en nämligen, den verkar ju vara en egen liten CPU.
Vad för språk vill denna ha på ingången?
Användarvisningsbild
Icecap
Inlägg: 26093
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av Icecap »

"Onödigt krångligt" är det samma som "jag vill ha mycket mer krångel" i detta fall.

Men hur har du tänkt dig att styre den "slumpmässiga" visningen?

Jag vet hur jag skulle göra men hur har du tänkt dig det?

LE kan "låsa" utläsningen, ämnar du inte att använda den är det bara att koppla den till GND permanent.
BI är "Blanking Input", vill du inte släcka siffrorna lämnar du den kopplat till VDD permanent.
LT ("Lamp Test") låter du vara kopplat till VDD permanent.

Nu har du alltså ett färdigt system som drivs med 4 databit per siffra - som du efterfrågar.

Om detta är för mycket använder du LE (en per siffra) och kopplar alla A-ledare till alla displayen ihop, precis som med B, C & D. Då behöver du A, B, C & D + 6 st LE.

Är även detta för mycket också tar du en 1-av-8 eller 1-av-16 dekoder till att driva de 6 st LE, då behöver du totalt 7 databit för att styra rubbet.
EPG
Tidigare pellebeefmaster
Inlägg: 395
Blev medlem: 28 mars 2005, 20:27:58
Ort: Oskarshamn
Kontakt:

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av EPG »

Jag hade nog tänkt att mjukvaran ska sköta om den slumpmässiga visningen.
Frågan är bara hur man får till just "slumpmässigheten", det lär ju vara enklare att skriva ett program som följer en viss cykel.

Du får gärna förklara hur du hade löst det :)

Okej jag ger mig, jag hittade en annan sanningstabell för IC:n igår som tydligen var fel. Den här stämmer ju bättre och fungerar precis som jag menar så då behöver jag ju inte byta ut nåt:
MC14511_sanningstabell.png
http://html.alldatasheet.com/html-pdf/1 ... 11BCP.html
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av lillahuset »

Jag har ingen aning om hur väl biblioteken till Arduino följer ANSI men jag antar att du har funktionen rand() i stdlib.h. Använd den.
Användarvisningsbild
Icecap
Inlägg: 26093
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av Icecap »

Jag hade tagit en PIC18F... med pinnar nog till att driva de 6 st BCD dataledningar. Alltså 24 ledningar.

Slumpen är enkelt att styra, ta två primtal och ha en variabel som sparas. För varje slumptal som behövs multiplicerar man variabeln med ena primtal och adderar det andra efteråt.

Då kan man plocka ut det antal bits man behöver eller skaler resultatet efter behov och adderar vad man vill.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43129
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av sodjan »

Det kanske inte ska hoppa slumpvis/momentant mellan 485 och 495
utan mer glida mellan värdena. Men man kan ju slumpa fram själva
ändringen +/1 ett steg med några sekunders intervall och låta det
justera den aktuella värdet...
EPG
Tidigare pellebeefmaster
Inlägg: 395
Blev medlem: 28 mars 2005, 20:27:58
Ort: Oskarshamn
Kontakt:

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av EPG »

lillahuset skrev:Jag har ingen aning om hur väl biblioteken till Arduino följer ANSI men jag antar att du har funktionen rand() i stdlib.h. Använd den.
Det låter som ett smart sätt, det verkar som att funktionen finns men kommandot skrivas snarare såhär: https://www.arduino.cc/en/Reference/Random https://www.arduino.cc/en/Reference/RandomSeed.
Icecap skrev:Jag hade tagit en PIC18F... med pinnar nog till att driva de 6 st BCD dataledningar. Alltså 24 ledningar.

Slumpen är enkelt att styra, ta två primtal och ha en variabel som sparas. För varje slumptal som behövs multiplicerar man variabeln med ena primtal och adderar det andra efteråt.

Då kan man plocka ut det antal bits man behöver eller skaler resultatet efter behov och adderar vad man vill.
Jag känner att logik är mer min starka sida än vad matematik är men jag ska forska i det där och se om jag blir något klokare.
(Jag är matematiskt efterbliven men Google underlättar om man ska tala klarspråk)
sodjan skrev: Det kanske inte ska hoppa slumpvis/momentant mellan 485 och 495
utan mer glida mellan värdena. Men man kan ju slumpa fram själva
ändringen +/1 ett steg med några sekunders intervall och låta det
justera den aktuella värdet...
Jo självklart är det så, i ett kärnkraftverk (kokarreaktor) har man ju tre reglerloopar: En för nivåregleringen som regleras med matarvattenpumparna, en för tryckhållningen som regleras med pådragsventilen till turbinen och en för effekten som regleras med huvudcirkulationspumparna. All typ av reglering gör ju att det svänger lite som en sinuskurva och detta gör ju att effekten inte ligger riktigt som en rak linje hela tiden. Hade det bara funnits en reglerloop så hade förmodligen effekten också svängt som en sinuskurva men eftersom att det finns tre olika och alla med helt olika svarstider så svänger ju effekten lite oregelbundet. Ibland tar de ut varann, ibland plussar de på varann och ibland plussar de på varann fast inverterat. Sen påverkar ju även styrstavarnas positioner, temperaturen i havet och hur mycket klyvbart material som finns kvar i bränslet också effekten men det är ju överkurs. Men självklart så ska inte värdet på displayen ändras momentant flera MW.

Jag hittade föresten det försvunna inlägget och gjorde blixtsnabbt en skärmdump innan det försvinner igen.
Lägger in det mest för min egen skull som inspiration:
platis.PNG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av lillahuset »

Nja, i ANSI C99 stdlib.h är det rand() som gäller, random() är definierad i en POSIX standard.
Om slumpmässigheten inte är så petig brukar rand() duga, som dessutom ingår i ANSI C99 och därför är portablare. Om man behöver bättre slumptal kan man använda random().
Oavsett vilken du använder behöver du inte krångla till det med att anropa srand()/srandom() eftersom det knappast spelar någon roll om slumpsekvensen är lika varje gång du startar displayen.
EPG
Tidigare pellebeefmaster
Inlägg: 395
Blev medlem: 28 mars 2005, 20:27:58
Ort: Oskarshamn
Kontakt:

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av EPG »

Är cykeltiden så pass snabb att man kan styra siffrorna med enbart 4 + 6 utgångar (A, B, C, D . 6st LE) utan problem eller är det risk att siffrorna börja flimmra?
Bör man kanske montera en liten kondensator på några få microfarad (eller ännu mindre) på varje "segment" för att slippa detta?
Användarvisningsbild
Icecap
Inlägg: 26093
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av Icecap »

Kondingar kan du skrota direkt!

Man multiplexar siffrarna vid att tända den valda siffra (position 1 - 2 - 3). Med en timer-interrupt växlar man sedan position med en hastighet av minst 150 Hz, men gärna 300 Hz.

Jag brukar spara värdet i några variabler och låta timer-ISR'n klarar scanningen. Då kan main-Main loop'en ändra värden som den vill.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av lillahuset »

Som vanligt har Icecap rätt. :)
EPG
Tidigare pellebeefmaster
Inlägg: 395
Blev medlem: 28 mars 2005, 20:27:58
Ort: Oskarshamn
Kontakt:

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av EPG »

Jepp, forum med medlemmar som har bra kunskaper i ämnet är guld värda för oss hemmapulare! :) :tumupp:
EPG
Tidigare pellebeefmaster
Inlägg: 395
Blev medlem: 28 mars 2005, 20:27:58
Ort: Oskarshamn
Kontakt:

Re: Driva 2x3 7-segmentsdisplayer?

Inlägg av EPG »

Nu hittade jag det här gamla projektet igen och började kolla upp det lite mer än sist, har glömt vad jag tog reda på sist och för stunden har jag inte heller hunnit läsa igenom tråden för att uppdatera mig så det kanske blir lite goddag yxskaft nu men det bjur jag på!

Det är alltså 2x3st 7-segments displayer.
Allt drivs på 12VDC.
De fungerar enligt common anode principen fast inte som tänder segmenten direkt utan genom först en CD4069UBE som inverterar signalen och sedan en MC14511BCP som gör om A-B-C-D till 7 olika segment.
För att tända siffrorna så har varje siffra 4 ingångar (A, B, C & D).
Dessa ingångar fungerar binärt alltså om man ger A jordpotential så visar displayen "1", jordar man B så visar den "2", både A plus B ger "3" osv.

Om man inte jordar någon alls så visar den "noll". Jag gissar att detta eventuellt skulle kunna innebära ett problem om man skulle vilja multiplexa signalen som jag såg något om när jag snabbt skummade igenom tråden. För att multiplexern ska funka så menar jag att det hade varit vettigt att ha en aktiveringssignal också så att displayen i vanliga fall är helt svart och inte visar någon siffra före "enable" eller vad man nu ska kalla den är aktiv om ni förstår vad jag menar.

Hade det funkat med en multiplexer så hade man ju klarat sig med 5 utgångar menar jag men det kanske skulle gå att bygga om elektroniken?
Skriv svar