Aquarium Blaulicht mit Dimmfunktion

Hier werden Fragen zu LED-Grundlagen beantwortet...

Moderator: T.Hoffmann

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

Fr, 17.02.12, 18:07

Hi Jay

Coole Sache!!! :)

Am liebsten würde ich da auch mitbasteln! Wie viele Schalt/Steuerkanäle hat das Ding? Ich werde langsam neugierig was alles möglich ist.... :)

Kann du auch C Programmieren? Kannst du so etwas zusammensetzen? :) http://www.atmel.com/products/microcont ... fault.aspx Natürlich nicht für die hole Hand.... ;)
Da man das Ding über SD Flashen kann, könnte ich mit dem Java tool die einstellungen selber übernehmen.

Vielen Dank & Gruss
Roberto
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

Fr, 17.02.12, 18:51

:cry: :cry: :cry: im bin am Limit der BASCOM Demo, habe gerade mal 1/3 des Programms realisiert und der ATmega8 mit seinen 8k ist auch zu klein
ich muss nen andere Mikrocontroller besorgen dann kann ich weiter machen. ist doch nicht so leicht wie ich es mir gedacht habe.

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

Fr, 17.02.12, 19:58

Hi Jay

ich habe den falschen Linke gepostet...

Eigentlich wollte ich fragen ob du sowas hinbekommst...

http://www.leuchtmuff.de/

:)

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

Sa, 18.02.12, 20:05

aus zwei gründen würde ich es nicht hin bekommen. erstens müsste ich von target3001 zu eagle umstellen, das will ich nicht. zweitens müsste ich mich in C einarbeiten, das will ich nicht. und außerdem, wenn du so was willst kannst gleich dir einen ProfiLux holen kommt mit dem preis etwa hin.

also ich werde jetzt das was ich da angefangen fertig machen, wenn du so was nicht willst kann ich es für was anderes auch benutzen.

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

Sa, 18.02.12, 20:34

Hi Jay

Nein, nein so war das also nciht gemeint :) Ich war vom Gedanken getrieben, das wenn ich über meinen PC machen kann das ich vieleicht etwas unterstüzung leisten kann. Das Ding würde ja dann über Java steuerbar sein. Aber ich verstehe da (noch) zu wenig, wollte dir bestimmt nicht auf die Füsse tretten... ;) Auf jedenfall bin ich gespannt wie du das hinbekommst. Natürlich wäre ich froh wenn du mir das erklären würdest. Um das Programm zu verstehen muss ich aber erst noch etwas BAsic erlernen, aber ich bin schon froh wenn du mir die Hardware erklärst. Für das sollte mein wissen reichen! :) Hat ja nur 3 möglichkeiten pro Pin ... :)

Ps: Noch einen Beitrag mehr und ich kann dir 5 Sterne geben!! :D
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Sa, 18.02.12, 20:57

Jay hat geschrieben::cry: :cry: :cry: im bin am Limit der BASCOM Demo, habe gerade mal 1/3 des Programms realisiert und der ATmega8 mit seinen 8k ist auch zu klein
ich muss nen andere Mikrocontroller besorgen dann kann ich weiter machen.
Was wollt ihr da denn jetzt noch alles programmieren? Soweit ich verstanden hab, geht es um eine Auf/Ab-Dimmung auf einem Kanal mit einstellbaren Zeiten?
Das braucht aber doch keine 4kB...
Predotec
User
User
Beiträge: 34
Registriert: Di, 14.02.12, 23:27
Wohnort: Schweiz

Sa, 18.02.12, 21:05

Hi Beatbuzzer

Die Anforderungen sind wie folgt;

- Zeitsteuerung an/aus
- Dimmzeitsteuerung
- 2 Kannal wäre Cool (Nachtlicht)

LG
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Sa, 18.02.12, 21:20

Hier mal mein grobes Gerüst für 1 Kanal Dimmung. Natürlich fehlt noch die Routine für die Zeiteinstellung. Aber da wusste ich nicht wie das gelöst werden soll.
Per Taster, über UART (serielle Schnittstelle), oder Potis...

Code: Alles auswählen

$regfile = "m8def.dat"
$crystal = 8000000


Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
Start Timer1

Dim X As Word
Dim Aufdimmzeit As Word
Dim Lichtanzeit As Word
Dim Abdimmzeit As Word
Dim Lichtauszeit As Word

Do
Gosub Aufdimmen
Gosub Lichtan
Gosub Abdimmen
Gosub Lichtaus
Loop

Aufdimmen:
For X = 0 To 1023
Compare1a = X
Wait Aufdimmzeit
Next X
Return

Lichtan:
Compare1a = 1023
Wait Lichtanzeit
Return

Abdimmen:
For X = 1023 To 0 Step -1
Compare1a = X
Wait Abdimmzeit
Next X
Return

Lichtaus:
Compare1a = 0
Wait Lichtauszeit
Return
Braucht 4% vom Mega8, also 0,32 kb...
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

Sa, 18.02.12, 21:33

nettes programmchen, ich habe ja die DS1307 Uhr und ein LCD Display und ein Menu muss man ja auch programmieren, kurz hier ist mein code ist aber noch nicht fertig:

Code: Alles auswählen

$regfile = "m8def.dat"
$crystal = 12000000
$lib "mcsbyteint.lbx"

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 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
Config Timer2 = Pwm , Compare 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 = .

Config Pinb.0 = Input
Config Pind.7 = Input
Config Pind.6 = Input
Config Pind.5 = Input

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

Deflcdchar 0 , 4 , 14 , 21 , 31 , 10 , 14 , 21 , 32
Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32

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


      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


Mnuselect = 0

Dim X As Byte
Dim X1 As Integer
Dim X2 As Integer
Dim X3 As Integer
Dim X4 As Integer
Dim X5 As Integer
Dim X6 As Integer

Dim A As Byte
Dim A1 As Integer
Dim A2 As Integer
Dim A3 As Integer
Dim A4 As Integer
Dim A5 As Integer
Dim A6 As Integer


Dim B1 As Integer
Dim B2 As Integer
Dim B3 As Integer
Dim B4 As Integer
Dim B5 As Integer
Dim B6 As Integer



Enable Timer1
Enable Timer2
Enable Interrupts


Cls
Cursor Off
Locate 1 , 1
Lcd Chr(0) ; "AQUACOM"
Locate 2 , 1
Lcd " Hello! "
Waitms 2000

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
                   Mnuselectscount = 4
                   Gosub Mnushow
           Case 1:
               ' Untermenü "Port 1"
                   Mnuselectback = 0
                   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) = "Dimm/t"
                   Mnuselects(5) = 15
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 2:
               ' Untermenü "Port 2"
                   Mnuselectback = 0
                   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) = "Dimm/t"
                   Mnuselects(5) = 25
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 3:
               ' Untermenü "Port 3"
                   Mnuselectback = 0
                   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) = "Dimm/t"
                   Mnuselects(5) = 35
                   Mnuselectscount = 5
                   Gosub Mnushow
           Case 4:
               ' Untermenü "Uhrzeit"
                  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
                  I2cstop

                  X5 = Makedec(_sec) : X3 = Makedec(_min) : X1 = Makedec(_hour)
                 Gosub Uhrzeit
           Case 11:


                  Gosub Einstell
           Case 12:


                  Gosub Einstell
           Case 13:


                  Gosub Einstell

           Case 14:


                  Gosub Einstell


           Case Else:
               ' Falls der Mnuselec mal querläuft, wird wieder ins
               ' Hauptmenü gesprungen.
                  Mnuselect = 0

       End Select





Loop

   Einstell:
       ' 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
       M = 1

       ' So lange das Menue nicht geaendert wurde, wird dies immer fortgesetzt.
       While Mnuselectold = Mnuselect
           ' Zuerst einmal muss nun auf dem Display etwas angezeigt werden.

           ' Dies ist der Zaehler für die anzuzeigende Zeile
           Sprung1:
           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 A1 ; A2 ; ":" ; A3 ; A4 ; ":" ; A5 ; A6
              Select Case M
                  Case 1:
                           Locate 2 , 1 : Lcd Chr(1)
                  Case 2:
                           Locate 2 , 2 : Lcd Chr(1)
                  Case 3:
                           Locate 2 , 4 : Lcd Chr(1)
                  Case 4:
                           Locate 2 , 5 : Lcd Chr(1)
                  Case 5:
                           Locate 2 , 7 : Lcd Chr(1)
                  Case 6:
                           Locate 2 , 8 : Lcd Chr(1)
              End Select


           Next

           Waitms 250

           ' hier werden nun die Menuetasten ausgewertet.
           ' Aktion Taste nach oben
           If Pind.7 = 0 Then
              Select Case M
                  Case 1:
                         A1 = A1 + 1
                         If A1 > 2 Then A1 = 0
                  Case 2:
                         A2 = A2 + 1
                         If A2 > 3 Then A2 = 0
                  Case 3:
                         A3 = A3 + 1
                         If A3 > 5 Then A3 = 0
                  Case 4:
                         A4 = A4 + 1
                         If A4 > 9 Then A4 = 0
                  Case 5:
                         A5 = A5 + 1
                         If A5 > 5 Then A5 = 0
                  Case 6:
                         A6 = A6 + 1
                         If A6 > 9 Then A6 = 0
              End Select

           End If

           ' Aktion Taste nach unten
           If Pinb.0 = 0 Then
              Select Case M
                  Case 1:
                         A1 = A1 - 1
                         If A1 < 0 Then A1 = 2
                  Case 2:
                         A2 = A2 - 1
                         If A2 < 0 Then A2 = 3
                  Case 3:
                         A3 = A3 - 1
                         If A3 < 0 Then A3 = 5
                  Case 4:
                         A4 = A4 - 1
                         If A4 < 0 Then A4 = 9
                  Case 5:
                         A5 = A5 - 1
                         If A5 < 0 Then A5 = 5
                  Case 6:
                         A6 = A6 - 1
                         If A6 < 0 Then A6 = 9
              End Select
           End If

           ' Aktion Taste vor
           If Pind.5 = 0 Then
               M = M + 1

               If M > 6 Then
               Mnuselect = 0
               End If
               Goto Sprung1

           End If

           ' Aktion Taste zurueck
           If Pind.6 = 0 Then
               Mnuselect = 1

           End If


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


' hier startet nun die anzeigeroutine fuer das Display
   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
           ' 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 : Lcd Time$

           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 = Mnuselectback
           End If

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

   Uhrzeit:
       Mnuselect = 0
       Mnuselectold = Mnuselect
       Mnuselectpointer = 1
       M = 1

       While Mnuselectold = Mnuselect

           Sprung2:
           Cls
           N = Mnuselectpointer + 1
           Decr N

           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If

           For I = Mnuselectpointer To N
              Locate 1 , 1


              Lcd X1 ; X2 ; ":" ; X3 ; A4 ; ":" ; X5 ; X6
              Select Case M
                  Case 1:
                           Locate 2 , 1 : Lcd Chr(1)
                  Case 2:
                           Locate 2 , 2 : Lcd Chr(1)
                  Case 3:
                           Locate 2 , 4 : Lcd Chr(1)
                  Case 4:
                           Locate 2 , 5 : Lcd Chr(1)
                  Case 5:
                           Locate 2 , 7 : Lcd Chr(1)
                  Case 6:
                           Locate 2 , 8 : Lcd Chr(1)
              End Select


           Next
           Waitms 250

           If Pind.7 = 0 Then
              Select Case M
                  Case 1:
                         X1 = X1 + 1
                         If X1 > 2 Then X1 = 0
                  Case 2:
                         X2 = X2 + 1
                         If X2 > 3 Then X2 = 0
                  Case 3:
                         X3 = X3 + 1
                         If X3 > 5 Then X3 = 0
                  Case 4:
                         X4 = X4 + 1
                         If X4 > 9 Then X4 = 0
                  Case 5:
                         X5 = X5 + 1
                         If X5 > 5 Then X5 = 0
                  Case 6:
                         X6 = X6 + 1
                         If X6 > 9 Then X6 = 0
              End Select

           End If

           If Pinb.0 = 0 Then
              Select Case M
                  Case 1:
                         X1 = X1 - 1
                         If X1 < 0 Then X1 = 2
                  Case 2:
                         X2 = X2 - 1
                         If X2 < 0 Then X2 = 3
                  Case 3:
                         X3 = X3 - 1
                         If X3 < 0 Then X3 = 5
                  Case 4:
                         X4 = X4 - 1
                         If X4 < 0 Then X4 = 9
                  Case 5:
                         X5 = X5 - 1
                         If X5 < 0 Then X5 = 5
                  Case 6:
                         X6 = X6 - 1
                         If X6 < 0 Then X6 = 9
              End Select
           End If

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

               If M > 6 Then
                  X = 10 * X5
                  X = X + X6
                  _sec = Makebcd(x)
                  X = 10 * X3
                  X = X + X4
                  _min = Makebcd(x)
                  X = 10 * X1
                  X = X + X2
                  _hour = Makebcd(x)
                  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
               Gosub Mnushow
               End If
               Goto Sprung2

           End If

           If Pind.6 = 0 Then
               Mnuselect = 1

           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
mfg
Jay
Predotec
User
User
Beiträge: 34
Registriert: Di, 14.02.12, 23:27
Wohnort: Schweiz

Sa, 18.02.12, 21:40

Ich dachte ich muss die Zeiten selber über meinem PC draufladen!!! :):):)

Das Ding kann sogar am Schluss meine Alte bedienen... 400 Sternen für Jay! :)
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Sa, 18.02.12, 21:41

Jay hat geschrieben:nettes programmchen, ich habe ja die DS1307 Uhr und ein LCD Display und ein Menu muss man ja auch programmieren, kurz hier ist mein code ist aber noch nicht fertig (...)
Davon stand aber eben nichts in den Anforderungen :mrgreen: .
Nagut Display und Menü hängt jetzt davon ab, wie die Eingabe der Zeiten gewünscht ist.
Die RTC könnte man auch weglassen, wenn man einen präzisen Quarz anhängt und die Wartezeiten per Timer macht.

EDIT:
Ich dachte ich muss die Zeiten selber über meinem PC draufladen!!! :):):)
Ja mit solchen Anforderungen hatte ich auch gerechnet. Dann wärs mal eben schnell zwischendurch fertig gewesen :wink:
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

Sa, 18.02.12, 22:01

ja ich hab mir gedacht wenn ich schon hier ein Gehäuse rum liegen habe wo ich ein 1€ Display verbaut habe sollte ich dieses benutzen. die uhr mit dem internen Quarz zu machen habe ich bisher nur schlecht realisieren können, die DS1307 ist da schon komfortable, einfach auf I²C zugreifen fertig.
habe überlegt noch ein Temperatur Sensor noch zu implementieren aber die ADC Ports des ATmega sind schon fürs Display vergeben, aber UART ist noch frei man könnte einen externen Controller mit mehreren Temperatur Sensoren machen :mrgreen: da ist noch recht viel Luft nach oben.

mfg
Jay
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

So, 19.02.12, 11:45

Jay hat geschrieben: habe überlegt noch ein Temperatur Sensor noch zu implementieren aber die ADC Ports des ATmega sind schon fürs Display vergeben
Das macht ja nichts. Einen von den Daten I/Os kannst du auch zwischendurch mal kurz auf den ADC umlegen, wenn gerade nichts ans Display gesendet werden muss.

Oder nimm nen DS1820. Irgendeinen Port wirst du schon noch finden, den du zwischendurch mal kurz als 1-Wire benutzen kannst. Da können dann auch gleich ein paar mehr Sensoren seriell dran.
Ansonsten wäre noch die DS2417 RTC eine Option. Dafür brauchst nur einen I/O am µC und kannst die Temp-Sensoren auch gleich noch mit dranhängen.
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

