SoftSPI kein Signal

  • 1
  • 2
  • 3
  • Page 1 of 3
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

SoftSPI kein Signal

 · 
Posted: 13.12.2017 - 13:08  ·  #1
Hallo Rolf,

ich werde noch wahnsinnig. Bei folgendem Progrämmchen passiert einfach nix. Hab natürlich zuerst mal an mir gezweifelt, aber mein Oszi sagt auch: auf MOSI kommt nichts raus. Clock ist da. CS und Reset funktionieren auch wie erwartet. Habs auch mal auf PortB versucht: das gleiche.

Gruss
Harry

Code

Program DDT;

{$NOSHADOW}
{$WG}                      {global Warnings off}

Device = mega644, VCC=5;
{ $BOOTRST $07000}         {Reset Jump to $07000}

Import SysTick, SPIDriver1;

From System Import;


Define
  ProcClock      = 20000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0100, iData;
  FrameSize      = $0100, iData;

  SPIdriver1     = PortD, 0, 1, 2;  // SCK, MOSI, MISO
  SPIorder1      = MSB;
  SPIcPHA1       = 0;
  SPIcPol1       = 0;
  
Implementation

{$IDATA}

{------------------------------------------------------------------------------}
{ Type Declarations }
Type
{------------------------------------------------------------------------------}
{ Const Declarations }
Const
  DDInit : Array[0..2] of Byte   = ($B1, $08, $18);
  WSData : Array[0..7] of Byte   = ($A1, $55, $AA, $5A, $A5, $B2, $00, $00);
{------------------------------------------------------------------------------}
{ Var Declarations }
Var
  CS[@PortD,3]    : Bit;
  Reset[@PortD,4] : Bit;
{$IDATA}
{------------------------------------------------------------------------------}
{ functions }
{------------------------------------------------------------------------------}
Procedure InitPorts;
  Begin
    DDRD:=  %00011011;                      // x x x /Reset /CS MISO MOSI SCK
    PortD:= %00011000;

  End InitPorts;

{------------------------------------------------------------------------------}
{ Main Program }
{$IDATA}
{------------------------------------------------------------------------------}
Begin
  EnableInts;
  InitPorts;
  CS:=1;
  Reset:=1;                                      // Reset & CS = 1
  mDelay(10);
  Reset:=0;                                      // Reset = 0
  mDelay(10);
  Reset:=1;                                      // Reset & CS = 1
  mDelay(50);
  CS:=0;
  SPIOut1(@DDInit,3);
  CS:=1;
  mDelay(50);
  Loop
    CS:=0;                                       // /CS
    mDelay(1);
    SPIOut1(@WSData,6);
    mDelay(1);
    CS:=1;                                       // /CS
    mDelay(1000);
    EndLoop;
End DDT.


So kommt was raus:
Code

For Counter:=0 to 5 do
      SPIOutByte1(WSData[Counter]);
      EndFor;


Und noch was, was ich auch nicht verstehe:
SPIorder1 = MSB;
bedeutet doch, daß das höherwertige Bit D7 (most significant bit) zuerst gesendet wird. Bei
SPIorder1 = LSB;
ist es dann D0. Wenn ich nun meinen Code von MSB auf LSB ändere passiert was seltsames. Bei MSB ist der Pegel, wenn ich grad nichts sende, auf Low (0V). Bei LSB ist er auf High (5V). Was hat das damit zu tun?

Frag jetzt nicht wieso ich einen Mega644 und den Software-Treiber verwende - es ist eben so und muß ja auch funktionieren.
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SoftSPI kein Signal

 · 
Posted: 13.12.2017 - 16:31  ·  #2
Hallo Harry,

hast Du schon mal was von unserem ICE gehört. Damit bis in den Treiber
reintracen und sich dabei das entspr. Port anschauen.
Aber auch schon ein tieferer Blick ins ASM Listing sollte hier weiterhelfen.

rolf
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: SoftSPI kein Signal

 · 
Posted: 14.12.2017 - 06:35  ·  #3
Wenn ich nun meinen Code von MSB auf LSB ändere passiert was seltsames. Bei MSB ist der Pegel, wenn ich grad nichts sende, auf Low (0V). Bei LSB ist er auf High (5V). Was hat das damit zu tun?

Hallo Harry,
Das sollte nur davon abhängen, was zuletzt gesendet wurde. Wenn beim Wechsel von MSB auf LSB das letzte gesendete Bit sich ändert, dann ändert sich auch der am Portpin verbleibende Wert.
Die Procedure SPIout1 (source : pointer; count : word) funktioniert bei mir auch nicht.

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

Re: SoftSPI kein Signal

 · 
Posted: 14.12.2017 - 12:48  ·  #4
Hallo golf,

wieso kommt da keine Info zu mir?
Oder habe ich da was vergessen?

rolf
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: SoftSPI kein Signal

 · 
Posted: 14.12.2017 - 13:43  ·  #5
hallo rolf,
ich nutze den SPIDriver1 schon länger mit einem atmega, aber nur byteweise und das funktioniert ja.
das Problem mit SPIout1 (source : pointer; count : word) hab ich erst heute morgen gesehen, als ich das von Harry nachvollziehen wollte.

golf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: SoftSPI kein Signal

 · 
Posted: 14.12.2017 - 14:44  ·  #6
Hallo golf,

das stimmt so nicht, da der Pegel, ohne daß ich was gesendet habe, schon auf Low (MSB) bzw. High (LSB) steht. Aber ich prüfe das nochmal nach.

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

Re: SoftSPI kein Signal

 · 
Posted: 14.12.2017 - 14:49  ·  #7
Hallo Harry
Der Initial Pegel spielt keine Rolle.
Der Pegel der bei der relevanten Flanke ansteht ist maßgebend
Rolf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: SoftSPI kein Signal

 · 
Posted: 14.12.2017 - 14:56  ·  #8
Hi Rolf,

ich hab mich da falsch ausgedrückt. Bei MSB ist der Ruhepegel Low und die Pulse gehen nach High. Bei LSB ist der Ruhepegel High und die Pulse gehen nach Low. D.h. in diesem Fall ist eine 1=0V.

Harry
  • 1
  • 2
  • 3
  • Page 1 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.038413s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI