INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
28.01.2021, 20:39
Beitrag #1
Sad MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
Hallo euch allen!
Nach dem ich ein paar 3stellige 7-Seg-LED gefunden habe, im Netz auf einen Beitrag gestosen bin, bei dem der MAX7221 ein gemeinsame Anode-Display treibt, wollte ich das ganze nachvollziehen. Leider war der Erfolg mäßig. Nach etwas Anpassung und Datenblatt studieren, kam folgender Code heraus. Die loop ist noch nicht vollständig. Leider gelingt es mir nicht den Dezimalpunkt anzusteuern. es würde schon mit einem Transistor über das Digit gehen, besser wäre es variabel im Code. HilfeHuh
Code:
// Controlling a common anode 4 digit 7seg display with the Max7219
// David Barton, 2016

#include <SPI.h>

// The Max7219 Registers :

#define DECODE_MODE   0x09
#define INTENSITY     0x0a
#define SCAN_LIMIT    0x0b
#define SHUTDOWN      0x0c
#define DISPLAY_TEST  0x0f

byte chip_select = 10; // spi chip select pin
byte display_num[6];  // array to hold our 6 digits

// standard 7 seg display numbers
byte number_seg[] =
{
  0b00111111,  // 0
  0b00000110,  // 1
  0b01011011,  // 2
  0b01001111,  // 3
  0b01100110,  // 4
  0b01101101,  // 5
  0b01111101,  // 6
  0b00000111,  // 7
  0b01111111,  // 8
  0b01100111,  // 9
  0b00111110,  // V
  0b01110111   // A
};

int analogPin = 3; // Potentiometer Schleifer am Pin A3
int val = 0; // Variable um Messergebnis zu speichern

void MAX7219Send(uint8_t address, uint8_t value)
{
  digitalWrite(chip_select, LOW);  // Ensure LOAD/CS is LOW
  SPI.transfer(address);  // Send the register address
  SPI.transfer(value);  // Send the value
  digitalWrite(chip_select, HIGH);  // Tell chip to load in data
}

void setup()
{
  pinMode(chip_select, OUTPUT); // chip select
  Serial.begin(9600);
  SPI.begin();

  // set up max7219
  MAX7219Send(DISPLAY_TEST, 0x01);
  MAX7219Send(DECODE_MODE, 0x00);  // Disabled BCD mode
  MAX7219Send(INTENSITY, 0x02);  // brightness
  MAX7219Send(SCAN_LIMIT, 0x07);  // Scan
  MAX7219Send(SHUTDOWN, 0x01);  // Turn on chip

  delay(1000);
  MAX7219Send(DISPLAY_TEST, 0x00);
  anzeige(0, 0);
}
void anzeige(word x , byte A_V) { // A_V für die Einheit

  display_num[0] = A_V;              // 6 stellig  reHand
  display_num[1] = (( x / 1) % 10);
  display_num[2] = (( x / 10) % 10);
  display_num[3] = (( x / 100) % 10);
  display_num[4] = (( x / 1000) % 10);
  display_num[5] = (( x / 10000) % 10); //         liHand

  for (byte segment = 1; segment <= 8; segment++)
  {
    // build the byte to send
    byte pos = 0b00000000;
    for (byte digits = 0; digits < 6; digits++)
    {
      // die ausgewählte Zahl angezeigt wird das Segmentbit an der akt. Pos von 'Segment' angezeigt
      bool seg = number_seg[display_num[digits]] & (0b00000001 << (segment - 1) );
      //                    |- hier kommt die Zahl rein
      //set this bit in our pos byte
      pos = pos | (seg << digits);

      MAX7219Send( segment, pos);
    }
    delay(5);
  }

}

void loop() {
  val = analogRead(analogPin); // Eingang auslesen
  anzeige(val , 11);
  delay(3000);

  val = val * 5;
  anzeige(val , 10);
  delay(3000);
}

Und hier die Schaltung dazu
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2021, 21:09
Beitrag #2
RE: MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
Mir scheinen die Anschlüsse der Digits und der Segmente im Schaltplan vertauscht zu sein. Und wozu könnte der Pin mit der Bezeichnung "SEGDP" am MAX7221 gut sein?

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2021, 21:30
Beitrag #3
RE: MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
...ja das ist wieder mal so eine spezielle Aufgabe Herr TO...
Wenn man Treiber wie den MAX7221 der für 7 Segment LED's ausgelegt ist die eine gemeinsame Kathode haben dann sollte man auch solche Displays dazu verwenden...einfach die Anschlüße vertauschen ist dann wohl nicht so leicht händelbar. Und dann scheinheilig nach dem Dezimalpunkt fragen...Big GrinBig GrinBig Grin
Also bei dem ausgekochten Blödsinn bin ich raus Exclamation
Wie lange hast denn gebraucht um diesen Bären zu kreieren ???
bk Moderator


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollte dann liest euch bitte diese Anleitung durch.

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 10:21 (Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2021 10:53 von daja64.)
Beitrag #4
RE: MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
(28.01.2021 21:09)ardu_arne schrieb:  Mir scheinen die Anschlüsse der Digits und der Segmente im Schaltplan vertauscht zu sein. Und wozu könnte der Pin mit der Bezeichnung "SEGDP" am MAX7221 gut sein?
Sollte wohl so sein bei gemeinsame ANODEN.

