74HC595 mit SPI ich verstehe es nicht....

tasili
Benutzer
Avatar
Gender: n/a
Posts: 75
Registered: 02 / 2007
Subject:

74HC595 mit SPI ich verstehe es nicht....

 · 
Posted: 15.01.2012 - 20:33  ·  #1
Hallo,
ich habe jetzt endlich den 74HC595 mit SPI zum laufen gebracht..
Ich Nutze vom 74 STCP, SHCP und DS
SHCP habe ich an Pin 8 des Mega32..

Ich kann nun problemlos alles LEDs von 0-7 durchlaufen lassen und einzeln ansteuern...
Nur wie bekomme ich das zweite 74HC kaskadiert?
Habe Ausgang Q7S an DS des nächsten angeklemmt den rest Parallel geschaltet..
Nun leuchten aber bei beiden immer die selben LED's :-(
Wie bekomme ich es hin das beide eigenständig ein Bitmuster anzeigen können?
Vielen Dank im Vorraus
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 59
Posts: 956
Registered: 09 / 2007
Subject:

Re: 74HC595 mit SPI ich verstehe es nicht....

 · 
Posted: 16.01.2012 - 00:25  ·  #2
Hi tasili,
war dafür nicht das /OE (/CS)?
Das musst Du dann auch einzeln steuern.

Gruß
miparo
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2089
Registered: 03 / 2003
Subject:

Re: 74HC595 mit SPI ich verstehe es nicht....

 · 
Posted: 16.01.2012 - 20:51  ·  #3
Hi tasili,

das hab ich erst mit 4x 74HC595ern aufgebaut (Guggsduhier) :
- DS (Pin 14) zum µC MOSI, Q7' (Pin 9) zum DS des nächsten 595.
- alle SH_CP (Pin 11), ST_CP (Pin 12) und /OE (Pin 13) parallel. Wenn du es brauchst auch den /MR (Pin 10) - hab ich nicht gemacht, da ich zum Löschen einfach lauter 0er reinschreib.
- SH_CP ist SCK
- ST_CP legt die Daten vom Schieberegister ins Output-Register
- /OE schaltet die Ausgänge ein

..... und ein bisschen Quellcode (SoftSPI):
Code

Import SysTick, SPIdriver1;

From System Import;

Define
  ProcClock      = 16000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0100, iData;
  FrameSize      = $0100, iData;
  
  SPIdriver1     = PortC, 5, 6, 3;  // SCK, MOSI, MISO
  SPIorder1      = MSB;
  SPIcPHA1       = 0;
  SPIcPol1       = 0;

Procedure InitPorts;
  Begin
    PortC:=%00000000;
    DDRC:= %01110000;
  End InitPorts;

.....
      SPIOut1(@GraphColArr[Counter*4],4); // 32 Bit schreiben
      Incl(PortC,4);                             // EN/LEDs off
      Excl(PortA,7);               // Datenübernahme Out-Register
      SDelay(1);
      Incl(PortA,7);
      SDelay(20);
      Excl(PortC,4);                             // EN/LEDs on

.....

Zur Erklärung noch folgendes: ich gebe hier das DisplayRAM eine grafischen Displays aus und durch rotation habe ich ein pseudo grafisches DIsplay mit 132x32 Pixel.

gruss
Harry

PS: Ich kann so das Schieberegister komplett (32 Bit) ca. 25000x/sek schreiben :D
PS, die 2.: Um deine Frage zu beantworten: du hast 2x 8-Bit also mußt du auch 16 Bit schreiben. Wenn du 2x das selbe Byte schreibst, zeigen auch beide das gleiche an. Evtl. ein bisschen Quellcode hier zeigen.
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   64   78 · Page-Gen-Time: 0.021445s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI