Forum: Mikrocontroller und Digitale Elektronik MM5450 driver mit Atmega8


von Sabri H. (sabri_h)


Lesenswert?

Hallo,

Ich hab mir einen MM5450 (Datenblatt:
http://www.micrel.com/_PDF/mm5450.pdf) gekauft und an meinen Atmega8
angeschlossen:

Mein problem ist: ich habe 5 (pc0 bis pc4)  data leitung und  pd7 clock
Und zum Testen habe ich mal nur 5 dot matrix und zwar an OUTPUT
des MM5450  angeschlossen. dh pc0 fuer 1 dot matrix ,pc1 fuer 2 
dotmatrix ...
Mein problem :ich habe die erste 5*7 dot matrix geschaft zu starten 
aber fuer den rest ,ich weiss  nict wie es geht wieter. im datenblat 
steht dass ,mm5450 sorgt fuer eine multplixung
 danke im voraus
C code :
#define F_CPU   16e6            // 16MHz

#include <avr/io.h>
#include <util/delay.h>

//                      Access bits like variables:
struct bits {
  uint8_t b0:1;
  uint8_t b1:1;
  uint8_t b2:1;
  uint8_t b3:1;
  uint8_t b4:1;
  uint8_t b5:1;
  uint8_t b6:1;
  uint8_t b7:1;
} __attribute__((_packed_));

#define SBIT_(port,pin) ((*(volatile struct bits*)&port).b##pin)
#define SBIT(x,y)       SBIT_(x,y)


#define DAT             SBIT( PORTC, PC0 )
#define DAT_DDR         SBIT( DDRC,  PC0 )
#define CLK             SBIT( PORTB, PB0 )
#define CLK_DDR         SBIT( DDRB,  PB0 )


void mm5450_wr( uint8_t num, uint8_t val )
{
  do{
    CLK = 0;
    DAT = 0;
    if( val & 0x01 )            // LSB zuerst
      DAT = 1;
    val >>= 1;
    _delay_us( 1 );             // MM5450 ist schnarchlahm (0,5MHz)
    CLK = 1;
    _delay_us( 1 );             // MM5450 ist schnarchlahm (0,5MHz)
  }while( --num );
    CLK = 0;
}

int main( void )
{
  CLK_DDR = 1;
  DAT_DDR = 1;
  mm5450_wr( 35, 0 );           // bringe MM5450 in definierten 
Anfangszustand

  for(;;){
    mm5450_wr( 1, 1 );          // startbit
    mm5450_wr( 8, 0xFF );       // Bit 1..8 = ein
    mm5450_wr( 8, 0xFF );       // Bit 9..16 = ein
    mm5450_wr( 8, 0xFF );       // Bit 17..24 = ein
    mm5450_wr( 8, 0xFF );       // Bit 25..32 = ein
    mm5450_wr( 3, 0x07 );       // Bit 33..35 = ein
    _delay_ms( 1000 );

    mm5450_wr( 1, 1 );          // startbit
    mm5450_wr( 8, 0x00 );       // Bit 1..8 = aus
    mm5450_wr( 8, 0x00 );       // Bit 9..16 = aus
    mm5450_wr( 8, 0x00 );       // Bit 17..24 = aus
    mm5450_wr( 8, 0x00 );       // Bit 25..32 = aus
    mm5450_wr( 3, 0x00 );       // Bit 33..35 = aus
    _delay_ms( 1000 );
  }
}

von Peter D. (peda)


Lesenswert?

Sabri H. schrieb:
> im datenblat
> steht dass ,mm5450 sorgt fuer eine multplixung

Nö.

Wenn Du multiplexen willst, muß das in SW erfolgen (Timer-Interrupt).

von Sabri H. (sabri_h)


Lesenswert?

Also wie wurde das gemacht ?können sie mir helfen ich bin ganz 
verzweifelt .

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.