MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Hej!
Jag har lödigt ihop 4 stycken katod 7-segment och en MAX7219 drivare och fått det fungera med ett bibliotek med Arduino. Nu tänkte jag skapa eget själv.
Som tur så behöver jag bara fokusera på CS, MOSI och CLK då MISO är inte relevant här för jag pratar bara med MAX7219 bara en gång.
I databladet så står det att man ska skicka 16-bitar per 7-segment.
D0 till D7 är det som ska visas på 7-segmentet och D7 är den lilla punkten.
D8 till D11 är adressen.
Men helt plötsligt så står det X på D12 till D15. Jag vet att D12 till D15 är "don't care" bits. Men är X typ som en variabler som innehåller något annat från en tabell ifrån databladet? För det står X lite överallt i tabellerna.
Det första man gör är att starta 7-segmenten. Då står det bara X X X X X, men på D0 står det 0 och vill jag starta så ska D0 vara 1.
Efter det så ska man sätta ljusstyrkan. Om jag vill ha maximal ljusstyrka 31/32 så är det XXXX1111 räknat ifrån D7 till D0.
Och sist så sätter man ett värde på en 7-segment. Så om jag vill skicka till exempel 5 till en 7-segment så måste jag skicka A = 1 B= 0 C= 1 D= 1 E= 0 F = 1 G = 1, samt DP måste vara 1 om jag vill ha med punkten, annars 0. Detta följs sedan av en adress. Så första 7-sgementen är D11 till D8 0000 och andra 7-segmentet är 0010.
Jag ska börja sända ifrån D15 till D0.
Jag har lödigt ihop 4 stycken katod 7-segment och en MAX7219 drivare och fått det fungera med ett bibliotek med Arduino. Nu tänkte jag skapa eget själv.
Som tur så behöver jag bara fokusera på CS, MOSI och CLK då MISO är inte relevant här för jag pratar bara med MAX7219 bara en gång.
I databladet så står det att man ska skicka 16-bitar per 7-segment.
D0 till D7 är det som ska visas på 7-segmentet och D7 är den lilla punkten.
D8 till D11 är adressen.
Men helt plötsligt så står det X på D12 till D15. Jag vet att D12 till D15 är "don't care" bits. Men är X typ som en variabler som innehåller något annat från en tabell ifrån databladet? För det står X lite överallt i tabellerna.
Det första man gör är att starta 7-segmenten. Då står det bara X X X X X, men på D0 står det 0 och vill jag starta så ska D0 vara 1.
Efter det så ska man sätta ljusstyrkan. Om jag vill ha maximal ljusstyrka 31/32 så är det XXXX1111 räknat ifrån D7 till D0.
Och sist så sätter man ett värde på en 7-segment. Så om jag vill skicka till exempel 5 till en 7-segment så måste jag skicka A = 1 B= 0 C= 1 D= 1 E= 0 F = 1 G = 1, samt DP måste vara 1 om jag vill ha med punkten, annars 0. Detta följs sedan av en adress. Så första 7-sgementen är D11 till D8 0000 och andra 7-segmentet är 0010.
Jag ska börja sända ifrån D15 till D0.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
X i detta fallet betyder "Dont Care/Ej Använd", Sanningstabeller och liknande skrivs alltid på detta sättet.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Okej. Då spelar det alltså ingen roll om jag sätter en etta eller nolla.TomasL skrev:X i detta fallet betyder "Dont Care/Ej Använd", Sanningstabeller och liknande skrivs alltid på detta sättet.
Men hur blir det då om jag skickar att jag ska visa en nolla på en segment? Då kan den ju tro att jag stänger av den?
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Står i databladet exakt hur du gör.
Skicka Binärt noll och tänd de displayer du vill ha visning på.
Skicka Binärt noll och tänd de displayer du vill ha visning på.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Jo men hur ska den veta att jag vill tända en display och inte skriva en nolla till den?
OH, hittade det nu.
OH, hittade det nu.

Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Här är min kod.
Det sin händer är att alla segmenten är ON, oavsett om jag gör något eller inte. Jag har trippelkollat om jag har kopplat rätt.
Koden kan synas bättre här.
Det sin händer är att alla segmenten är ON, oavsett om jag gör något eller inte. Jag har trippelkollat om jag har kopplat rätt.
Koden kan synas bättre här.
Kod: Markera allt
PROGRAM SETUP
VAR
LOCK: BOOL := FALSE;
COUNTSETUP: INT;
STARTUP: ARRAY[0..15] OF BOOL := [FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE];
DECODE: ARRAY[0..15] OF BOOL := [FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE];
INTENSITY: ARRAY[0..15] OF BOOL := [FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE];
DIGI5: ARRAY[0..15] OF BOOL := [FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE];
CLOCKARRAY: ARRAY[0..15] OF BOOL := [TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE];
// Pause
PAUSE: TP;
END_VAR
(* This program only run once
1. Start up
2. Choose decode mode
3. Choose intensity register
4. Lock
*)
// GPIO26 := STARTUP[COUNTSETUP]; MOSI
// GPIO17 := CLOCKARRAY[COUNTSETUP]; // CLK
IF LOCK = FALSE THEN
GPIO19 := FALSE; // CS low - Talk
// 1. Start up MAX7219
FOR COUNTSETUP := 0 TO 15 DO
// Call
GPIO26 := STARTUP[COUNTSETUP];
GPIO17 := CLOCKARRAY[COUNTSETUP];
// Pause
PAUSE(IN := TRUE, PT:= T#5MS);
END_FOR
GPIO19 := TRUE; // CS hi - No talk
PAUSE(IN := TRUE, PT:= T#5MS);
GPIO19 := FALSE; // CS low - Talk
// 2. Choose decode mode - No decode mode
FOR COUNTSETUP := 0 TO 15 DO
// Call
GPIO26 := DECODE[COUNTSETUP];
GPIO17 := CLOCKARRAY[COUNTSETUP];
// Pause
PAUSE(IN := TRUE, PT:= T#5MS);
END_FOR
GPIO19 := TRUE; // CS hi - No talk
PAUSE(IN := TRUE, PT:= T#5MS);
GPIO19 := FALSE; // CS low - Talk
// 3. Choose intensity register - FULL
FOR COUNTSETUP := 0 TO 15 DO
// Call
GPIO26 := INTENSITY[COUNTSETUP];
GPIO17 := CLOCKARRAY[COUNTSETUP];
// Pause
PAUSE(IN := TRUE, PT:= T#5MS);
END_FOR
GPIO19 := TRUE; // CS hi - No talk
PAUSE(IN := TRUE, PT:= T#5MS);
GPIO19 := FALSE; // CS low - Talk
// 3. Choose DIGIT 5 at digit 1 - TEST
FOR COUNTSETUP := 0 TO 15 DO
// Call
GPIO26 := DIGI5[COUNTSETUP];
GPIO17 := CLOCKARRAY[COUNTSETUP];
// Pause
PAUSE(IN := TRUE, PT:= T#5MS);
END_FOR
GPIO19 := TRUE; // CS hi - No talk
// All done!
END_IF
LOCK := TRUE; // Lock
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Nu vet jag vad problemet är.
Det går inte göra en blinkande loop i PLC.
Tänk typ en FOR-loop som tänder och släcker en led lampa. Det går inte för det händer inget på utgången då.
Programmet måste tydligen köra klart innan den kan tända och släcka en lampa.
Jag vet. Detta är skumt.
Det går inte göra en blinkande loop i PLC.
Tänk typ en FOR-loop som tänder och släcker en led lampa. Det går inte för det händer inget på utgången då.
Programmet måste tydligen köra klart innan den kan tända och släcka en lampa.
Jag vet. Detta är skumt.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Ja, även många "vanliga" PLC'er fungerar så, de har en loop där man
först kör alla logiska operationer, sedan sätts alla utgångar samtidigt
i slutet av loopen innan man startar om ingen. Cykeltiden är ändå så
pass kort så vanliga maskiner märker ingen skillnad.
först kör alla logiska operationer, sedan sätts alla utgångar samtidigt
i slutet av loopen innan man startar om ingen. Cykeltiden är ändå så
pass kort så vanliga maskiner märker ingen skillnad.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Men hur ska jag göra då för att LED lampan ska blinka i en loop?sodjan skrev:Ja, även många "vanliga" PLC'er fungerar så, de har en loop där man
först kör alla logiska operationer, sedan sätts alla utgångar samtidigt
i slutet av loopen innan man startar om ingen. Cykeltiden är ändå så
pass kort så vanliga maskiner märker ingen skillnad.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
(Du behöver inte, och det avråds från att, upprepa hela föregående
inlägg utan att det tillför något till tråden mer än onödig plats)
Man kanske får blinka den i huvudloopen?
Aja, jag vet inte vilken loop som det gäller.
inlägg utan att det tillför något till tråden mer än onödig plats)
Man kanske får blinka den i huvudloopen?
Aja, jag vet inte vilken loop som det gäller.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
En PLC programmerar du normalt inte som du programmerar en normal microprocessor, en PLC programmerar du som om du hade byggt med logikkretsar.
För att få blink behöver du definiera en timer som ger en fyrkantvåg med blinkfrekvensen, och sen måste alla utgångar AND:as med den signalen.
För att få blink behöver du definiera en timer som ger en fyrkantvåg med blinkfrekvensen, och sen måste alla utgångar AND:as med den signalen.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Så en PLC är dum och korkad med andra ord? Eller menar du att alla program i en PLC ska vara konternueliga och inte diskreta?Nerre skrev:En PLC programmerar du normalt inte som du programmerar en normal microprocessor, en PLC programmerar du som om du hade byggt med logikkretsar.
För att få blink behöver du definiera en timer som ger en fyrkantvåg med blinkfrekvensen, och sen måste alla utgångar AND:as med den signalen.
Den klarar utav endast automation on/off och klassisk reglering så som PID?
Okej. Så om jag ska göra en SPI clocka så måste den gå hela tiden? Det har jag gjort och det fungerar mycket bra.
Men det största problemet som jag har är att jag vill köra ett program bara en gång efter det programmet har slutat så startar alla andra program i sin vanliga ordning.
Om jag kan det så behöver jag inte dessa while loopar
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
PLC är traditionellt byggda för att ersätta gammal relälogik.
Det är därför med heter PLC, Programmable Logic Controller.
Det finns kanske PLC som kan programmeras sekventiellt, men det normala är att man helt enkelt bygger en sekvensmaskin med vippor, på samma sätt som man byggda såna grejer med reläer eller tryckluft förr.
Det mest logiska sättet att programmera en PLC är med "ladderdiagram".
Vill du ha en microprocessor så ska du använda en microprocessor och inte en PLC:)
Det är därför med heter PLC, Programmable Logic Controller.
Det finns kanske PLC som kan programmeras sekventiellt, men det normala är att man helt enkelt bygger en sekvensmaskin med vippor, på samma sätt som man byggda såna grejer med reläer eller tryckluft förr.
Det mest logiska sättet att programmera en PLC är med "ladderdiagram".
Vill du ha en microprocessor så ska du använda en microprocessor och inte en PLC:)
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
En dator - i vilken användning man än väljer - är aldrig dum och korkad!
Användaren som väljer fel sätt att använda den på kan däremot vara dum och korkat.
En PLC gör vad en PLC ska, om det inte motsvarar vad som behövs är det inte en PLC man ska använda.
Användaren som väljer fel sätt att använda den på kan däremot vara dum och korkat.
En PLC gör vad en PLC ska, om det inte motsvarar vad som behövs är det inte en PLC man ska använda.
Re: MAX 7219 7-segmentdrivare - Vad betyder X i databladet?
Fast kan ju programmera en PLC sekventiellt 
Du menade säkert iternationellt? Eller hur det stavas.
Hur som helst jag har lyckats få en kommunikation med min MAX7219 men det är väldigt buggit.
Den kan potta ut en 8a ibland.

Du menade säkert iternationellt? Eller hur det stavas.
Hur som helst jag har lyckats få en kommunikation med min MAX7219 men det är väldigt buggit.
Den kan potta ut en 8a ibland.