$regfile = "m32def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
$lib "DateTime.lbx"
'$sim
'Programmversionen
'Änderungshistorie:
'V1.0 2015-10-17 Software Entwicklung + Test Hardware
'V1.1 2015-10-18 Software Entwicklung + Test Hardware
'V1.3 2015-10-19 Software Entwicklung + Test Hardware
'V1.4 2015-10-21 Software Entwicklung + Test Hardware
'V1.5 2015-10-22 Software Entwicklung + Test Hardware
'V1.6 2015-10-23 Software Entwicklung + Test Hardware
'V1.7 2015-10-23 Software Entwicklung + Test Hardware
'V1.8 2015-10-24 Software Entwicklung + Test Hardware
'V1.9 2015-10-26 Software Entwicklung + Test Hardware
'V1.10 2015-10-27 Inbetriebnahme und Montage
'V1.11 2015-11-01 Fehlerbeseitigung 1
'V1.12 2015-11-02 Fehlerbeseitigung 2
'Beginn Änderungsprotokoll
'V1.13 2015-11-08
' > Tag/Nacht Automatik erst bei aktiver Messwerterfassung (orange LED AUS)
' > Senken neu mit 85% PWM
' > Laufschrift Zeile 1 LCD
' > neue Begrüßung vor Initialisierung, dann 500ms warten für Stopp zum
' > überspringen
' > erste Gruppenwahl = nur Display ein und Reset Tag/Nachtblockade
' > zweite Gruppenwahl "Alles AUS"
'V1.14 2015-11-14
' > Veränderung der Empfindlichkeit der Sonnensensoren (um 100% gedehnt)
' > Heben immer bis kleiner Strom nicht vorrangig nach %
' > Pause für Stimme vor Zuschalten der Motoren, sonst hört man sie nicht
' > neue Voiceausgabe Beschreibung aller Funktionen für die Frauen
' > Morgendämmerung träger machen, damit nicht immer auf und zu geht
'V1.15 2015-11-19
' > V1.14 hing an der stelle wo die Stimme ausgehen soll, bevor die Motoren
' > zugeschaltet werden
' > bei Kabelbruch Sonnensensoren wird der Hitzeschutz nicht aktiviert
' > Text Berechne Helligkeit in Zeile 2 solange LCD an
' > neuer Merker Initok erzwingt immer 10 Durchläufe von Main nach rückkehr
' > aus Motoren und/oder LCD aus (10x200ms = ca. 2-3s)
' > warte bei Start Init auf Voice
' > Pwm und Motorports im Mainschleife auf 0 setzen (ausser PORTC.7)
'V1.16 2015-11-26
' > Hitzeschutz optimiert (es gingen nicht die richtigen Jalousien zu)
' > Text Hitzeschutz wurde unterhalb der Schwelle nicht mehr angezeigt ob-
' > wohl er aktiv warund auch andere Textanzeigen wurden optimiert
' > Fehler durch verketten mit OR/AND beseitigt
' > es darf hinter einer AND - OR Bedingung immer nur noch eine Variable stehen
'V1.17 2015-12-06
' > neu wurde der Hitzeschutz in mehrer Schließhöhen gegliedert
'V1.18 2015-12-13
' > Korrektur IF Then für Schließhöhen 50% bei Sonnenschutz
'V1.19 2016-02-16
' > da immer Jalousie 5 unten bleibt, mehr Anlaufstrom für saubere
' > Relaisansteuerung (Relais 5 zieht durch zu schnelle PWM
' > Absenkung nicht sauber an)
' > Motorstromdiagnose für Ausfall Relais + Anzeige leichter Fehler + Motornrtxt.
' > Vereinfachung Betriebsartenwahl (neu....)
'V1.20 2016-03-05
' > Motorunterstromüberwachung verbessert:
' > - kam auch bei Sonnenschutz für die Jalousiern die oben bleiben sollten
' > - nur Überwachen wenn Endlage noch nicht erreicht ist
' > Zeiten für Senken gerinfügig verlängert
'V1.21 2016-03-17
' > Vierstufige 1-4h Verzögerung Jallousien am morgen da schon 5:00 hell
' > LCD Licht bei Tastenbetätigung
'V1.22 2016-03-23
' > Fehlerbeseitigung Messfehler Restzeit, If then Fehler Tag/Nacht
' > LCD Zeile 2 Vorrang für wichtige Texte eingeführt
' > Reset Gruppenauswahl über blau nicht mehr rot, damit gestoppt werden kann
' > ohne das die Gruppenwahl zurück gesetzt wird
' > man. Stop kann durch Stopptaste wieder aufgehoben werden
'V1.23 2016-03-26
' > Verzögerungen Rücksetzen Hitzeschutz min 1h muss es sonnenfrei sein
' > manueller Stop gilt nun auch für Hitzeschutz und wird über Nacht zurückgesetzt
' > Fehlerbeseitigung Motorfehler Unterstrom bei Hitzeschutz nur wenn zwischen
' > 10 und 90% wird Fehler erkannt
' > Hitzeschutz gegeneinander verriegelt (mehrere Modis)
' > Texte Hitzeschutz optimiert
'V1.24 2016-04-01
' > Rücksetzen 100% Hitzeschutz auf 0,5h verkürzt
' > beim Heben in Gruppen immer beide Gruppen polwenden, da sonst Rückströme
' > zum ungewollten senken der inaktiven Gruppe führen
' > (ggf. müssen noch entkoppel C's eingebaut werden, damit die MOSFETs nicht
' > durch Störspannungen aktiviert werden
'V1.25 2016-05-03
' > Nach Sonnenschutz kam es Vor dass nochmal Tag erkannt wurde und trotz offener
' > Jalousien versucht wurde zu öffnen, daher wurden neu die Merker für Tag und Nacht
' > in die Abfragen eingebracht
'V1.26 2016-05-08
' > Fehler 4h Offset Tag ging nicht wegen Überlauf Variable I neu als Long
' > Bei Reset 0% oder 99% wird neu auch Sonnenschutz zurück gesetzt
'V1.27 2016-05-14
' > Nacht schon früher erkennen bei 6 statt 3
' > 100% PWM Impuls für Relais Heben von 3 auf 2 Zyclen verkürzt
' > beim Hitzeschutzsenken/heben auf 50% kam es manchmal durch Unterstrom bei 50%
' > zur Setzung auf 0% oder 99% und dadurch zum durchlaufen der Mitte, daher wird
' > neu Unterstromerkennung nur angewendet, wenn Hitzss oder Hitzso
' > ungleich 1 oder 3 sind
' > Problem Sperre Lcd2 bei man. Stop behoben (Voicez subtraierte sich < 0)
' > Problem mit Anzeigen des Status in LCD Zeile 2 behoben (If Then Kette)
'V1.28 2016-05-18
' > Fehler bei Restzeit Verzögerung Tag beseitigt - neu Ablauf wird Nacht aktiviert,
' > damit beim ersten Lauf mit Restzeit überhaupt Tag oder Nacht gesetzt wird
'V1.29 2016-05-25
' > Hitzeschutz wiederholt einschalten wird neu zeitverzögert
' > Sondermodis mit Hitzeschutz möglich
' > wenn man Stop lange drückt werden Sondermodi zurück gesetzt
' > selektives Endlagenabschalten bei I < 40 I > 10mA
' > Rücksetzen man. Hitzeschutzsperre bei Tag/Nacht Erkennung
'V1.30 2016-06-01
' > selektives Endlagenabschalten bei I < 40 I > 10mA wird immer wurde zurück gesetzt
' > dadurch blinkten die Ports bei Endlage - neu wird nur noch einmal das Motorportmuster
' > gesetzt, danach kann jeder Motor selektiv abgeschaltet werden, wenn err fertig ist
' > diverse Programmoptimierungen, da V1.29 99% des Programmspeichers belegten
' > neu 93%
'V1.31 2016-06-05
' > Folgefehler aus Programmoptimierung beseitigt
' > Fehler beim Senken behoben es wurden alle versehendlich auf 99% statt 0% gesetzt
'V1.32 2016-06-19
' > Fehler Position bei Hitzeschutz bereinigt
' > es darf erst nach dem Heben der Hitzsch. von 1 auf 2 bzw. 3 auf 4 und
' > umgekerht gesetzt werden
' > in Hitzeschutz Tagman eingebaut, damit heben/senken bei Hitzsch. möglich
' > Zeitverzögerung Hitzeschutz 50% von 1h auch 30min gesenkt
'V1.33 2016-06-30
' > komplett neue Reedkontakte eingebaut und bei heben neu sofort wenn
' > Strom unter 200mA fällt abschalten wegen klappern der Relais
' > Wenn manuelle gestoppt wird nichts an den % ändern.
' > Anzeige Hitzschutz mit Tag = 1 verknüpft
' > Anzeige der % nun durch Tasten grün+gelb bzw. grün + rot möglich
' > bei längerem drücken Reset der % und auch Hitzeschutz und auch Gruppenschaltungen
'V1.34 2016-07-28
' > selektives Ausschalten im Initprogramm
' > Restzeitanzeige Hitzeschutz eingebaut
' > Voiceasgabe massiv vereinfacht Val direkt auf Port geht auch!
' > leider sind zwei Motoren gestorben, da die Überstromerkennung im PWM Sanftstopp
' > nicht funktioniert, daher wurde die Ü-Stromerkennung in dieser Zeit verändert
'V1.35 2016-09-05
' > Überstromerkennung in den Endlagen verbessert /synchron mit PWM
' > kompletter Umbau aller If Then Abfragen auf ohne End If
'V1.36 2016-10-24
' > Zykluszeit heben und senekn leicht erhöht, da einige Jalousien nicht
' vollständig bis obern/unten laufen
' > Einstellbare Helligkeitsschwelle für 50% Hitzeschutz SO und SS, da im
' Winter auch 84% reichen (tief stehende Sonne) durch verketten des
' Offset 0 = 84%+86% , 1 = 85%+87%, 2 = 86%+88%
' > Reset Hitzs bei Stop >500ms oder Kurzschluss
'V1.37 2016-12-06
' > Offset 0 = 83%+85% , 1 = 85%+87%, 2 = 86%+88%
' > Reset Hitzs bei Stop >500ms oder Kurzschluss nachgebessert
'V1.38 2017-03-18
' > bei 80% bzw. 20% auf 99% bzw. 0% Endlage setzen
' > Hitzeschutz 50% besser eingestellt damit auch in der Hälfte stehen bleibt
' > Positionen der Jalousien in Zeile 3+4 im Wechsel zu Helligkeiten anzeigen
' > Uhrzeit + Wochentag darstellen
' > Wochentag an Öffnungszeit koppeln
'V1.39 2017-03-25
' > komplett neue Untermenustruktur für grün+gelb, grün+rot, grün+gelb+rot und blau
' > Eichungsfaktor für Uhr
' > Hitzeparameter einstellbar
' > Umbau Restzeiten auf Echtzeit
' > zur Programmverkleinerung Init Programm gelöscht
' > Uhr stark vereinfacht mit Time lbx
' > Fehler Variablenüberlauf behoben
'V1.40 2017-03-26
' > alle Strinvariablen umbenannt auf ...txt wegen Variablenüberschreibungen
' > diverse Texte verändert und optimiert
' > F4Gruppenmodis besser in Sonneneschutz integriert
' > neu Anzeige wenn Start Sonnenschutz läuft "3min"
'V1.41 2017-03-28
' > Timervergleich geändert nicht Timer = 180 sondern Timer > 180 weil
' > ja die 180 schon vorbei sein kann
' > nochmal alle Stringvariablen wegen Überlauf geprüft und wieder Texte gefunden :o(
' > Stacks erhöht wegen Variablenüberlauf
'V1.42 2017-04-02
' > wichtige Merker zuerst deklariert, damit sie nie überschrieben werden
' > Programm in eine neue Datei kopiert, da viele unerklärliche Fehler
' > auftraten und vielleicht das mit den vielen Änderungen zusammen hängt?
'V1.43 2017-04-09
' > neue Parameter Tag/Nachtschwellen
' > Zeit senken gekürzt da Jalousien schneller und sanftauslauf wirkungslos
' > Reihenfolge für Ende durch Pos.verändert
' > String Variablen am ende deklariert wegen Überlaufproblemen
'V1.44 2017-05-01
' > Gruppenschaltung verbessert(Clear LCD rausgen, Wait 1 am Ende für Vermeidung Stop)
' > Zeiteinstellung verbessert (Eichfaktor auf 33500 gestellt da zu schnell)
' > Senenknzeit verlängert durch PWM Auslauf in -5 Schritten
' > Sonneneschutz Ostseite bereinigt
' > Motorstromgrenze bei heben nach unten auf 300mA erhöht, da bei heben aus 50% Kurzschluss
'V1.45 2017-10-15
' > Zeitoffset am WE korrigiert - neu wird genau 9:30 geöffnet
' > Eichfaktor korrigiert - alt 33500 neu 33550 weil geringfügig vorgegangen
' > neu bei Kurzschluss wird fertig gehoben oder gesenkt und nur der betroffene Motor ausgeschaltet
'V1.46 2017-10-22
' > Auslauf PWM verlängert
'V1.47 2017-11-12
' > Eichfaktor nun + und - und von 33000 - 35000 möglich
' > Eichfaktor wird nun in RAM geschrieben
' > Aufgrund Speicherüberlauf Gruppenschaltungen 9-13 gelöscht (nie benutzt) neu nur 95%
'V2.00 2017-12-18
' > Korrektur Funktionsgruppen (9-13 gelöscht)
' > neue Abschaltlogik mit Polwendung für betroffene Gruppe, damit defekter Mosfet nicht zum
' Motorabbrand führt
' > LED + Display blinkt bei Überstrom
' > Überstrommeldung kommt statt Fehlerfreimeldung
' > EEPROM Speicherung diverser einstellbarer Parameter, damit bei Stromausfall nichts vergessen wird
' > Überstromspeicher je Motor, damit andere Jalousien weiter laufen können.
' > Überstromabfall wird überwacht wenn der Strom nicht abfällt, wird ganze Motorgruppe
' polgewendet siehe oben
' > Motorüberstrom als Parameter und halber Strom beim Senken
' > neue Hardware (Freilaufdioden über Motorversorgung, blaue LEDs)
' > Sa + So erst 9:00 öffnen
' > Zeiten für Senken und Heben über einstellbare Parameter eingeführt
'V2.01 2018-01-05
' > Korrektur Anzeige Kurzschlusstrom
' > sensiblere Kurzschlusstromreaktion
'V2.02 2018-06-10
' > Korrektur Sonnenschutz
' > Resetzeit für Sonnenschutz auf 15 min reduziert
' > Texte optimiert
' > Tag Nacht Schwelle erweitert Tag: 13-30, Nacht 1-12
'V2.03 2018-06-22
' > Tag Nacht Schwelle nochmal erweitert Tag: 10-30, Nacht 1-20
' > reset Position bei 50% Sonnenschutz
' > Wenn Tag < Nacht Überlappung Schwellwerte aautomatisch korrigieren
'V2.03 2018-07-05
' > Korrektur Mittenfehler bei vielen Sonnenschutzaktionen
'V2.04 2018-07-05
' > Korrektur Mittenfehler bei vielen Sonnenschutzaktionen
'V2.05 2018-07-15
' > Korrektur Mittenfehler bei vielen Sonnenschutzaktionen
'V2.06 2018-07-18
' > Korrektur Mittenfehler bei vielen Sonnenschutzaktionen
'V2.07 2018-10-21
' > Korrektur Endlagenfehler bei vielen Sonnenschutzaktionen
'V3.00 2018-12-28
' > Einbau Quarz
' > neue lustige Ansagen statt Sondermodis
' > Zeiteinstellen bei Programmierung
'************************* Bedienungsanleitung Tasten *************************
' Hauptfunktionen
' Taste grün/A: öffen (wenn alle oben passiert nichts außer Sprachausgabe)
' Taste gelb/B: schließen (wenn alle unten passiert nichts außer Sprachausgabe)
' Taste rot/C: globaler Stopp, Reset Gruppenauswahl, Stopp Startroutiene
' Taste blau: kurz = Gruppen- und Automatikauswahl, lang = Erklärung per Sprache
' Untermenus
' Taste grün+gelb - Motorsteruerung:
' Taste grün: alle Positionen auf oben = 99% oder auf unten = 0% setzen
' Taste gelb: PWM Endwert Senken erhöhen
' Taste grün+gelb: alle Merker für Hitzeschutz und Motorgruppen zurück setzen
' Taste blau: max. Motorstrom verstellen +
' Taste grün+blau: Zeit für Senken erhöhen +
' Taste grün+rot: Zeit für Heben erhöhen +
' Taste rot: save and exit
' Taste grün+rot - Ührzeit und Eichung:
' Taste grün+gelb: Wochentag ändern >Mo>Di>Mi>Do>Fr>Sa>So>Mo...
' Taste grün: Stunde aufwärts einstellen +
' Taste gelb: Minute aufwärts einstellen +
' Taste blau: Minute abwärts einstellen -
' Taste grün+blau: Eichwert - = Uhr läuft langsamer
' Taste grün+rot: Eichwert + = Uhr läuft schneller
' Taste rot: save and exit
' Taste grün+blau - Helligkeitssteuerungen:
' Taste grün: Schwellwert für Hitzeschutz 50% erhöhen (am Ende springt er wieder auf den
' tiefsten Wert zurück)
' Taste gelb: Schwellwert für Hitzeschutz 100% erhöhen (am Ende springt er wieder auf den
' tiefsten Wert zurück)
' Taste grün+gelb: Offset Tagschwelle (im Sommer 1-4h später als Sonnenaufgang öffnen)
' Taste blau: Schwellwert Nachterkennung erhöhen
' Taste grün+blau: Hysteresewert für Hitzeschutz erhöhen (wieviel unter dem Schwellwert
' wird Hitzeschutz deaktiviert)
' Taste grün+rot: Schwellwert Tagerkennung erhöhen
' Taste rot: save and exit
'************** Alle Ports als Eingang oder Ausgang definieren ****************
' 0 = Eingang; 1 = Ausgang
'Ddra = &B00000000 'nicht gesetzt, da als AD Wandler definiert
Ddrb = &B00011111
Ddrc = &B11111111
Ddrd = &B10111111
'******* Alle Ports auf 0 bzw. 1 setzen für definierten Anfangszustände *******
'Bei Eingängen durch 1 den Pulldownwiderstand aktivieren
'Porta = &B00000000 'nicht gesetzt, da als AD Wandler definiert
Portb = &B11111111
Portc = &B00000000
Portd = &B00000000
'************************ analoge Eingänge einstellen *************************
Config Adc = Single , Prescaler = Auto , Reference = Aref 'Internal
Start Adc
'************************** LCD und Ports definieren **************************
Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display
' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , _
Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Cursor Off
'************************** Timer1 konfigurieren *******************************
Config Timer1 = Timer , Prescale = 256 'Timer konfigurieren 8000000 / 256 = 31250Hz
Enable Timer1 'bei 16 bit 65535 Überlauf Startwert bei 34285
On Timer1 Sekundeisr 'Timerüberlaufsprungmarke setzen
Enable Interrupts
Start Timer1
'************************** Timer2 konfigurieren *******************************
Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 8
Ocr2 = 0 'PWM-Kanal c des Timer2 Vergleiswert zuweisen
Enable Timer2 'Start des PWM-Timers
Timer2 = 0
Start Timer2
'******************** Übersicht Speicherbereiche Variablen ********************
'Dim as Bit = 0 bis 1
'Dim as Byte = 0 bis 255
'Dim as Integer = -32768 bis +32767
'Dim as Word = 0 bis 65535
'Dim as Long = -2147483648 bis 2147483647
'Dim as Single = 1,5 x 10^-45 bis 3,4 x 10^38
'Dim as Double = 5,0 x 10^-324 bis 1,7 x 10^308
'Dim as String = 254 Zeichen
'****************************** Übersicht IO **********************************
'IN/OUT Pin Typ Signalname
'PA0 40 I Motorstrom 1 (Osten 1)
'PA1 41 I Motorstrom 2 (Osten 2)
'PA2 42 I Motorstrom 3 (Süden 1)
'PA3 43 I Motorstrom 4 (Süden 2)
'PA4 44 I Motorstrom 5 (Süden 3)
'PA5 45 I Photowiderstand Tag
'PA6 46 I Photowiderstand Osten
'PA7 47 I Photowiderstand Süden
'PB0 1 O Attiny 861A PB4 SW1
'PB1 2 O Attiny 861A PB5 SW2
'PB2 3 O Attiny 861A PB6 SW3
'PB3 4 O Attiny 861A PA3 SW4
'PB4 5 O Attiny 861A PA4 SW5
'PB5 6 I MOSI + Funk Kanal 1
'PB6 7 I MISO + Funk Kanal 2 zusammen mit PB7 Funk Kanal 4
'PB7 8 I SCK + Funk Kanal 3 zusammen mit PB6 Funk Kanal 4
'PC0 22 O Polwendung Motor 1-3 Süden
'PC1 23 O Polwendung Motor 4-5 Osten
'PC2 24 O Motor 1 Süden
'PC3 25 O Motor 2 Süden
'PC4 26 O Motor 3 Süden
'PC5 27 O Motor 4 Osten
'PC6 28 O Motor 5 Osten
'PC7 29 O URef Photo/Motorstrom + Mute + LCD Hintergrundbeleuchtung
'PD0 14 O LCD PIN 7 DB4
'PD1 15 O LCD PIN 8 DB5
'PD2 16 O LCD PIN 9 DB6
'PD3 17 O LCD PIN 10 DB7
'PD4 18 O LCD PIN 4 RS
'PD5 19 O LCD PIN 5 E
'PD6 20 I Voice in Action
'PD7 21 O PWM Offset Motoren
'****************************** Subs declarieren ******************************
Declare Sub Init
Declare Sub Main
Declare Sub Motoren
Declare Sub Motorstrom
Declare Sub Motorports
Declare Sub Voice
'********************** globale Variablen declarieren *************************
'Variablen die nicht überschrieben werden dürfen zuerst (die anderen werden stetig neu gesetzt
'Zeitmerker
Dim Wochentag As Byte 'Merker Wochentag als Ziffer
Dim Sekunde As Long 'Zähler für Uhrzeit
Dim Timereichg As Word 'Merker Eichfaktor Uhrzeit
Dim Timereichgx As Eram Word 'Merker Eichfaktor im EPROM RAM
Dim Zeit0 As Word 'Zeitmerker0 für Tagverzögerung
Dim Zeit1 As Word 'Zeitmerker1 für Hitzeschutz Ost
Dim Deltaz1 As Byte 'Restsekunden bis Hitzeschutz Ost
Dim Deltaz1m As Byte 'Restminuten bis Hitzeschutz Ost
Dim Zeit2 As Word 'Zeitmerker2 bis Rücksetzen Hiztzeschutz Ost
Dim Zeit3 As Word 'Zeitmerker3 für Tagverzögerung und Hitzeschutz Süd
Dim Deltaz3 As Byte 'Restsekunden bis Hitzeschutz Süd
Dim Deltaz3m As Byte 'Restminuten bis Hitzeschutz Süd
Dim Zeit4 As Word 'Zeitmerker4 bis Rücksetzen Hiztzeschutz Ost
'Motorsteuerung
Dim F4grup As Byte 'Merker Taste blau + Gruppe
Dim Firstrun As Bit 'Merker erster Start
'Tag/Nacht
Dim Tag As Bit 'Merker Tag
Dim Patag As Byte 'Merker Schaltschwelle Tag
Dim Patagx As Eram Byte
Dim Nacht As Bit 'Merker Nacht
Dim Panacht As Byte 'Merker Schaltschwelle Nacht
Dim Panachtx As Eram Byte
Dim Offset As Byte 'Merker Sommerzeitoffset wegen heben vor 6:00Uhr
Dim Pahysterr As Byte 'Merker Hysterese Sonnenschutz
Dim Pahysterrx As Eram Byte
Dim Mannacht As Bit 'Merker Manuell gehoben/gesenkt bis nächsten Tag halten
Dim Mantag As Bit 'Merker Manuell gehoben/gesenkt bis nächsten Nacht halten
'Sonnenschutz
Dim Pahitzhalb As Byte 'Merker Schaltschwelle Hitzeschutz 50%
Dim Pahitzhalbx As Eram Byte
Dim Pahitzvoll As Byte 'Merker Schaltschwelle Hitzeschutz 100%
Dim Pahitzvollx As Eram Byte
Dim Hitzso As Byte 'Merker Hitzschutz Ostsonne
Dim Hitzss As Byte 'Merker Hitzeschutz Südsonne
'LCD
Dim Lcd2 As Bit 'Merker LCD Zeile 2 blockiert
'#####################################################################################################
'Merker die temp.beschrieben werden (Verlust der Daten nicht so wichtig)
'Motorsteuernde Merker
Dim F1heb As Bit 'Merker Taste grün
Dim F2senk As Bit 'Merker Taste gelb
Dim Strom1 As Integer 'Meßwert Motorstrom1 (Zahl)
Dim Strom2 As Integer 'Meßwert Motorstrom2 (Zahl)
Dim Strom3 As Integer 'Meßwert Motorstrom3 (Zahl)
Dim Strom4 As Integer 'Meßwert Motorstrom4 (Zahl)
Dim Strom5 As Integer 'Meßwert Motorstrom5 (Zahl)
Dim Pos1 As Byte 'Positionszähler Jalousie1 (0 = unten)
Dim Pos2 As Byte 'Positionszähler Jalousie2 (Zahl, 0 = unten)
Dim Pos3 As Byte 'Positionszähler Jalousie3 (Zahl, 0 = unten)
Dim Pos4 As Byte 'Positionszähler Jalousie4 (Zahl, 0 = unten)
Dim Pos5 As Byte 'Positionszähler Jalousie5 (Zahl, 0 = unten)
Dim Ende As Bit 'Merker Ende für Motorsteuerung
Dim Abbruch As Bit 'Merker manueller Abbruch
Dim Kurzs As Bit 'Merker Überstrom
Dim Kurzs1 As Byte 'Merker Überstrom Motor 1
Dim Kurzs2 As Byte 'Merker Überstrom Motor 1
Dim Kurzs3 As Byte 'Merker Überstrom Motor 1
Dim Kurzs4 As Byte 'Merker Überstrom Motor 1
Dim Kurzs5 As Byte 'Merker Überstrom Motor 1
Dim Motorfehler As Bit 'Merker ein Motor geht nicht
Dim Pahebet As Byte 'Merker Hebezeit 50
Dim Pahebetx As Eram Byte
Dim Pasenkt As Byte 'Merker Senkzeit 5
Dim Pasenktx As Eram Byte
Dim Papwmsenk As Byte
Dim Papwmsenkx As Eram Byte
'Helligkeiten
Dim Tagnacht As Integer 'Helligkeit Tag/Nacht
Dim Osonne As Integer 'Helligkeit Ostsonne
Dim Ssonne As Integer 'Helligkeit Südsonne
Dim Osonnetemp As Byte 'Helligkeit Ostsonne temporär zur Mittelwertbildung
Dim Ssonnetemp As Byte 'Helligkeit Südsonne temporär zur Mittelwertbildung
'temporäre Zähler
Dim I As Byte 'Zähler in PWM Modul
Dim J As Long 'Zähler Tagverzögerung
Dim K As Long 'Zähler Resthitzschutz Ost
Dim L As Long 'Zähler Resthitzschutz Süd
Dim Z As Byte 'Zähler Motorstrommessung zur Glättung
Dim T1 As Byte 'Zähler Laufschrift Zeile 1 immer 20 +1
'PWM Steuerung
Dim Pwm As Byte 'PWM Tastverhältnis 255 = 0% !!!!
Dim Pwm1 As Integer 'PWM umgerechnet in %
Dim Kurzstrpwm As Long 'an Pwm angepasste Kurzschlussstromschwelle
Dim Pakurzs As Word 'Parameter Kurzschlussstromschwelle
Dim Pakurzsx As Eram Word
'Spachausgabe
Dim File As Byte 'Merker Voicedateinummer
Dim Voicez As Byte 'Timer Voicenachlauf
'LCD Ansteuerung
Dim Blkurzs As Bit 'Merker für blinkenden Text Kurzschluss
Dim Blzeile4 As Byte 'Merker für blinkenden Text Zeile 4
'String Variablen wegen Überlauf am Ende
Dim Wotagtx As String * 3 'Merker Wochentag als Text
Dim Zeittxt As String * 8 'Textmerker für Anzeige Zeit
Dim Zeit1txt As String * 2 'Restsekunden bis Hitzeschutz Ost als Text für LCD
Dim Zeit3txt As String * 2 'Restsekunden bis Hitzeschutz Süd als Text für LCD
Dim Restzeittxt As String * 8 'Restzeit bis verzögerter Tag als Text für LCD
Dim Resthsotxt As String * 2 'Restminuten bis Hitzeschutz Ost zurück gesetzt wird
Dim Resthsstxt As String * 2 'Restminuten bis Hitzeschutz Süd zurück gesetzt wird
Dim Strom1txt As String * 3 'Meßwert Motorstrom1 (Text, Format 000)
Dim Strom2txt As String * 3 'Meßwert Motorstrom2 (Text, Format 000)
Dim Strom3txt As String * 3 'Meßwert Motorstrom3 (Text, Format 000)
Dim Strom4txt As String * 3 'Meßwert Motorstrom4 (Text, Format 000)
Dim Strom5txt As String * 3 'Meßwert Motorstrom5 (Text, Format 000)
Dim Pos1txt As String * 2 'Positionszähler Jalousie1 (Text, Format00)
Dim Pos2txt As String * 2 'Positionszähler Jalousie2 (Text, Format00)
Dim Pos3txt As String * 2 'Positionszähler Jalousie3 (Text, Format00)
Dim Pos4txt As String * 2 'Positionszähler Jalousie4 (Text, Format00)
Dim Pos5txt As String * 2 'Positionszähler Jalousie5 (Text, Format00)
Dim Motornrtxt As String * 10 'Motornummern
Dim Tagnachtxt As String * 2 'String für Helligkeit Tag/Nacht in %
Dim Osonnetxt As String * 2 'String für Helligkeit Ostsonne in %
Dim Ssonnetxt As String * 2 'String für Helligkeit Südsonne in %
Dim Pwmtxt As String * 3 'PWM (Text, Format 000)
Dim Lcdz1txt As String * 20 'String für LCD Zeile 1
Dim Lcdz2txt As String * 20 'String für LCD Zeile 2
Dim Lcdz3txt As String * 20 'String für LCD Zeile 3
Dim Lcdz4txt As String * 20 'String für LCD Zeile 4
Dim Textz1txt As String * 255 'Laufschrift LCD Zeile 1
Dim Offsettxt As String * 20 'Merker Sommerzeitoffset als Text für LCD
'Schutzvariable für Überlaufprobleme
Dim Schutz As String * 30
'***************** Initialisiserung Position + Helligkeit *********************
Sub Init
'Reset weitere Variablen
F1heb = 0
F2senk = 0
F4grup = 0
Tag = 0
Nacht = 0
Tagnacht = 0
Tagnachtxt = "??"
Osonne = 0
Osonnetxt = "??"
Ssonne = 0
Ssonnetxt = "??"
Hitzso = 0
Hitzss = 0
File = 20
Mantag = 0
Mannacht = 0
T1 = 0
Motorfehler = 0
Kurzs = 0
Kurzs1 = 0
Kurzs2 = 0
Kurzs3 = 0
Kurzs4 = 0
Kurzs5 = 0
I = 0
J = 0
K = 0
L = 0
Offsettxt = "Lichtsensoren Tag+0h"
Offset = 0
Lcd2 = 1
'alle Positionen auf 99% = offen setzten
Pos1 = 99
Pos2 = 99
Pos3 = 99
Pos4 = 99
Pos5 = 99
Pos1txt = "??"
Pos2txt = "??"
Pos3txt = "??"
Pos4txt = "??"
Pos5txt = "??"
Strom1 = 0
Strom2 = 0
Strom3 = 0
Strom4 = 0
Strom5 = 0
Strom1txt = " 0"
Strom2txt = " 0"
Strom3txt = " 0"
Strom4txt = " 0"
Strom5txt = " 0"
Motornrtxt = "- - - - - "
Wochentag = 7
Sekunde = 0
Sekunde = 18 * 60
Sekunde = Sekunde + 40
Sekunde = Sekunde * 60
Firstrun = 0
Zeit0 = 0
Zeit1 = 0
Zeit2 = 0
Zeit3 = 0
Zeit4 = 0
'ERAM Parameter lesen
'Eichfaktor
If Timereichgx < 34200 Or Timereichgx > 34350 Then Timereichgx = 34285 '>34285< +31250 = 65535
'Tagschwelle
If Patagx > 30 Then Patagx = 15
'Nachtschwelle
If Panachtx > 20 Then Panachtx = 5
'Hitzeschwelle50%
If Pahitzhalbx > 99 Then Pahitzhalbx = 84
'Hitzeschwelle100%
If Pahitzvollx > 99 Then Pahitzvollx = 85
'Hysterese Hitzeschutz
If Pahysterrx > 5 Then Pahysterrx = 0
'Kurschlussschwelle in mA
If Pakurzsx > 415 Then Pakurzsx = 380
'Faktor Hebezeit
If Pahebetx > 99 Then Pahebetx = 45
'Faktor Senkzeit
If Pasenktx > 30 Then Pasenktx = 10
'Faktor Senkpwm
If Papwmsenkx > 245 Then Papwmsenkx = 240
'LCD Beleuchtung für Init ein
'Vertärker ein und alle Motorports und PWM aus
Portc.7 = 0
Pwm = 0
Ocr2 = Pwm
Call Voice
Lcdz1txt = "System Start V3.00"
Lcdz2txt = "Softwareanalyse..."
Lcdz3txt = "Hartwarediagnose.."
Lcdz4txt = "Motoren+Sensoren.."
'LCD Initialisieren
Cls
Locate 1 , 1 'Cursor auf 1 Zeile, 1. Zeichen
Lcd Lcdz1txt
Waitms 1500
Locate 2 , 1 'Cursor auf 2 Zeile, 1. Zeichen
Lcd Lcdz2txt
Waitms 1500
Lcdz2txt = Lcdz2txt + "OK"
Locate 2 , 1 'Cursor auf 2 Zeile, 1. Zeichen
Lcd Lcdz2txt
Locate 3 , 1 'Cursor auf 3 Zeile, 1. Zeichen
Lcd Lcdz3txt
Waitms 1500
Lcdz3txt = Lcdz3txt + "OK"
Locate 3 , 1 'Cursor auf 3 Zeile, 1. Zeichen
Lcd Lcdz3txt
Waitms 1500
Locate 4 , 1 'Cursor auf 4 Zeile, 1. Zeichen
Lcd Lcdz4txt
Waitms 1500
Lcdz4txt = Lcdz4txt + "OK"
Locate 4 , 1 'Cursor auf 4 Zeile, 1. Zeichen
Lcd Lcdz4txt
Waitms 1500
Call Main
End Sub
'==============================================================================
'==============================================================================
'==============================================================================
'****************** Hauptprogramm Tasten und Helligkeit ***********************
'Test:
Sub Main
Portc.7 = 0
Voicez = 100
'Reset Zähler und Lcd2Merker
I = 0
J = 0
Lcd2 = 1
'Main Schleife!!!
Do
'Parameter aus ERAM holen, falls verloren oder unplausible Werte aus ERAM holen
Timereichg = Timereichgx
Patag = Patagx
Panacht = Panachtx
Pahitzhalb = Pahitzhalbx
Pahitzvoll = Pahitzvollx
Pahysterr = Pahysterrx
Pakurzs = Pakurzsx
Pasenkt = Pasenktx
Pahebet = Pahebetx
Papwmsenk = Papwmsenkx
'Überlauf Timer begrenzen
If Zeit0 > 18000 Then Zeit0 = 0 '5h reset Zähler für temporäre Zeitzähler0
If Zeit1 > 18000 Then Zeit1 = 0 '5h reset Zähler für temporäre Zeitzähler1
If Zeit2 > 18000 Then Zeit2 = 0 '5h reset Zähler für temporäre Zeitzähler2
If Zeit3 > 18000 Then Zeit3 = 0 '5h reset Zähler für temporäre Zeitzähler3
If Zeit4 > 18000 Then Zeit4 = 0 '5h reset Zähler für temporäre Zeitzähler4
'alle Motor-Ports ausschalten außer PortC7=Voice/LCD/Uref
Portc.0 = 0
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
Portc.4 = 0
Portc.5 = 0
Portc.6 = 0
'Pwm auf 0% setzen
Pwm = 0
Ocr2 = Pwm
'Nachlauf Verstärker und LCD Licht
'Uref = 5VDC/Verstärker AUS
'Abfrage Helligkeit Für Nachlauf Verstärker / Lcd Licht Unterdrücken
If Voicez > 1 Then
If Voicez < 6 Then Portc.7 = 1
Voicez = Voicez - 1
Lcd2 = 1
If Tag = 0 And Nacht = 0 And Kurzs = 0 And Motorfehler = 0 Then
If Voicez > 60 Then
Lcd2 = 0
Lcdz2txt = "lese Lichtsensoren "
Portc.7 = 0
Goto Ohelligkeit
End If
If Voicez < 60 And Voicez > 55 Then
Lcd2 = 0
Portc.7 = 1
End If
If Voicez < 50 And Voicez > 30 Then
Lcd2 = 0
Lcdz2txt = "Analyse Tag/Nacht/So"
Portc.7 = 0
Goto Ohelligkeit
End If
If Voicez < 30 Then
Lcd2 = 1
Portc.7 = 1
End If
Else
Goto Ohelligkeit
End If
Else
Voicez = 0
Portc.7 = 1
End If
'Eingänge Helligkeit auswerten
'Tag oder Nacht abfragen
Tagnacht = Getadc(5)
Tagnacht = Tagnacht - 1024 'Wert negieren, da 5V = Nacht = 0%
Tagnacht = Tagnacht / -10 'Wert durch -10 damit Wert positiv und von 0-102
'If Tagnacht > 99 Then Tagnacht = 99 'Wert auf 99 begrenzen 0-5V in 100 Schritten
'If Tagnacht < 1 Then Tagnacht = 0
Tagnachtxt = Str(tagnacht) 'Zahl in String umwandeln
Tagnachtxt = Format(tagnachtxt , " 0") 'gleitendes Leerzeichen statt Vornullen
'starke Sonne von Ostseite (Jalousien M5 und M4) abfragen
'zwei mal messen wegen Mittelwert
Osonne = Getadc(6)
Osonne = Osonne + Getadc(6)
Osonne = Osonne / 2
Osonne = Osonne - 1024 '-1024 = 100% 0 = 0%
Osonne = Osonne / -2 'Wert durch -2 damit Wert positiv und gedehnt wird
'If Osonne < 1 Then Osonne = 0 '0-99% sind demnach 5-2,5 V in 100 Schritten 'das ganze wurde geändert, da sonst zu unempfindlich
'If Osonnetemp > 99 Then Osonnetemp = 99
Osonne = Osonnetemp + Osonne
Osonne = Osonne \ 2
Osonnetemp = Osonne
Osonnetxt = Str(osonne)
Osonnetxt = Format(osonnetxt , " 0")
'starke Sonne von Südseite (Jalousien M3, M2 und M1) abfragen
Ssonne = Getadc(7)
Ssonne = Ssonne + Getadc(7)
Ssonne = Ssonne / 2
Ssonne = Ssonne - 1024
Ssonne = Ssonne / -2
'If Ssonne < 1 Then Ssonne = 0
'If Ssonne > 99 Then Ssonne = 99
Ssonne = Ssonnetemp + Ssonne
Ssonne = Ssonne \ 2
Ssonnetemp = Ssonne
Ssonnetxt = Str(ssonne)
Ssonnetxt = Format(ssonnetxt , " 0")
Ohelligkeit:
'Kurzschlusserkennung ausgeben oder Laufschrift erste Zeile
If Kurzs = 1 Then
Lcd2 = 0
If Blkurzs = 0 Then
Lcdz1txt = "Jalousien-Steuerung "
Lcdz2txt = " "
Lcdz3txt = " Motorstrom zu hoch "
Lcdz4txt = " "
Blkurzs = 1
Elseif Blkurzs = 1 Then
Lcdz2txt = "!!SCHWERER FEHLER!! "
Lcdz4txt = " " + Strom5txt + " " + Strom4txt + " " + Strom3txt + " " + _
Strom2txt + " " + Strom1txt
Blkurzs = 0
Portc.7 = 0
End If
End If
'Motorfehler ausgeben oder Laufschrift erste Zeile
If Motorfehler = 1 And Kurzs = 0 Then
Lcd2 = 0
If Blkurzs = 0 Then
Lcdz1txt = "Jalousien-Steuerung "
Lcdz2txt = " "
Lcdz3txt = "kein Motorstrom an "
Lcdz4txt = " "
Blkurzs = 1
Elseif Blkurzs = 1 Then
Lcdz2txt = "!!leichter Fehler!! "
Lcdz4txt = "Motornr. " + Motornrtxt
Blkurzs = 0
End If
End If
'Bei keinem Fehler Laufschrift 1. Zeile max. 255 Zeichen
If Kurzs = 0 And Motorfehler = 0 Then
If Voicez < 50 Then Lcd2 = 1
'Laufschrift 1. Zeile max. 255 Zeichen
Textz1txt = "Jalousien-Steuerung + Programmversion V3.00 + erst" 'die ersten 50 Zeichen
Textz1txt = Textz1txt + "ellt von Ralf Domschke + Funktionen + Taste A/gn=h" '100 Zeichen
Textz1txt = Textz1txt + "eben + B/ge=senken + C/rt=Stopp/Mute + D/blau=LCD-" '150 Zeichen
Textz1txt = Textz1txt + "-Ein/AUS/Gruppenwahl/lang=Sprachinfo + gnge=Pos, +" '200 Zeichen
Textz1txt = Textz1txt + " + gnrt=Zeit + gnbl=Hitzs./Offset + Jalousien-Steuerung " '255 Zeichen
If T1 < 235 Then T1 = T1 + 1 Else T1 = 1
Lcdz1txt = Mid(textz1txt , T1 , 20)
'Informationen in Zeile 3 und 4 wechseln lassen
If Blzeile4 < 30 Then
If Panacht > 9 Then Offsettxt = "Tag >" Else Offsettxt = "Tag >"
Offsettxt = Offsettxt + Str(patag) + "% Nacht <" + Str(panacht) + "%"
If Blzeile4 < 20 Then Offsettxt = "Tag+" + Str(offset) + "h Hitz." + _
Str(pahitzhalb) + "|" + Str(pahitzvoll) + "%-" + Str(pahysterr)
Lcdz3txt = Offsettxt
Lcdz4txt = "SO:" + Osonnetxt + "% SS:" + Ssonnetxt + "% TN:" + Tagnachtxt + "%"
End If
If Blzeile4 > 29 And Blzeile4 < 41 Then
Lcdz3txt = "Jalousien-Positionen"
Lcdz4txt = " " + Pos5txt + "% " + Pos4txt + "% " + Pos3txt + "% " + Pos2txt + _
"% " + Pos1txt + "%"
End If
Blzeile4 = Blzeile4 + 1
If Blzeile4 > 40 Then Blzeile4 = 1
End If
'Eingang 1 Heben Funkkanal1 /Taste grün auswerten
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 1 And Kurzs = 0 And F4grup <> 1 Then
Portc.7 = 0 'LCD Beleuchtung an
Voicez = 100
F1heb = 1
F2senk = 0
File = 1
Call Voice
If Tag = 1 Then
Mantag = 1
Mannacht = 0
Hitzso = 0
Hitzss = 0
Elseif Nacht = 1 Then
Mannacht = 1
Mantag = 0
End If
'Warte bis Taste losgelassen wurde
Loslassh:
Waitms 100
If Pinb.5 = 0 Then Goto Loslassh
Goto Los
End If
'Eingang 2 Senken Funkkananl2 /Taste gelb auswerten
If Pinb.6 = 0 And Pinb.5 = 1 And Pinb.7 = 1 And Kurzs = 0 And F4grup <> 1 Then
Portc.7 = 0 'LCD Beleuchtung an
Voicez = 100
F1heb = 0
F2senk = 1
File = 2
Call Voice
If Tag = 1 Then
Mantag = 1
Mannacht = 0
Hitzso = 0
Hitzss = 0
Elseif Nacht = 1 Then
Mannacht = 1
Mantag = 0
End If
'Warte bis Taste losgelassen wurde
Loslass:
Waitms 100
If Pinb.6 = 0 Then Goto Loslass
Goto Los
End If
'Eingang 3 Stop Funkkanal3 /Taste rot auswerten
'Reset für manuell getroffene Gruppenschaltungen
'Reset aller Motorports
If Pinb.7 = 0 And Pinb.5 = 1 And Pinb.6 = 1 Then
Portc.7 = 0 'LCD Beleuchtung an
Voicez = 100
F1heb = 0
F2senk = 0
Kurzs = 0
Kurzs1 = 0
Kurzs2 = 0
Kurzs3 = 0
Kurzs4 = 0
Kurzs5 = 0
Lcd2 = 1
Motorfehler = 0
Lcd2 = 0
Motornrtxt = "- - - - - "
Portc = &B00000000
Ocr2 = 0
Pwm = 0
File = 3
F4grup = 0
Call Voice
Lcdz2txt = "!!manueller Stopp!!"
Locate 2 , 1
Lcd Lcdz2txt
Waitms 1000
If Pinb.7 = 0 And Pinb.5 = 1 And Pinb.6 = 1 Then
Hitzso = 0
Hitzss = 0
'Wenn beim aut. lange Heben Stop gedrückt wird, wird bis zum nächsten
'Abend nicht wieder aut. gehoben und wenn schon man Stop gesetz wird das wieder aufgehoben
If Tag = 1 And Mantag = 0 Then
Mantag = 1
Lcdz2txt = "Standy - Tag nur man"
Elseif Nacht = 1 And Mannacht = 0 Then
Mannacht = 1
Lcdz2txt = "Standby - Nacht man."
Elseif Tag = 1 And Mantag = 1 Then
Mantag = 0
Mannacht = 0
Lcdz2txt = "Standy - Tag autom. "
Elseif Nacht = 1 And Mannacht = 1 Then
Mannacht = 0
Mantag = 0
Lcdz2txt = "Standy - Nacht autom"
End If
'LCD zurücksetzen und neu schreiben
Cls
Locate 1 , 1
Lcd Lcdz1txt
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Locate 4 , 1
Lcd Lcdz4txt
End If
F4grup = 0
'Warte bis Taste losgelassen wurde
Loslasst:
Waitms 100
If Pinb.7 = 0 And Voicez > 1 Then Goto Loslasst
End If
'Eingang 4 Gruppen Funkkanal4 /Taste blau auswerten / neu Beschreibung aufsagen
If Pinb.6 = 0 And Pinb.7 = 0 And Pinb.5 = 1 And F1heb = 0 And F2senk = 0 And Kurzs = 0 Then
Locate 1 , 1
Lcd "halten f.Erklaerung "
Mantag = 0
Mannacht = 0
Portc.7 = 0 'LCD Beleuchtung an
Voicez = 100
Waitms 800
'Ansage aller Funktionen wenn lange gedrückt
If F4grup = 0 And Pinb.6 = 0 And Pinb.7 = 0 And Pinb.5 = 1 Then
'bei langem Drücken kommt neu eine ausführliche Sprachprogrammbeschreibung
'für meine Frauen, die aber durch nochmaliges Drücken unterbrogen werden kann.
File = 21
Call Voice
End If
Loslassg:
Waitms 1000
If F4grup = 0 Then
Lcdz2txt = "Tag/Nacht Automatic "
Lcdz3txt = "mit Hitzeschutz S+O "
End If
If F4grup = 1 Then
Lcdz2txt = "alles ausser Betrieb"
Lcdz3txt = "Motoranst. gesperrt "
End If
If F4grup = 2 Then
Lcdz2txt = "Tag/Nacht Automatic "
Lcdz3txt = "ohne Hitzeschutz SO "
End If
If F4grup > 2 Then
Lcdz2txt = "manuelle Steuerung "
If F4grup = 4 Then Lcdz3txt = " Motor M5 Ostseite "
If F4grup = 5 Then Lcdz3txt = " Motor M4 Ostseite "
If F4grup = 6 Then Lcdz3txt = " Motor M3 Suedseite "
If F4grup = 7 Then Lcdz3txt = " Motor M2 Suedseite "
If F4grup = 8 Then Lcdz3txt = " Motor M1 Suedseite "
End If
'LCD temp Texte schreiben
Locate 1 , 1
Lcd "bl>Autom/Gruppenwahl"
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Locate 4 , 1
Lcd "Save mit roter Taste"
'Funktionsgruppen hochzählen wenn blau gedrückt
If Pinb.6 = 0 And Pinb.7 = 0 Then
Voicez = 100
F4grup = F4grup + 1
If F4grup = 9 Then F4grup = 0
File = 4
If F4grup > 1 Then File = 3 + F4grup '
If F4grup <> 1 Then Call Voice
Hitzss = 0
Hitzso = 0
End If
Voicez = Voicez - 1
'erst wenn rot gedrückt wird Ausstieg
If Voicez > 1 Then
If Pinb.7 = 1 Or Pinb.6 = 0 Then Goto Loslassg
Waitms 1000
End If
End If
'Eingang 5 (Grün+gelb) - Motoren
'- alles auf 0% setzen gelb loslassen
'- alles auf 99% setzen grün loslassen
'- Gruppenschaltung und Hiztzeschutz reseten
'- Parameter Kurzschlussstrom ändern
'- Parameter Senkzeit ändern
'- Parameter Hebezeit ändern
'- Parameter PWM Senken ändern
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 1 Then
Portc.7 = 0 'LCD Beleuchtung an
Voicez = 100
'LCD temp Texte schreiben
Lcdz1txt = "G 0>99>0 G&Y-RHitzG "
Lcdz2txt = "G&R ZeitH G&B ZeitS "
Lcdz3txt = " " + Pos5txt + "% " + Pos4txt + "% " + Pos3txt + "% " + Pos2txt + _
"% " + Pos1txt + "%"
Lcdz4txt = "Y PWM B Strom R Exit"
Cls
Locate 1 , 1
Lcd Lcdz1txt
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Locate 4 , 1
Lcd Lcdz4txt
Loslass5:
Waitms 1000
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 1 Then Goto Loslass5
Loslass5a:
Waitms 100
'nur GN Positionen auf 99% = oben oder unten setzen
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 1 Then
If Lcdz3txt = " 0% 0% 0% 0% 0%" Then
Pos1 = 99
Pos2 = 99
Pos3 = 99
Pos4 = 99
Pos5 = 99
Pos1txt = "99"
Pos2txt = "99"
Pos3txt = "99"
Pos4txt = "99"
Pos5txt = "99"
Lcdz3txt = " 99% 99% 99% 99% 99%"
Else
Pos1 = 0
Pos2 = 0
Pos3 = 0
Pos4 = 0
Pos5 = 0
Pos1txt = " 0"
Pos2txt = " 0"
Pos3txt = " 0"
Pos4txt = " 0"
Pos5txt = " 0"
Lcdz3txt = " 0% 0% 0% 0% 0%"
End If
Voicez = 100
End If
'GN+GE Reset Gruppenschaltung + Hitzeschutz
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 1 Then
F4grup = 0
Osonne = 0
Ssonne = 0
Hitzss = 0
Hitzso = 0
Voicez = 100
Lcdz2txt = "F4G= " + Str(f4grup) + " HSS= " + Str(hitzss) + " HSO= " + Str(hitzso)
End If
'nur GE PWM Rate für Senken erhöhen
If Pinb.5 = 1 And Pinb.6 = 0 And Pinb.7 = 1 Then
If Papwmsenk < 246 Then Papwmsenk = Papwmsenk + 1 Else Papwmsenk = 200
Lcdz2txt = "PWM senken: " + Str(papwmsenk) + " % +"
Voicez = 100
End If
'BL Kurzschlussstrom erhöhen
If Pinb.5 = 1 And Pinb.6 = 0 And Pinb.7 = 0 Then
If Pakurzs < 416 Then Pakurzs = Pakurzs + 1 Else Pakurzs = 300
Lcdz2txt = "Motorstrom: " + Str(pakurzs) + " mA +"
Voicez = 100
End If
'GN+BL Senkzeit erhöhen
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 0 Then
If Pasenkt < 31 Then Pasenkt = Pasenkt + 1 Else Pasenkt = 1
Lcdz2txt = "Senkzeit: " + Str(pasenkt) + " ms/Zykl"
Voicez = 100
End If
'GN+RT Hebezeit erhöhen
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 0 Then
If Pahebet < 100 Then Pahebet = Pahebet + 1 Else Pahebet = 20
Lcdz2txt = "Hebezeit: " + Str(pahebet) + " ms/Zykl"
Voicez = 100
End If
'LCD aktuelle Texte schreiben
If Voicez < 70 Then Lcdz2txt = "G&R ZeitH G&B ZeitS "
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Voicez = Voicez - 1
If Voicez > 1 Then
If Pinb.5 = 0 Or Pinb.6 = 0 Or Pinb.7 = 1 Then Goto Loslass5a
Waitms 1000
End If
Pakurzsx = Pakurzs
Pasenktx = Pasenkt
Pahebetx = Pahebet
Papwmsenkx = Papwmsenk
End If
'Eingang 6 grün+rot - Zeit
'- Stunden / Minuten / Woche /Eichfaktor einstellen
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 0 Then
Portc.7 = 0 'LCD Beleuchtung an
Voicez = 100
'LCD temp Texte schreiben
Lcdz1txt = "G&Y Tag+ G hh+ Y mm+"
Lcdz2txt = ">Mo>Mi>So> " + Zeittxt
Lcdz3txt = "Eich G&B- G&R+:" + Str(timereichg)
Lcdz4txt = "B mm- Red Save+Exit "
Cls
Locate 1 , 1
Lcd Lcdz1txt
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Locate 4 , 1
Lcd Lcdz4txt
Loslass6:
Waitms 100
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 0 Then Goto Loslass6
Loslass6a:
Waitms 300
'Wochentag einstellen grün+gelb
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 1 Then
Naechstertag:
Wochentag = Wochentag + 1
If Wochentag = 8 Then Wochentag = 1
If Wochentag = 1 Then Lcdz3txt = "Wochentag >Montag< "
If Wochentag = 2 Then Lcdz3txt = "Wochentag >Dienstag<"
If Wochentag = 3 Then Lcdz3txt = "Wochentag >Mittwoch<"
If Wochentag = 4 Then Lcdz3txt = "Wochentag Donnerstag"
If Wochentag = 5 Then Lcdz3txt = "Wochentag >Freitag< "
If Wochentag = 6 Then Lcdz3txt = "Wochentag >Samstag< "
If Wochentag = 7 Then Lcdz3txt = "Wochentag >Sonntag< "
Waitms 200
End If
'Stunde einstellen - grün
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 1 Then
Sekunde = Sekunde + 3600
If Sekunde > 86399 Then Sekunde = Sekunde - 86400 '86400s = 24h damit Minuten erhalten bleiben
Zeittxt = Time(sekunde)
Lcdz2txt = "Set+ Stunde " + Zeittxt
Voicez = 100
End If
'Minute einstellen - gelb vor
If Pinb.5 = 1 And Pinb.6 = 0 And Pinb.7 = 1 Then
Sekunde = Sekunde + 60
If Sekunde > 86399 Then Sekunde = Sekunde - 86400
Zeittxt = Time(sekunde)
Lcdz2txt = "Set+ Minute " + Zeittxt
Voicez = 100
End If
'Minute einstellen - blau zurück
If Pinb.5 = 1 And Pinb.6 = 0 And Pinb.7 = 0 Then
Sekunde = Sekunde - 60
If Sekunde < 0 Then Sekunde = 86400 + Sekunde
Zeittxt = Time(sekunde)
Lcdz2txt = "Set- Minute " + Zeittxt
Voicez = 100
End If
'Timereichung- grün+blau
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 0 Then
Timereichg = Timereichg - 1
If Timereichg < 34200 Then Timereichg = 34200
Lcdz3txt = "Eichfaktor- " + Str(timereichg)
Voicez = 100
End If
'Timereichung+ grün+rot
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 0 Then
Timereichg = Timereichg + 1
If Timereichg > 34350 Then Timereichg = 34350
Lcdz3txt = "Eichfaktor+ " + Str(timereichg)
Voicez = 100
End If
'LCD Texte schreiben
If Voicez < 60 Then Lcdz3txt = "Eich G&B- G&R+:" + Str(timereichg)
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Voicez = Voicez - 1
'Schleife nur wenn rot allein gedrückt wird Ausstieg
If Voicez > 1 Then
If Pinb.5 = 0 Or Pinb.6 = 0 Or Pinb.7 = 1 Then Goto Loslass6a
Waitms 1000
End If
Timereichgx = Timereichg '>34285< +31250 = 65535
End If
'Eingang 7 gn+bl oder gn+ge+rt - Helligkeitsteuerungen
'- Tagverzögerung, Hitzeschutz und Tagnachtschwellen einstellen
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 0 Then
Portc.7 = 0 'LCD Beleuchtung an
Voicez = 100
'LCD temp Texte schreiben
Lcdz1txt = "Hitzesc G=50% Y=100%"
Lcdz2txt = "G+Y=Off G+R=Tag BL=N"
Lcdz3txt = Offsettxt
Lcdz4txt = "G+B=Hy Red Save+Exit"
Cls
Locate 1 , 1
Lcd Lcdz1txt
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Locate 4 , 1
Lcd Lcdz4txt
Loslass7:
Waitms 100
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 0 Then Goto Loslass7
Loslass7a:
Waitms 300
'Schaltschwelle Tag einstellen - grün + rot
If Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 0 Then
Patag = Patag + 1
If Patag = 31 Then Patag = 10
If Patag <= Panacht Then Patag = Panacht + 1
Voicez = 100
If Panacht > 9 Then Offsettxt = "Tag >" Else Offsettxt = "Tag >"
Offsettxt = Offsettxt + Str(patag) + "% Nacht <" + Str(panacht) + "%"
Goto Lcdhalten
'Schaltschwelle Nacht einstellen - gelb + rot
Elseif Pinb.5 = 1 And Pinb.6 = 0 And Pinb.7 = 0 Then
Panacht = Panacht + 1
If Panacht = 21 Then Panacht = 10
If Patag <= Panacht Then Panacht = Patag - 1
Voicez = 100
If Panacht > 9 Then Offsettxt = "Tag >" Else Offsettxt = "Tag >"
Offsettxt = Offsettxt + Str(patag) + "% - Nacht <" + Str(panacht) + "%"
Goto Lcdhalten
End If
'Offset einstellen - grün+gelb
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 1 Then
Offset = Offset + 1
Voicez = 100
Goto Lcdoffsethitz
'Hitzeschutzschwelle 50% einstellen - grün
Elseif Pinb.5 = 0 And Pinb.6 = 1 And Pinb.7 = 1 Then
Pahitzhalb = Pahitzhalb + 1
If Pahitzhalb = 99 Then Pahitzhalb = 70
Voicez = 100
Goto Lcdoffsethitz
'Hitzeschutzschwelle 100% einstellen - gelb
Elseif Pinb.5 = 1 And Pinb.6 = 0 And Pinb.7 = 1 Then
Pahitzvoll = Pahitzvoll + 1
If Pahitzvoll = 99 Then Pahitzvoll = 70
Voicez = 100
Goto Lcdoffsethitz
End If
'Hysterese einstellen - grün+blau
If Pinb.5 = 0 And Pinb.6 = 0 And Pinb.7 = 0 Then
Pahysterr = Pahysterr + 1
Voicez = 100
Goto Lcdoffsethitz
End If
Goto Lcdhalten
Lcdoffsethitz:
If Pahysterr > 5 Then Pahysterr = 0
If Offset > 4 Then Offset = 0
Offsettxt = "Tag+" + Str(offset) + "h Hitz." + Str(pahitzhalb) + "|" + _
Str(pahitzvoll) + "%-" + Str(pahysterr)
Lcdhalten:
'LCD Texte schreiben
Lcdz3txt = Offsettxt
Locate 3 , 1
Lcd Lcdz3txt
Voicez = Voicez - 1
If Voicez > 1 Then
If Pinb.5 = 0 Or Pinb.6 = 0 Or Pinb.7 = 1 Then Goto Loslass7a
Waitms 1000
End If
Patagx = Patag
Panachtx = Panacht
Pahitzhalbx = Pahitzhalb
Pahitzvollx = Pahitzvoll
Pahysterrx = Pahysterr
End If
'Ende Eingaben
'#########################################################################################################
'Auswertungen
If Kurzs = 0 And Voicez < 40 Then
'Auswertung ob Nacht und automatisch senken
If Tagnacht < Panacht And F4grup <> 1 And Nacht = 0 And Mannacht = 0 Then
If Firstrun = 0 Then
Pos1 = 0
Pos2 = 0
Pos3 = 0
Pos4 = 0
Pos5 = 0
Pos1txt = " 0"
Pos2txt = " 0"
Pos3txt = " 0"
Pos4txt = " 0"
Pos5txt = " 0"
End If
J = 0
Firstrun = 1
F2senk = 1
F1heb = 0
File = 12
Tag = 0
Nacht = 1
Mantag = 0
Motorfehler = 0
Hitzso = 0
Hitzss = 0
Zeit0 = 0
Zeit1 = 0
Zeit3 = 0
Call Voice
Goto Los
End If
'Auswertung ob wieder Tag und automatisch öffnen
If Tagnacht > Patag And F4grup <> 1 And Tag = 0 And Mantag = 0 Then
If Firstrun = 0 Then
Pos1 = 99
Pos2 = 99
Pos3 = 99
Pos4 = 99
Pos5 = 99
Pos1txt = "99"
Pos2txt = "99"
Pos3txt = "99"
Pos4txt = "99"
Pos5txt = "99"
Firstrun = 1
End If
If Offset = 0 And Wochentag < 6 Then
Elseif Offset = 1 And Wochentag < 6 And Zeit0 < 3600 Then
J = 3600 - Zeit0 '3600s = 1h
Goto Restzeit
Elseif Offset = 2 And Wochentag < 6 And Zeit0 < 7200 Then
J = 7200 - Zeit0 '7200s = 2h
Goto Restzeit
Elseif Offset = 3 And Wochentag < 6 And Zeit0 < 10800 Then
J = 10800 - Zeit0 '10800s = 3h
Goto Restzeit
Elseif Offset = 4 And Wochentag < 6 And Zeit0 < 14400 Then
J = 14400 - Zeit0 '14400s = 4h
Goto Restzeit
Elseif Wochentag > 5 And Sekunde < 34200 Then
J = 34200 - Sekunde '32400 = 9:00 Uhr
Goto Restzeit
End If
Offsettxt = "Tag+" + Str(offset) + "h Hitzs." + Str(pahitzhalb) _
+ "|" + Str(pahitzvoll) + "%-" + Str(pahysterr)
J = 0
Tag = 1
Hitzso = 0
Hitzss = 0
Nacht = 0
Mannacht = 0
If Mantag = 1 Then Goto Ohnerestzeit
F1heb = 1
F2senk = 0
File = 13
Motorfehler = 0
Zeit0 = 0
Zeit1 = 0
Zeit3 = 0
Call Voice
Goto Los
Restzeit:
If J > 0 Then Restzeittxt = Time(j)
Offsettxt = "Oeffnen in " + Restzeittxt
Lcdz3txt = Offsettxt
Tag = 0
Nacht = 1
Ohnerestzeit:
Else
If Tagnacht <= Patag Then Zeit0 = 0
End If
'Hitzeschutz Ostseite für 50% setzen
If Tag = 1 And Mantag = 0 And Osonne > Pahitzhalb And Hitzso = 0 Then
If Zeit1 > 179 Then '180s = 3min mindestens 3 Minuten Sonne
Resthsotxt = "??"
F2senk = 1
F1heb = 0
Hitzso = 1
Zeit1 = 0
File = 14
If Zeit3 > 179 Then
Resthsstxt = "??"
Hitzso = 1
File = 2
Zeit3 = 0
End If
Call Voice
Goto Los
End If
Else
If Hitzso < 2 Then Zeit1 = 0
End If
'Hitzeschutz Ostseite für 100% setzen
If Tag = 1 And Mantag = 0 And Osonne > Pahitzvoll And Hitzso = 2 Then
If Zeit1 > 179 Then '180s = 3min mindestens Sonne
Resthsotxt = "??"
F2senk = 1
F1heb = 0
Hitzso = 3
Zeit1 = 0
File = 14
Pos4 = 60
Pos5 = 60
If Zeit3 > 179 Then
Hitzso = 3
File = 2
Zeit3 = 0
End If
Call Voice
Goto Los
End If
Else
If Hitzso > 1 Then Zeit1 = 0
End If
'Wenn durch Gruppenschaltung Ostseite abgewählt dann Timer für Hitzeschutz auf 0 setzen
If Tag = 1 Then
If F4grup <> 0 Then Zeit1 = 0
End If
'Hitzeschutz Ostseite zurücksetzen (bei null = nacht oder Kabelbruch nicht mehr!)
If Pahysterr > 0 Then Pahitzhalb = Pahitzhalb - Pahysterr
If Tag = 1 And Mantag = 0 And Osonne < Pahitzhalb And Hitzso = 2 Then
If Zeit2 < 901 Then
K = 960 - Zeit2 '960-901 = 60/60 = 1
K = K / 60
Resthsotxt = Str(k)
Resthsotxt = Format(resthsotxt , " 0")
End If
If Zeit2 > 960 Then '960s = 16min
K = 0
F1heb = 1
F2senk = 0
Hitzso = 1
Zeit2 = 0
File = 15
Pos4 = 30
Pos5 = 30
If Pahysterr > 0 Then Pahitzhalb = Pahitzhalb + Pahysterr
Call Voice
Goto Los
End If
Else
If Hitzso < 3 Then Zeit2 = 0
End If
If Pahysterr > 0 Then Pahitzhalb = Pahitzhalb + Pahysterr
'Hitzeschutz Ostseite auf 50% zurücksetzen (bei null = nacht oder Kabelbruch nicht mehr!)
If Pahysterr > 0 Then Pahitzvoll = Pahitzvoll - Pahysterr
If Tag = 1 And Mantag = 0 And Osonne < Pahitzvoll And Hitzso = 4 Then
If Zeit2 < 901 Then
K = 960 - Zeit2 '1800-901 = 60/60 = 1
K = K / 60
Resthsotxt = Str(k)
Resthsotxt = Format(resthsotxt , " 0")
End If
If Zeit2 > 960 Then '960s = 16min
K = 0
F1heb = 1
F2senk = 0
Hitzso = 3
Zeit2 = 0
File = 15
Pos4 = 0
Pos5 = 0
If Pahysterr > 0 Then Pahitzvoll = Pahitzvoll + Pahysterr
Resthsotxt = "??"
Call Voice
Goto Los
End If
Else
If Hitzso > 2 Then Zeit2 = 0
End If
If Pahysterr > 0 Then Pahitzvoll = Pahitzvoll + Pahysterr
'Hitzeschutz Südseite für 50% setzen
If Tag = 1 And Mantag = 0 And Ssonne > Pahitzhalb And Hitzss = 0 Then
If Zeit3 > 179 Then '180s = 3min mindestens Sonne
Resthsstxt = "??"
F2senk = 1
F1heb = 0
Hitzss = 1
Zeit3 = 0
File = 16
Call Voice
Goto Los
End If
Else
If Hitzss < 2 Then Zeit3 = 0
End If
'Hitzeschutz Südseite für 100% setzen
If Tag = 1 And Mantag = 0 And Ssonne > Pahitzvoll And Hitzss = 2 Then
If Zeit3 > 179 Then '180s = 3min mindestens 3 Minuten Sonne
Resthsstxt = "??"
F2senk = 1
F1heb = 0
Hitzss = 3
Zeit3 = 0
File = 16
Pos1 = 60
Pos2 = 60
Pos3 = 60
Call Voice
Goto Los
End If
Else
If Hitzss > 1 Then Zeit3 = 0
End If
'Wenn durch Gruppenschaltung Südseite abgewählt, dann Timer für Hitzeschutz auf 0 setzen
If Tag = 1 Then
If F4grup <> 0 Then Zeit3 = 0
End If
'Hitzeschutz Südseite zurücksetzen (bei null = nacht oder Kabelbruch nicht mehr!)
If Pahysterr > 0 Then Pahitzhalb = Pahitzhalb - Pahysterr
If Tag = 1 And Mantag = 0 And Ssonne < Pahitzhalb And Hitzss = 2 Then
If Zeit4 < 901 Then
L = 960 - Zeit4 '960-901 = 60/60 = 1
L = L / 60
Resthsstxt = Str(l)
Resthsstxt = Format(resthsstxt , " 0")
End If
If Zeit4 > 960 Then '960s = 16min
L = 0
F2senk = 0
F1heb = 1
Hitzss = 1
Zeit4 = 0
File = 17
Pos1 = 30
Pos2 = 30
Pos3 = 30
If Pahysterr > 0 Then Pahitzhalb = Pahitzhalb + Pahysterr
Call Voice
Goto Los
End If
Else
If Hitzss < 3 Then Zeit4 = 0
End If
If Pahysterr > 0 Then Pahitzhalb = Pahitzhalb + Pahysterr
'Hitzeschutz Südseite auf 50% zurücksetzen (bei null = nacht oder Kabelbruch nicht mehr!)
If Pahysterr > 0 Then Pahitzvoll = Pahitzvoll - Pahysterr
If Tag = 1 And Mantag = 0 And Ssonne < Pahitzvoll And Hitzss = 4 Then
If Zeit4 < 901 Then
L = 960 - Zeit4 '960-901 = 60/60 = 1
L = L / 60
Resthsstxt = Str(l)
Resthsstxt = Format(resthsstxt , " 0")
End If
If Zeit4 > 960 Then '960s = 16min
L = 0
F2senk = 0
F1heb = 1
Hitzss = 3
Zeit4 = 0
File = 17
Pos1 = 0
Pos2 = 0
Pos3 = 0
If Pahysterr > 0 Then Pahitzvoll = Pahitzvoll + Pahysterr
Resthsstxt = "??"
Call Voice
End If
Else
If Hitzss > 2 Then Zeit4 = 0
End If
End If
If Pahysterr > 0 Then Pahitzvoll = Pahitzvoll + Pahysterr
Los:
'Final LCD Texte generieren
'Nur in bestimmten Modis wird dieser Text angezeigt
If Lcd2 = 1 Then
Wotagtx = "?? "
If Wochentag = 1 Then Wotagtx = "Mo "
If Wochentag = 2 Then Wotagtx = "Di "
If Wochentag = 3 Then Wotagtx = "Mi "
If Wochentag = 4 Then Wotagtx = "Do "
If Wochentag = 5 Then Wotagtx = "Fr "
If Wochentag = 6 Then Wotagtx = "Sa "
If Wochentag = 7 Then Wotagtx = "So "
If Tag = 1 And F4grup <> 1 And Mantag = 0 Then Lcdz2txt = "Tag auto " + Wotagtx + Zeittxt
If Zeit1 > 0 And Voicez < 1 Then
If Deltaz1 > 59 Then
Deltaz1m = Deltaz1 / 60
Deltaz1m = Deltaz1m + 1
Zeit1txt = Str(deltaz1m)
Lcdz2txt = "Ost in " + Zeit1txt + "min " + Zeittxt
Else
Zeit1txt = Str(deltaz1)
Zeit1txt = Format(zeit1txt , " 0")
Lcdz2txt = "Ost in " + Zeit1txt + "s " + Zeittxt
End If
End If
If Zeit3 > 0 And Voicez < 1 Then
If Deltaz3 > 59 Then
Deltaz3m = Deltaz3 / 60
Deltaz3m = Deltaz3m + 1
Zeit3txt = Str(deltaz3m)
Lcdz2txt = "Sud in " + Zeit3txt + "min " + Zeittxt
If Zeit1 > 0 Then Lcdz2txt = "O|S " + Zeit1txt + "|" + Zeit3txt + " min " + Zeittxt
Else
Zeit3txt = Str(deltaz3)
Zeit3txt = Format(zeit3txt , " 0")
Lcdz2txt = "Sud in " + Zeit3txt + "s " + Zeittxt
If Zeit1 > 0 Then Lcdz2txt = "O|S " + Zeit1txt + "|" + Zeit3txt + " s " + Zeittxt
End If
End If
If Tag = 1 And F4grup <> 1 And Mantag = 1 Then Lcdz2txt = "Tag man. " + Wotagtx + Zeittxt
If Nacht = 1 And F4grup <> 1 And Mannacht = 0 Then Lcdz2txt = "Nachtaut " + Wotagtx + Zeittxt
If Nacht = 1 And F4grup <> 1 And Mannacht = 1 Then Lcdz2txt = "Nachtman " + Wotagtx + Zeittxt
If Nacht = 1 And F4grup <> 1 And J > 0 Then Lcdz2txt = "bald Tag " + Wotagtx + Zeittxt
If Tag = 0 And Nacht = 0 Then Lcdz2txt = "Analyse Tag/Nacht/So"
If Tag = 1 And Nacht = 1 Then Lcdz2txt = "Analyse Tag/Nacht/So"
If Hitzso = 2 And Hitzss = 0 Then Lcdz2txt = "50% Hitzes.Ost " + Resthsotxt + "min"
If Hitzso = 4 And Hitzss = 0 Then Lcdz2txt = "100% Hitze.Ost " + Resthsotxt + "min"
If Hitzss = 2 And Hitzso = 0 Then Lcdz2txt = "50% Hitze.Sued " + Resthsstxt + "min"
If Hitzss = 4 And Hitzso = 0 Then Lcdz2txt = "100% Hitz.Sued " + Resthsstxt + "min"
If Hitzso = 2 And Hitzss = 2 Then Lcdz2txt = "50%Hitz.O|S " + Resthsotxt + "|" + Resthsstxt + "min"
If Hitzso = 4 And Hitzss = 4 Then Lcdz2txt = "100%HitzO|S " + Resthsotxt + "|" + Resthsstxt + "min"
If Hitzso = 2 And Hitzss = 4 Then Lcdz2txt = "50% O 100%S " + Resthsotxt + "|" + Resthsstxt + "min"
If Hitzso = 4 And Hitzss = 2 Then Lcdz2txt = "100%O 50% S " + Resthsotxt + "|" + Resthsstxt + "min"
If Hitzso = 2 And Hitzss = 0 And Mantag = 1 Then Lcdz2txt = "50% Hitzes.Sued man."
If Hitzss = 2 And Hitzso = 0 And Mantag = 1 Then Lcdz2txt = "50% Hitzes.Sued man."
If Hitzso = 4 And Hitzss = 0 And Mantag = 1 Then Lcdz2txt = "100% Hitzes.Ost man."
If Hitzss = 4 And Hitzso = 0 And Mantag = 1 Then Lcdz2txt = "100%Hitzes.Sued man."
If F4grup = 1 Then Lcdz2txt = "alles ausser Betrieb"
End If
'Refresh LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1. Zeichen
Lcd Lcdz1txt
Locate 2 , 1 'Cursor auf 2 Zeile, 1. Zeichen
Lcd Lcdz2txt
Locate 3 , 1 'Cursor auf 3 Zeile, 1. Zeichen
Lcd Lcdz3txt
Locate 4 , 1 'Cursor auf 4 Zeile, 1. Zeichen
Lcd Lcdz4txt
'Wenn heben oder senken ohne Kurzschluss angewählt wurde und die Sprachausgabe beendet ist
'zu Unterprogramm Motorenreglung springen und zuvor nochmal die Gruppenschaltung ansagen
If F1heb = 1 And F2senk = 1 Then
F1heb = 0
F2senk = 0
End If
If F1heb = 1 Or F2senk = 1 Then
If Kurzs = 0 And Pinb.7 = 1 And F4grup <> 1 Then
Endevoices:
Waitms 100
'wenn Sprache beendet dann Motoren ein, sonst hört man nix
If Pind.6 = 0 Then Call Motoren Else Goto Endevoices
End If
End If
'Zeitgesteuerte Sonderansagen
'20:15 es ist Fernsehzeit
If Sekunde = 72900 Then File = 24
'23:15 es ist Werktags und du solltest ins Bett gehen
'If Wochentag < 6 And Sekunde = 83700 Then File = 25
'00:00 Es Ist Mitternacht
If Sekunde = 0 Then File = 26
'23:45 Bist Du Schon Eingeschlafen
If Sekunde = 83700 Then File = 27
'21:00 Hura Es Ist Freitag
If Wochentag = 5 And Sekunde = 75600 Then File = 28
'22:30 So Ein Mist das WE ist vorbei
If Wochentag = 7 And Sekunde = 81000 Then File = 29
'21:30 Du solltest mal mit dem Hund gehen
If Sekunde = 77400 Then File = 30
'23:00 Handy laden nicht vegessen
If Sekunde = 82800 Then File = 31
If File > 23 Then Call Voice
Waitms 100
Loop
End Sub
'==============================================================================
'==============================================================================
'==============================================================================
'*********************** Unterprogramm Motorsteuerung *************************
Sub Motoren
'Reset Zähler PWM
I = 1
J = 0
'LCD feste Texte schreiben um bei PWM Zeit zu sparen
If F1heb = 1 Then
If F4grup < 4 Then Lcdz1txt = "Heben aktiv - alle " 'alle
If Hitzso = 1 Then Lcdz1txt = "Aufheben Hitzs. Ost " 'M5+M4
If Hitzss = 1 Then Lcdz1txt = "Aufheben Hitzs. Sued" 'M3+M2+M1
If Hitzso = 3 Then Lcdz1txt = "Reduzierung Hitzs.O " 'M5+M4
If Hitzss = 3 Then Lcdz1txt = "Reduzierung Hitzs.S " 'M3+M2+M1
If Hitzso = 1 And Hitzss = 1 Then Lcdz1txt = "Aufheben Hitzs. alle" 'alle
If Hitzso = 3 And Hitzss = 3 Then Lcdz1txt = "Reduzierung Hitzs.SO" 'alle
If F4grup = 4 Then Lcdz1txt = "Heben aktiv M5 Ost "
If F4grup = 5 Then Lcdz1txt = "Heben aktiv M4 Ost "
If F4grup = 6 Then Lcdz1txt = "Heben aktiv M3 Sued"
If F4grup = 7 Then Lcdz1txt = "Heben aktiv M2 Sued"
If F4grup = 8 Then Lcdz1txt = "Heben aktiv M1 Sued"
End If
If F2senk = 1 Then
If F4grup < 4 Then Lcdz1txt = "Senken aktiv - alle " 'alle
If Hitzso = 1 Then Lcdz1txt = "Senken 50% Hitzs.Ost" 'M5+M4
If Hitzss = 1 Then Lcdz1txt = "Senken 50%Hitzs.Sued" 'M3+M2+M1
If Hitzso = 3 Then Lcdz1txt = "Senken 100%Hitzs.Ost" 'M5+M4
If Hitzss = 3 Then Lcdz1txt = "Senken 100%Hitzs.Sue" 'M3+M2+M1
If Hitzso = 1 And Hitzss = 1 Then Lcdz1txt = "Aufheben Hitzs. alle" 'alle
If Hitzso = 3 And Hitzss = 3 Then Lcdz1txt = "Reduzierung Hitzs.SO" 'alle
If F4grup = 4 Then Lcdz1txt = "Senken aktiv M5 Ost "
If F4grup = 5 Then Lcdz1txt = "Senken aktiv M4 Ost "
If F4grup = 6 Then Lcdz1txt = "Senken aktiv M3 Sued"
If F4grup = 7 Then Lcdz1txt = "Senken aktiv M2 Sued"
If F4grup = 8 Then Lcdz1txt = "Senken aktiv M1 Sued"
End If
Lcdz3txt = "Strom in mA PWM 0%"
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd Lcdz1txt
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd Lcdz3txt
'Motorenports mit PWM nur einmalig ansteuern
Call Motorports
'==============================================================================
'Hauptschleife für PWM und Motorsteuerung
Do
'Wenn heben angefordert...
If F1heb = 1 And F2senk = 0 Then
'Position zählen
If Pos1 < 99 Then Pos1 = Pos1 + Portc.2
If Pos2 < 99 Then Pos2 = Pos2 + Portc.3
If Pos3 < 99 Then Pos3 = Pos3 + Portc.4
If Pos4 < 99 Then Pos4 = Pos4 + Portc.5
If Pos5 < 99 Then Pos5 = Pos5 + Portc.6
'Motorströme lesen
Call Motorstrom
'PWM für Anlauf heben und steigern auf 100% und für Endlage senken
If I = 1 Then Pwm = 200
If Pwm < 251 And Ende = 0 Then Pwm = Pwm + 5
If Ende = 1 And Pwm > 190 Then Pwm = Pwm - 5
'Tastverhältis 100% da heben
Ocr2 = Pwm
Ocr2 = Pwm
'Faktor zur Anpassung Hebezeit
Waitms Pahebet
'Erkennung ob Jalousien oben (reine Zeitbegrenzung)
If Ende = 0 Then
If F4grup < 4 Then
'Stop vor vollständig oben bei Hitzeschutz 50%
If Hitzss = 3 Then
If Pos1 > 35 Or Pos2 > 35 Or Pos3 > 35 Then Ende = 1
End If
If Hitzso = 3 Then
If Pos4 > 35 Or Pos5 > 35 Then Ende = 1
End If
If Pos1 > 97 And Pos2 > 97 And Pos3 > 97 And Pos4 > 97 And Pos5 > 97 Then Ende = 1
End If
If F4grup = 4 And Pos5 > 97 Then Ende = 1
If F4grup = 5 And Pos4 > 97 Then Ende = 1
If F4grup = 6 And Pos3 > 97 Then Ende = 1
If F4grup = 7 And Pos2 > 97 Then Ende = 1
If F4grup = 8 And Pos1 > 97 Then Ende = 1
End If
'falls alle Motoren abgeschaltet < 200mA und PWM > 45%, dann müssen die
'Jalousien alle oben sein
If Strom1 < 150 And Strom2 < 150 And Strom3 < 150 And Strom4 < 150 And _
Strom5 < 150 And I > 10 Then Ende = 1
'vorzeitiges Abschalten einzelner Jalousien wenn früher fertig
If Portc.2 = 1 And I > 10 And Strom1 < 150 Or Pos1 > 98 Then Portc.2 = 0
If Portc.3 = 1 And I > 10 And Strom2 < 150 Or Pos2 > 98 Then Portc.3 = 0
If Portc.4 = 1 And I > 10 And Strom3 < 150 Or Pos3 > 98 Then Portc.4 = 0
If Portc.5 = 1 And I > 10 And Strom4 < 150 Or Pos4 > 98 Then Portc.5 = 0
If Portc.6 = 1 And I > 10 And Strom5 < 150 Or Pos5 > 98 Then Portc.6 = 0
'Heben erfolgreich abgeschlossen
If Ende = 1 And Pwm < 215 Then
Pwm = 0
File = 22
Call Voice
End If
End If
'===============================================================================
'Wenn Senken angefordert
If F2senk = 1 And F1heb = 0 Then
'Position zählen (nur die Jalousien zählen die auch bewegt werden)
If Pos1 > 0 Then Pos1 = Pos1 - Portc.2
If Pos2 > 0 Then Pos2 = Pos2 - Portc.3
If Pos3 > 0 Then Pos3 = Pos3 - Portc.4
If Pos4 > 0 Then Pos4 = Pos4 - Portc.5
If Pos5 > 0 Then Pos5 = Pos5 - Portc.6
'Motorströme lesen
Call Motorstrom
'PWM für Anlauf senken und steigern auf 85% und für Endlage senken
If I = 1 Then Pwm = 125
If Pwm < Papwmsenk And Ende = 0 Then Pwm = Pwm + 10 '250 = 90%, 205 = 80%, 180 = 70%
If Ende = 1 And Pwm > 50 Then Pwm = Pwm - 5
Ocr2 = Pwm
'Faktor zur Anpassung Senkzeit
Waitms Pasenkt
'Erkennung ob Jalousien unten (reine Zeitbegrenzung)
If Ende = 0 Then
If F4grup < 4 Then
'Stop vor vollständig unten bei Hitzeschutz 50%
If Hitzss = 1 Then
If Pos1 < 70 Or Pos2 < 70 Or Pos3 < 70 Then Ende = 1
End If
If Hitzso = 1 Then
If Pos4 < 70 Or Pos5 < 70 Then Ende = 1
End If
If Pos1 < 15 And Pos2 < 15 And Pos3 < 15 And Pos4 < 15 And Pos5 < 15 Then Ende = 1
End If
If F4grup = 4 And Pos5 < 15 Then Ende = 1
If F4grup = 5 And Pos4 < 15 Then Ende = 1
If F4grup = 6 And Pos3 < 15 Then Ende = 1
If F4grup = 7 And Pos2 < 15 Then Ende = 1
If F4grup = 8 And Pos1 < 15 Then Ende = 1
End If
'falls alle Motoren abgeschaltet < 40mA aber noch 45% PWM angefordert, dann
'müssen die Jalousien alle unten sein
If Strom1 < 40 And Strom2 < 40 And Strom3 < 40 And Strom4 < 40 And Strom5 < 40 And I > 10 Then Ende = 1
'vorzeitiges Abschalten einzelner Jalousien wenn früher fertig
If Portc.2 = 1 And I > 10 And Strom1 < 35 Or Pos1 < 1 Then Portc.2 = 0
If Portc.3 = 1 And I > 10 And Strom2 < 35 Or Pos2 < 1 Then Portc.3 = 0
If Portc.4 = 1 And I > 10 And Strom3 < 35 Or Pos3 < 1 Then Portc.4 = 0
If Portc.5 = 1 And I > 10 And Strom4 < 35 Or Pos4 < 1 Then Portc.5 = 0
If Portc.6 = 1 And I > 10 And Strom5 < 35 Or Pos5 < 1 Then Portc.6 = 0
'Senken erfolgreich abgeschlossen
If Ende = 1 And Pwm < 51 And Kurzs = 0 Then
File = 23
Pwm = 0
Call Voice
End If
End If
'===============================================================================
'globale Kurzschlusserkennung
'neu Kurzschlussstrom anhand der PWM Rate reduzieren
If I > 10 Then
Kurzstrpwm = Pakurzs * Pwm
Kurzstrpwm = Kurzstrpwm / 255 'Bei 400mA PWM190 = 298ma , 220 = 345mA , 255 = 400mA´
Else
Kurzstrpwm = Pakurzs
End If
'beim Senken nur halber Wert
If F1heb = 1 Then Kurzstrpwm = Pakurzs Else Kurzstrpwm = Pakurzs * 0.7
'beim Senken nur 70% des Kurzschlusswertes
'Wenn Kurzschluss schon in der vorherigen Schleifer erkannt wurde aber Motorstrom
'immer noch zu hoch, dann über
'Polwendung ganze Gruppe abschalten
If Kurzs1 > 2 And Strom1 > Kurzstrpwm And Portc.0 = 1 Then Portc.0 = 0
If Kurzs2 > 2 And Strom2 > Kurzstrpwm And Portc.0 = 1 Then Portc.0 = 0
If Kurzs3 > 2 And Strom3 > Kurzstrpwm And Portc.0 = 1 Then Portc.0 = 0
If Kurzs4 > 2 And Strom4 > Kurzstrpwm And Portc.1 = 1 Then Portc.1 = 0
If Kurzs5 > 2 And Strom5 > Kurzstrpwm And Portc.1 = 1 Then Portc.1 = 0
'selektive Kurzschlusserkennung zählt Motorstromüberschreitungen mit
If Strom1 > Kurzstrpwm Then Kurzs1 = Kurzs1 + 1
If Strom2 > Kurzstrpwm Then Kurzs2 = Kurzs2 + 1
If Strom3 > Kurzstrpwm Then Kurzs3 = Kurzs3 + 1
If Strom4 > Kurzstrpwm Then Kurzs4 = Kurzs4 + 1
If Strom5 > Kurzstrpwm Then Kurzs5 = Kurzs5 + 1
'selektive Kurzschlusserkennung schaltet betroffenen Mosfet ab
If Kurzs1 = 1 And Portc.2 = 1 Then Portc.2 = 0
If Kurzs2 = 1 And Portc.3 = 1 Then Portc.3 = 0
If Kurzs3 = 1 And Portc.4 = 1 Then Portc.4 = 0
If Kurzs4 = 1 And Portc.5 = 1 Then Portc.5 = 0
If Kurzs5 = 1 And Portc.6 = 1 Then Portc.6 = 0
'Summenmeldung Kurzschluss generieren
If Kurzs1 = 1 Or Kurzs2 = 1 Or Kurzs3 = 1 Or Kurzs4 = 1 Or Kurzs5 = 1 Then Kurzs = 1
'alle Motorports sofort abschalten wenn Abbruchtaste
If Pinb.7 = 0 Then
Portc = &B00000000
Ende = 1
Pwm = 0
Ocr2 = 0
Abbruch = 1
End If
'PWM in % umrechnen
Pwm1 = Pwm * 100
Pwm1 = Pwm1 / 255
Pwmtxt = Str(pwm1)
Pwmtxt = Format(pwmtxt , " 0")
'nach 20 Zyclen Motorstrom auf Unterstrom überprüfen
If I = 20 And Kurzs = 0 Then
If Strom5 < 70 And Portc.6 = 1 And Pos5 > 15 And Pos5 < 85 Then _
Motornrtxt = "5 " Else Motornrtxt = "- "
If Strom4 < 70 And Portc.5 = 1 And Pos4 > 15 And Pos4 < 85 Then _
Motornrtxt = Motornrtxt + "4 " Else Motornrtxt = Motornrtxt + "- "
If Strom3 < 70 And Portc.4 = 1 And Pos3 > 15 And Pos3 < 85 Then _
Motornrtxt = Motornrtxt + "3 " Else Motornrtxt = Motornrtxt + "
If Strom2 < 70 And Portc.3 = 1 And Pos2 > 15 And Pos2 < 85 Then_
Motornrtxt = Motornrtxt + "2 " Else Motornrtxt = Motornrtxt + "- "
If Strom1 < 70 And Portc.2 = 1 And Pos1 > 15 And Pos1 < 85 Then_
Motornrtxt = Motornrtxt + "1 " Else Motornrtxt = Motornrtxt + "- "
If Motornrtxt = "- - - - - " Then Motorfehler = 0 Else Motorfehler = 1
End If
'damit Variable I nicht überläuft
If I < 21 Then I = I + 1
'Positionen in LCD String umwandeln siehe Sub Main
Pos1txt = Str(pos1)
Pos2txt = Str(pos2)
Pos3txt = Str(pos3)
Pos4txt = Str(pos4)
Pos5txt = Str(pos5)
Pos1txt = Format(pos1txt , " 0")
Pos2txt = Format(pos2txt , " 0")
Pos3txt = Format(pos3txt , " 0")
Pos4txt = Format(pos4txt , " 0")
Pos5txt = Format(pos5txt , " 0")
'LCD Texte schreiben
Lcdz2txt = " " + Pos5txt + "% " + Pos4txt + "% " + Pos3txt + "% " + Pos2txt + "% " + Pos1txt + "%"
Lcdz3txt = "Strom in mA PWM" + Pwmtxt + "%"
Lcdz4txt = " " + Strom5txt + " " + Strom4txt + " " + Strom3txt + " " + Strom2txt + " " + Strom1txt
Locate 2 , 1
Lcd Lcdz2txt
Locate 3 , 1
Lcd Lcdz3txt
Locate 4 , 1
Lcd Lcdz4txt
'Schleife bis Ende erkannt oder Abbruchtaste betätigt oder Kurzschluss erkannt
Loop Until Ende = 1 And Pwm = 0 Or Abbruch = 1
'alle Motorports abschalten
Portc = &B00000000
'Endlagen Abgleich und wenn Abbruch durch Taste oder Kurzschluss dann alle Positionen lassen
If Kurzs1 = 0 Then
If Pos1 < 20 Then Pos1 = 0
If Pos1 > 80 Then Pos1 = 99
If Hitzss = 1 And Pos1 < 70 Then Pos1 = 50
If Hitzss = 3 And Pos1 > 30 Then Pos1 = 50
End If
If Kurzs2 = 0 Then
If Pos2 < 20 Then Pos2 = 0
If Pos2 > 80 Then Pos2 = 99
If Hitzss = 1 And Pos2 < 70 Then Pos2 = 50
If Hitzss = 3 And Pos2 > 30 Then Pos2 = 50
End If
If Kurzs3 = 0 Then
If Pos3 < 20 Then Pos3 = 0
If Pos3 > 80 Then Pos3 = 99
If Hitzss = 1 And Pos3 < 70 Then Pos3 = 50
If Hitzss = 3 And Pos3 > 30 Then Pos3 = 50
End If
If Kurzs4 = 0 Then
If Pos4 < 20 Then Pos4 = 0
If Pos4 > 80 Then Pos4 = 99
If Hitzso = 1 And Pos4 < 70 Then Pos4 = 50
If Hitzso = 3 And Pos4 > 30 Then Pos4 = 50
End If
If Kurzs5 = 0 Then
If Pos5 < 20 Then Pos5 = 0
If Pos5 > 80 Then Pos5 = 99
If Hitzso = 1 And Pos5 < 70 Then Pos5 = 50
If Hitzso = 3 And Pos5 > 30 Then Pos5 = 50
End If
'Positionen in LCD String umwandeln siehe Sub Main
Pos1txt = Str(pos1)
Pos2txt = Str(pos2)
Pos3txt = Str(pos3)
Pos4txt = Str(pos4)
Pos5txt = Str(pos5)
Pos1txt = Format(pos1txt , " 0")
Pos2txt = Format(pos2txt , " 0")
Pos3txt = Format(pos3txt , " 0")
Pos4txt = Format(pos4txt , " 0")
Pos5txt = Format(pos5txt , " 0")
'Hitzeschutz setzen
If F2senk = 1 Then
If Hitzso = 1 Then Hitzso = 2
If Hitzso = 3 Then Hitzso = 4
If Hitzss = 1 Then Hitzss = 2
If Hitzss = 3 Then Hitzss = 4
End If
If F1heb = 1 Then
If Hitzso = 1 Then Hitzso = 0
If Hitzso = 3 Then Hitzso = 2
If Hitzss = 1 Then Hitzss = 0
If Hitzss = 3 Then Hitzss = 2
End If
'Merker Heben oder Senken usw. zurück setzen
F1heb = 0
F2senk = 0
Ende = 0
Pwm = 0
Abbruch = 0
I = 0
J = 0
If Kurzs = 1 Then
File = 19
Call Voice
End If
'zurück zu Main
End Sub
'==============================================================================
'==============================================================================
'==============================================================================
'********************** Unterprogramm Motorstrom ******************************
Sub Motorstrom
Z = 0
'zum Mittelwert bilden wird 10x gemessen addiert und danach durch 20
'geteilt damit wieder auf 512mA gemittelt wird
'10 bit = 1024 : 2 = 512mA
Strom1 = 0
Strom2 = 0
Strom3 = 0
Strom4 = 0
Strom5 = 0
For Z = 1 To 10
Strom1 = Getadc(0) + Strom1
Strom2 = Getadc(1) + Strom2
Strom3 = Getadc(2) + Strom3
Strom4 = Getadc(3) + Strom4
Strom5 = Getadc(4) + Strom5
Next Z
Strom1 = Strom1 / 20
Strom2 = Strom2 / 20
Strom3 = Strom3 / 20
Strom4 = Strom4 / 20
Strom5 = Strom5 / 20
'Strom mit letztem mitteln und Stromwert Zahl in String umwandeln
'neu nur wenn kein Kurzschluss vorliegt, damit Werte gespeichert werden
If Kurzs1 = 0 Then Strom1txt = Str(strom1)
If Kurzs2 = 0 Then Strom2txt = Str(strom2)
If Kurzs3 = 0 Then Strom3txt = Str(strom3)
If Kurzs4 = 0 Then Strom4txt = Str(strom4)
If Kurzs5 = 0 Then Strom5txt = Str(strom5)
'String in Format ohne Vornull aber mit gleitendem Leerzeichen
'umwandeln, damit Wert im LCD nicht hin und her springt
If Kurzs1 = 0 Then Strom1txt = Format(strom1txt , " 0")
If Kurzs2 = 0 Then Strom2txt = Format(strom2txt , " 0")
If Kurzs3 = 0 Then Strom3txt = Format(strom3txt , " 0")
If Kurzs4 = 0 Then Strom4txt = Format(strom4txt , " 0")
If Kurzs5 = 0 Then Strom5txt = Format(strom5txt , " 0")
End Sub
'==============================================================================
'==============================================================================
'==============================================================================
'********************** Unterprogramm Motorports ******************************
Sub Motorports
'PC0 22 O Polwendung Motor 1-3 Süden 0 = senken
'PC1 23 O Polwendung Motor 4-5 Osten 0 = senken
'PC2 24 O Motor 1 Süden 1 = Motor an
'PC3 25 O Motor 2 Süden 1 = Motor an
'PC4 26 O Motor 3 Süden 1 = Motor an
'PC5 27 O Motor 4 Osten 1 = Motor an
'PC6 28 O Motor 5 Osten 1 = Motor an
'Motorstrommittelwertmerker zurück setzen
Strom1 = 0
Strom2 = 0
Strom3 = 0
Strom4 = 0
Strom5 = 0
'Motorenports je nach Betriebsart für senken oder heben ansteuern zuerst senken
If F4grup <> 1 Then
If F4grup < 4 Then Portc = &B01111100 'M5|M4|M3|M2|M1
If F4grup = 0 Then
If Hitzso = 1 Then Portc = &B01100000 'M5+M4 Hitzso 50%
If Hitzso = 3 Then Portc = &B01100000 'M5+M4 Hitzso 100%
If Hitzss = 1 Then Portc = &B00011100 'M3+M2+M1 Hitzss 50%
If Hitzss = 3 Then Portc = &B00011100 'M3+M2+M1 Hitzss 100%
If Hitzso = 1 And Hitzss = 1 Then Portc = &B01111100
If Hitzso = 3 And Hitzss = 3 Then Portc = &B01111100
End If
If F4grup = 4 Then Portc = &B01000000 'M5 Ostseite
If F4grup = 5 Then Portc = &B00100000 'M4 Ostseite
If F4grup = 6 Then Portc = &B00010000 'M3 Südseite
If F4grup = 7 Then Portc = &B00001000 'M2 Südseite
If F4grup = 8 Then Portc = &B00000100 'M1 Südseite
'Bei Heben PortC.0 und 1 nachträglich ansteuern
If F2senk = 0 And F1heb = 1 Then
If F4grup > 5 Or F4grup < 4 Then Portc.0 = 1 '|M3-1|
If F4grup < 6 Then Portc.1 = 1 '|M4-5|
End If
Else
Portc = &B00000000 'alle AUS
End If
Waitms 200
'Set PWM
Pwm = 255
Ocr2 = Pwm
End Sub
'==============================================================================
'==============================================================================
'==============================================================================
'*************************** Unterprogramm Voice ******************************
'Übersicht Voicedateien
'File 1 = manuelles heben
'File 2 = manuelles senken
'File 3 = manueller Stop
'File 4 = Gruppenauswahl 0-alle
'File 5 = Gruppenauswahl 2-alle ohne Hitzeschutz
'File 6 = Gruppenauswahl 3-alle manuell
'File 7 = Einzelsteuerung 4-M5
'File 8 = Einzelsteuerung 5-M4
'File 9 = Einzelsteuerung 6-M3
'File 10 = Einzelsteuerung 7-M2
'File 11 = Einzelsteuerung 8-M1
'File 12 = Nacht
'File 13 = Tag
'File 14 = Sonnenschutz aktiv Osten
'File 15 = Sonnenschutz deaktiviert Osten
'File 16 = Sonnenschutz aktiv Süden
'File 17 = Sonnenschutz deaktiviert Süden
'File 18 = Kurzschluss bei Initialisierung
'File 19 = Kurzschluss bei Normalbetrieb
'File 20 = Begrüßung
'File 21 = neu Programmbeschreibung / Alles AUS
'File 22 = Heben erfolgreich abgeschlossen
'File 23 = Senken erfolgreich abgeschlossen
'File 24 = Es ist Fernsehzeit
'File 25 = Es ist Werktags und du solltest ins Bett gehen
'File 26 = Es ist Mitternacht
'File 27 = Bist du schon eingeschlafen
'File 28 = Hura es ist Freitag
'File 29 = so ein Mist das WE ist vorbei
'File 30 = Du solltest mal mit dem Hund gehen
'File 31 = Handy laden nicht vegessen
' Programm 5 bit decoder für sound
'PB0 1 O Attiny 861A PB4 SW1
'PB1 2 O Attiny 861A PB5 SW2
'PB2 3 O Attiny 861A PB6 SW3
'PB3 4 O Attiny 861A PA3 SW4
'PB4 5 O Attiny 861A PA4 SW5
Sub Voice
'Vertärker + LCD Licht ein
Portc.7 = 0
Warte:
'wenn Voice Stopp oder Gruppe ankommt, wird das Warten auf noch laufende Voices abgebrochen
If File > 2 And File < 12 Then Goto Weiter
If Pind.6 = 1 Then Goto Warte
Weiter:
'da das 8bit Muster negativ sein muss (0= aktiv) muss 255- file gerechenet werden
'Bsp. file 1 = 255 = 11111110
If File < 255 Then File = 255 - File Else File = 253 'Bei Überlauf Stop ausgeben
Portb = File
Waitms 200
Portb = 255
Voicez = 100 'für Abwärtztimer Voic/LCD Lichtnachlauf
If File > 23 Then Wait 1
File = 0
End Sub
'==============================================================================
'==============================================================================
'==============================================================================
'*************************** Unterprogramm Urzeit ******************************
'Uhrzeitinterupt
Sekundeisr:
Timer1 = Timereichg '= Startwert für eine s je Überlauf
Incr Sekunde
Incr Zeit0
Incr Zeit1
Incr Zeit2
Incr Zeit3
Incr Zeit4
Zeittxt = Time(sekunde)
If Sekunde > 86399 Then
Sekunde = 0
If Wochentag < 7 Then Wochentag = Wochentag + 1 Else Wochentag = 1
End If
'Restzeit Sonnenschutzverzögerung 3min
If Zeit1 < 181 Then Deltaz1 = 181 - Zeit1
If Zeit3 < 181 Then Deltaz3 = 181 - Zeit3
Return
End
|