PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funksender über PC->Relaisplatine



opatzki
17.04.2005, 20:26
Hallo,
Ich möchte über PC->Relaisplatine 8-fach seriell von Conrad einen Funksender ansteuern der entferntere Steckdosen Schaltet. Das Problem ist das die Relaiskarte 8 x Schließer Relais hat und der Funksender 4 Empfänger durch Tastendruck 1 Taste einschalten und 2 Taste ausschalten.Also 4 Kanäle mit je 2 Tasten = 8 anzusteuernde Eingänge ich möchte aber nur 4 Relaisausgänge hier für benutzen. Meine Überlegung ist zwischen Relaisplatine 8-fach und Funksender die M-Unit zu schalten ;über die ersten Ports 9- 12 der M-Unit Kanal 1-4 :Leigt ein Eingangssignal Kanal1 = ON an soll ein Timer Programm gestartet werden und Schaltet Ausgang1 (Port 1) für eine sek. ein und fällt dann ab ,- wird Eingangssignal kanal1 = OFF ausgeschaltet Startet wieder Timer Programm und Schaltet Ausgang2 (Port 2) für eine sek. ein und fällt dann ab .Das ganze für Kanal 2 , 3 und 4 ;(Port10 ,Port3 ,Port4 / Port11 ,Port5 ,Port6 / Port12 ,Port7 ,Port8)
Leider bekomme ich das mit dem Programieren nicht hin , die Befehle Pause und Wait kann ich hierbei nicht gebrauchen.Mit dem Pause Befehl wird das alles gans schön lange dauern(die ansprechzeit der eingänge) und mit wait hält das Programm solange an bis ich einen (alle)eingänge freigegeben habe.

Ich würde mich sehr freuen wenn ihr mir helfen könnten!

Gruß
opatzki

Klaus_0168
20.04.2005, 00:25
Hi Opatzki,

eine Möglichkeit : ersetze der Waitbefehl durch eine For-Next-Schleife.
zweite Möglichkeit : Falls Interrupts zur Verfügung stehen kannst Du diese zum Hochzählen von definierten Zeitabständen nutzen.

Poste Doch mal, was Du schon selbst erstellt hast. Fertiglösungen wirst Du hier nicht finden.
Frage : benutzt DU CCU1 oder CCU2 ?

Gruß Klaus

opatzki
21.04.2005, 00:50
Hallo Klaus,
erst einmal vielen Dank das du diech gemeldet hast, ich habe auch nicht erwartet das ich eine Fertiglösung hier bekomme.
Leider weiß ich mit For-Next-Schleife und/oder Interrupts nichts anzufangen ,das da unten ist mein Erstes Programm!
Nun hier ist was ich bis jetzt gemacht habe:

'Zwischensteuerung PC/8-Kanal Relaiskarte seriell -> 4/4 Kanal tast Funksteuerung
'über CCBasic M-Unit 1
' by O.Patzki

' Relais
define relais1 port[1]
define relais2 port[2]
define relais3 port[3]
define relais4 port[4]
define relais5 port[5]
define relais6 port[6]
define relais7 port[7]
define relais8 port[8]

' Eingänge
define key1 port[9]
define key2 port[10]
define key3 port[11]
define key4 port[12]

'Abfrage der Eingänge und Zuordnung Kanal 1-4
#loop
if key1 = ON then gosub kanal1
if key2 = ON then gosub kanal2
if key3 = ON then gosub kanal3
if key4 = ON then gosub kanal4

'Hier liegt mein Hauptproblem ist einer der keys 1-4 akriv werden die andenen blockiert ,
'es muß aber jeder eingang zu jeder zeit abgefragt werden können und das Programm muß permanent
'durchlaufen so das auch bei aktiven keys/eingängen auch die anderen kes/eingänge schalten können!
'bis auf dieses Problem lauft es gans nach meinen vorstellungen.

goto loop

'Ablauf Kanal 1
#kanal1
relais1 = ON
pause 100
relais1 = OFF
if key1 = ON then wait key1 = OFF
if key1 = OFF then relais2 = ON
pause 100
relais2 = OFF
return

'Ablauf Kanal 2
#kanal2
relais3 = ON
pause 100
relais3 = OFF
if key2 = ON then wait key2 = OFF
if key2 = OFF then relais4 = ON
pause 100
relais4 = OFF
return

'Ablauf Kanal 3
#kanal3
relais5 = ON
pause 100
relais5 = OFF
if key3 = ON then wait key3 = OFF
if key3 = OFF then relais6 = ON
pause 100
relais6 = OFF
return

'Ablauf Kanal 4
#kanal4
relais7 = ON
pause 100
relais7 = OFF
if key4 = ON then wait key4 = OFF
if key4 = OFF then relais8 = ON
pause 100
relais8 = OFF
return

Gruß
OPatzki

Klaus_0168
21.04.2005, 14:07
Hi opatzki,

Dein Problem ist, das Du bei eingeschaltetem Relais darauf wartest, bis das Relais wieder ausgeschaltet wird. warum ??? Dazu besteht keine Notwendigkeit.

Vorschlag :
schreibe statt der 4 Routinen zur Behandlung komlpetter Schaltvorgänge 8 Routinen in denen nur das Umschalten abgearbeitet wird.

Beispiel :
Wenn ein Relais ausgeschaltet ist und der Einbefehl kommt, verzweige (per If - then; wie gehabt) in die Routine die das Ralais einschaltet und gehe zu Deinem Loop zurück.

Wenn jetzt bei eingeschaltetem Relais der Ausbefehl kommt, verzweige in eine zweite Routine in der das Relais wieder ausgeschaltet wird und gehe wieder zum Loop zurück.

Es ist nicht notwendig, bei eingeschaltetem Relais darauf zu warten, bis es wieder ausgeschaltet wird. Besonders, da das Relais mit einem speichernden Befehl eingeschaltet wurde.

Gruß Klaus

opatzki
21.04.2005, 21:16
Hallo Klaus,
danke für die Hilfe ,hier meine geänderte Version.Doch leider tut sich da ein neues Problem auf ,und zwar läuft die Routine jetzt einen teil nach dem anderem ab ist ja auch gut so aber bei jedem durchgang werden die ausgänge aktualiesiert und die Funkfernbedienung bekommt somit alle par sekunden einen Schaltimpuls so dass sie z.b. wenn Kanal1 ON ist für sagen wir 2 bis 3 Stunden dann wird die Funkfernbedienung für diese Zeit alle paar sek. eingeschaltet und die anderen Kanäle verhalten sich eben so .Die Eingänge müssen ständig abgefragt werden aber die Ausgänge sollen Ihren zugewiesenen Zustand beibehalten.
Was muß ich ändern?

'Zwischensteuerung PC/8-Kanal Relaiskarte seriell -> 4/4 Kanal tast Funksteuerung
'über CCBasic M-Unit 1
' by O.Patzki

' Relais
define relais1 port[1]
define relais2 port[2]
define relais3 port[3]
define relais4 port[4]
define relais5 port[5]
define relais6 port[6]
define relais7 port[7]
define relais8 port[8]
' Eingänge
define key1 port[9]
define key2 port[10]
define key3 port[11]
define key4 port[12]

'Abfrage der Eingänge und Zuordnung Kanal 1-4
#loop
if key1 = ON then gosub kanal1on
if key1 = OFF then gosub kanal1off
if key2 = ON then gosub kanal2on
if key2 = OFF then gosub kanal2off
if key3 = ON then gosub kanal3on
if key3 = OFF then gosub kanal3off
if key4 = ON then gosub kanal4on
if key4 = OFF then gosub kanal4off

goto loop
'Ablauf Kanal 1
#kanal1on
relais1 = ON
pause 50
relais1 = OFF
return

#kanal1off
relais2 = ON
pause 50
relais2 = OFF
return
'Ablauf Kanal 2
#kanal2on
relais3 = ON
pause 50
relais3 = OFF
return

#kanal2off
relais4 = ON
pause 50
relais4 = OFF
return
'Ablauf Kanal 3
#kanal3on
relais5 = ON
pause 50
relais5 = OFF
return