So, 19.02.12, 16:16

also die Hardware wäre erst mal fertig. so sieht der Kasten dann geschlossen aus:
Aquacom mit 4-Tasten
Aquacom mit 4-Tasten
wenn man ein ISP-Programmer ansteckt wird das auf dem Display angezeigt*
Programmiermodus
Programmiermodus
* Netzteil vorher ausstecken, der ISP-Programmer kann schaden nehmen.

mit der Software habe ich noch nicht weiter gemacht, habe aber jetzt bascom ohne Begrenzung.

Wie Ihr seht hat der Aquacom 1x MOSFET und 2x PWM Ausgänge. der ISP stecker kan sowohl zum Programmieren am Computer mit dem ISP-Programmer benutzt werden als auch mit dem Tasten-Kreuz. man könnte auch eine Platine machen wo ein Infrarot Empfänger drauf ist und per RC5 Fernbedienung steuern. Wie ich die Software Seite aufbaue überlege ich noch.

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

So, 19.02.12, 17:16

Hi Jay

Wie ich sehe leistet du ja ganze Arbeit!!! :D
Da ich schon seit einigen posts nichts mehr verstehe, habe ich noch folgende Frage. Das gerät hat 2 PWM Ausgänge, ich vermute da kommt ein Steuerspannung von 0-10V raus. Du verwendest 1 Mosfet. Meine Schlussfolgerung man kann 2 KSQ ansteuern mit der der selben Spannung. Sprich, man nimmt ein setting vor und es werden beide Kanale dementsprechen gesteuert.

Bin ich da richtig? Bitte korrigiere mich (Bis vor einer Woche wusste ich nicht einmal was ein KSQ, Mosfet geschweige von PMW ist). :) Danke Mr. Google, falls ich richtig liege! :mrgreen: Und natürlich dir, da dies die Basis für meine Nachforschungen sind, muss ja irgenwie verstehen was du postest! ;)
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

So, 19.02.12, 17:45

Predotec hat geschrieben:Das gerät hat 2 PWM Ausgänge, ich vermute da kommt ein Steuerspannung von 0-10V raus. Du verwendest 1 Mosfet. Meine Schlussfolgerung man kann 2 KSQ ansteuern mit der der selben Spannung. Sprich, man nimmt ein setting vor und es werden beide Kanale dementsprechen gesteuert.
nicht ganz, also die 2 PWM Ausgänge liefern Maximum 5 V (das ist die Spannung mit der der Mikrocontroller arbeitet). auf der Platinen ist ein Spannungsregler mit dem Namen L7805 verbaut (05 steht für 5 V), dieser liefert den gesamten Strom für alle Bauteile. Die Betriebsspannung (7,5 - 35 V) wird zum MOSFET geleitet und der Mikrocontroller steuert den MOSFET an, schaltet ihn also mit der Frequenz von 367 Hz an/aus. Kurz zu der Frequenz: Diese wird im Programm eingestellt und hängt auch von dem verbauten Quarz ab hier einer mit 12 MHz. Das Programm muss da auch wissen dafür ist der Befehl $crystal = 12000000 da. Und dann entscheidet der Prescale = 64 (Config Timer...) über die Frequenz.
So ein PWM-Signal siehst du auf dem nachfolgendem Bild.
PWM-Signal 50%
PWM-Signal 50%
PWM.png (8.16 KiB) 9184 mal betrachtet
Wenn du unbedingt die 10 V brauchst, schaue ich das ich da noch was einbaue.

Der MOSFET Ausgang ist eigentlich dafür um z.b. 12V LED-Leisten direkt zusteuern, man kann auch normale Glühlampen/Halogen-Spot damit dimmen.
zum testen der MOSFET Ausganges habe ich ein 12V 50 W Spot benutzt, funktioniert wunderbar. man könnte hier also 4x 12 V 50 W Spots dran hängen.

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

So, 19.02.12, 18:50

:) jetzt überforderst du mich...

