- Labornetzteil AliExpress         
Ergebnis 1 bis 7 von 7

Thema: PWM log. ausgeben (DS18S20 Problem bei Berechnung)

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190

    PWM log. ausgeben (DS18S20 Problem bei Berechnung)

    Anzeige

    Powerstation Test
    Guten Morgen!

    Ich hatte je schon erwähnt, dass ich mir momentan aus Spaß an der Freude ein Moodlight bauen will um es später in meinem Wohnzimmer nutzen zu können.
    Jetzt habe ich mich mit der Wahrnehmung von Licht noch nicht so intensiv beschäftig, bzw. ich habe gerade bei meiner Recherche noch nicht eine eindeutige Antwort gelesen. Jedoch bin ich momentan der Meinung dass unser Lichtempfinden, bezogen auf die Helligkeit, logarithmisch ist.
    (Wenn ich falsch liege bitte sagen!)
    Mein Problem mit der Programmierung ist nun, dass ich einen Wert von einem Temperatursensor (DS18S20) aufbereiten und logarithmieren will, damit die Helligkeit in Abhängigkeit der Temperatur für das Auge linear gesteuert werden kann.
    Gibt es in Bascom einen Befehl, der aus einer logarithmierten Variable eine für das PWM Register lesbare Variable macht, bzw auch umgekehrt?

    Oder kann ich mir da mit andern Mitteln behelfen?
    Hatte schon daran gedacht alles einzeln zuzuordnen, finde ich aber nicht sehr gut.

    Vielen Dank im Vorraus!

    Marten83

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    Dem Register ist es egal, ob Du die Werte mit den Fingern abgezählt oder über exponentielle Gleichungen bestimmt hast.

    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190
    Ja das schon, aber muss das nicht ein Byte Wert sein?

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190
    Ok, ich hab das mal gerade getestet.
    Mit Single Werten klappt das auch.
    Ich werd jetzt noch n bisschen damit rumspielen, vieleicht klappts ja doch ganz einfach.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190
    So, habe jetzt noch ein viel größeres Problem diesbezhüglich.
    Die DS18S20 die ich habe funktionieren eigentlich wunderbar.
    Jetzt habe ich mit verschiedenen Berechnungen rumexperimentiert und plötzlich berechnet der Mega8 keine Temperaturen zwischen x,7 und x,3°C.
    Wie kann das sein?

    Hier mein Code (wieder abgespeckt):
    Code:
    $regfile = "m8def.dat"                                      ' specify the used micro
    
    $crystal = 8000000
    
    
    Declare Sub Lcdinit
    Declare Sub Lcdwrite(byval Zeichen As Byte)
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config Lcd = 20 * 4a
    Waitms 100                                                  'damit das LCD etwas Zeit bekommt um nach dem Einschalten empfangsbereit zu sein...
    Call Lcdinit
    Cls
    
    
    Dim I As Byte
    Dim Bd(9) As Byte
    Dim Tmp As Byte
    Dim T As Integer , Temp As Single
    
    
    
    Gruen Alias Pwm1a
    Rot Alias Pwm1b
    Blau Alias Ocr2
    
    Config 1wire = Portd.4
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    Config Timer2 = Counter Pwm , Pwm = On , Compare Pwm = Clear Down , Prescale = 1
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    
    Gruen = 0
    Rot = 0
    Blau = 0
    
    
    Do
    
    
    Waitms 300
    1wreset                                                     'reset the device
    1wwrite &HCC                                                'read ROM command
    1wwrite &H44
    Waitms 500                                                  'read ROM command
    1wreset                                                     'reset the device
    1wwrite &HCC                                                'read ROM command
    1wwrite &HBE                                                'read ROM command
    Bd(1) = 1wread(9)                                           ' read bytes in array
    1wreset                                                     ' reset the bus
    
    
                                                ' if is OK, calculate for
          Tmp = Bd(1) And 1                                     ' 0.1C precision
          If Tmp = 1 Then
          Decr Bd(1)
          T = Makeint(bd(1) , Bd(2))
          T = T / 2
          Temp = Bd(8) - Bd(7)
          Temp = Temp / Bd(8)
          Temp = T + Temp
          Temp = Temp - 0.25
       End If
    
    
    
    
    
    Locate 1 , 1
    Lcd Temp
    Locate 2 , 1
    Lcd Bd(1)
    Locate 3 , 1
    Lcd Bd(7)
    Locate 4 , 1
    Lcd Bd(8)
    
    
    
    Loop
    
    
    
    End
    
    
    
    Sub Lcdinit
         Call Lcdwrite(&B00101100)
         Call Lcdwrite(&B00001001)
         Call Lcdwrite(&B00101000)
         Call Lcdwrite(&B00000110)
         Call Lcdwrite(&B00001100)
       End Sub
    
    
       Sub Lcdwrite(byval Zeichen As Byte)
         ' Höherwertiges Nibble setzen
         If Zeichen.4 = 1 Then Portc.3 = 1 Else Portc.3 = 0
         If Zeichen.5 = 1 Then Portc.2 = 1 Else Portc.2 = 0
         If Zeichen.6 = 1 Then Portc.1 = 1 Else Portc.1 = 0
         If Zeichen.7 = 1 Then Portc.0 = 1 Else Portc.0 = 0
         ' Höherwertiges Nibble übertragen
         Portc.4 = 1
         Waitms 1
         Portc.4 = 0
         Waitms 1
         ' Niederwertiges Nibble setzen
         If Zeichen.0 = 1 Then Portc.3 = 1 Else Portc.3 = 0
         If Zeichen.1 = 1 Then Portc.2 = 1 Else Portc.2 = 0
         If Zeichen.2 = 1 Then Portc.1 = 1 Else Portc.1 = 0
         If Zeichen.3 = 1 Then Portc.0 = 1 Else Portc.0 = 0
         ' Niederwertiges Nibble übertragen
         Portc.4 = 1
         Waitms 1
         Portc.4 = 0
         Waitms 1
       End Sub
    Und übrigens muss ich, denke ich, das Licht Exponentiell erhöhen um einen linearen Helligkeitsverlauf zu bekommen, oder?

    Marten83

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    zur wahrnehmung von helligkeit:
    http://de.wikipedia.org/wiki/Helligkeit
    http://de.wikipedia.org/wiki/Weber-Fechner-Gesetz
    (wobei du da sicherlich auch schon geguckt hast)

    zu deiner rechnung kann ich nichts sagen, ich kann kein basic -.-

    gruesse

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190
    Ich bin so langsam am Ende mit meinem Latein!

    Ich schaffe es nicht den Fehler rauszubekommen.
    Ich denke mal an meinem Programmer (MysmartUSB) kann es nicht liegen. Die Demoversion (eins Älter) habe ich auch schon probiert.
    Hat jemand noch einen Vorschlag was ich mal probieren könnte?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen