$regfile = "m16def.dat" $crystal = 1000000 $hwstack = 32 $swstack = 32 $framesize = 40 Dim Sekunde As Word Dim Updownwert As Long Dim Updownmin As Long ' min. Wert bei Einstellungen Dim Updownmax As Long Dim Helligkeit1 As Byte Dim Helligkeiteram1 As Eram Byte Dim Helligkeit2 As Byte Dim Helligkeiteram2 As Eram Byte Dim Kontrastwert As Byte Dim Kontrasteram As Eram Byte Dim Svabit As Byte Dim Svaeram As Eram Byte Dim Powerzeit As Word Dim Powertime As Byte Dim Powereram As Eram Byte Dim Sequenzwert(17) As Word Dim Sequenztext(17) As String * 16 Dim Speicherwert(17) As Eram Word Dim Zeitpunkt(99) As Long Dim Zeiteram(99) As Eram Long Dim Menuetext(6) As String * 16 Dim Holdsub As Bit Dim Dimmzaehler As Byte ' Zähler für Aufblendfunktion Dim Images As Word ' Zähler Bilder für Automatik Dim Bilder As Word ' gesamte Anzahl Bilder Dim Poutenable As Bit ' Bit für Powertimeout Dim Uhrausblenden As Bit ' Bit für Uhrzeiteinstellung Dim Beschleunigung As Byte ' Zähler für Beschleunigung der Einstellungen Dim J As Byte ' allgemeiner Zähler Dim M As Byte ' Zähler für Hauptmenue Dim V As Word ' allgemeine Variable für Zwischenwerte Dim W As Long ' allgemeine Variable für Zwischenwerte Dim X As Word ' allgemeine Variable für Zwischenwerte Dim Z As Byte ' Zähler für Belichtungen + Untermenue Batterie Alias Portb.1 Fokus Alias Portb.4 ' Fokussignal an Kamera Shoot Alias Portb.7 ' Auslösen, Signal an Kamera Tdown Alias Pind.1 Tup Alias Pind.2 Tenter Alias Pind.3 Tmenuer Alias Pind.4 Tmenuel Alias Pind.5 Enable Interrupts 'Svabit = 1 ' nur für Test Svabit = Svaeram 'Powertime = 10 ' nur für Test Powertime = Powereram Config Porta = Output Config Pina.0 = Input Config Portb = Output Config Portc = Output Config Portd = Input Config Debounce = 100 Config Clock = Soft , Gosub = Sectic Config Adc = Single , Prescaler = Auto , Reference = Internal Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2 Config Lcd = 16 * 2 , Chipset = Dogm162v3 Cursor Off Noblink Cls Tccr0 = &B01110001 ' PWM für Helligkeitsteuerung Display If Tenter = 1 Then ' beim Einschalten max. Helligkeit bei gedrückter ENTER-Taste Ocr0 = 255 Helligkeit1 = 7 Helligkeit2 = 8 Kontrastwert = 12 Else ' Helligkeit1 = 7 ' nur für Test Helligkeit1 = Helligkeiteram1 ' Helligkeit2 = 8 ' nur für Test Helligkeit2 = Helligkeiteram2 ' Kontrastwert = 5 ' nur für Test Kontrastwert = Kontrasteram V = 2 ^ Helligkeit2 Ocr0 = V - 1 End If Gosub Contrastset Gosub Aufblenden Locate 1 , 1 : Lcd "Universal Timer " Locate 2 , 1 : Lcd "by Pit & TT 2007" Wait 1 For J = 1 To 17 ' Programmzeiten Aus EEPROM Lesen ' Sequenzwert(j) = 5 ' nur für Test Sequenzwert(j) = Speicherwert(j) Next J For J = 1 To 99 ' Zeitpunkt(j) = -1 ' nur für Test Zeitpunkt(j) = Zeiteram(j) Next J Menuetext(1) = " Einstellungen " Menuetext(2) = " Programmzeiten " Menuetext(3) = " Zeitpunkte " Menuetext(4) = "autom. Ausl" + Chr(148) + "sen " Menuetext(5) = " man. Ausl" + Chr(148) + "sen " Menuetext(6) = "zeitg. Ausl" + Chr(148) + "sen " Sequenztext(1) = "Warte bis Start " Sequenztext(2) = "Spiegelvorausl. " Sequenztext(3) = "Prog1 Belichtung" Sequenztext(4) = "Prog1 Pause " Sequenztext(5) = "Prog1 Bilder " Sequenztext(6) = "Prog2 Belichtung" Sequenztext(7) = "Prog2 Pause " Sequenztext(8) = "Prog2 Bilder " Sequenztext(9) = "Prog3 Belichtung" Sequenztext(10) = "Prog3 Pause " Sequenztext(11) = "Prog3 Bilder " Sequenztext(12) = "Prog4 Belichtung" Sequenztext(13) = "Prog4 Pause " Sequenztext(14) = "Prog4 Bilder " Sequenztext(15) = "Prog5 Belichtung" Sequenztext(16) = "Prog5 Pause " Sequenztext(17) = "Prog5 Bilder " Bereit: ' Spannung an Batterie messen Batterie = 1 Gosub Aufblenden Start Adc ' Spannungsteiler 10k 22k Select Case Getadc(0) Case 500 To 799 Locate 1 , 1 : Lcd " Batterie leer !" Locate 2 , 1 : Lcd " Bitte wechseln " Goto Bereit Case 800 To 900 Locate 1 , 1 : Lcd "Batterie schwach" Locate 2 , 1 : Lcd " Bitte wechseln " Case Is > 900 Locate 1 , 1 : Lcd " Batterie OK " Locate 2 , 1 : Lcd " starte Timer " End Select Stop Adc Batterie = 0 Wait 2 Startmenue: ' Startmenue M = 0 Z = 0 Sekunde = 0 Fokus = 0 Shoot = 0 Gosub Aufblenden Locate 1 , 1 : Lcd " Timer bereit " Locate 2 , 1 : Lcd "Menue ausw" ; Chr(132) ; "hlen " Gosub Warte1 Do Debounce Tmenuer , 1 , Hauptmenuer , Sub Debounce Tmenuel , 1 , Hauptmenuel , Sub If M = 1 And Tenter = 1 Then Goto Einstellungen If M = 2 And Tenter = 1 Then Goto Programme If M = 3 And Tenter = 1 Then Goto Zeitwerte If M = 4 And Tenter = 1 Then Goto Automatik If M = 5 And Tenter = 1 Then Goto Manuell If M = 6 And Tenter = 1 Then Goto Zeitgesteuert Waitms 100 Loop Schlafmodus: ' Stromsparmodus Gosub Loslassen Locate 1 , 1 : Lcd "Timer Canon EOS" Locate 2 , 1 : Lcd " Standby Modus " Disable Interrupts Tccr0 = &B00000000 Portb.3 = 1 Powerdown End Automatik: ' automatische Auslösung Holdsub = 1 Z = 1 Gosub Suchewert If Sequenzwert(z) = 0 Then Goto Fertig ' Wartezeit bis Start Gosub Loslassen Poutenable = 0 Bilder = Sequenzwert(5) + Sequenzwert(8) Bilder = Bilder + Sequenzwert(11) Bilder = Bilder + Sequenzwert(14) Bilder = Bilder + Sequenzwert(17) Sekunde = Sequenzwert(1) While Sekunde > 0 Debounce Tenter , 1 , Startmenue Waitms 100 Locate 1 , 1 : Lcd Sequenztext(1) Locate 2 , 3 : Lcd Sekunde ; " Sekunden " Wend If Sequenzwert(5) > 0 Then ' Anzahl Aufnahmen Programm 1 Images = Sequenzwert(5) Do Gosub Svaseq Do Gosub Sucheanzeige If Z = 3 Then Gosub Ausloesen1 Gosub Countdown If Holdsub = 0 Then Goto Startmenue Loop Until Z = 4 Images = Images - 1 Bilder = Bilder - 1 Loop Until Images = 0 End If If Sequenzwert(8) > 0 Then ' Anzahl Aufnahmen Programm 2 Images = Sequenzwert(8) Do Gosub Svaseq Z = 5 Do Gosub Sucheanzeige If Z = 6 Then Gosub Ausloesen1 Gosub Countdown If Holdsub = 0 Then Goto Startmenue Loop Until Z = 7 Images = Images - 1 Bilder = Bilder - 1 Loop Until Images = 0 End If If Sequenzwert(11) > 0 Then ' Anzahl Aufnahmen Programm 3 Images = Sequenzwert(11) Do Gosub Svaseq Z = 8 Do Gosub Sucheanzeige If Z = 9 Then Gosub Ausloesen1 Gosub Countdown If Holdsub = 0 Then Goto Startmenue Loop Until Z = 10 Images = Images - 1 Bilder = Bilder - 1 Loop Until Images = 0 End If If Sequenzwert(14) > 0 Then ' ANzahl Aufnahmen Programm 4 Images = Sequenzwert(14) Do Gosub Svaseq Z = 11 Do Gosub Sucheanzeige If Z = 12 Then Gosub Ausloesen1 Gosub Countdown If Holdsub = 0 Then Goto Startmenue Loop Until Z = 13 Images = Images - 1 Bilder = Bilder - 1 Loop Until Images = 0 End If If Sequenzwert(17) > 0 Then ' ANzahl Aufnahmen Programm 5 Images = Sequenzwert(17) Do Gosub Svaseq Z = 14 Do Gosub Sucheanzeige If Z = 15 Then Gosub Ausloesen1 Gosub Countdown If Holdsub = 0 Then Goto Startmenue Loop Until Z = 16 Images = Images - 1 Bilder = Bilder - 1 Loop Until Images = 0 End If Fertig: ' automatische Auslösung beendet Gosub Aufblenden Locate 1 , 1 : Lcd "autom. Ausl" ; Chr(148) ; "sen " Locate 2 , 1 : Lcd "Programm beendet" Wait 4 Goto Bereit Zeitgesteuert: ' zeitgesteuerte Auslösung Gosub Loslassen Poutenable = 0 Z = 1 _day = 1 ' sicherstellen, das die Systemuhr genau bei Null anfängt _month = 1 _year = 0 While Zeitpunkt(z) > -1 And Z < 100 Locate 2 , 1 : Lcd " Warte " ; Time(zeitpunkt(z)) Do Locate 1 , 1 : Lcd " Jetzt " ; Time$ Debounce Tenter , 1 , Startmenue Waitms 100 Loop Until Zeitpunkt(z) = Syssec() If Svabit = 1 Then ' Spiegelvorauslösung aktiv ? Gosub Ausloesen2 Waitms 500 End If Gosub Ausloesen2 Z = Z + 1 Wend Gosub Aufblenden Locate 1 , 1 : Lcd "zeitg. Ausl" ; Chr(148) ; "sen " Locate 2 , 1 : Lcd "Programm beendet" Wait 4 Goto Bereit Safewerte: ' speichere alle Werte ins EEPROM Gosub Aufblenden Locate 2 , 1 : Lcd "Werte gesichert " For J = 1 To 17 Speicherwert(j) = Sequenzwert(j) Next J For J = 1 To 99 Zeiteram(j) = Zeitpunkt(j) Next J Helligkeiteram1 = Helligkeit1 Helligkeiteram2 = Helligkeit2 Kontrasteram = Kontrastwert Svaeram = Svabit Powereram = Powertime Goto Startmenue Zeitloeschen: ' alle Werte für zeitgesteuerte Auslösungen löschen Gosub Aufblenden Locate 2 , 1 : Lcd "Zeitp. gel" ; Chr(148) ; "scht " For J = 1 To 99 Zeitpunkt(j) = -1 Next J Wait 2 Goto Startmenue Einstellungen: ' Menue Einstellungen Gosub Subsetupr Gosub Warte1 Do Debounce Tmenuer , 1 , Subsetupr , Sub Debounce Tmenuel , 1 , Subsetupl , Sub Debounce Tdown , 1 , Subdown , Sub Debounce Tup , 1 , Subup , Sub If Z = 7 Then Debounce Tenter , 1 , Zeitloeschen Elseif Z = 8 Then Debounce Tenter , 1 , Safewerte Elseif Z = 9 Then Debounce Tenter , 1 , Schlafmodus Else Debounce Tenter , 1 , Startmenue End If Waitms 100 Loop Programme: ' Menue Programme Gosub Subsequenzr Gosub Warte1 Do Debounce Tmenuer , 1 , Subsequenzr , Sub Debounce Tmenuel , 1 , Subsequenzl , Sub Debounce Tdown , 1 , Subdown , Sub Debounce Tup , 1 , Subup , Sub Debounce Tenter , 1 , Startmenue Waitms 100 Loop Manuell: ' Menue manuelle Auslösung Gosub Submanr Gosub Warte1 Do Debounce Tmenuer , 1 , Submanr , Sub Debounce Tmenuel , 1 , Submanl , Sub If Z = 3 Then Debounce Tenter , 1 , Startmenue Else Debounce Tenter , 1 , Durchtasten , Sub End If Waitms 100 Loop Zeitwerte: ' Menue Werte Zeitpunkte Gosub Subzeitr Gosub Warte1 Do Debounce Tmenuer , 1 , Subzeitr , Sub Debounce Tmenuel , 1 , Subzeitl , Sub Debounce Tdown , 1 , Subdown , Sub Debounce Tup , 1 , Subup , Sub Debounce Tenter , 1 , Startmenue Waitms 100 Loop Durchtasten: ' manuelles Auslösen Gosub Aufblenden Locate 1 , 1 : Lcd " Fokussieren " Locate 2 , 1 : Lcd " Enter " Gosub Warte1 Gosub Warte0 Fokus = 1 If Svabit = 1 Then ' Spiegelvorauslösung aktiv ? Gosub Aufblenden Locate 1 , 1 : Lcd "Spiegelvorausl. " Gosub Warte1 Gosub Warte0 Gosub Ausloesen2 End If If Z = 1 Then ' mit Feststelltaste Gosub Aufblenden Locate 1 , 1 : Lcd " Ausl" ; Chr(148) ; "sen Start " Gosub Warte1 Gosub Warte0 Gosub Loslassen Gosub Aufblenden Locate 1 , 1 : Lcd " Belichte" Locate 2 , 1 : Lcd " Stop mit Enter " Poutenable = 0 Sekunde = 0 Gosub Ausloesen1 While Tenter = 0 Locate 1 , 11 : Lcd Sekunde ; "s" Waitms 100 Wend Gosub Aufblenden Locate 1 , 1 : Lcd " mit Feststell " Elseif Z = 2 Then ' ohne Feststelltaste Gosub Aufblenden Locate 1 , 1 : Lcd " man. Ausl" ; Chr(148) ; "sen " Locate 2 , 1 : Lcd "Enter und halten" Gosub Warte1 Gosub Warte0 Cls Gosub Aufblenden Locate 1 , 1 : Lcd " Aufnahme l" ; Chr(132) ; "uft " Sekunde = 0 Gosub Ausloesen1 While Tenter = 1 Gosub Aufblenden Locate 2 , 1 : Lcd " Belichte " ; Sekunde ; "s" Waitms 100 Wend Locate 1 , 1 : Lcd " ohne Feststell " End If Fokus = 0 Shoot = 0 Gosub Aufblenden Locate 2 , 1 : Lcd "Menue oder Enter" Gosub Warte1 Return Hauptmenuer: ' Hauptmenue rechte Taste M = M + 1 If M > 6 Or M < 1 Then M = 1 Gosub Menueanzeige Return Hauptmenuel: ' Hauptmenue linke Taste M = M - 1 If M < 1 Or M > 6 Then M = 6 Gosub Menueanzeige Return Menueanzeige: ' Hauptmenue Anzeige Gosub Aufblenden Locate 1 , 1 : Lcd Menuetext(m) Locate 2 , 1 : Lcd "Menue oder Enter" Return Subsetupr: ' Menue Einstellungen rechte Taste Z = Z + 1 If Z > 9 Or Z < 1 Then Z = 1 Gosub Setupanzeige Return Subsetupl: ' Menue Einstellungen linke Taste Z = Z - 1 If Z < 1 Or Z > 9 Then Z = 9 Gosub Setupanzeige Return Setupanzeige: ' Menue Einstellungen Anzeige Cls Select Case Z Case 1 Gosub Aufblenden Locate 1 , 1 : Lcd " LCD Kontrast " Locate 2 , 8 : Lcd Kontrastwert Case 2 Dimmzaehler = 255 Locate 1 , 1 : Lcd " LCD Helligkeit " Locate 2 , 8 : Lcd Helligkeit1 V = 2 ^ Helligkeit1 Ocr0 = V - 1 Case 3 Dimmzaehler = 255 Locate 1 , 1 : Lcd "max. Helligkeit " Locate 2 , 8 : Lcd Helligkeit2 V = 2 ^ Helligkeit2 Ocr0 = V - 1 Case 4 Gosub Aufblenden Locate 1 , 1 : Lcd " Uhr stellen " Locate 2 , 5 : Lcd Time$ Uhrausblenden = 0 Case 5 Gosub Aufblenden Locate 1 , 1 : Lcd " SVA aktiv ? " If Svabit = 1 Then Locate 2 , 1 : Lcd " ja " Else Locate 2 , 1 : Lcd " nein " End If Case 6 Gosub Aufblenden Locate 1 , 1 : Lcd " Power Timeout " Locate 2 , 4 : Lcd Powertime ; " Minuten" Case 7 Gosub Aufblenden Locate 1 , 1 : Lcd "Zeitp. l" ; Chr(148) ; "schen ?" Locate 2 , 1 : Lcd " Enter " Case 8 Gosub Aufblenden Locate 1 , 1 : Lcd "Werte speichern " Locate 2 , 1 : Lcd " Enter " Case 9 Gosub Aufblenden Locate 1 , 1 : Lcd " Standby Modus " Locate 2 , 1 : Lcd " Enter " End Select Return Subsequenzr: ' Menue Programmme rechte Taste Z = Z + 1 If Z > 17 Or Z < 1 Then Z = 1 Gosub Sequenzanzeige Return Subsequenzl: ' Menue Programmme linke Taste Z = Z - 1 If Z < 1 Or Z > 17 Then Z = 17 Gosub Sequenzanzeige Return Sequenzanzeige: ' Menue Programme Anzeige Gosub Aufblenden Cls Locate 1 , 1 : Lcd Sequenztext(z) If Z = 5 Or Z = 8 Or Z = 11 Or Z = 14 Or Z = 17 Then Locate 2 , 8 : Lcd Sequenzwert(z) Else Locate 2 , 3 : Lcd Sequenzwert(z) ; " Sekunden" End If Return Submanr: ' Menue manuelles Auslösen rechte Taste Z = Z + 1 If Z > 3 Or Z < 1 Then Z = 1 Gosub Mananzeige Return Submanl: ' Menue manuelles Auslösen linke Taste Z = Z - 1 If Z < 1 Or Z > 3 Then Z = 3 Gosub Mananzeige Return Mananzeige: ' Menue manuelles Auslösen Anzeige Gosub Aufblenden Select Case Z Case 1 Locate 1 , 1 : Lcd " mit Feststell " Case 2 Locate 1 , 1 : Lcd " ohne Feststell " Case 3 Locate 1 , 1 : Lcd " ins Hauptmenue " End Select Locate 2 , 1 : Lcd "Menue oder Enter" Return Subzeitr: ' Menue zeitgesteuerte Auslösung rechte Taste Z = Z + 1 If Z > 99 Or Z < 1 Then Z = 1 Gosub Zeitanzeige Return Subzeitl: ' Menue zeitgesteuerte Auslösung linke Taste Z = Z - 1 If Z < 1 Or Z > 99 Then Z = 99 Gosub Zeitanzeige Return Zeitanzeige: ' Menue zeitgesteuerte Auslösung Anzeige Gosub Aufblenden Cls Locate 1 , 1 : Lcd " Ausl" ; Chr(148) ; "sezeit " ; Z Select Case Zeitpunkt(z) Case Is < 0 Locate 2 , 1 : Lcd " N/A " Case Is < 86400 Locate 2 , 5 : Lcd Time(zeitpunkt(z)) Case Else Locate 2 , 3 : Lcd Time(zeitpunkt(z)) ; " +" ; Dayofyear(zeitpunkt(z)) End Select Return Subup: ' Taste UP gedrückt Beschleunigung = 0 Select Case M Case 1 If Z = 1 Then Updownwert = Kontrastwert Updownmax = 15 Elseif Z = 2 Then Updownwert = Helligkeit1 Updownmax = Helligkeit2 Elseif Z = 3 Then Updownwert = Helligkeit2 Updownmax = 8 Elseif Z = 4 Then Updownwert = Secofday() J = 0 Uhrausblenden = 1 Updownmax = 86399 Elseif Z = 5 Then Updownwert = Svabit Updownmax = 1 Elseif Z = 6 Then Updownwert = Powertime Updownmax = 99 End If Case 2 Updownwert = Sequenzwert(z) If Z = 2 Then Updownmax = 29 Else Updownmax = 9999 End If Case 3 Updownwert = Zeitpunkt(z) If Z > 1 Then Updownmin = Zeitpunkt(z - 1) + 9 If Updownwert < Updownmin Then Updownwert = Updownmin End If End If If Z = 99 Or Zeitpunkt(z + 1) = -1 Then Updownmax = 31622399 Else Updownmax = Zeitpunkt(z + 1) - 10 End If End Select While Tup = 1 And Updownwert < Updownmax Select Case Beschleunigung ' Beschleunigung nach jeweils 5 Sekunden Case Is < 5 Updownwert = Updownwert + 1 Case Is < 10 Updownwert = Updownwert + 10 Case Is < 15 Updownwert = Updownwert + 60 Case Is < 20 Updownwert = Updownwert + 600 Case Is < 25 Updownwert = Updownwert + 3600 Case Is < 30 Updownwert = Updownwert + 36000 Case Else Updownwert = Updownwert + 86400 End Select If Updownwert > Updownmax Then Updownwert = Updownmax ' nicht höher als Maximalwert gehen If M = 1 And Z = 4 And Updownwert = Updownmax Then Updownwert = 0 ' Uhr durchrollen Gosub Updown Wend Uhrausblenden = 0 Return Subdown: ' Taste DOWN gedrückt Beschleunigung = 0 Select Case M Case 1 If Z = 1 Then Updownwert = Kontrastwert Updownmin = 0 Elseif Z = 2 Then Updownwert = Helligkeit1 Updownmin = 0 Elseif Z = 3 Then Updownwert = Helligkeit2 Updownmin = Helligkeit1 Elseif Z = 4 Then Updownwert = Secofday() J = 0 Uhrausblenden = 1 Updownmin = -1 Elseif Z = 5 Then Updownwert = Svabit Updownmin = 0 Elseif Z = 6 Then Updownwert = Powertime Updownmin = 1 End If Case 2 Updownwert = Sequenzwert(z) Updownmin = 0 Case 3 Updownwert = Zeitpunkt(z) If Z = 1 Or Zeitpunkt(z - 1) = -1 Then Updownmin = -1 Else Updownmin = Zeitpunkt(z - 1) + 9 If Updownwert < Updownmin Then Updownwert = Updownmin End If End If End Select While Tdown = 1 And Updownwert > Updownmin Select Case Beschleunigung ' Beschleunigung nach jeweils 5 Sekunden Case Is < 5 Updownwert = Updownwert - 1 Case Is < 10 Updownwert = Updownwert - 10 Case Is < 15 Updownwert = Updownwert - 60 Case Is < 20 Updownwert = Updownwert - 600 Case Is < 25 Updownwert = Updownwert - 3600 Case Is < 30 Updownwert = Updownwert - 36000 Case Else Updownwert = Updownwert - 86400 End Select If M = 3 Then ' nicht kleiner als Minimumwert gehen If Updownwert <= Updownmin Then Updownwert = -1 Else If Updownwert < Updownmin Then Updownwert = Updownmin End If If M = 1 And Z = 4 And Updownwert = Updownmin Then Updownwert = 86399 ' Uhr durchrollen Gosub Updown Wend Uhrausblenden = 0 Return Updown: ' gemeinsamer Teil von Subup und Supdown Locate 2 , 1 : Lcd " " If M = 1 Then Select Case Z Case 4 Updownwert = Updownwert + J J = 0 Time$ = Time(updownwert) Locate 2 , 5 : Lcd Time$ Case 5 If Updownwert = 1 Then Locate 2 , 1 : Lcd " ja " Else Locate 2 , 1 : Lcd " nein " End If Case 6 Locate 2 , 4 : Lcd Updownwert ; " Minuten" Case 7 To 8 Locate 2 , 1 : Lcd " Enter " Case Else Locate 2 , 8 : Lcd Updownwert End Select Elseif M = 2 Then If Z = 5 Or Z = 8 Or Z = 11 Or Z = 14 Or Z = 17 Then Locate 2 , 8 : Lcd Updownwert Else Locate 2 , 3 : Lcd Updownwert ; " Sekunden" End If Elseif M = 3 Then Select Case Updownwert Case Is < 0 Locate 2 , 1 : Lcd " N/A " Case Is < 86400 Locate 2 , 5 : Lcd Time(updownwert) Case Else Locate 2 , 3 : Lcd Time(updownwert) ; " +" ; Dayofyear(updownwert) End Select End If Select Case M Case 1 If Z = 1 Then Gosub Aufblenden Kontrastwert = Updownwert Gosub Contrastset Elseif Z = 2 Then Dimmzaehler = 255 Helligkeit1 = Updownwert V = 2 ^ Helligkeit1 Ocr0 = V - 1 Elseif Z = 3 Then Dimmzaehler = 255 Helligkeit2 = Updownwert V = 2 ^ Helligkeit2 Ocr0 = V - 1 Elseif Z = 4 Then Gosub Aufblenden Elseif Z = 5 Then Gosub Aufblenden Svabit = Updownwert Elseif Z = 6 Then Gosub Aufblenden Powertime = Updownwert End If Case 2 Gosub Aufblenden Sequenzwert(z) = Updownwert Case 3 Gosub Aufblenden Zeitpunkt(z) = Updownwert End Select Waitms 100 Return Sucheanzeige: ' nächsten Wert suchen und Anzeigen der Zeiten Z = Z + 1 Gosub Suchewert Gosub Anzeige Return Suchewert: ' suche nächsten Wert >0 While Sequenzwert(z) = 0 And Z < 17 Z = Z + 1 Wend Return Anzeige: ' Anzeigen aktuellen Wertes der Programmzeiten Sekunde = Sequenzwert(z) Cls Locate 1 , 1 : Lcd Sequenztext(z) Locate 2 , 1 : Lcd Sekunde ; "s" Locate 2 , 7 : Lcd Images ; "n" Locate 2 , 12 : Lcd Chr(26) ; Bilder Return Svaseq: ' Spiegelvorauslösesequenz Z = 2 If Sequenzwert(2) > 0 And Svabit = 1 Then Gosub Anzeige Gosub Ausloesen2 While Sekunde > 0 And Holdsub = 1 Debounce Tenter , 1 , Setholdsub , Sub Waitms 100 Wend End If Return Countdown: ' Belichtungs- und Pausenzeit herunterzählen While Sekunde > 0 And Holdsub = 1 Debounce Tenter , 1 , Setholdsub , Sub Waitms 100 Wend Waitms 100 Shoot = 0 Fokus = 0 Return Sectic: ' Sekundenzähler Select Case Dimmzaehler ' automatisches Abdimmen Case 255 !nop Case Is < 5 Dimmzaehler = Dimmzaehler + 1 X = 2 ^ Helligkeit2 Ocr0 = X - 1 Case Else X = 2 ^ Helligkeit1 Ocr0 = X - 1 End Select If Poutenable = 1 Then ' automatischer Schlafmodus X = Powerzeit / 60 If X >= Powertime Then Goto Schlafmodus Else Powerzeit = Powerzeit + 1 End If End If Beschleunigung = Beschleunigung + 1 If M = 1 And Z = 4 Then ' zur Uhrzeiteinstellung J = J + 1 If Uhrausblenden = 0 Then Locate 2 , 5 : Lcd Time$ End If End If If M = 4 And Z > 0 Then ' für automatische Auslösung abwärts zählen If Sekunde > 0 Then Sekunde = Sekunde - 1 If Z > 1 Then Locate 2 , 1 : Lcd Sekunde ; "s " End If End If End If If M = 5 Then Sekunde = Sekunde + 1 ' für manuelle Auslösung aufwärts zählen Return Warte0: ' Warte, solange ENTER nicht gedrückt While Tenter = 0 Waitms 100 Wend Return Warte1: ' Warte solange ENTER gedrückt While Tenter = 1 Gosub Aufblenden Waitms 100 Wend Return Aufblenden: ' Helligkeit erhöhen bei gedrückter Taste Powerzeit = 0 Poutenable = 1 Dimmzaehler = 0 V = 2 ^ Helligkeit2 Ocr0 = V - 1 Return Ausloesen1: ' Kamera auslösen Fokus = 1 Waitms 100 Shoot = 1 Return Ausloesen2: ' Kamera auslösen Fokus = 1 Waitms 100 Pulseout Portb , 7 , 50000 Fokus = 0 Return Loslassen: ' Laß die ENTER-Taste endlich los ! Waitms 250 While Tenter = 1 Gosub Aufblenden Locate 1 , 1 : Lcd " Bitte Taste " Locate 2 , 1 : Lcd " loslassen ! " Waitms 100 Wend Cls Return Setholdsub: Holdsub = 0 Return Contrastset: ' Kontrasteinstellung Display V = Kontrastwert + 15 V = V And &B00001111 V = V + &B01110000 W = Kontrastwert + 15 Shift W , Right , 4 W = W + &B01010100 _temp1 = &B00101001 !rCall _Lcd_control _temp1 = V !rCall _Lcd_control _temp1 = W !rCall _Lcd_control _temp1 = &B00101000 !rCall _Lcd_control Return End