Jetzt musste ich mich 1h mit dem was du geschrieben hast auseinander setzten.... :) Die Steuerspannung von 0-10V war eingentlich als Dimmersteuerung bedacht, aber du hast das ja bereits intergriert! :) Das wird also nciht mehr benötigt. Jetzt frag ich mal vorsichtig... Ein KSQ wird immer ncoh benötigt, oder?
Ich muss eigentlich nur 2 schienen mit jeweils 14 LEDs zum leuchten bringen, die Anzahl kann auch etwas höher oder tiefer sein.

Die LEDs haben bei 3.4V Betrieb eine Stromaufnahmen von 700mA.
Bei 7 LEDs in Serie würde das 23.8V und 700mA ergeben, somit wäre ein Wiederstand bei 24V Betrieb nichtig. Die max. Spannung von diesen LEDs ist 3.5V und die Stromaufnahmen wäre dann 1A.
Dann würde ich 4 solche Serie-Schaltungen machen, das würde eine Gesamtstrom von 2.8A ergeben.

Vieleicht kann man das besser machen, das war nur meine Grundüberlegung. Bei 12V könnte ich nur 3 LEDs Betreiben, das macht 10.2V, demzufolge müsste ich widerstände einbauen damit die Dinger nicht in die Luft gehen. Aber für jeden Tip bin ich dankbar.
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

So, 19.02.12, 20:17

ok mal ne andere Strategie. das ist dein Aufbau: hier brauchst du kein einzigen Widerstand!
Aufbau.png
nur Netzteil, KSQ, PWM-Dimmer, 6x LEDs und Draht. OK?!
Immer wenn eine KSQ benutzt wird darf zwischen KSQ und LEDs kein Widerstand verbaut werden!

folgende Info zum auswählen der Betriebsspannung in Zusammenhang der Anzahl der LEDs
Betriebsspannung.png
Betriebsspannung.png (20.55 KiB) 9177 mal betrachtet
in deinem Fall sind bei 24 V nur 6 LEDs zu benutzen. sonst kann zu Überlastung der KSQ kommen, muss aber nicht denn einige haben Schutzvorrichtungen für solche fälle.

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

So, 19.02.12, 21:56

Hast du empfehlungen zum KSQ?
Ich habe gesehen es gibt solche, die das netzteil intergriert haben... Wobei ich nur sehr wenige gefunden habe, die PWM fähig sind.
Wäre es nich Sinnvoll 2 Reihen zu machen mit jeweils 12 LEDs und 48V Netzspannung?
VielenDank
Predotec
User
User
Beiträge: 34
Registriert: Di, 14.02.12, 23:27
Wohnort: Schweiz

Mo, 20.02.12, 02:59

Also folgendes habe ich gefunden...

Das wäre die Analoge Dimm- Version (0-10V), macht ca. 80€. Konstantstrom incl. Netzteil, da stellt sich die Frage ob man eine Parallel-Schaltung a jeweils 5 oder 6 LEDs machen kann.
http://www.conrad.de/ce/de/product/1770 ... 20-390-VDC

Für KSQ müsste ich 2 von denen haben, macht ca. 95€ ohne Netzteil
http://www.conrad.de/ce/de/product/1770 ... 1&ref=list
Oder 4 von diesen, macht ca. 88€ ohne Netzteil
http://www.conrad.de/ce/de/product/1770 ... 1&ref=list
Oder 4 solche, macht ca. 50-60€
http://www.*********/de/LED-Controlli ... 8_119.html
http://www.*********/de/LED-Controlli ... 8_119.html
Oder wenn man das ganze auch parallel anschliessen kann 1 solche, wobei ich irgendwann im laufe der lezten Woche gelesen habe das dies zu Störungen führen kann.
Platine 10.90 € http://www.*********/de/LED-Controlli ... 8_119.html
Im Gehäuse 12.90 € http://www.*********/de/LED-Controlli ... 8_119.html

Bei Lumi habe ich leider keine gefunden, wo in der Beschreibung steht Dimmbar PWM... Bei der einen steht das sie eingans (primär-seitig) dimmbar ist.