Übrigens, da hier scheinbar kein Verständniss für meine Experiment bzw Bastelein gibt,
bitte diesen Thread löschen. Sorry aber das versteh ich unter Basteln.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 12:26
Beitrag #5
RE: MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
Bit 7 in number_seg[] bedient jeweils das 8. Segment in der 7 Segment Anzeige, den DP.
Somit sollte wenn du z.B.
Code:
0b00000110,  // 1
durch
Code:
0b10000110,  // 1.
ersetzt statt einer "1" eine "1." erscheinen. Analog dazu die anderen Ziffern.

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 12:49
Beitrag #6
RE: MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
(29.01.2021 10:21)daja64 schrieb:  ....
Übrigens, da hier scheinbar kein Verständniss für meine Experiment bzw Bastelein gibt,
bitte diesen Thread löschen. Sorry aber das versteh ich unter Basteln.

Ja weißt du...wenn du schon so eine "Bastelei" machst dann solltest die Gemeinde auch gleich darauf hinweisen das du da Hardwaretechnisch gesehen die Technik vergewaltigst. Ohne diese Ansage fühle ich mich als Elektronik Profi einfach VERARSCHT auf gut Deutsch wenn man dann so harmlose und hinterlistige Fragen stellt. Aber ich kuck dir gerne zu wie du es schaffst hier Integer Variablen auf den Displays darzustellen...weil die 7 Segment Informationen lassen sich nicht Stellenweise erzeugen bei dem Aufbau.... Viel Vergnügen dabei...
lgbk


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollte dann liest euch bitte diese Anleitung durch.

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 13:11
Beitrag #7
RE: MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
(29.01.2021 12:26)ardu_arne schrieb:  Bit 7 in number_seg[] bedient jeweils das 8. Segment in der 7 Segment Anzeige, den DP.
Somit sollte wenn du z.B.
Code:
0b00000110,  // 1
durch
Code:
0b10000110,  // 1.
ersetzt statt einer "1" eine "1." erscheinen. Analog dazu die anderen Ziffern.
Danke für den Tip, aber sorry das hatte ich vergessen am Beginn zu erwähnen diese Varante schreibt den Dp dann immer zu dieser Zahl.
Meine Bemühungen dieses Bit an der z.b. "diplay_num[3]" zu ändern waren bisher erfolglos, entweder leuchtet garnichts oder der Dp an allen Stellen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 14:17
Beitrag #8
RE: MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt
Es ist logisch dass der Dezimalpunkt bei allen Ziffern erscheint wenn du in number_seg[] bei allen Ziffern das 7. Bit auf 1 setzt.

Vorschlag:
Lege eine Variable "byte dp_pos = 0; // Dezimalpunktposition" an.
Dann musst du in einer Funktion ermitteln an welcher Stelle der Dezimalpunkt angezeigt werden soll und diesen Wert in "dp_pos" ablegen.
Dann "void anzeige(...)" um eine Zeile ergänzen.
Code:
void anzeige(word x , byte A_V) { // A_V für die Einheit

  display_num[0] = A_V;              // 6 stellig  reHand
  display_num[1] = (( x / 1) % 10);
  display_num[2] = (( x / 10) % 10);
  display_num[3] = (( x / 100) % 10);
  display_num[4] = (( x / 1000) % 10);
  display_num[5] = (( x / 10000) % 10); //         liHand

  display_num[dp_pos] = display_num[dp_pos] | 0b10000000;  // Dezimalpunkt setzen

  for (byte segment = 1; segment <= 8; segment++)
...
Damit wir der Dezimalpunkt nur an der Ziffer gesetzt dessen Position du ermittelt hast.

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem Relaisplatine Maui 14 667 23.03.2021 15:20
Letzter Beitrag: hotsystems
  Problem mit "pow" awillib 9 674 27.02.2021 19:22
Letzter Beitrag: Tommy56
  Pwm Problem safitom 4 400 20.02.2021 12:14
Letzter Beitrag: safitom
  Problem mit "Keyboard" und "Mouse" LK2567 4 439 03.02.2021 16:11
Letzter Beitrag: MicroBahner
  const char zu int Konvertierung Problem Lumplux 1 295 02.02.2021 10:26
Letzter Beitrag: Lumplux
  Arduino Uno+ Ethernetshield W5100 Website Problem Justus S. 9 677 31.01.2021 17:37
Letzter Beitrag: Tommy56
  LCD via I2C Backlight-Problem Herby007 10 883 06.01.2021 14:46
Letzter Beitrag: Herby007
  OLED Bildschirm Problem JoeIsFame 79 2.982 04.01.2021 06:41
Letzter Beitrag: Bitklopfer
  Problem mit Variablen & Ergebnis rev.antun 11 764 26.11.2020 15:47
Letzter Beitrag: rev.antun
  Nextion Senden von Variablen Problem Tesla 10 1.138 08.11.2020 13:13
Letzter Beitrag: Tesla

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste