- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: AVR Mega8 + SHT75

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.11.2005
    Ort
    Coburg
    Alter
    47
    Beiträge
    84
    Hallo,

    habe jetzt mal den Sensor auf andere Ports gelegt (PD4 und PD5) allerdings mit dem gleichen Ergebnis!

    Auch ein anderes Beispiel Programm:
    Code:
    'Routine to read the  SHT75 Humidity sensor chip
    'By Stuart Leslie
    'Contact stu@4sightinc.com with any questions
    'Uses BascomAVR
    'a .01 uf capacitor across VCC and Ground on the SHT75 really cleans up the data
    'a pullup is required on "data" pin as shown in the data sheet
    
    $regfile = "m8def.dat"
    $crystal = 16000000                                         ' used crystal frequency
    $baud = 9600                                                ' use baud rate
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 32                                               ' default use 10 for the SW stack
    $framesize = 32                                             ' default use 40 for the frame space
    
    
    Dim Ctr As Byte
    Dim Dataword As Word
    Dim Command As Byte
    Dim Dis As String * 20
    
    Dim Calc As Single
    Dim Calc2 As Single
    Dim Rhlinear As Single
    Dim Rhlintemp As Single
    Dim Tempc As Single
    'Dim Tempf As Single
    
    Const C1 = -4
    Const C2 = 0.0405
    Const C3 = -0.0000028
    Const T1c = .01
    Const T2 = .00008
    'Const T1f = .018
    
    Sck Alias Portd.4
    Dataout Alias Portd.5
    Datain Alias Pind.5
    'Redled Alias PortD.2
    
    Declare Sub Getit()
    
    Ddrd = &B11111111                                           'all port b are output
    Config Pind.4 = Output                                      'sck
    Config Pind.5 = Output                                      'datain
    
    'reset the serial communications first, it is easily confused!
    Set Dataout
    For Ctr = 1 To 12
       Set Sck
       Waitus 2
       Reset Sck
       Waitus 2
    Next Ctr
    
    
    Do                                                          'continually read the tempfature and humidity
    
       Command = &B00000011
       Call Getit                                               'Get the temperature, puts result in "dataword" for us
          '
       'Tempf = T1f * Dataword
       'Tempf = Tempf - 40
    
       Tempc = T1c * Dataword                                   'get celcius for later calculations and for "the rest of the world"
       Tempc = Tempc - 40
    
       Dis = Fusing(tempc , "###.##")
       Print "Temperatur = " ; Dis ; Chr(167) ; "C"
    
       Command = &B00000101
       Call Getit                                               'get the humidity
       Calc = C2 * Dataword
       Calc2 = Dataword * Dataword                              'that "2" in the datasheet sure looked like a footnote for a couple days, nope it means "squared"!
       Calc2 = C3 * Calc2
       Calc = Calc + C1
       Rhlinear = Calc + Calc2
    
       'Dis = Fusing(rhlinear , "##.##")
       'Print "Humidity adjusted for linear = " ; Dis
    
    
       Calc = T2 * Dataword
       Calc = Calc + T1c
       Calc2 = Tempc - 25
       Calc = Calc2 * Calc
       Rhlintemp = Calc + Rhlinear
    
       Dis = Fusing(rhlintemp , "##.##")
       Print "Luftfeuchte  = " ; Dis ; " %"
    
       Wait 1
    Loop
    
    
    Sub Getit()
    
       Local Datavalue As Word
       Local Databyte As Byte
    
       'start with "transmission start"
       Set Sck
       Reset Dataout
       Reset Sck
       Set Sck
       Set Dataout
       Reset Sck
    
    
       'now send the  command
       Shiftout Dataout , Sck , Command , 1
    
       Ddrd = &B11111101                                        'datain is now input
       Config Pind.5 = Input                                    'datain
       Set Sck                                                  'click one more off
       Reset Sck
       Waitus 10                                                'no idea why, but it doesn't work without it!
       Bitwait Pind.7 , Reset                                   'wait for the chip to have data ready
    
       Shiftin Datain , Sck , Databyte , 1                      'get the MSB
       Datavalue = Databyte
    
       Ddrd = &B11111111
       Config Pind.5 = Output
    
       Reset Dataout                                            'this is the tricky part- Lot's of hair pulling- have to tick the ack!
       Set Sck
       Reset Sck
    
       Ddrd = &B11111101                                        'datain is now input
       Config Pind.5 = Input
    
       Shiftin Datain , Sck , Databyte , 1                      'get the LSB
       Shift Datavalue , Left , 8
       Datavalue = Datavalue Or Databyte
       'don't tick the clock or ack since we don't need the CRC value, leave it hanging!
       Dataword = Datavalue
    
       Ddrd = &B11111111
       Config Pind.5 = Output
    
       Reset Dataout
       Set Sck
       Reset Sck
    
       Ddrd = &B11111101                                        'datain is now input
       Config Pind.5 = Input
    
       Shiftin Datain , Sck , Databyte , 1                      'not using the CRC value for now- can't figure it out! Anybody know how to impliment?
       'Print "CRC value was - " ; Databyte
    
       Ddrd = &B11111111
       Config Pind.5 = Output
    
       Set Dataout
       Set Sck
       Reset Sck
    End Sub
    
    End
    Funktionierte nicht!
    Ausgabe war immer:
    Code:
    Temperatur = 612.80°C
    Luftfeuchte  = -6216.70 %
    Was kann das sein?
    Der Sensor ist in Ordung, an einer C-Control funktioniert er!!!
    Danke

    Gruß
    Christian

    [Meine Projekte]

  2. #2
    Zitat Zitat von cni Beitrag anzeigen
    Hallo,

    habe jetzt mal den Sensor auf andere Ports gelegt (PD4 und PD5) allerdings mit dem gleichen Ergebnis!

    Auch ein anderes Beispiel Programm:
    Code:
    'Routine to read the  SHT75 Humidity sensor chip
    'By Stuart Leslie
    'Contact stu@4sightinc.com with any questions
    'Uses BascomAVR
    'a .01 uf capacitor across VCC and Ground on the SHT75 really cleans up the data
    'a pullup is required on "data" pin as shown in the data sheet
    
    $regfile = "m8def.dat"
    $crystal = 16000000                                         ' used crystal frequency
    $baud = 9600                                                ' use baud rate
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 32                                               ' default use 10 for the SW stack
    $framesize = 32                                             ' default use 40 for the frame space
    
    
    Dim Ctr As Byte
    Dim Dataword As Word
    Dim Command As Byte
    Dim Dis As String * 20
    
    Dim Calc As Single
    Dim Calc2 As Single
    Dim Rhlinear As Single
    Dim Rhlintemp As Single
    Dim Tempc As Single
    'Dim Tempf As Single
    
    Const C1 = -4
    Const C2 = 0.0405
    Const C3 = -0.0000028
    Const T1c = .01
    Const T2 = .00008
    'Const T1f = .018
    
    Sck Alias Portd.4
    Dataout Alias Portd.5
    Datain Alias Pind.5
    'Redled Alias PortD.2
    
    Declare Sub Getit()
    
    Ddrd = &B11111111                                           'all port b are output
    Config Pind.4 = Output                                      'sck
    Config Pind.5 = Output                                      'datain
    
    'reset the serial communications first, it is easily confused!
    Set Dataout
    For Ctr = 1 To 12
       Set Sck
       Waitus 2
       Reset Sck
       Waitus 2
    Next Ctr
    
    
    Do                                                          'continually read the tempfature and humidity
    
       Command = &B00000011
       Call Getit                                               'Get the temperature, puts result in "dataword" for us
          '
       'Tempf = T1f * Dataword
       'Tempf = Tempf - 40
    
       Tempc = T1c * Dataword                                   'get celcius for later calculations and for "the rest of the world"
       Tempc = Tempc - 40
    
       Dis = Fusing(tempc , "###.##")
       Print "Temperatur = " ; Dis ; Chr(167) ; "C"
    
       Command = &B00000101
       Call Getit                                               'get the humidity
       Calc = C2 * Dataword
       Calc2 = Dataword * Dataword                              'that "2" in the datasheet sure looked like a footnote for a couple days, nope it means "squared"!
       Calc2 = C3 * Calc2
       Calc = Calc + C1
       Rhlinear = Calc + Calc2
    
       'Dis = Fusing(rhlinear , "##.##")
       'Print "Humidity adjusted for linear = " ; Dis
    
    
       Calc = T2 * Dataword
       Calc = Calc + T1c
       Calc2 = Tempc - 25
       Calc = Calc2 * Calc
       Rhlintemp = Calc + Rhlinear
    
       Dis = Fusing(rhlintemp , "##.##")
       Print "Luftfeuchte  = " ; Dis ; " %"
    
       Wait 1
    Loop
    
    
    Sub Getit()
    
       Local Datavalue As Word
       Local Databyte As Byte
    
       'start with "transmission start"
       Set Sck
       Reset Dataout
       Reset Sck
       Set Sck
       Set Dataout
       Reset Sck
    
    
       'now send the  command
       Shiftout Dataout , Sck , Command , 1
    
       Ddrd = &B11111101                                        'datain is now input
       Config Pind.5 = Input                                    'datain
       Set Sck                                                  'click one more off
       Reset Sck
       Waitus 10                                                'no idea why, but it doesn't work without it!
       Bitwait Pind.7 , Reset                                   'wait for the chip to have data ready
    
       Shiftin Datain , Sck , Databyte , 1                      'get the MSB
       Datavalue = Databyte
    
       Ddrd = &B11111111
       Config Pind.5 = Output
    
       Reset Dataout                                            'this is the tricky part- Lot's of hair pulling- have to tick the ack!
       Set Sck
       Reset Sck
    
       Ddrd = &B11111101                                        'datain is now input
       Config Pind.5 = Input
    
       Shiftin Datain , Sck , Databyte , 1                      'get the LSB
       Shift Datavalue , Left , 8
       Datavalue = Datavalue Or Databyte
       'don't tick the clock or ack since we don't need the CRC value, leave it hanging!
       Dataword = Datavalue
    
       Ddrd = &B11111111
       Config Pind.5 = Output
    
       Reset Dataout
       Set Sck
       Reset Sck
    
       Ddrd = &B11111101                                        'datain is now input
       Config Pind.5 = Input
    
       Shiftin Datain , Sck , Databyte , 1                      'not using the CRC value for now- can't figure it out! Anybody know how to impliment?
       'Print "CRC value was - " ; Databyte
    
       Ddrd = &B11111111
       Config Pind.5 = Output
    
       Set Dataout
       Set Sck
       Reset Sck
    End Sub
    
    End
    Funktionierte nicht!
    Ausgabe war immer:
    Code:
    Temperatur = 612.80°C
    Luftfeuchte  = -6216.70 %
    Was kann das sein?
    Der Sensor ist in Ordung, an einer C-Control funktioniert er!!!
    Ich hab dasselbe Problem, irgendwie wird hier aber keine Lösung aufgezeigt. Kann sich nochmal einer der Lösung annehmen bitte?
    MfG

Berechtigungen

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

Labornetzteil AliExpress