#kanal3off
relais6 = ON
pause 50
relais6 = OFF
return
'Ablauf Kanal 4
#kanal4on
relais7 = ON
pause 50
relais7 = OFF
return

#kanal4off
relais8 = ON
pause 50
relais8 = OFF
return

Gruß
Olli

Klaus_0168
22.04.2005, 12:04
Hi Olli,
als Beispiel habe ich mal den Kanal 1 genommen und diesen Programmausschnitt mit Zeilennummern versehen.



1 Ablauf Kanal 1
2 #kanal1on
3 relais1 = ON
4 pause 50
5 relais1 = OFF
6 return
7
8 #kanal1off
9 relais2 = ON
10 pause 50
11 relais2 = OFF
11 return


Die Routine zum Einschalten von Kanal 1 beginnt ab Zeile 2 und endet in der Zeile 6.
Frage :
Was hat ein Ausschaltbefehl in einer Routine zum Einschalten eines Ausgangs zu suchen ???
Die gleiche Frage in entgegengesetzter Richtung stellt sich in der Routine zu Auschalten von Kanal 1 (Zeilen 8 bis 11).
Stell' Dir vor, Du bist der Prozessor und arbeitest Zeile für Zeile Dein Programm durch. Dann wirst Du feststellen, welche Zeilen unnötig sind. (Dies war keine Zaunlatte sondern der gesamte Lattenzaun).

Falls mein Privat-Rechner morgen noch funktioniert, ich hab' gerade ein Monitorproblem, gibt es die Lösung morgen, ansonsten am Montag.
Viel Spass beim Knobeln. Du bist nur noch einen Millimeter von der Lösung entfernt.

Gruß Klaus

opatzki
24.04.2005, 01:37
Hallo Klaus,
"der Lattenzaun steht leider auf einer anderen Baustelle ca. 1Km entfernt",ich glaube das ich mein Problen nicht richtig geschildert habe. So wie du das jetzt auseinander gepflückt hast , hast du völlig recht .Aber der Ausschaltbefehl in der Routine zum Einschalten des Ausgangs und umgekert hat folgenden grund:die Funkfrenbedinung hat 4 Taster zum einschalten und 4 Taster zum ausschalten ,diese Taster werde ich ausbauen und durch die M-Unit mit den Portausgängen ersetzen bei den eingängen sieht es so aus ,4 Relais mit 1*ein(Relais hat angezogen = kontakt 1 u 2 durchgeschaltet ; Relais ist gelöst = kontakt 1 u 2 offen )das heist schalte ich das Relais ein dann ist das ein ON Signal in der Unit also wird der ausgang Port 1 auch auf ON gesetzt und der (Taster An) auf der Fernbedinung für Kanal 1 wird durch geschaltet ! Jetzt wird ein einschaltsignal zun 1 Empfänger gesendet ,löse ich den (Taster An) jetzt nicht wird dieses Signal permanent gesendet und die Fernbedinung verbrät ständig Strom weil sie ja dieses Signal permanent sendet auserdem sind da durch die anderen Kanäle blockiert weil die auf der selben Frequenz senden ! Aus diesem Grund habe ich die Routine wie du sie gesehen hast geschrieben . Würde ich es so programieren wie du es mir vorschlagen wolltest ,Sprich
1 Ablauf Kanal 1
2 #kanal1on
3 relais1 = ON
6 return
7
8 #kanal1off
9 relais2 = ON
11 return
dann wäre die M-Unit völlig über flüssig.
Ich setze die M-Unit nur als "Intelligentes Relais "ein .Es gillt also jetzt die frage zu lösen wie frage ich die Eingänge ab ohne das ein ausgang der gerade aktiviert/deaktiviert wurde sofort wieder geschaltet wird.
Beispiel:
Ist key 1=ON dann relais1 = ON (Taster 1/an durchsschalten -> Funksignal Ein senden) pause 50" jetzt nach 1 Sekunde diesen Kontakt lösen" relais1 =OFF"wenn du eine fernbedinung benutzt und den Finger auf eine Taste drückst um einen Kanal zu schalten nimmst du ihn ja auch wieder runter "
Anders weiß ich leider nicht wie ich dir mein problem sonst beschreiben soll!
Gruß
Olli

opatzki
24.04.2005, 11:36
Hallo Klaus,
ich habe vergangene Nacht drei Stunden getüftelt und bin zu einem super Ergebnis gekommen ,jetzt läuft es so wie ich mir das ganze vorgestellt habe .Schau es dir selber mal an und berichte mir was du davon hälst ,vieleicht fällt dir ja was auf was überflüssig ist und nur Speicherplatz frisst.

'Zwischensteuerung PC/8-Kanal Relaiskarte seriell -> 4/4 Kanal tast Funksteuerung
'über CCBasic M-Unit 1
' by O.Patzki

' Relais
define relais1 port[1]
define relais2 port[2]
define relais3 port[3]
define relais4 port[4]
define relais5 port[5]
define relais6 port[6]
define relais7 port[7]
define relais8 port[8]
define kontroll1 port[13]
define kontroll2 port[14]
define kontroll3 port[15]
define kontroll4 port[16]

' Eingänge
define key1 port[9]
define key2 port[10]
define key3 port[11]
define key4 port[12]

'Abfrage der Eingänge und Zuordnung Kanal 1-4
#loop
if key1 = ON then gosub kontrollon
if key2 = ON then gosub kontrollon
if key3 = ON then gosub kontrollon
if key4 = ON then gosub kontrollon
if key1 = OFF then gosub kontrolloff
if key2 = OFF then gosub kontrolloff
if key3 = OFF then gosub kontrolloff
if key4 = OFF then gosub kontrolloff
goto loop

'Überprüfung
#kontrollon
if kontroll1 = OFF and key1 = ON then gosub kanal1on
if kontroll2 = OFF and key2 = ON then gosub kanal2on
if kontroll3 = OFF and key3 = ON then gosub kanal3on
if kontroll4 = OFF and key4 = ON then gosub kanal4on
return

#kontrolloff
if kontroll1 = ON and key1 = OFF then gosub kanal1off
if kontroll2 = ON and key2 = OFF then gosub kanal2off
if kontroll3 = ON and key3 = OFF then gosub kanal3off
if kontroll4 = ON and key4 = OFF then gosub kanal4off
return

'Ablauf Kanal 1
#kanal1on
kontroll1 = ON
relais1 = ON
pause 50
relais1 = OFF
return

#kanal1off
kontroll1 = OFF
relais2 = ON
pause 50
relais2 = OFF
return

'Ablauf Kanal 2
#kanal2on
kontroll2 = ON
relais3 = ON
pause 50
relais3 = OFF
return

#kanal2off
kontroll2 = OFF
relais4 = ON
pause 50
relais4 = OFF
return

'Ablauf Kanal 3
#kanal3on
kontroll3 = ON
relais5 = ON
pause 50
relais5 = OFF
return

#kanal3off
kontroll3 = OFF
relais6 = ON
pause 50
relais6 = OFF
return

'Ablauf Kanal 4
#kanal4on
kontroll4 = ON
relais7 = ON
pause 50
relais7 = OFF
return

#kanal4off
kontroll4 = OFF
relais8 = ON
pause 50
relais8 = OFF
return

Gruß
Olli O:) \:D/

Klaus_0168
25.04.2005, 19:12
Hi Olli,

da muss ich erst mal eine Meditationsrunde einlegen :-k . Es funzt zumindest mal, das ist der erste Schritt. Jetzt habe ich auch verstanden, was Du erreichen wolltest. Da habe ich in eine total falsche Richtung gedacht.

Schau Dir mal die Befehle 'PULSE' und 'AND' an. Die könnten Dir helfen den Code weiter zu komprimieren. Ich werde selbst erst mal ein wenig probieren, bevor ich noch was falsches sage.

Gruß Klaus

PS: dies war Posting Nr. 125

Oskar
27.04.2005, 13:02
Hallo Olli,
vielleicht kannst Du ja hiermit etwas anfangen.

'************************************************* *******************
'
' letztes Update: 29.3.2005
'
' C-Control/BASIC
'
' Systemvoraussetzungen:
'
' - Application Board mit angeschlossenem Display
'
' Schwerpunkt:Lichtsteuerung Funksteckdose
'

