SPI Ansteuerung TMC429

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

Re: SPI Ansteuerung TMC429

 · 
Posted: 23.03.2013 - 01:34  ·  #17
schade daß es daran net liegt ...

aber der SPI-Treiber funzt soweit, hab mir grade vor 14 Tagen nen FAT-16-Treiber (hat meine etwas angejahrte Compilerversion noch nicht) für SD-Karte selbstgeschrieben, und da ging der auf Anhieb.

Joi, die Ports werden alle im system.reset richtig gesetzt ... man muß nur ab und an aufpassen wenn man im initports einfach hart drüberschreibt ....
hab mir angewöhnt dann entweder draufzuodern oder -unden .. oder ich schau ins ASM-File und guck was der Treiber da tut und übernehme das

hab hierbei übrigens erstmals erfahren daß man in Binärkonstanten Leerfelder reinmachen darf .... bisher nie probiert, ist aber gut für die Lesbarkeit.
Harald_K
 
Avatar
 
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 23.03.2013 - 23:26  ·  #18
ich nochmal ...

also laut Datenblatt müßte CPOl und CPHA auf 1 .... sprich Clock im idle auf 1 (dann auch den PortB passend high setzen im initport) und auf erste Flanke Daten anlegen und auf 2te Flanke Daten einlatchen.

Taktfrequenz für den SCK sollte bei 16MHZ trinamic bei 1 MHz liegen .. (steigende Flanke wird scheints ab dem 4ten Taktzyklus erkannt, der Rest ist Sicherheit, besonders das Datenausgeben des Trinamic scheint nach der fallenden Flanke recht lange zu dauern und muß ja bis zur steigenden da sein ..... )

laut trinamic muß der SCK high sein bevor der SS auf low geht und wieder high sein bevor der SS auch high wird.
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 24.03.2013 - 05:38  ·  #19
hallo helmut,
ich habe gerade gesehen, daß in meinem beispielsource, den ich da schnell hingeschrieben hab, die Bitangabe bei TMCInData fehlt :

if TMC_DataIn = true then incl(TMCInData,bitz);
else excl(TMCInData); endif;

muss natürlich heißen:

if TMC_DataIn = true then incl(TMCInData,bitz);
else excl(TMCInData,bitz); endif;

ich hoffe nicht noch mehr Fehler, weiterhin ungetestet

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

Re: SPI Ansteuerung TMC429

 · 
Posted: 25.03.2013 - 21:41  ·  #20
Hallo Zusammen,

anbei ein Zwischenbericht.

Mit der manuellen Methode von golf, die ich fast 1:1 umgesetzt habe, ist es mir gelungen die ersten Daten zu schreiben und zu senden. Ich bin sicherheitshalber mal auf einen anderen Port gegangen und vom Timing her sehr langsam dran gegangen.

Das bisherige Ergebniss sieht so aus:
Code
....
  TMC_CS[@PortD, 0]     : Bit;                   
  TMC_DataOut[@PortD, 1]: Bit;                   
  TMC_DataIn[@PinD, 2]  : Bit;                  
  TMC_Clk[@PortD, 3]    : Bit;                  
  TMC_OutData    : LongWord;
  TMC_InData     : LongWord;
....

procedure TMC_Manual;
var
  bitz           : byte;              // Bitzähler
  pause          : byte;
begin
  Pause := 20;
  excl (TMC_CS);
  udelay(pause);               
  bitz:= 31;

  repeat
    excl (TMC_Clk);
    if Bit(TMC_OutData, bitz) = true
    then
      incl(TMC_DataOut);
    else
      excl(TMC_DataOut);
    endif;
    udelay(pause);                    
    incl (TMC_Clk);
    if   TMC_DataIn = true
    then
      incl(TMC_InData, bitz);
    else
      excl(TMC_InData, bitz);
    endif;
    udelay(pause); 
    dec (bitz);
  until bitz = 255;                                                       // ende nach 0 Unterlauf
  udelay(pause);                    
  incl (TMC_CS);
  udelay(pause);                    
end;

....

begin
  InitPorts;
  EnableInts;
  Decoderadresse := 0;
  mdelay (1000);

  TMC_OutData := %0 00 0000 0 00000000 00000000 00000000;                       // Schreiben
  TMC_Manual;
  mdelay (1000);

  loop
    TMC_OutData := %0 11 1001 1 00000000 00000000 00000000;                     // Auslesen
    TMC_Manual;

    TMCStatus := Hi (HiWord (TMC_InData));
    High      := Lo (HiWord (TMC_InData));
    Mid       := Hi (LoWord (TMC_InData));
    Low       := Lo (LoWord (TMC_InData));

    //Ausgabe der gelesenen Werte
    SchreibeKanal (Decoderadresse + 4, Low);
    SchreibeKanal (Decoderadresse + 3, Mid);
    SchreibeKanal (Decoderadresse + 2, High);
    SchreibeKanal (Decoderadresse + 1, TMCStatus);

  endloop;
end Drehscheibe_spi.


Das Ergebnis ist die sehnsüchtig erwartete Bitfolge $429101

Ohne das erste Schreiben einer (beliebigen) Bitfolge kommt jedoch nichts sinvolles.
Jetzt kann die Arbeit beginnen.

Herzlichen Dank zusammen.

Helmut
Harald_K
 
Avatar
 
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 25.03.2013 - 21:55  ·  #21
jetzt mußte nur noch den tmc auf ne vernünftige Taktrate drehen, dann geht das auch mit dem SPI. (bei 1,25MHz TMC und 20MHz Atmel langt das eigentlich nie)

du mußt den SCK auf 1/4 der TMC-Taktfrequenz bringen damit dessen internes Timing die Daten 3 1/2 TMC-Clocks nach der fallenden SCK-Flanke grade noch rechtzeitig (1/2 TMC-CLock) vor der steigenden (und damit lesenden) SCK-Flanke rausbringen kann.

warum das beim Status trotzdem funzt .. keine Ahnung. kannst aber mal prüfen ob der Status vielleicht 1 Bit versetzt ankommt? - das kann nämlich laut TMC-Datenblatt sehr leicht passieren.
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 26.03.2013 - 17:32  ·  #22
Hallo Harald,

den TMC habe ich inzwischen auf 20MHz. Hat aber mit der HardwareSPI keine Änderungen gebracht.

Einen Verstz habe ich weder bei der manuellen(golf) noch bei der (alten) HardwareSPI Methode.

An dem Timing drehe ich sobald ich etwas Zeit habe. Sicherlich nicht mehr vor Ostern.

Helmut
  • 1
  • 2
  • 3
  • Page 3 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   108   122 · Page-Gen-Time: 0.059413s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI