Guten Tag zusammen
Mein Momentanen Projekt ist für mich einbisschen zu anspruchsvoll daher
frage ich hier nach. Nun ich würde gerne an einen uC ein Bluetooth modul
und ein Digital RGB strip anschliessen. Der Ic sollte jedoch nicht alzu
gross sein da ich nur ein Prototypfrässer zur verfügung habe, welcher
keine alzu extrem enge Leiterbahnen erlaubt. Nun ich habe auf einem
extern gefrässtem print bereits ein atmega 644 genutzt und hatte ein
attiny 841 übungsprint. von diesen attiny 841 hätte ich noch einpaar
hier doch kann ich diese Verwenden? Das Bluetooth modul hat nur ein tx,
ein RX und Speisungsanschlüsse und die digitale RGBs könnte man doch an
jeden beliebiegen anschluss anschliessen. Natürlich verliert man die
Vorteile von spi doch gewinnt den vorteil das es universal einsetzbar
ist. Ich mag mich irren aber schliesslich sind auf diesen strips doch
nur schieberegister kaskadisch verbunden und pro takt sendet man das
nächste bit. Doch die Frage ist ich habe mur eine data lane wie mach ich
den clock? Speisung ein und aus? Es handelt sich um den ws2812b
Dominic K. schrieb:> nächste bit. Doch die Frage ist ich habe mur eine data lane wie mach ich> den clock? Speisung ein und aus? Es handelt sich um den ws2812b
Beim WS2812b hast du keine CLOCK Leitung, nur DATA.
Das ist mir bewust doch irgendwie muss man doch auch ein 0 hereintakten
können. Also muss man doch den takt übertragen können. also speisung aus
zustand wechseln und speisung ein hätte ich gedacht
Dominic K. schrieb:> Das ist mir bewust doch irgendwie muss man doch auch ein 0 hereintakten> können. Also muss man doch den takt übertragen können. also speisung aus> zustand wechseln und speisung ein hätte ich gedacht
Also irgendwie scheint es mir, dass dir da etwas doch nicht bewusst
ist.
Bitte, erst mal Datenblatt fur WS2812b lesen.
Dominic K. schrieb:> irgendwie muss man doch auch ein 0 hereintakten> können
Der Unterschied zuwischen 0 und 1 wird über die Dauer der Pegel High und
Low übertragen.
Je nach Anzahl der LEDs und den gespeicherten Mustern reicht ein Tiny841
dafür aus, ich hab sowas auch schon mit nem Tiny85 gemacht.
Es wären maximal 120 leds aber halt rot gelb und blau. Nun habe ich das
richtig verstanden es sind alles 3 er schiebe register in den leds.
jeweils 1 wert pro farbe. also bei 2 leds müsste ich nur blau folgendes
takten: 001 001. Halt einfach mit den Zeiten bzw lange high ein low kurz
high ein high? Okey und das Bluetooth modul habe ich richtig erkannt
einfach ein Pin mit rx und einen mit tx nehmen und dan sollte das gehen
oder? Bzw rx steht für receiverx oder?
Dominic K. schrieb:> Es wären maximal 120 leds aber halt rot gelb und blau.
Rot GRÜN Blau
>Nun habe ich das> richtig verstanden es sind alles 3 er schiebe register in den leds.> jeweils 1 wert pro farbe. also bei 2 leds müsste ich nur blau folgendes> takten: 001 001.
Das wird ein recht dunkles Blau, aber sehr wahrscheinlich hast du es
sowieso nicht richtig kapiert. Pro Farbe kann man 256 Helligkeitswerte
einstellen. Dh. pro Farbe 8Bit! Also nicht nur ein Bit für ein/aus.
Marc V. schrieb:> Also irgendwie scheint es mir, dass dir da etwas doch nicht bewusst> ist.> Bitte, erst mal Datenblatt fur WS2812b lesen.
Dem kann ich vorerst nur zustimmen ;-)
Hier ein vor kurzem zusammen geschustertes Codebeispiel für einen 8Bit
PIC (12MHz Befehlstakt) COLOR_OUT ist der Pin an dem die WS2812 hängt.
An Programmspieicher bestand kein Mangel ;-)
1
voidcolorOut(uint8_t*ptrColor){
2
colorR=*ptrColor++;
3
colorG=*ptrColor++;
4
colorB=*ptrColor;
5
#asm
6
BSFCOLOR_OUT// -------------------------------- green color code
7
NOP
8
NOP
9
BTFSSCOLOR_G,7
10
BCFCOLOR_OUT
11
NOP
12
NOP
13
NOP
14
BCFCOLOR_OUT
15
NOP
16
NOP
17
NOP
18
BSFCOLOR_OUT
19
NOP
20
NOP
21
BTFSSCOLOR_G,6
22
BCFCOLOR_OUT
23
NOP
24
NOP
25
NOP
26
BCFCOLOR_OUT
27
NOP
28
NOP
29
NOP
30
BSFCOLOR_OUT
31
NOP
32
NOP
33
BTFSSCOLOR_G,5
34
BCFCOLOR_OUT
35
NOP
36
NOP
37
NOP
38
BCFCOLOR_OUT
39
NOP
40
NOP
41
NOP
42
BSFCOLOR_OUT
43
NOP
44
NOP
45
BTFSSCOLOR_G,4
46
BCFCOLOR_OUT
47
NOP
48
NOP
49
NOP
50
BCFCOLOR_OUT
51
NOP
52
NOP
53
NOP
54
BSFCOLOR_OUT
55
NOP
56
NOP
57
BTFSSCOLOR_G,3
58
BCFCOLOR_OUT
59
NOP
60
NOP
61
NOP
62
BCFCOLOR_OUT
63
NOP
64
NOP
65
NOP
66
BSFCOLOR_OUT
67
NOP
68
NOP
69
BTFSSCOLOR_G,2
70
BCFCOLOR_OUT
71
NOP
72
NOP
73
NOP
74
BCFCOLOR_OUT
75
NOP
76
NOP
77
NOP
78
BSFCOLOR_OUT
79
NOP
80
NOP
81
BTFSSCOLOR_G,1
82
BCFCOLOR_OUT
83
NOP
84
NOP
85
NOP
86
BCFCOLOR_OUT
87
NOP
88
NOP
89
NOP
90
BSFCOLOR_OUT
91
NOP
92
NOP
93
BTFSSCOLOR_G,0
94
BCFCOLOR_OUT
95
NOP
96
NOP
97
NOP
98
BCFCOLOR_OUT
99
NOP
100
NOP
101
NOP
102
103
BSFCOLOR_OUT// ---------------------------------- red color code
104
NOP
105
NOP
106
BTFSSCOLOR_R,7
107
BCFCOLOR_OUT
108
NOP
109
NOP
110
NOP
111
BCFCOLOR_OUT
112
NOP
113
NOP
114
NOP
115
BSFCOLOR_OUT
116
NOP
117
NOP
118
BTFSSCOLOR_R,6
119
BCFCOLOR_OUT
120
NOP
121
NOP
122
NOP
123
BCFCOLOR_OUT
124
NOP
125
NOP
126
NOP
127
BSFCOLOR_OUT
128
NOP
129
NOP
130
BTFSSCOLOR_R,5
131
BCFCOLOR_OUT
132
NOP
133
NOP
134
NOP
135
BCFCOLOR_OUT
136
NOP
137
NOP
138
NOP
139
BSFCOLOR_OUT
140
NOP
141
NOP
142
BTFSSCOLOR_R,4
143
BCFCOLOR_OUT
144
NOP
145
NOP
146
NOP
147
BCFCOLOR_OUT
148
NOP
149
NOP
150
NOP
151
BSFCOLOR_OUT
152
NOP
153
NOP
154
BTFSSCOLOR_R,3
155
BCFCOLOR_OUT
156
NOP
157
NOP
158
NOP
159
BCFCOLOR_OUT
160
NOP
161
NOP
162
NOP
163
BSFCOLOR_OUT
164
NOP
165
NOP
166
BTFSSCOLOR_R,2
167
BCFCOLOR_OUT
168
NOP
169
NOP
170
NOP
171
BCFCOLOR_OUT
172
NOP
173
NOP
174
NOP
175
BSFCOLOR_OUT
176
NOP
177
NOP
178
BTFSSCOLOR_R,1
179
BCFCOLOR_OUT
180
NOP
181
NOP
182
NOP
183
BCFCOLOR_OUT
184
NOP
185
NOP
186
NOP
187
BSFCOLOR_OUT
188
NOP
189
NOP
190
BTFSSCOLOR_R,0
191
BCFCOLOR_OUT
192
NOP
193
NOP
194
NOP
195
BCFCOLOR_OUT
196
NOP
197
NOP
198
NOP
199
200
BSFCOLOR_OUT// --------------------------------- blue color code
Das Datenblatt habe ich gelesen nur nicht gut genug so wie es scheint.
Nun dein code macht für mich nicht viel sin. diese nops sind doch da um
den compiler vom überspringen des codes zu hindern. Und die anderen
befehle machen für mich komplett keinen sinn.
Dominic K. schrieb:> Das Datenblatt habe ich gelesen nur nicht gut genug so wie es scheint.
Es werden 3Byt oder 24bit (8bit RED, 8bit GREEN und 8bit BLUE) auf der
DATA Leitung übertragen: RRRRRRRRGGGGGGGGBBBBBBBB
<<<<------------------
Wenn entsprechendes bit 1 ist, wird folgendes übertragen:
1
__________
2
DATA||______
3
800us450us
Und wenn dieses bit 0 ist, folgendes:
1
_____
2
DATA||___________
3
450us800us
Somit dauert 1 bit immer 1,25ms, ergibt 800KHz.
Jede LED behält die ersten 24bit für sich (im Abstellraum), die
anderen bits werden brav durchgeschoben.
Wenn DATA Leitung länger als 50us LOW ist, werden die übernommenen
24bit Daten aus dem Abstellraum geholt, zum Schaufenster weitergereicht
und angezeigt. ;-)
Und das ist schon alles.
Man muss nur imstande sein, die Zeiten (ziemlich) genau einzuhalten,
mehr nicht.
Dominic K. schrieb:> Nun dein code macht für mich nicht viel sin. diese nops sind doch da um> den compiler vom überspringen des codes zu hindern. Und die anderen> befehle machen für mich komplett keinen sinn
Wie gesagt "zusammen geschustert" ;-)
Die ganzen NOPs NoOperation sind erforderliche für das Timing. Da
vergeht einfach ein Zyklus ohne dass sich etwas ändert.
BSF ist bei PICs BitSetFile also "Setze das Bit (den Pin) auf
Eins/High". BCF ist für BitCleaFile, also "Setze Bit/Pin auf Null/Low".
Wenn man das Ganze dann mal zeitmäßgig aufschreiben würde, käme man
schon dahinter, was der Code machen "soll".
Das war alles nur für eine einzige WS2812b und sollte nur zeigen, dass
001 für Blau irgendwie doch nicht alles sein kann...