Arduino Uno & ADG714 via SPI funktioniert nur sporadisch

OP #4983364
Lesenswert?

Hallo zusammen,

ich habe einen ADG714 via SPI mit dem Arduino Uno verbunden und in 
Betrieb genommen. Momentan hängen an dem Analog Switch nur 8 LEDs. die 
SPI Übertragung funktioniert, zumindest habe ich auf dem Oszi ein Clock 
und SS Signal. Die LEDs leuchten auch, jedoch nur wenn ich mit meinem 
Finger das ADG714 berühre oder mich mit dem Oberkörper über die 
Schaltung beuge, das selbe gilt auch für den Arduino, sobald ich mit dem 
Finger etwas auf dem Board berühre leuchten die LEDs ansonsten tut sich 
nichts, trotz korrektem CLK und SS Signal auf dem Oszi. Woran kann das 
liegen ?
Mein Code:
1
#include <SPI.h>
2

3
void setup() 
4
  {
5
  digitalWrite(SS, HIGH);  
6
  SPI.begin (); 
7
  }
8
void loop() 
9
{
10
sw1();
11
sw2();
12
sw3();
13
sw4();
14
sw5();
15
sw6();
16
sw7();
17
sw8();
18
alloff();
19
}
20

21
void alloff()
22
{
23
  digitalWrite(SS, LOW);    
24
  byte test = B00000000;
25
  SPI.transfer (test);
26
  digitalWrite(SS, HIGH);
27
  delay(500);
28
  SPI.endTransaction ();
29
}
30
void sw1()
31
{
32
  digitalWrite(SS, LOW);    
33
  byte test1 = B10000000;
34
  SPI.transfer (test1);
35
  digitalWrite(SS, HIGH);
36
  delay(500);
37
  SPI.endTransaction ();
38
}
39
void sw2()
40
{
41
  digitalWrite(SS, LOW);    
42
  byte test2 = B01000000;
43
  SPI.transfer (test2);
44
  digitalWrite(SS, HIGH);
45
  delay(500); 
46
  SPI.endTransaction ();
47
}
48
void sw3()
49
{
50
  digitalWrite(SS, LOW);    
51
  byte test3 = B00100000;
52
  SPI.transfer (test3);
53
  digitalWrite(SS, HIGH);
54
  delay(500);
55
  SPI.endTransaction ();
56
}
57
void sw4()
58
{
59
  digitalWrite(SS, LOW);
60
  byte test4 = B00010000;
61
  SPI.transfer (test4);
62
  digitalWrite(SS, HIGH);
63
  delay(500);  
64
  SPI.endTransaction ();
65
}
66
void sw5()
67
{
68
  digitalWrite(SS, LOW);
69
  byte test5 = B00001000;
70
  SPI.transfer (test5);
71
  digitalWrite(SS, HIGH);
72
  delay(500);
73
  SPI.endTransaction ();
74
}
75
void sw6()
76
{
77
  digitalWrite(SS, LOW);
78
  byte test6 = B00000100;
79
  SPI.transfer (test6);
80
  digitalWrite(SS, HIGH);
81
  delay(500);
82
  SPI.endTransaction ();
83
}
84
void sw7()
85
{
86
  digitalWrite(SS, LOW);
87
  byte test7 = B00000010;
88
  SPI.transfer (test7);
89
  digitalWrite(SS, HIGH);
90
  delay(500);
91
  SPI.endTransaction ();
92
}
93
void sw8()
94
{
95
  digitalWrite(SS, LOW);
96
  byte test8 = B00000001;
97
  SPI.transfer (test8);
98
  digitalWrite(SS, HIGH);
99
  delay(500);  
100
  SPI.endTransaction ();
101
}

Die Verkabelung ist auch korrekt:

D13(CLK) ----> Pin1   ADG714 SCLK
D12(MISO)---> Pin3   ADG714 DIN
D11(MOSI)---> Pin22 ADG714 DOUT
D10(SS) -----> Pin24 ADG714 /SYNC

