Noch ein Tip da ich erst selber nach ner Weile drauf gekommen bin:
Um die tables.h und display.h vom GitHub abspeichern, einfach
Rechtsclick auf den "Raw" Button , dann Speichern unter auswählen und
Verzeichnis wählen -> schon ist es gespeichert ;-)
Hans H. schrieb:> Mein großer Wunsch wäre daß du die Bezeichner der Word-Positionen> korrigierst, daß diese mit den wirklichen Indizes übereinstimmen:>> Index Name> 1 WP_1_ES -> ok> 2 WP_2_IST -> ok> 4 WP_3_VIERTEL -> ok> 5 WP_6_EIN -> falsch> 6 WP_7_EINS -> falsch>> usw.
Ich ändere da selbstverständlich gerne was, aber sorry, im Augenblick
kapier' ich das nicht ganz.
Wenn ich im Bezeichner den "wirklichen Index" (also die Startposition in
der Queue) verwende, dann müsste das doch folgendermaßen lauten:
Index Name
Zeile 2 (Indizes auf den Wortanfang zeigend):
1 WP_1_ES -> Startposition 1
2 WP_4_IST -> Startposition 4
3 WP_8_VIERTEL -> Startposition 8 (statt 3!)
5 WP_15_EIN -> Startposition 15
6 WP_15_EINS -> Startposition 15
7 WP_16_IN -> Startposition 16
Zeile 2 (Indizes auf das Wortende zeigend):
8 WP_33_DREI -> Startposition 33
9 WP_32_EIN -> Startposition 32
10 WP_31_EINE -> Startposition 31
11 WP_30_EINER -> Startposition 30
12 WP_24_SECH -> Startposition 24
13 WP_25_SECHS -> Startposition 25
14 WP_22_SIEB -> Startposition 22
15 WP_20_SIEBEN -> Startposition 20
Ich steh' kräftig auf der Leitung, bitte hilf mir herunter!
Herbert P. schrieb:> Ich ändere da selbstverständlich gerne was, aber sorry, im Augenblick> kapier' ich das nicht ganz.
Das können wir auch einfacher haben:
Die Zahlen sind nur DB-Keys, das könnten ja auch UUIDs sein. Die DB-Keys
in der [text]-Spalte sorgen für Verwirrung (da Lücken drin sind) und
machen da m.E. auch keinen Sinn.
Früher waren das z.B. DREI*, DREI**, DREI*** usw.
In der DB reicht DREI_1, DREI_2, DREI_3 usw. in der [text]-Spalte, die
Index-Nummer kann der Code-Generator davor setzen, wenn die gewollt ist.
Hans H. schrieb:> Ansonsten ist die aktuelle Version von dir einwandfrei compilierbar.
Cool, dann können wir das ja auch so lange so lassen, bis der nächste
echte Fehler in der .accdb gefunden wird und erst dann ein .accdb-Update
machen.
PS:
Herbert P. schrieb:> Solltest Du mit "Hermann" mich gemeint haben:
Das erinnert mich an meinen Nachbarn Helmut, den ich schon zweimal
Hermann genannt habe. Der war schon ziemlich sauer. Sorry.
VG Torsten C. ➜ Für Neu-Eisteiger gibt es den
Beitrag "WortUhr/WordClock: Minutengenau, 24h, RGB – Für Neu-Einsteiger"
@Herbert
Ich dachte Du hast die Zahl vorangestellt um z.B. in tbl_hours gleich zu
wissen was hour_idx0..hour_idx6 bedeutet.
D.h. dort steht eine 17 -> 17_ELF ohne Nachschauen.
Alles andere ist auch nicht sinnvoll.
Aber es gibt durch die Lücken halt eine falsche Zuordnung Name ->
Position innerhalb der WordPos-Enumeration.
Im C-Code hat z.B. WP_17_ELF den numerischen Wert 15.
Oder wie Torsten schon schrieb, in der Datenbank am besten statt 1_ES
usw. wieder die Worte ohne vorangestellte Zahl nehmen. Bei
Mehrfachauftreten wieder hinten hochzählen, aber nicht mit * sondern
123.
Dann müsstest Du aber auch bei hour_idx und minute_idx mit den Namen
arbeiten, wenn das geht?
@Torsten: die WP_ Konstanten können ja dann auch mit 0 anfangen, dann
brauchen wir WP_DUMMY nicht mehr.
Bei der Ausgabe von tbl_hours und tbl_minutes dann entsprechend
korrigieren.
@Herbert:
Mit Index meine ich den numerischen Wert, den die WordPos-Enums vom
C-Compiler bekommen wenn sie der Reihe nach definiert werden, du meinst
da sicher was anderes.
im C-Code steht:
1
enum WordPos {
2
WP_DUMMY, // to have enum int value same as herberts index
3
WP_1_ES, // ES
4
WP_2_IST, // IST
5
WP_3_VIERTEL, // VIERTEL
6
WP_6_EIN, // EIN
7
WP_7_EINS,
8
...
9
};
Damit hat das enum WP_1_ES den numerischen Wert 1, und wenn der Name mit
dem numerischen Wert übereinstimmt ist das sehr hilfreich.
Ich hoffe alle Klarheiten beseitigt zu haben ;-)
Hans H. schrieb:> die WP_ Konstanten können ja dann auch mit 0 anfangen, dann> brauchen wir WP_DUMMY nicht mehr.>> Bei der Ausgabe von tbl_hours und tbl_minutes dann entsprechend> korrigieren.
Scheibenkleister. Jetzt verstehe ich das Problem erst.
Ich hätte generieren müssen:
1
enumWordPos{
2
WP_DUMMY,// to have enum int value same as herberts index
3
WP_1_ES,// ES
4
WP_2_IST,// IST
5
WP_3_VIERTEL,// VIERTEL
6
WP_6_EIN=4,// EIN
7
WP_7_EINS=5,// EINS
8
WP_8_IN=6,// IN
9
...
Ich muss jetzt Rommé spielen, aber ich versuche das nebenbei zu
korrigieren.
Der Groschen viel pfennigweise.
>WP_DUMMY,// to have enum int value same as herberts index
3
>WP_1_ES,// ES
4
>WP_2_IST,// IST
5
>WP_3_VIERTEL,// VIERTEL
6
>WP_6_EIN=4,// EIN
7
>WP_7_EINS=5,// EINS
8
>WP_8_IN=6,// IN
9
>...
Nee, damit erreichst Du gar nichts, denn der numerische Wert zB. von
WP_6_EIN ist ja numerisch vorher schon 4.
Das = ist nur nützlich wenn du möchtest das WP_6_EIN z.B. den
numerischen Wert 6 hat, dann schreibt man WP_6_EIN = 6.
Ich würde trotzdem stark begrüßen wenn in den Access-Tabellen nur mit
den Bezeichnern wie "ES", "EIN", "EIN2" gearbeitet wird, und Dein
Programm die enum - Werte (und die zugehörigen Indizes in tbl_hours,
tbl_minutes) lückenlos und von Null an erzeugt.
Hans H. schrieb:> Ich würde trotzdem stark begrüßen wenn in den Access-Tabellen nur mit> den Bezeichnern wie "ES", "EIN", "EIN2" gearbeitet wird
Aber dafür brauchen wir m.E. kein Extra-Update von Herbert .
Oder müssen die Enums jetzt feststehen, weil sie im übergeordneten
C-Code benötigt werden? Ich mach das jetzt so:
1
enumWordPos{
2
WP_0_1_ES,// ES
3
WP_1_2_IST,// IST
4
WP_2_3_VIERTEL,// VIERTEL
5
WP_3_6_EIN,// EIN
6
WP_4_7_EINS,// EINS
7
...
8
WP_7_10_EIN,...
Hans H. schrieb:> Es werden bei mir allerdings immer noch wirre Wortteile angeschaltet,> muß ich weiter Fehler suchen ;-(
Das wird mit der V.06 dann hoffentlich erledigt sein.
Hans H. schrieb:> Nee, damit erreichst Du gar nichts
Stimmt, wie auch immer. So wär's korrekt gewesen:
> WP_6_EIN = 6, // EIN> WP_7_EINS = 7, // EINS
Ich korrigiere das.
Wenn Herbert das in der .accdb ändert, wird der neue Code automatisch
lauten:
1
enumWordPos{
2
WP_0_ES,// ES
3
WP_1_IST,// IST
4
WP_2_VIERTEL,// VIERTEL
5
WP_3_EIN,// EIN
6
WP_4_EINS,// EINS
7
...
8
WP_7_EIN_1,
9
...
OK? Von Herbert kommt dann nur das "EIN", "EIN_1", "EIN_2" usw. Halt wie
früher mit den Sternen, nur C-kompatibel.
Die Display.h ist aktualisiert CodeGen v0.6.
In der tables.h habe ich auch die DB-Indizes genommen und keine eigenen
erzeugt. Ich schaue gleich mal, aber da ist vielleicht der gleiche Bug
drin.
PS: Dienstag bin ich mit meinem CooCox-Projekt voraussichtlich auch so
weit, dass ich den generierten Code selber testen kann.
Ich mache aber erstmal 16x16 mit zwei LED-Bildschirm-Kacheln und einem
Sandwich aus Overheadfolie - Butterbrotpapier - Overheadfolie.
Ich denke, wenn zwei Overheadfolien aus einem Laserdrucker sollten für
einen ersten Prototypen reichen.
Hans H. schrieb:> Ich dachte Du hast die Zahl vorangestellt um z.B. in tbl_hours gleich zu> wissen was hour_idx0..hour_idx6 bedeutet.> D.h. dort steht eine 17 -> 17_ELF ohne Nachschauen.
So ist das auch gedacht.
Hans H. schrieb:> Aber es gibt durch die Lücken halt eine falsche Zuordnung Name ->> Position innerhalb der WordPos-Enumeration.> Im C-Code hat z.B. WP_17_ELF den numerischen Wert 15.
Das verstehe ich nicht.
Ich verstehe überhaupt eigentlich nicht, warum Ihr die Wörter auswertet.
Ist doch eh schon alles numerisch in den Tabellen vordefiniert.
Der C-code braucht doch nur anhand der tbl_modes und der RTC den
entsprechenden (numerisch definierten) "Record" aus den Tabellen
tbl_hours und tbl_minutes holen, dort ist (numerisch) hinterlegt, welche
Wörter zu verwenden sind, und aus wievielen Wörtern (Indizes) die
Zeitanzeige besteht. Die Bezeichnungen aus der tbl_words benötigt Ihr
doch eigentlich überhaupt nicht, die sind ja eigentlich nur zum
Erstellen der Tabellen erforderlich gewesen?!
Mit den numerischen Index-Informationen aus der tbl_hours und
tbl_minutes geht die Software in die Worttabelle, holt sich dort
nacheinander jeweils die Startposition und Anzahl der zu aktivierenden
LEDs, und setzt sie unter Verwendung der berechneten Zwischenräume zu
einer 288 bits langen Queue zusammen, solange, bis die in die tbl_hours
bzw. tbl_minutes definierte Länge (=Anzahl der Wörter) erreicht ist.
Eine logische Verbindung zwischen Wort-Index und Inhalt war von mir
nicht erwünscht und wurde daher auch nicht angestrebt. Der Index ist als
reine Ordnungszahl gedacht, um den Datensatz aufzufinden, den er
repräsentiert.
Aber wie schon vorhin gesagt - ich stehe auf der Leitung, helft mir
bitte herunter!
Torsten C. schrieb:> aber da ist vielleicht der gleiche Bug> drin.
Ja, mehrere von der Sorte. :-(
tahbles.h in CodeGen v0.6 ist auch noch fehlerfaft.
Ich schmeisse nun alle DB-Keys raus und ersetze sie durch selbst
erzeugte Indizes. Dann kann in der Datenbank stehen was wolle und der
Index mit 1 beginnen. Ab CodeGen v0.7 wird der Index immer mit 0
beginnen, wie es hätte von Anfang an sein müssen.
OT: Erste Rommé-Runde: Nur 7 Punkte. :-)
Torsten C. schrieb:> Wenn Herbert das in der .accdb ändert, wird der neue Code automatisch> lauten:> enum WordPos {> WP_0_ES, // ES> WP_1_IST, // IST> WP_2_VIERTEL, // VIERTEL> WP_3_EIN, // EIN> WP_4_EINS, // EINS> ...> WP_7_EIN_1,> ...
Ich ändere das selbstverständlich gerne, aber es besteht zudem ab Access
2007/2010 auch die Möglichkeit, das selbst mit einem berechneten Feld zu
machen:
einfach in der Tabelle tbl_words neues Feld "Code" erstellen, als
"Berechnet" definieren, und dann folgende Formel eintragen:
"WP" & "_" & [word_ix] & "_" & [text_show]
ergibt einen String im oben vorgeschlagenen Format.
Gutes Gelingen!
P.S.: ob das bei Office 2003 auch so funktioniert, weiß ich leider nicht
mehr.
Torsten C. schrieb:> Ab CodeGen v0.7 wird der Index immer mit 0> beginnen, wie es hätte von Anfang an sein müssen.
Ich hab 0 deshalb nicht verwendet, um damit Fehler abfangen zu können. 0
= NULL, unerlaubter Zustand.
Herbert P. schrieb:> "WP" & "_" & [word_ix] & "_" & [text_show]
Die [word_ix]-Werte 4 und 5 gibt es in der
WC24h_18x16_V2_1134_5.Dez.2014 nicht. Macht nix. Ist eh blöd, DB-Keys zu
exportieren. Die nutzt man nur für Referenzen, nicht für Exporte. =>
Mein Fehler.
Herbert P. schrieb:> 0 = NULL, unerlaubter Zustand.
Für die DB auch 100% OK. Im µC unnötiger Speicherbedarf.
Hans H. schrieb:> Ich würde trotzdem stark begrüßen wenn in den Access-Tabellen nur mit> den Bezeichnern wie "ES", "EIN", "EIN2" gearbeitet wird,
Auch das lässt sich gerne machen, wenn Ihr Euch darauf festlegen könnt.
Torsten C. schrieb:> Die [word_ix]-Werte 4 und 5 gibt es in der> WC24h_18x16_V2_1134_5.Dez.2014 nicht.
Das ist dadurch entstanden, dass ich für "VIERTEL" - das ich
ursprünglich übersehen hatte - Platz brauchte und deshalb die
ursprüngich mit 4 und 5 indizierten Wörter "WIRD" und "SIND" ersatzlos
streichen musste
Herbert P. schrieb:> Das ist dadurch entstanden, dass
wodurch auch immer, passt, kann so bleiben.
Herbert P. schrieb:> wenn Ihr Euch darauf festlegen könnt
auch dafür, ist aber nicht dringend, nur "schöner".
Um zukünftige Portationen und Kompilationen weitgehend fehlerfrei
abwickeln zu können, möchte ich mit den Daten der accdb gerne
Datenkonsistenz herstellen. Bitte daher um Bekanntgabe der
erforderlichen Änderungen in der accdb.
Herbert P. schrieb:> Das verstehe ich nicht.> Ich verstehe überhaupt eigentlich nicht, warum Ihr die Wörter auswertet.> Ist doch eh schon alles numerisch in den Tabellen vordefiniert.
Die Wörter werten ich nicht aus, aber wenn sie schon einen Bezug zum
DB-Index im Namen haben sollte der stimmen.
> Eine logische Verbindung zwischen Wort-Index und Inhalt war von mir> nicht erwünscht und wurde daher auch nicht angestrebt. Der Index ist als> reine Ordnungszahl gedacht, um den Datensatz aufzufinden, den er> repräsentiert.>
Wie Torsten auch schon bemerkte, für den Datenbankler ist ein Index eine
Zahl, die auch mal Lücken haben kann und mit 1 beginnt ;-)
Der C-ler will als Index mit 0 anfangen und nie nie Lücken drin haben.
Warum:
1
const char* lustigesArray[]= {
2
"Heute",
3
"Morgen"
4
};
Dann ist ein Index auf ein Element des Arrays die Zahl 0 oder 1.
Wenn der Index so definiert wäre daß 1 für Heute und 3 für Morgen gilt,
müßte man das Array so definieren:
1
const char* lustigesArray[]= {
2
NULL, // oder "invalid" oder ""...
3
"Heute",
4
NULL, // oder "invalid" oder ""...
5
"Morgen"
6
};
Und das gefällt keinem C-Programmierer ;-)
Als Fazit hat Torsten schon bemerkt, du nutzt deine DB-Keys und der
C-Export muß dann das richtige draus machen.
Herbert P. schrieb:> Um zukünftige Portationen und Kompilationen weitgehend fehlerfrei> abwickeln zu können, möchte ich mit den Daten der accdb gerne> Datenkonsistenz herstellen. Bitte daher um Bekanntgabe der> erforderlichen Änderungen in der accdb.
Nur EINS, EINS_1, EINS_2 usw.
Für die Konsistenz habe ich die DB-Indizes in den Kommentaren, hier
z.B.:
Torsten C. schrieb:> Nur EINS, EINS_1, EINS_2 usw.
Ich würde gern bei mehrfach vorkommenden Wörtern schon beim ersten Wort
mit Index _1 beginnen, wäre das in Ordnung?
Torsten C. schrieb:> Für die Konsistenz habe ich die DB-Indizes in den Kommentaren, hier> z.B.:> static const struct MinuteDisplay> tbl_minutes[MinuteModesCount][MinuteCount]= {> { // 0: Mode 1 ES IST MM NACH
OKI, SUPER!
Herbert P. schrieb:> Was soll ich bei den 4 LEDs unten als Text eintragen?
[text] ok, aber "LED_1" oder "LED1" statt "74_LED1"
[text_show] . oder ●
Für µc wandel ich das eine in das andere um, für den PC (C#-DMU) das
andere in das eine. Wandeln muss ich so und so.
Torsten C. schrieb:> [text] ok, aber "LED_1" oder "LED1" statt "74_LED1">> [text_show] . oder ●
Ich hab das alte Feld "text" in "text_indexed" umbenannt und ein neues
Feld "text" mit den Inhalten wie oben besprochen eingefügt. Die LEDs
habe ich mit ._1 bis ._4 bezeichnet.
Die aktualisierte .accdb sollte gleich in deinem Posteingang sein. Das
Mail mit der .mdb für Hans schick ich gleich an ihn weg.
Torsten C. schrieb:> Ich muss jetzt Rommé spielen, aber ich versuche das nebenbei zu> korrigieren.
So, war beim Rommé auf dem letzten Platz. :-( Heute Abend schaffe ich
die Korrektur nicht mehr. Für die tables.h muss ich doch einiges
umbauen, um komplett unabhängig von den DB-Indizes zu sein. Bei
display.h war das einfacher.
Herbert P. schrieb:> Die aktualisierte .accdb sollte gleich in deinem Posteingang sein
OK, Morgen aktualisiere ich dann alles mit der neuen .accdb und CodeGen
v0.7.
Gute N8.
VG Torsten C. ➜ Für Neu-Eisteiger gibt es den
Beitrag "WortUhr/WordClock: Minutengenau, 24h, RGB – Für Neu-Einsteiger"
Ich bin gerade am verzweifeln. Ich baue gerade einen Balkon nach dem
anderen in die Import-Software, weil die "Datenbank" eher ein
umgewandeltes Excel-Workbook ohne referenzielle Integrität ist. Alles,
was ich noch aus der Vorlesung "Datenmodellierung" weiss, stört mich im
Moment daran, 'ne schnelle pragmatische Lösung zu finden, um die DB-Keys
für die Code-Generierung zu ignorieren und die DB-Keys trotzdem als
Referenz, in den Kommentaren und für Anker im Generator der
"Horror-Seiten" zu benutzen. Ich muss erstmal drüber schlafen.
PS: Mir fällt gerade was ein, probiere ich morgen (inzwischen heute).
VG Torsten C. ➜ Für Neu-Eisteiger gibt es den
Beitrag "WortUhr/WordClock: Minutengenau, 24h, RGB – Für Neu-Einsteiger"
Herbert P. schrieb:> es spricht nichts dagegen, die DB-Keys so abzuändern, dass sie für die> Code-Umwandlung praktikabel sind.
Dann müsste ich viele Änderungen wieder rückgängig machen und hätte
einen "nicht robusten" Import und einen "nicht robusten" Code-Generator.
Ich möchte mich aber auf meine Software verlassen können.
Wenn ich das so machen würde, gäbe es immer "Mecker" von mir, wenn mein
Tool die DB nicht "schluckt". Das können wir so machen, aber dann
dürfen keine Indizes übersprungen werden und alle Indizes müssen mit
Null beginnen.
Erstens möchte ich Dir das nicht antun und zweitens kann man das mit der
akuellen Datenmodellierung auch nicht durch referenzielle Integrität
sicher stellen. Die Minuten- und Stunden- Modi sind aktuell redundant
in den Minuten- und Stunden-Tabellen. Es gibt keine Minuten-Modi-Tabelle
und keine Stunden-Modi-Tabelle. Ohne diese zusätzlichen zwei Tabellen
wird es nie referenzielle Integrität geben. Wenn wir das jetzt umstellen
würden, würden wir noch ein paar Tage auf abgesichert gültigen
tables.h-Code warten.
Glaub mir: Einfacher und sicherer ist es, die DB-Keys nicht zu benutzen
und die Import-Software entsprechend robust zu machen. DB-Keys sind
keine Daten. DB-Keys könnten (wie gesagt) theoretisch auch UUIDs sein.
Das muss nach "Lehrmeinung" egal sein.
Falls die DB-Keys zufällig den Indizes oder den den (Indizes+1) in den
Arrays entsprechen, ist das OK, aber das ist m.E "Luxus" und darf
keine_Voraussetzung für korrekten C-Code sein.
PS: Aber falls es unser Team so will, bin ich auch zu unrobusten
Schandtaten entgegen der "Lehrmeinung" bereit.
Erläuterung: Solange "referenzielle Integrität" und lückenfreie Indizes
nicht sichergestellt sind, muss ich den Code-Generator immer darauf
vorbereiten, dass ein Index übersprungen wird: Entweder weil der Index
im Original bereits einen "Sprung" hat, oder weil ich beim Import einen
Datensatz wegen der Verletzung der referenziellen Integrität
überspringen muss. Peng!
Da "lückenfreie Indizes" nicht durch ACCESS sichergestellt werden
können, hilft m.E. alles nix! "Referenzielle Integrität" ist halt nur
"die halbe Miete".
VG Torsten C. ➜ Für Neu-Eisteiger gibt es den
Beitrag "WortUhr/WordClock: Minutengenau, 24h, RGB – Für Neu-Einsteiger"
Vorschlag:
Warum ergänzt man nicht die tbl_words mit Dummies für die fehlenden
Indizes? Es ist ja nicht gesagt, dass jedes Wort aus der tbl_words auch
tatsächlich Verwendung finden muss. Das stellt zwar keine referenzielle
Integrität her, aber die Indizes wären damit lückenlos.
Referentielle Integrität: ich hab die Tabellen so erstellt, dass sie für
mich einigermaßen leicht und übersichtlich editierbar waren. Dass es
dadurch zu Redundanzen bei den tbl_hours und tbl_minutes kam, habe ich
als "lässliche Sünde" betrachtet, da ja die Anzahl der Datensätze
überschaubar ist und Fehler leicht manuell ausgebessert werden können.
Dass sich dadurch Probleme bei der Portierung ergeben würden, war mir
nicht bewusst. Wirklich sorry :-(
Herbert P. schrieb:> Warum ergänzt man nicht die tbl_words mit Dummies für die fehlenden> Indizes? Es ist ja nicht gesagt, dass jedes Wort aus der tbl_words auch> tatsächlich Verwendung finden muss. Das stellt zwar keine referenzielle> Integrität her, aber die Indizes wären damit lückenlos.
Genau so habe ich das am Freitag auch gemacht, als ich die Lücke
entdeckte. Einfach 2 Dummies definiert. Dann passte wieder alles.
Ist die einfachste Methode.
Frank M. schrieb:> Herbert P. schrieb:>> Warum ergänzt man nicht die tbl_words mit Dummies für die fehlenden>> Indizes? Es ist ja nicht gesagt, dass jedes Wort aus der tbl_words auch>> tatsächlich Verwendung finden muss. Das stellt zwar keine referenzielle>> Integrität her, aber die Indizes wären damit lückenlos.>> Genau so habe ich das am Freitag auch gemacht, als ich die Lücke> entdeckte. Einfach 2 Dummies definiert. Dann passte wieder alles.>> Ist die einfachste Methode.
Und wo holpert's noch?
Mit obigen Änderungen läuft es, wie man sich hier überzeugen kann:
http://uclock.de/
Dummies habe ich wie folgt definiert:
1
enumWordPos{
2
WP_0_1_ES,// ES
3
WP_1_2_IST,// IST
4
WP_2_3_VIERTEL,// VIERTEL
5
WP_DUMMY1,// fm Dummy1
6
WP_DUMMY2,// fm Dummy2
7
WP_3_6_EIN,// EIN
8
WP_4_7_EINS,// EINS
und:
1
staticconststructWordIlluillumination[1][WpCount]={{// dummy-dimension for variant with capital ß
2
{0,0,2},// WP_0_1_ES = "ES"
3
{0,3,3},// WP_1_2_IST = "IST"
4
{0,7,7},// WP_2_3_VIERTEL = "VIERTEL"
5
{0,0,0},// fm Dummy1
6
{0,0,0},// fm Dummy2
7
{0,14,3},// WP_3_6_EIN = "EIN"
8
{0,14,4},// WP_4_7_EINS = "EINS"
9
{0,15,2},// WP_5_8_IN = "IN"
Beide Änderungen in display.h, jeweils 2 Dummies eingefügt.
@Torsten:
Den Sprung von 3 nach 6 solltest Du im Codegenerator ja abfangen können.
In so einem Fall solltest Du einfach Dummies einfügen, wenn der Sprung >
1 ist. Warum kompliziert, wenn es auch einfach geht ;-)
Herbert P. schrieb:> Dass sich dadurch Probleme bei der Portierung ergeben würden, war mir> nicht bewusst. Wirklich sorry :-(
Mach Dir keinen Kopf. Das kriege ich auch so hin. Das Problem ist nur,
ich bin im Moment "unter Wasser". Eine Korrektur der tables.h kann etwas
dauern.
Frank M. schrieb:> Ich verstehe nicht, warum Torsten nicht ein> einfaches leeres main.c … angelegt hat, um wenigstens die> Syntaxfehler selbst zu sehen.
Zeitdruck. Ist der selbst gemacht, oder habe ich bis Mittwoch Zeit?
Frank M. schrieb:> Den Sprung von 3 nach 6 solltest Du im Codegenerator ja abfangen können.> In so einem Fall solltest Du einfach Dummies einfügen, wenn der Sprung >> 1 ist. Warum kompliziert, wenn es auch einfach geht ;-)
"Weils besser ist". ;-) Jetzt ändere ich das nicht wieder zurück. Bis
auf die Kommas ist die Display.h ja nun wohl fertig. Oder? OK?
Torsten C. schrieb:> "Weils besser ist". ;-) Jetzt ändere ich das nicht wieder zurück.
Was änderst Du nicht wieder zurück? Ich musste jedenfalls die Dummies
heute morgen noch einfügen mit dem aktuellen Stand von tables.h und
display.h. Da ist der Bug also noch drin.
> Bis auf die Kommas ist die Display.h ja nun wohl fertig. Oder? OK?
Wenn das Lückenproblem auch gefixt ist, ja.
Das einzige, was ich noch unschön finde, ist, dass die C-Konstanten
nicht konsequent in Großbuchstaben geschrieben werden, wie das in C
Konvention ist.
Ausserdem finde ich solche Namensgebung irritierend:
1
#define DisplayX 18
Denn das sieht eher wie eine Positionsangabe aus. Tatsächlich ist es
aber die Angabe einer Anzahl. Und das ist nur ein Beispiel.
Da sollten wir uns vielleicht auf geeignetere Namen einigen. Ich hatte
es in meiner ersten Version WC_COLUMNS (bzw. WC_ROWS) genannt.
P.S.
Doch, einen Wunsch hätte ich noch: Die Zahlwörter-Strings fehlen in
display.h. Dadurch kann ich bei http://uclock.de die aktuelle Uhrzeit
nicht mehr als String ausgeben, also:
ES IST SIEBEN UHR EIN UND FÜNFZIG
Das wäre zum Debuggen noch interessant, bei der endgültigen Uhr brauchen
wir es sowieso nicht mehr.
@Herbert: Noch ein Fehler:
http://uclock.de/?x=6&h=18&m=15
SIEB -> SIEBEN
Komisch, ich hätte in diesem Modus eigentlich eher
ES IST VIERTEL NACH SECHS (Wessi)
und nicht
ES IST VIERTEL SIEBEN (Ossi und Teil des Schwabenlandes)
erwartet.
Vielleicht sollten wir uns da nochmal prinzipiell über die deutschen
Sprachgewohnheiten unterhalten?
Ich schreibe es nochmal in Kurzform:
1
Wessi Rhein-Ruhr Ossi Schwaben
2
VIERTEL NACH ACHT VIERTEL NACH ACHT VIERTEL NEUN VIERTEL NEUN
3
ZEHN VOR HALB NEUN ZWANZIG NACH ACHT ZEHN VOR HALB NEUN ZWANZIG NACH ACHT
4
ZEHN NACH HALB NEUN ZWANZIG VOR NEUN ZEHN VOR HALB NEUN ZWANZIG VOR ACHT
5
VIERTEL VOR NEUN VIERTEL VOR NEUN DREIVIERTEL NEUN DREIVIERTEL NEUN
usw.
(Schwaben benutzen also einen Mischmasch aus Rhein-Ruhr und Ossi)
In welchen Modes spiegeln sich diese regions-abhängigen Varianten (die
ich schon vor einigen Wochen hier systematisch aufgeschrieben habe)
wider?
@FRANK
Sorry, ich kann Deine Fehler in meiner db nicht finden.
Aber einen anderen Fehler habe ich gefunden:
tbl_minutes, Mode 9:
die Angabe der Stringlängen fehlt
Ich werd meine Letztversion (inkl. Dummies bei der tbl_words) noch heute
hochladen, aber bitte etwas Geduld (voraussichtlich erst Mittag wieder
Zeit).
Frank M. schrieb:> Vielleicht sollten wir uns da nochmal prinzipiell über die deutschen> Sprachgewohnheiten unterhalten?>> Ich schreibe es nochmal in Kurzform:Wessi Rhein-Ruhr> Ossi Schwaben> VIERTEL NACH ACHT VIERTEL NACH ACHT VIERTEL NEUN VIERTEL NEUN> ZEHN VOR HALB NEUN ZWANZIG NACH ACHT ZEHN VOR HALB NEUN ZWANZIG NACH> ACHT> ZEHN NACH HALB NEUN ZWANZIG VOR NEUN ZEHN VOR HALB NEUN ZWANZIG VOR> ACHT> VIERTEL VOR NEUN VIERTEL VOR NEUN DREIVIERTEL NEUN DREIVIERTEL> NEUN>> usw.
Danke, gute Anregung!
Frank M. schrieb:> In welchen Modes spiegeln sich diese regions-abhängigen Varianten (die> ich schon vor einigen Wochen hier systematisch aufgeschrieben habe)> wider?
In den Modi 7 bis 11. Deine systematische Aufzeichnung habe leider
übersehen, auf sowas hätte ich nämlich gewartet bzw. gehofft :-(
Herbert P. schrieb:> In den Modi 7 bis 11. Deine systematische Aufzeichnung habe leider> übersehen, auf sowas hätte ich nämlich gewartet bzw. gehofft :-(
Eine systematische Liste hatte ich in diesem Thread hier gepostet:
Beitrag "Re: Minutengenaue 24 Stunden-Wortuhr - wer will mitbauen?"
(Da fehlte aber noch der Schwabenmodus)
Musst Du übersehen haben ;-)
Frank M. schrieb:> Musst Du übersehen haben ;-)
Ja, hab ich übersehen, sorry :-(
Ich werde die Regionalmodi noch heute entsprechend modifizieren. Bitte
beachtet bei Eurer Portierung, dass heute noch ein Update der db kommt!
Herbert P. schrieb:> Muss das Update der db leider auf morgen verschieben, sorry :-(
Wirklich nicht tragisch. Das ist nur unser Hobby... das muss auch mal
warten.
Uhrzeitanzeige läuft nun auf dem STM32F4-Discovery auch auf den
WS2812-Stripes.
Damit ist nun umgesetzt:
- Anlernen einer IR-Fernbedienung (FB)
- Stellen der Uhrzeit per FB
- Anzeige der Uhrzeit auf WS2812-Stripes
Optional zum Debuggen/Testen:
- MCURSES-Monitor im Terminal;
- zur Anzeige der Uhrzeit als 18x16 Text-Matrix
- Stellen der Uhrzeit
Ich werde jetzt das CooCox-Projekt noch etwas rund machen und dann
veröffentlichen. Vielleicht noch heute abend. Ich würde mich dann
freuen, wenn sich einige bereit erklären, an der Code-Entwicklung
mitzuwirken.
Was noch folgt in den nächsten Tagen:
- Sanftes Überblenden der Uhrzeiten auf den LEDs
- Farbprogramme (Wählen der Farbe, optional automatisches Wechseln)
- Einstellen des Anzeigemodus ("Sprache") per FB
- Speichern aller Einstellungen in externem EEPROM
- Anbindung der DS3231-RTC
Weitere Ideen?
Gruß,
Frank
Frank M. schrieb:> Weitere Ideen?
- Silvestermodus: Countdown zum Jahreswechsel ab 23:30
mit Sekunden-Countdown ab 23:59 und "Silvester-Feuerwerk" um 00:00
- (Abschaltbarer) Stundenschlag von Original Pendeluhr?
- echtes Pendel mit magnetomechanischer Metronom-Aktivierung
und "Ticken"?
Frage zu den Regionalmodi:
genügt für jede Region ein Modus "ES IST MM NACH/VOR ..."
oder wird auch ein Modus "ES IST MM MINUTEN NACH/ VOR ..." gewünscht?
Herbert P. schrieb:> Frage zu den Regionalmodi:>> genügt für jede Region ein Modus "ES IST MM NACH/VOR ...">> oder wird auch ein Modus "ES IST MM MINUTEN NACH/ VOR ..." gewünscht?
Machs nicht zu umfangreich, sonst steigt da nachher keiner mehr durch.
Lass ersteres weg und nimm nur zweiteres, also "ES IST MM MINUTEN
NACH/ VOR ...". Genau so lesen die Moderatoren im Radio jeden Morgen
die Uhrzeit vor. ;-)
Frank M. schrieb:> Machs nicht zu umfangreich, sonst steigt da nachher keiner mehr durch.> Lass ersteres weg und nimm nur zweiteres, also "ES IST MM MINUTEN> NACH/ VOR ...". Genau so lesen die Moderatoren im Radio jeden Morgen> die Uhrzeit vor. ;-)
Oki!
Übrigens habe ich vorhin mein Lob lediglich Dich betreffend
ausgesprochen, Torstens Löwenanteil am Gelingen darf auch nicht
unerwähnt bleiben!
EIN HOCH AUF EUCH BEIDE, TORSTEN UND FRANK!
UND EIN GROSSES (GROßES) LOB AN ALLE, DIE BISHER SO FLEISSIG MITGEWIRKT
HABEN!
Herbert P. schrieb:> Torstens Löwenanteil am Gelingen darf auch nicht> unerwähnt bleiben!
Allerdings. Die tables.h und display.h funktionieren vorzüglich :-)
> UND EIN GROSSES (GROßES) LOB AN ALLE, DIE BISHER SO FLEISSIG MITGEWIRKT> HABEN!
Dem kann ich mich nur anschließen.
Wie sollen bei den Regionalmodi die Minuten zwischen :15 und :45
angezeigt werden?
ES IST EIN UHR
.......
ES IST FÜNF MINUTEN NACH EINS
.......
ES IST ZEHN MINUTEN NACH EINS
.......
ES IST VIERTEL NACH EINS / VIERTEL ZWEI
....... SECH ZEHN MINUTEN NACH EINS
....... SIEB ZEHN MINUTEN NACH EINS
....... ACHT ZEHN MINUTEN NACH EINS
....... NEUN ZEHN MINUTEN NACH EINS
ES IST ZWANZIG MINUTEN NACH EINS / ZEHN MINUTEN VOR HALB ZWEI
....... EIN UND ZWANZIG MINUTEN NACH EINS/ NEUN MINUTEN VOR HALB ZWEI
....... ZWEI UND ZWANZIG MINUTEN NACH EINS/ ACHT MINUTEN VOR HALB ZWEI
....... DREI UND ZWANZIG MINUTEN NACH EINS/ SIEBEN MINUTEN VOR HALB ZWEI
....... VIER UND ZWANZIG MINUTEN NACH EINS/ SECHS MINUTEN VOR HALB ZWEI
....... FÜNF UND ZWANZIG MINUTEN NACH EINS/ FÜNF MINUTEN VOR HALB ZWEI
....... VIER MINUTEN VOR HALB ZWEI
....... DREI MINUTEN VOR HALB ZWEI
....... ZWEI MINUTEN VOR HALB ZWEI
....... EINE MINUTE VOR HALB ZWEI
ES IST HALB ZWEI
....... EINE MINUTE NACH HALB ZWEI
....... ZWEI MINUTEN NACH HALB ZWEI
....... DREI MINUTEN NACH HALB ZWEI
....... VIER MINUTEN NACH HALB ZWEI
ES IST FÜNF MINUTEN NACH HALB ZWEI
....... SECHS MINUTEN NACH HALB ZWEI
....... SIEBEN MINUTEN NACH HALB ZWEI
....... ACHT MINUTEN NACH HALB ZWEI
....... NEUN MINUTEN NACH HALB ZWEI
ES IST ZEHN MINUTEN NACH HALB ZWEI / ZWANZIG MINUTEN VOR ZWEI
........NEUN ZEHN MINUTEN VOR ZWEI/ VIER MINUTEN VOR DREIVIERTEL ZWEI
........ACHT ZEHN MINUTEN VOR ZWEI/ DREI MINUTEN VOR DREIVIERTEL ZWEI
........SIEB ZEHN MINUTEN VOR ZWEI/ ZWEI MINUTEN VOR DREIVIERTEL ZWEI
........SECH ZEHN MINUTEN VOR ZWEI/ EINE MINUTE VOR DREIVIERTEL ZWEI
ES IST VIERTEL VOR ZWEI / DREIVIERTEL ZWEI
....... VIER ZEHN MINUTEN VOR ZWEI
....... DREI ZEHN MINUTEN VOR ZWEI
....... ZWÖLF MINUTEN VOR ZWEI
....... ELF MINUTEN VOR ZWEI
....... ZEHN MINUTEN VOR ZWEI
....... NEUN MINUTEN VOR ZWEI
....... ACHT MINUTEN VOR ZWEI
....... SIEBEN MINUTEN VOR ZWEI
....... SECHS MINUTEN VOR ZWEI
ES IST FÜNF MINUTEN VOR ZWEI
....... VIER MINUTEN VOR ZWEI
....... DREI MINUTEN VOR ZWEI
....... ZWEI MINUTEN VOR ZWEI
....... EINE MINUTE VOR ZWEI
Herbert P. schrieb:> Wie sollen bei den Regionalmodi die Minuten zwischen :15 und :45> angezeigt werden?
Hatte ich eigentlich vor ein paar Wochen geschrieben, als ich für alle
60 Minuten einen Satz aufschrieb, siehe:
Beitrag "Re: Minutengenaue 24 Stunden-Wortuhr - wer will mitbauen?"
Also:
> ES IST ZWANZIG MINUTEN NACH EINS / *ZEHN MINUTEN VOR HALB ZWEI*
Korrekt.
> ....... EIN UND ZWANZIG MINUTEN NACH EINS/ NEUN MINUTEN VOR HALB ZWEI> ....... ZWEI UND ZWANZIG MINUTEN NACH EINS/ ACHT MINUTEN VOR HALB ZWEI> ....... DREI UND ZWANZIG MINUTEN NACH EINS/ SIEBEN MINUTEN VOR HALB ZWEI> ....... VIER UND ZWANZIG MINUTEN NACH EINS/ SECHS MINUTEN VOR HALB ZWEI> ....... FÜNF UND ZWANZIG MINUTEN NACH EINS/ FÜNF MINUTEN VOR HALB ZWEI
NEUN MINUTEN VOR HALB ZWEI
....
EINE MINUTE VOR HALB ZWEI
HALB ZWEI
EINE MINUTE NACH HALB ZWEI
...
NEUN MINUTEN NACH HALB ZWEI
> ES IST ZEHN MINUTEN NACH HALB ZWEI / *ZWANZIG MINUTEN VOR ZWEI*
Korrekt.
> ........NEUN ZEHN MINUTEN VOR ZWEI/ VIER MINUTEN VOR DREIVIERTEL ZWEI> ........ACHT ZEHN MINUTEN VOR ZWEI/ DREI MINUTEN VOR DREIVIERTEL ZWEI> ........SIEB ZEHN MINUTEN VOR ZWEI/ ZWEI MINUTEN VOR DREIVIERTEL ZWEI> ........SECH ZEHN MINUTEN VOR ZWEI/ EINE MINUTE VOR DREIVIERTEL ZWEI
NEUN ZEHN MINUTEN VOR ZWEI
...
ZWÖLF MINUTEN VOR ZWEI
ELF MINUTEN VOR ZWEI
ZEHN MINUTEN VOR ZWEI
...
EINE MINUTE VOR ZWEI
P.S.
"VIER MINUTEN VOR DREIVIERTEL ZWEI" hört sich echt grausig an. Das
können wir uns für den "1. April-Modus" aufheben ;-)
Frank M. schrieb:> P.S.> "VIER MINUTEN VOR DREIVIERTEL ZWEI" hört sich echt grausig an. Das> können wir uns für den "1. April-Modus" aufheben ;-)
ist auch Unfug, das wäre in meinem WB Sprachgebrauch elf nach halb zwei
nicht Ossi nicht Schwabe
Joachim B. schrieb:> ist auch Unfug, das wäre in meinem WB Sprachgebrauch elf nach halb zwei
Ja, ist Unfug, aber abklären wollte ich's trotzdem. Die Minutentabelle
hat über 600 Datensätze, da kann ich beim Editieren oft nicht einmal
mehr ein X von einem U unterscheiden ;-)
So, die aktualisierten Dateien sind hochgeladen, die alten Fehler sind
durch neue ersetzt .....na hoffentlich nicht! Irgendwann muss Murphy ja
auch einmal Ruhe geben ;-)
Version 0.3 ist online. Nun kann man per IR-Fernbedienung auch die
Helligkeiten für die LEDs einstellen - nämlich für jede Farbe getrennt.
Damit kann man sich nun jede gewünschte Farbe "mischen".
Die Helligkeitssteuerung ist an die logarithmische Empfindlichkeit des
menschlichen Auges angepasst.
Viel Spaß,
Frank
@Frank:
klingt ja super!
------------------------
Wird es für den STM32 auch ein PCB geben? Das Discovery Modul ist in der
Originalversion zu hoch.
Wie siehts mit dem Atmel 1284P-PU aus? Arbeitet da jemand dran, oder
kommt der in die Bastelkiste?
Herbert P. schrieb:> Wird es für den STM32 auch ein PCB geben? Das Discovery Modul ist in der> Originalversion zu hoch.
Mal sehen. Ich traue es mir im Moment noch nicht so richtig zu, habe
bisher nur PCBs für AVRs zusammengezimmert. Da muss ich mich noch ein
Weilchen einlesen, um zu verstehen, was man mindestens rund um den STM32
an Peripherie braucht, damit er läuft. Erstmal ist das Disco-Board ein
hervorragendes Entwicklungsboard. Für die Uhr im Endstadium ist das Ding
natürlich Overkill. Man kann sich ja nochmal umschauen, was es sonst
noch für kleinere Boards gibt. Torsten hatte da ja schon mal Vorschläge
gemacht.
Alternative wäre ein extra Gehäuse für das Disco-Board, wo man auch das
nötige fette Netzteil für die 288 LEDs mit einbauen könnte. Dann braucht
man auf dem Weg zur Anzeige nur ein dreiadriges Kabel, was auch nicht
dicker ist als ein Netzwerkkabel.
> Wie siehts mit dem Atmel 1284P-PU aus? Arbeitet da jemand dran, oder> kommt der in die Bastelkiste?
Wie ich schon sagte: da die WS2812-Geschichte auf einem AVR nicht ganz
ohne ist, ohne ihn zu 100% zuzuballern, hat der für mich eigentlich
keine Priorität. Da können sich gerne andere dran versuchen. Die von mir
zur Verfügung gestellten STM32-Sourcen lassen sich zum Teil auch auf den
ATmega portieren - jedenfalls, was die nicht-hardware spezifischen Teile
betrifft.
Herbert P. schrieb:> Wie siehts mit dem Atmel 1284P-PU aus? Arbeitet da jemand dran, oder> kommt der in die Bastelkiste?
bin doch bei, meine Platinen sind bestellt und in der Auslieferung, das
Muster mit DIL 40 läuft nun in der Arduino IDE bin noch am zu Ende
verdrahten der Ports und dann mache ich mit der SW weiter, DCF77
Empfänger von ELV sind angekommen.
Plan:
m1284p DIL fertig verdrahten,
an den 117 LED Stripe Ribba 25 anbringen,
DCF77 zur Mitarbeit bewegen
ESP8266 ins wlan NTP
16 x 16 Matrix anschliessen
ins Ribba 50 x 50 bauen
Herbert P. schrieb:> Welche Platinen hast Du denn bestellt?
schon vergessen? hatte doch Links eingestellt.....
http://adventuresinarduinoland.blogspot.de/2011/09/arduino-breadboard-helpers.htmlhttps://github.com/JChristensen/mini1284
sogar jeden Schritt hier dokumentiert
Your boards are on the November 19th 2 layer prototype panel.
Once we fill up the panel with other orders it will be sent off to the
fabricator
We've sent the panel containing your boards to the fabricator. We expect
to get them back around November 29th.
We've received the panel containing your boards from the fabricator. We
expect to have the boards depanelled and shipped within 48 hours.
Your Mighty Mini 1284P copy boards have been depanelized and shipped to
you via USPS Standard First Class Mail.
Order Details
Ordered on November 18th 2014.
Paid on November 18th 2014 via paypal.
Shipped on November 26th 2014 via USPS Standard First Class Mail
Items Mighty Mini 1284P copy
2.55x0.82 inch (64.77x20.83 mm) 2 layer board.
Your boards have been shipped.
Frank M. schrieb:> Der µC ist zwar nicht ganz so fett, aber> ausreichend.
Weiß man schon, wieviel Speicher beenötigt wird?
Und gibt es außer mir noch jemanden, der sich für eine Variante der
WordClock ohne Farbspiele, nur mit weißen LEDs interessiert?
Herbert P. schrieb:> Und gibt es außer mir noch jemanden, der sich für eine Variante der> WordClock ohne Farbspiele, nur mit weißen LEDs interessiert?
kann ich mir kaum vorstellen, jeder hat ein anderes Weissempfinden
welches Weiss einem genehm ist, das wirst du schon feststellen wenn du
verschiedene weisse LEDs probierst und was dir gefällt muss anderen
nicht gefallen, ich denke versuche erst mal deinen Weisston per RGB LED
zu finden, die hast du ja, erst wenn du damit unzufrieden sein solltest,
dann kannst du ja anfangen mit den verschiedensten weissen LEDs zu
probieren.
Ich war jedenfalls enttäuscht von den warmweissen chinesischen
Downlights die ich als Flurbeleuchtung bestellt hatte, 100€ für den
Elektronik Schrott.
Herbert P. schrieb:> Weiß man schon, wieviel Speicher beenötigt wird?
Im Moment sind es:
text data bss dec hex filename
59004 2660 22068 83732 14714 wclock24h.elf
Also ca. 60K Flash und 24KB RAM. Letzteres kann man aber noch
optimieren, wenn man diverse Strukturen mit _packed_ versieht.
Ausserdem fällt der MCURSES-Teil im Endstadium weg. Der ist ja jetzt
nur Entwicklungshilfe.
> Und gibt es außer mir noch jemanden, der sich für eine Variante der> WordClock ohne Farbspiele, nur mit weißen LEDs interessiert?
Ich muss mal was zu den WS2812-LEDs sagen:
Ich bin ziemlich enttäuscht von den Dingern. Ich benutze zwar schon
lange RGB-LEDs, aber nie mit einem integrierten Controller. Diese LEDs
bieten nur 255 Steps (die nicht ans menschliche Auge angepasst sind) pro
Farbe. Ausserdem machen die Dinger offenbar nur eine 8-Bit-PWM. Gerade
in den unteren Helligkeitsstufen sind deutlich erkennbare Sprünge zu
sehen.
Ausserdem ergeben die LEDs in den unteren Helligkeitsstufen bei gleichen
Helligkeitswerten von R, G und B kein richtiges Weiß. Gerade Blau
übersteigt die beiden anderen Farben bei weitem, d.h. das Weiß hat einen
deutlichen Blaustich. Erst bei größeren Helligkeiten relativiert sich
das wieder.
Vermutlich muss man da noch einen "Weißabgleich" machen, um die Dinger
wenigstens näher an einen Weißton zu bringen. Das heisst, eine
Korrekturtabelle muss her :-(
Meine selbstgebauten LED-Streifen
Beitrag "Equinox-Uhr mit 60 ATtinys"
welche pro LED jeweils einen ATTiny45 benutzen, verwenden 3 x 12-Bit-PWM
mit insgesamt 3 x 4096 Helligkeitsstufen. Da sind die Farbübergänge
butterweich. Leider wird das bei dem wclock24h-Projekt mit 288 ATtinys
ziemlich teuer ;-)
Frank M. schrieb:> Vermutlich muss man da noch einen "Weißabgleich" machen, um die Dinger> wenigstens näher an einen Weißton zu bringen. Das heisst, eine> Korrekturtabelle muss her :-(
Das hatte ich befürchtet. Lt. Joachim ist allerdings ein Weißabgleich
angeblich nicht erforderlich. Naja, wir werden ja sehen....
Herbert P. schrieb:> @Joachim:>> die Arduino "Breadboard Helpers" sind ja genial. Gibts die PCBs irgendwo> zu kaufen (oder sollte ich das übersehen haben)?
ich hatte doch verlinkt wo ich meine PCB bestellt habe, OSH Park
The Mighty Mini 1284P
https://github.com/JChristensen/mini1284
Printed circuit boards can be ordered through OSH Park.
für den Rest:
If you'd like to roll your own, the Eagle files are available on github,
and a bill of materials with all the components needed, including the
microcontroller and a breadboard, is available on the Mouser web site.
Note that if you order the microcontroller from Mouser, it will need to
be programmed with an Arduino bootloader.
hier gibt es ja noch den Platinensammler oder jeden anderen
Dienstleister der dir aus den Eagle Files Platinen macht.
Herbert P. schrieb:> Lt. Joachim ist allerdings ein Weißabgleich> angeblich nicht erforderlich.
für mich nicht, aber ich hatte schon mal über die Scheckkarten FB mit
Franks IRMP einen manuellen Weissabgleich eingebaut, blau raus oder rot
raus nach Belieben, mir gehen nur die Tasten aus für grün, oder man
müsste einen Farbkreis installieren um alles durchzufahren, aber da ging
mir der Speicher aus, deswegen baue ich ja am 1284p löten fast fertig.
aber was rede ich, jeder hat ein anderes Weissempfinden und wie ich
denke haben schon einige die WS2811/12/b Stripes, probiert es aus was
euch zusagt oder ob nicht, mehr kann ich nicht sagen aus der Ferne.
Joachim B. schrieb:> ich hatte doch verlinkt wo ich meine PCB bestellt habe, OSH Park
Ich dachte, dsa betraf den Mighty Mini? Ich meinte jedoch die
"Breadboard Helper Platinen" zur Verringerung des Bauteil- und
Kabelsalats bei einem Breadboard-Aufbau.
Herbert P. schrieb:> Ich dachte, dsa betraf den Mighty Mini?
ist ja auch so, nur wenn du weiterliest gibts keine Links zum
Platinenhersteller, nur Links zu den Eagle Files, da muss man sich wohl
selber um einen Platinenhersteller kümmern, hier den Platinensammler
oder jeden anderen PCB Anbieter.
Joachim B. schrieb:> da muss man sich wohl> selber um einen Platinenhersteller kümmern, hier den Platinensammler> oder jeden anderen PCB Anbieter.
Sorry, dass ich mich noch nicht so auskenne und gefragt habe. Ist für
mich Alles Neuland hier.
Habe gerade die Version 0.3.5 hochgeladen. Dabei wurde die zuweilen
stockende Steuerung per IR-Fernbedienung verbessert. Die Bedienung ist
nun deutlich flüssiger.
Man kann nun eine IR-FB-Taste durch Doppelklick repetieren lassen. Dazu
drückt man zunächst die Taste kurz und direkt anschließend lang. Das ist
unter anderem nützlich bei der Helligkeitseinstellung. Das mit dem
Doppelklick ist zwar so nicht gewollt, denn eigentlich sollte eine
FB-Taste einfach länger festgehalten werden, aber irgendwo ist da noch
ein kleiner Bug drin. Das hier geschilderte ist also momentan ein
Workaround, bis ich den Fehler gefunden habe.
Ausserdem leuchten beim Anlernen der 12 IR-Tasten nun die LEDs 1 bis 12
in der ersten Zeile auf.
Die aktualisierte Siebdruckvorlage für die Acrylglas-Frontplatte mit
18x16 Matrix (45 cm x 45 cm Außenmaß) sowie die dazupassende Bohr- und
Frässchablone für die MDF-Montageplatte sind im Maßstab 1:1 (pdf-Format)
hochgeladen.
Herbert P. schrieb:> Die aktualisierte Siebdruckvorlage für die Acrylglas-Frontplatte mit> 18x16 Matrix (45 cm x 45 cm Außenmaß) sowie die dazupassende Bohr- und> Frässchablone für die MDF-Montageplatte sind im Maßstab 1:1 (pdf-Format)> hochgeladen.
Sieht klasse aus :-)
Herbert P. schrieb:> Sorry, dass ich mich noch nicht so auskenne und gefragt habe. Ist für> mich Alles Neuland hier.
kein Problem, hatte ich auch erst nicht verstanden, kommt alles so
learning by doing.
zuerst den mitghty gefunden aber keine Platine, dann zu OSH und
bestellt, ich hatte noch nicht mal weitergelesen, du zeigtest den Weg
und ich habe geschaut, ah keine Platine, nur was macht man dann ?
Vorlage gibt es also selber bestellen.
Ist ja fast wie bei uns hier, entweder es findet sich einer für die
Acryl oder Folien oder Blechteile und wir bekommen eine Sammelbestellung
hin oder die Vorlagen auch deine Arbeit ! ist nützlich um mit diesem
selber einen Ersteller zu finden.
mein Lieblingshändler bietet wieder an
http://www.ebay.de/sch/witopower/m.html?_nkw=&_armrs=1&_ipg=&_from=
ich habe noch mal 2 Sätze bestellt
momentan fehlt mir aber der Überblick in welchem Raster die Buchstaben
liegen.
Aber der Preis war so interessant das ich notfalls auch schnippeln
würde, werde eh Platinen bauen (lassen) ob da nun single LEDs raufkommen
oder Stücke aus geschnittene Stripes ist ja machbar im Layout.
Joachim B. schrieb:> momentan fehlt mir aber der Überblick in welchem Raster die Buchstaben> liegen.
Die LED-Strips mit 60 LEDs/lfm passen genau zum Raster, das Raster ist
mit 16,67 mm LED-Abstand exakt für diese Strips ausgelegt, die
Matrix-Breite beträgt 30 cm.
Vertikal werden nur 16 Zeilen benötigt, um auf ein quadratisches Maß der
Matrix zu kommen, ist der vertikale Abstand größer (18,75 mm).
Die Abbildungen umd Vorlagen für die 18 x 16 Matrix im Wiki-Artikel
http://www.mikrocontroller.net/articles/WordClock24h entsprechen exakt
diesem Rastermaß.
Ich hab noch nie eine Platine anfertigen lassen. Was kostet so eine
Platine (double layer) im Format der Matrix (ca. 32 x 32cm) ungefähr,
und wer ist ein günstiger Anbieter?
Hallo zusammen,
warum kommt immer alles auf einmal? Und dann noch vor Weihnachten? Immer
dasselbe. :-(
Ich habe den Thread-Bandwurm seit dem 08.12.2014 20:03 Uhr nachgeholt:
Herbert P. schrieb:> was kostet so eine Platine ... ungefähr
bilex-lp.com bei 3 Stück z.B.: 356.72 € / 3 = 118,91 €
China ist vielleicht billiger als Bulgarien.
Joachim B. schrieb:> Aber der Preis war so interessant ...
Ach. ?! Weiter oben hatte ich günstigere Preise von meinen
Lieblingshändlern gepostet.
Frank M. schrieb:> Vermutlich muss man da noch einen "Weißabgleich" machen, um die Dinger> wenigstens näher an einen Weißton zu bringen. Das heißt, eine> Korrekturtabelle muss her :-(
Das war bei meiner Wohnzimmer-Lampe auch so, aber ich sehe das Problem
nicht.
Frank M. schrieb:> Ich bestelle mir mal eins. Portierung (andere Ports) sollte nicht> kompliziert sein.
Das reicht auch um die noch billigeren China-Module zu programmieren.
Läuft Dein Linux auch da drauf?
Herbert P. schrieb:> Wird es für den STM32 auch ein PCB geben?
Von mir ja, aber das kann noch dauern. Den Prototypen mache ich mit
Fädeldraht und 4€-Modulen.
Frank M. schrieb:> Allerdings. Die tables.h und display.h funktionieren vorzüglich :-)
Habe ich was verpasst, oder war das ironisch? Da sind doch ein Haufen
Fehler drin!
Eigentlich wollte ich das bis Mittwoch korrigieren, mache mich morgen
früh dran.
Torsten C. schrieb:> Frank M. schrieb:>> Allerdings. Die tables.h und display.h funktionieren vorzüglich :-)>> Habe ich was verpasst, oder war das ironisch? Da sind doch ein Haufen> Fehler drin!
Ich kann mir nur vorstellen, dass sich das Lob auf die Struktur bezieht.
Die korrigierten Inhalte habe ich ja erst am 9.12. hochgeladen, die
hatest Du am 8.12. noch gar nicht zur Verfügung.
Torsten C. schrieb:> Eigentlich wollte ich das bis Mittwoch korrigieren, mache mich morgen> früh dran.
Hoffentlich habe ich keine neuen Fehler eingebaut :-(
Herbert P. schrieb:> ... auf die Struktur bezieht ...
Auf den (noch) fehlerhaften Code, der sich nichtmal compilieren läßt,
bezieht sicher kein Lob. Trotzdem danke. :-)
Ich habe jetzt geschaut, wie der korrigierte Code im CooCox-Projekt von
ukw aussieht und werde den Code-Generator entsprechend korrigieren, so
dass dass dann passen sollte.
Zu tbl_Words.png:
[text_show] dient datu, die Buchstaben-Matrix zu erzeugen. Der Text wird
bei [length] abgeschnitten, also sind ._1, ._2 usw. kein Problem.
Umlaute sind sogar nötig. Perfekt!
[text] könnte im DMU für die ListView verwendet werden, aber für die
Code-Generierung nicht, da man mit "._1" keine Enumerator-Bezeichner
machen kann. Ich habe die LEDs C-kompatibel umbenannt (siehe Bild).
Wozu braucht man [text-indexed]? Kann ich in den Kommentar packen.
Werden [abs_start_position] und [abs_snake_position] berechnet? Falls
das Handarbeit ist, würde ich die Spalten lieber ignorieren und im
Code-Generator (hoffentlich fehlerfrei) erzeugen.
Wenn wir ein stabiles Tabellenformat haben, können wir das für die
16x16-Tabellen so übernehmen, damit der Code-Benerator nich verschiedene
Spalten-Bezeichnungen unterstützen muss.
Torsten C. schrieb:> [text] könnte im DMU für die ListView verwendet werden, aber für die> Code-Generierung nicht, da man mit "._1" keine Enumerator-Bezeichner> machen kann. Ich habe die LEDs C-kompatibel umbenannt (siehe Bild)
Hab ich in der db entsprechend geändert.
Torsten C. schrieb:> Wozu braucht man [text-indexed]? Kann ich in den Kommentar packen.
dient nur mir zur leichteren Orientierung beim händischen Erstellen der
tbl_hours und tbl_minutes (in einem String dürfen nur Indizes in
aufsteigender Reihenfolge verwendet werden)
Torsten C. schrieb:> Werden [abs_start_position] und [abs_snake_position] berechnet? Falls> das Handarbeit ist, würde ich die Spalten lieber ignorieren und im> Code-Generator (hoffentlich fehlerfrei) erzeugen.
Ist Handarbeit, besser im Code-Generator erzeugen!
Torsten C. schrieb:> Frank M. schrieb:>> Vermutlich muss man da noch einen "Weißabgleich" machen, um die Dinger>> wenigstens näher an einen Weißton zu bringen. Das heißt, eine>> Korrekturtabelle muss her :-(>> Das war bei meiner Wohnzimmer-Lampe auch so, aber ich sehe das Problem> nicht.
Nein, kein Problem, ich hatte nur ein wenig mehr erwartet. Bin halt zu
verwöhnt ;-)
> Frank M. schrieb:>> Ich bestelle mir mal eins. Portierung (andere Ports) sollte nicht>> kompliziert sein.>> Das reicht auch um die noch billigeren China-Module zu programmieren.
Ja, aber die Nucleo-Boards gibts auch noch in ein paar Jahren. Das Board
ist übrigens angekommen. Die Stifte dre Steckerleisten ragen zwar auch
unten heraus, kann man aber mit der Zange abpitschen. Das ist eine Sache
von wenigen Minuten. Den Controller zum Flashen und Debuggen kann man
nachher im Endgerät wegen einer "Sollbruchstelle" in der Platine
absägen/abbrechen, so dass nur noch eine Platine in Arduino-Größe
übrigbleibt. Flashen kann man dann aber immer noch über einen
Bootloader. Das Ding ist also hinreichend klein und genau Herberts
Geschmack.
> Läuft Dein Linux auch da drauf?
Da läuft kein Linux, sondern MCURSES. Das ist lediglich eine
Bibliothek, die auch unter Linux läuft. Ich benutze sie auch nur zum
Debuggen/Monitoring. Im Endprodukt wirde sie wieder rausfallen, denn sie
ist nur für die Entwicklung sinnvoll.
> Frank M. schrieb:>> Allerdings. Die tables.h und display.h funktionieren vorzüglich :-)>> Habe ich was verpasst, oder war das ironisch? Da sind doch ein Haufen> Fehler drin!
Nein, das war nicht ironisch, sondern ernst gemeint. Die Fehler
resultieren aus den fehlerhaften DB-Tabellen-Inhalten. Dafür kannst Du
ja nichts. Ich wollte damit ausdrücken, dass Dein "Übersetzungsprogramm"
vorzüglich funktioniert. Dass es die Fehler 1:1 koopiert, liegt ja in
der Natur der Sache.
> Eigentlich wollte ich das bis Mittwoch korrigieren, mache mich morgen> früh dran.
Prima. Sobald sie verfügbar sind, übernehme ich sie in uclock.de und ins
CooCox-Projekt.
Torsten C. schrieb:> Die Horror-Seite ist aktualisiert.
Schön! Gibt es auch schon eine neue tables.h und display.h? Mir scheint,
die Links im Artikel zeigen noch auf eine Version vom 9. Dezember...
Danke, Frank
Frank M. schrieb:> Sobald sie verfügbar sind, übernehme ich sie
Cool. :-) Hat höchste Prio neben meinem Beruf, ich kann aber nicht
zaubern.
Neu ist (auch für mich zum debuggen):
1
enumMinuteMode{
2
MM_1,// 0 = Mode 1: "ES IST MM NACH"
3
MM_2,// 1 = Mode 2: "ES IST MM MINUTEN NACH"
4
MM_3,// 2 = Mode 3: "ES IST MM MINUTEN NACH (VIERTEL NACH, HALB, VIERTEL VOR) - OSSI"
5
MM_4,// 3 = Mode 4: "ES IST MM MINUTEN NACH (VIERTEL NACH, HALB, DREIVIERTEL) - OESI"
6
MM_5,// 4 = Mode 5: "ES IST MM MINUTEN NACH (VIERTEL, HALB, DREIVIERTEL) - RHEIN/ RUHR"
7
MM_6,// 5 = Mode 6: "ES IST MM MINUTEN NACH (VIERTEL NACH, HALB, DREIVIERTEL) - SCHWABEN"
8
MM_10,// 6 = Mode 10: "MM"
9
MM_11,// 7 = Mode 11: "UND MM MINUTEN"
10
MM_12,// 8 = Mode 12: "ES IST MM MINUTEN VOR"
11
MM_7,// 9 = Mode 7: "ES IST MM MINUTEN NACH (VIERTEL, HALB,DREIVIERTEL) - WESSI"
Hi Torsten,
Torsten C. schrieb:> Cool. :-) Hat höchste Prio neben meinem Beruf, ich kann aber nicht> zaubern.
Ist ja logisch. Beruf geht immer vor.
> Neu ist (auch für mich zum debuggen):
Sieht gut aus! Die Änderungen gefallen mir!
Gruß, Frank
Hans H. schrieb:> HourOffset als Bit verwursten -> nein
Hast Du was gegen Wurst? ;-)
OK. Mache ich so, wie im ersten Beispiel.
Hans H. schrieb:> Enums nutzen, gerne.
Das "enum WordPos" zieht dann also um:
… von display.h nach tables.h.
Torsten C. schrieb:> Ich muss … heute Abend ja in die "Euse"˄˄.
Am 10.10.2014 war ein Treffen. Allerdings war alles noch nicht sehr
konkret. Ich bleibe dran, siehe auch:
Beitrag "FabLab Braunschweig"
Hi, richtig action hier ;)
moechte mir auch so eine Uhr bauen, aber mit ein Paar eigenen Ideen
1. ich mache eine Platine die wahlweise WS2812 RGB oder mono LEDs
in 0805 mit 74hc595 angesteuert werde, 18 Leds pro Streifen mit
20mm abstand, streifenbreite ca 13mm, laenge 372mm
2. ansteuerung mit Ardunino Mini mit ATMEGA 328, natuerlich DCF,
IR aber auch ein RTC damit die Uhr nach stromausfall sofort
funktioniert
falls noch jemand interesse hat kann ich LED Platinen mitbestellen
die Platine f. den Arduino ist noch nicht fertig, falls noch Ideen
vorhanden sind kann man sie ja mit einfliessen lassen
vlG
Charly
Charly B. schrieb:> mit 74hc595 angesteuert
Bist Du wirklich sicher, dass Du 74hc595 nehmen willst? Für LEDs gibt es
auch Schieberegister-Treiber, die Konstantstrom trotz unterschiedlicher
LED-Vorwärtsspannungen können.
Das spart Lötarbeit für LED-Vorwiderstände und die LEDs brennen auch bei
Alterungs-Effekten weitgehend gleich hell.
Hi Torsten,
ich habs jetzt im ersten step mit dem 74hc595 gemacht, ist halt
an jeder Strassenecke zu bekommen und war auch nur als 'zugabe'
gedacht falls man ein 'mono' strip aufbauen will, ich werde mir
RGB Strips aufbauen, da kann man so schoen mit den Farben spielen ;)
Ich hab vor vielen Jahren schon LEDs mit dem 595 angesteuert und
die funktionieren immer noch 'wie am ersten Tag' ;)
In der 'mono' version sind ja nur 18 Leds mit Vorwiederstand
und die 595 mit 100nf zu bestuecken, also ueberschaubar (denk i)
Wenn spaeter was anderes gewuenscht wird kann man es immer
noch aendern, oder hast du jetzt konkret einen aenderungswunsch
dann schreib mir bitte und i sehe was sich machen laesst
vlG
Charly
Charly B. schrieb:> ich habs jetzt im ersten step mit dem 74hc595 gemacht, ist halt> an jeder Strassenecke zu bekommen und war auch nur als 'zugabe'> gedacht falls man ein 'mono' strip aufbauen will, ich werde mir> RGB Strips aufbauen, da kann man so schoen mit den Farben spielen ;)
Hallo Charly,
willkommen hier, aber:
wenn schon große Platine für monochrome 18x16 Matrix, dann bitte für
diskrete LEDs mit einem Abstand von B16,67mm x H18,75mm. Ich hab ohnehin
nach mehreren Vorentwürfen 4 Frontplattendesigns mit Produktionsvorlagen
gemacht und finde, das muss für's erste einmal reichen.
Und bitte nicht mit 74HC595, sondern mit TLC5940. Der ist speztiell für
diese Zwecke konzipiert, hat PWM und Konstantstromquelle mit
Helligkeitsausgleich für 16 Kanäle eingebaut und ist per Daisy Chain
kaskadierbar. Ist in China (Alibaba, Aliexpress) für ein Butterbrot und
ein Ei zu haben, Lieferzeit 1 Woche bis 14 Tage.
Charly B. schrieb:> 2. ansteuerung mit Ardunino Mini mit ATMEGA 328, natuerlich DCF,> IR aber auch ein RTC damit die Uhr nach stromausfall sofort> funktioniert
@Frank & Torsten:
weiß man schon, wieviel Speicher ca. benötigt wird? Kann sich das mit
einem ATmega328 ausgehen?
Torsten C. schrieb:> Torsten C. schrieb:>> Ich muss … heute Abend ja in die "Euse"˄˄.>> Am 10.10.2014 war ein Treffen. Allerdings war alles noch nicht sehr> konkret. Ich bleibe dran, siehe auch:>> Beitrag "FabLab Braunschweig"
@ Joachim:
wie siehts eigentlich in Berlin mit dem Fab_Lab aus? Dort müsstest Du
doch die Stahlfrontplatten um ein Spottgeld fräsen können, oder?
Gibts hier vielleicht auch noch andere, die Zugang zu einem Fab_Lab
haben bzw. in deren Nähe sich eines befindet?
Herbert P. schrieb:> wie siehts eigentlich in Berlin mit dem Fab_Lab aus? Dort müsstest Du> doch die Stahlfrontplatten um ein Spottgeld fräsen können, oder?
werde ich mich kümmern sobald ich Zeit dazu habe
aber was ist mit den 4 LED Statuspunkten?
so wie die da rumliegen gefällts mir noch nicht
ich dachte an
I für IR Qittungs LED blinkt kurz 200ms auf bei IR Erkennung (rot? aber
ist ja wählbar)
D für DCF77 Status LED blinkt im Sekundentakt 200ms/800ms oder statisch
in Orange bei sync
N für NTP Status LED blau bei sync
welcher Buchstabe bietet sich für die vierte an?
und wo sietzt der IR und der Helligkeitssensor, der muss ja irgendwie
auf der Front untergebracht werden, notfalls in einem nicht benitzten
Buchstaben der aber optimal kein Licht IR und Umgebung behindert.
Joachim B. schrieb:> aber was ist mit den 4 LED Statuspunkten?>> so wie die da rumliegen gefällts mir noch nicht
Ich gebe Dir recht, das müssen wir noch ausdiskutieren.
Joachim B. schrieb:> und wo sietzt der IR und der Helligkeitssensor, der muss ja irgendwie> auf der Front untergebracht werden, notfalls in einem nicht benitzten> Buchstaben der aber optimal kein Licht IR und Umgebung behindert.
Ich denke mir, den IR-Sensor könnte man in der Mitte unter- oder
oberhalb der Matrix plazieren, da er ja nicht durch die Diffusor-Schicht
abgedeckt werden sollte. Den Helligkeitssensor könnte man meines
Erachtens hinter einem unbenutzten Buchstaben verstecken. Da die
Helligkeitsregelung nicht auf die IR-Impulse der Fernsteuerung oder
andere kurzzeitige Helligkeitsschwankungen reagieren soll, muss man da
wohl eine Integratorstufe einbauen (am Einfachsten wohl ein RC-Glied).
Herbert P. schrieb:> Ich denke mir, den IR-Sensor könnte man in der Mitte unter- oder> oberhalb der Matrix plazieren, da er ja nicht durch die Diffusor-Schicht> abgedeckt werden sollte. Den Helligkeitssensor könnte man meines> Erachtens hinter einem unbenutzten Buchstaben verstecken.
Man kann beide (IR-Empfänger als auch LDR) jeweils hinter einem
unbenutzten Buchstaben verstecken. IR geht auch durch die
Diffusor-Schicht. Das wird auch im Word Clock-Projekt so erfolgreich
umgesetzt.
> Da die> Helligkeitsregelung nicht auf die IR-Impulse der Fernsteuerung oder> andere kurzzeitige Helligkeitsschwankungen reagieren soll, muss man da> wohl eine Integratorstufe einbauen (am Einfachsten wohl ein RC-Glied).
Nein, es reicht LDR + R als Spannungsteiler. Den Integrator macht man
selbstverständlich in Software (zb. durch Mittelwertwertsberechnung der
letzten x Sekunden). Läuft auch genau so im Word Clock-Projekt.
Frank M. schrieb:> Nein, es reicht LDR + R als Spannungsteiler. Den Integrator macht man> selbstverständlich in Software
Logisch. Ich verfall' immer wieder in meine Hardware-Geschichten, alte
Gewohnheit ;-)
Frank M. schrieb:> Torsten ich bitte Dich, die Postings SORGFÄLTIGER zu lesen!
ach das wird schon
> Beim Integrator ging es um die Messung der Umgebungshelligkeit mit> einem LDR! Wie willst Du denn mit einem TSOP die Umgebungshelligkeit> messen?!?>> Beim IR-Empfang nimmt man selbstverständlich einen TSOP. Solche> Belehrungen kannst Du Dir sparen, ich bin der Autor von IRMP!
ich hatte dich sofort verstanden weil ich ja schon was ähnliches
aufgebaut hatte, am sorgfältiger lesen muss ich auch noch üben ;-)
also
I für IR
D für DCF77
N für NTP ist OK?
was nehmen wir für die 4te LED ?
Frank M. schrieb:> ich bitte Dich, die Postings SORGFÄLTIGER zu lesen!
Ach, jetzt verstehe ichs auch. Klappt halt nicht immer. Sorry.
Frank M. schrieb:> Solche Belehrungen kannst Du Dir sparen
Das war keine Belegrung. Hätte man so interpretieren können, sorry.
Frank M. schrieb:> Messung der Umgebungshelligkeit
Was ist mit dem Ambient-Light-Sensor? ^^
Billig, universell, kann auch auf Änderungen der Farbtemperatur
(Kerzenlicht, Kunstlicht, Tageslicht, ...) reagieren.
https://www.sparkfun.com/products/12055
PS: Als Breakout natürlich etwas teurer.
Torsten C. schrieb:> Was ist mit dem Ambient-Light-Sensor? ^^>> Billig, universell, kann auch auf Änderungen der Farbtemperatur> (Kerzenlicht, Kunstlicht, Tageslicht, ...) reagieren.
Ich machs erstmal mit einem LDR. Im Word Clock-Projekt wird der "LDR
07" von Reichelt eingesetzt - kostet 90 Cent und funktioniert prima.
Ausserdem habe ich von den Dingern noch ein paar rumliegen. Den
Ambient-Light-Sensor kann man ja immer noch später dazunehmen, wenn man
möchte.
Joachim B. schrieb:> ich hatte dich sofort verstanden weil ich ja schon was ähnliches> aufgebaut hatte, am sorgfältiger lesen muss ich auch noch üben ;-)
Du warst ja nicht gemeint ;-)
> also> I für IR> D für DCF77> N für NTP ist OK?
Meinetwegen. Mir ist das eigentlich schnuppe. Von mir aus können das
auch 4 Kreise sein.
> was nehmen wir für die 4te LED ?
Bis uns noch ein Feature einfällt vielleicht G für "General".
Frank M. schrieb:> Von mir aus können das auch 4 Kreise sein.
Die nicht leuchtenden LEDs sollen ja nach "Buchstabensalat" ausnehmen.
Also lieber bis auf Weiteres "I/D/N/G".
Frank M. schrieb:> Du warst ja nicht gemeint ;-)
Ist denn wieder alles gut? Hatte in der Hektik eben echt falsch gelesen!
Torsten C. schrieb:> Also lieber bis auf Weiteres "I/D/N/G"
Ist registriert, aber ich denke, ich warte noch ein wenig, bis ich die
Buchstaben in's Layout einbaue - so eilig haben wir's ja nicht, und
vielleicht wird ja Alles doch noch einmal ein wenig anders ;-)
Torsten C. schrieb:> Also lieber bis auf Weiteres "I/D/N/G"
Ist registriert, aber ich denke, ich warte noch ein wenig, bis ich die
Buchstaben in's Layout einbaue - so eilig haben wir's ja nicht, und
vielleicht wird ja Alles doch noch einmal ein wenig anders ;-)
Wann gibt's denn eigentlich ein Mockup mit den neuen Tabellen? (Hat von
mir aus keine Eile, hab ohnehin im Augenblick Vorweihnachts-Stress)
Herbert P. schrieb:> Wann gibt's denn eigentlich ein Mockup mit den neuen Tabellen?
Wenn alles auf ENUMs umgestellt ist, dann kann man auch besser prüfen,
ob keine Fehler drin sind. Wenn alles glatt geht, heute Abend.
Die Matrix sieht aktuell so aus (noch mit LED-Punkten):
1
// Mock-up arrays for 24h Wordclock, see http://www.mikrocontroller.net/articles/WordClock24h
2
// Von-Neumann-Variant, Data from WC24h_18x16_V2_2010_1825_9_Dez_2014, CodeGen v0.7
Torsten C. schrieb:> #define MAX_HOUR_WORDS_PLUS_ONE 6 // how many words for hour display> (one plus for end token)> Wozu brauchen wir den End-Token? Der braucht doch nur unnötig Platz!
Entweder Du hast ein End-Token oder Du nimmst eine Längeninformation.
Beides kostet ein Byte. Ist also gehopst wie gesprungen. Längen-Info
wäre auch nicht schlecht, denn ich habe lieber Indices, die mit 0 statt
1 beginnen. Im Moment muss ich immer die 1 wieder von den Werten
abziehen.
Aber okay, das ist Kosmetik.
Frank M. schrieb:> Längen-Info> wäre auch nicht schlecht, denn ich habe lieber Indices, die mit 0 statt> 1 beginnen.
Dafür wäre eigentlich die Längen-Info in der tbl_hours und tbl_minutes
gedacht gewesen.
Frank M. schrieb:> Im Moment muss ich immer die 1 wieder von den Werten> abziehen.
Das meinte ich z.B. mit dem Fehler im CodeGen (wenn wir vom Gleichen
reden). In den Arrays sollte der Index schon korrekt drin stehen.
Frank M. schrieb:> Entweder Du hast ein End-Token oder Du nimmst eine Längeninformation.
Den End-Token braucht man ja nur, wenn durch die Länge die
"MAX_HOUR_WORDS" nicht voll ausgenutzt wird, und da verbraucht der Token
keinen Platz.
Meine Frage bezog sich auf das "…_PLUS_ONE". Das ist m. E. hyperliquid.
Wenn ich mich nicht verrechnet habe, benötigt "WP_DUMMY = 0" weniger
Speicher-Overhead als die beiden "…_PLUS_ONE".
"WP_DUMMY = 0" hat auch noch den Vorteil, dass man den HourOffset
optional mit einem Bit "verwursten" könnte .
1
{0x80+WP_ES,WP_IST,WP_EINE_1,//...
Ich bin da flexibel. Ich könnte auch immer alle Varianten erzeugen:
* tables_large_Len_Neumann.h
* tables_large_Token_Neumann.h
* tables_medium_Neumann.h
* tables_small_Neumann.h
* tables_large_Len_Havard.h
* tables_large_Token_Havard.h
* tables_medium_Havard.h
* tables_small_Havard.h
Herbert P. schrieb:> Das ist ja mininmal **freu**
Sorry, ich habe illumination[1][WpCount] vergessen, dafür wird
tbl_modes[MODES_COUNT] etwas kleiner.
Die illumination[1][WpCount] wird es sinnvoller Weise wohl auch in
verschiedenen Varianten (snake_position, abs_position, ...) geben, oder?
in display.h ist ja noch das
1
char*display[1][WC_ROWS]={{//...
drin. Das wird aber nur für die Simulation oder den screen-saver
gebraucht.
Die "enum WordPos {…" zieht ja um nach "tables.h". Soll die "struct
WordIllu illumination[1][WpCount]" auch in die "tables.h" umziehen? Dann
bräuchte man für den µC nur die "tables.h" und die "display.h" wäre nur
für die Simulationen und den screen-saver.
Mir ist das egal. Ist nur ein Vorschlag, um Euch ggf. die Arbeit zu
erleichtern, also den AutoCode nicht noch nachbearbeiten zu müssen.
Torsten C. schrieb:> Meine Frage bezog sich auf das "…_PLUS_ONE". Das ist m. E. hyperliquid.
Nein, ist es nicht. Du brauchst die abschließende 0. Ist Dir schon
aufgefallen, dass die Zahlen in z.B. tbl_hours alle größer 0 sind? Das
liegt daran, dass hier ab 1 statt 0 gezählt wird. Alle nicht in der
Tabelle angegebenen Zahlen sind bei statics automatisch 0. Und diese 0
brauchst Du jeweils am Ende. Wenn Du das Array eins kleiner machst, also
ohne PLUS_ONE, krachts at runtime, weil dann die abschließende 0 nicht
mehr gefunden wird.
> Die illumination[1][WpCount] wird es sinnvoller Weise wohl auch in> verschiedenen Varianten (snake_position, abs_position, ...) geben, oder?
Das halte ich für allergrößten Unsinn. Die Snake-Position habe ich im
STM32F4-Disco-Code folgendermaßen gelöst:
1
if(y&0x01)// odd row: count from right to left
2
{
3
n=y*DisplayX+(DisplayX-x);
4
}
5
else// even row: count from left to right
6
{
7
n=y*DisplayX+x;
8
}
Dafür braucht es bestimmt keine extra-Tabelle - ausser für
minderbemittelte Programmierer.
Frank M. schrieb:> Dafür braucht es bestimmt keine extra-Tabelle - ausser für> minderbemittelte Programmierer.
melde mich, worum gehts?
ob nun Index Zähler oder "END" am Ende ist mir Conchita
Joachim B. schrieb:> melde mich, worum gehts?
Um das hier:
1 2 3 4 ... 18
O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--O---
|
36 20 19 |
O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--O---
|
|
O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--
37 38 ....
Also die Ermittlung der Position eines jeden Buchstabens. In jeder 2.
Zeile gehts von rechts nach links. Das meinte Torsten eben mit
"Snake-Position". Um diese zu ermitteln, braucht man aber nicht extra
wieder eine neue Tabelle, denn man kann sie mit dem obigen Code
ausrechnen.
> ob nun Index Zähler oder "END" am Ende ist mir Conchita
Mir auch. Es läuft ja bereits mit der 0 als Ende-Zeichen. Warum soll man
das wieder ummodeln?
Frank M. schrieb:> Es läuft ja bereits mit der 0 als Ende-Zeichen. Warum soll man> das wieder ummodeln?
Man könnte es ummodeln, um ein paar Bytes zu sparen. Mir persönlich ist
es auch "Conchita". Ich frage ja nur, was Ihr wollt!
Herbert P. schrieb:> Torsten C. schrieb:>> Werden [abs_start_position] und [abs_snake_position] berechnet?> Ist Handarbeit, besser im Code-Generator erzeugen!
Also gar nicht erzeugen, weil wir ja keine "minderbemittelten
Programmierer" sind. OK. Haken dran?
Frank M. schrieb:> Wenn Du das Array eins kleiner machst, also> ohne PLUS_ONE, krachts at runtime, weil dann die abschließende 0 nicht> mehr gefunden wird.
Ich will jetzt nicht behaupten, dass die abschließende 0 nur von
"minderbemittelten Programmierern" gebraucht wird. Den Tonfall halte ich
hier nämlich für unangebracht.
Wenn Du nicht nur auf
Torsten C. schrieb:> Also gar nicht erzeugen, weil wir ja keine "minderbemittelten> Programmierer" sind. OK. Haken dran?
Jup :-)
> Ich will jetzt nicht behaupten, dass die abschließende 0 nur von> "minderbemittelten Programmierern" gebraucht wird. Den Tonfall halte ich> hier nämlich für unangebracht.
Die Formulierung bezog sich rein auf eine extra-Tabelle für die
Snake-Position. Bitte nicht durcheinanderbringen :-)
> Wenn Du nicht nur auf>
Joachim B. schrieb:> ausser für>> minderbemittelte Programmierer.>> melde mich, worum gehts?Frank M. schrieb:> Joachim B. schrieb:>> melde mich, worum gehts?>> Um das hier:
du hast meinen Scherz nicht verstanden, war keine Meldung weil:
Frank M. schrieb:> Es läuft ja bereits mit der 0 als Ende-Zeichen. Warum soll man> das wieder ummodeln?
eben.
Torsten C. schrieb:> weil wir ja keine "minderbemittelten> Programmierer" sind.
och ich kann das akzeptieren, meine Stärken liegen eher in Hardware, SW
nur so weit wie es funktioniert und nicht annähernd genial ist, dazu
sind mir auch überdimensionierte Speicher und Prozzi recht.
Neue STM32F4-Disco-Version 0.4 ist online im Artikel WordClock24h.
Damit werden die LEDs sanft zur nächsten Uhrzeit übergeblendet.
Während also die LEDs, die ausgehen müssen, langsam immer dunkler
werden, werden die neuen LEDs zeitgleich immer heller. Das ganze
passiert in einer Viertelsekunde. Ich halte das bei der (relativ
schlechten) Auflösung der WS2812 für die beste Überblendzeit. Ich habe
da mehrere durchprobiert....
Wegen der Aufteilung display.h <-> tables.h: Wie soll's nun sein?
uint16_t brauchen wir nicht. OK?
Der VisualStudio C++ Compiler hat nicht gemeckert bei:
1
#include"stdafx.h"
2
#define uint8_t unsigned char
3
#include"display.h"
4
#include"tables.h"
5
intmain(array<System::String^>^args)
6
{
7
return0;
8
}
Wieviel Bytes braucht ein "const char* description"?
Zu den 7014 bytes: Ich bin von 3 Bytes (24-Bit Adresspointer) + ein Byte
pro Zeichen und einer terminierenden 0 ausgegangen.
VG Torsten C. ➜ Für Neu-Eisteiger gibt es den
Beitrag "WortUhr/WordClock: Minutengenau, 24h, RGB – Für Neu-Einsteiger"
@Torsten & Frank
Super habt Ihr das hinbekommen! Leider hab ich bei meinen Tabellen schon
wieder ein paar Fehler entdeckt:
teilweise "SECH" statt "SECHS" und "SIEB" statt "SIEBEN" bzw. auch
umgekehrt;
"MINUTE" statt "MINUTEN"
aber sonst wirkt die Zeitanzeige auf mich weitgehend "aufgeräumt" und
praktikabel.
Torsten C. schrieb:> Unter> http://www.mikrocontroller.net/articles/WordClock24h#Verifikation.2C_Validierung.2C_Code-Generator> steht:>> tables.h (Von-Neumann) bei GitHub (Ziel speichern unter…)>> display.h (Von-Neumann) bei GitHub (Ziel speichern unter…)
Prima, danke. Ich habe direkt beides in die STM32-Version integriert,
sämtliche deprecated-Konstanten ersetzt und die zusätzlichen
Abbruchbedingungen wegen des fehlenden PlusOne eingebaut.
Die Anzeige sieht nun ziemlich "murksig" aus. "ES" leuchtet zwar, "IST"
aber schon nicht mehr. Es werden zwar immer vollständige Wörter
angezeigt, aber immer die falschen. Irgendwas musst Du zusätzlich an der
Logik geändert haben... Hast Du da einen Tipp für mich?
> Wieviel Bytes braucht ein "const char* description"?
Kommt auf den µC an, wie groß ein Pointer ist.
Frank M. schrieb:> Die Anzeige sieht nun ziemlich "murksig" aus. "ES" leuchtet zwar, "IST"> aber schon nicht mehr.
Hast Du da noch die +1 drin? Die Indizes sollten nun direkt passen.
Torsten C. schrieb:> Frank M. schrieb:>> Die Anzeige sieht nun ziemlich "murksig" aus. "ES" leuchtet zwar, "IST">> aber schon nicht mehr.>> Hast Du da noch die +1 drin? Die Indizes sollten nun direkt passen.
Ja, habs gefunden, es liegt an WP_DUMMY in display.c. Da ich mit Indices
beginnend mit 0 zähle, muss ich jetzt (nachdem ich immer 1 abgezogen
habe), in der display-Routine wieder eins draufzählen ;-)
Macht insgesamt +/- 0. Ich habe nun das -1 rausgeworfen und zusätzlich
das spätere +1. Dann passt es wieder.
Es läuft jetzt, ich mache gleich ein Update der STM32-Version, welche
die LEDs sanft überblendet. Ausserdem aktualisiere ich dann auch
uclock.de.
Melde mich gleich wieder.
Herbert P. schrieb:> Leider hab ich bei meinen Tabellen schon wieder ein paar Fehler entdeckt
Also ich hab's mir bequem gemacht: .accdb per Drag&Drop auf das C#-DMU
ziehen, Knopf "Code Generieren" drücken, dann auf "tables.h" drücken,
dann geht automatisch ein neuer Tab im Browser auf mit dem Gist im
Edit-Mode und der Code ist in der Zwischenablage. Dann nur Strg-A,
Strg-V und "save" drücken. Das gleiche dann nochmal mit display.h und
der Horror-Seite. Fertig!
Also von mir aus drei Updates pro Tag. ;-)
Torsten C. schrieb:> Also von mir aus drei Updates pro Tag. ;-)
Prima! Hoffentlich kommt es nicht dazu, ich habe nämlich eben schon beim
Testen einiges an "Fehlern" in Herberts Tabellen gesehen. Ich poste
gleich eine Liste ;-)
Neue STM32-Version 0.4.1 ist hochgeladen, wir sind nun wieder "synchron"
;-)
http://uclock.de läuft nun auch mit den neuen tables.h und display.h.
Danke!
Hi Herbert,
Herbert P. schrieb:> Leider hab ich bei meinen Tabellen schon> wieder ein paar Fehler entdeckt:
Macht nix. Änderungen gehen nun fix dank Torstens Codegenerator :-)
Erstmal danke für Deinen unermüdlichen Einsatz!
Was mir eben bei den ersten Tests aufgefallen ist:
Ossi Mode 6 und 7:
http://uclock.de/?x=7&h=21&m=15
Falsch: Es ist fünf zehn minuten nach neun uhr
Richtig: Es ist dreiviertel zehn
http://uclock.de/?x=7&h=21&m=45
Falsch: Es ist fünf und vierzig nach neun uhr
Richtig: Es ist viertel zehn
http://uclock.de/?x=7&h=21&m=20
Falsch: Es ist fünf zwanzig nach neun uhr
Richtig: Es ist zehn vor halb zehn
Hier nochmal die Systematik in Worten:
Die Formulierung "zwanzig nach/vor" gilt nur für Rhein-Ruhr und
Schwaben, bei Ossis/Wessis gilt: "zehn vor halb" und "zehn nach halb".
Die Formulierung "viertel neun" bzw. "dreiviertel neun" gilt dagegen für
Schwaben und Ossis. Bei Wessis und Rheinländern heisst es "viertel nach"
und "viertel vor".
Schwaben-Modus (und auch fast jeder andere):
http://uclock.de/?x=12&h=21&m=15
Falsch: Es ist viertel zehn uhr
Richtig: Es ist viertel zehn
Das abschließende "Uhr" sagt man nur bei ganzen Uhrzeiten, also z.B.
Es ist drei uhr
Es ist acht uhr
Sobald man aber "x minuten vor .. " oder "x minuten nach .." sagt, lässt
man das abschließende "uhr" weg.
Kein Mensch sagt: "Es ist zwanzig nach zwölf uhr", sondern "Es ist
zwanzig nach zwölf".
Hallo Torsten, Frank und all die anderen ;-)
Habe eben auch tables.h und display.h von Rawgit geholt, und in den
Screensaver eingepflegt mit allen Änderungen die im Thread oben
besprochen wurden.
Danke dir Torsten für Deine Arbeit. Ich gehe mit den Änderungen mit ;-)
Leider noch zwei kleine Fehler:
Eine Bitte Torsten es wäre super wenn Du in der nächsten Version alle
von Dir als deprecated markierten #defines entfernen kannst.
Ich mach das jetzt so
1
// our typed constants from the "C" #defines
2
static const int DisplayX= WC_COLUMNS;
3
static const int DisplayY= WC_ROWS;
4
5
static const int ModesCount= MODES_COUNT; // count of different display modes
6
static const int MaxHourWords= MAX_HOUR_WORDS; // how many words for hour display (no end token guarantee, must check max size)
7
static const int HourCount= HOUR_COUNT; // 24 plus one to distinguish between old and new day
8
static const int MaxMinuteWords= MAX_MINUTE_WORDS; // how many words for minute display (no end token guarantee, must check max size)
9
static const int MinuteCount= 60;
10
11
static const int HourModesCount= HOUR_MODES_COUNT; // count of different display modes for hours
12
static const int MinuteModesCount= MINUTE_MODES_COUNT; // count of different display modes for minutes
Herbert P. schrieb:> @Frank:>> wäre es möglich, in uclock.de die internen Feld-Rahmen auch schwarz> einzufärben und damit unsichtbar zu machen?
Ja klar. Gerade geändert. So besser?
Joachim B. schrieb:> Frank M. schrieb:>> "dreiviertel neun" gilt dagegen für>> Schwaben und Ossis.>> Einspruch immer noch!> Gilt auch in WB
Was ist WB? Aber ich nehme mal an, dass entweder der Schwaben- bzw.
Ossi-Modus für Dich auch passt. Oder gibt es da wieder einen weiteren
Unterschied?
>> { 7, 5, L"ES IST HH UHR UND MM MINUTEN (12)" },
6
>> { 7, 9, L"ES IST HH UHR UND MM MINUTEN (24)" },
7
>> ^ hier auch
8
>> ...
9
>>
>> Was bewirken diese beiden Änderungen? Kann auf den ersten Blick keinen> Unterschied sehen.
Ohne diese gibt es bei mir in Windows einen Programmabritt.
Das ist ja der Index hour_txt für den Stundenmode, und der ist aktuell
von 0..7 definiert (HOUR_MODES_COUNT ist 8).
Ein uC wird dann irgendwo in den Speicher greifen.
Frank M. schrieb:> Liegt an Mehrfachverwendung von WP_DUMMY:
Die Bezeichnung kommt aus der tbl_words.
@Herbert: Mach mal die Spalte [tbl_words].[text] bitte auf:
Indiziert: "Ja (ohne Duplikate)"
Frank M. schrieb:> Vielleicht solltest Du noch die aktuelle Uhrzeit mit hinzunehmen ;-)
Die kopiere ich aus dem Wiki und entferne unerlaubte Zeichen (siehe
Bild).
kiloamp schrieb:> sieht aber alles noch ein wenig wirr aus :-)
Ja, das liegt aber nicht am Programm, sondern an Herberts Tabellen. Es
wird im Moment öfters mal das erste statt das zweite gleichlautende Wort
auf Frontplatte genommen. Dadurch ergibt sich eine falsche
Wortreihenfolge.
Herbert wird das bestimmt noch in den Griff bekommen :-)
Hans H. schrieb:> Ohne diese gibt es bei mir in Windows einen Programmabritt.
Oops, ja. Sorry. Da fehlte noch ein enum.
Frank M. schrieb:> Was bewirken diese beiden Änderungen?
Sollte durch die Enums nun klar werden.
Ist der CodeGen v0.09 OK?
Gute N8, bis Morgen.
Torsten C. schrieb:> Ist der CodeGen v0.09 OK?
Habe ich gerade mal kurz angetestet.
Mode 0 soll ja eigentlich 12h-Anzeige sein, Mode 1 dann 24h-Anzeige.
Aber irgendwie sieht das in der Anzeige andersherum aus. Ich habe auch
bei den anderen Modes den Eindruck, dass das "verschoben" ist.
Beispiel:
Mode 0: ES IST HH UHR MM (12)
21:19: ES IST NEUN ZEHN MINUTEN NACH EIN UND ZWANZIG UHR
Mode 1: Mode 1: ES IST HH UHR MM (24)
21:19: ES IST NEUN ZEHN UHR MINUTEN NACH
In Mode 1 sind viele Wörter in der verkehrten Reihenfolge, Mode 2 ist
ganz kaputt.
Alles nachzuvollziehen auf http://uclock.de/
Hans H. schrieb:> @Frank: Kann ich nicht bestätigen, bei mir tut es.>> Torsten hat ja in v0.09 nur enums statt den Zahlen in die tbl_modes[]> Tabelle gebracht.
Hm, das Phänomen hatte ich auch schon in 0.08. Vermutlich habe ich da
wieder irgendwo einen Verschieber mit 0 vs 1. Ich werde mal suchen....
eine Frage ist mir noch eingefallen: wäre es möglich, mit vertretbarem
Aufwand auch eine monochrome Variante mit TLC5940 mit einzuarbeiten
(evtl. mit Jumper wählbar)?
Herbert P. schrieb:> eine Frage ist mir noch eingefallen: wäre es möglich, mit vertretbarem> Aufwand auch eine monochrome Variante mit TLC5940 mit einzuarbeiten> (evtl. mit Jumper wählbar)?
Ja, kann ich machen. Aber löten werde ich die nicht ;-)
Joachim B. schrieb:> Frank M. schrieb:>> Okay, betrachte Dich als Ossi, dann passt das>> niemals!!!
Okay, dann nennen wir den Mode zukünftig WB/Ossi ;-)
Korrigiertes STM32-Projekt Version 0.4.2 (mit CodeGen 0.09 Tabellen) ist
nun hochgeladen.
http://uclock.de/ läuft nun auch damit. Sieht schon sehr gut aus!
Kompliment an Herbert und Torsten!
@Herbert: Meine heutigen Fehlermeldungen kannst Du vergessen. Ich hatte
die hour_modes und minute_modes verhackstückselt, weil da bis gestern
immer ein Offset von 1 in den Tabellen war.
Jetzt ist mir noch was eingefallen: wenn wir den IR-Empfänger und den
LDR (oder was auch immer) in der Mitte der Frontplatte hinter einem
"toten" Buchstaben platzieren, dann werden wir ja wohl den LED-Strip an
dieser Stelle unterbrechen - wodurch sich die Position der nachfolgenden
LEDs um 1 verschiebt.
Habt Ihr das berücksichtigt, oder wollt Ihr das anders lösen?
@Frank:
hab mit uclock grad Mode0 und Mode1 durchprobiert, sieht wirklich gut
aus - bis Mode1 ab 21:MM. Da bricht dann das Chaos aus.
Hab hier im Augenblick nur ein iPad zur Verfügung und kann daher nicht
nachschauen, ob es an meiner tbl_hours liegt.
Herbert P. schrieb:> Jetzt ist mir noch was eingefallen: wenn wir den IR-Empfänger und den> LDR (oder was auch immer) in der Mitte der Frontplatte hinter einem> "toten" Buchstaben platzieren, dann werden wir ja wohl den LED-Strip an> dieser Stelle unterbrechen - wodurch sich die Position der nachfolgenden> LEDs um 1 verschiebt.
Der IR-Empfänger passt noch zwischen LED und Frontplatte. Die LED muss
ja sowieso einen gewissen Abstand zur Frontplatte haben, um den
Buchstaben voll auszuleuchten.
Herbert P. schrieb:> @Frank:> hab mit uclock grad Mode0 und Mode1 durchprobiert, sieht wirklich gut> aus - bis Mode1 ab 21:MM. Da bricht dann das Chaos aus.
Danke für den Hinweis. Ich hatte in der Web-Version vergessen, die zwei
zusätzlichen Prüfungen einzubauen, die wegen Wegfall von "PlusOne" nötig
wurden. Habe ich nun korrigiert. Jetzt passt es wieder.
Frank M. schrieb:> Der IR-Empfänger passt noch zwischen LED und Frontplatte.
der LDR auch, an Kette unterbrechen dachte ich nicht
soll doch die LED dahinter bei Fehler leuchten, könnte man ja auch
abkleben oder einen Tropfen Schraubenlack schwarz raufmachen
Frank M. schrieb:> Da war also noch so ein 1 vs 0 Problem.
Wegen der Index-Fehler konnte ich mit dem ersten Lob ^^ nicht so recht
was anfangen. Du hattest den Fehler halt mit -1 korrigiert und dadurch
zweimal Mehraufwand. Tut mir Leid. Aber nun stimmen die Indizes halt
überall ohne Offset und mit den Enums sind Fehler auch leichter zu
finden.
Joachim B. schrieb:> einen Tropfen Schraubenlack schwarz raufmachen
Die LED wird halt nie nicht eingeschaltet, das ist Software.
> abkleben
Genau, mit Uhu, und dann gleich den Lichtsensor drauf!
Frank M. schrieb:> Da leuchtet das falsche "ZEHN".
Genau, liegt an den Tabellen:
https://rawgit.com/TorstenC/1a59b9c73730eb8e144d/raw/WC24h_18x16_Test.html#M7T1640
Ich habe gestern mit meiner 16x16-Version (zwei Großbildschirm-Kacheln
und ein 4€-China-STM32) angefangen. Irgendwann vor Weihnachten hätte ich
dafür auch gern einen AutoCode. Ist das machbar?
Zur Not nehme ich halt erstmal "WC24h16x16_28.Nov.2014_1607Uhr". Zum
Testen reicht das ja.
Frank M. schrieb:> Eine Macke habe ich jetzt doch noch gefunden:>> http://uclock.de/?x=6&h=7&m=40>> Da leuchtet das falsche "ZEHN".
Habe (hoffentlich) alle diesbezüglichen Bugs behoben und das Feld 'text'
der tbl_words indiziert ohne Whg. (dafür musste ich "DUMMY" einen Index
von DUMMY_1 bis DUMMY_3 verpassen).
Bin jetzt für 2 Tage "Out of Order",
VG Herb
Torsten C. schrieb:> Die LED wird halt nie nicht eingeschaltet, das ist Software.
es gibt keine fehlerfreie Software
>> abkleben> Genau, mit Uhu, und dann gleich den Lichtsensor drauf!
oder Schmelzkleber, wenigstens reversibel
Joachim B. schrieb:> es gibt keine fehlerfreie Software
Werden wir uns einig? Eine leuchtende LED unter Kleber ermöglicht ja
noch keinen "Killer Poke".
Ich versuche gearade aus der 16x16.accdb gültigen Code zu erzeugen.
Etwas anstrengend, da die Spaltennamen noch anders sind.
Also muss ein "ColumnExists()" erweitert werden. Dann klappt das auch:
http://stackoverflow.com/questions/1206596/checking-to-see-if-a-column-exists-in-a-data-reader
Manchmal ist C#.net doch doof!
Torsten C. schrieb:> Werden wir uns einig? Eine leuchtende LED unter Kleber ermöglicht ja> noch keinen "Killer Poke".
och ob die leuchtet oder nicht ist mir egal, ich denke nur an den
Fotowiderstand und den TSOP das die beiden sich wohlfühlen und nicht
erschrecken und ihre Arbeit vernachlässigen wenn sie von hinten
bestrahlt werden. (wenns klemmt kann man immer noch ne Brücke für Din
und Dout legen)
Herbert P. schrieb:> Willst Du nicht die 2 Tage warten
War nicht viel:
23 ELF ➜ ELF***
74 VIER*** ➜ VIER****
[tbl_words].[text] ➜ Indiziert: "Ja (ohne Duplikate)"
22 SIEBEN: [row] = 3
80 *1 ➜ ●1
81 *2 ➜ ●2
82 *3 ➜ ●3
Ich mache gleich ein Update der Horror-Seite und lege die beiden Gists
für den Code an.
Da kommt bestimmt noch mehr, aber um weiter zu kommen, reicht mir das.
PS: Die Sterne und die unterschiedlichen Spalten-Bezeichner stören auch
nicht mehr:
hier ein erster entwurf mit dem Arduino328mini,
mit RTC, externem EEprom, µSDKarte,DCF usw....
f. die Ledanzeige hab ich mir ein DC/DC Stepdown
mit zb. LM2569 gedacht, gibts f. ein paar € in
der Bucht
gibts noch ideen/verbesserungen ?
vlG
Charly
edit: RS232 RS485 u. RFM22 sind auch noch dabei
wenn man es moechte
@Herbert und all diejenigen, die sich die CooCox CoIDE V2beta
heruntergeladen haben: Die V2Beta ist ziemlicher Murks. Es werden nur
sehr wenige µCs unterstützt und eine Übernahme alter V1.x-Projekte
funktioniert wohl auch noch nicht reibungslos.
Ich habe daher die Anleitung zur Installation von CooCox unter Windows
angepasst:
http://www.mikrocontroller.net/articles/STM32_CooCox_Installation#Installation_von_CooCox_unter_Windows
Dort zeigen jetzt die Links zum Download und zur Konfiguration auf die
alte Webseite von CooCox (die sie glücklicherweise unter dem Namen
www1.coocox.org zugänglich gemacht haben).
Ich kann daher denjenigen, welche sich mit der V2Beta erfolglos
herumgeschlagen haben, sich die V1.7.7 zu installieren.
Charly B. schrieb:> gibts noch ideen/verbesserungen ?
Wie ist der Anschluss für die LED-Strips zu verstehen? Drei
Datenleitungen + Versorgung, wofür? Welche LED-Strips sind vorgesehen?
Bei 18 x 16 RGB-LEDs kämen ja bis zu 5,8A zusammen. Wie machst Du die
Stromversorgung? Oder stellst Du per SW sicher, dass der Strom nicht zu
hoch wird?
PS: Die 16 x 16 Version WC24h16x16_28.Nov.2014_1607Uhr_korr (Änderungen
siehe oben) ist nun auch online (AutoCode + Horror-Seite)
hey meine Arduino mega1284p Platinen sind angekommen, aber der DIL
Aufbau läuft auch schon, DCF77 von ELV oben links ist auch schon da, bin
am Software anpassen, bald kommt der Uhr Prototyp noch 11 x 10 ran, aber
um Speicher ist mir nicht mehr bange, dann wird DCF und NTP reingebaut.
Sieht ja schon vielversprechend aus! Wenn ich wieder zu Hause bin,
möchte ich auch meinen 1284 im DIL-Gehäuse zumindest einmal mit
Bootloader zum Laufen bringen. Du hast einmal gepostet, dass es dabei
Schwierigkeiten gegeben hat?
@Charly: warum Atmega328? Ich dachte, wir hätten uns hier auf STM32 und
alternativ dazu auf den Atmel1284 geeinigt?
Herbert P. schrieb:> Du hast einmal gepostet, dass es dabei> Schwierigkeiten gegeben hat?
vielleicht (oder ne bestimmt) habe ich mich dämlich angestellt.
Jetzt wenn mans weiss ist es einfach
mighty m1284p runterladen, es gibt fertige Hex Files für 16MHz Quarz und
Arduino Baudraten
https://github.com/maniacbug/mighty-1284phttps://github.com/maniacbug/mighty-1284p/zipball/master
File
optiboot_atmega1284p.hex
+ Hardwarebeschreibung für den Arduino Ordner
http://maniacbug.wordpress.com/2011/11/27/arduino-on-atmega1284p-4/
und der Ordner muss in die IDE
C:\Programme\Arduino\hardware\mighty-1284p
also mit ISP Progger am m1284p das hexfile brennen,
die Fuses setzten
clock div /8 raus
bootloader sektion auf 1k
bootrst war mein Fehler nicht gesetzt, muss gesetzt werden
dann ist der m1284p bereit um seriell über FTDI USB Adapter in der
Arduino IDE zu empfangen.
Herbert P. schrieb:> @Charly: warum Atmega328? Ich dachte, wir hätten uns hier auf STM32 und> alternativ dazu auf den Atmel1284 geeinigt?
ist doch erst mal egal, ich glaube der m328p könnte reichen, aber im
Moment geht mir der Speicher aus und ich entwickel mit m1284p
wo er erst mal probiert ist doch egal, nur nacher Prozzi neu definieren
und ggffs. Timer und Ports anpassen
·
Torsten C. schrieb:> Wie ist der Anschluss für die LED-Strips zu verstehen? Drei> Datenleitungen + Versorgung, wofür? Welche LED-Strips sind vorgesehen?
An Strips kannste ja alles moegliche anschliessen da due 3 frei
programmierbare I/O's hast, ich baue mir strips mit WS2812, aber
auch zb. welche mit 74595 (DATA/CLOCK/LOAD) oder andere die mit
drei steuerleitungen zurechtkommen
versorgung kommt aus dem DC/DC Stepdown, die billigsten machen
ja so ~3A spitze, falls mehr gebraucht wird kann ja ein anderer
Wandler angeschlossen werden
@Herbert P.
ich denke der M328 Arduino reicht dafuer, den gibts f. 5-6€,
dafuer kannste das nicht selber bauen
vlG
Charly
Charly B. schrieb:> ich denke der M328 Arduino reicht dafuer, den gibts f. 5-6€,> dafuer kannste das nicht selber bauen
hatte ich ja schon, dann kam das Nokia Display mal dazu, ich will noch
wlan und Lichtspielereien und schon war der Speicher alle, was juckt
mich bei dem Preis wenn alles läuft ein dickerer Prozzi wobei ein m2560
zwar billig aber zu fett von der Platine ist, deswegen in der
Entwicklungsphase den m1284p der auf der fertigen Platine auch
downsizing zu m644 oder m32 erfahren kann, alles im TQFP44 oder wer mag
im DIL40
Das erste öffentliche Testrelease des WordClock2 -
Screensavers/Simulators ist fertig.
Die Tabellen von Herbert sind nach dem letzten Stand von Torsten C.
eingebaut (Data from WC24h_18x16_V2_2010_2003_15_Dez_2014 CodeGen v0.09)
Ich habe drei Bilder angehängt, da seht ihr was möglich ist.
Im Konfigurationsdialog bitte den Haken "Simulation-Mode" anschalten.
Dann ist die Programmausgabe wie in den Bildern, und mit den Tasten
entsprechend readme.txt kann der Sprachmodus und die Uhrzeit geändert
werden.
Das ZipFile enthält die Exe (beim Start wird nur der
Konfigurationsdialog aufgerufen) sowie ein cmd-File.
Das startet die Exe mit dem Parameter /s damit wird der Screensave-Mode
(oder der Simulatormode) aktiviert.
Es gibt im Moment noch keine 64-bit Version, da die aktuelle Version im
Simulationsmode vor allem zum Fehlerfinden in den Wortkombinationen
dienen soll.
Wer das Programm jetzt schon als reinen Screensaver benutzen will nennt
die Exe um nach *.scr und dann mit der rechten Maustaste im Menu
"installieren" auswählen.
Link zum Zipfile
https://rawgit.com/code-creator/wordclock2scrnv/master/WordClock2.zip
SHA-1 0ae4bc0192d96df5df6ae16e618521113e2cf6cc wordclock2.exe
SHA-256:
F814A93E5E3949184226BB86D37CFD7AE4F247EB93EC81994398D02621F989AA
Virengeprüft bei Virustotal.com mit 0/54.
Charly B. schrieb:> aber auch zb. welche mit 74595 (DATA/CLOCK/LOAD) oder andere> die mit drei steuerleitungen zurechtkommen
Guter Plan. Danke für die Info.
Charly B. schrieb:> ich denke der M328 Arduino reicht dafuer, den gibts f. 5-6€,
Ich habe davon noch haufenweise in der Bastelkiste (3,3V und 5V):
http://www.aliexpress.com/snapshot/6046539383.htmlhttp://www.aliexpress.com/snapshot/6240071452.html
Inzwischen sind die bestimmt noch billiger geworden. Allerdings braucht
man beim "ProMini" noch einen USB➜UART Wandler. Der kostet aber auch
quasi nix.
Wir sind hier zwar nicht im Forum "Markt", aber wenn jemand welche
braucht: Bitte nicht neu bestellen, dann werde ich lieber meine los. ;-)
Ich bin komplett auf den STM32 umgestiegen.