MAX7221 AT89S52 C Programm

Gast #879295
Lesenswert?

Hallo,
Da mir letztens schon so gut geholfen wurde, dachte ich mir frag ich mal 
wieder hier nach.

Und zwar will ich mit Hilfe eines MAX7221 6 7 Segment Anzeigen 
ansteuern. Ich habe ein kleines Programm in C geschrieben:

main.c:
1
#include "main.h"
2

3
void main (void) {
4
           SendWord (POWERON); 
5
  SendWord (DECODEMODE);
6
  SendWord (SCANLIMIT);  
7
  SendWord (INTENSITY);
8
  SendWord (TESTOFF);
9

10
  while ( 1 ) {
11
             SendWord(0x0101); //Auf dem Digit 0 eins anzeigen lassen
12
  }
13
}
14

15
void SendWord (unsigned int word) { 
16
  unsigned int i;
17
  
18
  DIN = 0;
19
  LOAD = 0;
20
  CLK = 0;
21

22
  for (i=0; i<16; i++) {   
23
    DIN = (0x8000 & word) ? 1 : 0;
24
    CLK = 1;
25
    CLK = 0;                 
26
    word <<= 1;
27
    }
28
  
29
  LOAD = 1;
30
  LOAD = 0;
31
}

main.h:
1
#include <AT89X52.h>
2

3
#define CLK     P1_7
4
#define DIN     P1_5
5
#define LOAD    P1_6
6

7
#define DECODEMODE  0x09FF
8
#define INTENSITY   0x0A0F
9
#define SCANLIMIT   0x0B07
10
#define POWERON     0x0C01
11
#define POWEROFF    0x0C00
12
#define TESTON      0x0F01
13
#define TESTOFF     0x0F00
14

15
void SendWord (unsigned int word);

Nun zu meinem Problem:
Lade ich das Programm genau so hoch wie es oben dargestellt ist, 
passiert gar nichts. Schalte ich den Testmodus ein, leuchten alle 6 7 
Segmente, aber sehr schwach (kaum erkennbar).

Würde mich über Hilfe freuen.
Daniel
Gast #879326
Lesenswert?

Widerstand am Iset 9k6.

Leider hab ich keinen Scanner um den Schaltplan hier zu zeigen. Aber ich 
erklär mal kurz:

Dig0 -> Kathode vom 1. 7-Segment
.
.
.
Dig5 -> Kathode vom 6. 7-Segment

SEGA -> Alle "A Segmente" parallel
.
.
.
SEGG -> Alle "G Segmente" parallel

Beide GND's des MAX7221 auf GND.
V+ auf 5V.
Iset auf 9k6 Widerstand und auf V+.

Pin 1.7 (AT89S52) -> CLK
Pin 1.5 (AT89S52) -> DIN
Pin 1.6 (AT89S52) -> LOAD (CS)

Ich hoffe das ist verständlich so.
#879337
Lesenswert?

Hast du denn auch geprüft, was die LEDs der 7Segment-Anzeigen für einen 
Strom benötigen?
Wenn die im Test-Modus alle nur schwach leuchten, könnte es sein, dass 
der Widerstand zu groß ist. Versuch's doch mal mit einem (etwas) 
kleineren.

Wenn du die Ziffern alle deutlich erkennst, dann wird's Zeit einzelne 
Zahlen auszugeben.

Achja, nochwas: Du solltest auf jeden Fall Pullup-Widerstände (z.B. 10k) 
verwenden...

Chris
Gast #879346
Lesenswert?

Der minimale Widerstand für die Intensität ist doch 9.53. Viel kleiner 
kann ich den nicht mehr machen.

Ich verwende Transistoren um die einzelnen Segmente durchzuschalten. 
Häng ich an die Basis 5V leuchten die jeweiligen Segmente (A/B/C...) 
wunderbar.

Ich habe die Ausgänge SEGA-F im Testmodus ozillographiert. Alle Ausgänge 
weisen das selbe auf:
Ca. 10 us auf 5V dann 50-100 us auf 0V.
Sollten im Testmodus nicht SEGA-F die ganze Zeit auf dem 5V Pegel sein?
#879420
Lesenswert?

Hallo,

> Sollten im Testmodus nicht SEGA-F die ganze Zeit auf dem 5V Pegel sein?

Nein, lt.Datenblatt Tastverhältnis 15/16, also 15 times on, 1 time off.

> Ich verwende Transistoren um die einzelnen Segmente durchzuschalten.

Warum? Versteh ich nicht. Da wird wohl der Fehler liegen.

Wobei, was für 7-Segment-Anzeigen hast du angeschlossen? 
Typenbezeichnung?

Weiterhin stimmt deine Einstellung fürs SCAN-LIMIT-Register nicht.
du stellst ein:
1
#define SCANLIMIT   0x0B07

für 6 Stellen musst du aber:
1
#define SCANLIMIT   0x0B05

einstellen.

Gruß
Udo
Gast #879433
Lesenswert?

Danke für die Antwort.

Bei mir ist das Verhältnis ca. umgekehrt 1 mal on 15 mal off. Und das 
hat denke ich nichts mit der hinteren Beschaltung zu tun. Oder liege ich 
etwa falsch?

Ich weiß die Typenbezeichnung jetzt ned auswendig, da muss ich morgen 
mal nachschauen. Es sind auf jedenfall große Anzeigen und der MAX7221 
kein so einen großen Strom leider nicht treiben.

Das mit dem SCANLIMIT teste ich auch gleich morgen.

Schlaft gut.
Gast #879514
Lesenswert?

> Bei mir ist das Verhältnis ca. umgekehrt 1 mal on 15 mal off. Und das
> hat denke ich nichts mit der hinteren Beschaltung zu tun. Oder liege ich
> etwa falsch?

Transistoren invertieren! Oder wo genau hast du die Transistoren? Guck 
vielleicht doch lieber erstmal, ob du nicht doch einen Schaltplan 
beibringen kannst, dann können wir besser helfen...

Ralf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren