Aquarium Blaulicht mit Dimmfunktion

Hier werden Fragen zu LED-Grundlagen beantwortet...

Moderator: T.Hoffmann

Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

Do, 23.02.12, 14:02

tztz die von myAVR.de brauchen 2 Tage zum bearbeiten der Bestellung mit nur ein paar Sachen, früher ging das schneller.

mfg
Jay
Predotec
User
User
Beiträge: 34
Registriert: Di, 14.02.12, 23:27
Wohnort: Schweiz

Fr, 24.02.12, 18:17

Hi Jay

Soll ich mal die LEDs bereits bestellen? Ich könnte bis auf die Steuerung mal die Lampe zusammen bauen...

LG Rob
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

So, 26.02.12, 14:54

ja klar kannst, ich habe heute weiter mit dem Programm weiter gemacht. Das bascom des ärgert mich so. kann mir vielleicht mal einer sagen wieso ich die Real-Time-Clock nicht so einstellen kann wie ich es will? Zurzeit stelle ich die Uhr so ein, kann nur eine bestimmte Uhrzeit vordefiniert setzen.

Code: Alles auswählen

                  _sec = Makebcd(00) : _min = Makebcd(00) : _hour = Makebcd(12)

                  I2cstart                                  ' Start
                  I2cwbyte Ds1307w                          ' DS1307 schreiben
                  I2cwbyte 0                                ' DS1307 Adresszeiger auf 0 stellen
                  I2cwbyte _sec                             ' Sekunden schreiben
                  I2cwbyte _min                             ' Minuten schreiben
                  I2cwbyte _hour                            ' Stunden schreiben

                  I2cstop
ich möchte aber genau eingeben können wie viel Uhr es ist, das funktioniert aber nicht.

EDIT: hachja, wenn man nochmal sich alles anschaut findet man auch seine eigenen Fehler, jetzt geht es.

mfg
Jay
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

Mo, 05.03.12, 16:10

oh man mir qualmt der Kopf, ich kommt einfach mit der Software nicht weiter
Strumboe
Ultra-User
Ultra-User
Beiträge: 622
Registriert: Mi, 25.08.10, 11:19
Wohnort: Quickborn

Mo, 05.03.12, 16:17

Hallo Jay.

Mal 'ne so richtig blöde Frage: Warum setzt du nicht ein DFC-Modul ein und liest dieses aus? Dann bist du absolut zeittechnisch autonom.

Gruß
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

Mo, 05.03.12, 16:29

das mit der zeit habe ich schon gelöst es funktioniert, ich habe ein anderes Problem. ich kann in den EEPROM eine Uhrzeit eingeben wann gestartet werden soll und wann ende ist nur eben das ständig vergleichen und auswerten macht Probleme. bascom hab ich zuletzt vor einem Jahr richtig benutzt.
hier ist mein bisheriger code:

Code: Alles auswählen

'--------------------------------------------------------------
' AquaCom Firmware Version 1.00
' Copyright © 2012 by Juri Galinger
'---------------------------------------------------------------

$regfile = "m168def.dat"
$crystal = 10000000                                         '10 MHz
$lib "mcsbyteint.lbx"

Dim Quarzmhz As Integer
Dim Quarz As Single
Dim Freq As String * 4
'Quarz in MHz zum anzeigen der Frequenz 
Quarzmhz = 10


Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portb.5 , Rs = Portb.4
Config Lcdbus = 4
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64
Config Timer2 = Pwm , Compare A Pwm = Clear Up , Prescale = 64
Config Sda = Portc.4
Config Scl = Portc.5
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Config Date = Dmy , Separator = .

Enable Timer1
Enable Timer2
Enable Interrupts
Ocr2a = 255
Compare1a = 255
Compare1b = 255

Deflcdchar 0 , 4 , 14 , 21 , 31 , 10 , 14 , 21 , 32
Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32
Deflcdchar 2 , 32 , 31 , 31 , 31 , 32 , 32 , 32 , 32
Deflcdchar 3 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32
Deflcdchar 4 , 32 , 14 , 14 , 32 , 32 , 32 , 32 , 32
Deflcdchar 5 , 32 , 32 , 32 , 32 , 32 , 14 , 14 , 32
Deflcdchar 6 , 8 , 8 , 4 , 4 , 10 , 10 , 17 , 17

Dim R As Byte
Dim G As Byte
Dim B As Byte

Dim Prozess As Integer

Dim Mnuselect As Integer
Dim Mnuselectscount As Integer
Dim Mnuselectback As Integer
Dim Mnuselectpointer As Integer
Dim Mnutext(8) As String * 8
Dim Mnuselects(8) As Integer
Dim I As Integer
Dim N As Integer
Dim M As Byte
Dim O As Byte
Dim Mnuselectold As Integer


Dim X As Bit
Dim Xq As Integer

Dim X1 As Integer
Dim X2 As Integer
Dim X3 As Integer

Dim Xa As String * 3
Dim Xb As String * 3
Dim Xc As String * 3


Dim Temp As String * 8

Dim T1 As Byte
Dim T2 As Byte
Dim T3 As Byte

Dim Temp2 As String * 8
Dim R1 As Byte
Dim R2 As Byte
Dim R3 As Byte

Dim Temp3 As String * 8
Dim U1 As Byte
Dim U2 As Byte
Dim U3 As Byte

Dim Aa As Byte
Dim A1 As Eram String * 8
Dim A2 As Eram String * 8
Dim Ab As Byte
Dim A3 As Eram String * 8
Dim A4 As Eram String * 8

' A1 = "09:00:00"
' A2 = "10:00:00"
' A3 = "11:00:00"
' A4 = "12:00:00"

Dim Ba As Byte
Dim B1 As Eram String * 8
Dim B2 As Eram String * 8
Dim Bb As Byte
Dim B3 As Eram String * 8
Dim B4 As Eram String * 8

' B1 = "13:00:00"
' B2 = "14:00:00"
' B3 = "15:00:00"
' B4 = "16:00:00"

Dim Ca As Byte
Dim C1 As Eram String * 8
Dim C2 As Eram String * 8
Dim Cb As Byte
Dim C3 As Eram String * 8
Dim C4 As Eram String * 8

' C1 = "17:00:00"
' C2 = "18:00:00"
' C3 = "19:00:00"
' C4 = "20:00:00"

Dim Gsplit(3) As String * 3


Restart:


Config Pinb.0 = Output                                      'nur für Programmier modus test
Config Pind.7 = Input
Config Pind.6 = Input
Config Pind.5 = Input

Portb.0 = 1
Portd.7 = 1
Portd.6 = 1
Portd.5 = 1



Cursor Off
Cls

'Start test
If Pind.6 = Pind.7 And Pinb.0 = 0 Then                      ' !!! Programmier modus
Locate 1 , 1
Lcd "Bootload"
Locate 2 , 1
Lcd "ISP used"
Waitms 1000

Goto Restart

Else                                                        ' wenn kein ISP dann weiter

Config Pinb.0 = Input
Portb.0 = 1

Mnuselect = 0
Prozess = 50
Gosub Loader

Locate 1 , 1
Lcd Chr(0) ; "AQUACOM"
Locate 2 , 1
Lcd " Hallo! "
Waitms 200

Cls
Do

       Select Case Mnuselect
           Case 0:
               ' Hauptmenue
                   Mnuselectback = 0
                   Mnutext(1) = "Port 1"
                   Mnuselects(1) = 1
                   Mnutext(2) = "Port 2"
                   Mnuselects(2) = 2
                   Mnutext(3) = "Port 3"
                   Mnuselects(3) = 3
                   Mnutext(4) = "Uhrzeit"
                   Mnuselects(4) = 4
                   Mnutext(5) = "System"
                   Mnuselects(5) = 9
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 1:
               ' Untermenü "Port 1"
                   Mnuselectback = 1
                   Mnutext(1) = "1 ein <"
                   Mnuselects(1) = 11
                   Mnutext(2) = "2 aus"
                   Mnuselects(2) = 12
                   Mnutext(3) = "3 ein >"
                   Mnuselects(3) = 13
                   Mnutext(4) = "4 aus"
                   Mnuselects(4) = 14
                   Mnutext(5) = "-"
                   Mnuselects(5) = 15
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 2:
               ' Untermenü "Port 2"
                   Mnuselectback = 2
                   Mnutext(1) = "1 ein <"
                   Mnuselects(1) = 21
                   Mnutext(2) = "2 aus"
                   Mnuselects(2) = 22
                   Mnutext(3) = "3 ein >"
                   Mnuselects(3) = 23
                   Mnutext(4) = "4 aus"
                   Mnuselects(4) = 34
                   Mnutext(5) = "-"
                   Mnuselects(5) = 25
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 3:
               ' Untermenü "Port 3"
                   Mnuselectback = 3
                   Mnutext(1) = "1 ein <"
                   Mnuselects(1) = 31
                   Mnutext(2) = "2 aus"
                   Mnuselects(2) = 32
                   Mnutext(3) = "3 ein >"
                   Mnuselects(3) = 33
                   Mnutext(4) = "4 aus"
                   Mnuselects(4) = 34
                   Mnutext(5) = "-"
                   Mnuselects(5) = 35
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 4:
               ' Untermenü "Uhrzeit"
                   Mnuselectback = 4
                   Mnutext(1) = Chr(225) + "ndern"
                   Mnuselects(1) = 41
                   Mnutext(2) = "l" + Chr(239) + "schen"
                   Mnuselects(2) = 42
                   Mnuselectscount = 2
                   Gosub Mnushow
           Case 9:
                   Mnuselectback = 9
                   Mnutext(1) = "FET  dim"
                   Mnuselects(1) = 91
                   Mnutext(2) = "PWM1 dim"
                   Mnuselects(2) = 92
                   Mnutext(3) = "PWM2 dim"
                   Mnuselects(3) = 93
                   Mnutext(4) = "LCD Char"
                   Mnuselects(4) = 94
                   Mnutext(5) = "Infos"
                   Mnuselects(5) = 95
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 11:
                  Mnuselectback = 1
                   O = 11
                  Gosub Einstell
           Case 12:
                  Mnuselectback = 1
                  O = 12
                  Gosub Einstell
           Case 13:
                  Mnuselectback = 1
                  O = 13
                  Gosub Einstell
           Case 14:
                  Mnuselectback = 1
                  O = 14
                  Gosub Einstell

           Case 21:
                  Mnuselectback = 2
                   O = 21
                  Gosub Einstell
           Case 22:
                  Mnuselectback = 2
                  O = 22
                  Gosub Einstell
           Case 23:
                  Mnuselectback = 2
                  O = 23
                  Gosub Einstell
           Case 24:
                  Mnuselectback = 2
                  O = 24
                  Gosub Einstell

           Case 31:
                  Mnuselectback = 3
                   O = 31
                  Gosub Einstell
           Case 32:
                  Mnuselectback = 3
                  O = 32
                  Gosub Einstell
           Case 33:
                  Mnuselectback = 3
                  O = 33
                  Gosub Einstell
           Case 34:
                  Mnuselectback = 3
                  O = 34
                  Gosub Einstell

           Case 41:
                  Mnuselectback = 4
                  X1 = _hour
                  X2 = _min
                  X3 = _sec
                  Gosub Uhrzeit
           Case 42:
                  Mnuselectback = 4
                  _sec = Makebcd(00) : _min = Makebcd(00) : _hour = Makebcd(12)       ' 12:00:00

                  I2cstart                                  ' Start
                  I2cwbyte Ds1307w                          ' DS1307 schreiben
                  I2cwbyte 0                                ' DS1307 Adresszeiger auf 0 stellen
                  I2cwbyte _sec                             ' Sekunden schreiben
                  I2cwbyte _min                             ' Minuten schreiben
                  I2cwbyte _hour                            ' Stunden schreiben
                  I2cstop
                  Prozess = 250
                  Gosub Loader
                  Waitms 100
                  Mnuselect = Mnuselectback


           Case 91:
                  Mnuselectback = 9
                  O = 1
                  Gosub Pwmtest
           Case 92:
                  Mnuselectback = 9
                  O = 2
                  Gosub Pwmtest
           Case 93:
                  Mnuselectback = 9
                  O = 3
                  Gosub Pwmtest
           Case 94:
                  Mnuselectback = 9
                  O = 4
                  Gosub Zeichen
           Case 95:
                  Mnuselectback = 9
                  Gosub Info
           Case Else:
               ' Falls der Mnuselec mal querläuft, wird wieder ins
               ' Hauptmenü gesprungen.
                  Mnuselect = 0

       End Select