' Ver: Date: Bemerkung:
' 0.01 08.09.2003 Time und Temp wird auf dem Display angezeigt
' 0.02 08.09.2003 Zeitanzeige ist nach rechts gerückt
' 0.03 13.09.2003 Temp wird abgefragt (noch zu langsam)wieder deaktiviert (30.10.2003)
' 0.04 14.09.2003 Text im Display wird korrekt angezeigt
' 0.05 25.09.2003 Piep Ton beim Start des Programmes
' 0.06 30.10.2003 Tastatur funktioniert endlich
'************************************************* *******************

'Relais
define Relais1 port[1]
define Relais2 port[2]
define Relais3 port[3]
define Relais4 port[4]
define Relais5 port[5]
define Relais6 port[6]
define Relais7 port[7]
define Relais8 port[8]

define relais byteport[1]
define temp AD[1] ' nimmt die Temperaturwerte auf

define tastatur ad[8] ' Tastatur wird definiert auf Port 8


' *** Daten-Definition ***
define value word
define output word
define vario word

define lcd_buf byte
define lcd_param byte

define lastsec byte

define key_nr byte
define key_rel byte
define compare byte
define xy byte
define i byte



' *** Definition LCD-Ports ***
define lcd_port byteport[2]
define lcd_rs port[14]
define lcd_rw port[13]
define lcd_e port[15]
BEEP 625,12,1 : BEEP 500,12,1 : BEEP 425,12,1 : BEEP 312,24,1 'Tonausgabe beim Start des Programms

'*********************************** ASCII-Codes für die Displayausgabe ********************************************
define A_ &H41
define B_ &H42
define C_ &H43
define D_ &H44
define E_ &H45
define F_ &H46
define G_ &H47
define H_ &H48
define I_ &H49
define J_ &H4A
define K_ &H4B
define L_ &H4C
define M_ &H4D
define N_ &H4E
define O_ &H4F
define P_ &H50
define Q_ &H51
define R_ &H52
define S_ &H53
define T_ &H54
define U_ &H55
define V_ &H56
define W_ &H57
define X_ &H58
define Y_ &H59
define Z_ &H5A

define LEERZ &H20
define MINUS &H2D
define NULL &H30
define GLEICH &H3D
define DOPPELPUNKT &H3A

'*************************************** Programmoperationen ************************************************

gosub LCD_INIT

#LOOP
if second=0 then gosub writeminute
if second= lastsec then goto loop
lastsec = second
gosub writesecond
gosub schalten
goto LOOP

#writeminute

xy=28:gosub cursor '1te Zeile 1 Position
lcd_param = NULL + hour / 10 : gosub LCD_WRITECHAR
lcd_param = NULL + hour mod 10 : gosub LCD_WRITECHAR
lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
lcd_param = NULL + minute / 10 : gosub LCD_WRITECHAR
lcd_param = NULL + minute mod 10 : gosub LCD_WRITECHAR
lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR

#writesecond

xy=34:gosub cursor '1te Zeile 7te Position
lcd_param = NULL + second / 10 : gosub LCD_WRITECHAR
lcd_param = NULL + second mod 10 : gosub LCD_WRITECHAR

'schreibt TIME auf das Display in die 2. Zeile
xy=20:gosub cursor
lcd_param = &H54
gosub LCD_WRITECHAR
xy=21:gosub cursor
lcd_param = &H49
gosub LCD_WRITECHAR
xy=22:gosub cursor
lcd_param = &H4D
gosub LCD_WRITECHAR
xy=23:gosub cursor
lcd_param = &H45
gosub LCD_WRITECHAR
xy=24:gosub cursor
lcd_param = &H3A
gosub LCD_WRITECHAR

'************************************************* ************************************************** ***************

xy=49:gosub cursor

' Aktualisieren der Temperatur
looktab Grad , temp , vario
output = abs(vario)
if vario < 0 then lcd_param = MINUS else lcd_param = LEERZ

gosub LCD_WRITECHAR

' Tausender-Dezimalstelle oder Leerzeichen
if abs(vario) >= 1000 then lcd_param = NULL + output/1000 else lcd_param = LEERZ
gosub LCD_WRITECHAR
output = output mod 1000

' Hunderter-Dezimalstelle oder Leerzeichen
if abs(vario) >= 100 then lcd_param = NULL + output/100 else lcd_param = LEERZ
gosub LCD_WRITECHAR
output = output mod 100

' Zehner-Dezimalstelle oder Leerzeichen
if abs(vario) >= 10 then lcd_param = NULL + output/10 else lcd_param = LEERZ
gosub LCD_WRITECHAR


' einer Dezimalstelle oder Leerzeichen
lcd_param = NULL + output mod 10
gosub LCD_WRITECHAR
lcd_param = LEERZ : gosub LCD_Writechar
lcd_param = &Hdf : gosub LCD_Writechar
lcd_param = C_ : gosub LCD_Writechar

'schreibt TEMP auf das Display in die 3 Zeile
' xy=40:gosub cursor
' lcd_param = &H54
' gosub LCD_WRITECHAR
' xy=41:gosub cursor
' lcd_param = &H45
' gosub LCD_WRITECHAR
' xy=42:gosub cursor
' lcd_param = &H4D
' gosub LCD_WRITECHAR
' xy=43:gosub cursor
' lcd_param = &H50
' gosub LCD_WRITECHAR
' xy=44:gosub cursor
' lcd_param = &H3A
' gosub LCD_WRITECHAR

'schreibt Lichtsteuerung auf das Display in der 1. Zeile
xy=0:gosub cursor
lcd_param = &H20
gosub LCD_WRITECHAR
xy=1:gosub cursor
lcd_param = &H4C
gosub LCD_WRITECHAR
xy=2:gosub cursor
lcd_param = &H49
gosub LCD_WRITECHAR
xy=3:gosub cursor
lcd_param = &H43
gosub LCD_WRITECHAR
xy=4:gosub cursor
lcd_param = &H48
gosub LCD_WRITECHAR
xy=5:gosub cursor
lcd_param = &H54
gosub LCD_WRITECHAR
xy=6:gosub cursor
lcd_param = &H53
gosub LCD_WRITECHAR
xy=7:gosub cursor
lcd_param = &H54
gosub LCD_WRITECHAR
xy=8:gosub cursor
lcd_param = &H45
gosub LCD_WRITECHAR
xy=9:gosub cursor
lcd_param = &H55
gosub LCD_WRITECHAR
xy=10:gosub cursor
lcd_param = &H45
gosub LCD_WRITECHAR
xy=11:gosub cursor
lcd_param = &H52
gosub LCD_WRITECHAR
xy=12:gosub cursor
lcd_param = &H55
gosub LCD_WRITECHAR
xy=13:gosub cursor
lcd_param = &H4E
gosub LCD_WRITECHAR
xy=14:gosub cursor
lcd_param = &H47
gosub LCD_WRITECHAR
xy=15:gosub cursor
lcd_param = &H20
gosub LCD_WRITECHAR
'*************************************** LCD_Interface ************************************************** *********
'( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)


'die Zahl XY ermittelt die nächste Position am LCD.
'(0+ 1.zeile , 20+ 2.zeile, 40+ 3.ziele, 60+ 4.zeile.
'Also 44 ist daher 3.Zeile Postition 5.
#cursor
lcd_param=xy
if xy>=20 then lcd_param=xy+44
if xy>=40 then lcd_param=xy-24
if xy>=60 then lcd_param=xy+20
lcd_param=lcd_param+128
gosub lcd_writecmd

return

'Blinkender cursor am LCD ein (on) oder aus (off) schalten.
#curon
lcd_param=15:gosub lcd_writecmd
return

#curoff
lcd_param=12:gosub lcd_writecmd
return

#LCD_INIT

' alle ports 0
lcd_port = OFF

' 8-Bit-Modus aktivieren
lcd_param=&H38 : gosub LCD_WRITECMD

' mit 8-Bit-Command in 4-Bit-Modus umschalten
lcd_port=&B00000010
tog lcd_e
tog lcd_e

