Hur startar man MAX7219 ? 7-segment

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

sodjan skrev:> ...så får inte GND från processorn kopplas ihop med multiplexern's GND

Hur menar du? Självklart måste processorn och MAX kretsen ha gemensam GND!
Om jag kopplar in uC's GND med MAX7219's GND så slocknar den. Nej. Det är absolut inget fel på min koppling för jag har varit där med multimeter och känt om något är fel. Är det inte så att jag kanske måste ha något mellan?

> + att programmeraren ska ha fria pinnar.

Fick du inte en 1'a på displayen redan innan du bytte pinnar?
Det är svårt att säga vad som är orsak ock verkan (även för sig)
när man ändrar många olika sakar samtidigt.
Jag ändrade inte så mycket förutom att flytta pinnarna och ta bort jorden.
Jag fick en 1:a på displayen ja.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

sodjan skrev:AVR'en och MAX kretsen måste självklart ha gemensam jord/GND.
Jag är inte helt säker på vad du beskriver att du gjorde, men det
spelar ingen roll, gemensam jord/GND mst det vara i alla fall.
Drar jag ut SCK kabeln eller V+ kabeln så slocknar den.
En sådan hä krets kan ha ganska hög toppströmförbrukning,
och förbrukningen kan variera väldigt kraftigt också. Har du
avkopplat med ordentligt med elektrolyt? Databladet säger
minst 10 uF men allt över det fungerar. Hur har du gjort?
Nej. Jag körde bara basic för att testa. Jag vet om att man brukar koppla 10 uF elektrolytkondensator och 01. uF keramikkondensator mellan VCC och GND.
Sen så har ju Jesse hittat något "intressant" också.
Har du inte kollat att koden var OK först?
Jag ska kolla på vad Jessie har lagt upp. Håller på med tre saker, som vanligt.




Sen så såg du ju 1'an (svagt) redan innan den ändringen, eller?
Ja det gjorde jag. Jag tror att jag hade kopplat in jorden då.
Var det egentligen något annat en felskrivningen i setIntensity?
Nej. Det var jag som hade tolkat den fel som att 15,15 är högsta och 0,15 är lägsta. Men 0:an beskriver vilket chip det är och 15 är styrkan.
Användarvisningsbild
ajje
Inlägg: 2632
Blev medlem: 12 mars 2010, 16:35:31
Ort: Smedjebacken

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av ajje »

Jag blir att tänka på woodoofelsökning. ...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

jesse skrev:>Så denna etta kan ses som 5 volts signal i ett skop?

Ja, troligtvis. Men jag var inte säker på om din AVR går på 5V eller 3.3V, därför angav jag ingen spänning.
Oscilloskopet ställer man vanligtvis in så att det triggar på en förändring. T.ex när etta går till nolla (=negativ flank). Då kan man se på scopet vad som händer efter det (att det är nolla en kort stund och sedan återgår till etta).

Nedan ett exempel: Det röda strecket är SCK, D2 eller D3 är CS och D1 är data.

Bild
Så man kan sammanfatta allt att processorn skickar ut en hög med ettor och nollor under visst tidsintervall och multiplexern plockar upp det och omvandlar dessa till spänningar.
En sak undrar jag också. Hur fungerar detta:

Bild

Jag vet att Dig x är någon from av "jord/GND" och SEG X är ingångar.
Men hur blir det om Dig 0 och 1 är "ON", dvs tillgängliga och segmentdisplay 0 visar en 7:a och segmentdisplay visar en 1:a. Hur går det till då? Båda kommer visa en 7:a
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

jesse skrev:Har man inget oscilloskop kan man använda andra knep för att hitta korta digitala pulser.
En vanlig lysdiod i serie med ett 1k motstånd t.ex.
Är det en negativ puls som ska detekteras kopplar man lysdioden mellan VCC och pinnen som ska testas. Är det en positiv puls kopplar man den mellan GND och pinnen.
Ett annat sätt att detektera datasignaler som jag ofta använder är att ha ett piezo-element, alltså en 'summer' (inte en sån som piper när man kopplar på ström, utan en som behöver ha tonen genererad av processorn). Då låter som ett kort knäpp när det kommer en puls, och som ett litet brus varje gång det kommer data. Man kan också lyssna på PWM-frekvenser och annat kul. :D
Det gör jag hela tiden! :)
Ibland kollar jag även med min multimeter om den beter sig konstigt. Dock är det mest bara resistans eller spänning som jag kollar då.

Men LED + motstånd är också en klassiker.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av jesse »

Al_Bundy skrev:Så man kan sammanfatta allt att processorn skickar ut en hög med ettor och nollor under visst tidsintervall och multiplexern plockar upp det och omvandlar dessa till spänningar.
Nej, det du ser på oscilloskopsbilden är inte något som multiplexern skapar. 'Ettor' och 'nollor' är ju bara teoretiska begrepp som används för att beskriva ett tillstånd. Processorn arbetar ju med dessa spänninfar internt, AVR'en skickar ju ut dessa spänningar till sina utgångar. Multiplexern bara tar emot och läser av.
Al_Bundy skrev:Jag vet att Dig x är någon from av "jord/GND" och SEG X är ingångar.
Men hur blir det om Dig 0 och 1 är "ON", dvs tillgängliga och segmentdisplay 0 visar en 7:a och segmentdisplay visar en 1:a. Hur går det till då? Båda kommer visa en 7:a
För att den aldrig visar en två siffror samtidigt. Den visar en siffra åt gången, sedan nästa, sedan nästa osv... därför kan den visa olika. Men ögonen hinner inte se att det blinkar, men i slow-motion skulle du se att den aldrig visar en etta och en sjua samtidigt.

