SPI 16 Bit senden

#3971217
Lesenswert?

Hallo,

ich habe gerade ein kleines Problem mit meinen TLC59281 
(http://www.ti.com/lit/ds/symlink/tlc59281.pdf). Ich hatte zuvor in der 
Schaltungen 2 HC595 (deshalb auch im Code noch falsche Namen) im 
Einsatz. Nun habe ich diese gegen den besagten TLC59281 ausgetauscht.

Ich bekomme nun aber das Problem, dass sich mein Controller (attiny841) 
resettet, sobald ein paar Daten übertragen wurden über SPI. Kommentiere 
ich die Zeilen innerhalb dieser Funktion aus, kommt es zu keinem Reset.
1
{
2
  HC595_PORT &= ~(1<<HC595_SS);
3
  for(uint8_t i = 0; i < HC595_NUM_REG; i++)
4
  {
5
    SPDR = hc595_array[i];
6
    while(!(SPSR & 1<<SPIF));
7
  }
8
  HC595_PORT |= 1<<HC595_SS;
9
}

Das hc595_array ist als byte defeniert. Falls es nicht ausreicht, ich 
kann den Code gleich noch ausdünnen und komplett schicken.

Beschaltet ist der TLC wie im Datenblatt auf Seite 1 angegeben, ohne 
jedoch SOUT wieder einzulesen.

Gruß Stefan
#3971243
Lesenswert?

Habe es nun noch einmal einzeln getestet und etwas umgeschrieben. Das 
geht. Wird dann wohl doch irgendwo ein Problem bei meinem Programm 
selber und nicht mit den TLCs sein.

So, denke ich habe den Übeltäter gefunden.
1
void leds_flash(void)
2
{
3
  static uint8_t pattern = 0xff;
4
  serpa_one_byte(0, pattern);
5
  serpa_one_byte(1, pattern);
6
  pattern = ~pattern;
7
}

Was kann hier falsch sein? Die Funktion wird über eine Zeitkonstante 
aufgerufen und soll ihren Wert jedesmal invertieren.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren