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 );
}
}