@ Jochn.... ja, im Prinzip sollte nocht viel dahinterstecken,
Was ich einfach möchjte Währe, dass wenn ein bestimmtest Zeichen
erhaöten wird, ich in ein Menüinterface komme, wo ich mit die aktuelle
Temperatur anschauen kann, die Hysterese verändern (num) und die Heizung
manuell ein- od. ausschalten kann.
Das ist natürlich nur der Prototyp des Programmen, es kommen dann noch
Stellventil, Aussentemperatur und 2 Pumpen dazu....
hier mal ein Teil des Sources
#include <AT89X52.H>
#include <stdio.h>
#ifndef READ
#define READ 1
#endif
#ifndef WRITE
#define WRITE 0
#endif
#ifndef I2CCLK
#define I2CCLK 0xA0
#endif
#ifndef SCL
#define SCL P1_6
#endif
#ifndef SDA
#define SDA P1_7
#endif
unsigned char _i2c_error; // bit array of error types
void _I2CBitDly(void);
void _I2CSCLHigh(void);
void I2CSendAddr(unsigned char addr, unsigned char rd);
void I2CSendByte(unsigned char bt);
int _I2CGetByte(unsigned char lastone);
void I2CSendStop(void);
#define I2CGetByte() _I2CGetByte(0)
#define I2CGetLastByte() _I2CGetByte(1)
#define XTAL 11.0592 // Quarzfrequenz in MHz
#define BAUD 9600 // Baudrate
int b,c,kom,v,num=20,nume=0,q=1;
char ch;
main()
{
const unsigned int RCAP2 = 0x10000-XTAL*1e6/(32.0*BAUD); //
Rückladewert timer-2
TMOD = 0x20;
TH1 = 0xfd;
TR1 = 1;
SCON = 0x5a;
REN = 1; // Empfänger freischalten
TI = 1; // Senden des 1. Zeichens ermöglichen
while(getchar() != 'x');
P1=255; //Port1 zum Empfangen bereit
P1_4=0;
P1_5=0; //Relais ausschalten
while(1){
I2CSendAddr(0x90,WRITE);
I2CSendByte(0);
I2CSendStop();
I2CSendAddr(0x90,READ);
b = I2CGetByte();
c = I2CGetLastByte();
I2CSendStop();
/*
b... 00000000 temperatur im 2er-Komplement
^....Vorzeichen (0-positiv, 1-negativ)
c... 00000000
^....Wenn 1 dann b += 0.5°C
0x90... 10010000
^^^^ .... Adresse des Bausteinhersteller
^^^ .... Adresse die am Baustein gesetzt werden kann
^ .... Lesen/Schreiben ( wird durch WRITE od. READ gesetz)
*/
printf("\nmesse...\n"); //koninuierliche Statusmeldung
if (c>=128) //auf .5 Werte überprüfen
kom=1;
else
kom=0;
v=0;
//---- Hysterese ---- Einschalten bei 2°C unter Sollwert,
ausschalten bei 2°C über Sollwert
if (b<(num-2)) //Wenn Ist-Wert 2°C kleiner als Soll-Wert ->
Heizung
ein
P1_4=1;
if (b>(num+2))
P1_4=0; //Wenn Ist-Wert 2°C größer als Soll-Wert -> Heizung
aus