An dem Analog Switch habe ich jeweils an Source eine 5v Spannung (Selbe 
Leitung die auch den IC versorgt) angeschlossen und die LEDs hängen mit 
330Ohm Vorwiderständen jeweils an Drain.
Anbei das Datenblatt zum Analog Switch.

Jemand eine Idee ?
Angehängte Dateien:
Gast #4983927
Lesenswert?

>SS ist doch Standardmässig ein Output?

Nein.

>Wenn das dass problem wäre, dürfte gar nichts klappen. Ich sehe mein SS
>ja auf dem Oszi es tut auch was es soll.

Du siehst wie der interne Pullup ein/ausgeschaltet wird.
OP #4986361
Lesenswert?

Ich habe mir die Schaltung an meinem Arduino Mega aufgebaut. Mein Code 
sieht nun so aus:
1
#define SS 53
2

3
#include <SPI.h>
4

5
void setup() 
6
  {
7
  pinMode(48, OUTPUT); //Reset
8
  pinMode(SS, OUTPUT); 
9
  digitalWrite(SS, HIGH); 
10
  digitalWrite(48, HIGH);
11
  SPI.begin (); 
12
  }
13

14
void loop() 
15
{
16
alloff();
17
sw1();
18
}
19

20
void alloff()
21
{
22
  digitalWrite(SS, LOW);   
23
  byte test = B00000000;
24
  SPI.transfer (test);
25
  digitalWrite(SS, HIGH);
26
  delay(500);
27
}
28
void sw1()
29
{
30
  digitalWrite(SS, LOW);    
31
  byte test1 = B11111111;
32
  SPI.transfer (test1);
33
  digitalWrite(SS, HIGH);
34
  delay(500);
35
}

doch jetzt tut sich gar nichts mehr...
Gast #4986384
Lesenswert?

(MOSI) ist der Master Output
(DOUT) ist der Slave Output

Output arbeitet gegen Output.
Rauch droht!

Kord F. schrieb:
> Die Verkabelung war auf dem Arduino Uno ja auch nicht anders.
Dann ist sie da auch schon falsch gewesen.

Haben nur alle übersehen, incl. meiner Wenigkeit.
OP #4986437
Lesenswert?

Oh, Danke !

Ein erneuter blick ins Datenblatt:

Serial Data Output. This allows a number a parts to be daisy chained.
Data is clocked out of the input shift register on the rising edge of 
SCLK. DOUT is an open-drain output that should be pulled to the supply 
with an external pull-up resistor.

Wie groß sollte der Pull Up sein ?
OP #4987335
Lesenswert?

Ich habe nochmals die Verkabelung überprüft alles iO. Mein CLK und SS 
Signal sehen auf dem Oszi auch gut aus, was mich jedoch stutzig macht 
ist das MISO Signal. Das müssten doch 5V sein ?
Bzw. der Bitfolge entsprechen die gesendet wird.
Mein Code:
1
#include <SPI.h>
2
int reset = 9;
3
void setup() 
4
  {
5
  pinMode(SS, OUTPUT);
6
  pinMode(MISO, OUTPUT);
7
  pinMode(reset, OUTPUT);
8
  SPI.begin();
9
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
10
  digitalWrite(SS, HIGH); 
11
  digitalWrite(reset, HIGH);
12
  }
13

14
void loop() 
15
{
16
  SPI.begin();
17
  digitalWrite(SS, LOW);   
18
  SPI.transfer(B10101010);
19
  digitalWrite(SS, HIGH);
20
}

Anbei ein Bild vom Oszi:

Gelb: CLK
Grün: SS
Blau: MOSI
Angehängte Dateien:
OP #4987720
Lesenswert?

Sorry, das sollte natürlich beides mal MOSI heißen.
Das MOSI Problem ist mittlerweile auch behoben, nur tut sich leider am 
Analog Switch IC immer noch nichts.
Anbei das aktuelle Oszi Signal.

Gelb= CLK
Blau= MOSI
Grün= SS

Das beginTransaction habe ich benutzt um die SPI Modi zu variieren, weil 
ich die Vermutung hatte das vielleicht nicht der korrekte SPI Mode 
eingestellt war.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren