Forum: Mikrocontroller und Digitale Elektronik SPI 16 Bit senden


von Stefan S. (sschultewolter)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> Kommentiere ich die Zeilen innerhalb dieser Funktion aus, kommt es zu
> keinem Reset.
Hast du den Watchdog aktiviert? Mit welcher Zeit? Welchen Wert hat 
HC595_NUM_REG?

von Stefan S. (sschultewolter)


Lesenswert?

Hallo Lothar,

Watchdog ist nicht aktiviert. HC595_NUM_REG hat den Wert 2. Ich teste 
gerade meine Libary einzeln ohne das ganze Hauptprogramm

von Stefan S. (sschultewolter)


Angehängte Dateien:

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.

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
Noch kein Account? Hier anmelden.