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:
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
> Ich versuch seit letzte Woche vergeblich den Max7221 mit dem Mega88 > über SPI ansteuern. Leider werden all Digits eingeschalten. Was bekommst den als Anzeige wenn, Du keine Ziffen ausgibst? (nur segments_init) es sollten nur die DP leuchten... Kontrolliert ob MOSI wirklich mit DIN von MAX7221 verbunden? /Koarl Ps: wieso schaltest den BCD-Code ein aus? und nicht nur für die verwendeten Stellen?
Hallo Koarl Werde das nachher testen. Ich habe6 Digits bei meinem Digitaluhrprojekt. 6 Ziffern für HH:MM.SS. Weitewr s soll die Uhr auch eine Temperaturmessung übernehmen und die Temperatur auch anzeigen. (Tastendruck) Für die Uhr brauch ich den BCD Code. Wenn ich aud Temperaturmessung umschalte, brauch aber ° und C. Die beiden Zeichen gehören aber nicht zum BCD Code ;) Gruß Robert
Hallo, jetzt hab ich mir mal Deinen Code genauer angeschaut! (programmiere aber selber keine AVR) Was mir dabei aufgefallen ist beim SPI-Init legst SS (ist mit /CS vom MAX verbunden?) auf LOW! Damit hast wenn Du den ersten Befehl an den MAX schickst keine fallende Flanke beim /CS. Sollte zwar kein Problem sein da dazwischen keine SPI-CLK Impulse kommen. Aber es ist 'unschön' & macht vielleicht Probleme... /Koarl
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.