Sida 2 av 3

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:09:03
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.

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:13:51
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.

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:19:36
av ajje
Jag blir att tänka på woodoofelsökning. ...

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:25:11
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

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:27:44
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.

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:41:34
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

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:45:48
av jesse
Bra förklaring hur multiplexing fungerar för lysdioder:
How to Multiplex an LED Grid...

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:50:48
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);
  }
  
}


Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 18:54:07
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 :)

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 21:26:42
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:

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 21:35:34
av hummel
Det verkar som du inte kopplat rätt. Följer du exempelschemor från tillverkaren?

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 21:42:31
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);
  }
}


Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 22:22:27
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.

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 22:28:06
av Al_Bundy
Det där är min egen kod. Menar du att jag ska skriva eget C++ bibliotek?

Re: Hur startar man MAX7219 ? 7-segment

Postat: 26 oktober 2014, 22:52:55
av hummel
Har du skrivit setlcd? Hur har du verifierat att den fungerar på korrekt sätt?