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.