Die Schaltung habe ich aus diesem Tutorial =)
http://www.rn-wissen.de/index.php/Portexpander_am_AVR
Nur halt aufgebaut mit einem 4094!
Hallo!
Hab mich jetzt zum ersten Mal an den SPI-Bus getraut.
Ich habe eine Porterweiterung mit 3 Schieberegistern 4094 aufgebaut.
Die Programmierung der ersten beiden Schieberegister klappte wunderbar!
Als ich das dritrte Schieberegister eingefügt habe, erscheinen alle Ausgänge, die auf den Expander 3 geschrieben werden auf dem Expander 1 und umgekehrt.
Ich habe vieles probiert =9 nichts klappt. Bitte helft mir =)
Danke
Hier ein Programmausschnitt:
Config Spi = Hard , Interrupt = On , Master = Yes , Clockrate = 16
Spiinit
Enable Spi
....
Do
....
....
Expander1 = Low(speicherwort)
Expander2 = High(speicherwort)
.....
.....
Expander3 = 0
Spiout Expander1 , 1
Spiout Expander2 , 2
Spiout Expander3 , 3
Loop
habe den Expander 3 schon extra auf null gesetzt, trotzdem erscheinen die Ausgänge wie auf Expander 1.
Die Expander1 und 2 sind natürlich als Bytes deklariert und im Programm bekommen sie ihre Wertzuweisung aus einem Word.
hat wunderbar geklappt. Aber warum erscheint der erste auf dem dritten Expander?????
Die Schaltung habe ich aus diesem Tutorial =)
http://www.rn-wissen.de/index.php/Portexpander_am_AVR
Nur halt aufgebaut mit einem 4094!
Spiout() erwartet als zweiten Parameter die Anzahl der zu sendenden Bytes, da muss also jeweils 1 hin und nicht 2 oder 3.
Kannst Dir doch selbst denken, dass Du keine 2 oder 3 Bytes schicken kannst, wenn die Variable nur 1 Byte enthält.
okay, aber wie kann ich es realisieren, dass der expander 1 das byte expander1, der expander 2 das byte expander2 , usw. erhält. wenn ich alle auf eins setze, bekommen doch alle expander die selben daten, oder??
Wenn die Expander in serie (1, 2, 3) geschaltet sind, musst du (z.B)
Code:DIM Expander1 as Byte ' daten für expander 1 DIM Expander2 as Byte ' daten für expander 2 DIM Expander3 as Byte ' daten für expander 3 spiout Expander3, 1 ' exp3 daten im expander 1 spiout Expander2, 1 ' exp2 daten im expander 1 ==> exp3 daten im expander 2 spiout Expander1, 1 ' exp1 daten im expander 1 ==> exp2 daten im expander 1 ==> exp3 daten im expander 3
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Nein. die werden durchgeschoben, vorausgesetzt die Verschaltung ist wie im verlinkten Bild.
Jeweils QH* des vorigen geht in SER des nächsten Bausteins, wenn 3 x 1 Byte geschoben wurde, so hat jeder Baustein seine Daten.
Ggf. solltest Du die zu sendenden Daten in ein Array aus 3 Elementen packen und auf einmal versenden, also:
Code:Dim myArr(3) As Byte ' ... Array füllen Spiout myArr(1), 3
@MagicWSmoke: oops, sry
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
okay, danke =) dann werde ich das heute abend mal ausprobieren.
das heißt, die bytes werden praktisch von hinten nach vorne in die expander geschoben.
also das letzte byte zuerst.
gut =)
und den strobe macht das programm dann bei jedem loop? oder wie setzten sich die register wieder auf 0?
Den RCK-Strobe kriegen alle Expander gleichzeitig. (nach dem letzen der 3 SPIOUT's)
Auf Null musst du die Expander "manuell" setzen, d.h. lauter 0-en reinschieben.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen