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
voidsetup()
4
{
5
digitalWrite(SS,HIGH);
6
SPI.begin();
7
}
8
voidloop()
9
{
10
sw1();
11
sw2();
12
sw3();
13
sw4();
14
sw5();
15
sw6();
16
sw7();
17
sw8();
18
alloff();
19
}
20
21
voidalloff()
22
{
23
digitalWrite(SS,LOW);
24
bytetest=B00000000;
25
SPI.transfer(test);
26
digitalWrite(SS,HIGH);
27
delay(500);
28
SPI.endTransaction();
29
}
30
voidsw1()
31
{
32
digitalWrite(SS,LOW);
33
bytetest1=B10000000;
34
SPI.transfer(test1);
35
digitalWrite(SS,HIGH);
36
delay(500);
37
SPI.endTransaction();
38
}
39
voidsw2()
40
{
41
digitalWrite(SS,LOW);
42
bytetest2=B01000000;
43
SPI.transfer(test2);
44
digitalWrite(SS,HIGH);
45
delay(500);
46
SPI.endTransaction();
47
}
48
voidsw3()
49
{
50
digitalWrite(SS,LOW);
51
bytetest3=B00100000;
52
SPI.transfer(test3);
53
digitalWrite(SS,HIGH);
54
delay(500);
55
SPI.endTransaction();
56
}
57
voidsw4()
58
{
59
digitalWrite(SS,LOW);
60
bytetest4=B00010000;
61
SPI.transfer(test4);
62
digitalWrite(SS,HIGH);
63
delay(500);
64
SPI.endTransaction();
65
}
66
voidsw5()
67
{
68
digitalWrite(SS,LOW);
69
bytetest5=B00001000;
70
SPI.transfer(test5);
71
digitalWrite(SS,HIGH);
72
delay(500);
73
SPI.endTransaction();
74
}
75
voidsw6()
76
{
77
digitalWrite(SS,LOW);
78
bytetest6=B00000100;
79
SPI.transfer(test6);
80
digitalWrite(SS,HIGH);
81
delay(500);
82
SPI.endTransaction();
83
}
84
voidsw7()
85
{
86
digitalWrite(SS,LOW);
87
bytetest7=B00000010;
88
SPI.transfer(test7);
89
digitalWrite(SS,HIGH);
90
delay(500);
91
SPI.endTransaction();
92
}
93
voidsw8()
94
{
95
digitalWrite(SS,LOW);
96
bytetest8=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 ?
Anbei ein Schaltplan das ich fix mit fritzing erstellt habe. Ich habe
die Vorwiderstände nicht eingezeichnet, sind aber vor jeder LED jeweils
330 Ohm dran.
Arduino F. schrieb:> Schon mal daran gedacht, SS zum OUTPUT zu machen?
SS ist doch Standardmässig ein Output?
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. Der fehler muss eigentlich an
der Schaltung liegen.
Kord Friemel schrieb:> SS ist doch Standardmässig ein Output?
Das hast du dir doch nur ausgedacht.
Hättest du dich über AVR SPI informiert, wüsstest du, dass SPI in den
SlaveMode schaltet, wenn SS ein Input und LOW ist.
Also:
Fachbuch auf den Tisch und 5 Stunden nachsitzen.
>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.
(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.
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 ?
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:
Kord F. schrieb:> was mich jedoch stutzig macht> ist das MISO Signal.
...
> Blau: MOSI
?
---
Wofür ist das beginTransaction, wenn du doch gar keine Transactions
brauchst?
Auch hätte ich erwartet, dass CS sofort wieder hoch geht, aber das fehlt
auf deinem Bild.
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.