Forum: Mikrocontroller und Digitale Elektronik LED Matrix (MAX6953) über I²C bus ansteuern


von Max0815 (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine Platine mit 4x 5x7 LED Matrix Elementen erstellt und 
möchte diese testen. Da ich mich momentan noch in der Ausbildung befinde 
hab ich noch keine Ahnung vom Programmieren.

Ich benutze Atmel Studio 6.1 mit einem Atmega16 auf dem STK500
Max6953 als Matrix Treiber
Ansteuerung mittels I²C Bus

Ich bräuchte einen Quelltext zum testen.
Was angezeigt wird ist mir egal.

Bitte helft mir.

Danke

von Björn H. (firefunk)


Angehängte Dateien:

Lesenswert?

Hi zusammen,

ich habe mal das Datenblatt vom MAX6953 LED Matrix Treiber angehängt.
Außerdem findet ihr den Schaltplan und auch meine Main Datei die ich mir 
zusammen gereimt habe. Habe es aber nach wie vor nicht hinbekommen das 
da was leuchtet.
Die LED´s vom STK500 leuchten aber am Display halt nicht.
Auf den I2C Bus Leitungen kann ich auch mittels Osci nix messen...
Bitte helft mir - ich check´s nicht.

von holger (Gast)


Lesenswert?

>Auf den I2C Bus Leitungen kann ich auch mittels Osci nix messen...

Pullups vergessen?

von Björn H. (firefunk)


Angehängte Dateien:

Lesenswert?

Ja die hatte ich vergessen...
Jetzt habe ich angehängtes Signal am Osci.
Bei 0,5us pro Division entspricht das einem Takt von 1MHz. Ich habe aber 
eigentlich 100kHz im i2cmaster.c eingestellt.  Außerdem sind das nur 
60mVss - am Display tut sich immer noch nix.

von Karl H. (kbuchegg)


Lesenswert?

Dann fang mal damit an, deinen Code in einer vernünftigen Form zu 
posten. PDF ist völlig ungeeignet.
1
#include "i2cmaster.h"
2
#include <util/delay.h>
3
#include <avr/io.h>
4
5
#define Dev24C02 1010000 // Display Adresse (AD1=GND AD0=GND) siehe Datenblatt S.10
6
7
int main(void)
8
{
9
  _delay_ms (5000); // 5 Sekunden Verzögerung
10
  i2c_init(); // initialize I2C library
11
12
  while(1) // Endlosschleife
13
  {
14
    DDRB = 0xFF; // PB0PB7 auf Ausgang (STK500)
15
    PORTB = 0x00; // LED´s 07 ein (STK500)
16
    i2c_start_wait(Dev24C02+I2C_WRITE); // Display Adresse + 0 für schreiben
17
    i2c_readAck(void); // warten auf Acknowledge vom Display
18
    i2c_write(0x07); // Command Byte 0x07 für Display Test siehe Datenblatt S. 11 (alle LED´s an)
19
    i2c_readAck(void); // warten auf Acknowledge vom Display
20
    i2c_write(0x00); // Data Byte 0x00 für Display Helligkeit 1/16 min on (siehe Datenblatt S. 12)
21
    i2c_readAck(void); // warten auf Acknowledge vom Display
22
    i2c_stop(void); // ende
23
  }
24
  return 0;
25
}

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

Das hier
> #define Dev24C02 1010000 // Display Adresse (AD1=GND AD0=GND) siehe
ist keine Binärzahl.

Wenn schon binär, dann
#define Dev24C02 0b01010000

Aber eigentlich ist es reichlich unsinnig, sowas in binär anzugeben.

von holger (Gast)


Lesenswert?

>> #define Dev24C02 1010000 // Display Adresse (AD1=GND AD0=GND) siehe
>ist keine Binärzahl.
>
>Wenn schon binär, dann
>#define Dev24C02 0b01010000

Laut Datenblatt dann auch

#define Dev24C02 0b10100000

Hier

i2c_start_wait(Dev24C02+I2C_WRITE);

wird nicht eine Null an die Zahl hinten drangehängt;)

von Björn Hiekel (Gast)


Lesenswert?

Schon mal vielen Dank!

Hab jetzt an beide Enden vom Bus die Pull-Up´s eingebaut und siehe da es 
tut sich was...
Das Display habe ich auch schon mal zu "glimmen" bekommen.
Nur irgendwie läuft es noch nicht ganz so wie ich will...


Das ist der aktuelle Code:

#include "i2cmaster.h"
# define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/io.h>

#define Dev24C02  0xA0        // Display Adresse (AD1=GND AD0=GND) siehe 
Datenblatt S.10

int main(void)
{
  _delay_ms(1000);          // 1 Sekunden Verzögerung

  i2c_init();
                            // initialize I2C library

 DDRB  = 0xFF;              // PB0-PB7 auf Ausgang (STK500)
 PORTB = 0x00;              // LED´s 0-7 ein (STK500)


while(1)
{


  i2c_start_wait(Dev24C02+I2C_WRITE);    // Display Adresse + 0 für 
schreiben

  i2c_write(0x07);                        // Command Byte 0x07 für 
Display Test siehe Datenblatt S. 11 (alle LED´s an)

  i2c_write(0x07);                        // Data Byte 0x07 für Display 
Test (siehe Datenblatt S. 12)

  i2c_stop();

}

return 0;
}

von Björn H. (firefunk)


Angehängte Dateien:

Lesenswert?

Anbei die Bus Signale von SCL und SDA.

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.