Här en film på vad den egentligen gör (denna tar ett segment åt gången):
4 Segment LED Clock - Multiplexing slowed down
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av jesse »

Bra förklaring hur multiplexing fungerar för lysdioder:
How to Multiplex an LED Grid...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

Om jag kör denna kod. Då ska segmentdisplayen loopa från 0 till 8, men den hinner inte längre än 6 och då stängs den av. Det kanske har med hastigheten? Eller?

Kod: Markera allt

#include <LedControl.h>

// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(9, 10, 8 , 1);

void setup() {
  mydisplay.shutdown(0, false);  // turns on display
  mydisplay.setIntensity(0, 15); // 15 = brightest
  //mydisplay.setDigit(0, 0, 5, true);
}

void loop() 
{
  int i = 0;
  while (i < 9)
  {
    mydisplay.setDigit(0, 0, i, true);
    i++;
    delay(500);
  }
  
}

Senast redigerad av Al_Bundy 26 oktober 2014, 18:55:18, redigerad totalt 1 gång.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

jesse skrev:
Al_Bundy skrev:Så man kan sammanfatta allt att processorn skickar ut en hög med ettor och nollor under visst tidsintervall och multiplexern plockar upp det och omvandlar dessa till spänningar.
Nej, det du ser på oscilloskopsbilden är inte något som multiplexern skapar. 'Ettor' och 'nollor' är ju bara teoretiska begrepp som används för att beskriva ett tillstånd. Processorn arbetar ju med dessa spänninfar internt, AVR'en skickar ju ut dessa spänningar till sina utgångar. Multiplexern bara tar emot och läser av.
Al_Bundy skrev:Jag vet att Dig x är någon from av "jord/GND" och SEG X är ingångar.
Men hur blir det om Dig 0 och 1 är "ON", dvs tillgängliga och segmentdisplay 0 visar en 7:a och segmentdisplay visar en 1:a. Hur går det till då? Båda kommer visa en 7:a
För att den aldrig visar en två siffror samtidigt. Den visar en siffra åt gången, sedan nästa, sedan nästa osv... därför kan den visa olika. Men ögonen hinner inte se att det blinkar, men i slow-motion skulle du se att den aldrig visar en etta och en sjua samtidigt.

Här en film på vad den egentligen gör (denna tar ett segment åt gången):
4 Segment LED Clock - Multiplexing slowed down
Jaa! Det förklarar saken! Undra hur det skulle se ut med en kamera som är gjort för snabba hastigheter :)
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

Ingen som vet varför inte MAX7219 inte fungerar när man kopplar in GND från MAX till processorn?
Det verkar som att ström och spänning kommer från DIN och SCK. Det händer inget om jag drar ut V+ kabeln. :humm:
hummel
Inlägg: 2544
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av hummel »

Det verkar som du inte kopplat rätt. Följer du exempelschemor från tillverkaren?
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

Yes det gör jag.

Jo, jag måste ha kopplat rätt för jag kan använda 4 segment som jag har kopplat in.
Men jag kan inte loopa t.ex

Detta fungerar

Kod: Markera allt

#include <LedControl.h>

// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(9, 10, 8 , 1);

void setup() {
  mydisplay.shutdown(0, false);  // turns on display
  mydisplay.setIntensity(0, 15); // 15 = brightest
  mydisplay.setDigit(0, 0, 1, true);
  mydisplay.setDigit(0, 1, 2, true);
  mydisplay.setDigit(0, 2, 3, true);
  mydisplay.setDigit(0, 3, 4, true);
}

void loop() 
{

}

Detta fungerar INTE. Det lyser till 5,6,2,4 i en halv sekund och sen slocknar alla segment.

Kod: Markera allt

#include <LedControl.h>

// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(9, 10, 8 , 1);

void setup() 
{
   mydisplay.shutdown(0, false);  // turns on display
   mydisplay.setIntensity(0, 15); // 15 = brightest

}

void loop() 
{
  int i = 0;
  while (i < 9)
  {
    mydisplay.setDigit(0, 0, i++, true);
    mydisplay.setDigit(0, 1, i++, true);
    mydisplay.setDigit(0, 2, i++, true);
    mydisplay.setDigit(0, 3, i++, true);
    i++;
    delay(500);
  }
}

hummel
Inlägg: 2544
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av hummel »

Skriv din egen kod och verifiera att du skickar ut rätt saker på rätt sätt till multiplexern. Ett alternativ är att du sätter brytpunkter eller på annat sätt stegar igenom koden och verifierar att du skickar ut rätt saker till multiplexern.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av Al_Bundy »

Det där är min egen kod. Menar du att jag ska skriva eget C++ bibliotek?
hummel
Inlägg: 2544
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur startar man MAX7219 ? 7-segment

Inlägg av hummel »

Har du skrivit setlcd? Hur har du verifierat att den fungerar på korrekt sätt?
Skriv svar