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 ;-)
:
Bearbeitet durch User
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"
:
Bearbeitet durch User
@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 | 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 = 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.
:
Bearbeitet durch User
Torsten C. schrieb: ... > Ich hätte generieren müssen: >
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 = 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 | enum WordPos { |
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 | enum WordPos { |
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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!
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.:
1 | static const struct MinuteDisplay tbl_minutes[MinuteModesCount][MinuteCount]= { |
2 | { // 0: Mode 1 ES IST MM NACH |
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.
:
Bearbeitet durch User
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"
:
Bearbeitet durch User
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"
:
Bearbeitet durch User
@Torsten: es spricht nichts dagegen, die DB-Keys so abzuändern, dass sie für die Code-Umwandlung praktikabel sind.
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.
:
Bearbeitet durch User
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 :-(
:
Bearbeitet durch User
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?
Herbert P. schrieb: > Und wo holpert's noch? display.h:
1 | enum WordPos { |
2 | WP_0_1_ES // ES |
3 | WP_1_2_IST // IST |
4 | WP_2_3_VIERTEL // VIERTEL |
5 | ...
|
Da fehlen sämtliche Kommas. Ich verstehe nicht, warum Torsten nicht ein einfaches leeres main.c mit
1 | #include "tables.h" |
2 | #include "display.h" |
angelegt hat, um wenigstens die Syntaxfehler selbst zu sehen.
Mit obigen Änderungen läuft es, wie man sich hier überzeugen kann: http://uclock.de/ Dummies habe ich wie folgt definiert:
1 | enum WordPos { |
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 | static const struct WordIllu illumination[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 ;-)
:
Bearbeitet durch Moderator
@Herbert: Nach wenigen Probe-Klicks direkt einen Fehler gefunden: http://uclock.de/?x=0&h=14&m=17 SIEBEN ZEHN -> SIEB ZEHN Dagegen hier: http://uclock.de/?x=0&h=14&m=27 SIEB UND ZWANZIG -> SIEBEN UND ZWANZIG
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch Moderator
@Herbert: Noch ein Doppel-Tabellenfehler: http://uclock.de/?x=4&h=14&m=6 SECH -> SECHS MINUTE -> MINUTEN Und noch einer: http://uclock.de/?x=4&h=14&m=16 SECHS -> SECH
:
Bearbeitet durch Moderator
@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?
:
Bearbeitet durch Moderator
@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).
:
Bearbeitet durch User
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 :-(
:
Bearbeitet durch User
Schau Dir bitte mal die Liste aus dem Word Clock-Projekt an: http://www.mikrocontroller.net/articles/Word_Clock#Frontplatte (Kapitel "Deutsch: 3-sprachig") Schwaben-Modus (ossi + 20 vor/nach) kam später noch hinzu.
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!
:
Bearbeitet durch User
Muss das Update der db leider auf morgen verschieben, sorry :-(
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
Das oben angekündigte CooCox-Projekt für das STM32F4-Discovery-Board ist online: http://www.mikrocontroller.net/articles/WordClock24h#CooCox_Projekt Viel Spaß!
Frank M. schrieb: > Das oben angekündigte CooCox-Projekt für das STM32F4-Discovery-Board ist > online: WOW! Congratulations! Du bist SPIIIITZZZEEEE!
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"?
:
Bearbeitet durch User
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 ;-)
:
Bearbeitet durch Moderator
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 ;-)
:
Bearbeitet durch User
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
:
Bearbeitet durch User
@Frank: STM32 CooCox Installation Installation von CooCox unter Windows 1. die CooCox CoIDE laden - BROKEN LINK!
Herbert P. schrieb: > @Frank: > > STM32 CooCox Installation > > *Installation von CooCox unter Windows* > > 1. die CooCox CoIDE laden - BROKEN LINK! Dieser Artikel ist nicht von mir ;-) Nimm einfach folgenden Link: http://www.coocox.org/software.html Ich werde das in dem oben genannten Artikel mal anpassen.
Joachim B. schrieb: > bin doch bei, meine Platinen sind bestellt und in der Auslieferung, Welche Platinen hast Du denn bestellt?
Herbert P. schrieb: > Welche Platinen hast Du denn bestellt? schon vergessen? hatte doch Links eingestellt..... http://adventuresinarduinoland.blogspot.de/2011/09/arduino-breadboard-helpers.html https://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.
Herbert P. schrieb: > Das Discovery Modul ist in der Originalversion zu hoch. http://www.exp-tech.de/stm32-nucleo-development-board-for-stm32-f4-series-with-stm32f401re-mcu-supports-arduino wäre eine Alternative. Der µC ist zwar nicht ganz so fett, aber ausreichend. Der Preis ist auch attraktiv. Ausserdem hat das Ding Arduino-Steckerleisten ;-) Ich bestelle mir mal eins. Portierung (andere Ports) sollte nicht kompliziert sein.
:
Bearbeitet durch Moderator
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?
@Joachim: die Arduino "Breadboard Helpers" sind ja genial. Gibts die PCBs irgendwo zu kaufen (oder sollte ich das übersehen haben)? http://adventuresinarduinoland.blogspot.de/2011/09/arduino-breadboard-helpers.html
:
Bearbeitet durch User
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 ;-)
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
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.
Bitte um Rückmeldung, ob die accdb-Tabellen für die 18x16 Matrix jetzt passen!
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.
:
Bearbeitet durch User
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?
:
Bearbeitet durch User
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!
Herbert P. schrieb: > Hoffentlich habe ich keine neuen Fehler eingebaut https://rawgit.com/TorstenC/1a59b9c73730eb8e144d/raw/WC24h_18x16_Test.html Die Horror-Seite ist aktualisiert. Der CodeGen 0.7 hat immer noch Generator-Fehler. Ich habe aber nun wenigstens ein "WC24h_Test.cpp" zum testen mit
1 | #include "display.h" |
2 | #include "tables.h" |
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 | enum MinuteMode { |
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" |
12 | MM_COUNT // Number of MinuteModes |
13 | };
|
14 | enum HourMode { |
15 | HM_1, // 0 = Mode 1: "HH (12) (ZWÖLF)" |
16 | HM_2, // 1 = Mode 2: "HH (12) - (MITTERNACHT, ZWÖLF)" |
17 | HM_3, // 2 = Mode 3: "HH UHR (12) (NULL UHR, ZWÖLF UHR)" |
18 | HM_4, // 3 = Mode 4: "HH UHR (12) NACHTS" |
19 | HM_5, // 4 = Mode 5: "HH UHR (24)" |
20 | HM_6, // 5 = Mode 6: "ES IST HH UHR (12)" |
21 | HM_7, // 6 = Mode 7: "ES IST HH UHR (24)" |
22 | HM_24, // 7 = Mode 24: "MITTERNACHT" |
23 | HM_COUNT // Number of HourModes |
24 | };
|
und
1 | #define ModesCount 17 // deprecated
|
2 | #define MODES_COUNT 17 // count of different display modes
|
3 | #define MaxHourWordsPlusOne 7 // deprecated
|
4 | #define MAX_HOUR_WORDSPLUS_ONE 7 // how many words for hour display (one plus for end token)
|
5 | #define HourCount 25 // deprecated
|
6 | #define HOUR_COUNT 25 // 24 plus one to distinguish between before and after full hour
|
7 | #define MaxMinuteWordsPlusOne 8 // deprecated
|
8 | #define MAX_MINUTE_WORDS_PLUS_ONE 8 // how many words for minute display (one plus for end token)
|
9 | #define MinuteCount 60 // deprecated
|
10 | #define MINUTE_COUNT 60
|
11 | #define HourModesCount 8 // deprecated
|
12 | #define HOUR_MODES_COUNT 8 // count of different display modes for hours
|
13 | #define MinuteModesCount 11 // deprecated
|
14 | #define MINUTE_MODES_COUNT 11 // count of different display modes for minutes
|
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
Frank M. schrieb: > Gibt es auch schon eine neue tables.h und display.h? Noch nicht fehlerfrei. Soll ich Enums in den Arrays nutzen?
1 | static const struct MinuteDisplay tbl_minutes[MINUTE_MODES_COUNT][MINUTE_COUNT]= { |
2 | { // tbl_minutes[0] = Mode 1 ES IST MM NACH |
3 | {0,{WP_ES, WP_IST}}, // 0. Minute |
4 | {0,{WP_ES, WP_IST, WP_EINS_1, WP_NACH_1}}, // 1. Minute |
5 | {0,{WP_ES, WP_IST, WP_ZWEI_1, WP_NACH_1}}, // 2. Minute |
6 | {0,{WP_ES, WP_IST, WP_DREI_1, WP_NACH_1}}, // 3. Minute |
7 | // …
|
8 | {1,{WP_ES, WP_IST, WP_ZWEI_1, WP_MINUTEN_1, WP_VOR_1}}, // 58. Minute |
9 | {1,{WP_ES, WP_IST, WP_EINE_1, WP_MINUTE_1, WP_VOR_1}} // 59. Minute |
10 | },
|
11 | };
|
:
Bearbeitet durch User
Kompressionsmöglichkeit:
1 | static const uint8_t tbl_minutes[MINUTE_MODES_COUNT][MINUTE_COUNT]= { |
2 | { // tbl_minutes[0] = Mode 1 ES IST MM NACH |
3 | {WP_ES, WP_IST}, // 0. Minute |
4 | {WP_ES, WP_IST, WP_EINS_1, WP_NACH_1}, // 1. Minute |
5 | {WP_ES, WP_IST, WP_ZWEI_1, WP_NACH_1}, // 2. Minute |
6 | {WP_ES, WP_IST, WP_DREI_1, WP_NACH_1}, // 3. Minute |
7 | // …
|
8 | {0x80 + WP_ES, WP_IST, WP_ZWEI_1, WP_MINUTEN_1, WP_VOR_1}, // 58. Minute |
9 | {0x80 + WP_ES, WP_IST, WP_EINE_1, WP_MINUTE_1, WP_VOR_1} // 59. Minute |
10 | },
|
11 | };
|
Komprimieren oder nicht komprimieren? Also statt "uint8_t hourOffset" einfach ein Bit im ersten Index setzen?
:
Bearbeitet durch User
Enums nutzen, gerne. HourOffset als Bit verwursten -> nein mfg.
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.
:
Bearbeitet durch User
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"
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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: > weiß man schon, wieviel Speicher ca. benötigt wird? Wenn ich mich nicht verrechnet habe:
1 | // Von-Neumann-Variant, Data from WC24h_18x16_V2_2010_1825_9_Dez_2014 CodeGen v0.7
|
2 | // tbl_modes[MODES_COUNT]: 1054 bytes
|
3 | // tbl_hours[HOUR_MODES_COUNT][HOUR_COUNT][MAX_HOUR_WORDSPLUS_ONE]: 1200 bytes
|
4 | // tbl_minutes[MINUTE_MODES_COUNT][MINUTE_COUNT]: 4800 bytes
|
5 | // total (tbl_minutes + tbl_hours + tbl_modes: 7054 bytes
|
Torsten C. schrieb: > // total (tbl_minutes + tbl_hours + tbl_modes: 7054 bytes Das ist ja mininmal **freu** :-)
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.
:
Bearbeitet durch Moderator
Frank M. schrieb: > Integrator macht man selbstverständlich in Software Ich dachte, man macht das selbstvertändlich so wie hier: http://www.ersinelektronik.com/class/INNOVAEditor/assets/Datasheets/TSOP2236.pdf
:
Bearbeitet durch User
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 ;-)
Torsten C. schrieb: > Frank M. schrieb: >> Integrator macht man selbstverständlich in Software > > Ich dachte, man macht das selbstvertändlich so wie hier: > > http://www.ersinelektronik.com/class/INNOVAEditor/assets/Datasheets/TSOP2236.pdf Torsten ich bitte Dich, die Postings SORGFÄLTIGER zu lesen! 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! Und wenn Du mal in den WordClock24h-Artikel reinschauen würdest, dann siehst Du auf dem Foto und im Text neben den WS2812-Streifen einen TSOP38238. Link: http://www.mikrocontroller.net/articles/WordClock24h#Hardware
:
Bearbeitet durch Moderator
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 ?
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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!
:
Bearbeitet durch User
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
|
3 | // ...
|
4 | static const char* display[1][WC_ROWS]= {{ |
5 | "ES#IST#VIERTELEINS", |
6 | "DREINERSECHSIEBEN#", |
7 | "ELFÜNFNEUNVIERACHT", |
8 | "NULLZWEI#ZWÖLFZEHN", |
9 | "UND#ZWANZIGVIERZIG", |
10 | "DREISSIGFÜNFZIGUHR", |
11 | "MINUTEN#VORBISNACH", |
12 | "UNDHALBDREIVIERTEL", |
13 | "SIEBENEUNULLZWEINE", |
14 | "FÜNFSECHSACHTVIER#", |
15 | "DREINSUND#ELF#ZEHN", |
16 | "ZWANZIG###DREISSIG", |
17 | "VIERZIGZWÖLFÜNFZIG", |
18 | "MINUTENUHR#FRÜHVOR", |
19 | "ABENDSMITTERNACHTS", |
20 | "MORGENS....MITTAGS"
|
21 | }};
|
1 | #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! Ich lasse ihn erstmal drin, würde ihn aber gern rausschmeißen.
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch Moderator
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
1 | ( tbl_minutes[MINUTE_MODES_COUNT][MINUTE_COUNT].wordIdx[i] == 0 ) |
sondern auch auf
1 | ( i <= MAX_MINUTE_WORDS ) |
abfragst, kracht da at runtime nix.
:
Bearbeitet durch User
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 >
1 | ( tbl_minutes[MINUTE_MODES_COUNT][MINUTE_COUNT].wordIdx[i] == 0 ) |
> sondern auch auf >
1 | ( i <= MAX_MINUTE_WORDS ) |
> abfragst, kracht da at runtime nix.
Damit hast Du vollkommen recht. Okay. Dann hau die PLUS_ONE wech.
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....
:
Bearbeitet durch Moderator
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…) Da ist jetzt die Version:
1 | // Von-Neumann-Variant, Data from WC24h_18x16_V2_2010_1825_9_Dez_2014 CodeGen v0.08
|
2 | // total (tbl_minutes + tbl_hours + tbl_modes + illumination): 7014 bytes
|
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 | int main(array<System::String ^> ^args) |
6 | {
|
7 | return 0; |
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"
:
Bearbeitet durch User
@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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch Moderator
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. ;-)
:
Bearbeitet durch User
Die accdb- und mdb-Tabellen sind korrigiert und hochgeladen.
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!
Herbert P. schrieb: > Die accdb- und mdb-Tabellen sind korrigiert und hochgeladen.
1 | // Von-Neumann-Variant, Data from WC24h_18x16_V2_2010_2003_15_Dez_2014 CodeGen v0.08
|
2 | // total (tbl_minutes + tbl_hours + tbl_modes + illumination): 7014 bytes
|
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".
Torsten C. schrieb: >
1 | // Von-Neumann-Variant, Data from
|
2 | > WC24h_18x16_V2_2010_2003_15_Dez_2014 CodeGen v0.08 |
Vielleicht solltest Du noch die aktuelle Uhrzeit mit hinzunehmen ;-) Leider ist da ein Fehler:
1 | display.h:39:1: error: redeclaration of enumerator 'WP_DUMMY' |
2 | display.h:35:1: note: previous definition of 'WP_DUMMY' was here |
3 | display.h:40:1: error: redeclaration of enumerator 'WP_DUMMY' |
4 | display.h:39:1: note: previous definition of 'WP_DUMMY' was here |
Liegt an Mehrfachverwendung von WP_DUMMY:
1 | enum WordPos { |
2 | WP_DUMMY, // 0 = "0_DUMMY" = "" |
3 | WP_ES, // 1 = "1_ES" = "ES" |
4 | WP_IST, // 2 = "2_IST" = "IST" |
5 | WP_VIERTEL_1, // 3 = "3_VIERTEL" = "VIERTEL" |
6 | WP_DUMMY, // 4 = "4_DUMMY" = "" |
7 | WP_DUMMY, // 5 = "5_DUMMY" = "" |
Besser:
1 | enum WordPos { |
2 | WP_DUMMY, // 0 = "0_DUMMY" = "" |
3 | WP_ES, // 1 = "1_ES" = "ES" |
4 | WP_IST, // 2 = "2_IST" = "IST" |
5 | WP_VIERTEL_1, // 3 = "3_VIERTEL" = "VIERTEL" |
6 | WP_DUMMY_4, // 4 = "4_DUMMY" = "" |
7 | WP_DUMMY_5, // 5 = "5_DUMMY" = "" |
Habe es so mal korrigiert und http://uclock.de/ aktualisiert.
Frank M. schrieb: > "dreiviertel neun" gilt dagegen für > Schwaben und Ossis. Einspruch immer noch! Gilt auch in WB
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:
1 | static const struct Modes tbl_modes[MODES_COUNT] = { |
2 | { 6, 5, L"ES IST HH UHR MM (12)" }, |
3 | { 6, 9, L"ES IST HH UHR MM (24)" }, |
4 | ^ hier muß 6 stehen |
5 | { 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 | ... |
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 |
Und jetzt teste ich.
@Frank: wäre es möglich, in uclock.de die internen Feld-Rahmen auch schwarz einzufärben und damit unsichtbar zu machen?
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?
Hans H. schrieb: > Leider noch zwei kleine Fehler: > >
1 | > static const struct Modes tbl_modes[MODES_COUNT] = { |
2 | > { 6, 5, L"ES IST HH UHR MM (12)" }, |
3 | > { 6, 9, L"ES IST HH UHR MM (24)" }, |
4 | > ^ hier muß 6 stehen |
5 | > { 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.
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?
Frank M. schrieb: > Hans H. schrieb: >> Leider noch zwei kleine Fehler: >> >>
1 | >> static const struct Modes tbl_modes[MODES_COUNT] = { |
2 | >> { 6, 5, L"ES IST HH UHR MM (12)" }, |
3 | >> { 6, 9, L"ES IST HH UHR MM (24)" }, |
4 | >> ^ hier muß 6 stehen |
5 | >> { 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).
:
Bearbeitet durch User
N'Abend, sieht aber alles noch ein wenig wirr aus :-) siehe angehängte Fotos. Oder gibt es eine Gegend auf der Welt wo man so spricht :-) LG, Micha
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.
:
Bearbeitet durch User
Joachim B. schrieb: > Frank M. schrieb: >> Was ist WB? > > https://www.youtube.com/watch?v=sqSHp4vgRkY Okay, betrachte Dich als Ossi, dann passt das ;-)
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/
:
Bearbeitet durch Moderator
@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.
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 ;-)
Hans H. schrieb: > @Frank: Kann ich nicht bestätigen, bei mir tut es. Habs gefunden: Alt:
1 | hour_mode = tbl_modes[mode].hour_txt - 1; |
2 | minute_mode = tbl_modes[mode].minute_txt - 1; |
3 | tbl_minute = &tbl_minutes[minute_mode][minute]; |
Neu:
1 | hour_mode = tbl_modes[mode].hour_txt; |
2 | minute_mode = tbl_modes[mode].minute_txt; |
3 | tbl_minute = &tbl_minutes[minute_mode][minute]; |
Da war also noch so ein 1 vs 0 Problem. Jetzt läufts wesentlich besser :-)
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.
Habs mit Torstens rawgit durchprobiert (hier ist es der Mode "[2] ES IST HH UHR MM", hier tritt der Fehler nicht auf.
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
:
Bearbeitet durch User
Eine Macke habe ich jetzt doch noch gefunden: http://uclock.de/?x=6&h=7&m=40 Da leuchtet das falsche "ZEHN". Aber sonst sieht das verdammt gut aus!
:
Bearbeitet durch Moderator
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
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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
Frank M. schrieb: > Aber fehlerfreien Kleber ;-)))) na ja, mein Stabilit Express lässt langsam nach in der Tube (wird zäh), neuer ist schon geliefert.
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)
Willst Du nicht die 2 Tage warten, bis ich wieder zurueck bin und die 16x 16 Tabellen editiert habe?
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:
1 | this.Length = Convert.ToInt32(reader["length"]); |
2 | this.Text = Data.ColumnExists(reader, "text_show") ? (String)reader["text_show"] : (String)reader["text"]; |
3 | int Suffix = this.Text.Split('*').Length - 1; |
4 | this.ID = (Suffix > 0) ? this.Text.Remove(this.Length) + "_" + Suffix : this.Text; |
:
Bearbeitet durch User
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
:
Bearbeitet durch User
@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)
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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-1284p https://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
:
Bearbeitet durch User
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.html http://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.
:
Bearbeitet durch User
moinmoin Torsten ich brauche genau den im Bild, hab zwar nochmal 10 in China bestellt aber wenn du noch welche hast schreib mir vlG Charly
Charly B. schrieb: > genau den im Bild Das Problem kenne ich, Du hast diese hier: https://dlnmh9ip6v2uc.cloudfront.net/assets/7/f/8/e/f/51eec494ce395f6f4c000000.png Der Unterschied ist i.d.R. bei A4, A5, A6 und A7. Ich habe mich beim letzten Kauf gegen diese Variante entschieden, weil diese vier Pins nicht im Rastermaß für Lochraster sind. Sie sind also anders als Deine. :-( Meine 3,3V-Module haben wiederum ein anderes Raster. Von Deiner Sorte habe ich nur noch 2 Stück, lohnt sich also nicht. Ich finde halt die Baugröße vergleichsweise genial. Daher hatte ich mir so viele gekauft: https://dlnmh9ip6v2uc.cloudfront.net/assets/0/2/0/4/e/51eed447ce395f924b000000.png
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.