Gibt es das auch noch günstigere Varrianten? Ist recht schwierig im Netz die PWM fähigen KSQ zu finden, insbesondere weil die Dimmtyp heufig nicht vermerkt wird.
Die Preisschere ist von ca. 88€ + 30€ fürs Netzteil, down bis ca. 40€ incl. Netzteil.
Strumboe
Ultra-User
Ultra-User
Beiträge: 622
Registriert: Mi, 25.08.10, 11:19
Wohnort: Quickborn

Mo, 20.02.12, 08:27

Hallo,

@Jay:
Programmierst du das alles in Bascom? Ich versuche mich gerade in Assembler für die Atmels. Da sind die Fortschritte, gerade was die mathematischen Operationen anbelangt, recht mühsam. Daher war ich am überlegen, ob ich doch auf eine Hochsprache wechseln sollte.
Wie sind deine Erfahrungen? Du scheinst ja hier richtig fit zu sein, da du so ein "Leuchtmuff" so nebenbei aus dem Ärmel schüttelst. :) :)

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

Mo, 20.02.12, 09:01

Strumboe hat geschrieben: Programmierst du das alles in Bascom?
Wie sind deine Erfahrungen?
ja ich programmiere alles in bascom, im netzt suche ich auch nach code schnipsel und die Effizienz raus zu holen. Ich würde dir weiter hin Assembler empfehlen mit dem unterschied das du es mit bascom verwendest. das zu gibt es hier eine Einführung

jetzt zum Thema zurück. Ich hätte hier noch ein Restbestand von den AP8802 KSQ(6x).
Die KSQ sind von mir entwickelt worden und der Strom wird individuell eingestellt durch auflöten eines Widerstandes(Rset = 0,29 Ohm) auf die Platine.
Hier das Kurzdatenblatt, diese sind auf jeden Fall für die 5V PWM ausgelegt und sind auch viel günstiger.
Kurzdatenblatt_AP880x.pdf
(88.74 KiB) 202-mal heruntergeladen
mfg
Jay
Zuletzt geändert von Jay am Mo, 20.02.12, 11:46, insgesamt 1-mal geändert.
Predotec
User
User
Beiträge: 34
Registriert: Di, 14.02.12, 23:27
Wohnort: Schweiz

Mo, 20.02.12, 09:57

Hi Jay

Wenn du solche Dinger auf Vorrate hast würde ich ein paar nehmen.
Was kosten die Dinger? Ist der Preis immer noch der gleiche wie? Und welche hast du alles noch vorrätig (350/700/1000, etc) würde gerne ein paar in meine BAstelkiste nehmen.

Habe mir das MK2 Board bestellt :)
Zu meiner Frage von oben; kann man nach dem KSQ auch eine gemischte Schaltung machen?
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich

Mo, 20.02.12, 10:21

Predotec hat geschrieben:Und welche hast du alles noch vorrätig (350/700/1000, etc) würde gerne ein paar in meine BAstelkiste nehmen. kann man nach dem KSQ auch eine gemischte Schaltung machen?
also die Widerstände habe ich noch für alle Strom werte verfügbar, sind auch noch nicht eingelötet.
Hinter der KSQ darf nichts anderes sein als LEDs, besonders hinter der AP880x nicht das ist eine geregelte KSQ die auf kleinste Änderungen reagiert.
Deshalb habe ich auch kleine Probleme mit der gehabt, im Prototyp Stadium hat die keine Wärme Entwicklung gehabt und wo ich die Platinen bekommen fing die KSQ an zu spinnen. Aber der Fehler wurde zum Glück von "CRI 93+ / Ra 93+" entdeckt und die letzten 6 KSQ die ich hier habe haben das Problem nicht.

mfg
Jay

PS: hast eine PM
Predotec
User
User
Beiträge: 34
Registriert: Di, 14.02.12, 23:27
Wohnort: Schweiz

Mo, 20.02.12, 16:27

Also 4 von denen benötige ich ja für die leuchte die wir hier bauen. Die Anderen 2 würde ich nehmen ohne wiederstände, die könnte ich dann bei Bedarf selber drauf löten.
Antworten