- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Funksender über PC->Relaisplatine

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.04.2005
    Ort
    Bad Bentheim
    Alter
    51
    Beiträge
    9

    Funksender über PC->Relaisplatine

    Anzeige

    Praxistest und DIY Projekte
    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 ,Port
    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

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.01.2005
    Ort
    Niederdorfelden / Hessen
    Alter
    56
    Beiträge
    368
    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
    Eine verrückte Idee ist besser als keine

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.04.2005
    Ort
    Bad Bentheim
    Alter
    51
    Beiträge
    9
    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.01.2005
    Ort
    Niederdorfelden / Hessen
    Alter
    56
    Beiträge
    368
    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
    Eine verrückte Idee ist besser als keine

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.04.2005
    Ort
    Bad Bentheim
    Alter
    51
    Beiträge
    9
    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

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.01.2005
    Ort
    Niederdorfelden / Hessen
    Alter
    56
    Beiträge
    368
    Hi Olli,
    als Beispiel habe ich mal den Kanal 1 genommen und diesen Programmausschnitt mit Zeilennummern versehen.

    Zitat Zitat von opatzki
    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
    Eine verrückte Idee ist besser als keine

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    17.04.2005
    Ort
    Bad Bentheim
    Alter
    51
    Beiträge
    9
    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

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    17.04.2005
    Ort
    Bad Bentheim
    Alter
    51
    Beiträge
    9
    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 \/

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.01.2005
    Ort
    Niederdorfelden / Hessen
    Alter
    56
    Beiträge
    368
    Hi Olli,

    da muss ich erst mal eine Meditationsrunde einlegen . 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
    Eine verrückte Idee ist besser als keine

  10. #10
    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 = 4 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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen