Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: DCF Antenne funktioniert, aber die Zeit wird nicht übernommen ? Wieso ? Kategorie: Programmierung Basic (von Ingo - 16.06.2006 17:52)
 Als Antwort auf DCF Antenne funktioniert, aber die Zeit wird nicht übernommen ? Wieso ? von Bravo - 8.06.2006 11:12
Hallo Bravo
Hab mir mal dein Programm angeguckt und meinen Senf dazu gegeben...
und der DCF-Empfang funktioniert.
Gruß

'Basic++2006 v2.1.8
'Station V2.0

define LIGHT         port[16]
define tempO as word
define tempU as word  
const DS1631=158 'Adresse
const DS1632=154 'Adresse
'define ADC8           ad[8]' <-- nicht nötig, wird in Lib\GET_KEY.BAS gemacht
define SDA          port[9]
define SCL          port[10]
define EXTPORT      byteport[4]

DEFINE REL5 AS PORT[1]
'damit auch mehr als ein Relais am EXTPORT (byteport[4]) anziehen kann
'werden die gewünschten zustände in die Hilfsvariable geschrieben, und
'diese dann im Zyklus an den Extport übergeben
define extport4 as byte 'Hilfsvariable zum zwischenspeichern
define REL1 ref extport4 at bit[5]  'port [29]
define REL2 ref extport4 at bit[6]  'port [30]
define REL3 ref extport4 at bit[7]  'port [31]
define REL4 ref extport4 at bit[8]  'port [32]

define Led1 ref extport4 at bit[1]  'Port [25]
DEFINE REL6 ref extport4 at bit[2]  'PORT [26] = Led 2
DEFINE REL7 ref extport4 at bit[3]  'PORT [27] = Led 3
define Led4 ref extport4 at bit[4]  'Port [28]



'define ADC  ad[8] ' <-- nicht nötig, wird in Lib\GET_KEY.BAS gemacht
define DIM1        da[1]
define DIM2        da[2]
'Define Dimmer1     as byte[10] <-- entweder allen Variabeln Speicherstellen zuordnen oder keiner
'kommt sonst zu Mehrfachbelungen der Speicherstellen, je nach Compilerversion
define Dimmer1     as byte
Define Dimmer2     as byte
define HUNDERTER   as byte
define ZEHNER      as byte
define EINER       as byte
define VALUE as word
define VALUE1 as word
define i as byte
define x as byte
define y as byte
define a as byte
define INVALUE2 as word
define hygro as word
DEFINE f AS BYTE
define INVALUE as word
define INVALUE1 as word

import "Lib\GET_KEY.BAS"
import "Lib\GET_VALUE.BAS"
import "lib\Show_Time.BAS"
import "Lib\DS1631_GENERIC.BAS"

    '----- LED HELLIGKEIT -----
const BRIGHT0 =07h
const BRIGHT1 =17h
const BRIGHT2 =27h
const BRIGHT3 =37h
const BRIGHT4 =47h
const BRIGHT5 =57h
const BRIGHT6 =67h
const BRIGHT7 =77h

const h=74h
const t=78h
const u=1Ch
const o=5ch

'               7 SEGMENT DECODER
FUNCTION DECODE (CODE as byte)
SELECT CASE CODE
  CASE 0
  CODE=3Fh
  CASE 1
  CODE=06h
  CASE 2
  CODE=5Bh
  CASE 3
  CODE=4Fh
  CASE 4
  CODE=66h
  CASE 5
  CODE=6Dh
  CASE 6
  CODE=7Dh
  CASE 7
  CODE=07h
  CASE 8
  CODE=7Fh
  CASE 9
  CODE=6Fh
END SELECT
RETURN CODE
END FUNCTION

'--      IIC SEND BUFFER TO SAA1064               ----

FUNCTION SENDBUF(BRIGHT as byte,DIGIT1 as byte,DIGIT2 as byte,DIGIT3 as byte,DIGIT4 as byte)
IIC.INIT
IIC.START
IIC.SEND 118 'WRITE ADDRESS
IIC.SEND 0
IIC.SEND BRIGHT
IIC.SEND DIGIT1
IIC.SEND (DIGIT2 or 128)
IIC.SEND DIGIT3
IIC.SEND DIGIT4
IIC.STOP
IIC.OFF
END FUNCTION

#INIT
LIGHT=off
SDA=on
SCL=on
EXTPORT=off

LIGHT=off
SENDBUF(BRIGHT1,255,255,255,255)
pause 10
SENDBUF(BRIGHT1,0,0,0,0)
pause 10
SENDBUF(BRIGHT1,255,255,255,255)
pause 10
SENDBUF(BRIGHT1,0,0,0,0)
rel1 = off
rel2 = off
rel3 = off
rel4 = off
rel5 = off
rel6 = off
rel7 = off
dim1 = 0
dim2 = 0
Dimmer1 = 0
x=0
dimmer2 =0
y=0

LCD.INIT
LCD.PRINT "TERRA-C v1.0"
 FOR f = 1 TO 3
 BEEP 50, 50, 10
 NEXT f

lcd.clear
'Lcd-Objekt hier schließen, da im DS1631-Abfrage IIC-Objekt geöffnet wird
lcd.off

DS1631RESET(DS1631)
DS1631RESET(DS1632)
DS1631SET_STATUS(DS1631,1)
DS1631SET_STATUS(DS1632,1)
'lcd.off

#LOOP
i= i+1
a= a+1
INVALUE2=GET_key()

if (hour = 07) and (minute = 00) then
DIMMER1 = 1
end if
if (hour = 17) and (minute = 00) then
DIMMER1 = 2
end if
 
if dimmer1 = 1 then
 if a = 114 then
 if x < 255 then
 x = x+1
 Dim1 = x
 end if
 end if
 end if
 
 If Dimmer1 = 2 then
 if a = 114 then
 if x > 0 then
 x = x-1
 Dim1 = x
 end if
 end if
 end if
 
 if dimmer1 = 3 then
 if x < 255 then
 x = x+5
 Dim1 = x
 end if
 end if
 
 If Dimmer1 = 4 then
 if x > 0 then
 x = x-5
 Dim1 = x
 end if
 dimmer1 =0
 end if
 
print x & "   " & y & "  " & Hour & ":" & minute & ":" & Second & "  " & dimmer1

if invalue2 = 1 then rel1 = on
if invalue2 = 2 then rel2 = on
if invalue2 = 3 then rel3 = on
if invalue2 = 4 then rel4 = on
if invalue2 = 5 then rel5 = on
if invalue2 = 6 then rel6 = on
if invalue2 = 7 then rel7 = on
 
if invalue2 = 9 then
dimmer1 = 3
end if

if invalue2 = 12 then rel1 = off
if invalue2 = 12 then rel2 = off
if invalue2 = 12 then rel3 = off
if invalue2 = 12 then rel4 = off
if invalue2 = 12 then rel5 = off
if invalue2 = 12 then rel6 = off
if invalue2 = 12 then rel7 = off
if invalue2 = 0 then
dimmer1 = 4
end if

 if (hour = 22) and (minute = 30) then REL1 = ON
 if (hour = 22) and (minute = 37) then REL1 = OFF
 if (hour = 22) and (minute = 31) then REL2 = ON
 if (hour = 22) and (minute = 36) then REL2 = OFF
 if (hour = 22) and (minute = 32) then REL3 = ON
 if (hour = 22) and (minute = 35) then REL3 = OFF
 if (hour = 22) and (minute = 33) then REL4 = ON
 if (hour = 22) and (minute = 34) then REL4 = OFF

if invalue2 = 13 then
lcd.init
lcd.clear
LCD.PRINT "UHR STELLEN"
pause 30
lcd.clear
LCD.PRINT "STUNDE STELLEN "
INVALUE=GET_VALUE()
hour = INVALUE
pause 30
LCD.Clear
LCD.PRINT "MINUTE STELLEN"
INVALUE1=GET_VALUE()
minute = INVALUE1
pause 30
lcd.off
end if

DS1631CONVERT(DS1631)
DS1631WAIT_READY(DS1631)
TEMPo=DS1631GET_TEMP(DS1631)
TEMPo=TEMPo SHR 7
if (TEMPo and 0100h) = 0100h then TEMPo=(TEMPo or FE00h)
value= (tempo*10)/2
HUNDERTER=VALUE/100
ZEHNER=(VALUE-(HUNDERTER*100))/10
EINER=VALUE-HUNDERTER*100-ZEHNER*10
LIGHT=off
if i = 1 then  SENDbUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),t)
If i = 7 then  SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),o)
if i = 14 then  SENDBUF(BRIGHT1,0,0,0,0)

DS1631CONVERT(DS1632)
DS1631WAIT_READY(DS1632)
TEMPu=DS1631GET_TEMP(DS1632)
TEMPu=TEMPu SHR 7
if (TEMPu and 0100h) = 0100h then TEMPu=(TEMPu or FE00h)
value1= (tempu*10)/2
HUNDERTER=VALUE1/100
ZEHNER=(VALUE1-(HUNDERTER*100))/10
EINER=VALUE1-HUNDERTER*100-ZEHNER*10
LIGHT=off
if i= 15 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),t)
if i= 22 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),u)
if i= 29 then SENDBUF(BRIGHT1,0,0,0,0)

hygro= (60*10)/2
HUNDERTER=hygro/100
ZEHNER=(hygro-(HUNDERTER*100))/10
EINER=hygro-HUNDERTER*100-ZEHNER*10
LIGHT=off
if i= 30 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),h)
if i= 37 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),o)
if i= 44 then SENDBUF(BRIGHT1,0,0,0,0)
if i= 45 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),h)
if i= 52 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),u)
if i= 59 then SENDBUF(BRIGHT1,0,0,0,0)

lcd.init
       
LCD.POS 1,1
lcd.print SHOW_TIME()
LCD.pos 1,10
LCD.PRINT " H:"  & hygro/10 & "." & (hygro and 1)*5 & "%"
LCD.POS 2,1
LCD.PRINT "T1:" & value/10 & "." & (value and 1)*5 & "°"
LCD.pos 2,9
LCD.PRINT "T2:" & value1/10 & "." & (value1 and 1)*5 & "°"
lcd.off

if i= 60 then i=0
if a= 115 then a=0

EXTPORT = extport4 ' <-- Hilfsvariable an den Extport übergeben = Relais schalten

goto LOOP


 Antwort schreiben

Bisherige Antworten: