Forum: Mikrocontroller und Digitale Elektronik MAX7221 AT89S52 C Programm


von Daniel (Gast)


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

von Chris K. (chrisk86)


Lesenswert?

Zeig' mal den Schaltplan. Was hast du für einen Widerstand an Rset 
gehängt?

Chris

von Daniel (Gast)


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.

von Chris K. (chrisk86)


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

von Daniel (Gast)


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?

von Udo S. (udo)


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

von Daniel (Gast)


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.

von Ralf (Gast)


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

von Dieter Werner (Gast)


Lesenswert?

Bei "große Anzeigen" schrillen bei mir die Glocken, die haben oft 2 oder 
mehr LED-Chips in Reihe geschaltet.
Womöglich reichen die 5V dann nicht zur Ansteuerung aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.