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:05)
Als Antwort auf Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung von Seeman - 8.08.2012 21:42

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


    Antwort schreiben


Antworten:

Darum keine Mega128 - oder doch? (von Seeman - 8.08.2012 22:19)
    Re: Darum keine Mega128 - oder doch? (von da hans mal wieder... - 8.08.2012 22:59)
        Re: Darum keine Mega128 - oder doch? (von da Hans schon wieder - 9.08.2012 18:39)
Re: Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung (von da hans mal wieder... - 8.08.2012 22:13)
    Re: Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung (von da hans mal wieder... - 8.08.2012 22:31)