Hallo Zusammen,
ich habe Probleme beim Ansprechen des Schritmotorcontrollerts TMC429 von Trinamic.
Wenn ich mit dem (inzwischen sehr weit gekürzten) Programm versuche ein Register über die SPI Schnittstelle zu lesen krige ich nur beim Status Byte einen vernünftigen Wert, der sich auch sinnvoll ändert wenn ich einen der Endschalter betätige.
Das Verhalten ist vollig gleich, egal welches Register ich zu lesen versuche.
Irgendwo scheine ich einen grundsätzlichen Fehler zu haben der verursacht, das ich vermutlich immer das gleiche mir unbekannte Register lese.
Für den Fall. das jemand Hardwarefehler vermutet habe ich auch einen (abgestrippten) Schaltplan beigelegt. Der TMC wird zur Zeit noch von einem externe Taktgenerator mit einem Rechtecksignal von 1,25 MHZ versorgt.
Ich würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte.
Mit freundlichen Grüßen
Helmut
program Drehscheibe_spi;
Device = mega88, VCC = 5;
{ $BOOTRST $00C00} {Reset Jump to $00C00}
Import SysTick, SPIdriver;
Define
ProcClock = 20000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0032, iData;
FrameSize = $0032, iData;
SwitchPort1 = PinB, %00111000;
PolarityP1 = %00000000; {polarity}
SPIpresc = 3;
SPIOrder = MSB;
SPIcpol = 0;
SPIcpha = 0;
SPI_SS = true; // false; NotSS = nSCS_C
Implementation
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
Decoderadresse : byte;
Eingang : byte;
SS_Manual [@PortB, 2] : Bit;
Low : byte;
Mid : byte;
High : byte;
TMCStatus : byte;
{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
PortB:= %0000 1011; // PulUp bei Input Wert bei Output
DDRB:= %0011 0100; // 1 = Output
PortC:= %0000 0011;
DDRC:= %0011 1111;
PortD:= %0000 0000;
DDRD:= %0000 0011;
end InitPorts;
{
....
}
{------------------------------------------------------------------------------}
//SPI Spezifische Sachen
{------------------------------------------------------------------------------}
procedure Select_428;
begin
SS_Manual := 0;
uDelay_1 (20);
end;
{------------------------------------------------------------------------------}
procedure DeSelect_428;
begin
SS_Manual := 1;
end;
{------------------------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
InitPorts;
EnableInts;
loop
Eingang := %0 11 1001 1;
// Select_428; // Falls SPI_SS = false
TMCStatus := SPIInOutByte(%0 11 1001 1);
High := SPIInOutByte(0);
Mid := SPIInOutByte(0);
Low := SPIInOutByte(0);
// DeSelect_428; // Falls SPI_SS = false
//Ausgabe der gelesenen Werte
SchreibeKanal (Decoderadresse + 4, Low);
SchreibeKanal (Decoderadresse + 3, Mid);
SchreibeKanal (Decoderadresse + 2, High);
SchreibeKanal (Decoderadresse + 1, TMCStatus);
mdelay (1000);
endloop;
end Drehscheibe_spi.
ich habe Probleme beim Ansprechen des Schritmotorcontrollerts TMC429 von Trinamic.
Wenn ich mit dem (inzwischen sehr weit gekürzten) Programm versuche ein Register über die SPI Schnittstelle zu lesen krige ich nur beim Status Byte einen vernünftigen Wert, der sich auch sinnvoll ändert wenn ich einen der Endschalter betätige.
Das Verhalten ist vollig gleich, egal welches Register ich zu lesen versuche.
Irgendwo scheine ich einen grundsätzlichen Fehler zu haben der verursacht, das ich vermutlich immer das gleiche mir unbekannte Register lese.
Für den Fall. das jemand Hardwarefehler vermutet habe ich auch einen (abgestrippten) Schaltplan beigelegt. Der TMC wird zur Zeit noch von einem externe Taktgenerator mit einem Rechtecksignal von 1,25 MHZ versorgt.
Ich würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte.
Mit freundlichen Grüßen
Helmut
Code
program Drehscheibe_spi;
Device = mega88, VCC = 5;
{ $BOOTRST $00C00} {Reset Jump to $00C00}
Import SysTick, SPIdriver;
Define
ProcClock = 20000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0032, iData;
FrameSize = $0032, iData;
SwitchPort1 = PinB, %00111000;
PolarityP1 = %00000000; {polarity}
SPIpresc = 3;
SPIOrder = MSB;
SPIcpol = 0;
SPIcpha = 0;
SPI_SS = true; // false; NotSS = nSCS_C
Implementation
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
Decoderadresse : byte;
Eingang : byte;
SS_Manual [@PortB, 2] : Bit;
Low : byte;
Mid : byte;
High : byte;
TMCStatus : byte;
{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
PortB:= %0000 1011; // PulUp bei Input Wert bei Output
DDRB:= %0011 0100; // 1 = Output
PortC:= %0000 0011;
DDRC:= %0011 1111;
PortD:= %0000 0000;
DDRD:= %0000 0011;
end InitPorts;
{
....
}
{------------------------------------------------------------------------------}
//SPI Spezifische Sachen
{------------------------------------------------------------------------------}
procedure Select_428;
begin
SS_Manual := 0;
uDelay_1 (20);
end;
{------------------------------------------------------------------------------}
procedure DeSelect_428;
begin
SS_Manual := 1;
end;
{------------------------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
InitPorts;
EnableInts;
loop
Eingang := %0 11 1001 1;
// Select_428; // Falls SPI_SS = false
TMCStatus := SPIInOutByte(%0 11 1001 1);
High := SPIInOutByte(0);
Mid := SPIInOutByte(0);
Low := SPIInOutByte(0);
// DeSelect_428; // Falls SPI_SS = false
//Ausgabe der gelesenen Werte
SchreibeKanal (Decoderadresse + 4, Low);
SchreibeKanal (Decoderadresse + 3, Mid);
SchreibeKanal (Decoderadresse + 2, High);
SchreibeKanal (Decoderadresse + 1, TMCStatus);
mdelay (1000);
endloop;
end Drehscheibe_spi.
Attachments
Filename: | Drehscheibe Auszug.pdf |
Filesize: | 9.76 KB |
Title: | Schaltplan |
Download counter: | 36 |