Re: Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung Kategorie: Programmierung C (von da hans mal wieder... - 8.08.2012 22:31) | |
Als Antwort auf Re: Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung von da hans mal wieder... - 8.08.2012 22:13
| |
> > > Moin! > > > > > > > > > Ich lese hier schon lange gelegentlich mit, habe aber nicht so viel Zeit zum > > > Basteln, wie ich gerne hätte. > > > Jetzt bin ich aber gerade schwer dabei, ein kleines Projekt umzusetzen: > > > Einen Raumthermostat für meine Fu�bodenheizung. > > > Die am Markt befindlichen Modelle sind mir in der Bedienung entweder zu > > > unübersichtlich oder von den Funktionen her zu beschränkt. > > > Ich möchte für jeden Tag ein Profil mit 4 Zeitpunkten definieren können. > > > Im Endausbau sollen die Profile über meinen Webserver bequem per Browser > > > gepflegt werden können. Aber das ist noch Zukunftsmusik... > > > > > > > > > Zunächst bin ich beim Prototypen des einzelnen Themostaten. Folgende > > > Hardware habe ich mir überlegt: > > > - C-Control Pro Mega32 > > > - Grafikdisplay 128 x 64 Pixel (Controller KS0107, Conrad Best-Nr. 181677 - 62) > > > - Temperatursensor DS 18S20 > > > - Inkrementaldrehgeber mit Tastfunktion zur Bedienung (evtl. auch Scrollrad > > > aus einer Maus) > > > - RGB-LED zur Statusanzeige > > > - Piezo-Schallwandler für z.B. Tastenclick > > > - RS-485/RS-422 für spätere Vernetzung > > > - Relais für Ventilansteuerung > > > optional: > > > - Lichtsensor TSL 2561 D zur dynamischen Regelung der LCD-Beleuchtung > > > > > > > > > Den Prototypen baue ich gerade auf dem Project-Board auf und bin zunächst > > > dabei, das Display zum Laufen zu bekommen. > > > Da ich reichlich Ports habe, habe ich das Display direkt angeschlossen: > > > Datenbus ist Port A, Steuersignale kommen von einzelnen Bits von Port C. > > > Das klappt auch soweit sehr gut. Leider habe ich dafür nirgends eine Lib > > > gefunden, so dass ich selber eine mache. > > > Die ist noch im Aufbau und nicht reif zur Veröffentlichung, aber später > > > kann man darüber vielleicht nachdenken. > > > > > > Folgende Funktionen habe ich schon umgesetzt: > > > - Display initialisieren, löschen > > > - Setzen der Zeile im Ram, die als oberste Zeile auf dem Display angezeigt > > > werden soll (man kann damit z.B. den Displayinhalt Zeilenweise hoch- oder > > > runterscrollen) > > > - Datenbyte an beliebiger Adresse schreiben/lesen > > > - Setzten oder Löschen eines beliebigen Pixels > > > - Schreiben von Text: Der Controller hat keinen Text "eingebaut" und ist > > > wirklich dumm: > > > Das Display besteht eigentlich aus zwei Displays (2 Controller), mit > > > 64 x 64 Pixeln. > > > Jede Spalte ist in 8 Bytes eingeteilt. Jeder Controller besitzt somit einen > > > Speicher von 8x64 Byte. > > > Jeder Pixel auf dem LCD entspricht einem Bit im Speicher. > > > Um nun Text darzustellen, habe ich einfach ein Byte-Array der Grö�e 128 x 5 > > > angelegt. Jeder Buchstabe besteht aus 5 x 7 Pixeln, genau wie bei den > > > Alphanumerischen LCDs. > > > > > > Pro Buchstabe benötige ich also 5 Byte. Mit einem Pixel Abstand kann man > > > also 21 Zeichen pro Zeile darstellen. Also insgesamt 21 x 8 Zeichen. > > > Ich habe die ersten 128 Zeichen des alphanumerischen Displays "nachgebaut". > > > Die interessanten Zeichen oberhalb von 128 (z.B. kleine Umlaute) habe ich an > > > den Anfang (<31) gesetzt. > > > > > > Somit stellt sich dieses Display als gute Alternative zu den > > > alphanumerischen Displays dar, weil man für weniger Geld statt 4 x 20 glatte > > > 8 x 21 Zeichen bekommt + die grafischen Funktionen. :-) > > > - Von der Wikipedia habe ich noch Funktionen für beliebige Linien und Kreise > > > übernommen (Bresenham-Algorithmus), die ich nicht wirklich verstanden habe, > > > aber sie funktionieren. ;-) > > > > > > Es fehlt noch: > > > - Rechtecke (mit unterschiedlicher Rahmenstärke oder gefüllt) > > > - Verschiedene Verknüpfungen mit dem bestehenden "Bild": überschreiben, > > > invertiert, xor, or für alle Funktionen. > > > - Darstellung von grö�eren Ziffern (z.B. 24 Pixel hoch - für den > > > Temperatur-Istwert) > > > > > > > > > Nachdem ich das Display soweit im Griff habe, habe ich mich dem Drehgeber > > > zugewandt: > > > Ich werte ihn in einem externen Interrupt aus: > > > void INT_Inc(void) > > > { > > > Inc_Dir=Port_ReadBit(IN_D); > > > AbsDelay(1); //entprellen > > > Irq_GetCount(INT_1); > > > } > > > > > > ich starte die Auswertung mit > > > Irq_SetVect(INT_1,INT_Inc); > > > Ext_IntEnable(1,2); > > > > > > und meine Schleife sieht so aus: > > > while(1) > > > { > > > if (Inc_Dir==0) > > > { > > > Inc_Dir=2; > > > if (i<127) > > > i++; > > > } > > > else if (Inc_Dir==1) > > > { > > > Inc_Dir=2; > > > if (i>0) > > > i--; > > > } > > > if (j!=i) > > > { > > > WertAnzeigen(i); > > > j=i; > > > //Timer_T0PWM(i*2+1,PS0_8); <- hiermit hakt es > > > } > > > } > > > > > > So wie es oben steht funktioniert es ganz OK. Gibt es bessere Ideen? Ich > > > habe nämlich das Problem, dass die Auswertung hakt, wenn ich den PWM- > > > Ausgang mit dem Wert beschicke (oben auskommentiert), um die LED-Beleuchtung > > > des Displays zu dimmen, dann reagiert das Programm nicht mehr gut auf den > > > Drehimpulsgeber. (Der ist angeschlossen, wie im Datenblatt beschrieben mit > > > 4 x 10 kOhm Widerständen und 10nF Kondensatoren.) > > > > > > > > > Nun die Fragen: > > > 1. Haltet Ihr meine Hardware-Auswahl für geeignet? > > > 2. Wenn nein, was gibt es besseres? > > > 3. Gibt es vielleicht einen Temperatursensor mit höherer Auflösung? > > > 4. Warum hakt die Auswertung des Drehgebers bei gleichzeitiger Verwendung > > > von PWM? > > > 5. Kann ich da etwas optimieren, oder ist die Mega32 dafür zu langsam? > > > 6. Weitere Ideen, Anregungen? ;-) > > > > > > Vielen Dank schon einmal. Es werden wohl im Verlauf des Projektes weitere > > > Fragen kommen... > > > > > > Gru� von der Küste > > > > > > Jan > > > > wenn du extra zu Conrad fährst um die Teile zu kaufen, warum nimmst du dann eine Mega32 und > > keine 128er? > > und wer hat diese anleitung überhaupt "geschrieben" oder ge PDF t.... falsch ge postet, vergiss des mit der Anleitung wieder | |
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum