Hi ich habe Probleme den MAX7219 anzusteuern. Ich habe mir eine LED
Matrix gebaut und versuche gerade die Matrix über den IC anzusteuern.
Für die Ansteuerung nehme ich einen Controller aus der 8051er Reihe.
Hier ist das Programm welches ich für die Ansteuerung geschrieben habe:
1 | #include <reg517a.h>
|
2 |
|
3 | sbit CLOCK = P4 ^ 0x00;
|
4 | sbit DIN = P4 ^ 0x01;
|
5 | sbit LOAD = P4 ^ 0x02;
|
6 |
|
7 | void sendData(unsigned char reg_adr, unsigned char daten);
|
8 |
|
9 | void main(void)
|
10 | {
|
11 | LOAD = 1;
|
12 | CLOCK = 0;
|
13 | DIN = 1;
|
14 |
|
15 | sendData(0x09, 0x00); // No Decode Mode
|
16 | sendData(0x0A, 0x0B); //mittlere Helligkeit einstellen
|
17 | sendData(0x0B, 0x07); //max. Scan Limit
|
18 | sendData(0x0C, 0x00); //Normal Operation
|
19 | sendData(0x0f, 0x00); //Test Normal Operation
|
20 |
|
21 | sendData(0x0C, 0x01);
|
22 |
|
23 | sendData(0x01, 0x00);
|
24 | sendData(0x02, 0x00);
|
25 | sendData(0x03, 0x00);
|
26 | sendData(0x04, 0x00);
|
27 | sendData(0x05, 0x00);
|
28 | sendData(0x06, 0x00);
|
29 | sendData(0x07, 0x00);
|
30 |
|
31 | while(1);
|
32 | }
|
33 |
|
34 | void sendData(unsigned char reg_adr, unsigned char daten)
|
35 | {
|
36 | unsigned char Teiler = 128; // Hilfsvariable zum maskieren der 8 Bit
|
37 | unsigned char i; // Schleifenvariable
|
38 | LOAD = 0; // Startsignal der seriellen Datenübertragung zum MAX7219!
|
39 | for(i=1; i<=8; i++) // Schleife zum seriellen Ausgeben der 8 Adress-Bits!
|
40 | {
|
41 | if(reg_adr & Teiler) DIN = 1; // Entsprechendes Bit mit Hilfe der bitweisen UND-Verknüpfung
|
42 | else DIN = 0; // maskieren und auf der DIN-Leitung ausgeben!
|
43 | CLOCK = 1; // Takt auf Taktleitung ausgeben, also zuerst Taktleitung
|
44 | CLOCK = 0; // auf log. 1, danach wieder auf log. 0 setzen!
|
45 | Teiler = Teiler / 2; // Hilfsvariable für nächsten Schleifendurchlauf vorbereiten!
|
46 | }
|
47 | Teiler = 128; // Hilfsvariable wieder auf Startwert setzen!
|
48 | for(i=1; i<=8; i++) // Schleife zum seriellen Ausgeben der 8 Daten-Bits!
|
49 | {
|
50 | if(daten & Teiler) DIN = 1; // Entsprechendes Bit mit Hilfe der bitweisen UND-Verknüpfung
|
51 | else DIN = 0; // maskieren und auf der DIN-Leitung ausgeben!
|
52 | CLOCK = 1; // Takt auf Taktleitung ausgeben, also zuerst Taktleitung
|
53 | CLOCK = 0; // auf log. 1, danach wieder auf log. 0 setzen!
|
54 | Teiler = Teiler / 2; // Hilfsvariable für nächsten Schleifendurchlauf vorbereiten!
|
55 | }
|
56 | DIN = 0; // Serielle Datenleitung auf log. 0!
|
57 | LOAD = 1; // Stoppbedingung der seriellen Datenübertragung zum MAX7219!
|
58 | }
|
Durch Recherchen habe ich erfahren wie ich diesen IC Initialisieren
muss. Ich hoffe ich habe soweit alles richtig gemacht. Da die LEDs
immernoch permanent leuchten weiß ich nicht mehr weiter. Eigentlich habe
ich sie per Programmcode ausgeschaltet.
Gruß
bän