' ab jetzt 4-Bit-Modus
lcd_param = &H28 : gosub LCD_WRITECMD
lcd_param = &H0C : gosub LCD_WRITECMD

' Display loeschen
#LCD_CLS
lcd_param = &H02 : gosub LCD_WRITECMD
lcd_param = &H01 : gosub LCD_WRITECMD
return

' LCD-Kommando
#LCD_WRITECMD
lcd_buf = OFF
goto LCD_WRITE

' Zeichenausgabe
#LCD_WRITECHAR
lcd_buf = &B00100000

' Kommando oder Zeichen an Display senden
#LCD_WRITE
lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
tog lcd_e
tog lcd_e
lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble
tog lcd_e
tog lcd_e

return


'tastatur routine
#waitkey
key_nr=0
compare=tastatur
if compare>238 then goto rskey
compare=compare/21

looktab asciicodes,compare,xy

if key_rel=xy then return
key_nr=xy
key_rel=key_nr

return

#rskey

key_nr=0
key_rel=99

return

table asciicodes
11 7 4 1
10 8 5 2
12 9 6 3
tabend


#schalten
gosub waitkey
if key_nr=11 then relais=0 'alle Relais aus!
'if key_nr>=9 then return 'überprüfe ob nur noch Taste 1 bis 8
if key_nr=12 then goto LCD_CLS
if key_nr=1 then gosub meldung
xy=1
for i=1 to 8
if i=key_nr then relais=(relais xor xy)
xy=xy shl 1
next
gosub steuerung
return


#steuerung
'+++++++++++++++++++++++++++++++++++++++++++ DOW Abfrage ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++
'Sonntag = 0, Montag = 1, Dienstag = 2, Mittwoch = 3, Donnerstag = 4 Freitag = 5, Samstag = 6
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++

if DOW > 6 then DOW = 0 'Fehler der DOW Berechnung korrigieren
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++
if (hour = 23) and (minute = 59) then gosub Reset ' Reset aller Relais um 23.59 Uhr
'--------------------------------------------------------------------------------------------------------------

'********************** Tastaturabfrage ************************************************** ************************
if (hour = 21) and (minute = 35) and (dow => 0 and dow =< 6) then Relais1 = ON 'Gummibaer Blau ON
if (hour = 21) and (minute = 36) and (dow => 0 and dow =< 6) then Relais1 = OFF
'************************************************* **************************************
if (hour = 22) and (minute = 55) and (dow => 0 and dow =< 6) then Relais2 = ON 'Gummibaer Blau OFF
if (hour = 22) and (minute = 56) and (dow => 0 and dow =< 6) then Relais2 = OFF
'************************************************* **************************************
'if (hour = 05) and (minute = 45) and (dow => 1 and dow =< 5) then Relais1 = ON 'Gummibaer Blau ON
'if (hour = 05) and (minute = 46) and (dow => 1 and dow =< 5) then Relais1 = OFF
'************************************************* **************************************
'if (hour = 07) and (minute = 00) and (dow => 1 and dow =< 5) then Relais2 = ON 'Gummibaer Blau OFF
'if (hour = 07) and (minute = 01) and (dow => 1 and dow =< 5) then Relais2 = OFF
'************************************************* **************************************
if (hour = 20) and (minute = 30) and (dow => 0 and dow =< 6) then Relais3 = ON 'Gummibaer Rot ON
if (hour = 20) and (minute = 31) and (dow => 0 and dow =< 6) then Relais3 = OFF
'************************************************* **************************************
if (hour = 22) and (minute = 00) and (dow => 0 and dow =< 6) then Relais4 = ON 'Gummibaer Rot OFF
if (hour = 22) and (minute = 01) and (dow => 0 and dow =< 6) then Relais4 = OFF
'************************************************* **************************************
' if (hour = 05) and (minute = 47) and (dow => 1 and dow =< 5) then Relais3 = ON 'Gummibaer Rot ON
' if (hour = 05) and (minute = 48) and (dow => 1 and dow =< 5) then Relais3 = OFF
'************************************************* **************************************
' if (hour = 07) and (minute = 03) and (dow => 1 and dow =< 5) then Relais4 = ON 'Gummibaer Rot OFF
' if (hour = 07) and (minute = 04) and (dow => 1 and dow =< 5) then Relais4 = OFF
'************************************************* **************************************
'if (hour = 21) and (minute = 10) and (dow => 0 and dow =< 6) then Relais5 = ON 'Bügelzimmer ON
'if (hour = 21) and (minute = 11) and (dow => 0 and dow =< 6) then Relais5 = OFF 'Vati Room ON
'************************************************* **************************************
if (hour = 23) and (minute = 10) and (dow => 0 and dow =< 6) then Relais6 = ON 'Bügelzimmer OFF
if (hour = 23) and (minute = 11) and (dow => 0 and dow =< 6) then Relais6 = OFF 'Vati Room OFF
'************************************************* **************************************
if (hour = 19) and (minute = 45) and (dow => 0 and dow =< 6) then Relais7 = ON 'neue Kugel ON
if (hour = 19) and (minute = 46) and (dow => 0 and dow =< 6) then Relais7 = OFF
'************************************************* **************************************
if (hour = 23) and (minute = 00) and (dow => 0 and dow =< 6) then Relais8 = ON ' neue Kugel OFF
if (hour = 23) and (minute = 01) and (dow => 0 and dow =< 6) then Relais8 = OFF
'************************************************* **************************************
return
#Reset
Relais1=Off
Relais2=OFF
Relais3=OFF
Relais4=OFF
Relais5=OFF
Relais6=OFF
Relais7=OFF
Relais8=OFF
return




