Forum: Mikrocontroller und Digitale Elektronik STM32 - Problem mit TPIC und SPI


von Peter (Gast)


Lesenswert?

Hallo,

ich habe da ein merkwürdiges Phänomen festgestellt:

Wenn ich den TPIC (5 hintereinander) über SPI ansteuere, dann werden die 
Daten einmal übernommen, aber ein anderes mal nicht.

Wenn ich nun folgendes mache,
1
uint8_t Ones[5] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
2
uint8_t Zeros[5] = {0x00, 0x00, 0x00, 0x00, 0x00};
3
4
while (1)
5
{
6
SPI_Write(Ones);
7
delay(500);
8
9
SPI_Write(Zeros);
10
delay(500);
11
}

dann sollte der STM32 eigentlich die TPICS auf high und low schalten.
Macht er aber nicht: Es kommt einmal high und danach geht alles auf low, 
wo es dann auch bleibt.

Wenn ich aber folgendes mache,
1
while (1)
2
{
3
uint8_t Data[5]
4
5
for (i = 0; i < 5; i++) data[i] = 0xFF;
6
SPI_Write(Data);
7
delay(500);
8
9
for (i = 0; i < 5; i++) data[i] = 0x00;
10
SPI_Write(Data);
11
delay(500);
12
}

dann wechselt er schön zwischen high und low - also genau so, wie es 
sein sollte.

Meine Frage lautet nun: Wo liegt das Problem?

Ich vermute, dass es irgendwie mit dem Speicher zu tun haben muss. Die 
SPI-Funktionen kann man wohl als Fehlerquelle ausschließen, würde ich 
sagen.

Da ich aber neu bin beim STM32 (bzw. allgemein beim ARM), bin ich im 
Moment etwas sprachlos.

Vielleicht kann mir ja jemand weiterhelfen.

Gruß Peter

von Falk B. (falk)


Lesenswert?

@ Peter (Gast)

>Wenn ich den TPIC

WELCHE? Da gibt es verdammt viele ICs, die mit TPIC anfangen!

>while (1)
>{
>SPI_Write(Ones);
>delay(500);

>SPI_Write(Zeros);
>delay(500);
>}

Grundfalsch. Wo wird das Chip Select angesteuert?

>Meine Frage lautet nun: Wo liegt das Problem?

Bei dir. Du missachtest die Netiquette. Poste mal einen Schaltplan 
und VOLLSTÄNDIGEN Code als Anhang.

>Ich vermute, dass es irgendwie mit dem Speicher zu tun haben muss. Die
>SPI-Funktionen kann man wohl als Fehlerquelle ausschließen, würde ich
>sagen.

Ich nicht.

von Karl H. (kbuchegg)


Lesenswert?

Peter schrieb:

> Die
> SPI-Funktionen kann man wohl als Fehlerquelle ausschließen, würde ich
> sagen.

Hast du die geschrieben?

Dann würde ich erst mal nichts ausschliessen.

Und wenn du sie nicht selbst geschrieben hast, dann frag dich mal woher 
die Funktion wissen soll, wie gross dein Datenarray ist. An dem was die 
Funktion bekommt, kann sie das nicht erkennen. Eine Funktion, die 
irgendwo ausgibt und als FUnktionsargument ein Array bekommt mit 
keinerlei Vorgaben woran die Funktion das Ende des Arrays erkennen kann, 
ist höchst ungewöhnlich. Da fingen bei mir sofort die Alarmglocken an zu 
leuten.

: Bearbeitet durch User
von Peter (Gast)


Lesenswert?

Falk B. schrieb:
> Grundfalsch. Wo wird das Chip Select angesteuert?

Karl H. schrieb:
> Und wenn du sie nicht selbst geschrieben hast, dann frag dich mal woher
> die Funktion wissen soll, wie gross dein Datenarray ist. An dem was die
> Funktion bekommt, kann sie das nicht erkennen.

Das ist doch nur symbolisch dargestellt, um die Unterschiede 
aufzuzeigen.
Einmal verwende ich zwei einmalig initialisierte Arrays. Und das andere 
Mal eben nur ein Array, der immer wieder neu geschrieben wird.

Chips Select und Datenlänge sind durchaus in den eigentlichen Funktionen 
vorhanden. Wobei bei den TPIC (was spuckt eigentlich Google aus bei 
TPIC?) 6b595 eh am Ende nur kurz ein Bitwackler benötigt wird.

Ich dachte, diese Informationen lassen erste Rückschlüsse zu. Da ich 
mich da wohl getäuscht habe, werde ich dann morgen mal den Hammer raus 
holen und die Dateien hochladen.

Dann aber keine Beschwerden es sei so viel zu Lesen.^^

Gruß, Peter

von Falk B. (falk)


Lesenswert?

@ Peter (Gast)

>Das ist doch nur symbolisch dargestellt, um die Unterschiede
>aufzuzeigen.

Was soll das? Mit solchem Käse kann NIEMAND etwas anfangen! Siehe 
Netiquette!!!

>Chips Select und Datenlänge sind durchaus in den eigentlichen Funktionen
>vorhanden. Wobei bei den TPIC (was spuckt eigentlich Google aus bei
>TPIC?) 6b595 eh am Ende nur kurz ein Bitwackler benötigt wird.

Na wenn das so ist, kannst du ja dein Problem spielend alleine finden.

von Wonko (Gast)


Lesenswert?

Peter schrieb:
> (was spuckt eigentlich Google aus bei TPIC?)

TPIC - Turkish Petroleum International Company Ltd.

und bei der Datenblattsuche

http://www.datasheetcatalog.com/datasheets_pdf/T/P/I/C/

über hundert verschiedene.

und Du verräts ja nichtmal welcher STM32. Zwischen dem F0 und F7 gibt es 
auch bei SPI ein paar kleine Unterschiede.

von Peter (Gast)


Lesenswert?

JUCHEI, ich habe den Fehler gefunden.

Vielen Dank für die freundliche Unterstützung!

Wonko schrieb:
> Peter schrieb:
>> (was spuckt eigentlich Google aus bei TPIC?)
>
> TPIC - Turkish Petroleum International Company Ltd.

Soso, und was spuckt die Suchfunktion von mikrocontroller.net aus?

Falk B. schrieb:
> @ Peter (Gast)
>
>>Wenn ich den TPIC
>
> WELCHE? Da gibt es verdammt viele ICs, die mit TPIC anfangen!

Wenn ich einen Kaffee-Haag trinke, dann fragt mich auch keiner wieviel 
Koffein da drinnen ist.

Ein bischen mitdenken wird schon vorrausgesetzt.

Gruß Peter

von Falk B. (falk)


Lesenswert?

@Peter (Gast)

>JUCHEI, ich habe den Fehler gefunden.

Und was war es?

https://www.mikrocontroller.net/articles/Netiquette#Happy_End

>Ein bischen mitdenken wird schon vorrausgesetzt.

Hellsehen ist aber immer noch nicht so weit verbreitet.

https://de.wikipedia.org/wiki/Kommunikation#Kommunikationsprobleme

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.