$regfile = "m16def.dat" $crystal = 1000000 $hwstack = 32 $swstack = 32 $framesize = 40 $prog &HFF , &HA1 , &H99 , &H00 ' Fusebits, BODEN=2,7V, sonst Standard Const Testmodus = 0 Dim Sekunde As Word ' Zähler für Belichtungezeit Dim Updownwert As Long ' Wert bei Einstellungen Dim Updownmin As Long ' min. Wert bei Einstellungen Dim Updownmax As Long ' max. Wert bei Einstellungen Dim Helligkeit1 As Byte ' Helligkeit Display normal Dim Helligkeiteram1 As Eram Byte ' Helligkeit Display normal im EERAM Dim Helligkeit2 As Byte ' Helligkeit Display aufgeblendet Dim Helligkeiteram2 As Eram Byte ' Helligkeit Display aufgeblendet im EERAM Dim Kontrastwert As Byte ' Kontrastwert Display Dim Kontrasteram As Eram Byte ' Kontrastwert Display im EERAM Dim Svabit As Byte ' Spiegelvorauslösung aktiv Dim Svaeram As Eram Byte ' Spiegelvorauslösung aktiv im EERAM Dim Powerzeit As Word ' abgelaufene Zeit bis Powerdown Dim Powertime As Byte ' Zeit bis Powerdown Dim Powereram As Eram Byte ' Zeit bis Powerdown im EERAM Dim Sequenzwert(29) As Word ' Zeiten für programmgesteuerte Auslösungen Dim Sequenztext1(3) As String * 10 ' Text für programmgesteuerte Aufnahmen Dim Sequenztext2(2) As String * 16 ' Text für programmgesteuerte Aufnahmen Dim Speicherwert(29) As Eram Word ' Zeiten für programmmgesteuerte Auslösungen im EERAM Dim Zeitpunkt(99) As Long ' Zeitpunkt bei zeitgesteuerten Auslösungen Dim Zeiteram(99) As Eram Long ' Zeitpunkt bei zeitgesteuerten Auslösungen im EERAM Dim Dimmzaehler As Byte ' Zähler für Aufblendfunktion Dim Poutenable As Bit ' Bit für Powertimeout Dim Powerout As Bit ' Bit für nächstmöglichen Powertimeout Dim Uhrausblenden As Bit ' Bit für Uhrzeiteinstellung Dim Beschleunigung As Byte ' Zähler für Beschleunigung der Einstellungen Dim Images As Word ' Zähler für Bilder Automatik Dim Bilder As Word ' gesamte Anzahl Bilder Dim I As Integer ' Variablenindex für programmgesteuerte Auslösung Dim J As Byte ' allgemeiner Zähler Dim M As Byte ' Zähler für Hauptmenue Dim P As Byte ' Programmindex für programmgesteuerte Auslösung 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 nur in Sectic-Routine ! Dim Z As Byte ' Zähler für Untermenue Batterie Alias Portb.2 ' Spannungsteiler aktivieren für Batterieprüfung Dimmer Alias Portd.4 ' PWM für Beleuchtung Display Shoot Alias Portb.0 ' Auslösen, Signal an Kamera Fokus Alias Portb.1 ' Fokussignal an Kamera Lcdon Alias Porta.3 ' Display einschalten Tup Alias Pind.0 ' Taste UP Tmenuer Alias Pind.1 ' Taste MENUE rechts Tenter Alias Pind.2 ' Taste ENTER Tmenuel Alias Pind.3 ' Taste MENUE links Tdown Alias Pind.6 ' Taste DOWN Lcdon = 1 ' Display einschalten #if Testmodus Svabit = 1 Powertime = 10 #else Svabit = Svaeram Powertime = Powereram #endif Config Porta = &B11111000 ' Port für Display + A/D-Wandler Config Portb = &B00001111 ' Fokus, Auslösung und Spannung für Spannungsteiler Config Portc = &B00000011 ' Port für Diplay Config Portd = &B10110000 ' Port für Tasten und Beleuchtung Portd = &B01001111 ' Pull-Up Widerstände aktivieren Config Debounce = 100 Config Clock = Soft , Gosub = Sectic Config Adc = Single , Prescaler = Auto , Reference = Internal Config Lcdpin = Pin , Db4 = Porta.7 , Db5 = Porta.6 , Db6 = Porta.5 , Db7 = Porta.4 , E = Portc.1 , Rs = Portc.0 Config Lcd = 16 * 2 , Chipset = Dogm162v3 Config Timer1 = Pwm , Pwm = 10 , Prescale = 1 , Compare B Pwm = Clear Up Cursor Off Noblink Cls Gosub Aufwachen For J = 1 To 29 ' Programmzeiten Aus EEPROM Lesen #if Testmodus Sequenzwert(j) = 5 #else Sequenzwert(j) = Speicherwert(j) #endif Next J For J = 1 To 99 #if Testmodus Zeitpunkt(j) = -1 #else Zeitpunkt(j) = Zeiteram(j) #endif Next J Sequenztext2(1) = "Warte bis Start " Sequenztext2(2) = "Spiegelvorausl. " Sequenztext1(1) = "Belichtung" Sequenztext1(2) = "Pause " Sequenztext1(3) = "Bilder " Bereit: ' Spannung an Batterie messen Gosub Aufblenden Batterie = 1 Start Adc ' Spannungsteiler 10k 22k Select Case Getadc(0) Case Is < 800 Locate 1 , 1 : Lcd " Batterie leer !" Locate 2 , 1 : Lcd " Bitte wechseln " #if Testmodus Waitms 500 #else Wait 4 #endif Goto Ausschalten Case Is < 900 Locate 1 , 1 : Lcd "Batterie schwach" Locate 2 , 1 : Lcd " Bitte wechseln " Case Else Locate 1 , 1 : Lcd " Batterie OK " Locate 2 , 1 : Lcd " starte Timer " End Select Stop Adc Batterie = 0 #if Testmodus Waitms 500 #else Wait 2 #endif Startmenue: ' Startmenue M = 0 Z = 0 Sekunde = 0 Fokus = 0 Shoot = 0 Locate 1 , 1 : Lcd " Timer bereit " Locate 2 , 1 : Lcd "Menue ausw„hlen " Gosub Aufblenden Gosub Warte0 Do Debounce Tmenuer , 0 , Hauptmenuer , Sub Debounce Tmenuel , 0 , Hauptmenuel , Sub Select Case M Case 1 Debounce Tenter , 0 , Einstellungen Case 2 Debounce Tenter , 0 , Programme Case 3 Debounce Tenter , 0 , Zeitwerte Case 4 Debounce Tenter , 0 , Automatik Case 5 Debounce Tenter , 0 , Zeitgesteuert Case 6 Debounce Tenter , 0 , Manuell Case 7 Debounce Tenter , 0 , Funktionen End Select If Powerout = 1 Then Goto Schlafmodus Loop Einstellungen: ' Menue Einstellungen Gosub Subsetupr Gosub Warte0 Do Debounce Tmenuer , 0 , Subsetupr , Sub Debounce Tmenuel , 0 , Subsetupl , Sub Debounce Tdown , 0 , Subdown , Sub Debounce Tup , 0 , Subup , Sub Select Case Z Case 7 Debounce Tenter , 0 , Progloeschen Case 8 Debounce Tenter , 0 , Zeitloeschen Case 9 Debounce Tenter , 0 , Safewerte Case 10 Debounce Tenter , 0 , Ausschalten Case Else Debounce Tenter , 0 , Startmenue End Select If Powerout = 1 Then Goto Schlafmodus #if Testmodus Waitms 100 #endif Loop Programme: ' Menue Programme Gosub Subsequenzr Gosub Warte0 Do Debounce Tmenuer , 0 , Subsequenzr , Sub Debounce Tmenuel , 0 , Subsequenzl , Sub Debounce Tdown , 0 , Subdown , Sub Debounce Tup , 0 , Subup , Sub Debounce Tenter , 0 , Startmenue If Powerout = 1 Then Goto Schlafmodus Loop Zeitwerte: ' Menue Werte Zeitpunkte Gosub Subzeitr Gosub Warte0 Do Debounce Tmenuer , 0 , Subzeitr , Sub Debounce Tmenuel , 0 , Subzeitl , Sub Debounce Tdown , 0 , Subdown , Sub Debounce Tup , 0 , Subup , Sub Debounce Tenter , 0 , Startmenue If Powerout = 1 Then Goto Schlafmodus Loop Manuell: ' Menue manuelle Auslösung Gosub Submanr Gosub Warte0 Do Debounce Tmenuer , 0 , Submanr , Sub Debounce Tmenuel , 0 , Submanl , Sub If Z = 3 Then Debounce Tenter , 0 , Startmenue Else Debounce Tenter , 0 , Durchtasten , Sub End If If Powerout = 1 Then Goto Schlafmodus Loop Funktionen: ' Menue Funktionen Gosub Subfunktr Gosub Warte0 Do Debounce Tmenuer , 0 , Subfunktr , Sub Debounce Tmenuel , 0 , Subfunktl , Sub Select Case Z Case 1 Debounce Tenter , 0 , Ausschalten Case 2 Debounce Tenter , 0 , Progloeschen Case 3 Debounce Tenter , 0 , Zeitloeschen Case 4 Debounce Tenter , 0 , Safewerte Case 5 Debounce Tenter , 0 , Information Case 6 Debounce Tenter , 0 , Startmenue End Select If Powerout = 1 Then Goto Schlafmodus Loop Automatik: ' automatische Auslösung Gosub Loslassen Poutenable = 0 Bilder = 0 For J = 5 To 29 Step 3 Bilder = Bilder + Sequenzwert(j) Next J Sekunde = Sequenzwert(1) ' Wartezeit While Sekunde > 0 Locate 1 , 1 : Lcd Sequenztext2(1) Locate 2 , 3 : Lcd Sekunde ; " Sekunden " Debounce Tenter , 0 , Startmenue Wend For P = 1 To 9 I = P * 3 ' Array Var Basis für Programm Images = Sequenzwert(i + 2) Locate 2 , 1 : Lcd " " While Images > 0 If Sequenzwert(i) > 0 Then If Svabit = 1 And Sequenzwert(2) > 0 Then Sekunde = Sequenzwert(2) ' Spiegelvorauslösung Gosub Ausloesen2 Locate 1 , 1 : Lcd Sequenztext2(2) Gosub Countdown If P = 10 Then Exit For End If Sekunde = Sequenzwert(i) ' Belichtung Gosub Ausloesen1 Locate 1 , 1 : Lcd "Prog" ; P ; " Belichtung" Gosub Countdown If P = 10 Then Exit For Sekunde = Sequenzwert(i + 1) ' Pause If Sekunde > 0 Then Locate 1 , 1 : Lcd "Prog" ; P ; " Pause " Gosub Countdown If P = 10 Then Exit For End If End If Decr Images Decr Bilder Wend Next P Locate 1 , 1 : Lcd "autom. Ausl”sen " Locate 2 , 1 : Lcd "Programm beendet" Gosub Aufblenden #if Testmodus Waitms 500 #else Wait 4 #endif Goto Bereit Ausschalten: ' Display aus Gosub Loslassen Lcdon = 0 Config Lcdon = Input Schlafmodus: ' Stromsparmodus Cls Locate 1 , 1 : Lcd " Standby Modus " Locate 2 , 5 : Lcd Time$ Config Dimmer = Input ' Beleuchtung ausschalten Enable Int0 On Int0 Aufwachen Config Int0 = Low Level Powerout = 1 Do Pulseout Portd , 7 , 500 ' LED Standby aufblitzen Powersave Loop Until Powerout = 0 W = Secofday() + 1 'irgendwo geht beim Einschalten eine Sekunde verloren Time$ = Time(w) Goto Bereit Zeitgesteuert: ' zeitgesteuerte Auslösung Gosub Loslassen Poutenable = 0 Z = 1 _day = 1 ' sicherstellen, das Systemdatum genau bei Null anfängt _month = 1 _year = 0 While Zeitpunkt(z) > -1 And Z < 100 If Svabit = 1 And Sequenzwert(2) > 0 Then ' Spiegelvorauslösung aktiv ? W = Zeitpunkt(z) - Sequenzwert(2) Else W = Zeitpunkt(z) End If Locate 2 , 1 : Lcd " Warte " ; Time(zeitpunkt(z)) ' warte bis Zeitpunkt erreicht Do Locate 1 , 1 : Lcd " Jetzt " ; Time$ Debounce Tenter , 0 , Bereit Loop Until W = Syssec() If Svabit = 1 And Sequenzwert(2) > 0 Then ' Spiegelvorauslösung Gosub Ausloesen2 Do Locate 1 , 1 : Lcd " SVA " ; Time$ Debounce Tenter , 0 , Bereit Loop Until Zeitpunkt(z) = Syssec() End If Locate 1 , 1 : Lcd " Shoot " ; Time$ Gosub Ausloesen2 ' Kamera auslösen Incr Z #if Testmodus Waitms 100 #endif Wend Locate 1 , 1 : Lcd "zeitg. Ausl”sen " Locate 2 , 1 : Lcd "Programm beendet" Gosub Aufblenden #if Testmodus Waitms 500 #else Wait 4 #endif Goto Bereit Safewerte: ' speichere alle Werte ins EEPROM Locate 2 , 1 : Lcd "Werte gesichert " Gosub Aufblenden For J = 1 To 29 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 Progloeschen: ' alle Werte für programmgesteuerte Auslösungen löschen Locate 2 , 1 : Lcd "Progr. gel”scht " Gosub Aufblenden For J = 1 To 29 Sequenzwert(j) = 0 Next J #if Testmodus Waitms 500 #else Wait 2 #endif Goto Startmenue Zeitloeschen: ' alle Werte für zeitgesteuerte Auslösungen löschen Locate 2 , 1 : Lcd "Zeitp. gel”scht " Gosub Aufblenden For J = 1 To 99 Zeitpunkt(j) = -1 Next J #if Testmodus Waitms 500 #else Wait 2 #endif Goto Startmenue Information: Locate 1 , 1 : Lcd " Version 1.1.4 " Locate 2 , 1 : Lcd "02.08.2009 #3FE0" Gosub Warte0 Gosub Warte1 Locate 1 , 1 : Lcd "Dank an Luciano," Locate 2 , 1 : Lcd "Pit & MSchweizer" Gosub Warte0 Gosub Warte1 Goto Startmenue Durchtasten: ' manuelles Auslösen Locate 1 , 1 : Lcd " Fokussieren " Locate 2 , 1 : Lcd " Enter " Gosub Aufblenden Gosub Warte0 Gosub Warte1 Fokus = 1 If Svabit = 1 Then ' Spiegelvorauslösung aktiv ? Locate 1 , 1 : Lcd "Spiegelvorausl. " Gosub Aufblenden Gosub Warte0 Gosub Warte1 Gosub Ausloesen2 End If Select Case Z Case 1 ' mit Feststelltaste Locate 1 , 1 : Lcd " Ausl”sen Start " Gosub Aufblenden Gosub Warte0 Gosub Warte1 Gosub Loslassen Locate 1 , 1 : Lcd " Belichte" Locate 2 , 1 : Lcd " Stop mit Enter " Gosub Aufblenden Poutenable = 0 Sekunde = 0 Gosub Ausloesen1 While Tenter = 1 Locate 1 , 11 : Lcd Sekunde ; "s" Waitms 100 Wend Locate 1 , 1 : Lcd " mit Feststell " Gosub Aufblenden Case 2 ' ohne Feststelltaste Locate 1 , 1 : Lcd " man. Ausl”sen " Locate 2 , 1 : Lcd "Enter und halten" Gosub Aufblenden Gosub Warte0 Gosub Warte1 Cls Locate 1 , 1 : Lcd " Aufnahme l„uft " Gosub Aufblenden Sekunde = 0 Gosub Ausloesen1 While Tenter = 0 Locate 2 , 1 : Lcd " Belichte " ; Sekunde ; "s" Gosub Aufblenden Waitms 100 Wend Locate 1 , 1 : Lcd " ohne Feststell " End Select Shoot = 0 Fokus = 0 Locate 2 , 1 : Lcd "Menue oder Enter" Gosub Aufblenden Gosub Warte0 Return Hauptmenuer: ' Hauptmenue rechte Taste Incr M If M > 7 Or M < 1 Then M = 1 Gosub Menueanzeige Return Hauptmenuel: ' Hauptmenue linke Taste Decr M If M < 1 Or M > 7 Then M = 7 Gosub Menueanzeige Return Menueanzeige: ' Hauptmenue Anzeige Select Case M Case 1 Locate 1 , 1 : Lcd " Einstellungen " Case 2 Locate 1 , 1 : Lcd " Programmzeiten " Case 3 Locate 1 , 1 : Lcd " Zeitpunkte " Case 4 Locate 1 , 1 : Lcd "autom. Ausl”sen " Case 5 Locate 1 , 1 : Lcd "zeitg. Ausl”sen " Case 6 Locate 1 , 1 : Lcd " man. Ausl”sen " Case 7 Locate 1 , 1 : Lcd " Funktionen " End Select Locate 2 , 1 : Lcd "Menue oder Enter" Gosub Aufblenden Return Subsetupr: ' Menue Einstellungen rechte Taste Incr Z If Z > 6 Or Z < 1 Then Z = 1 Gosub Setupanzeige Return Subsetupl: ' Menue Einstellungen linke Taste Decr Z If Z < 1 Or Z > 6 Then Z = 6 Gosub Setupanzeige Return Setupanzeige: ' Menue Einstellungen Anzeige Cls Select Case Z Case 1 Locate 1 , 1 : Lcd " LCD Kontrast " Locate 2 , 8 : Lcd Kontrastwert Gosub Aufblenden Case 2 Dimmzaehler = 255 Locate 1 , 1 : Lcd " LCD Helligkeit " Locate 2 , 8 : Lcd Helligkeit1 V = 2 ^ Helligkeit1 Compare1b = V - 1 Case 3 Dimmzaehler = 255 Locate 1 , 1 : Lcd "max. Helligkeit " Locate 2 , 8 : Lcd Helligkeit2 V = 2 ^ Helligkeit2 Compare1b = V - 1 Case 4 Uhrausblenden = 1 Locate 1 , 1 : Lcd " Uhr stellen " Locate 2 , 5 : Lcd Time$ Uhrausblenden = 0 Gosub Aufblenden Case 5 Locate 1 , 1 : Lcd " SVA aktiv ? " Select Case Svabit Case 0 Locate 2 , 1 : Lcd " nein " Case 1 Locate 2 , 1 : Lcd " ja " End Select Gosub Aufblenden Case 6 Locate 1 , 1 : Lcd " Power Timeout " Locate 2 , 4 : Lcd Powertime ; " Minuten" Gosub Aufblenden End Select Return Subsequenzr: ' Menue Programmme rechte Taste Incr Z If Z > 29 Or Z < 1 Then Z = 1 Gosub Sequenzanzeige Return Subsequenzl: ' Menue Programmme linke Taste Decr Z If Z < 1 Or Z > 29 Then Z = 29 Gosub Sequenzanzeige Return Sequenzanzeige: ' Menue Programme Anzeige Cls If Z < 3 Then Locate 1 , 1 : Lcd Sequenztext2(z) Else P = Z / 3 Locate 1 , 1 : Lcd "Prog" ; P P = Z Mod 3 Incr P Locate 1 , 7 : Lcd Sequenztext1(p) End If P = Z Mod 3 If P = 2 And Z > 2 Then Locate 2 , 8 : Lcd Sequenzwert(z) Else Locate 2 , 3 : Lcd Sequenzwert(z) ; " Sekunden" End If Gosub Aufblenden Return Submanr: ' Menue manuelles Auslösen rechte Taste Incr Z If Z > 3 Or Z < 1 Then Z = 1 Gosub Mananzeige Return Submanl: ' Menue manuelles Auslösen linke Taste Decr Z If Z < 1 Or Z > 3 Then Z = 3 Gosub Mananzeige Return Mananzeige: ' Menue manuelles Auslösen Anzeige 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" Gosub Aufblenden Return Subzeitr: ' Menue zeitgesteuerte Auslösung rechte Taste Incr Z If Z > 99 Or Z < 1 Then Z = 1 Gosub Zeitanzeige Return Subzeitl: ' Menue zeitgesteuerte Auslösung linke Taste Decr Z If Z < 1 Or Z > 99 Then Z = 99 Gosub Zeitanzeige Return Zeitanzeige: ' Menue zeitgesteuerte Auslösung Anzeige Cls Locate 1 , 1 : Lcd " Ausl”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 Gosub Aufblenden Return Subfunktr: ' Menue Funktionen rechte Taste Incr Z If Z > 6 Or Z < 1 Then Z = 1 Gosub Funktanzeige Return Subfunktl: ' Menue Funtkionen linke Taste Decr Z If Z < 1 Or Z > 6 Then Z = 6 Gosub Funktanzeige Return Funktanzeige: ' Menue Funktionen Anzeige Select Case Z Case 1 Locate 1 , 1 : Lcd " Ausschalten " Case 2 Locate 1 , 1 : Lcd "Progr. l”schen ?" Case 3 Locate 1 , 1 : Lcd "Zeitp. l”schen ?" Case 4 Locate 1 , 1 : Lcd "Werte speichern " Case 5 Locate 1 , 1 : Lcd " Information " Case 6 Locate 1 , 1 : Lcd " ins Hauptmenue " End Select Locate 2 , 1 : Lcd "Menue oder Enter" Gosub Aufblenden Return Subup: ' Taste UP gedrückt Beschleunigung = 0 Select Case M ' aktuelle Werte lesen und Maximum-Werte ermitteln Case 1 Select Case Z Case 1 Updownwert = Kontrastwert Updownmax = 15 Case 2 Updownwert = Helligkeit1 Updownmax = Helligkeit2 Case 3 Updownwert = Helligkeit2 Updownmax = 10 Case 4 Updownwert = Secofday() J = 0 Uhrausblenden = 1 Updownmax = 86400 Case 5 Updownwert = Svabit Updownmax = 1 Case 6 Updownwert = Powertime Updownmax = 99 End Select 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 = Secofday() Else Updownmin = Zeitpunkt(z - 1) + 9 End If If Updownwert < Updownmin Then Updownwert = Updownmin If Z = 99 Or Zeitpunkt(z + 1) = -1 Then Updownmax = 31535999 Else Updownmax = Zeitpunkt(z + 1) - 10 End If End Select While Tup = 0 And Updownwert < Updownmax Gosub Beschleunigen Updownwert = Updownwert + W 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 ' aktuelle Werte lesen und Minimum-Werte ermitteln Select Case Z Case 1 Updownwert = Kontrastwert Updownmin = 0 Case 2 Updownwert = Helligkeit1 Updownmin = 0 Case 3 Updownwert = Helligkeit2 Updownmin = Helligkeit1 Case 4 Updownwert = Secofday() J = 0 Uhrausblenden = 1 Updownmin = -1 Case 5 Updownwert = Svabit Updownmin = 0 Case 6 Updownwert = Powertime Updownmin = 1 End Select Case 2 Updownwert = Sequenzwert(z) Updownmin = 0 Case 3 Updownwert = Zeitpunkt(z) If Z = 1 Or Zeitpunkt(z - 1) = -1 Then Updownmin = Secofday() Else Updownmin = Zeitpunkt(z - 1) + 9 If Updownwert < Updownmin Then Updownwert = Updownmin End If End If End Select While Tdown = 0 And Updownwert > Updownmin Gosub Beschleunigen Updownwert = Updownwert - W 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 " " Select Case M Case 1 Select Case Z ' Anzeige der Werte im Display Case 1 Kontrastwert = Updownwert Gosub Contrastset Locate 2 , 8 : Lcd Updownwert Gosub Aufblenden Case 2 Dimmzaehler = 255 Helligkeit1 = Updownwert V = 2 ^ Helligkeit1 Compare1b = V - 1 Locate 2 , 8 : Lcd Updownwert Case 3 Dimmzaehler = 255 Helligkeit2 = Updownwert V = 2 ^ Helligkeit2 Compare1b = V - 1 Locate 2 , 8 : Lcd Updownwert Case 4 Updownwert = Updownwert + J J = 0 Time$ = Time(updownwert) Locate 2 , 5 : Lcd Time$ Gosub Aufblenden Case 5 Svabit = Updownwert Select Case Updownwert Case 0 Locate 2 , 1 : Lcd " nein " Case 1 Locate 2 , 1 : Lcd " ja " End Select Gosub Aufblenden Case 6 Powertime = Updownwert Locate 2 , 4 : Lcd Updownwert ; " Minuten" Gosub Aufblenden End Select Case 2 Sequenzwert(z) = Updownwert P = Z Mod 3 If P = 2 And Z > 2 Then Locate 2 , 8 : Lcd Updownwert Else Locate 2 , 3 : Lcd Updownwert ; " Sekunden" End If Gosub Aufblenden Case 3 Zeitpunkt(z) = Updownwert 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 Gosub Aufblenden End Select Waitms 100 Return Sectic: ' Sekundenzähler If Powerout = 1 Then Locate 2 , 5 : Lcd Time$ Else Select Case Dimmzaehler ' automatisches Abdimmen Case 255 !nop Case Is < 5 Incr Dimmzaehler X = 2 ^ Helligkeit2 Compare1b = X - 1 Case Else X = 2 ^ Helligkeit1 Compare1b = X - 1 End Select If Poutenable = 1 Then ' automatischer Schlafmodus X = Powerzeit / 60 If X >= Powertime Then Powerout = 1 Else Incr Powerzeit End If End If If Beschleunigung < 50 Then Incr Beschleunigung Select Case M Case 1 If Z = 4 Then ' zur Uhrzeiteinstellung Incr J If Uhrausblenden = 0 Then Locate 2 , 5 : Lcd Time$ End If End If Case 4 If Sekunde > 0 Then Decr Sekunde ' für automatische Auslösung abwärts zählen Case 6 Incr Sekunde ' für manuelle Auslösung aufwärts zählen End Select End If Return Warte1: ' Warte, solange ENTER nicht gedrückt While Tenter = 1 If Powerout = 1 Then Goto Schlafmodus Waitms 100 Wend Return Warte0: ' Warte solange ENTER gedrückt While Tenter = 0 Gosub Aufblenden Waitms 100 Wend Return Aufblenden: ' Helligkeit erhöhen bei gedrückter Taste Powerzeit = 0 Poutenable = 1 Dimmzaehler = 0 V = 2 ^ Helligkeit2 Compare1b = V - 1 Return Ausloesen1: ' Kamera auslösen Fokus = 1 Waitms 200 Shoot = 1 Return Ausloesen2: ' Kamera auslösen Fokus = 1 Waitms 200 Pulseout Portb , 0 , 75000 Fokus = 0 Return Countdown: ' Countdown für automatische Auslösung While Sekunde > 0 Locate 2 , 1 : Lcd Sekunde ; "s " Locate 2 , 7 : Lcd Images ; "n " Locate 2 , 12 : Lcd Chr(26) ; Bilder ; " " Debounce Tenter , 0 , Abbruch , Sub #if Testmodus Waitms 100 #endif Wend Shoot = 0 Fokus = 0 Return Abbruch: ' Abbruch programmgesteuerte Auslösung Sekunde = 0 P = 10 Return Loslassen: ' Laß die ENTER-Taste endlich los ! Gosub Aufblenden Waitms 250 While Tenter = 0 Locate 1 , 1 : Lcd " Bitte Taste " Locate 2 , 1 : Lcd " loslassen ! " Gosub Aufblenden Waitms 100 Wend Cls Return Beschleunigen: Select Case Beschleunigung ' Beschleunigung nach jeweils 5 Sekunden Case Is < 5 W = 1 Case Is < 10 W = 5 Case Is < 15 W = 10 Case Is < 20 W = 30 Case Is < 25 W = 60 Case Is < 30 W = 300 Case Is < 35 W = 600 Case Is < 40 W = 3600 Case Is < 45 W = 18000 Case Is < 50 W = 36000 Case Else W = 86400 End Select Return Aufwachen: ' Aus Powerdown aufwachen Disable Int0 Powerout = 0 If Lcdon = 0 Then ' Display einschalten und neu initialisieren Config Lcdon = Output Lcdon = 1 Initlcd Waitms 100 Cursor Off Noblink End If Config Dimmer = Output ' Beleuchtung Display einschalten #if Testmodus Helligkeit1 = 7 Helligkeit2 = 8 Kontrastwert = 5 #else Helligkeit1 = Helligkeiteram1 Helligkeit2 = Helligkeiteram2 Kontrastwert = Kontrasteram #endif V = 2 ^ Helligkeit2 Compare1b = V - 1 Gosub Contrastset Locate 1 , 1 : Lcd "Universal Timer " Locate 2 , 1 : Lcd "by Pit & TT 2007" Gosub Aufblenden #if Testmodus Waitms 500 #else Wait 2 #endif If Tenter = 0 Then ' beim Einschalten max. Helligkeit bei gedrückter ENTER-Taste Compare1b = 1023 Helligkeit1 = 7 Helligkeit2 = 10 Kontrastwert = 10 Gosub Aufblenden End If 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