#meldung

'lcd_param = &H02 : gosub LCD_WRITECMD
'lcd_param = &H01 : gosub LCD_WRITECMD

' xy=0:gosub cursor
' lcd_param = &H50
' gosub LCD_WRITECHAR
' xy=1:gosub cursor
' lcd_param = &H55
' gosub LCD_WRITECHAR
' xy=2:gosub cursor
' lcd_param = &H4D
' gosub LCD_WRITECHAR
' xy=3:gosub cursor
' lcd_param = &H50
' gosub LCD_WRITECHAR
' xy=4:gosub cursor
' lcd_param = &H45
' gosub LCD_WRITECHAR


' xy=5:gosub cursor
' lcd_param = &H3D
' gosub LCD_WRITECHAR

' xy=6:gosub cursor
' lcd_param = &H4F
' gosub LCD_WRITECHAR

' xy=7:gosub cursor
' lcd_param = &H4E
' gosub LCD_WRITECHAR


' PAUSE 200

return

'return

table Grad
-27 -27 -26 -25 -24 -24 -23 -22 -22 -21
-20 -20 -19 -18 -18 -17 -17 -16 -15 -15
-14 -13 -13 -12 -11 -11 -10 -9 -9 -8
-8 -7 -6 -6 -5 -5 -4 -3 -3 -2
-2 -1 -1 0 0 1 2 2 3 3
4 4 5 6 6 7 7 8 8 9
10 10 11 11 12 12 13 14 14 15
15 16 16 17 17 18 18 19 20 20
21 21 22 22 23 23 24 24 25 25
26 26 27 27 28 28 29 30 30 31
31 32 32 33 33 34 34 35 35 36
36 37 37 38 38 39 39 40 40 41
41 42 42 43 43 43 44 44 45 45
46 46 47 47 48 48 49 49 50 50
51 51 52 52 53 53 53 54 54 55
55 56 56 57 57 58 58 59 59 59
60 60 61 61 62 62 63 63 64 64
64 65 65 66 66 67 67 68 68 68
69 69 70 70 71 71 71 72 72 73
73 74 74 74 75 75 76 76 77 77
77 78 78 79 79 80 80 80 81 81
82 82 82 83 83 84 84 85 85 85
86 86 87 87 87 88 88 89 89 89
90 90 91 91 91 92 92 93 93 93
94 94 95 95 95 96 96 97 97 97
98 98 99 99 99 100
tabend

Gruß Oskar
melde Dich mal per Mail bei mir: info-system@onlinehome.de

opatzki
02.05.2005, 22:05
Hallo Oskar,
vielen dank aber dein programm ist leider nicht für mich geeignet
Gruß
olli