SPI Ansteuerung TMC429

  • 1
  • 2
  • 3
  • Page 2 of 3
Harald_K
 
Avatar
 
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 19.03.2013 - 23:13  ·  #9
Achja .. den SS mußt du auf alle Fälle als Ausgang programmieren .. wenn du den auf EIngang stellst weil du den Portpin anders nutzen willst schaltet ggf. das SPI-Interface des Prozessors auf Slave-Betrieb um.
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 20.03.2013 - 20:34  ·  #10
Hallo zusammen,

ich habe (glaube ich) alles probiert (auch wenn es mir nicht sinvoll erschien) und komme nicht weiter:

- Takt des TMC auf 20MHz erhöht
- SPI_SS auf manuell und erst nach kurzer Verzögerung die 4 x SPIInOutByte abgerufen
- Pegel auf allen Leitungen des SPI Bus mit Oskar überprüft (es sind Peaks zuerkennen)
- Alle Kombinationsmöglichkeiten von SPIcpol und SPIcpha getestet
- an SPIpresc gedreht (geht immer bis auf bei presc=0)

Es bleibt leider dabei:
Die ersten 8 bit (Status der immer kommt) kann ich lesen.
Bei den restlichen 24 bit kommt mehr oder weniger reproduzierbarer Unsinn.

Es bleibt leider bisher bei meiner Vermutung das der TMC aus welchen Gründen auch immer nicht erkennt welche Adresse ich lesen oder schreiben will.

Irgendeine Kleingkeit muss ich übersehen haben.

MFG

Helmut
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1408
Registered: 03 / 2005
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 20.03.2013 - 21:30  ·  #11
Hi Helmut.

How is SchreibeKanal defined?
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 21.03.2013 - 09:13  ·  #12
Hallo Helmut,
ich würde das jedenfalls zunächst mal direkt ohne den SPItreiber probieren.
Evtl liegts an einem Timingproblem. so was ähnliches wie:

TMC_CS[@PortB,2] : bit; // Pins als Beispiele
TMC_DataOut[@PortB,3] : bit;
TMC_DataIn[@PortB,4] : bit;
TMC_Clk[@PortB,5] : bit;
TMCOutData,TMCInData : longword;
bitz: byte; // Bitzähler

// in InitPorts : DDRB:= xx1011xx incl (TMC_Clk); incl (TMC_CS);

procedure TMC429; //
begin
excl (TMC_CS);
udelay(1); // Delays jeweils noch anzupassen
bitz:=31;

repeat
excl (TMC_Clk);
if bit(TMCOutData,bitz)=true then incl(TMC_DataOut);
else excl(TMC_DataOut);
endif;
udelay(1); // Delays jeweils noch anzupassen
incl (TMC_Clk);
udelay(1); // Delays jeweils noch anzupassen
if TMC_DataIn = true then incl(TMCInData,bitz);
else excl(TMCInData);
endif;
udelay(1); // Delays jeweils noch anzupassen
dec (bitz);
until bitz=255;

incl (TMC_CS);
udelay(1); // Delays jeweils noch anzupassen

end TMC429;

(ungetestet)

golf
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 21.03.2013 - 17:52  ·  #13
Hallo golf,

ich glaube auch das ist mal ein Ansatz. Da werde ich mal in aller Ruhe mit beschäftigen.

Hi Merlin,

you have mail.

MFG

Helmut
Harald_K
 
Avatar
 
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 21.03.2013 - 20:22  ·  #14
also ich glaub ich seh die Macke:

ausschnitt aus deinem code:
---schnipp
procedure InitPorts;
begin
PortB:= %0000 1011; // PulUp bei Input Wert bei Output
DDRB:= %0011 0100; // 1 = Output
---schnapp

so .. und nun mal die Signalbelegung vom PortB:
nc / nc / SCK / MISO / MOSI / SS / nc / nc
und deine Richtungen:
0 0 1 1 0 1 0 0
und die Pullups/Pegel dazu:
0 0 0 0 1 0 1 1
so .... dein MasterIN_SlaveOUT ist output, dein MasterOUT_Slave_IN ist input mit Pullup .....

und irgendwie gehört das andersrum denk ich mal .....

vom Compiler her wird zuerst im Reset der SPI eingerichtet, dann kommt im Hauptprogramm dein Initports ....



jaja, manchmal sieht man den Wald vor lauter Bäumen nicht, geht mir auch ab und an mal so beim Programmieren ...
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 22.03.2013 - 21:02  ·  #15
Hallo Harald,

zuerst wr ich davon augegangen das der Treiber die Ports selber setzt. Inzwischen bin ich mir da auch nicht mehr so sicher.

Vor Deiner Nachricht hatte ich PortB schon wie folgt geändert:

PortB:= %0001 0011; // PulUp bei Input Wert bei Output
DDRB:= %0010 1100; // 1 = Output

also wenn ich nicht wieder einen Dreher drin habe:
SCK = Out
MISO = In
MOSI = Out
SS = Out
Die ganzen Tests mit Oscar und den verschiedenen Varianten von SPIcpol, SPIcpha und SPIpresc hatte ich bereits mit den veränderten Werten gemacht.
Wie bereits geschrieben erhalte ich beim Auslesen des ersten Bytes (Status) das vom TPM immer gesendet wird egal auf welche Adresse gesendet oder geschrieben wird sowohl vor als auch nach der Veränderung von DDRB immer sinvolle Werte, die sich durch das Betätigen der Endschalter auch ändern und bei den folgenden 3 Bytes nur (reproduzierbaren) Schrott.
Das deute für mich darauf hin, das ich an der Stelle nicht weiter suchen muss.

Nach Deiner Mail hatte ich mal wieder Hoffnung dass es einfach geht.
Jetzt werde ich mich wohl mal intensiv mit der Variante von golf beschäftigen.

Danke für die Mühe und schon mal ein schönes Wochenende

Helmut
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 22.03.2013 - 21:46  ·  #16
Hallo Helmut,

der AVRco SPI Treiber setzt alle zugehörigen Ports und Bits korrekt.
Da braucht man nichts zu manipulieren oder .nitialisieren.

rolf
  • 1
  • 2
  • 3
  • Page 2 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.033852s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI