www.mikrocontroller.net

Forum: Compiler & IDEs Max 7221 über SPI ansteuern --> Probleme :(


Autor: Robert Schilling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Kalchgruber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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?

Autor: Robert Schilling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Kalchgruber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.