Hall an alle
Ich versuch seit letzte Woche vergeblich den Max7221 mit dem Mega88 über SPI ansteuern. Leider werden all Digits eingeschalten.
Viellechr kann mir wer helfen
Hier der Code:
Code:
int main (void)
{
DDRC &= ~(1 << 1);
spi_init();
i2c_init();
segments_init();
adc_init();
spi_senden(0x0A, 0x0C); //Helligkeit
show_temp();
while(1)
{
PORTC^= (1 << 1);
delay(1000);
}
return 0;
}
void spi_init (void)
{
DDRB = ((1 << PB3) | (1 << PB5) | (1 << PB2)); //MOSI, SCK, SS Output, alle anderen Input
PORTB &= ~((1 << PB3) | (1 << PB5) | (1 << PB2));
SPCR = ((1 << SPE) | (1 << MSTR));
}
void spi_senden (uint8_t adress, uint8_t data)
{
PORTB &= ~(1 << PB2); //SS auf Low
SPDR = adress;
while (!(SPSR & (1 << SPIF))); //warten bis gesendet
SPDR = data;
while (!(SPSR & (1 << SPIF))); //warten bis gesendet
PORTB |= (1 << PB2); //SS auf high
}
void segments_init(void)
{
spi_senden(0x0B, 0x05); //6 Digits 0-5
spi_senden(0x0F, 0x00); //Display Test ausschaltren
spi_senden(0x0C, 0x01); //Normal Operation
spi_senden(0x09, 0xFF); //BCD Code für alle Digits
}
void show_temp(void)
{
uint8_t temp, nachkomma, zehner, einer;
readfromLM75(&temp, &nachkomma);
zehner = temp / 10;
einer = temp % 10;
spi_senden(0x09, 0x00); //Disable BCD Code
spi_senden(0x01, 0x4E); //C
spi_senden(0x02, 0x63); //°
spi_senden(0x09, 0xFF); //Enable BCD for all Digits
spi_senden(0x04, nachkomma);
spi_senden(0x05, einer);
spi_senden(0x06, zehner);
}
An den Segementanzeigen sollte eigentlich die Temperatur, die über einen LM75 Temperatursensor ausgelesen wird angezeigt werden.
Danke im Voraus
Gruß Robert
Lesezeichen