-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: MAX7221

  1. #1

    MAX7221

    Anzeige

    Morgen



    Vorgeschichte, Prolog, Gelaber... eigentlich unwichtig also wer es eilig hat springt lieber zum zweiten Teil

    Ich bastele schon seit geraumer Zeit mit ein paar 5*7 Dotmatrix LED Displays rum. Das ganze leider nur sehr sporadisch aber inzwischen habe ich mich von "garkein Plan" soweit entwickelt dass ich zwei Matrizen via LPT am PC ansteuern kann. Das ganze läuft über Schieberegister, ULN2803 und UDN2981. Softwaremäßig programmiere ich alles noch mit Borland Delphi. Funktioniert zwar aber wirklich praktisch verwendbar ist diese Methode nicht.
    Sind sozusagen die sprichwörtlichen Kanonen auf Spatzen.

    Deswegen habe ich mir von Maxim ein paar ICs zukommen lassen.
    Den MAX6953 sowie den MAX7221.

    Den Max9653 kann ich noch nicht verwenden weil mir viel elektronischer Krimskrams fehlt... mein Kleinzeugsortiment ist einfach noch nicht ausgereift genug.



    Zweiter Teil ... darum geht's:

    >>> Datasheep MAX7219/7221 ... <<<

    Ich habe den MAX >>hier bei Maxim beschrieben<< an den LPT angechlossen und an den MAX wiederum ordnungsgemäß nach Datenblatt eine 5*7LED-Matrix.
    Gleich eine Frage zuerst: Auf der Webseite ist es ein 100pF Kondensator an Pin12 des SUB-D-Steckers. Im Programm vom Maxim ist die gleiche Skizze mit einem 100kOhm Widerstand an Stelle des Kondensators. Was ist denn nun richtig?


    Ich kam aber nach dem Anschließen zu keinem Ergebnis. Ich dachte es könnte an meinem "zusammengeschusterten" Aufbau liegen denn mir fehlts gerade an passenden Elektrokleinteilen weswegen ich die Kondensatoren und Widerstände relativ freizügig zusammengestückelt habe.
    Deswegen habe ich den MAX jetzt direkt an den LPT angeschlossen. Ich weiß, das ist nicht intelligent aber bei meiner anderen Variante habe ich es auch so gemacht und es funktioniert wunderbar... den Risiken bin ich mir aber schon bewusst. Funktioniert aber trotzdem noch nicht.


    Ich frage mich was ich jetzt noch falsch mache. "Angesteuert" wird der MAX doch eigentlich wie einen normalen Schieberegister, oder sehe ich das Falsch?

    Also in diesem spezifischen Fall ist LOAD normal auf High.
    Zum Ansteuern setze ich LOAD auf Low, an DIN nacheinander die 16 Zustände (also High/Low).
    Nach jeden Bit muss dann noch CLK einmal auf High und wieder auf Low gesetzt werden. Nach den 16 Bit wird LOAD wieder High und der Zauber ist vorbei.
    Oder sehe ich das falsch?

    Im Datenblatt steht noch das hier:
    "The data is then latched into either the digit or control registers on the rising edge of LOAD/CS. LOAD/CS must go high concurrently with or after the 16th rising clock edge, but before the next rising clock edge or data will be lost."
    Das heißt doch nur dass ich nach dem 16 Bit am besten gleichzeitig mit dem 16.CLK LOAD/CS wieder auf High setzen muss, mindestens aber bevor CLK wieder geschaltet wird??


    Es könnte durchaus sein dass ich einen kleinen Logikfehler in meinem Delphiprogramm eingebaut habe, aber das erklärt nicht warum das Programm vom Maxim nicht funktioniert.
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    Direkt angeschlossen, heist das, das das Widerstandsnetzwerk um die Pins 2-4 einfach weggelassen wurden? Dann wird es nicht gehen, weil über die 4k7 Widerstände die Hi-Pegel für den Max vorgegeben werden.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Moin, ich arbeite auch mit dem MAX7221/7219, allerdings mit nem Microcontroller. Da der allerdings in C programmiert ist, kann dir das vielleicht weiterhelfen:
    Code:
    // MAX7221 LED-Treiber-IC
    
    //MAX7221.h
    #define CLK			PIN_B1
    #define CS			PIN_B2
    #define DATA		PIN_B3
    #define NOOP		0
    #define DIG0		1
    #define DIG1		2
    #define DIG2		3
    #define DIG3		4
    #define DIG4		5
    #define DIG5		6
    #define DIG6		7
    #define DIG7		8
    #define DECODE		9
    #define INTENSITY	10
    #define SCANLIMIT	11
    #define SHUTDOWN	12
    #define TEST_REG	15
    
    void max_ausgabe(int adresse,int wert);
    void init_max (int Digits, int Brightness);
    
    
    void max_ausgabe(int adresse,int wert)
    {
    	int i;
    
    	adresse&=0x0F; //higher nibble =0	
    	OUTPUT_LOW(CLK);
    	OUTPUT_LOW(DATA);	
    	OUTPUT_LOW(CS);	
    for (i=8;i>0;i--)
    	{
    		OUTPUT_LOW(CLK);	
    		OUTPUT_BIT(DATA, BIT_TEST(adresse,i-1));
    		OUTPUT_HIGH(CLK);
    	}
    	for (i=8;i>0;i--)
    	{
    		OUTPUT_LOW(CLK);			
    		OUTPUT_BIT(DATA, BIT_TEST(wert,i-1));	
    		OUTPUT_HIGH(CLK);	
    	}		
    	OUTPUT_HIGH(CS);	
    	OUTPUT_LOW(CLK);
    	OUTPUT_LOW(DATA);	
    	
    }
    
    
    void init_max (int Digits, int Brightness)
    {
    	int i;
    	
    	max_ausgabe(SHUTDOWN,0); //Shutdown on
    	max_ausgabe(TEST_REG,0); //Testmode off
    	max_ausgabe(SCANLIMIT,Digits-1); //Number of Digits
    	max_ausgabe(INTENSITY,Brightness-1); //Set Brightness
    	max_ausgabe(DECODE,0); //No Decode-Mode	
    	
    	for(i=1;i<9;i++)		//All Digits to Zero
    	{
    		max_ausgabe(i,0);
    	}
    	
    	max_ausgabe(SHUTDOWN,1); //Shutdown off
    }
    Ausserdem findest du auf unter http://www.hanf-elektrotechnik.de/ bei den Projekten einen Weihnachtsstern, der ebenfalls mit dem MAX7219/7221 und einem µC aufgebaut wurde.
    Ich bin mir nicht sicher, ob der Parallelport nur OpenCollector Ausgänge hat, wenn ja, brauchst du die Widerstände, wenn nicht würde ich das Timing vom PC mal genauer ansehen oder die Zustandsänderungen am Port einzeln machen und mit vielen Pausen zupflaster und sowas auszuschließen.
    Hast du mal die Spannungen der Low und High Pegel am 7221 gemessen?
    ...

  4. #4
    wieso reicht denn da nicht der high-pegel vom LPT selbst aus? Das tat er bis jetzt doch auch immer.
    aber ich werde es nochmals so aufbauen und testen
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  5. #5
    he the_ghost wie hat sich denn dein beitrag hier reingeschlichen ... den habe ich ja garnicht gesehen.

    Erst einmal ein kleines Update:
    Ich bin doof, habe ich mal wieder festgestellt. Ein Grundlegender Fehler ist es wohl Anode und Kathode zu verwecheln, sprich die Matrix war verkehrt an den MAX angeschlossen.
    Nachdem ich das geändert habe zeigt das Display gelegentlich etwas an, macht aber ziemlich viel Unfug.

    Das einzige was ich bewusst steuern kann ist dass der Test-Modus läuft. Sonst reagiert der MAX auf nichts.

    Ich dachte mir das könnte an der LOW-Spannung des LPTs vom 0.8V liegen. Desshalb habe ich als eine art "Treiber" einen UDN2981 vorgeschaltet. Das funktioniert super, ich habe jetzt klare Zustände für LOAD, DIN und CLK. (High=5V , Low = 0V).
    Aber seltsamerweise reagiert der MAX nun auf garnichts mehr.
    Woran liegt das denn jetzt?
    MUSS ein Low-Zustan auch eine gewisse Mindestspannung haben? Ich dachte bis jetzt Low ist am besten wenn es 0V sind.


    Zum Thema Spannung messen: An LOAD liegen wie es sein soll die Versorgungspannung an. Und soweit ich das mit meinem Multimeter auch durchmessen kann werden die Daten auch korrekt geschrieben. (D.h. beim Schreiben sinkt die Spannung an LOAD ab und an den anderen beiden Pins geht sie hoch... genauer kann ich das in der Zeit aber wirklich nicht messen )

    Ich bin ratlos
    Bin zwar froh dass ich meinen doofen Fehler bemerkt habe aber irgendwie versteh ich das Problem jetzt nicht mehr.



    Nachtrag:
    ach ... jetzt schlagt ihr mich bestimmt auch gleich ... ich benutze übrigens ein 3-4m langes Kabel vom Parallelport zur Schaltung. Das machte mir bis jetzt noch nie Probleme. Ich habe es deswegen auch mit einem Laptop (Kabellänge 15cm) getestet, da passiert der selbe Unfug.

    Habe ich vielleicht noch irhendwo einen Grundlegenden Denkfehler???


    Nachtrag2:
    Was ich gerade merke:
    Wenn ich den MAX resette (also Spannung weg und wieder dran) dann befindet er sich ja im Shutdown-Status. Dieser muss laut Datenblatt erst aufgehoben werden bevor man mit dem MAX ernsthaft spielen kann.
    Der Test-Modus übergeht das allerdings von selbst.
    D.h. wenn ich dann wieder auf "Write Test Mode" in dem Prgramm von Maxim klicke leuchtet die ganze Matrix.

    Das tut sie auber auch wenn ich auf irgendeine der anderen "Write-Buttons" klicke, immer leuchtet die ganze Matrix und dann reagiert er auf nichts mehr.
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Maxim hat ein Programm für das Ding geschrieben? Also er hat den Shutdown modus, in dem alle LEDs abgeschaltet sind, nur der Test-Modus kann das überlagern, das stimmt.
    Hast du die Pullup Widerstände drin? der UDN2981 kann nur auf Masse ziehen, aber nicht auf Vcc. Dafür brauchst du dann die Pullups von 4,7k.
    Beim Pegelmessen dachte ich daran, dein Port dauerhaft low zu schalten, in Ruhe zu messen, high zu schalten und wieder in Ruhe zu messen.
    Low ist bei TTL normalerweise 0-0,6V und high 2,8-Vcc. Dazwischen ist Niemandsland und du kannst nicht definitiv sagen, wie ein IC schaltet. Wenn deine Spannungen nicht hoch genug sind, oder ungünstig einbrechen, kann es sein, dass genau so fehler in der Übertragung entstehen.
    ...

  7. #7
    Das ist doch umgedreht. Der ULN2803 zieht auf Masse und der UDN2981 ist ein "8Bit Channel-Driver" ???

    Das Programm von Maxim gibts hier:
    http://www.maxim-ic.com/appnotes.cfm/an_pk/2782
    Ist zum Testen ideal.

    Ja die Pullups sind auch wieder dran.

    LPT:
    LOW 0.08V
    HIGHT 4.12V


    Irgendwie spielt das voll verrückt.
    Inzwischen bekomme ich manchmal eine Anzeige die ich auch etwas beeinflussen kann, aber meistens gehts schief.


    Kann es schlicht an der Datenübertragung liegen? Also dass mein weg einfach zu störanfällig ist. Wenn ja wie kann ich das denn verbessern bzw. entstören?

    Ich habe ja auch noch ein MiniControl-Board. Das war eigentlich mein nächstes ziel wenn es vom LPT geklappt hat.
    Aber vom Atmel zum MAX muss es ja Störfrei funktionieren?
    Weil dann wäre es ein versuch wert den MAX über den Atmel anzusprechen ... obwohl ich jetzt mal garkeinen Plan habe wie ich das mache
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Argh, jaja hast ja recht!

    Die Pegel sollten ausreichen, vielleicht ist das lange Kabel wirklich das Problem, oder du senderst einfach stuss...mhhh


    Ist den dein LED Array sinnvoll verkabelt bzw kannst du ein Muster erkennen, wenn du einen Parameter änderst, auch wenn das keinen Sinn ergibt? Den MAX kann man in einen Modus schalten, der die Zeichen direkt decodiert ausgibt, ein anderer Modus schickt einfach nur die Daten, wie sie Binär vorliegen.
    ...

  9. #9
    ja ich habe doch immer recht =D>

    ne in diesem fall war ich mir sicher weil ich die beiden bauteile ja bereits verwendet hatte, sonst weiß ichs auch nie auswendig.


    Das Array ist natürlich sinnvoll verkabelt.
    Also Anode an SegA-SegG und Kathode an Dig0-Dig4


    Ich habe gerade mal die Pullupwiderstände verdoppelt
    Und... wohoo... es funktioniert. Allerdings ganz durchblicken kann ich nach wie vor nicht.


    Meine Vermutung: Ist es möglich dass sich der MAX aufhängt wenn er Daten für Digits ausgeben soll die nicht angeschlossen sind? Bei mir hier ist ja nur Digit0-4 gefragt, beim rumtesten habe ich die Begrenzung der Digits, also das Scanlimit wild hoch und runtergeschoben.
    Wenn ich Scanlimit nicht über "4" setze funktioniert es soweit sogar... glaube ich. Mal schauen wie lange




    nachtrag:
    hey es scheint wirklich zu funktionieren ... d.h.: Jetzt bloß nichts mehr anfassen
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Hehe, never change a running system.
    Ich hab mir das ding mal mit 8 großen 7Seg Anzeigen aufgebaut, nette Sache, ausserdem den oben genannten Weihnachtsstern für meine Freundin gebaut, echt feines Teil, vor allem weils bei einfachen Formen von der Verkabelung echt simpel ist und nicht viel Strom verbraucht. Nur der Stern ist echt horror, weil die LEDs so verteilt sind.
    ...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •