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

Hardware reicht aus Kategorie: Verschiedenes (von Montelucon - 9.08.2012 17:03)
Als Antwort auf Projektvorstellung Raumthermostat mit Grafikdisplay - Frage zu Drehgeberauswertung von Seeman - 8.08.2012 21:42

Hallo Jan,

ich habe ein sehr ähnliches Projekt realisiert.
Allerdings habe ich die Steuerung der Vorlauftemperatur und einzelnen Heizkreisläufe
der FuÃ?bodenheizung mit der Mega32 umgesetzt. Also genau das andere Ende deiner Thermostate.

Eins vorweg.
Ich wollte auch die Thermostate selber bauen und hatte ähnliche Features wie Du im Kopf.
Nachdem ich aber den Strombedarf und die Kosten durchgerechnet hatte,
habe ich den Plan ganz schnell fallen lassen. Du wirst alle Nase lang die Akkus wechseln müssen und
 im Selberbau wird es nicht billiger.
Zu der Elektronik kommt nämlich noch ein Gehäuse und einiges mehr.

Ich kann leider nicht alle deine Fragen beantworten.

Deine Hardwareauswahl ist für das was Du vor hast vollkommen ausreichend.
Zur Messung der Temperaturen verwende ich auch mehrere 1-Wire DS 18S20 und alle arbeiten vollkommen problemlos.
Deine Lösung mit dem Grafikdisplay ist super, allerdings ist mir das viel zu teuer.
(alphanumerisches Display 4x20 = 5 EUR)
Aber ich nehme deine Idee für ein anderes Projekt. Also Danke dafür.

Von dem Mausrad als Inkrementalgeber würde ich die Finger lassen.
Ich habe es probiert und das war ... sagen wir mal nicht so optimal.
(Die Stromversorgung und der Einbau sind der Knackpunkt)

Kaufe dir einen günstigen (nicht billigen!) Drehgeber mit Drucktaster.
Das spart Platz und funktioniert sehr sicher.

Die Mega32 war absolut ausreichend und lies Luft nach oben.
Solltest Du aber darüber nachdenken irgend welche Wert auf SD speichern zu wollen,
z.B. Temperaturverlauf, dann nehme eine Mega128.
Soweit ich wei� gibt es für die Mega32 keine Möglichkeit auf einer SD Karte zu speichern.
Allerdings habe ich mich schon sehr lange nicht mehr mit den Megas beschäftigt.
Das mit der SD-Karte/USB-Stick war der Grund warum ich auf eine völlig andere Hardware umgestiegen bin.

Mehr kann ich dir leider zu deinem Projekt nicht sagen.

Ich wünsche dir viel Erfolg in deinem Projekt und vor allem viel Freude dabei.
Montelucon



> 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


    Antwort schreiben


Antworten:

Re: Hardware reicht aus (von Seeman - 9.08.2012 20:14)
    Nur noch so... (von Montelucon - 11.08.2012 1:29)