- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: Max 7221 über SPI ansteuern --> Probleme :(

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2006
    Ort
    Gratkorn
    Alter
    34
    Beiträge
    207

    Max 7221 über SPI ansteuern --> Probleme :(

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Hmm, ich wäre vorsichtig mit dem SS Pin ...

    Da gabs glaube ne Besonderheit ...
    Schau mal im Datenblatt nach, mir ist jedenfalls so, als wenn der SS Pin nach Möglichkeit nicht auf L gezogen werden sollte.

    Ansonsten könnte s noch helfen an die adresse 0x0A den Wert 0x0F zu schreiben ..

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2006
    Ort
    Gratkorn
    Alter
    34
    Beiträge
    207
    Hat leider nichts gebracht

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Das SPIF-Flag muss zurückgesetzt werden nach dem Senden. Ist etwas anders als mit den anderen AVR-Flags, steht aber im Hadbuch unter SPI.

    Die Port-Richtungen brauchen nicht explizit gesetzt werden, das macht schon dieAVR-Hardware für dich. Ausnahme ist SS. Das muss explizit auf OUT. (Ansonsten wirst du Slave wenn es LOW geht).

    Stimmen die Flanken?

    Bist du sicher, daß der Slave lauscht, wenn SS auf LOW ist? Etwas seltsam das...

    Ist der Baustein SPI-kompatibel? Oder steht irgendwo im Kleingedruckten so was wie "almost SPI-compatible"?
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2006
    Ort
    Gratkorn
    Alter
    34
    Beiträge
    207
    Hallo Georg Johann,

    Ja SS muss auf low sein.

    Chip-Select Input. Serial data is loaded into the shift register while CS is low. The last 16 bits of
    serial data are latched on CS’s rising edge.
    Das ist der Kommentar zum CS Pin (Der ist mit SS verbunden)

    Wo steht das, dass ich die Flags rücksetzen muss? Bei den Beispielen im Datenblatt fine ich nichts dazu.

    Gruß Robert

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Steht irgendwo bei der Registerbeschreibung am Ende des Kapitels, beim SPIF-Flag eben.
    Disclaimer: none. Sue me.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen