www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MAX7221 AT89S52 C Programm


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include "main.h"

void main (void) {
           SendWord (POWERON); 
  SendWord (DECODEMODE);
  SendWord (SCANLIMIT);  
  SendWord (INTENSITY);
  SendWord (TESTOFF);

  while ( 1 ) {
             SendWord(0x0101); //Auf dem Digit 0 eins anzeigen lassen
  }
}

void SendWord (unsigned int word) { 
  unsigned int i;
  
  DIN = 0;
  LOAD = 0;
  CLK = 0;

  for (i=0; i<16; i++) {   
    DIN = (0x8000 & word) ? 1 : 0;
    CLK = 1;
    CLK = 0;                 
    word <<= 1;
    }
  
  LOAD = 1;
  LOAD = 0;
}

main.h:
#include <AT89X52.h>

#define CLK     P1_7
#define DIN     P1_5
#define LOAD    P1_6

#define DECODEMODE  0x09FF
#define INTENSITY   0x0A0F
#define SCANLIMIT   0x0B07
#define POWERON     0x0C01
#define POWEROFF    0x0C00
#define TESTON      0x0F01
#define TESTOFF     0x0F00

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

Autor: Chris K. (chrisk86)
Datum:

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

Chris

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris K. (chrisk86)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Udo S. (udo)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define SCANLIMIT   0x0B07

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

einstellen.

Gruß
Udo

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.