If Pind.6 = 0 And Pind.5 = 0 And Pinb.0 = 1 Then Goto Restart
Waitms 1


Loop

 Rechnen:

 O = 1

 While O < 13

      Select Case O
             Case 1 :
                     Temp2 = A1
             Case 2 :
                     Temp2 = A2
             Case 3 :
                     Temp2 = A3
             Case 4 :
                     Temp2 = A4
             Case 5 :
                     Temp2 = B1
             Case 6 :
                     Temp2 = B2
             Case 7 :
                     Temp2 = B3
             Case 8 :
                     Temp2 = B4
             Case 9 :
                     Temp2 = C1
             Case 10 :
                     Temp2 = C2
             Case 11 :
                     Temp2 = C3
             Case 12 :
                     Temp2 = C4
             Case 13:
                     'oK
      End Select


   I = Split(temp2 , Gsplit(1) , ":")
   Temp2 = Gsplit(1)
   R1 = Val(temp2)

   Temp2 = Gsplit(2)
   R2 = Val(temp2)

   Temp2 = Gsplit(3)
   R3 = Val(temp2)


   Temp3 = Time$
   I = Split(temp3 , Gsplit(1) , ":")
   Temp3 = Gsplit(1)
   U1 = Val(temp3)

   Temp3 = Gsplit(2)
   U2 = Val(temp3)

   Temp3 = Gsplit(3)
   U3 = Val(temp3)


   If U1 = R1 And U2 = R2 And U3 = R3 Then

      Select Case O
             Case 1 :
                     Cls
                     Locate 1 , 1
                     Lcd Time$
                     Locate 2 , 1
                     Lcd "A1 aktiv"
             Case 2 :

             Case 3 :

             Case 4 :

             Case 5 :

             Case 6 :

             Case 7 :

             Case 8 :

             Case 9 :

             Case 10 :

             Case 11 :

             Case 12 :

             Case 13:
                     'oK
      End Select

    Waitms 550
   End If




   Incr O

 Wend

 Return


   Einstell:

       Mnuselectold = Mnuselect

       Mnuselectpointer = 1
       M = 1

                  Select Case O
                        Case 11 :
                              Temp = A1
                        Case 12 :
                              Temp = A2
                        Case 13 :
                              Temp = A3
                        Case 14 :
                              Temp = A4
                        Case 21 :
                              Temp = B1
                        Case 22 :
                              Temp = B2
                        Case 23 :
                              Temp = B3
                        Case 24 :
                              Temp = B4
                        Case 31 :
                              Temp = C1
                        Case 32 :
                              Temp = C2
                        Case 33 :
                              Temp = C3
                        Case 34 :
                              Temp = C4

                  End Select

                  I = Split(temp , Gsplit(1) , ":")
                  Temp = Gsplit(1)
                  T1 = Val(temp)
                  Temp = Gsplit(2)
                  T2 = Val(temp)
                  Temp = Gsplit(3)
                  T3 = Val(temp)

       While Mnuselectold = Mnuselect


           Cls
           N = Mnuselectpointer + 1
           Decr N

           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If

           ' Anzeige der Zeilen
           For I = Mnuselectpointer To N
              Locate 1 , 1

              If T1 < 10 Then Lcd "0" Else Lcd ""
              Lcd T1 ; ":"
              If T2 < 10 Then Lcd "0" Else Lcd ""
              Lcd T2 ; ":"
              If T3 < 10 Then Lcd "0" Else Lcd ""
              Lcd T3

              Select Case M                                 ' Anzeigen was verändert wird
                  Case 1:
                           Locate 2 , 1 : Lcd Chr(1) ; Chr(1)
                  Case 2:
                           Locate 2 , 4 : Lcd Chr(1) ; Chr(1)
                  Case 3:
                           Locate 2 , 7 : Lcd Chr(1) ; Chr(1)
              End Select

           Next
           Waitms 250

           If Pind.7 = 0 Then
              Select Case M
                  Case 1:
                         T1 = T1 + 1
                         If T1 > 23 Then T1 = 0
                  Case 2:
                         T2 = T2 + 1
                         If T2 > 59 Then T2 = 0
                  Case 3:
                         T3 = T3 + 1
                         If T3 > 59 Then T3 = 0
              End Select

           End If

           If Pinb.0 = 0 Then
              Select Case M
                  Case 1:
                         T1 = T1 - 1
                         If T1 = 255 Then T1 = 23
                  Case 2:
                         T2 = T2 - 1
                         If T2 = 255 Then T2 = 59
                  Case 3:
                         T3 = T3 - 1
                         If T3 = 255 Then T3 = 59

              End Select
           End If

           If Pind.5 = 0 Then
               M = M + 1

               If M > 3 Then
                  Temp = Str(t1) + ":" + Str(t2) + ":" + Str(t3)

                  Select Case O
                        Case 11 : A1 = Temp
                        Case 12 : A2 = Temp
                        Case 13 : A3 = Temp
                        Case 14 : A4 = Temp
                        Case 21 : B1 = Temp
                        Case 22 : B2 = Temp
                        Case 33 : B3 = Temp
                        Case 34 : B4 = Temp
                        Case 41 : C1 = Temp
                        Case 42 : C2 = Temp
                        Case 43 : C3 = Temp
                        Case 44 : C4 = Temp

                  End Select

                  O = 0
                  Prozess = 50
                  Gosub Loader
               Mnuselect = Mnuselectback
               End If

           End If

           If Pind.6 = 0 Then
               Mnuselect = Mnuselectback

           End If

      Wend
      Cls
   Return

   Mnushow:
       ' Wenn dieser Punkt angesprungen wird, verlangt das System eine Eingabe.
       ' Alle weiteren Aktionen, sofern nicht durch Interrupts erzeugt, werden
       ' nicht weiter verarbeitet.

       ' Das alte Mnuselect wird gesichert
       Mnuselectold = Mnuselect

       ' Der Zeiger wird auf den ersten Menüeintrag gestellt.
       Mnuselectpointer = 1

       ' So lange das Menue nicht geaendert wurde, wird dies immer fortgesetzt.
       While Mnuselectold = Mnuselect

              Gosub Rechnen                                 'Uhrzeit überprüfen

           ' Zuerst einmal muss nun auf dem Display etwas angezeigt werden.

           ' Dies ist der Zaehler für die anzuzeigende Zeile

           Cls
           ' Displayzeilen minus 1
           N = Mnuselectpointer + 1
           Decr N

           ' Mehr als die verfuegbaren Menuepunkte können nicht angezeigt werden.
           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If

           ' Anzeige der Zeilen
           For I = Mnuselectpointer To N
              Locate 1 , 1
              Lcd Mnutext(i)
              Locate 2 , 1
              If _hour < 10 Then Lcd "0" Else Lcd ""
              Lcd Str(_hour) ; ":"

              If _min < 10 Then Lcd "0" Else Lcd ""
              Lcd Str(_min)

              Lcd " "

              If X = 0 Then
              Lcd Chr(4)
              Else
              Lcd Chr(5)
              End If

              If _sec = Xq Then
              Else
              Toggle X
              End If

              Xq = _sec

              Lcd " "

           Next

           Waitms 250

           ' hier werden nun die Menuetasten ausgewertet.

           ' Aktion Taste nach oben
           If Pind.7 = 0 Then
               ' Nur wenn das Menü noch nicht oben ist.
               If Mnuselectpointer > 1 Then
                   Decr Mnuselectpointer
               End If
           End If

           ' Aktion Taste nach unten
           If Pinb.0 = 0 Then
               ' Nur wenn das Menü noch nicht unten ist
               If Mnuselectpointer < Mnuselectscount Then
                   Incr Mnuselectpointer
               End If
           End If

           ' Aktion Taste vor
           If Pind.5 = 0 Then
               Mnuselect = Mnuselects(mnuselectpointer)
           End If

           ' Aktion Taste zurueck
           If Pind.6 = 0 Then
               Mnuselect = Mnuselect - Mnuselectold
           End If

      Wend
      Cls
   ' Es wird wieder ins Hauptprogramm zurueck gesprungen.
   Return

   Uhrzeit:
       Mnuselectold = Mnuselect

       Mnuselectpointer = 1
       M = 1

       While Mnuselectold = Mnuselect

           Cls
           N = Mnuselectpointer + 1
           Decr N

           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If

           For I = Mnuselectpointer To N
              Locate 1 , 1

              If X1 < 10 Then Lcd "0" Else Lcd ""
              Lcd X1 ; ":" ;
              If X2 < 10 Then Lcd "0" Else Lcd ""
              Lcd X2 ; ":"
              If X3 < 10 Then Lcd "0" Else Lcd ""
              Lcd X3

              Select Case M
                  Case 1:
                           Locate 2 , 1 : Lcd Chr(1) ; Chr(1)
                  Case 2:
                           Locate 2 , 4 : Lcd Chr(1) ; Chr(1)
                  Case 3:
                           Locate 2 , 7 : Lcd Chr(1) ; Chr(1)
              End Select

           Next
           Waitms 250

           If Pind.7 = 0 Then
              Select Case M
                  Case 1:
                         X1 = X1 + 1
                         If X1 > 23 Then X1 = 0
                  Case 2:
                         X2 = X2 + 1
                         If X2 > 59 Then X2 = 0
                  Case 3:
                         X3 = X3 + 1
                         If X3 > 59 Then X3 = 0
              End Select

           End If

           If Pinb.0 = 0 Then
              Select Case M
                  Case 1:
                         X1 = X1 - 1
                         If X1 < 0 Then X1 = 23
                  Case 2:
                         X2 = X2 - 1
                         If X2 < 0 Then X2 = 59
                  Case 3:
                         X3 = X3 - 1
                         If X3 < 0 Then X3 = 59

              End Select
           End If

           If Pind.5 = 0 Then
               M = M + 1

               If M > 3 Then
                  _sec = X3
                  _min = X2
                  _hour = X1
                  Gosub Settime
                  Prozess = 10
                  Gosub Loader
               Mnuselect = Mnuselectback
               End If

           End If

           If Pind.6 = 0 Then
               Mnuselect = Mnuselectback

           End If

      Wend
      Cls
   Return

   Pwmtest:

       Mnuselectold = Mnuselect
       Mnuselectpointer = 1
       M = 0

       While Mnuselectold = Mnuselect

           Cls
           N = Mnuselectpointer + 1
           Decr N

           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If

           For I = Mnuselectpointer To N
              Locate 1 , 1
              Lcd "Port " ; O
              Locate 2 , 1
              Lcd Chr(1) ; "+-" ; Chr(3) ; " " ; M
              If O = 1 Then Ocr2a = M
              If O = 2 Then Compare1a = M
              If O = 3 Then Compare1b = M


           Next
           Waitms 250

           If Pind.7 = 0 Then
              M = M + 1
           End If

           If Pinb.0 = 0 Then
             M = M - 1
           End If

           If Pind.6 = 0 Then
               Mnuselect = Mnuselectback

           End If

      Wend
      Cls
   Return

   Zeichen:

       Mnuselectold = Mnuselect
       Mnuselectpointer = 1
       M = 120

       While Mnuselectold = Mnuselect

           Cls
           N = Mnuselectpointer + 1
           Decr N

           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If

           For I = Mnuselectpointer To N
              Locate 1 , 1
              Lcd "char " ; Chr(m)
              Locate 2 , 1
              Lcd "Nr.: " ; M


           Next
           Waitms 250

           If Pind.7 = 0 Then
              M = M + 1
           End If

           If Pinb.0 = 0 Then
             M = M - 1
           End If

           If Pind.6 = 0 Then
               Mnuselect = Mnuselectback

           End If

      Wend
      Cls
   Return

   Info:

       Mnuselectold = Mnuselect
       Mnuselectpointer = 1
       M = 0

       While Mnuselectold = Mnuselect

           Cls
           N = Mnuselectpointer + 1
           Decr N

           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If

           For I = Mnuselectpointer To N

           If M = 0 Then
              Locate 1 , 1
              Lcd "ATmega"
              Locate 2 , 1
              Lcd "168A-PU"
           End If

           If M = 1 Then
              Locate 1 , 1
              Lcd "Quarz"
              Locate 2 , 1
              Lcd Quarzmhz ; " MHz"
           End If

           If M = 2 Then
              Locate 1 , 1
              Lcd "I2C"
              Locate 2 , 1
              Lcd "DS1307W"
           End If

           If M = 3 Then
              Locate 1 , 1
              Lcd "MOSFET"
              Locate 2 , 1
              Lcd "IRL540NS"
           End If

           If M = 4 Then
              Quarz = Quarzmhz * 1000000
              Quarz = Quarz / 16320
              Quarz = Quarz / 2
              Quarz = Round(quarz)
              Locate 1 , 1
              Lcd "PWM 1-2"
              Locate 2 , 1
              Lcd Quarz ; " Hz"
           End If

           If M = 5 Then
              Locate 1 , 1
              Lcd "Temp " ; Chr(6) ; Chr(242)
              Locate 2 , 1
              Lcd "0 - 50" ; Chr(223) ; "C"
           End If

           If M = 6 Then
              Locate 1 , 1
              Lcd "Dev Juri"
              Locate 2 , 1
              Lcd "Galinger"
           End If

           Next
           Waitms 250

           If Pind.7 = 0 Then
              M = M - 1
              If M = 255 Then M = 0
           End If

           If Pinb.0 = 0 Then
             M = M + 1
             If M > 6 Then M = 6
           End If

           If Pind.6 = 0 Then
               Mnuselect = Mnuselectback

           End If

      Wend
      Cls
   Return

Dim Weekday As Byte
Getdatetime:
  I2cstart                                                  ' Start
  I2cwbyte Ds1307w                                          ' DS1307 schreiben
  I2cwbyte 0                                                ' DS1307 Adresszeiger auf 0 stellen

  I2cstart                                                  ' Start
  I2cwbyte Ds1307r                                          ' DS1307 lesen (ab vorher eingestellter Adresse 0)
  I2crbyte _sec , Ack                                       ' Sekunden
  I2crbyte _min , Ack                                       ' Minuten
  I2crbyte _hour , Ack                                      ' Stunden
  I2crbyte Weekday , Ack                                    ' Wochentag (in Dummy gelesen da von date$/time$ nicht genutzt)
  I2crbyte _day , Ack                                       ' Tag
  I2crbyte _month , Ack                                     ' Monat
  I2crbyte _year , Nack                                     ' Jahr
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Loader:
Cls
   For I = 1 To 8
       Locate 1 , I
       Lcd Chr(2)
       Waitms Prozess
   Next

Return

Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart                                                  ' Start
  I2cwbyte Ds1307w                                          ' DS1307 schreiben
  I2cwbyte 4                                                ' DS1307 Adresszeiger auf 4 (Byte 5) stellen
  I2cwbyte _day                                             ' Tag schreiben
  I2cwbyte _month                                           ' Monat schreiben
  I2cwbyte _year                                            ' Jahr schreiben
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                                                  ' Start
  I2cwbyte Ds1307w                                          ' DS1307 schreiben
  I2cwbyte 0                                                ' DS1307 Adresszeiger auf 0 stellen
  I2cwbyte _sec                                             ' Sekunden schreiben
  I2cwbyte _min                                             ' Minuten schreiben
  I2cwbyte _hour                                            ' Stunden schreiben
  I2cstop
Return


End If                                                      ' !!!Programmier Modus abfrage
Hier ist der Aufbau des Menüs:
Menü.png
Menü.png (14.19 KiB) 3617 mal betrachtet
mfg
Jay
Predotec
User
User
Beiträge: 34
Registriert: Di, 14.02.12, 23:27
Wohnort: Schweiz

Mo, 05.03.12, 20:11

hallo Jay
Das einzige und vermutlcih kleinste was ich sehen kann, ist das du den Port2 doppelt aufgeführt hast. Ansonsten verstehe ich gerade die Menüsteuerung, mit Bascom kenne ich mich gar nicht aus.
Gruss
Antworten