Hallo Frank,
Da hab ich den Code nicht richtig vestanden.
So wie du es beschreibst, wäre es richtig.
Aber ich komm einfach nicht drauf, was den DMA-IRQ lange genug
blockieren könnte und durch den ldr-ausgelöst wird.
Die andere Idee war, dass evtl. eine Race-kondition nach dem berechnen
der ersten 2 LED's den Zeiger neu initialisiert und damit die ersten 2
leds nochmal berechnet. (ausgelöst duch
ldr-änderungen->ws2812_refresh()).
Aber du hast das gut gegeneinander gelockt, soweit ich den code richtig
lese.
Und: warum nur bei diesem user? warum hat sonst keiner das Problem?
(Oder meldet sich sonst keiner?)
0xef
0xef schrieb:> - evtl. doppelt sovile LED-Daten berechnen (Puffergröße verdoppeln ->> mehr Zeit, bis es kritisch wird).
Ja, das wäre eine Möglichkeit. Bei der Vorausberechnung der Werte für 4
LEDs statt 2 bleibt mehr Zeit für anderes.
> - Priorität des DMA-Interrupt erhöhen? bisher laufen ja alle auf> gleicher Prio.
Das kann ich nicht nachvollziehen. Auszug aus ws2812.c:
]
Somit hat der Timer-Interrupt in main.c die niedrigste Priorität und
diejenige in ws2812.c die höchste Priorität. So habe ich es jedenfalls
verstanden.
0xef schrieb:> Und: warum nur bei diesem user? warum hat sonst keiner das Problem?
Ich habe bisher 3 gezählt.
> (Oder meldet sich sonst keiner?)
Tja, das ist die Frage.
0xef schrieb:> Warum das pixelmuster in diesem Szenario genau 2 leds springt, verstehe> ich aber nicht.
Ähh, ich will euch ja nicht ärgern oder so, aber das sind nicht immer 2
LEDs. Manchmal auch nur eine. Am häufigsten jedoch 2. Oder das ist nur
zu schnell und ich erkenne nur das Verschieben von einer. Kann auch
sein.
Nach längeren Recherchen habe ich einen Hinweis erhalten, der vielleicht
was bringt. Und zwar soll man beim STM32 den Systick-Handler vor allen
anderen Interrupts mit ihren Prioritäten initialisieren, sonst könnte
das mit den Prioritäten-Steuerungen schiefgehen:
Bisher stand in main.c:
1
timer2_init();// initialize timer2 for IRMP, DCF77, EEPROM etc.
2
delay_init(DELAY_RESOLUTION_5_US);// initialize delay functions with granularity of 5 us
Ich habe das mal umgedreht:
1
delay_init(DELAY_RESOLUTION_5_US);// initialize delay functions with granularity of 5 us
2
timer2_init();// initialize timer2 for IRMP, DCF77, EEPROM etc.
da delay_init() den Systick-Handler verwendet.
@Mirco: Ich lade das gleich mal hoch, dann kannst Du das mal testen über
OTA.
https://youtu.be/pB5v6Q6dTuE
Bei mir schauts mit 2.5.0 so aus. Vielleicht könnt ihr die Verschiebung
ja irgendetwas zuordnen.
"Es ist halb neun" war die Uhrzeit.
Es ist ein STM32F103c8t6 mit Esp12f, in der Verschaltung ohne OTA. An
den WS2812b ist ein Pull-up von 1.5kohm installiert. Sowie der Rest ist
mehr oder weniger 1:1 das MiniDevBoard.
Woran es liegt würde mich natürlich schon interessieren. Mit der 2.4.0
läuft die Uhr aber stabil, von daher kann ich auch damit leben, wenn
wirklich nur ich betroffen bin.
Hallo zusammen,
ich habe die letzten Tage meine erste WordClock zusammengebaut und
musste nun leider feststellen, dass ein Kurzschluss zwischen Ground und
5V ist.
Ich vermute den Fehler entweder "im" Shield oder auf dem STM32.
Sichtbare Lötstellen sind alle schon als Fehlerquelle ausgeschlossen.
Ist es denn allgemein möglich, dass Leiterbahnen im Shield irgendwo
kurzgeschlossen sind?
Des Weiteren ist auch der 3.3V Pin auf dem STM32 in Kontakt mit Ground.
Aus diesem Grund denke ich, dass ich vielleicht den Microcontroller beim
Löten gegrillt habe.
Würde mich über eine professionelle Einschätzung freuen.:)
Ph L. schrieb:> Würde mich über eine professionelle Einschätzung freuen.
Dafür wären (detailreiche) Bilder der Löt- und auch der Bestückungsseite
der Platine hilfreich.
Frank M. schrieb:> Somit hat der Timer-Interrupt in main.c die niedrigste Priorität und> diejenige in ws2812.c die höchste Priorität.
Stimmt, das hatte ich überlesen. Allerdings haben die UART's auch prio0
und damit die höchste...
Auch kann ich keinen Aufruf von NVIC_SetPriorityGrouping(0) aus
core_cm3.h bzw. core_cm4.h finden. Nicht, dass hier 'spezielle' MCU's am
werkeln sind, welche da ein explizites setzen brauchen.
(mehr info:
http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/Cihehdge.html#BABIJABJ
)
@Mirco, @X.O.:
Danke für die Videos, das hilft ungemein. Das Riesenboard von X.O. sieht
hammergeil aus! (Ist da ein Original STM32F103c8t6 drauf? oder evtl ein
GD32... clone?)
Anbei hier eine TESTVERSION-2.6.2 mit folgenden Modifikationen:
- ws2812 berechnet 2 LED's am Stück (Mehr 'Luft' fürs IRQ-handling)
- pause der ws2812 verdreifacht (ich möchte 'komische' LED's als Ursache
ausschliessen)
- IRQ-Prio der UARTS auf 3 abgesenkt (von 0). Damit darf der DMA-IRQ
diese unterbrechen.
Danke fürs testen und rückmelden.
0xef
Noch ein kleiner Info-brocken:
Ich hab mir mal das errata vom stm32f103c8t6 angesehn und dabei zwar
viel interessantes, aber nichts relevantes gefunden. Also einen
(bekannten und vom Hersteller veröffentlichten) Hardwarebug auf
MCU-Seite könnte man auszuschließen versucht sein.
0xef
0xef schrieb:> Stimmt, das hatte ich überlesen. Allerdings haben die UART's auch prio0> und damit die höchste...
Stimmt. Aber das dürfte für das Phänomen keine Rolle spielen, denn durch
eine Helligkeitsregelung (wie mit der Taschenlampe im Video) wird keine
explizite UART-Kommunikation angestoßen.
Es wird aus main.c dann aufgerufen:
wobei die beiden FALSE-Parameter dafür sorgen, dass die neue Helligkeit
weder im EEPROM abgespeichert noch als Aktualisierungs-Info über den
UART an den ESP8266 geschickt wird.
> - ws2812 berechnet 2 LED's am Stück (Mehr 'Luft' fürs IRQ-handling)
Sinnvoll. Du kannst mir gern die dafür notwendigen Änderungen schicken.
> - pause der ws2812 verdreifacht (ich möchte 'komische' LED's als Ursache> ausschliessen)
Ok. Aber ich glaube nicht, dass dies hier das Problem ist.
> - IRQ-Prio der UARTS auf 3 abgesenkt (von 0). Damit darf der DMA-IRQ> diese unterbrechen.
Das ist sinnvoll - auch wenn es sich hier kaum um den zu findenden
Fehler dreht, s.o.
Frank M. schrieb:> Es wird aus main.c dann aufgerufen:display_set_display_brightness> (ldr_value, FALSE, FALSE);>> wobei die beiden FALSE-Parameter dafür sorgen, dass die neue Helligkeit> weder im EEPROM abgespeichert noch als Aktualisierungs-Info über den> UART an den ESP8266 geschickt wird.
Leider ist das nur die halbe Wahrheit. Bei größeren
LDR-Helligkeitsschwankungen wird der aktuelle LDR-Wert doch an den
ESP8266 geschickt, damit dieser die aktuelle LDR-Helligkeit im
Webinterface anzeigen kann. Das ist wichtig für die Kalibrierung.
Auszug aus main.c:
1
if(ldr_raw_value+16<last_ldr_raw_value||ldr_raw_value>last_ldr_raw_value+16)// difference greater than 16
2
{
3
debug_log_printf("ldr: old raw brightnes: %d new raw brightness: %d\r\n",last_ldr_raw_value,ldr_raw_value);
4
last_ldr_raw_value=ldr_raw_value;
5
var_send_ldr_raw_value();
6
}
Den letzten Befehl "var_send_ldr_raw_value ();" könnte man testweise mal
auskommentieren. Ich halte diesen für einen heißen Kandidaten. Die
UART-Prio-Korrektur könnte dieses Problem also doch tatsächlich lösen.
P.S.
Die debug_log_printf()-Calls sind nur in der Debug-Variante aktiv, sonst
werden sie durch den Preprocessor komplett eliminiert.
Mirco D. schrieb:> So habe deine neue Version drauf.> Jetzt hüpft es anders
Ja, komplett anders. Von einer Verschiebung um 1 oder 2 Stellen kann man
hier gar nicht mehr reden.
Hattest Du mal meine Version von gestern abend probiert?
Beitrag "Re: WordClock mit WS2812"
(ich bin eher für moderate Tests, wenn man zuviel auf einmal ändert,
dann weiß man am Ende gar nicht mehr, woran es gelegen hat).
Mirco D. schrieb:> Beitrag "Re: WordClock mit WS2812"
Achso, das Video hatte ich mir zwar angeschaut, aber ich hatte nicht
erkannt, dass das eine direkte Antwort auf meinen Beitrag war...
Ich habe im Update-Path "Test" mal eine Pre2-Version abgelegt. Diese
unterdrückt das Übertragen der Helligkeit per UART zum ESP. Allerdings
kann man dann den LDR nicht mehr kalibrieren... also nicht tun, bitte
nur Testen ;-)
Frank M. schrieb:> also nicht tun, bitte> nur Testen ;-)
Dein Wunsch ist mir Befehl.
Leider keine Änderung zur pre1.
Ergänzungsinfo LDR
Ich benutze den "A 906032" von Reichelt und habe entsprechend R1 = 10K
eingesetzt. R2 ist unbestückt auf dem Shield.
Hallo,
ich lese jetzt schon eine zeit lang mit wegen des "springen" Problems.
Meine Uhr verhält sich bei jedem Minutenwechsel so wie im Video zu sehen
ist.
Jetzt meine Frage, ist dieses Verhalten normal oder das von euch
beschriebene Problem?
Bei jedem 5 Minuten Wechsel läuft die Animation normal durch.
Helligkeitssensor ist verbaut aber deaktiviert.
Es handelt sich um die wc12h-stm32f103-ws2812-grb.
Grüße
Howy
0xef schrieb:> @X.O.:> Danke für die Videos, das hilft ungemein. Das Riesenboard von X.O. sieht> hammergeil aus! (Ist da ein Original STM32F103c8t6 drauf? oder evtl ein> GD32... clone?)
Ja, es ist ein original STM.
Hi,
nachdem meine Uhr lief, waren alle in der Familie begeistert.
Aber sie hat manchmal "Display" Fehler :-( (siehe Bild, sollte
normalerweise alles in blau sein)
Man konnte durch aus und wieder ein den Fehler beheben, aber nun nicht
mehr.
Leider habe ich keine Idee woran das liegen kann, bzw., wo ich mit der
Suche ansetzen soll.
Hat jemand eine Idee?
Mein Version von der Uhr:
WordClock12h mit
STM32F103C8T6 Mini-Development Board
ESP8266
DS3231
als 3,3V Netzteil habe ich AMS1117LDO 800MA
Hallo Frank D.,
Hallo Harald,
habt ihr beide den ca. 1,8K PullUp Widerstand der LEDs eingebaut?
Welches Board wird verwendet (Version)?
Aus eigener Erfahrung kann ich hier nur empfehlen, nochmals alle Masse
Verbindungen der LEDs zu prüfen. Hatte erst vor 2 Tagen eine Uhr da, bei
der an einer Minuten LED die GND Leitung vergessen wurde und der Fehler
sah wie auf dem Bild von Frank D. aus.
Witziger Weise trat der Fehler auch nur bei bestimmten Farben auf.
Möglich wäre aber auch eine defekte LED, hier z.B. das T, da in den
WS2812 das Signal in jeder LED aufbereitet und weitergeleitet wird, muss
hier nur eine nicht ganz sauber arbeiten schon können Fehlfarben und
Sprünge möglich sein. Und leider musste ich feststellen das die
aktuellen LEDs aus China nicht mehr so gut laufen, wie die die ich vor
ungefähr 1,5 Jahren bestellt habe. Sprich die LED ausfälle häufen sich.
Im Gegensatz zu meiner ersten Uhr die immer noch an der Wand hängt und
nie wieder angefasst werden musste.
Ich kann euch hier nur empfehlen mal nur Teile des LED Streifens zu
benutzen und den Display Test öfters laufen zu lassen.
Viel Erfolg
Gruß
Marco
Mittlerweile glaube ich auch, dass der Fehler nicht in der Software zu
finden ist. Ich habe mittlerweile von vielen Leuten per Mail die
Mitteilung bekommen, dass die aktuelle Version bei ihnen stabil läuft.
Auch bei mir ist das Springen der Buchstaben nicht im geringsten
reproduzierbar.
Außerdem haben 0xef und ich hier mehrere Testversionen bereitgestellt,
um
"verdächtige" Abschnitte in der Software abzuchecken. Sämtliche Tests
waren nicht erfolgreich. Es konnte keine Ursache in der Software
entdeckt werden. Zudem kann man annehmen, dass ein Software-Fehler bei
allen auftritt und nicht bei einzelnen. Beim Shield v3 hat auch noch
niemand einen derartigen Fehler (Springen der Buchstaben) gemeldet.
Daher nehme ich an, dass die Ursache eher im individuellen
Hardware-Aufbau liegt.
Deswegen mal eine Checkliste:
1. Alle GND-Verbindungen sauber vorhanden?
2. Ist ein 1,8K (oder 1,5K) Pullup an DIN der ersten WS2812-LED?
3. Ist ein 220 Ohm Serienwiderstand zwischen dem Data-Pin und DIN der
ersten WS2812-LED? Wenn ja, diesen bitte brücken.
4. Die Data-Leitung zu DIN sollte möglichst kurz gehalten (max. 30-40cm)
werden. Je kürzer, desto besser.
5. Die Data-Leitung sollte nicht in unmittelbarer Nachbarschaft zu
anderen Datenleitungen wie LDR, TSOP und DS18xxx geführt werden. Die
Data-Leitung sollte auch zusammen mit GND mittels zweipoligem Kabel an
die erste LED geführt werden. Ich persönlich verwende dafür ein
2-poliges oder 3-poliges Flachbandkabel, indem ich einfach 2 Leitungen
vom vorhandenen 16-pol. Flachbandkabel abtrenne. Beim 2-poligem Kabel
verwende ich GND und Data, beim 3-poligem +5V, Data und GND dafür.
6. Das Netzteil zur Versorgung der Stripes sollte mindestens einen Strom
von 4A leisten können. Die Versorgungsspannung der Stripes sollte
mindestens in jeder zweiten Zeile neu eingespeist werden. Die
Versorgungsspannung sollte auch sehr nahe an 5V (4,9V-5,1V) sein.
Größere Abweichungen führen zu Fehlern. Am besten misst man die Spannung
während des Display-Tests einmal am Anfang der LED-Kette und einmal am
Ende. Bei zu großen Differenzen klappt das nicht mit der
Zwischeneinspeisung der Spannung in jeder zweiten Zeile. Unbedingt
überprüfen!
7. Wurden WS2812-LED-Stripes verwendet, auf denen auch
Entkoppelkondensatoren für jede(!) LED verlötet sind? Es gibt durchaus
China-Anbieter, welche weniger oder gar keine Entkoppelkondensatoren für
ihre Stripes verwenden.
Hallo Marco,
Also der Wiederstand ist verbaut, Board ist Version 3, also die neueste.
Verbindungen sind alle in ordnung, auch beim Displaytest leucchten alle
Led's richtig.
Ich habe eine zweite uhr (zumindest die Elektronik) aufgebaut und dort
ist der selbe "hüpfer" bei den minutenwechsel.
Software ist die aktuelle.
Hab von diesem auch ein Video gemacht.
Grüße
Howy
PS.: Die Uhr ist auch so der Hammer und ich danke allen die dazu
beigetragen haben. Der kleine Bug stört mich jetzt auch nicht wirklich.
Aber wäre halt noch eine steigerung wenn der auch noch beseitigt wäre.
anbei eine TESTVERSION von v2.6.2:
- 9 LED's auf einmal berechnen statt einer.
(wenn ich nicht komplett daneben liege, sollte also die erste Zeile
einer WC24h nicht springen (der rest hoffentlich auch nicht))
Ich kuck gerade noch die Interrupts durch und lade dann eine Version mit
deaktivierten Interrupts hoch. Ich möchte endlich wissen, wieso ich das
Problem nicht reproduzieren kann und ob andere interrupts an dem Problem
beteiligt sind.
0xef
Frank M. schrieb:> Mittlerweile glaube ich auch, dass der Fehler nicht in der Software zu> finden ist. Ich habe mittlerweile von vielen Leuten per Mail die> Mitteilung bekommen, dass die aktuelle Version bei ihnen stabil läuft.> Auch bei mir ist das Springen der Buchstaben nicht im geringsten> reproduzierbar.>> Außerdem haben 0xef und ich hier mehrere Testversionen bereitgestellt,> um> "verdächtige" Abschnitte in der Software abzuchecken. Sämtliche Tests> waren nicht erfolgreich. Es konnte keine Ursache in der Software> entdeckt werden. Zudem kann man annehmen, dass ein Software-Fehler bei> allen auftritt und nicht bei einzelnen. Beim Shield v3 hat auch noch> niemand einen derartigen Fehler (Springen der Buchstaben) gemeldet.>> Daher nehme ich an, dass die Ursache eher im individuellen> Hardware-Aufbau liegt.>> Deswegen mal eine Checkliste:>> 1. Alle GND-Verbindungen sauber vorhanden?
Habe ich alle nachkontrolliert und sind in Ordnung
>> 2. Ist ein 1,8K (oder 1,5K) Pullup an DIN der ersten WS2812-LED?
Ja ist bei beiden verbaut
>> 3. Ist ein 220 Ohm Serienwiderstand zwischen dem Data-Pin und DIN der> ersten WS2812-LED? Wenn ja, diesen bitte brücken.
Ist soviel ich herausgefunden habe beim Board V3 nicht vorgesehen
>> 4. Die Data-Leitung zu DIN sollte möglichst kurz gehalten (max. 30-40cm)> werden. Je kürzer, desto besser.
Gerade noch mal gekürzt, jetzt unter 30 cm
>> 5. Die Data-Leitung sollte nicht in unmittelbarer Nachbarschaft zu> anderen Datenleitungen wie LDR, TSOP und DS18xxx geführt werden. Die> Data-Leitung sollte auch zusammen mit GND mittels zweipoligem Kabel an> die erste LED geführt werden. Ich persönlich verwende dafür ein> 2-poliges oder 3-poliges Flachbandkabel, indem ich einfach 2 Leitungen> vom vorhandenen 16-pol. Flachbandkabel abtrenne. Beim 2-poligem Kabel> verwende ich GND und Data, beim 3-poligem +5V, Data und GND dafür.
Bei meiner testversion kein LDR und kein Tsop und DS18xxx testweise
direkt angelötet
>> 6. Das Netzteil zur Versorgung der Stripes sollte mindestens einen Strom> von 4A leisten können. Die Versorgungsspannung der Stripes sollte> mindestens in jeder zweiten Zeile neu eingespeist werden. Die> Versorgungsspannung sollte auch sehr nahe an 5V (4,9V-5,1V) sein.> Größere Abweichungen führen zu Fehlern. Am besten misst man die Spannung> während des Display-Tests einmal am Anfang der LED-Kette und einmal am> Ende. Bei zu großen Differenzen klappt das nicht mit der> Zwischeneinspeisung der Spannung in jeder zweiten Zeile. Unbedingt> überprüfen!
Netzteil 10A
>> 7. Wurden WS2812-LED-Stripes verwendet, auf denen auch> Entkoppelkondensatoren für jede(!) LED verlötet sind? Es gibt durchaus> China-Anbieter, welche weniger oder gar keine Entkoppelkondensatoren für> ihre Stripes verwenden.
Jede LED hat einen kondensator.
Grüße
Harald
PS meine Konfiguration ist: wc12h-stm32f103-ws2812-grb mit Board V3
Nochmals herzlichen Dank an dich!
Hallo Harald,
wie werden die LEDs mit Strom versorgt? In dem 2. Video sieht man das
der 16pol Anschluss nicht verwendet wird.
Kannst du vielleicht einfach mal testhalber die Minuten LEDs rausnehmen
und DOUT vom Board direkt an die erste LED des Strips an klemmen? bzw.
dann auch mal erst beim 2. Strip anfangen?
Habe wie gesagt mittlerweile schon einige Fehlerbilder gesehen und bei
mir waren es meist LEDs, die defekt waren.
Bei deiner Testversion sind kein LDR und TSOP angeschlossen, die
alternativ Widerstände/ Schaltung ist drin? Sehe in dem Video die
Drahtbrücke für den TSOP nicht und den R2 für den LDR.
Bzw. kann es im Video nicht wirklich erkennen.
Gruß
Marco
anbei eine TESTVRSION bei der die LED's synchron upgedated werden.
Idee dahinter: falls das Problem ausgelöst wird before ws2812_refresh
aufgerufen wird, hüpft die Anzeige weiterhin, sonst nicht.
Den zugehörigen Patch hänge ich auch dran, damit jeder nachvollziehen
kann, was hier anders ist.
0xef
So und noch ne Testversion (falls die vorige noch Hüpfer drin hat.)
Hier sind jetzt auch die IRQ's mit abgeschaltet.
Wenn diese Version noch hüpft weiss ich nicht mehr weiter....
0xef
Frank M. schrieb:> Mittlerweile glaube ich auch, dass der Fehler nicht in der Software zu> finden ist.
Ich bin noch verwirrt ob der Tatsache, dass mit V2.4 noch alles
funktioniert zu haben scheint. Ich tippe zwar auch eher auf
'grenzwertige' Hardware, aber dennoch frage ich mich, wass denn nun bei
V2.5+ das Fehlerbild auslöst und bei V2.4 nicht? Vielleicht haben wir
irgendwo ein marginal knappes timing drin (aka race-condition) und bei
v2.4 hat der compiler irgendwo einen takt länger/kürzer gebraucht und
das Problem trat dadurch nicht auf, jetzt aber schon. Da der Fehler auf
meiner Hardware nicht nachstellbar ist, muss eine 'Hardware-abhängige'
Komponente an dem Fehler beteiligt sein. Und die finde ich nicht.
0xef
PS.: Da fällt mir noch was ein: Kann bitte mal jemand die v2.6.2 für
[wc12h|wc24h]-stm32f103c8-ws2812-grb mit der laut Artiekl empfohlenen
emBitz IDE bauen und kucken, ob das Problem damit auch auftritt? Nicht,
das es der Wechsel des Compilers ist... (glaube ich zwar nicht, aber
ausschließen wäre gut.)
0xef schrieb:> anbei eine TESTVRSION bei der die LED's synchron upgedated werden.> Idee dahinter: falls das Problem ausgelöst wird before ws2812_refresh> aufgerufen wird, hüpft die Anzeige weiterhin, sonst nicht.> Den zugehörigen Patch hänge ich auch dran, damit jeder nachvollziehen> kann, was hier anders ist.>> 0xef
Die tut es !!!
Fehler ist bis dato nicht aufgetreten
0xef schrieb:> Da fällt mir noch was ein: Kann bitte mal jemand die v2.6.2 für> [wc12h|wc24h]-stm32f103c8-ws2812-grb mit der laut Artiekl empfohlenen> emBitz IDE bauen und kucken, ob das Problem damit auch auftritt? Nicht,> das es der Wechsel des Compilers ist..
Diese Möglichkeit schoss mir auch schon durch den Kopf, obwohl ich
selber auch die Hex-Dateien des gcc unter Linux verwende. Aber sicher
ist sicher. Im Anhang ist die mit EmBitz erzeugte Version.
@Mirco: Kannst Du die bitte testen?
EDIT: Hat sich wohl überschnitten, hat sich dann wohl erledigt ;-)
Frank M. schrieb:> @Mirco: Kannst Du die bitte testen?
Hab mir trotzdem den Spaß gemacht. Kompiler können wir ausschließen.
Auch hier ist der Fehler drin!
0xef schrieb:> anbei eine TESTVRSION bei der die LED's synchron upgedated werden.> Idee dahinter: falls das Problem ausgelöst wird before ws2812_refresh> aufgerufen wird, hüpft die Anzeige weiterhin, sonst nicht.
Laut Mirco liegt es daran. Im Patchfile ist dann die Stelle zu sehen:
1
ws2812_dma_start();
2
+
3
+while(ws2812_dma_status!=0)
4
+{
5
+;// wait until DMA transfer is ready
6
+}
Das Warten auf das Ende des Komplett-Transfers macht natürlich alle
Vorteile eines DMA-Transfers zunichte: Man kann während des Transfers
nicht weiterarbeiten. Daher kann diese Änderung keine Lösung sein -
jedenfalls nicht für sich allein.
Aber ich beginne zu verstehen, was da passiert:
Früher mit großem DMA-Buffer:
display.c schreibt in LED-Buffer
ws2812.c konvertiert die LED-Buffer-Daten in DMA-Buffer
DMA liest asynchron ausschließlich aus DMA-Buffer
display.c arbeitet währenddessen(!) weiter und schreibt in LED-Buffer
Das ergibt aber kein Problem, da LED-Buffer und DMA-Buffer voneinander
getrennt sind.
Jetzt läuft es seit einiger Zeit mit kleinem DMA-Buffer aber so:
- display.c schreibt in LED-Buffer
- ws2812.c konvertiert nur wenig LED-Buffer-Daten (rgb_buf) für
DMA-Buffer
- DMA liest asynchron aus DMA-Buffer und wird gleichzeitig mit neuen
konvertierten Daten aus LED-Buffer gefüttert.
- display.c arbeitet währenddessen(!) weiter und schreibt in LED-Buffer
Und hier haben wir den Konflikt: Es kann vorkommen, dass in den
LED-Buffer geschrieben wird, während der DMA-Interrupt noch
LED-Buffer-Daten für den DMA-Transfer vorbereitet. Das gibt dann Salat.
Für mich gibt es nur eine Lösung:
Den LED-Buffer rgb_buf 2x vorsehen, einmal für die aktuelle Übertragung
und einmal für die kommende. Dann kann die obige Blockung wieder weg.
Frank M. schrieb:> Für mich gibt es nur eine Lösung:>> Den LED-Buffer rgb_buf 2x vorsehen, einmal für die aktuelle Übertragung> und einmal für die kommende. Dann kann die obige Blockung wieder weg.
Ich habe das Double-Buffering mal eingebaut. Die anhängende Version
blockt nicht mehr, verwendet aber 2 LED-Buffer (rgb_buf).
@Mirco: Kannst Du nochmal testen? Danke.
Frank M. schrieb:> Und hier haben wir den Konflikt: Es kann vorkommen, dass in den> LED-Buffer geschrieben wird, während der DMA-Interrupt noch> LED-Buffer-Daten für den DMA-Transfer vorbereitet. Das gibt dann Salat.
Das sollte aber nur ein 'Tearing' effekt geben, keinen Positionswechsel.
(Die RGB Werte für Pixel X stehen immer an der gleichen Stelle und die
DMA-Routine hat ja ihren eigenen Zeiger, woher sie ihre aktuellen Daten
liest. Und der wird nur bei starten des transfers zurückgesetzt.
Das war ja auch eine meiner Vemrutungen, dass dieser Zeiger kurz nach
dem start des DMA-transfers zurückgesetzt wird.
-> die IRQ-Routine gar nicht hängt, sondern die ersten paar Pixel
zweimal ausgibt.)
An sich fände ich double-buffer auch besser. Da kann man auch noch
überlegen, ob man den Puffer immer kopiert, oder nur abwechsend
beschreibt.
Ersteres braucht mehr Zeit (kann man mit einem DMA etwas abpuffern), bei
letzterem muss man höllisch aufpassen, alle LED's zu aktualisieren,
sonst gibts Geisterbilder... (und das initiale Löschen braucht auch
Zeit...)
Im Moment wäre ich 60:40 für abwechselndes Pufferbenutzen.
Da ist die Logik relativ einfach:
Puffer löschen -> alle Element reinmalen -> ws2812 triggern -> zum
anderen Puffer umschalten
und alles wieder von vorn.
0xef
PS.: beim rumkopieren kann die CPU 32bit-weise die eine Hälfte kopieren,
ein gleichzeitig gestarteter MEM2MEM DMA die andere Hälfte.
Ich meine gelesen zu haben, dass bei zeitgleichem Zugriff von DMA und
CPU beide gleich oft drankommen. Ich kann das nochmal raussuchen.
0xef schrieb:> An sich fände ich double-buffer auch besser. Da kann man auch noch> überlegen, ob man den Puffer immer kopiert, oder nur abwechsend> beschreibt.
Ich habs umgesetzt mit wechselndem Index, da braucht man den Buffer
nicht zu kopieren. Da er immer vollständig beschrieben wird, sollte es
auch keine Geisterbilder geben. Testversion hängt oben dran, die
Source-Änderungen habe ich Dir zur Begutachtung bereits per Mail
geschickt.
Frank M. schrieb:> Frank M. schrieb:>> Für mich gibt es nur eine Lösung:>>>> Den LED-Buffer rgb_buf 2x vorsehen, einmal für die aktuelle Übertragung>> und einmal für die kommende. Dann kann die obige Blockung wieder weg.>> Ich habe das Double-Buffering mal eingebaut. Die anhängende Version> blockt nicht mehr, verwendet aber 2 LED-Buffer (rgb_buf).>> @Mirco: Kannst Du nochmal testen? Danke.
Hi Frank,
Leider völlig andere Effekte.
siehe Video
Ich kriege nur nicht in den Schädel, warum das dann nicht bei allen
auftritt.
Liegt es vielleicht an etwas unterschiedlichen STM32F103 Boards?
Mirco D. schrieb:> Leider völlig andere Effekte.
Erstmal danke, ich teste die Änderung heute abend mal mit meiner Uhr.
Offenbar habe ich da noch auf die Schnelle einen Fehler eingebaut. Es
war jetzt auch erstmal nur ein schneller Hack.
Immerhin haben wir den Grund gefunden, das ist schon mal eine Menge
wert. Damit sollte es mir auch möglich sein, diesen gezielt durch
Manipulation an der Software zu reproduzieren.
Mirco D. schrieb:> Ich kriege nur nicht in den Schädel, warum das dann nicht bei allen> auftritt.
Das verstehe ich auch nicht. Meine Uhr läuft mit der 2.6.2 schon eine
Ewigkeit, ohne dass einmal dieser Effekt aufgetreten wäre. Ich kann mir
nur vostellen, dass hier mehrere Bedingungen zusammenkommen müssen, bis
dieser Effekt zutage tritt. Bei der Vielzahl von möglichen Hard- und
Software-Konfigurationen ist das Thema schon ziemlich komplex.
Ich bin noch nicht überzeugt, dass double-buffering die Ursache
beseitigt.
Und diese Ursache muss was mit Hardware zu tun haben, sonst hätten mehr
Leute das Problem. Und wenn es mit blockierender Ausgabe funktioniert
hat, wird die 'störende Aktion' nach dem ws2812_refresh Aufruf
ausgelöst.
Jetzt muss ich mich mal durch den Code wühlen und versuchen den Auslöser
weiter einzukreisen. Das könnte aber noch ein wenig dauern, da ich den
Code lange nicht so gut kenne wie z.B. Frank....
Nichtsdestotrotz ist double-buffering einzubauen eine gute Idee.
Aber bis wir auf des Pudels Kern stoßen könnte es das eigentliche
Problem verschleiern...
0xef
@Mirco D.: Was meinst du mit unterschiedlichen STM32F103 Boards?
Ich habe dieses hier:
https://www.aliexpress.com/item/x/32555258029.html
(von anderen Verkäufern, aber alle, die ich habe sehen aus wie das
verlinkte)
Ich hatte die 2.6 heute nichnals an einer anderen Uhr getestet und die
läuft ohne Probleme.
Ich werde die Liste von Frank nochmals durchgehen was sich da zwischen
den beiden Uhren unterscheidet. Werde mal den LDR ausmessen.
Melde mich spåter
X. O. schrieb:> Ich hatte die 2.6 heute nichnals an einer anderen Uhr getestet und die> läuft ohne Probleme.
Sehr aufschlussreich. Bitte stelle die Konfiguration an dieser Uhr exakt
so ein wie auf der Uhr, wo der Fehler auftritt. Also insbesondere die
Animationen, Farben usw.
> Ich werde die Liste von Frank nochmals durchgehen was sich da zwischen> den beiden Uhren unterscheidet.
Gute Idee!
Eigentlich ist es ja ganz spannend, diesem merkwürdigen Fehler
hinterherzujagen. Aber langsam wünsche ich mir ein Ergebnis herbei ;-)
Frank M. schrieb:> Eigentlich ist es ja ganz spannend, diesem merkwürdigen Fehler> hinterherzujagen. Aber langsam wünsche ich mir ein Ergebnis herbei ;-)
Hallo Frank,
Ich glaube (mal wieder) ich habs!
in display.c wird an verschiedenen Stellen led_refresh aufgerufen,
(mal für die Statusled, mal die Minuten, mal die Matrix, mal das
ambilight)
aber diese Teile lassen sich nicht unabhängig updaten (weil ja alle leds
in einer Kette hängen). Was, wenn durch die rapide Änderung des
LDR-Wertes mehrere solcher updates kurz nacheinander kommen?
Also hab ich mir den ws2812_refresh nochmal zur Brust genommen:
Er wartet braf, bis der IRQ ws2812_dma_status auf 0 setzt und triggert
dann einen neuen Durchlauf. Was wenn das doch (für spezielle LED's) zu
zeitig kommt? Dann würden die neuen LED-Daten nicht bei der ersten LED
angenommen, sind an der letzten Kettenposiion angehängt. Was wenn das
vorige update kein volles war? z.B. nur die Statusled? und danach ein
volles? Dann müssten alle Pixeldaten verrutscht dargestellt werden (und
den Puffer zu verdoppeln würde das Problem nur verschärfen: genau das
ist ja passiert!)
Also hab ich mir nochmal die DMS-IRQ Routine im WS2812 angesehen:
1
if(DMA_GetITStatus(WS2812_DMA_CHANNEL_IRQ_HT))// check half-transfer interrupt flag
2
{
3
DMA_ClearITPendingBit(WS2812_DMA_CHANNEL_IRQ_HT);// reset flag
4
ws2812_setup_dma_buf(0);
5
}
6
if(DMA_GetITStatus(WS2812_DMA_CHANNEL_IRQ_TC))// check transfer complete interrupt flag
7
{
8
DMA_ClearITPendingBit(WS2812_DMA_CHANNEL_IRQ_TC);// reset flag
9
10
if(current_dma_buf_pos<current_data_pause_len)
11
{
12
ws2812_setup_dma_buf(1);
13
}
14
else
15
{
16
DMA_Cmd(WS2812_DMA_STREAM,DISABLE);// disable DMA
17
ws2812_dma_status=0;// set status to ready
18
}
19
}
Zum einen wird auf die möglich Pause Bedingung nur im TC aber nicht im
HT Zweig geprüft. Zum anderen: wenn der HT-Zweig alle LED's (+pause)
BERECHNET hat wird beim nächsten TC IRQ der DMA disabled und das
Status_flag zurückgesetzt. Allerdings sind zum diesem Zeitpunkt noch bis
zu 2*24 Bits im DMA-Puffer (die eigentlich noch ausgegeben werden
müssten). Der DMA könnte also potentiell bis zu max 60. us (eine LED
braucht 30us) zu früh restarten. Das könnte als Reset-Pause für manche
LED's dann zu kurz sein.
Dazu passt, dass das springen der Buchstaben (soweit ich mich erinnere)
bei der wc24h und nicht der wc12h auftritt. Bis die wc24h alle LED's mit
daten gefüttert hat, ist die main wahrscheinlich(er) schon wieder in
einer _refresh und wartet auf das Ende des DMA.
Meinen 'improved' WS2812 reichen auch 10us Reset-Puls (ausprobiert mit
anderem Programm), aber wahrscheinlich nicht allen Ws2812...
anbei ein möglicher Quickhack nebst Testfile.
Änderungsvorschlag:
Immer volle updates machen. Egal wieviele Ambilight LED's der User
konfiguriert, wir haben eh den RGB-Puffer für die maximalanzahl, da
können wir auch alle LED-Daten ausgeben. Die laufen dann halt ins leere,
aber das ganze reduziert die Bandbreite an möglichen Fehlerursachen.
Außerdem die noch im DMA-Puffer liegenden Daten berücksichtigen.
Oder als poor-mans-hack: vor dem restarten des DMA delay_us(50)
einbauen.
0xef
PS.: (Ich weiss, dass beim F401) TIM1 nach einer einstellbaren Anzahl
ticks die Arbeit automatisch einstellen kann. Ich kuck mal, ob a) das
TIM2 auch kann oder b) beide synchron laufen können und TIM1 dann TIM2
abschalten kann (nach Ende der Pause). Und wie das beim F103 aussieht.
Falls wir Pech haben, müssen wir TIM1 für die LED-Ausgabe nehmen (und
wieder umverdrahten). Aber erstmal Datenblatt wälzen....
Sorry kleiner Denkfehler: es sind max 24Bits noch im DMA-Puffer die
verschluckt werden könnten (also 30us). Die minimale Pause wäre dann nur
20us und das reicht aber wahrscheinlich trotzdem nicht allen LED's.
Der Rest der Argumentation bleibt davon unberührt...
0xef
Hallo,
#Marco
Du hattest recht, beim Board hatte ich noch Fehler, diese habe ich jetzt
behoben (siehe Foto).
Leider hat sich das Verhalten nicht geändert, habe mal eine
Serienaufnahme gemacht und angehängt.
Inzwischen habe ich ein wenig herumprobiert, habe versucht das Ambilight
zu verändern...
Hat es schlimmer gemacht, danach war nicht nur beim umschalten Chaos,
sondern besagtes Chaos blieb bestehen...
grüße
Harald
0xef schrieb:> Zum einen wird auf die möglich Pause Bedingung nur im TC aber nicht im> HT Zweig geprüft. Zum anderen: wenn der HT-Zweig alle LED's (+pause)> BERECHNET hat wird beim nächsten TC IRQ der DMA disabled und das> Status_flag zurückgesetzt.
Darüber muss ich nochmal nachdenken, denn ich bin mir da nicht ganz
sicher, dass dies wirklich ein Problem ist. Im Falle eines HT-Interrupts
ohne Prüfung wird vielleicht am Ende ws2812_setup_dma_buf() einmal
zuviel aufgerufen, aber auch nicht mehr. Aber was bewirkt das?
Eigentlich nichts, höchstens dass der DMA-Buffer am Ende noch mit 0-Bits
gepadded wird - was ja auch erwünscht ist. Beim TC muss ich den
DMA-Buffer nicht nochmal mit 0en füllen, denn er ist es bereits durch
den HT. So war jedenfalls damals mein Gedankengang.
Wie gesagt: Ich denke aber nochmal genauer über die HT <-> TC-Behandlung
nach und werde Deine Argumente prüfen.
Ich habe die Double-Buffering-Methode eben nochmal am lebenden Objekt
getestet und habe den Fehler meines Quick-Hacks von heute nachmittag
gefunden. Du hattest Recht: Der Speicher muss beim Umsetzen des
RGB-Buffer-Indexes tatsächlich kopiert werden, weil natürlich nicht
immer alle LED-Positionen neu gesetzt werden. So wurde auf meiner Uhr
nur jeder zweite Frame komplett dargestellt und das Display flackerte
bei jedem Refresh deutlich sichtbar.
Ich habe daher nochmal einen memcpy eingebaut:
Danach lief es auf meiner Uhr wieder wie gewohnt richtig. Auch nach
Setzen des Ambilight auf eine ungerade Anzahl von LEDs (ich teste
momentan an einer WC12h) konnte ich das Display nicht aus der Ruhe
bekommen.
@Mirco: Anbei die korrigierte Double-Buffer-Testversion. Sollte es mit
dieser immer noch nicht sauber laufen, werde ich mich nochmal auf die
Ausführungen von 0xef stürzen...
Frank M. schrieb:> @Mirco: Anbei die korrigierte Double-Buffer-Testversion. Sollte es mit> dieser immer noch nicht sauber laufen, werde ich mich nochmal auf die> Ausführungen von 0xef stürzen...
Moin Frank,
so erstmal scheint die Anzeige in Ordnung.
Ich kann das Verhalten des LDR jedoch nicht testetn, da dieser
anscheinend tot gelegt ist in dieser Version. Es kommen keine Werte im
UI an. Auch reagiert die Uhr nicht auf Helligkeits Änderungen.
PS Nach einem nochmaligen Reset geht nun der LDR und...
....
Trommelwirbel
....
es scheint das Problem gekillt zu haben.
Applaus!!!!!!!
Danke Frank.
Mirco D. schrieb:> es scheint das Problem gekillt zu haben.
Danke fürs Testen :-)
Ich werde das Double-Buffering auch noch in den SK6812-Source einbauen,
denn dort könnte dasselbe Problem auftreten. Dann gibts eine 2.6.3 - und
ein Problem weniger.
0xef schrieb:> anbei ein möglicher Quickhack nebst Testfile.
Sorry, das Patchfile erzeugen ging irgendwie schief.
Eingedampft auf das wesentliche stünde da:
Wobei 1x WS2812_BIT_PER_LED reichen würde.
Ich versuch das nachzumessen, bin aber gerade als Kinderbetreuung
ausgelastet.
0xef
PS.: Franks memcpy im double-buffering entschärft das timing problem
natürlich erheblich. Ich würde trotzdem das Timing korrigieren.
Mirco D. schrieb:> Trommelwirbel>> ....>> es scheint das Problem gekillt zu haben.>> Applaus!!!!!!!>> Danke Frank.
Selbes Bild bei mir. :)
Die letzten Änderungen scheinen es echt gebracht zu haben und das
Problem mit den verschobenen Bildern zu beheben.
Ich hatten den obigen WC24h Testcode mal auf die WC12h geflasht und das
Dimmen funktioniert damit jetzt wie es soll.
Ohne Springen der Wörter bei Helligkeitsänderungen.
Die Verschaltung des LDR hatte ich mir auch nochmals angesehen. Recht
viel schlauer bin ich noch nicht. Auf meinem Board habe ich einen
GL5528, wäre Baugleich zum A 906032, der hier in Kombi mit dem 10k
Widerstand auch mal erwähnt wurde. Den 10k hatte ich auch für R1
verwendet.
Wo ich nicht ganz durchblicke ist, dass Torsten in im WC Artikel bei
beiden Schematics schreibt, dass man R2 weglassen kann. Soweit macht das
ja auch Sinn. In den Bildern mit den bestückten Platinen ist aber gerade
R1 nicht bestückt. Lässt man R1 weg funktioniert die Helligkeitsregelung
doch überhaupt nicht.
Morgen werde ich nochmals den LDR komplett entfernen und PA5 direkt mit
einem Netztteil ansteuern, um auszuschließen dass es nicht doch an dem
GL5528 liegt, den ich verwende.
X. O. schrieb:
> Wo ich nicht ganz durchblicke ist, dass Torsten in im WC Artikel bei> beiden Schematics schreibt, dass man R2 weglassen kann. Soweit macht das> ja auch Sinn. In den Bildern mit den bestückten Platinen ist aber gerade> R1 nicht bestückt. Lässt man R1 weg funktioniert die Helligkeitsregelung> doch überhaupt nicht.
Die Angaben in den Schaltplänen sind richtig: Wird kein LDR verwendet,
muss R2 bestückt werden. Das ist im Artikel auch im Kap. 2.6 (Hardware
- LDR) so beschrieben.
Die Bilder mit den bestückten Shields sind vielleicht "unglücklich" und
damit verwirrend: Darauf ist eine mögliche Variante abgebildet, wenn
kein LDR verwendet werden soll - der LDR-Eingang des Mikrocontrollers
wird über R2 auf
+ 3,3 V gelegt.
Harald L. schrieb:> Du hattest recht, beim Board hatte ich noch Fehler, diese habe ich jetzt> behoben (siehe Foto).
Zumindest können wir dies nun als Ursache ausschließen.
> Leider hat sich das Verhalten nicht geändert, habe mal eine> Serienaufnahme gemacht und angehängt.
Super, so bekommt man noch mal einen besseren überblick.
Wenn ich das richtig sehe, geht du Links mit +5V an den Strip und Rechts
mit Masse dran, richtig? Hatte ich auch mal bei einer Uhr versucht, gab
aber auch nur Probleme und habe beides auf beiden Seiten angeschlossen
und damit das Problem gelöst.
Auf jeden Fall würde ich für eine direkte Masse Verbindung der Minuten
LEDs sorgen, bzw. s.u.
> Inzwischen habe ich ein wenig herumprobiert, habe versucht das Ambilight> zu verändern...> Hat es schlimmer gemacht, danach war nicht nur beim umschalten Chaos,> sondern besagtes Chaos blieb bestehen...
Was hast du genau verändert?
Wird der Ambilight Strip zwischendrin auch noch mal mit Strom versorgt?
oder nur am Anfang und am Ende?
Ok, wenn ich das richtig sehe, läuft die Masseverbindung der Uhr und dem
Board vor dem Board zusammen, korrekt? Zieh hier bitte mal vom STM
(Board) eine GND Verbindung zum Strip, am besten mit der LED Leitung.
Dann wäre es super zu wissen, wie verhält sich die Uhr wenn du einfach
mal z.B. die Minuten LEDs ausbaust und die LED Leitung direkt an das "E"
anschließt, bzw. auch erst z.B. in der 2. Zeile anfängst?
Viel Erfolg,
Gruß
Marco
X. O. schrieb:> Die letzten Änderungen scheinen es echt gebracht zu haben und das> Problem mit den verschobenen Bildern zu beheben.
Prima, freut mich. Die neue Version 2.6.3 ist jetzt auch online.
Einziger Punkt:
- Bugfix: Flackern bzw. versetztes Ausgabe der Display-LEDs durch
Double-Buffering behoben.
0xef schrieb:> Ich versuch das nachzumessen, bin aber gerade als Kinderbetreuung> ausgelastet.
So, hab mal das Timing vermessen:
mit originaler v2.6.2 ist die kleinste RESET-time die ich finden konnte
48us, mit meinem obig vorgeschlagenem Patch 52.8us.
Ich kann mir zwar nicht vorstellen, dass es ws2812 gibt, denen 48us
nicht reichen, vermute aber dennoch, dass das hüpfen damit zu tun hat.
0xef
PS.: Nebenbei sind mir noch ein paar merkwürdige mini-updates (nur
24bit) aufgefallen, bei denen kurz nacheinander (110us) vällig andere
Daten übertragen werden. Kommt allerdings nur kurz nach dem Einschalten
und wird ca. 500ms später mit full-updates eh wieder berichtigt.
PPS.: @Frank: Wäre es eine Idee, das Doublebuffering in display.c zu
verschieben? sonst musst du das im Prinzip auch noch bei den APA102
duplizieren....
PPPS.: verwendeter Patch für ws2812.c:
Nachtrag:
mit originaler v2.6.3 ist das kleinste Reset ca. 220us. Also definitiv
groß genug. Und da double-buffering eine richtig gute Idee ist, sollten
war alles so lassen. (man könnte verwegenerweise sogar versuchen, die
eigentlich richtige pause in ws2812.c ganz wegzulassen, da das
rumkopieren vom double-buffering eh länger braucht. Aber so, wie es
jetzt ist ist, ist es erstmal gut.)
0xef
0xef schrieb:> So, hab mal das Timing vermessen:
Danke für die Messungen! :-)
> Ich kann mir zwar nicht vorstellen, dass es ws2812 gibt, denen 48us> nicht reichen, vermute aber dennoch, dass das hüpfen damit zu tun hat.
Nein, die Ursache hatte ich schon erklärt: In 2.6.2 wurde in rgb_buf
geschrieben, während die ISR diese noch abgearbeitet hat:
Beitrag "Re: WordClock mit WS2812"
Mit der Länge der Pause warst Du einfach auf dem falschen Dampfer,
deshalb hat das Double-Buffering das Problem vollständig gelöst. Und der
memcpy ist leider nötig, weil sonst der "andere Teil" des rgb_buf nicht
den aktuellen IST-Zustand widerspiegelt.
> PPS.: @Frank: Wäre es eine Idee, das Doublebuffering in display.c zu> verschieben? sonst musst du das im Prinzip auch noch bei den APA102> duplizieren....
Nein, in apa102.c wird kein kleiner DMA-Buffer benutzt, sondern
weiterhin ein großer für alle LEDs, sodass kein Update während der
DMA-Übertragung mehr passiert. Ich habe mir die RAM-Optimierung für
apa102 verkniffen, weil dort die SPI-Daten wesentlich kleiner sind. Hier
wäre eine die RAM-Ersparnis gar nicht so groß gewesen.
0xef schrieb:> mit originaler v2.6.3 ist das kleinste Reset ca. 220us.
Weia, ich hätte nicht gedacht, dass der memcpy() so lang braucht. Nicht
so schön. Ich muss mal überlegen, ob man das optimieren kann...
Hallo zusammen,
nachdem nun alles läuft ,wie es soll nur nochmal zu Sicherheit:
Wo ist genau auf dem alten Schield R1 und R2 für den LDR?
@Frank
einen kleinen Wunsch hätte ich noch bezüglich des LDR.
Kannst du sowas wie eine Mittelwertbildung einbauen, damit der etwas
träger wird?
Meinetwegen ganz einfach ein gewichtetes Mittel:
ldr_value = ((x * ldr_oldvalue) + ldr_new_value)/(x+1)
Beim vorbeilaufen ändert sonst die Uhr umgehend die Helligkeit,
die Sonne geht aber so schnell nicht unter ;-)
ist aber nicht so wichtig.
x könnte man ja auf der LDR Seite konfigurierbar machen, so wie die
Helligkeitswerte zwischen 0 bis 15.
MfG
Mirco
Hallo an alle,
mir ist aufgefallen dass es bei raus genommenem Haken "Permanent display
of "ES IST"", es um 16 Uhr trotzdem angezeigt wird.
Kann das jemand nachvollziehen?
Mir ist das bis jetzt nur Mittags um 4 Uhr aufgefallen.
Kann ich das Selbs irgendwo im Code ändern?
Gruß Waleri
Günter H. schrieb:> Dafür wären (detailreiche) Bilder der Löt- und auch der Bestückungsseite> der Platine hilfreich.
Danke für die Antwort. Anbei die Bilder.
Ph L. schrieb:
> Anbei die Bilder.
Hallo "Ph",
viele der Lötstellen sehen nicht wirklich gut aus: Grün ist wohl ok,
gelb eher nicht und rot wahrscheinlich nicht. Die Markierungen haben
keinen Anspruch auf Vollständigkeit. Auch scheinen noch einige
Lötzinnreste auf der Platine zu sein.
Viele der Lötstellen sind von Leiterbahnen mit Massepotential umgeben
und bei der Größe deiner (sorry) "Lötklekse" kann trotz Lötstopplack ein
Kurzschluss verursacht werden.
Vorschlag: Spreche jemanden an, der einige Erfahrung im Löten hat.
Vielleicht kann der das Shield noch "retten" und du kannst direkt sehen,
was beim Löten wichtig ist.
Zum AMS1117: Du hast den Baustein im SOT-223-Gehäuse direkt auf das
Shield gelötet. Zwar richtig angeschlossen - es fehlen aber die
Kondensatoren an Ein- und Ausgang und vor allem: Die "Unterseite" des
ICs liegt auf 3,3 V, ob da der Lötstopplack gehalten hat, ist fraglich.
Gemeint sind da solche "Module" wie z. B.
http://www.ebay.de/itm/252237092737?clk_rvr_id=1196973484702&rmvSB=true
Die Links im Artikel sind leider nicht ganz eindeutig.
Hier
Beitrag "Re: WordClock mit WS2812"
kannst Du in dem Bild unten links ein solches Modul im eingebauten
Zustand sehen.
Viel Erfolg
Günter
Wow, danke Günter für die ausführliche Hilfe.
Wäre vielleicht ganz clever gewesen die ersten Lötversuche nicht gleich
auf dem Shield zu starten. :/
Im Prinzip hat alles funktioniert, hatte auch schon den STM32 und das
WLan Modul geflasht, nur die Stromversorgung der LEDs macht Probleme.
Zu den Kondensatoren des AMS1117, ich dachte das sind der 100nF und
4,7µF auf dem Shield? Brauche ich da noch zusätzliche Kondensatoren?
Falls jemand noch ein Shield übrig hat, welches er mir verkaufen kann
würde ich mich über eine PN freuen.
0xef schrieb:> PS.: Nebenbei sind mir noch ein paar merkwürdige mini-updates (nur> 24bit) aufgefallen, bei denen kurz nacheinander (110us) vällig andere> Daten übertragen werden.
Korrektur: mit 24MHz nachgemessen passt alles. Da wird wohl nur die
Statusled auf schwarz gesetzt.
(Merke: wer nur mit MHz sampled kann pulsbreiten nur auf +/-250ns genau
messen - ggfs. zu wenig um bei ws2812 protokoll ne 0 von ner 1 zu
unterscheiden....)
0xef
> Wo muss ich suchen?
Der Bootloader des STM32 antwortet nicht. Dafür kann es mehrere
Möglichkeiten geben, daher meine Frage: Ist das Shield v3 oder ein
umgebautes älteres? Wenn letzteres, solltest Du nochmal die zusätzlich
nötigen Verbindungen vom ESP zum STM32 prüfen, also:
1. GPIO4 zu BOOT0 des STM32
2. GPIO13 an PA9
3. GPIO15 an P10
4. GPIO14 an RESET
Handelt es sich um das Mini-Dev-Board oder ein Nucleo? Bitte mehr
Angaben.
Komisch, ich habe zweimal die identischen Bauteile verwendet.
- STM32F103C8T6 Mini Development Board
- Shield v3
- ESP-12F
Das was nicht geht habe ich gerade von der Wand genommen und
nachgemessen:
> 1. GPIO4 zu BOOT0 des STM32> 2. GPIO13 an PA9> 3. GPIO15 an P10> 4. GPIO14 an RESET
2-4: OK
Aber nicht GPIO4, sondern GPIO5 ist mit BOOT0 verbunden.
Vorausgesetzt das Pinout des ESP-12F ist so wie im Schaltplan
WC_MiniDev_Shield_v3_Schaltplan.png:
<pre>
Reset TX
ADC RX
CH_PD GPIO5
GPIO16 GPIO4
GPIO14 GPIO0
GPIO12 GPIO2
GPIO13 GPIO15
VCC GND
</pre>
Und es ist kein Kurzschluss zwischen GPIO5 und GPIO4.
So, habe die andere Uhr auch von der Wand genommen und siehe da,
auch die ist nicht so verdrahtet, wie es im Schaltplan steht:
Es ist der dritte Pin (GPIO5) mit Boot0 verbunden und nicht der vierte
(GPIO4).
Da diese aber funktioniert, habe ich bei der anderen nochmal an alle
vier Verbindungen nachgelötet und jetzt geht sie auch.
Bleibt die Frage, ob nun der Schaltplan falsch ist, oder zumindest die
Position der Pins nicht mit den Positionen auf dem Board übereinstimmen?
Kann das jemand bestätigen?
Dario.
Ph L. schrieb am 04.04.2017:
> musste nun leider feststellen, dass ein Kurzschluss zwischen Ground und> 5V ist.> Ich vermute den Fehler entweder "im" Shield oder auf dem STM32.> Sichtbare Lötstellen sind alle schon als Fehlerquelle ausgeschlossen.> Ist es denn allgemein möglich, dass Leiterbahnen im Shield irgendwo> kurzgeschlossen sind?>> Des Weiteren ist auch der 3.3V Pin auf dem STM32 in Kontakt mit Ground.> Aus diesem Grund denke ich, dass ich vielleicht den Microcontroller beim> Löten gegrillt habe.
Ph L. schrieb am 08.04.2017:
> Im Prinzip hat alles funktioniert, hatte auch schon den STM32 und das> WLan Modul geflasht, nur die Stromversorgung der LEDs macht Probleme.
Nach meinem Verständnis widersprechen sich die beiden Aussagen.
- Gibt es den "Kurzschluss" immer oder nur dann, wenn die LEDs an das
Shield angeschlossen sind?
- Was heißt: "Im Prinzip hat alles funktioniert, hatte auch schon den
STM32 und das WLan Modul geflasht..."? Ist (oder war) die Hardware über
WLAN erreichbar?
- Welche Stromaufnahme haben die LEDs alleine? Etwa 80 mA pro 100 LEDs
(alle Pixel aus) sind normal.
> Zu den Kondensatoren des AMS1117, ich dachte das sind der 100nF und> 4,7µF auf dem Shield? Brauche ich da noch zusätzliche Kondensatoren?
- Das Shield für das Mini-Dev-Board ist für ein Modul wie z. B. dieses
http://www.ebay.de/itm/5PCS-AMS1117-3-3-3-3V-DC-DC-Step-Down-Power-Module-Buck-Module-LDO-800MA-/381599529100?hash=item58d91ab88c:g:5PMAAOSw-RRXDJnk
ausgelegt - dieses Modul sollte auch eingesetzt werden.
- Bevor Du mit einem neuen Shield wieder anfängst: Die Verwendung von
Wannenstecker, Schraubklemmen usw. macht schon Sinn und sollte umgesetzt
werden.
- Und - wirklich Löten üben, z.B. so wie hier:
https://wiki.raumzeitlabor.de/wiki/L%C3%B6ten_lernen
Viel Erfolg
Günter
Dario C. schrieb:> So, habe die andere Uhr auch von der Wand genommen und siehe da, auch> die ist nicht so verdrahtet, wie es im Schaltplan steht:> Es ist der dritte Pin (GPIO5) mit Boot0 verbunden und nicht der vierte> (GPIO4).
Ja, es hat sich herausgestellt, dass in der Eagle-Lib für den ESP-12F,
die Torsten für das Shield verwendete, ein Bug ist. Den zunächst
auffälligen Fehler, der hier auch in diesem Thread auffiel, war, dass
GPIO4 und GPIO5 von der Pin-Position im Schaltplan her vertauscht war.
Torsten nahm an, dass es sich lediglich um die Bezeichnungen der Pins
handelte und hat kurzerhand die Beschriftung beider Pins ausgetauscht.
Aber das war nicht der Fehler: Im Schaltplan vertauscht Eagle die beiden
Pins, aber nicht im Schaltungs-Layout. Daher hat Torstens Änderung
nichts bewirkt, lediglich, dass die Verbindung augenscheinlich von GPIO4
ausgeht, aber auf der Platine dann doch von GPIO5. Das ist aber erst
aufgefallen, als die Platinen schon bei Torsten waren bzw. ich dann eine
der Platinen als erster in den Händen hatte und direkt die Uhr aufbaute
und getest habe. Ich habe dann kurzerhand die ESP-Software angepasst:
diese schaltet nun beide Pins, also GPIO4 und GPIO5 synchron. Nur so
blieb die Kompatibilität zu den bisher umgebauten Shields mit separatem
ESP-12F gewährleistet.
Kurzum: Das ist normal. Auf den v3-Shields wird GPIO5 verwendet, obwohl
im Schaltplan GPIO4 steht. Geschaltet werden beide Pins, so dass es mit
GPIO4 als auch mit GPIO5 funktioniert. Ist zwar schade, dass dadurch ein
freier Pin am ESP wegfällt, ist aber auch nicht wirklich tragisch.
> Da diese aber funktioniert, habe ich bei der anderen nochmal an alle> vier Verbindungen nachgelötet und jetzt geht sie auch.
Na prima. Manchmal hilft Nachlöten tatsächlich ;-)
Frank M. schrieb:> X. O. schrieb:>> Die letzten Änderungen scheinen es echt gebracht zu haben und das>> Problem mit den verschobenen Bildern zu beheben.>> Prima, freut mich. Die neue Version 2.6.3 ist jetzt auch online.>> Einziger Punkt:>> - Bugfix: Flackern bzw. versetztes Ausgabe der Display-LEDs durch> Double-Buffering behoben.
Hi Frank, meine obige Aussage hatte sich ja auf deine Wc24h 2.6.3pre
Version bezogen die ich probehalber mal auf der WC12h getestet hatte.
Wollte eben die 2.6.3 auf die WC12h aufspielen:
--> mit wc12h-stm32f103-ws2812-grb.hex springt die Anzeige nach wie vor
--> mit wc24h-stm32f103-ws2812-grb.hex springen die Leds nicht (zum
Testen aufgespielt)
Ich habe jetzt mal die WC24h Variante der 2.6.2 auf die WC12h
aufgespielt und auch dort springt nichts.
Blöde Frage, aber mit 2.4 läuft noch alles ohne Probleme. Bei den neuen
Variante tritt auf meiner WC12h das springen auf. Und nur mit der WC12h
Variante. WC24h dimmt wie sie soll. Passt da vielleicht was nicht?
X. O. schrieb:> Wollte eben die 2.6.3 auf die WC12h aufspielen:>> --> mit wc12h-stm32f103-ws2812-grb.hex springt die Anzeige nach wie vor> --> mit wc24h-stm32f103-ws2812-grb.hex springen die Leds nicht (zum> Testen aufgespielt)
Merkwürdig. Verstehe ich erstmal nicht.
> Ich habe jetzt mal die WC24h Variante der 2.6.2 auf die WC12h> aufgespielt und auch dort springt nichts.
Meinst Du hier wirklich die 2.6.2 oder war das ein Vertipper und Du
meintest die 2.6.3?
> Blöde Frage, aber mit 2.4 läuft noch alles ohne Probleme.
Die 2.4 benutzt auch noch den großen DMA-Buffer, der einen Großteil des
RAMs des STM32F013 gefressen hat.
Das wird ja immer rätselhafter. Komischerweise kann ich nichts von
alledem reproduzieren. Ich habe jetzt mal die Pause von 48µs auf über
die geforderten 50µs verlängert. Obwohl ich kaum glaube, dass dieses was
bringt, weil 0xef ja herausgefunden hat, dass die Pausen sowieso minimal
220µs sind, habe ich die Datei hier mal angehängt.
Wie äußert sich das Springen? Versatz um 1 oder 2 LEDs oder flackern
alle LEDs?
Frank M. schrieb:> weil 0xef ja herausgefunden hat, dass die Pausen sowieso minimal> 220µs sind
Hallo Frank,
das war für die wc24h. Die wc12h messe ich morgen mal nach, komme heut
nimmer dazu.
0xef
Günter H. schrieb:> Nach meinem Verständnis widersprechen sich die beiden Aussagen.> - Gibt es den "Kurzschluss" immer oder nur dann, wenn die LEDs an das> Shield angeschlossen sind?
Den Kurzschluss gibt es dauerhaft.
> - Was heißt: "Im Prinzip hat alles funktioniert, hatte auch schon den> STM32 und das WLan Modul geflasht..."? Ist (oder war) die Hardware über> WLAN erreichbar?
Ja, ich hatte die Hardware schon als Client konfiguriert und konnte per
IP im Browser darauf zugreifen.
> - Welche Stromaufnahme haben die LEDs alleine? Etwa 80 mA pro 100 LEDs> (alle Pixel aus) sind normal.
Habe ich noch nicht gemessen, dazu müsste ich erst was basteln um die
Streifen zu versorgen, das Shield geht ja momentan nicht.
> - Bevor Du mit einem neuen Shield wieder anfängst: Die Verwendung von> Wannenstecker, Schraubklemmen usw. macht schon Sinn und sollte umgesetzt> werden.
Wannenstecker und Schraubklemmen habe ich nur zur Fehlersuche
abmontiert.
> - Und - wirklich Löten üben, z.B. so wie hier:>> https://wiki.raumzeitlabor.de/wiki/L%C3%B6ten_lernen>> Viel Erfolg> Günter
das ist ne Idee :D Danke!
0xef schrieb:> das war für die wc24h. Die wc12h messe ich morgen mal nach, komme heut> nimmer dazu.
Bei der wc12h finde ich ca. 183us als kürzeste Pause.
Der Datentransfer bei einem full-update (längste sequenz, die ich
gefunden habe) dauert ca. 5.3ms.
Bei der von Frank bereitgestellten version (unter linux compiliert)
finde ich 167us als Pause (Frank hat eine neuere toolchain, evtl. ist da
das memcpy schneller?). Die Windows version hat 178us.
Zum Vergleich habe ich immer die gleiche Pause genommen....
(zwischen Full-update und minuten-led update nach der langen
Einschaltpause von knapp 4s.)
Vom draufkucken her gebe beide Versionen 'identisch aussehende'
led-daten aus und sollten sich identisch verhalten.
0xef
PS.: Ich bin überrascht, dass die Toolchain so einen starken Einfluss
hat. Muss ich meine wohl updaten..
0xef schrieb:> Bei der wc12h finde ich ca. 183us als kürzeste Pause.> Der Datentransfer bei einem full-update (längste sequenz, die ich> gefunden habe) dauert ca. 5.3ms.
Danke fürs Nachmessen. Dann können wir eine zu kurze Pause auf jeden
Fall ausschließen.
> Bei der von Frank bereitgestellten version (unter linux compiliert)> finde ich 167us als Pause (Frank hat eine neuere toolchain, evtl. ist da> das memcpy schneller?). Die Windows version hat 178us.
Möglich. Woran es sonst liegen könnte, weiß ich nicht.
> Vom draufkucken her gebe beide Versionen 'identisch aussehende'> led-daten aus und sollten sich identisch verhalten.
Ehrlich gesagt, bin ich nun absolut ratlos. Es scheint ja nun bei allen
zu funktionieren, die damit Probleme hatten. Nur bei X.O. mit seiner
eigenen All-On-One-Platine nicht. Ich selbst habe mal testweise in
display.c alle ws2812-refresh-Aufrufe verdoppelt, um die
Software/Hardware zu stressen. Aber selbst dann konnte ich meine WC12h
nicht aus der Ruhe bringen.
@X.O.: Hast Du noch eine WC24h, die mit Streifen aufgebaut ist? Dann
könntest Du die Gegenprobe machen und die WC12h-SW mal darauf testen.
Nur mal 'ne kurze Frage am Rande:
Ich bastle mir gerade eine Abschaltung der Spannungsversorgung zu meinen
V1 Shields. Bei dieser gelegenheit wollte ich dann auch gleich den
Pullup fur die Datenleitung mit einbauen, kann ja nicht schaden. In
Schaltbildern der aktuellen Shields habe ich gesehen, dass der Pullup
direkt an die +5V geht. Das bedeutet aber doch, dass auch bei
abgeschalteten Stripes an dem DI Spannung anliegt. Sollte man die nicht
auch an die geschaltete Versorgungsspannung der Stripes anschließen?
OK, wenn ich den Widerstand direkt an die Stripes löte, dann habe ich eh
die geschaltete Betriebsspannug dran.
Grüße
Bernhard
Bernhard S. schrieb:> Das bedeutet aber doch, dass auch bei abgeschalteten Stripes an dem DI> Spannung anliegt.
Hallo Bernhard,
Wenn der stripe abgeschaltet wird, bleibt der entsprechende pin der mcu
fix auf low. Also kein Saft an Din. Den dann eigentlich unnötigen
querstrom durch den pullup könntest du tatsächlich sparen, wenn du ihn
an die geschalteten 5V der stripes anschliesst. Habe ich bei mir auch so
(glaube ich mich zu erinnern).
0xef
Frank M. schrieb:> Das wird ja immer rätselhafter. Komischerweise kann ich nichts von> alledem reproduzieren. Ich habe jetzt mal die Pause von 48µs auf über> die geforderten 50µs verlängert. Obwohl ich kaum glaube, dass dieses was> bringt, weil 0xef ja herausgefunden hat, dass die Pausen sowieso minimal> 220µs sind, habe ich die Datei hier mal angehängt.>> Wie äußert sich das Springen? Versatz um 1 oder 2 LEDs oder flackern> alle LEDs?https://www.youtube.com/watch?v=xPTQp6aVeEw
Hier ein Video mit der obigen Version. Es schaut so aus, als ob sich die
ganzen Wörter verschieben. "Es ist" hatte ich eingeschaltet. Was
auffällt ist, dass sich der Minutenpunkt nicht verschiebt.
Was man auf dem Video nicht sieht, wenn die Verschiebung auftritt(und
nur dann) wird in der Ambilightanzeige auf der Rückseite nochmals die
Uhrzeit von vorne dargestellt. Die Minutenpunkte werden dabei zweimal
hintereinander dargestellt, beginnend bei Led119 und Led123, also
jeweils 4 Leds. Ab Led127 gehts dann mit "Es" weiter, bei Led130 "ist"
usw. usw.
Wenn nicht gedimmt wird funktioniert auch die Ambilight Anzeige mit der
umlaufenden Sekundendarstellung ganz normal.
> Und hier nochmal dieselbe Variante mit EmBitz statt unter Linux> compiliert. Bitte beide testen.
Die Version hat keine Veränderung gebracht
> @X.O.: Hast Du noch eine WC24h, die mit Streifen aufgebaut ist? Dann> könntest Du die Gegenprobe machen und die WC12h-SW mal darauf testen.
Leider habe ich keine hier, ich habe aber mal die WC24h Variante auf die
WC12h aufgespielt. Die erste Led leuchtet nicht, da sie ja die Status
Led wäre, "Es" sind Led 2+3 und "ist" 5+6+7. Wie man sieht funktioniert
das Dimmen und es verschiebt sich nichts.
https://www.youtube.com/watch?v=f31rA0XimEY
Muss man das jetzt verstehen, dass es das eine mal funktioniert und das
andere mal nicht? :)
Wenn die WC24h Version auch nicht funktionieren würde(oder ältere SW
Variaten z.B. 2.4.0), würde ich mir ja direkt sagen, da ist irgendwas
mit der Platine im Argen, aber so? Keine Ahnung was da los ist.
> Ehrlich gesagt, bin ich nun absolut ratlos. Es scheint ja nun bei allen> zu funktionieren, die damit Probleme hatten. Nur bei X.O. mit seiner> eigenen All-On-One-Platine nicht.
Ich bin auch ziemlich ratlos :) Ich habe auch noch eine größere WC12h
gebaut. Funktioniert tadellos mit 2.6.
Mich würde es zwar interessieren was da nicht passt, aber da ich
anscheinend echt der Einzige bin der sich bis jetzt gemeldet hat können
wir es zwecks meiner ja auch mal so belassen. 2.4.0 funktioniert soweit
ja ganz gut.
Vielleicht tritt das Verhalten ja irgendwann doch noch bei irgendjemand
anderem auf.
Hallo X.O.,
hast du einen Logikanalysator zur Hand?
Saleae, USBee oder einen china-klon reichen völlig.
Falls ja, wie sieht das Datensignal an der ersten Led aus?
wie vor+nach der ersten die Probleme macht und wie vor den Ambilight
leds?
(Normal+problemfall)
0xef
Ps.: Falls du noch keinen hast: die Dinger sind echt praktisch um
komische timingprobleme zu debuggen, kauf dir doch einen (<10€).
0xef schrieb:> Ps.: Falls du noch keinen hast: die Dinger sind echt praktisch um> komische timingprobleme zu debuggen, kauf dir doch einen (<10€).
Ich habe mir jetzt so einen Saleae Clone bestellt. Schaut gut aus.
X. O. schrieb:> Die Minutenpunkte werden dabei zweimal hintereinander dargestellt,> beginnend bei Led119 und Led123, also jeweils 4 Leds. Ab Led127 gehts> dann mit "Es" weiter, bei Led130 "ist" usw. usw.
Das sieht so aus, als ob die WS2812 die Pause nicht erkennen, womit der
Datenstrom wieder auf Position 0 (erste LED) zurückgesetzt wird.
Entweder ist die Hardware ein Problem oder die Software - kann aber auch
eine Kombination aus beiden sein.
Da Du eine extra Platine für die komplette Elektronik und keine
Streifenplatinen benutzt, ist der Gedanke, dass die Hardware
"problematisch" ist, nicht ganz von der Hand zu weisen.
Daher meine Fragen dazu:
1. Ist der "Angstwiderstand" in Reihe zu DI der ersten LED drin? Wenn
ja, brücke den bitte.
2. Welchen Wert hat Dein Pullup an DI der ersten LED?
3. Hat jede WS2812 einen eigenen Entkoppelkondensator (typ. 100nF)?
Diese sind zwingend notwendig.
4. Wie hoch ist die Betriebsspannung an der ersten LED? Wie hoch ist die
Betriebsspannung einer mittleren und dann noch an der letzten LED?
5. Wie lang ist die Datenverbindung zur ersten LED? Sind da noch andere
Datenleitungen auf der Platine nahe bei DATA für die erste LED?
Jetzt zur Software: Es könnte natürlich sein, dass aus irgendeinem Grund
die Pausenzeiten nicht eingehalten werden. Das könnte zum Beispiel ein
Überschreiber im RAM sein.
Bitte mach mal von jedem TAB im Webinterface eine Hardcopy, damit ich
exakt Deine Konfiguration nachstellen kann.
Frank M. schrieb:> X. O. schrieb:>> Die Minutenpunkte werden dabei zweimal hintereinander dargestellt,>> beginnend bei Led119 und Led123, also jeweils 4 Leds. Ab Led127 gehts>> dann mit "Es" weiter, bei Led130 "ist" usw. usw.>> Das sieht so aus, als ob die WS2812 die Pause nicht erkennen, womit der> Datenstrom wieder auf Position 0 (erste LED) zurückgesetzt wird.> Entweder ist die Hardware ein Problem oder die Software - kann aber auch> eine Kombination aus beiden sein.>> Da Du eine extra Platine für die komplette Elektronik und keine> Streifenplatinen benutzt, ist der Gedanke, dass die Hardware> "problematisch" ist, nicht ganz von der Hand zu weisen.>> Daher meine Fragen dazu:>> 1. Ist der "Angstwiderstand" in Reihe zu DI der ersten LED drin? Wenn> ja, brücke den bitte.
Ist auf der Platine gebrückt, macht aber keinen Unterschied
> 2. Welchen Wert hat Dein Pullup an DI der ersten LED?
1,5 kOhm
> 3. Hat jede WS2812 einen eigenen Entkoppelkondensator (typ. 100nF)?> Diese sind zwingend notwendig.
Ja, vorhanden 100nF
> 4. Wie hoch ist die Betriebsspannung an der ersten LED? Wie hoch ist die> Betriebsspannung einer mittleren und dann noch an der letzten LED?
An allen Stellen 3,28V . Versorgung mit 5V Labornetzteil macht keinen
Unterschied
> 5. Wie lang ist die Datenverbindung zur ersten LED?
Zwischen der 4 und 5 Led werden es schon gute 40cm sein. Ich habe jetzt
aber mal die Datenleitung im unteren Bereich der Platine aufgetrennt und
Led 1 dort angelötet, dass die Verbindung nur mehr circa 20 cm lang ist.
Selbes Verhalten. Die Minutenpunkte bleiben stehen während dem Dimmen
und die folgenden Wörter springen.
>Sind da noch andere> Datenleitungen auf der Platine nahe bei DATA für die erste LED?
Nein, eigentlich nicht.
> Jetzt zur Software: Es könnte natürlich sein, dass aus irgendeinem Grund> die Pausenzeiten nicht eingehalten werden. Das könnte zum Beispiel ein> Überschreiber im RAM sein.>> Bitte mach mal von jedem TAB im Webinterface eine Hardcopy, damit ich> exakt Deine Konfiguration nachstellen kann.
Habe ich angehängt und kannst du gerne testen. Wenn ich den
Logicanalyzer da habe finde ich vielleicht auch mehr raus.
X. O. schrieb:> An allen Stellen 3,28V .
Die WS2812 brauchen 5V und nicht 3,3V. 3,28V sind definitiv zuwenig.
Nach Berichten mit zu geringer Betriebsspannung äußert sich dies zunächt
in Farbverfälschungen, dann mit Anzeigefehlern bis zum Totalausfall - je
nachdem, wie tief man runtergeht.
Ich hätte also nicht damit gerechnet, dass die überhaupt noch gehen.
> Versorgung mit 5V Labornetzteil macht keinen Unterschied
Hm.
X. O. schrieb:> An allen Stellen 3,28V . Versorgung mit 5V Labornetzteil macht keinen> Unterschied
Aua!
Das sollte so nicht sein. Entweder netzteil zu schwach oder ein
schaltungsfehler. Ams1117 richtigrum drin?
0xef
Ps.: Für mich sieht das auch so aus als ob die ws2812 den resetpuls
nicht korrekt erkennen. Aber bei 3.28V wundert mich da nix, die brauchen
halt ihre 5V!s
X. O. schrieb:> Sorry verschrieben. An den WS2812b lagen 5. 28V an.
Sorry, hab ich zu spät gesehen. Ändert sich was, wenn du nur mit 5V
reingehst?
0xef
Auf der "All-in-one"-Platine gibt es laut BOM einen
AMS1117-3.3V-Spannungsregler (V176) für die gesamte "3.3 V-Schiene". Bei
Verwendung des STM32-Mini-Dev-Boards gibt es einen 3.3 V-Regler auf dem
Board und einen zusätzlichen für das EPS8266-Modul (und die
Peripherie).
Könnte das eine Rolle spielen?
Peter G. schrieb:> Wenn ich kommende Woche ein wenig Leerlauf habe würde> ich die Anleitung ins Wiki übertragen und auch deine Bilder übernehmen
Hat zwar doch etwas länger gedauert, aber heute hatte ich endlich mal
etwas Luft. Ich hoffe die Formatierungen im Wiki sind OK so, falls es
Darstellungsprobleme bei euch gibt kann das ggf. ja jemand korrigieren,
der mit der Syntax schon mal richtig gearbeitet hat. ;-)
Danke nochmal an Günter H. für Anleitung und Bilder!
0xef schrieb:> X. O. schrieb:>> Sorry verschrieben. An den WS2812b lagen 5. 28V an.>> Sorry, hab ich zu spät gesehen. Ändert sich was, wenn du nur mit 5V> reingehst?>> 0xef
Das Schaltnetzteil, das die 5.28V liefert ist ziemlich schrottig, aber
5V vom Labornetzteil machen auch keinen Unterschied.
Da hilft wohl nur noch mit einem Logic Analyzer und Ozi mal die Pegel
von den WS2812b durchzumessen.
Günter H. schrieb:> Auf der "All-in-one"-Platine gibt es laut BOM einen> AMS1117-3.3V-Spannungsregler (V176) für die gesamte "3.3 V-Schiene". Bei> Verwendung des STM32-Mini-Dev-Boards gibt es einen 3.3 V-Regler auf dem> Board und einen zusätzlichen für das EPS8266-Modul (und die> Peripherie).>> Könnte das eine Rolle spielen?
Soweit richtig erkannt, habe jetzt parallel noch ein Labornetzteil mit
3.3V direkt am ESP12F angehängt und es bringt keine Veränderung. Zudem
wird der ASM1117 nichtmal lauwarm.
Den AMS würde ich ausschließen.
Nachdem ich jetzt spasseshalber die v2.4.2 (svn:r77) mal gebaut und
vermessen habe, verstehe ich, warum diese keine Probleme macht.
bei der wc12h (v2.4.2, f103,ws2812-grb) ist die kleinste Pause 111us,
bei der wc24h 3.59ms (ja, ms!). Das Muster der 'Datenpakete' (nach dem
initialem blank, der ca. 3s danach und vor der 'Einschaltanimation') ist
auch anders als in späteren Versionen und unterscheidet sich signifikant
zwischen wc12h und wc24h.
@X.O. Wenn du die v2.4.2 der wc12h aufspielst: geht dann alles, oder
existiert das Problem auch und nur nicht bei der wc24h?
Das alles erklärt aber noch immer nicht, wieso deinenn LED's die
inzwischen recht großzügigen Reset-pulse nicht reichen. Allerdings ist
zwischen einigen 100us (111..232us jetzt) und vorher 3590us doch ein
deutlicher Unterschied.
Frage1: hast du den pullup kurz vor der ersten LED, oder nahe am STM?
(Theorie: wenn der PULLUP an der LED ist, die Leitung lang und dünn,
(und schlimmstenfalls noch Franks Angstwiderstand drin) könnte das LOW
level recht hoch liegen und die Datenleitung leichter Störungen
einfachen, (WS2812, die den neuen Datensatz übernehmen z.B.), so dass
ggfs. die erste LED diese Störimpulse aufnimmt und dann weiterreicht...)
Frage2: Was passiert wenn du einen KLEINEN C (<<60pF) zwischen DIN und
Masse schaltest? (Macht das einen Unterschied ob an der LED bzw. dem
STM?)
(Gedanke hier: filtern wir die Störimpulse. der C darf aber nicht zu
groß werden, sonst verschmieren die Flanken zu stark, dann müsste der
PULLUP kleiner werden, dann passt der L-Pegel vielleicht noch
weniger..... probier mal einen für Quarze typischen 'Balast-C'
(12..22pF))
Weiter debuggen können wir wohl erst, wenn dein LA da ist....
(Ich empfehle ja sigrop/pulseview als software, da ist ein WS2812
decoder schon mit bei.)
0xef
0xef schrieb:> @X.O. Wenn du die v2.4.2 der wc12h aufspielst: geht dann alles, oder> existiert das Problem auch und nur nicht bei der wc24h?
habe jetzt nochmals die WC12h 2.4.2 aufgespielt und nochmals genauer
hingeschaut. Um genau zu sein funktioniert die Anzeige der Minutenpunkte
und Wörter richtig. Mir ist aber gerade erst aufgefallen, dass die
Minutenpunkte bei Led115 (und entsprechend 116,117,118, je nachdem
wieviele gerade an sind)während des Dimmens dort nochmals dargestellt
werden. Der Rest der Ambilightanzeige passt dann auch wieder. Und die
Sekundenled läuft auch wie sie soll, auch während dem Dimmen wird dort
nichts verschoben oder sonstwas angezeigt. (außer halt die
Minutenpunkte, die verschwinden in der Ambilightanzeige wieder sobald
die Helligkeit wieder stabil ist)
Ist mir leider erst jetzt aufgefallen.
> Das alles erklärt aber noch immer nicht, wieso deinenn LED's die> inzwischen recht großzügigen Reset-pulse nicht reichen. Allerdings ist> zwischen einigen 100us (111..232us jetzt) und vorher 3590us doch ein> deutlicher Unterschied.>> Frage1: hast du den pullup kurz vor der ersten LED, oder nahe am STM?> (Theorie: wenn der PULLUP an der LED ist, die Leitung lang und dünn,> (und schlimmstenfalls noch Franks Angstwiderstand drin) könnte das LOW> level recht hoch liegen und die Datenleitung leichter Störungen> einfachen, (WS2812, die den neuen Datensatz übernehmen z.B.), so dass> ggfs. die erste LED diese Störimpulse aufnimmt und dann weiterreicht...)
Der Pullup ist nah am STM und der 200Ohm Widerstand auch mit dran.
Ich hatte schonmal den LOW Pegel gemessen und der ist wirklich nicht
sehr sauber
> Frage2: Was passiert wenn du einen KLEINEN C (<<60pF) zwischen DIN und> Masse schaltest? (Macht das einen Unterschied ob an der LED bzw. dem> STM?)> (Gedanke hier: filtern wir die Störimpulse. der C darf aber nicht zu> groß werden, sonst verschmieren die Flanken zu stark, dann müsste der> PULLUP kleiner werden, dann passt der L-Pegel vielleicht noch> weniger..... probier mal einen für Quarze typischen 'Balast-C'> (12..22pF))
Der Quickfix mit einem 15pF Kondensator hat nichts gebracht. Evtl.
müsste ich mal ein paar Kombinationen durchtesten und messen. Ich hatte
auch mal einen Pullup direkt an Led 1 probiert.
> Weiter debuggen können wir wohl erst, wenn dein LA da ist....> (Ich empfehle ja sigrop/pulseview als software, da ist ein WS2812> decoder schon mit bei.)
Denke ich auch, in der Zwischenzeit werde ich aber nochmals mit einem
Oszi alles durchmessen.
Als LA habe mir erstmal nur einen billigen Saleae Clone geholt. Bin
gespannt wie gut der funktioniert.
> 0xef
Und Danke auch mal für eure Hilfe
X. O. schrieb:> Der Pullup ist nah am STM und der 200Ohm Widerstand auch mit dran.> Ich hatte schonmal den LOW Pegel gemessen und der ist wirklich nicht> sehr sauber
Lass mal die 200Ohm weg (brücken).
Außerdem versuch mal mit DICKEN Drähten sowohl an der ersten led als
auch am ams 5v UND Masse einzuspeisen. Nicht dass aufgrund deiner
Leiterbahnführung die (Masse/Vcc) Pegel verschieben.
(Insbesondere wenn dein Oszi kein sauberes Low findet.)
0xef
Frank M. schrieb:> Kurzum: Das ist normal. Auf den v3-Shields wird GPIO5 verwendet, obwohl> im Schaltplan GPIO4 steht. Geschaltet werden beide Pins, so dass es mit> GPIO4 als auch mit GPIO5 funktioniert. Ist zwar schade, dass dadurch ein> freier Pin am ESP wegfällt, ist aber auch nicht wirklich tragisch.
Müssen wir denn die Kompatiblität aufrecht erhalten. Wer ist denn von
dem GPIO 4 Bug betroffen? Nur die V2 Shield Umbauler?
Ich kann meinen Umbau ggf. anpassen.
Mirco D. schrieb:> Müssen wir denn die Kompatiblität aufrecht erhalten. Wer ist denn von> dem GPIO 4 Bug betroffen? Nur die V2 Shield Umbauler?
Ja. Aber ich kenne mindestens einen, der seine Uhr bereits verschenkt
hat ;-)
Im Moment ist keine Not an Pins. Daher muss das nicht jetzt entschieden
werden.
Frank M. schrieb:> Ja. Aber ich kenne mindestens einen, der seine Uhr bereits verschenkt> hat ;-)
Ok, dennoch würde ich vorschlagen das vorsichtshalber im Wiki auf GPIO5
anzupassen, damit alle die ihren V2 Shield noch auf ESP-12 Umbauen, das
nach dem V3 Schema tun. Falls die Entscheidung doch irgendwann fällt,
sind es dann nicht noch mehr Betroffene, oder?
Mirco D. schrieb:> Ok, dennoch würde ich vorschlagen das vorsichtshalber im Wiki auf GPIO5> anzupassen, damit alle die ihren V2 Shield noch auf ESP-12 Umbauen, das> nach dem V3 Schema tun. Falls die Entscheidung doch irgendwann fällt,> sind es dann nicht noch mehr Betroffene, oder?
Alternativ können auch V3 Nutzer den Pin um löten ;) Es soll einige
geben die sich Adapterplatinen erstellt haben, bei dem GPIO04 genutzt
wird.
Frage ist wie viele V3 Platinen im Umlauf sind, und wie viele Platinen
umgebaut wurden.
Ich persönlich hätte hier, wenn die Software jetzt nur GPIO05 nutzen
würde, ein großes Problem, da ich auf die meisten Uhren keinen direkten
Zugriff mehr habe.
Denke es ist hier eher vollkommen Egal, welcher Pin genutzt wird. Die
Software unterstützt beide und es sind noch genügen Pins am ESP12 frei.
Mal ganz abgesehen davon das die anderen so oder so nicht rausgeführt
sind und hier eh gebastelt werden müsste, sofern sie den für irgendetwas
mal gebraucht würden.
Grüße
Marco
Marco R. schrieb:
> Ich persönlich hätte hier, wenn die Software jetzt nur GPIO05 nutzen> würde, ein großes Problem, da ich auf die meisten Uhren keinen direkten> Zugriff mehr habe.
Dem kann ich mich voll anschließen. OTA wurde umgesetzt, damit die Uhren
an der Wand bleiben können und jetzt doch wieder umlöten?
Ok, das mit den Platinen aus der Sammelbestellung ist "dumm gelaufen",
aber das parallele Ansteuern von GPIO04 und GPIO05 ist eine praktikable
Lösung und ist drei Wochen lang (fast) keinem aufgefallen.
Gruß
Günter
Ich habe meine erste WordClock12h gebaut, komme nicht weiter und hoffe
auf einen Tipp.
Meine Ausstattung:
WS2812 RGB LED Stripe im Spezial-Raster für WordClock12h
STM32 MiniDevelopmentBoard Shield V3.0
STM32F103C8T6
Was geht:
WLAN-Verbindung zur Clock.
Upload der STM32 Firmware per OTA.
Was nicht geht:
Die LEDs der Clock leuchten an einigen Buchstaben schwach, kaum zu
sehen, bilden aber keine Wörter, ändert sich auch nicht bei Test
Display.
Die Einstellung auf der WebSite der Clock werden grundsätzlich nicht
gespeichert.
In manchen Feldern stehen komische Zeichen (siehe Anhang).
In den Comboboxen steht i.d.R. nichts (siehe Anhang).
Was könnte das Problem sein?
Danke und Grüße
Rainer
Rainer G. schrieb:> In manchen Feldern stehen komische Zeichen (siehe Anhang).> In den Comboboxen steht i.d.R. nichts (siehe Anhang).
das könnte das gleiche Problem sein, das ich auch hatte.
Das Update/die Initialisierung des EEPROMs wurde abgebrochen oder ist
fehlgeschlagen. Deshalb sind dort Werte hinterlegt, mit denen die Uhr
nichts anfangen kann...
ob deswegen jedoch einige Buchstaben schwach oder gar nicht leuchten
kann ich nicht sagen. Bei mir hat sich beim Senden der Werte an das ESP
Modul der STM aufgehängt. Auf das WEB interface konnte ich noch
zugreifen, da das ja autark im ESP läuft. Die Werte im WEB Interface
waren natürlich auch Käse.
Teilweise ist der STM auch in einer laufenden Animation "gestorben", so
daß einige LEDs nur noch mit geringer Helligkeit leuchteten...
Falls möglich, versuch mal ein anderes (neues) EEPROM Modul zu
verwenden.
Hallo Rainer,
was steht den unter "Main" ist der EEPROM Online?
Mal über UART mitgelauscht was das log so sagt? (Falls nicht hier bitte
nur RX verbinden)
Evt. mal die Version 2.5 (oder älter) auf das STM flashen, dabei sollte
eigentlich der EEPROM überschrieben werden. Sofern hier der Fehler
liegt.
Gruß
Marco
Ich möchte mich auch mal zu Wort melden!
Zuerst einmal vielen Dank an Torsten Giese für das super verpackte
Packet mit "Party-Pizzen" :D
Die erste Uhr ist auch schon aufgebaut. (12h mit V3 und WS2812)
Flashen und aufbauen funktionierte auch soweit. (STM: v3.6.3 / ESP:
v3.6.4)
Ich habe nur einen Fehler in der Anzeige:
Die ersten 4 LED´s (Minuten) werden immer 1:1 an die nächsten 4 weiter
gegeben (1=5...2=6 usw) erst danach (ab der 9. LED) kommt "ES IST
usw..."
wisst ihr wie ich meine?
Edit:
- wenn ich die Zeit manuell einstelle passt es für eine Minute.
- wenn ich eien Reset ausführe passt es ebenfalls bis zum
Minutenwechsel.
In den Logs ist nichts verdächtiges zu sehen:
Hallo Andreas,
Könnte ähnliche Ursache haben wie bei X.O.
kannst du mal die 2.4.x version auf dem stm versuchen?
Ich denke, dass beides durch die inkrementellen Updates ausgelöst wird
(zwischen diesen sind die reset-pulse meist kürzer als zwischen den full
updates. Und wenn dein erste Minutenled die pause nicht als solche
erkennt, werden die minuten 'doppelt' angezeigt. Der Unterschied zu X.O.
ist, dass es bei dir reproduzierbar scheint, auch wenn ich dieses
Problem noch nicht nachstellen konnte).
Die eigentliche Ursache hält sich leider noch versteckt :(
Hast du Zugang zu einem Logikanalysator (oder wenigstens ein oszi)?
Sind die Leitungen zwichen leds und stm kurz? Abblockkondensatoren dran?
Versorgungsspannung? (Störimpulse)? Wie hoch ist der ruhe-pegel an Din
der ersten Led? Pullup: wie groß? Angstwiderstand: ja/nein? Leds
regelmä0ig mut 5v und massse versorgt?
0xef
Ps.: bin derzeit Unterwegs (keine hw dabei) und erst in 2 wochen zurück,
kann also gerade nix testen.
Bisher hängt noch alles an einem Strang.
(5cm Kabel - nur am Anfang eingespeißt)
- C´s sind drauf.
- Kein Angstwiderstand
- Pullup=1,8k
Edit: mit der 2.4.1 springt die Anzeige nicht!
Am Oszi werde ich gleich mal Eingangsspannung und Datenleitung prüfen.
Andreas I. schrieb:> mit der 2.4.1 springt die Anzeige nicht!
Das hatte ich nach deiner Fehlerbeschreibung vermuted.
Hilft es den pullup auf 3k3 zu vergrößern? (oder 4k7?)
0xef
Ich habe keinen anderen Pullup ausprobiert, weil sich beim Messen mit
dem Oszi ganz klar herausgestellt hat, dass das Datenpacket, welches die
Minuten aktualisiert die Anzeige um genau 4 LED´s verschiebt.
Für mich ein Software-Bug. Hoffentlich helfen euch diese Hinweise!
es passiert auch direkt, wenn man:
Animation=None => Save drückt. (vorher Andere einstellen)
Temperatur wird (ohne Animation) ebenfalls "verrückt" ausgegeben.
Laufschrift(Ticker) wird (ohne Animation) korrekt ausgegeben.
Eine Animation rückt alles wieder gerade.
Thomas H. schrieb:> Falls möglich, versuch mal ein anderes (neues) EEPROM Modul zu> verwenden.
Treffer. Nun kann ich sie konfigurieren und sie läuft sie auch,
allerdings nur zwei, drei Minuten, dann kommen irgendwie die Worte
durcheinander. Von "Es ist" wird z.B. nur das "s" aus dem ersten Wort
und "st" aus dem zweiten beleuchtet, ähnlich bei den anderen Worten.
Woran könnte das liegen?
Danke und Grüße
Rainer
Andreas I. schrieb:> Ich habe keinen anderen Pullup ausprobiert, weil sich beim Messen mit> dem Oszi ganz klar herausgestellt hat, dass das Datenpacket, welches die> Minuten aktualisiert die Anzeige um genau 4 LED´s verschiebt.
Das hört sich für mich folgendermaßen an:
1. Es werden Daten für die 4 Minuten-LEDs rausgeschickt.
2. Die Pause nach den 4 LEDs ist zu kurz, so dass....
3. die nachfolgenden Daten hinten "angeklebt" werden.
Kannst Du das Oszi-Bild hier mal anhängen und den Pausen-Abstand nach
den ersten 4 Minuten-LEDs ausmessen?
> Für mich ein Software-Bug.
Leider für mich bis jetzt nicht reproduzierbar :-(
Das ist alles dasselbe Problem welches X.O., Du und Rainer haben.
> Hoffentlich helfen euch diese Hinweise!
Das hoffe ich auch. Langsam wirds gespenstisch...
das heißt dass bei einem "Minuten-Update" nur Daten für die ersten 4
LED´s rausgeschickt werden?!
Dieses Paket sollte dann ja um einiges kürzer sein, als ein "normales"
Paket für die gesamte Anzeige.
Irgendwie verstehe ich die Logik noch nicht ganz. (das Datenblatt der
LED´s habe ich gelesen)
Mein Verständnis:
- Pro LED 24bit, danach >50us Low => danach Daten für nächste LED usw.
- Wenn die Daten für die Minuten kommen, dann ist vor der
Datenübertragung seeeehr lange Pause und danach auch wieder.
(Minuten-Takt eben)
Welche Pause-Zeit meint ihr denn sei zu kurz?
Alle anderen Ausgaben funktionieren ja, für mich sieht es eher so aus
als ob das Datenpaket falsch zusammengeschnürt wird...
PS: zur Info:
Es Zuckelt nichts, es Wackelt nichts. Es wird beim Minuten-Update die
Anzeige um 4 LED´s versetzt ausgegeben bis eine Animation kommt. Bis zum
Minuten-Update stimmt die Anzeige dann wieder.
Das ist mit meinem Setting zu 100% wiederholbar.
Andreas I. schrieb:> Mein Verständnis:> - Pro LED 24bit, danach >50us Low => danach Daten für nächste LED usw.
Nein.
Ein Datenblock definiert sich aus N x 24 Bit + 1 x Pause (>50µs). Die
Pause bewirkt, dass die LEDs ihren Zähler zurücksetzen und den
gewünschten RGB-Wert ausgeben.
Damit bedeutet ein Block für alle 4 Minuten:
4 x 24 Bit + 1 x Pause.
Ein Block für das ganze Display (ohne Ambilight) bedeutet:
114 x 24 Bit + 1 x Pause.
> Welche Pause-Zeit meint ihr denn sei zu kurz?
Wenn die Pause im Paket für die Minuten-LEDs...
4 x 24 Bit + 1 x Pause.
zu kurz ist, dann wird das Paket für 114 LEDs von den LEDs selbst
hintenangehängt, weil sie ihren Zähler nicht zurücksetzen. Dann
erscheinen die 4 Minuten-LEDs nochmal in der Anzeige dahinter. Genau
das hast Du doch geschildert, oder?
Also: die LEDs "sehen" ein Paket von 118 LEDs + 1 x Pause. Mich
interessiert der Datenabstand zwischen den 4x24 Bit und den 114x24 Bit.
Eigentlich sollte dieser größer als 50µs sein.
Ok. Wenn die Daten für die Minuten allein geschickt werden, dann bleibt
der Rest der Anzeige bestehen, richtig?
Dann kann ich mir nicht vorstellen, dass nur dieses Paket geschickt
wird, weil vor und nach dem "Minuten-Paket" sind etliche Sekunden pause.
Könnte es nicht sein, dass ein Paket für die gesamte Anzeige (incl
Minuten) eintrifft und direkt danach ein 4er Paket für die Minuten und
diese Daten werden von den LED´s zusammengepackt?
=> dann wäre das Minuten-Paket eigentlich überflüssig und könnte
weggelassen werden.
PS: auf dem Oszi sieht man "nur" ein Paket, davor und danach wie gesagt
etliche Sekunden pause.
Nur die positive Flanken sind ganz schön verschliffen. Werde euch
nachher ein Bilchen davon schicken.
Andreas I. schrieb:> Könnte es nicht sein, dass ein 4er Paket für die Minuten eintrifft und> direkt danach ein Paket für die gesamte Anzeige (incl Minuten) und diese> werden von den LED´s zusammengepackt?
Ja, das kann passieren.
> => dann wäre das Minuten-Paket eigentlich überflüssig und könnte> weggelassen werden.
Das ist eine ganz andere Sache. Der Grund dafür ist folgende speziell
für die WC12h:
Die Regel lautet hier:
1. Aktualisiere jede Minute alle Minuten-LEDs
2. Aktualisiere alle 5 Minuten das Display (evtl. mit Animation)
Dadurch passiert folgendes:
Minute 1: Aktualisiere die 4 Minuten
Minute 2: Aktualisiere die 4 Minuten
Minute 3: Aktualisiere die 4 Minuten
Minute 4: Aktualisiere die 4 Minuten
Minute 5: Aktualisiere die 4 Minuten
+ Aktualisiere das Display (evtl. mit Animation)
Da man beim Aktualisieren aus protokollspezifischen Gründen immer bei
der ersten LED anfangen und nicht "mittendrin" aufsetzen kann, werden
halt alle 5 Minuten ein kleines Paket (4 LEDs + Pause) und ein großes
(114 LEDs + Pause) geschickt.
Klar, das kann man für Minute 5 optimieren, obwohl das auch nicht
trivial ist. Die 5 Minuten-LEDs sind nicht-animiert, das Display
allerdings schon. Aber darum geht es ja nicht, denn das muss trotzdem
funktionieren. Sonst ist da ein Fehler. Und den gilt es zu finden.
Reingekommen ist er offenbar mit der RAM-Optimierung: Bis Version 2.4
wurde ein kompletter DMA-Buffer für alle LEDs verwendet (bis zu 11 KB je
nach Variante), ab Version 2.5 wird ein klitzekleiner DMA-Buffer für
lediglich 2 LEDs benutzt, der während des Transfers laufend aktualisiert
wird. Das spart bis zu 11 KB RAM, macht aber alles viel komplizierter.
Komischerweise ist der Fehler erst mit der Version 2.6 aufgefallen. Das
Problem ist: Den Fehler haben nur einige wenige Leute, bei den meisten
funktioniert es einwandfrei - wie zum Beispiel bei mir.
Andreas I. schrieb:> Für mich ein Software-Bug.
Tja, das ist die Frage. Eigentlich müsste bei einem Software-Bug das
jeder reproduzieren können. Dem ist aber nicht so.
Andreas I. schrieb:> Nur die positive Flanken sind ganz schön verschliffen.
Wie groß ist der von Dir benutzte Pullup?
Frank M. schrieb:
> Den Fehler haben nur einige wenige Leute, bei den meisten> funktioniert es einwandfrei - wie zum Beispiel bei mir.
Wenn ich das richtig verfolgt habe, sind bisher
- nur WC12h betroffen,
- zwei der Uhren mit dem Fehler verwenden Stripes mit Sonderabstand
(Andreas und Rainer),
- eine der Uhren ist mit Einzel-WS2812b bestückt (X.O.).
Sind da verschiedene "Chargen" im Umlauf, die ggf. empfindlich auf das
Timing reagieren und die beschriebenen Fehler zeigen?
Das habe ich verstanden.
Vielen Dank für die Aufklärung.
Allerdings habe ich nach wie vor die Vermutung, dass bei Minute 1-4
nicht nur die Minuten Pakete ankommen - wie könnte sonst die gesamte
Anzeige verschoben werden?
Aktuell habe ich 1,8k.
Werde aber noch größere werte Testen und je dazu ein Oszi Bild Posten,
wenn ich wieder zu Hause bin.
Günter H. schrieb:> Wenn ich das richtig verfolgt habe, sind bisher> - nur WC12h betroffen,
Ja, sieht so aus. Die vorher gemeldeten WC24h haben sich spätestens mit
der Version 2.6.3 in Luft aufgelöst.
> - zwei der Uhren mit dem Fehler verwenden Stripes mit Sonderabstand> (Andreas und Rainer),
Wie meinst Du das? Du meinst die speziellen Stripes von Torsten? Soviel
ich weiß, hat er davon mehrere hundert Meter verschickt. Wenn die ein
Problem hätten, dann wären es hier nicht nur 3 Leute.
> - eine der Uhren ist mit Einzel-WS2812b bestückt (X.O.).
Ja. Mehr Uhren, die den Fehler haben, sind auch nicht bekannt.
> Sind da verschiedene "Chargen" im Umlauf, die ggf. empfindlich auf> das Timing reagieren und die beschriebenen Fehler zeigen?
Andreas und Rainer müssten da mal nähere Angaben machen, zum Beispiel
die Länge der Datenleutung zur ersten LED und von der letzten
Minuten-LED zur ersten Display-LED. Die Angabe, welches Shield und
welche Shield-Version sie verwenden, ob es sich STM32F4xx oder STM32F103
handelt, fehlt auch. Ebenso die Angabe über den 220 Ohm Angswiderstand
in der Datenleitung.
Datenleitung 1.LED: ca 5cm.
Datenleitung 5.LED: kein bzw. an einem Stück / Neuerdings abgetrennt mit
20cm dazwischen => kein Unterschied.
STM32F103 Shield V3.
Angstwiderstand: 0Ohm ;)
Frank M. schrieb:
> Wie meinst Du das? Du meinst die speziellen Stripes von Torsten?
Ja.
> Soviel> ich weiß, hat er davon mehrere hundert Meter verschickt. Wenn die ein> Problem hätten, dann wären es hier nicht nur 3 Leute.
Mir ist die Mindestbestellmenge für die Sonderfertigung in Erinnerung -
aber auch die könnten ja inzwischen verschickt sein...
Mir geht darum, bei der Fehlersuche keinen Aspekt zu übersehen.
Anbei die versprochenen Oszi-Bilder.
A: Datenpacket einer Animation
B: Datenpacket(e) bei dem Minutenupdate => was ist das denn?
C: Pause nach dem großen Paket aus Bild B (166us)
D: Pause vor dem großen Paket aus Bild B (166us)
E: Einzelner Puls eines Pakets
alles mit 1,8k Pullup und den restlichen bereits genannten Settings.
Edit: mit 4,7k als Pullup ist es genau das gleiche Spiel. (nur die
Flanke sieht dann noch viel schlechter aus)
Edit2: es liegt wirklich definitiv an den LED´s!
Ich habe eben ein Stück WS2812b (60LED/m) Parallel an den Strang
gehängt.
Diese springt nicht! Der im Sondermaß von Torsten springt!
Edit3: gleich mal eine weitere Rolle von Torstens LED´s ranhängen...
Fazit: bei beiden Streifen von Torsten gibt es den Versatz um 4 LED´s
Bei meinem Streifen, der bereits Jahre hier rumliegt gibt es kein
Versatz.
Andreas I. schrieb:> könnte es sein, dass die Anzeige ebenso wie bei mir um 4 Zeichen/LED´s> versetzt ist? Hört sich für mich so an.> Led 1=5, 2=6 usw.?
Stimmt, jetzt wo du es sagst :-)
Frank M. schrieb:> Die Angabe, welches Shield und> welche Shield-Version sie verwenden, ob es sich STM32F4xx oder STM32F103> handelt, fehlt auch. Ebenso die Angabe über den 220 Ohm Angswiderstand> in der Datenleitung.
Datenleitung 1.LED: ca 35cm.
Datenleitung 5.LED: ca 8cm.
STM32F103 Shield V3.
Angstwiderstand: Keine Ahnung, ist das der R2? Unbestückt.
Grüße
Rainer
Hier noch ein paar Oszi-Bilder mit Version 2.4.1
F: Pause vor dem großen Paket aus Bild G/H (102us)
G: Pause nach dem großen Paket (1,12ms) das ist fast Faktor 10! zur
2.6.x
H: Datenpaket beim Minutenupdate
Rainer G. schrieb:> STM32F103 Shield V3.> Angstwiderstand: Keine Ahnung, ist das der R2? Unbestückt.
Angstwiderstand steht nicht in der Beschreibung vom Shield => also wirst
du keinen haben.
Andreas I. schrieb:> Edit2: es liegt wirklich definitiv an den LED´s!> Ich habe eben ein Stück WS2812b (60LED/m) Parallel an den Strang> gehängt.> Diese springt nicht! Der im Sondermaß von Torsten springt!
Das ist ja endlich mal eine Erkenntnis! Ich habe auch welche von Torsten
erhalten. Wegen Urlaub werde ich aber erst in einer guten Woche dazu
kommen, diese zu testen.
Es liegt also nicht an den Pausen, sondern offenbar am Timing der Bits
selbst. Die WS2812 und die WS2812B haben ein etwas unterschiedliches
Timing, nämlich:
1
* WS2812 WS2812B
2
* T0H 350 ns 400 ns
3
* T1H 700 ns 800 ns
4
* T0L 800 ns 850 ns
5
* T1L 600 ns 450 ns
Alle Timings haben eine Toleranz von +-150ns.
Um den Code für beide Varianten einheitlich zu halten, habe ich folgende
Timings gewählt:
* T0H 470 ns
* T1H 800 ns
* T0L 800 ns
* T1L 470 ns
Diese haben den Vorteil, dass sie symmetrisch sind, d.h. eine Bitlänge
ist immer gleich lang, nämlich:
1
T0H + T0L = T1H + T1L = 470 + 800 ns = 1270 ns
Das vereinfacht den Umgang mit einer PWM als Signalerzeuger erheblich.
Für eine WS2812B ist alles im grünen Bereich, jedoch könnte eine
empfindliche WS2812 (ohne B) 470ns (statt 350ns) für T0H fast schon zu
lang und T1L mit 470ns (statt 600) zu kurz ansehen. Die Toleranz von 150
ns wird zwar eingehalten (Abweichung ist 120-130ns) und bisher ist alles
gutgegangen, aber vielleicht ist es hier anders. Vielleicht sind ja
Torstens LEDs keine WS2812B, sondern "intolerante" WS2812 ohne B.
Eins fällt mir aber noch dazu ein: X.O. benutzt definitiv nicht Torstens
LEDs, er hat ja eine eigene Platine und keine Streifen.
Ich kann in den nächsten Tagen mal eine Testversion machen mit anderen
Timings. Hat jemand einen Vorschlag für Werte, die beiden LED-Typen
gerecht werden und trotzdem die Symmetriebedingung
1
T0H + T0L = T1H + T1L
einhalten? Am schlimmsten ist die Asymmetrie bei der WS2812 mit T0H =
350ns und T1L = 600 ns.
Finden wir keine symmetrischen Werte, wirds richtig eklig, ist aber auch
machbar durch Verdoppelung des DMA-Buffers mit gleichzeiger Verdoppelung
der CPU-Last während des Transfers.
@Andreas: Kannst Du mal messen, wie genau die gewählten 470ns und 800ns
eingehalten werden?
Ich glaube ja eher dass die Pause zwischen den Display und den Minuten
Daten die Ursache für das Springen der LEDs ist. Springen immer um genau
4 LEDs...
Bei Version 2.4.x war das 1,12ms und wird als neues Datenpaket erkannt.
Bei Version 2.6.3 ist das 166us und wird als weitere Daten erkannt.
Was meint ihr zu dieser Theorie?
Zusatz, siehe WS2812 Ansteuerung:
"Die Herstellerangaben für das genaue Timing des Protokolls weichen
teilweise zwischen unterschiedlichen Datenblattrevisionen ab. In der
Praxis hat sich allerdings gezeigt, dass die Bauteile relativ tolerant
gegenüber kleinen Timingfehlern sind."
In diesem Artikel werden andere Timings empfohlen:
1
Zeit High Zeit Low
2
Kodierung "0" 0.35 µs ±150 ns 0.9 µs ±150 ns
3
Kodierung "1" 0.9 µs ±150 ns 0.35 µs ±150 ns
Jedoch ist T1L mit 350ns hier definitiv "raus" für die geforderten 600
ns für T1L. Hier ist die Abweichung mit satten 250 ns definitiv daneben.
Aber vielleicht stimmen der Wert von T1L=600ns ja gar nicht, den ich
damals in irgendeinem Datenblatt gefunden habe, als ich den Treiber für
die WS2812 entwickelte? Denn mir kommt diese Asymmetrie ziemlich
spanisch vor. Das 1-Bit mit 600+800 = 1400ns ist definitiv ein ganzes
Stück länger als das 0-Bit mit 350+800=1150ns.
Ich werde daher die Werte mal so abändern, wie im Artikel empfohlen. Bis
auf die T1L=600ns für die WS2812 ohne B wird dieses beiden LED-Typen
gerecht. Am Wochenende schicke ich dann mal ein Update zum Test.
Andreas I schrieb:> Ich glaube ja eher dass die Pause zwischen den Display und den Minuten> Daten die Ursache für das Springen der LEDs ist. Springen immer um genau> 4 LEDs...> Bei Version 2.4.x war das 1,12ms und wird als neues Datenpaket erkannt.> Bei Version 2.6.3 ist das 166us und wird als weitere Daten erkannt.> Was meint ihr zu dieser Theorie?
Das glaube ich eher nicht, obwohl mir dieser Gedanke vor ein paar Tagen
auch schon durch den Kopf schoß:
Die Pause muss mindestens 50µs lang sein, das findet sich in allen
Datenblättern. 166µs ist das Dreifache der geforderten Zeit und ist
daher mehr als genug.
Die WS2812 mit 4Pins sind doch immer die WS2812B
Die Version ohne B hat 6 Pins meine ich zu wissen. Ich wollte mit der
Aussage "es sind die LEDs" auf Charge Bzw Toleranz der Pause Zeiten
hinweisen.
Andreas I schrieb:> Die WS2812 mit 4Pins sind doch immer die WS2812B
Achso? Das wusste ich nicht.
> Die Version ohne B hat 6 Pins meine ich zu wissen. Ich wollte mit der> Aussage "es sind die LEDs" auf Charge Bzw Toleranz der Pause Zeiten> hinweisen.
Es wäre trotzdem nett, wenn Du die Pegelzeiten mal ausmessen würdest.
Wie gesagt: Ich habe gestern auch von Torsten eine Rolle mit den LEDs
bekommen, kann sie aber erst wg. Urlaub am übernächsten Wochenende
testen. Dann werden wir spätestens eine Lösung finden - vorausgesetzt,
ich kann dann endlich diesen Effekt reproduzieren.
Ah ich hatte dann einen Denkfehler. Dachte die 50us müssen zwischen den
Daten zweiter LEDs vorhanden sein. Aber es steht ja Reset da....Also ist
das die Pause die es braucht um als ganz neues Datenpaket erkannt zu
werden. Alles klar
Ich komme leider erst Montag wieder an mein Oszi
Über eine Testversion mit längerer Pause für die Minuten würde ich mich
aber trotzdem freuen. Vielleicht sind die Biester ja weit entfernt vom
Datenblatt.... Sieht auf den ersten blick so verdächtig aus... Das würde
ich echt gern ausschließen. Und alle anderen Bits werden ja wunderbar
erkannt... Also mich lässt der Gedanke mit der Pause nicht los.
> Für eine WS2812B ist alles im grünen Bereich, jedoch könnte eine> empfindliche WS2812 (ohne B) 470ns (statt 350ns) für T0H fast schon zu> lang und T1L mit 470ns (statt 600) zu kurz ansehen. Die Toleranz von 150> ns wird zwar eingehalten (Abweichung ist 120-130ns) und bisher ist alles> gutgegangen, aber vielleicht ist es hier anders. Vielleicht sind ja> Torstens LEDs keine WS2812B, sondern "intolerante" WS2812 ohne B.
Torstens LEDs sind definitiv WS2812B, 4 statt 6 Pins.
Siehe auch
https://www.mikrocontroller.net/attachment/203903/ws2812_compared.jpg
Die Betroffenen könnten mal die 5V Versorgung der LEDs genauer prüfen,
ist hier alles in Ordnung?
Gruß Thomas
Erstmal großen Dank an Andreas fürs nachmessen!
Kannst du evtl. einen zweiten kanal des oszi hinter die mintenled
anschliessen und beide simultan aufnehmen?
Da müsste man sehr schön sehen können, dass nach einem reset die ersten
n*24 bit fehlen weil sie von den dazwischenliegenden led als eigene
daten interpretiert werden. Ist denen der reset zu kurz, kommen die
nächsten daten durch. Auch wärs super mal das timing der ausgegebenen
bits anzusehen.
Da sich die led-timings zwischen v2.4 und v2.6 nicht geändert haben, die
reset timings aber schon, ist klar dass dieser unterschied der auslöser
sein muss.
Warum manche ws2812 jetzt einen deutlich längerenn resetpuls brauchen
erklärt dies jedoch erstmal nicht.
Ich danke, dass wir am 'kompatibelsten' aus der Misere kommen, wenn
diese mini-updates entfallen ( zumahl deren daten mit dem folgenden
fullupdate eh gleich wieder überschrieben werden).
Entweder permanent mit 64Hz fullupdates (also alle 15.6ms für ca. 6ms
Daten übertragen, restliche Zeit pause) oder nur dann, wenn es sein
muss, aber nur mit 64 hz prüfen.
Wenn Frank keine Einwände erhebt würde ich nächste Woche mal eine
entsprechende Testversion basteln und bereitstellen (bin derzeit
unterwegs).
Ich werde mal mein altes setup rauskramen, mit dem ich damals das timing
meiner ws2812 durchgemessen habe. Ich würde gern einige der
problematischen leds damit 'durchklingeln', vielleicht ergibt das was.
(Wenn dabei rauskäme, dass die resetzeiten aus dem datenblatt stimmen
muss es eine andere Ursache geben).
Details per PN.
0xef
So, nachdem ich vorgestern die Shields und Zwischenplatten erhalten habe
sind beim Löten ein paar Fragen aufgetaucht:
1. Ist es Absicht das die zusätzlichen Teile für den Nucleo(Quarz und
die 2 Kondensatoren) nicht im Warenkorb sind?
2. Bei der aktuellen Lieferung der Zwischenböden sind die Löcher der
Magnete nicht ganz durchgebohrt, war das so gewollt!?
Gruß
Duff
Hallo
ich habe genau das selbe Problem mit den Minutenpunkten!
Aktueller Bestand : LEDWS2812B mit Nucleo Board V3 /Shild V3 neueste
Software.
Es ist nur alle 4-5 Minuten eine sauber Uhrzeit zu lesen!
Wo kommt den der Angstwiderstand rein? Und wie groß sollte er sein?
Wolfgang L. schrieb:
> Wo kommt den der Angstwiderstand rein? Und wie groß sollte er sein?
Der "Angstwiderstand" ist auf der aktuellen V3 der Shields nicht mehr
berücksichtigt.
(Es war ein 220 Ohm-Widerstand zwischen dem WS2812-Anschluss des Boards
und "WS2812-Data" auf dem Shield.)
> Es ist nur alle 4-5 Minuten eine saubere Uhrzeit zu lesen!
Die Behebung dieses Fehlers ist in Arbeit, siehe Beiträge weiter oben.
Hallo Wilfgang,
> Aktueller Bestand : LEDWS2812B mit Nucleo Board V3 /Shild V3 neueste> Software.
Nucleo-F401 oder F411? Meinst du v2.6.3?
Ws2812 von Torsten oder andere Bezugsquelle?
0xef
Frank M. schrieb:> 1. Die Uhr hängt zwar in einem WLAN, aber dieses ist gar nicht mit> dem Internet verbunden - aus welchen Gründen auch immer.
Manche Leute verdrängen gerne, dass es auf deutlich mehr als 70% der
Oberfläche der Erde mit Internet nicht so richtig gut bestellt ist, wenn
man mal von Satellitenverbindung absieht.
Da wäre ein GPS Interface, also NMEA über serielle Schnittstelle und
evtl. optional 1PPS Sekundenpulsauswertung eine Möglichkeit für die
genaue Zeit.
Frank M. schrieb:> Eins fällt mir aber noch dazu ein: X.O. benutzt definitiv nicht Torstens> LEDs, er hat ja eine eigene Platine und keine Streifen.
Ja, es sind nicht Torstens Leds, aber auch WS2812b. Evtl. gibts da ja
wirklich Toleranzen beim Timing.
Ich bin ehrlich gesagt aber auch noch nicht dazu gekommen die Pegel und
Signale mit einem Oszi oder SignalAnalyzer nachzumessen ob da alles
sauber ist.
2.4 funktioniert noch komplett richtig(ohne Serienwiderstand), ab 2.5
gibts Probleme. Ohne Pull-Up von circa 4kohm oder kleiner geht in beiden
Fällen gar nichts.
Wolfgang schrieb:> Da wäre ein GPS Interface, also NMEA über serielle Schnittstelle und> evtl. optional 1PPS Sekundenpulsauswertung eine Möglichkeit für die> genaue Zeit.
Die Genauigkeit der Zeit sollte mit dem DS3231SN eigentlich kein Thema
mehr sein oder hast du anderweitige Beobachtungen gemacht, dass die Uhr
merklich vor oder nach gehen würde?
Und die Umstellung von Sommer auf Winterzeit erspart dir leider auch der
GPS Empfänger nicht, da GPS die Zeitumstellung nicht kennt.
Enrico F. schrieb:> Nucleo-F401 oder F411? Meinst du v2.6.3?> Ws2812 von Torsten oder andere Bezugsquelle?
Servus nochmal,
ich habe das Nucleo F411RE V3 und die Software V2.6.3 ESP V2.6.0
Die LED´s sind von Thorsten WS2811B!
wie komme ich denn an eine ältere Software Version die läuft?
Wir bauen die Uhr mit 6 Arbeitskollegen! Ich bin der erste der die Uhr
fertig hat. Bis auf das verschieben der LED´s funktioniert alles
einwandfrei. Werde sofort berichten wenn der fehler bei meinen Kollegen
auch auftritt.
Hallo zusammen,
und erstmal Frohe Ostern!
Auch ich konnte das Verschieben der Minuten mit der V2.6.3 beobachten,
nachdem ich meine erste Uhr gestern fertig gestellt hatte.
Meine HW: WC12h, Mini-Development Board, Shield V3 und die WS2811 aus
der letzten Sammelbestellung.
Die SW V2.4 eingespielt und die Zeit wird korrekt angezeigt. Somit ist
erstmmal alle OK und meine Frau zufrieden.
Melde mich freiwillig als Tester, falls eine neue SW bereit steht.
Gruß
Simon
PS: Danke für das große Engagement aller Beteiligten, vorallem an Frank
und Torsten!
Nachdem die Feiertage sich dem Ende neigen bin ich wieder in der Nähe
meiner Hardware.
Also eben nochmal das Oszi bewegt euch die gewünschten Infos zu
entlocken.
Die Bilder bzw. Dateinamen sprechen wohl für sich.
Eine zusätzliche Info:
- Die zeiten der einzelnen Bits unterscheiden sich überhautp nicht
zwischen Version 2.4.1 und 2.6.3
Die Zeiten sind:
- Gesamt High-Bit: 1,28us
- Gesamt Low-Bit: 1,28us
- High-Bit hightime: 800ns
- High-Bit lowtime: 480ns
- Low-Bit hightime: 480ns
- Low-Bit lowtime: 800ns
Interessant sind demnach eher die Bilder A und H:
Darauf sieht man, dass am Anfang des großen Datenpakets auf Bild A die
ersten Daten fehlen => werden richtig von den ersten 4 LED´s
"geschluckt".
Auf bild H ist das nicht der Fall.
Daraus kann man schließen, dass die LED´s die kleinen Minutenpakete und
das große Displaypaket "zusammenlegen" und nicht als "neues" Paket
verstehen.
Andreas I. schrieb:> Also eben nochmal das Oszi bewegt euch die gewünschten Infos zu> entlocken.
Hallo Andreas,
vielen Dank für diese Info! Damit ist zwar nicht klar warum manche
Ws2812b längere resets brauchen, aber manche tun es. Und das bit-timing
ist nicht Schuld.
Ich bin noch auf Familienbesuch und versuche übermorgen eine Testversion
bereitzustellen. Vorher gehts bei mir leider nicht...
0xef
Hallo zusammen,
Anfängerfrage (davon kommen sicherlich demnächst noch mehr, da es jetzt
endlich mal ans Werk gehen soll bei mir, nachdem die Sammelbestellungen
eingetroffen sind):
Ich bestelle gerade bei Reichelt die Komponenten. Ich habe bisher nur
mit Litze mit 1mm² Kabelquerschnitt gearbeitet, aber auch noch nichts im
Bereich Mikrocontroller gemacht. Passt das für dieses Projekt, oder
empfiehlt sich da mehr/weniger aus irgendwelchen Gründen?
Andreas I. schrieb:> Darauf sieht man, dass am Anfang des großen Datenpakets auf Bild A die> ersten Daten fehlen => werden richtig von den ersten 4 LED´s> "geschluckt".> Auf bild H ist das nicht der Fall.
So richtig eindeutig ist das für mich auf Bild H aber nicht zu
erkennen...
Wie dem auch sei: Hier eine Testversion mit einer Pause von mind. 250
µs, also dem Fünffachen der laut Datenblatt geforderten Pause von 50µs.
Ich bin gespannt.
Florian R. schrieb:
> Anfängerfrage (davon kommen sicherlich demnächst noch mehr,
Nur zu!
> Ich bestelle gerade bei Reichelt die Komponenten. Ich habe bisher nur> mit Litze mit 1mm² Kabelquerschnitt gearbeitet, aber auch noch nichts im> Bereich Mikrocontroller gemacht. Passt das für dieses Projekt, oder> empfiehlt sich da mehr/weniger aus irgendwelchen Gründen?
Für die Verkabelung in der Uhr ist 1 mm² aus meiner Sicht zu viel: Die
ist zu wenig flexibel, das wird alles zu "dick".
Meine WC12h habe ich mit 0,14 mm²-Litze verkabelt, lediglich für das
("Verlängerungs"-)Kabel vom 5 V-Netzteil zur Uhr habe ich Zwillingslitze
0,5 mm² verwendet, bei einer WC24h sollte man da 0,75 mm² vorsehen.
Schau Dir dazu die Bilder im Kapitel "Mechanik" des Artikels an und
achte auf kurze Kabellängen, speziell beim Flachbandkabel, da haben die
einzelnen Adern üblicherweise einen Querschnitt von 0,09 mm².
Viel Erfolg
Günter
Ging mir ebenfalls so.
Habe mit 0,75qmm von Stripe zu Stripe Verkabelt (5V/GND) und diese
Verbindung ist zu dick, weil die Aluplatte dann nicht mehr eben auf dem
Holz aufliegt.
Ich werde es ebenfalls ändern müssen auf z.b. 0,14qmm
Frank M. schrieb:> Andreas I. schrieb:>> Darauf sieht man, dass am Anfang des großen Datenpakets auf Bild A die>> ersten Daten fehlen => werden richtig von den ersten 4 LED´s>> "geschluckt".>> Auf bild H ist das nicht der Fall.>> So richtig eindeutig ist das für mich auf Bild H aber nicht zu> erkennen...>> Wie dem auch sei: Hier eine Testversion mit einer Pause von mind. 250> µs, also dem Fünffachen der laut Datenblatt geforderten Pause von 50µs.>> Ich bin gespannt.
Ich habe die Bilder mal noch bearbeitet, daran sieht man den Unterschied
besser.
Ich werde direkt nach Feierabend prüfen ob die verlängerte Pause
ausreicht.
Günter H. schrieb:> Für die Verkabelung in der Uhr ist 1 mm² aus meiner Sicht zu viel: Die> ist zu wenig flexibel, das wird alles zu "dick".>> Meine WC12h habe ich mit 0,14 mm²-Litze verkabelt, lediglich für das> ("Verlängerungs"-)Kabel vom 5 V-Netzteil zur Uhr habe ich Zwillingslitze> 0,5 mm² verwendet, bei einer WC24h sollte man da 0,75 mm² vorsehen.>> Schau Dir dazu die Bilder im Kapitel "Mechanik" des Artikels an und> achte auf kurze Kabellängen, speziell beim Flachbandkabel, da haben die> einzelnen Adern üblicherweise einen Querschnitt von 0,09 mm².>> Viel Erfolg> Günter
Danke, das hätte ich nicht gedacht, dann bestell ich mir 0,14mm²-Litze.
Das 16-polige Flachbandkabel war ein guter Hinweis, das hatte ich noch
nicht im Warenkorb. Die Lochrasterplatine ist mir in dem Kapitelteil
auch noch aufgefallen, da hab ich auch noch eine einfache in den
Warenkorb gepackt (lieber mit Beschichtung, als ohne?). Fällt jemandem
sonst noch etwas ein, dass nicht in der Einkaufsliste aufgeführt ist,
aber benötigt wird? Die Versandkosten bei Reichelt sind ja im Gegensatz
zu den Artikelwerten sehr hoch.
Ggf. macht es Sinn, für diese Dinge noch eine Zeile in der Tabelle zu
ergänzen, das benötigte Standardequipment, welches der regelmäßige Löter
vielleicht eh im Fundus hat, aber jemand wie ich noch nicht.
Florian R. schrieb:> Das 16-polige Flachbandkabel war ein guter Hinweis, das hatte ich noch
Ich verkable alles grundsätzlich mit dem Flachbandkabel. Einzelne Litzen
kann man sehr einfach davon abtrennen.
duffbeer2000 schrieb:> Also die Lochrasterplatine brauchst meines wissens nicht, da der> Wannenstecker inzwischen ja bereits auf der Platine untergebracht ist.
Danke, macht Sinn, in der Einkaufsliste sind auch Stecker und Buchse,
also keine Platine mehr. Dann sind da Text und Bild wohl auch mal zu
aktualisiseren.
Ich baue die einfache Standard-WC12h mit MiniDevBoard.
Frank M. schrieb:> Andreas I. schrieb:>> Darauf sieht man, dass am Anfang des großen Datenpakets auf Bild A die>> ersten Daten fehlen => werden richtig von den ersten 4 LED´s>> "geschluckt".>> Auf bild H ist das nicht der Fall.>> So richtig eindeutig ist das für mich auf Bild H aber nicht zu> erkennen...>> Wie dem auch sei: Hier eine Testversion mit einer Pause von mind. 250> µs, also dem Fünffachen der laut Datenblatt geforderten Pause von 50µs.>> Ich bin gespannt.
Trommelwirbel...es funktioniert schonmal viel besser. Ab und an sehe ich
noch ein Hüpfen, aber nicht zu 100% beim Minutenupdate wie bei der 2.6.3
Evtl. sollte noch etwas mehr zeit bzw. auch ein kleiner Puffer mit drin
sein?
Edit: ich habe jetzt geschätzt zu 75% keine Verschiebung mehr. Die
restlichen 25% teilen sich in Verschiebungen um 1-4 LEDs
Frank M. schrieb:> So richtig eindeutig ist das für mich auf Bild H aber nicht zu> erkennen...>> Wie dem auch sei: Hier eine Testversion mit einer Pause von mind. 250> µs, also dem Fünffachen der laut Datenblatt geforderten Pause von 50µs.>> Ich bin gespannt.
Hallo Frank,
Perfekt :)
Also bei mir funktionierts damit. Komplett ohne Aussetzer, irgendwelche
Verschiebungen oder sonstwas. Genau so wie es soll.
Vielen Dank
Dann ist das aber eindeutig ein Bug in den LEDs. Am Wochenende kann ich
dann selbst mit Torstens LEDs testen und dann die optimale Pausenlänge
empirisch bestimmen. Vielleicht mache ich das auch in der Weboberfläche
konfigurierbar.
Hallo,
SUPER!!! die Uhr springt nicht mehr und macht genau was sie soll!!!
Habe es mit jedem verschiedenen Ambilight versucht und funktioniert nun
top!
Sowohl bei meiner Uhr als auch bei meinem Testaufbau.
grüße
Harald
Ich nehme das mit den 25% Sprünge zurück!
Mein Testaufbau (mit den parallel geschalteten älteren WS2812B) hatte
wohl für Unstimmigkeiten bei den LED´s gesorogt - hier sind die neueren
von Torsten gehüpft, die älteren allerdings nicht.
Nichtsdestotrotz habe ich die Uhr jetzt fertig und den alten LED
Streifen natürlich nicht mehr dran und siehe da: alles perfekt.
Vielen Dank, Frank!!!
Hallo,
ich habe die Teile aus der Sammelbestellung erhalten und fange jetzt
mit dem Bauen an.
Folgende Fragen stellen sich mir deshalb:
a. Kann ich den Thread so einrichten, dass die neuesten Mitteilungen
zuerst erscheinen, ich also nicht jedesmal beim Aufrufen an das Ende
gehen muss ?
b. Wie suche ich innerhalb des Threads ?
c. Wie suche ich innerhalb der Bastelanleitung ?
d. Werden die Magnete in den nicht durchgebohrten 8mm Löchern in den
Zwischenböden von Wordclock12h und Wordclock24h von hinten eingebaut?
oder muß ich durchbohren ?
e. Wo wird das Nucleoboard Shield STM Basis im Zwischenboden
Wordclock12h plaziert ? Die Taschen sind zu schmal.
f. Wieviel Meter 16pol Flachbandkabel 0,14mm² brauche ich für die
Wordclock12h und Wordclock24h?
Ich freue mich auf die Antworten.
An dieser Stelle möchte ich den "Treiber" dieses Projektes danken.
Andreas/Alidi
Ich konnte doch noch ab und zu ein Hüpfen erzeugen und zwar wenn ich bei
Tetris eine oder mehr Zeilen "abgebaut" habe.
Vermutlich sind wir noch etwas knapp an der Grenze zum Optimum.
Andreas B. schrieb:> Hallo,>> ich habe die Teile aus der Sammelbestellung erhalten und fange jetzt> mit dem Bauen an.> Folgende Fragen stellen sich mir deshalb:> a. Kann ich den Thread so einrichten, dass die neuesten Mitteilungen> zuerst erscheinen, ich also nicht jedesmal beim Aufrufen an das Ende> gehen muss?
In den Einstellungen kannst du zumindestens einstellen, dass der Treadh
in kürzere Seiten veteilt wird.
Weiters kannst du in den Titel des letzten Posts klicken und diesen Link
als Bookmark ablegen. Dann landest du wenigstens beim aktuell letzten
Post. Musst du halt alle paar Tage/Wochen aktualisieren.
> b. Wie suche ich innerhalb des Threads ?
Den ganzen Thread auf einer Seite darstellen und mit der Browsersuche
durchsuchen.
> c. Wie suche ich innerhalb der Bastelanleitung ?
Genau gleich. Im Prinzip würde ich dir aber mal raten die
Bastelanleitung von Anfang bis Ende durchzulesen. Das hilft immens beim
Bauen. Hatte ich zu Beginn auch nicht gemacht und hier deshalb oft genug
unnötige Fragen gestellt. Lese es einfach durch. Spart auch dir selbst
Zeit.
Alles was unklar ist wird hier dann schon beantwortet.
https://www.mikrocontroller.net/articles/WordClock_mit_WS2812
Andreas I. schrieb:> Ich konnte doch noch ab und zu ein Hüpfen erzeugen und zwar wenn> ich bei Tetris eine oder mehr Zeilen "abgebaut" habe.> Vermutlich sind wir noch etwas knapp an der Grenze zum Optimum.
Dann mache ich morgen noch eine 300us Version. Dann sollte der Spuk
endlich vorbei sein.
Frank M. schrieb:> Dann mache ich morgen noch eine 300us Version. Dann sollte der Spuk> endlich vorbei sein.
Hallo Frank,
nachdem du jetzt schneller warst, wäre dies eine Gelegenheit die
eigentlich überflüssigen mini-uodates, die das Problem erst zum
Vorschein brachten, loszuwerden?
Ich meine uodates nur der Minutenleds gefolgt von einem update der
wörtermatrix (welches ja die Minutenleds auch updated)?
0xef
Andreas B. schrieb:
> e. Wo wird das Nucleoboard Shield STM Basis im Zwischenboden> Wordclock12h plaziert ? Die Taschen sind zu schmal.
Im Artikel steht dazu: "STM32F103C8T6 Mini-Development Board:
Dieses Board wird für die "klassische" 10x11 WordClock12h empfohlen".
> f. Wieviel Meter 16pol Flachbandkabel 0,14mm² brauche ich für die> Wordclock12h und Wordclock24h?
Die Uhren haben eine Größe von 45 cm x 45 cm, kurze Leitungslängen sind
erstrebenswert. Also müssten 50 cm vom Wannenstecker auf dem Shield bis
zu den LED-Stripes locker reichen, nochmal 50 cm für die weitere
Verkabelung
--> 1 m.
Enrico F. schrieb:> Frank M. schrieb:> Dann mache ich morgen noch eine 300us Version. Dann sollte der Spuk> endlich vorbei sein.>> Hallo Frank,>> nachdem du jetzt schneller warst, wäre dies eine Gelegenheit die> eigentlich überflüssigen mini-uodates, die das Problem erst zum> Vorschein brachten, loszuwerden?
Da dies eine ganz andere Schicht in der Software betrifft, möchte ich
das im nächsten Update ungern tun. Die nächste 2.6.x soll eine stable
Version sein. Software-Optimierungen, die eventuell wieder andere Löcher
reissen, gehören in diie 2.7.0.
Darf ich mir für die 2.7er wünschen, dass bei Tetris kein weißer Rahmen
um die Spielfläche gezogen wird? Dann ist (gerade bei der 12h Version)
mehr Platz zum Austoben :D
Ich habe ein Paar Fragen zum Source Code 12h version
ich habe eine Frontplatte mit einem etwas anderen Layout.
Eine AM und PM Section und unten in der Mitte drei Buchstaben - SEK für
Sekunden. Kann man die Sekunden anzeigen so ändern das das nur über eine
LED geht.
Bei einer anderen Uhr Version (nur mit esp8266) konnte ich das mit einer
einfachen Abfrage realisieren
Sekunde = gerade dann LED an
Sekunde = ungerade dann aus
dann zwei neue Felder erstellen für Am, PM
und Vormittag - Nachmittag abfragen und anzeigen.
Ist unter Arduino Enviroment nicht ganz so schwierig.
Ich habe mir das Original mal unter embitz angeschaut , stehe aber noch
etwas auf dem Schlauch.
Für einen Tip , wo man den Quell Code ändern muss wäre ich sehr dankbar
Ich habe ein Paar Fragen zum Source Code 12h version
ich habe eine Frontplatte mit einem etwas anderen Layout.
Eine AM und PM Section und unten in der Mitte drei Buchstaben - SEK für
Sekunden. Kann man die Sekunden anzeigen so ändern das das nur über eine
LED geht.
Bei einer anderen Uhr Version (nur mit esp8266) konnte ich das mit einer
einfachen Abfrage realisieren
Sekunde = gerade dann LED an
Sekunde = ungerade dann aus
dann zwei neue Felder erstellen für Am, PM
und Vormittag - Nachmittag abfragen und anzeigen.
Ist unter Arduino Enviroment nicht ganz so schwierig.
Ich habe mir das Original mal unter embitz angeschaut , stehe aber noch
etwas auf dem Schlauch.
Für einen Tip , wo man den Quell Code ändern muss wäre ich sehr
dankbar.
Version 2.6.4 ist online mit folgenden Änderungen:
- Verlängerung der Pausen für WS2812 auf 300us.
- Verschäfte Plausibilitätsprüfungen für EEPROM-Inhalte, ggfls. RESET
auf Standardwerte.
Hallo an die Experten!
Ich habe mir offensichtlich beim ersten OTA-Update-Versuch den STM
"abgeschossen" - zumindest läuft nix mehr (obwohl es doch bis eben so
schön funktioniert hat... ;-( )
Ich nutze ein Nucleo 411 mit dem V3 Shield. Alles hat funktioniert -
also habe ich zum endgültigen Zusammenbau den ST-Link abgetrennt. Jetzt
- nach dem fehlgeschlagenen Update - würde ich gern neu flashen...
Also: RX/TX Connector mit den PINs am Shield verbunden und noch Masse
vom CN4 des ST-Link zum Shield. Danach dachte ich, ich könnte neu
flashen - bekomme aber keinen Connect in der Software (USB-Fehler).
Danach gelesen und am Nucleo die Lötbrücken 62/63 gesetzt, die drei
Drähte neu verbunden - kein Erfolg.
Wie muss ich das denn nun "richtig" anstellen?
Ich habe jetzt meine erste Uhr in der neuen Bauweise fertiggestellt, es
handelt sich um eine WC12 mit STM32F411RE Miniboard, dem Shield v3 und
den LEDs aus der Sammelbestellung.
Zusätzlich verbaut habe ich folgendes: TSOP, LDR, DS1820 und die
Spannungsabschaltung
Flashen hat alles wunderbar funktioniert.
Nun zu meinem Problem : Der BS170 der Spannungsabschaltung wird richtig
heiß, da kann man kaum mit dem Finger ran. Jemand ne Idee was das sein
könnte?
Horst B. schrieb:>> Hast Du wirklich den ST-Link so angeschlossen?> https://www.mikrocontroller.net/articles/Datei:STLink-to-Nucleo.png
Auf dem Shield sind doch nur Anschlüsse für RX/TX und GND bzw. 5V
vorhanden... Müssen die restlichen Leitungen ebenfalls angeschlossen
werden? Dann direkt am Nucleo - weil auf dem Shield nicht vorhanden?
Viele Fragen...
Hallo zusammen,
ich habe heute meine erste Wordclock soweit fertiggestellt, dass
eigentlich alles funktionieren müsste (ist lediglich noch nicht im
Gehäuse verbaut).
Leider musste ich feststellen, dass zwar LEDs angehen, einige Worte
jedoch um ein paar Zeichen verschoben sind. (siehe Anhang)
Außerdem ist auch die Zeit "eingefroren" und bleibt dauerhaft gleich.
Wenn ich die Uhr vom Strom nehme und neu anstecke, zeigt sie wieder eine
andere Zeit (auch hier wieder verschobene Worte) und auch dann bleibt
die neue Zeit weiterhin dauerhaft angezeigt.
Wäre klasse wenn mir jemand helfen könnte.
Christian S. schrieb:
> Der BS170 der Spannungsabschaltung wird richtig heiß, da kann man kaum> mit dem Finger ran.
Das könnte eine "Lötbrücke" zwischen Pin 3 und Pin 4 des IRF9310 sein.
Bittespeziell dort kontrollieren. Es ist fraglich, ob der BS170
"überlebt" hat.
Ph L. schrieb:> Leider musste ich feststellen, dass zwar LEDs angehen, einige Worte> jedoch um ein paar Zeichen verschoben sind. (siehe Anhang)
Lässt sich leicht erklären: Du benutzt ein anderes Buchstabenlayout und
keine der Frontplatten von diesem Projekt hier... ich meine ZWÖLFUNKUHR
in der letzten Zeile ist das Layout der "echten" QLOCKTWO.
Vergleiche mal deine leuchtenden Buchstaben mit diesem Bild hier, dann
dürfte es passen:
https://www.mikrocontroller.net/wikifiles/4/42/Wordclock-frontplatte-v2.png
Gruß,
Peter
Habe jetzt alle Verbindungen gezogen und den STM wiederbeleben können.
SO kann man natürlich nichts debuggen - da er ja ausgebaut werden
muss...
Habe das OTA-Update nochmal probiert und (auch mit der aktuellen
Version) folgendes erhalten (bevor er dann wieder "stirbt"):
Updating STM32 firmware...
Downloading wc24h-stm32f411-ws2812-grb.hex... done.
Start Bootloader
Trying to enter bootloader mode...
Bootloader version: 3.1
Flash now unprotected
Trying to enter bootloader mode again...successful
Erasing flash (extended method)... successful!
Checking HEX file...
error: cannot open file
Flashing STM32...
error: cannot open file
End Bootloader
Done. Please Reset your STM32 now!
Irgendwelche Ideen?
Hallo Hagen,
welchen ESP hast Du, den 1er oder den 12er und welche FW-Version ist da
drauf?
Könntest Du probeweise eine andere STM FW (12h) über OTA probieren?
@Frank M. (ukw)
hmm, wäre es vielleicht sinnvoller zuerst die HEX-Datei zu prüfen, bevor
man den Erase macht? Dann würde wenigstens die Uhr noch gehen :)
MfG,
Andreas
Günter H. schrieb:>> Der BS170 der Spannungsabschaltung wird richtig heiß, da kann man kaum>> mit dem Finger ran.>> Das könnte eine "Lötbrücke" zwischen Pin 3 und Pin 4 des IRF9310 sein.> Bittespeziell dort kontrollieren. Es ist fraglich, ob der BS170> "überlebt" hat.
Ich habe jetzt mal den IRF9310 und BS170 entfernt und jeweils einen
neuen eingelötet, Lötbrücken kann ich keine entdecken. Allerdings wird
der BS170 sofort wieder heiß.
Anbei mal Bilder vom Ursprungszustand. Noch ne Idee?
Andreas M. schrieb:> @Frank M. (ukw)> hmm, wäre es vielleicht sinnvoller zuerst die HEX-Datei zu prüfen, bevor> man den Erase macht? Dann würde wenigstens die Uhr noch gehen :)
Da hast Du vollkommen recht. Blöd gelaufen. Ich werde die Reihenfolge
umdrehen.
Dieser Fehler:
error: cannot open file
könnte evtl. von einem nicht oder falsch formatierten SPIFFS herrühren.
Ich glaube, es ist sinnvoll, hier noch eine Schaltfläche "Format SPIFFS"
einzubauen. Ich schreibs mal auf die TODO-Liste.
Christian S. schrieb:
> Ich habe jetzt mal den IRF9310 und BS170 entfernt und jeweils einen> neuen eingelötet, Lötbrücken kann ich keine entdecken. Allerdings wird> der BS170 sofort wieder heiß.>> Anbei mal Bilder vom Ursprungszustand. Noch ne Idee?
Ja. Den IRF9310 um 180° drehen. Im Bild ist er falsch herum eingelötet.
Beim aktuellen Aufbau sind Pin 3 und Pin 4 auf der Platine durch den
IRF9310 kurzgeschlossen, deshalb wird der BS170 heiß.
Den Bestückungsplan aus dem Artikel kennzeichnet die doppelte Linie die
Seite mit Pin 1. Ich habe diesen Plan um einen roten Punkt ergänzt -
vielleicht wird damit die Ausrichtung des IRF9310 deutlicher.
Viel Erfolg
Günter
Frank M. schrieb:> könnte evtl. von einem nicht oder falsch formatierten SPIFFS herrühren.
Könnte sein, schwer zu sagen. Ein Knopf "Format" würde nicht schaden, es
sei denn wir kommen auf die Idee andere Daten da zu speichern ;)
Bei der Gelegenheit könnte man auch das "EEPROM Formatieren" einbauen?
MfG,
Andreas
Andreas M. schrieb:> Hallo Hagen,> welchen ESP hast Du, den 1er oder den 12er und welche FW-Version ist da> drauf?
Es ist der 12er und der hat (wird auch so angezeigt) die 2.6.4 drauf.
Dort scheint OTA zu funktionieren - zumindest ist nach dem Druck auf den
Button wieder 'aufgewacht' :-)
Gruß...
...Hagen
Frank M. schrieb:>> Dieser Fehler:>> error: cannot open file>> könnte evtl. von einem nicht oder falsch formatierten SPIFFS herrühren.> Ich glaube, es ist sinnvoll, hier noch eine Schaltfläche "Format SPIFFS"> einzubauen. Ich schreibs mal auf die TODO-Liste.
Was genau ist denn "Format SPIFFS"? In der Anleitung steht nichts von
einem entsprechenden Schritt... Hab ich was übersehen oder hätte ich
noch was tun müssen?
> Ja. Den IRF9310 um 180° drehen. Im Bild ist er falsch herum eingelötet.>> Den Bestückungsplan aus dem Artikel kennzeichnet die doppelte Linie die> Seite mit Pin 1. Ich habe diesen Plan um einen roten Punkt ergänzt -> vielleicht wird damit die Ausrichtung des IRF9310 deutlicher.>> Viel Erfolg> Günter
Also so langsam aber sicher macht mich die Uhr fertig ;) Ich habe den
IRF gedreht und den BS nochmal gegen einen neuen getauscht. Danach war
das Problem mit dem heißen BS erledigt. Das einzige Problem das
weiterhin bestand war das die LED alle bis auf die Minuten-LED zu
schwach geleuchtet haben. Nachdem ich die Uhr jetzt eine Stunde ohne
Strom liegen lassen habe war das Problem beim einstecken zuerst behoben.
Dann habe ich sie wieder ausgesteckt und das Problem war wieder da. Das
Webinterface sieht auch sehr komisch aus, Beispiele in den Bildern. Ich
kann die Uhr nicht stellen, auch wenn ich die Zeit online abrufe ändert
sich nichts. Die Dropdown Menüs sind alle leer. Inzwischen bin ich etwas
ratlos.