Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung Kategorie: Programmierung C (von da hans mal wieder... - 8.08.2012 22:13)
Als Antwort auf Re: Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung von da hans mal wieder... - 8.08.2012 22:05

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


    Antwort schreiben


Antworten:

Re: Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung (von da hans mal wieder... - 8.08.2012 22:31)