Forum: Mikrocontroller und Digitale Elektronik Print für Digital rgb strips controlle


von Dominic K. (domi1997)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Dominic K. (domi1997)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Guest (Gast)


Lesenswert?

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.

von Dominic K. (domi1997)


Lesenswert?

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?

von Volker S. (vloki)


Lesenswert?

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 ;-)

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

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
void colorOut(uint8_t * ptrColor){
2
    colorR = *ptrColor++;
3
    colorG = *ptrColor++;
4
    colorB = *ptrColor;
5
    #asm
6
        BSF COLOR_OUT       // -------------------------------- green color code
7
        NOP
8
        NOP
9
        BTFSS COLOR_G,7
10
        BCF COLOR_OUT
11
        NOP
12
        NOP
13
        NOP
14
        BCF COLOR_OUT
15
        NOP
16
        NOP
17
        NOP
18
        BSF COLOR_OUT
19
        NOP
20
        NOP
21
        BTFSS COLOR_G,6
22
        BCF COLOR_OUT
23
        NOP
24
        NOP
25
        NOP
26
        BCF COLOR_OUT
27
        NOP
28
        NOP
29
        NOP
30
        BSF COLOR_OUT
31
        NOP
32
        NOP
33
        BTFSS COLOR_G,5
34
        BCF COLOR_OUT
35
        NOP
36
        NOP
37
        NOP
38
        BCF COLOR_OUT
39
        NOP
40
        NOP
41
        NOP
42
        BSF COLOR_OUT
43
        NOP
44
        NOP
45
        BTFSS COLOR_G,4
46
        BCF COLOR_OUT
47
        NOP
48
        NOP
49
        NOP
50
        BCF COLOR_OUT
51
        NOP
52
        NOP
53
        NOP
54
        BSF COLOR_OUT
55
        NOP
56
        NOP
57
        BTFSS COLOR_G,3
58
        BCF COLOR_OUT
59
        NOP
60
        NOP
61
        NOP
62
        BCF COLOR_OUT
63
        NOP
64
        NOP
65
        NOP
66
        BSF COLOR_OUT
67
        NOP
68
        NOP
69
        BTFSS COLOR_G,2
70
        BCF COLOR_OUT
71
        NOP
72
        NOP
73
        NOP
74
        BCF COLOR_OUT
75
        NOP
76
        NOP
77
        NOP
78
        BSF COLOR_OUT
79
        NOP
80
        NOP
81
        BTFSS COLOR_G,1
82
        BCF COLOR_OUT
83
        NOP
84
        NOP
85
        NOP
86
        BCF COLOR_OUT
87
        NOP
88
        NOP
89
        NOP
90
        BSF COLOR_OUT
91
        NOP
92
        NOP
93
        BTFSS COLOR_G,0
94
        BCF COLOR_OUT
95
        NOP
96
        NOP
97
        NOP
98
        BCF COLOR_OUT
99
        NOP
100
        NOP
101
        NOP
102
103
        BSF COLOR_OUT       // ---------------------------------- red color code
104
        NOP
105
        NOP
106
        BTFSS COLOR_R,7
107
        BCF COLOR_OUT
108
        NOP
109
        NOP
110
        NOP
111
        BCF COLOR_OUT
112
        NOP
113
        NOP
114
        NOP
115
        BSF COLOR_OUT
116
        NOP
117
        NOP
118
        BTFSS COLOR_R,6
119
        BCF COLOR_OUT
120
        NOP
121
        NOP
122
        NOP
123
        BCF COLOR_OUT
124
        NOP
125
        NOP
126
        NOP
127
        BSF COLOR_OUT
128
        NOP
129
        NOP
130
        BTFSS COLOR_R,5
131
        BCF COLOR_OUT
132
        NOP
133
        NOP
134
        NOP
135
        BCF COLOR_OUT
136
        NOP
137
        NOP
138
        NOP
139
        BSF COLOR_OUT
140
        NOP
141
        NOP
142
        BTFSS COLOR_R,4
143
        BCF COLOR_OUT
144
        NOP
145
        NOP
146
        NOP
147
        BCF COLOR_OUT
148
        NOP
149
        NOP
150
        NOP
151
        BSF COLOR_OUT
152
        NOP
153
        NOP
154
        BTFSS COLOR_R,3
155
        BCF COLOR_OUT
156
        NOP
157
        NOP
158
        NOP
159
        BCF COLOR_OUT
160
        NOP
161
        NOP
162
        NOP
163
        BSF COLOR_OUT
164
        NOP
165
        NOP
166
        BTFSS COLOR_R,2
167
        BCF COLOR_OUT
168
        NOP
169
        NOP
170
        NOP
171
        BCF COLOR_OUT
172
        NOP
173
        NOP
174
        NOP
175
        BSF COLOR_OUT
176
        NOP
177
        NOP
178
        BTFSS COLOR_R,1
179
        BCF COLOR_OUT
180
        NOP
181
        NOP
182
        NOP
183
        BCF COLOR_OUT
184
        NOP
185
        NOP
186
        NOP
187
        BSF COLOR_OUT
188
        NOP
189
        NOP
190
        BTFSS COLOR_R,0
191
        BCF COLOR_OUT
192
        NOP
193
        NOP
194
        NOP
195
        BCF COLOR_OUT
196
        NOP
197
        NOP
198
        NOP
199
200
        BSF COLOR_OUT       // --------------------------------- blue color code
201
        NOP
202
        NOP
203
        BTFSS COLOR_B,7
204
        BCF COLOR_OUT
205
        NOP
206
        NOP
207
        NOP
208
        BCF COLOR_OUT
209
        NOP
210
        NOP
211
        NOP
212
        BSF COLOR_OUT
213
        NOP
214
        NOP
215
        BTFSS COLOR_B,6
216
        BCF COLOR_OUT
217
        NOP
218
        NOP
219
        NOP
220
        BCF COLOR_OUT
221
        NOP
222
        NOP
223
        NOP
224
        BSF COLOR_OUT
225
        NOP
226
        NOP
227
        BTFSS COLOR_B,5
228
        BCF COLOR_OUT
229
        NOP
230
        NOP
231
        NOP
232
        BCF COLOR_OUT
233
        NOP
234
        NOP
235
        NOP
236
        BSF COLOR_OUT
237
        NOP
238
        NOP
239
        BTFSS COLOR_B,4
240
        BCF COLOR_OUT
241
        NOP
242
        NOP
243
        NOP
244
        BCF COLOR_OUT
245
        NOP
246
        NOP
247
        NOP
248
        BSF COLOR_OUT
249
        NOP
250
        NOP
251
        BTFSS COLOR_B,3
252
        BCF COLOR_OUT
253
        NOP
254
        NOP
255
        NOP
256
        BCF COLOR_OUT
257
        NOP
258
        NOP
259
        NOP
260
        BSF COLOR_OUT
261
        NOP
262
        NOP
263
        BTFSS COLOR_B,2
264
        BCF COLOR_OUT
265
        NOP
266
        NOP
267
        NOP
268
        BCF COLOR_OUT
269
        NOP
270
        NOP
271
        NOP
272
        BSF COLOR_OUT
273
        NOP
274
        NOP
275
        BTFSS COLOR_B,1
276
        BCF COLOR_OUT
277
        NOP
278
        NOP
279
        NOP
280
        BCF COLOR_OUT
281
        NOP
282
        NOP
283
        NOP
284
        BSF COLOR_OUT
285
        NOP
286
        NOP
287
        BTFSS COLOR_B,0
288
        BCF COLOR_OUT
289
        NOP
290
        NOP
291
        NOP
292
        BCF COLOR_OUT
293
        NOP
294
        NOP
295
        NOP
296
    #endasm
297
}

: Bearbeitet durch User
von Dominic K. (domi1997)


Lesenswert?

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.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
          800us     450us

 Und wenn dieses bit 0 ist, folgendes:
1
        _____
2
 DATA  |     |___________
3
        450us    800us

 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.

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

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...

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.