Hallo,
hat jemand von Euch eine AM2320 zuverlässig im Einsatz? Meiner läuft bis zu 20 Stumden und dann antwortet er nicht mehr. Allein Spannungsfrei machen hilft dann bis zum nächsten Ausfall. . Als Notlösung dachte ich vielleicht sein VCC über eine Pin zu versorgen?
Ursprünglich hielt ich es für einen Wackelkontakt aber mitlerweile ist er eingelötet. Auch die Idee das er durch Uart-ints aus dem Konzept gebracht wurde war unbegründet . Er sendet immer alle 8 Byte fehlerlos und bei nächster Abfrage ist er einfach "nicht mehr da"
Alles anzeigen
hat jemand von Euch eine AM2320 zuverlässig im Einsatz? Meiner läuft bis zu 20 Stumden und dann antwortet er nicht mehr. Allein Spannungsfrei machen hilft dann bis zum nächsten Ausfall. . Als Notlösung dachte ich vielleicht sein VCC über eine Pin zu versorgen?
Ursprünglich hielt ich es für einen Wackelkontakt aber mitlerweile ist er eingelötet. Auch die Idee das er durch Uart-ints aus dem Konzept gebracht wurde war unbegründet . Er sendet immer alle 8 Byte fehlerlos und bei nächster Abfrage ist er einfach "nicht mehr da"
BASCOM-Quellcode: i2c-AM2320_M8_02
- $regfile = "m8def.dat"
- $crystal = 1000000
- $hwstack=32
- $swstack = 32
- $framesize = 32
- $baud = 9600
- $eepleave ' eep Datei nicht ändern
- '$sim
- Config Base = 0
- Ddrb = 0
- Portb = $ff '0=res Out, 1=res In, 2=nc,3=MO/DCF,4=Mi, 5=Scl, 6=WwAnf, 7=Übertemp
- Ddrc = $40
- Portc = $40 '0fist, 1 tist, 2fsoll,3tsoll,4 sda ,5scl,6/R
- Ddrd = $fe '0-RX, 1-TX, 2Feuchte ,3Heizung
- Portd = $f1
- '---------------------- I2C config
- $lib "i2c_twi.lbx" 'Use Hardware I2C
- #if _sim = 0
- $lib "YwRobot_Lcd_i2c.lib" 'YwRobot Treiber für LCD
- #endif
- Config Scl = Portc.5 'Platne außen: Gnd,Vdd, SDA,SCL
- Config Sda = Portc.4
- Config Twi = 50000 'Normal 100000=100kHz
- Const Pcf8574_lcd = &H7E 'Adresse des I2C-LCDs
- Const Am3220w = &HB8 '1=Vdd(3,1-5,5V), 2=SDA, 3=Gnd, 4=SCL
- Const Am3220r = &HB9
- Dim I2cbuf(8) As Byte
- Config Lcd = 16 * 2
- Dim Lcd_backlight As Byte
- I2cinit
- #if _sim = 1
- Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
- Config Lcd = 16 * 2
- #endif
- Initlcd
- Config Timer1 = Timer , Prescale = 1024
- Config Timer0 = Timer , Prescale = 1024
- Config Adc = Single , Prescaler = Auto , Reference = Avcc '2,72V bei 5V
- Dim A As Byte , V As Byte , Z As Byte 'a=Schleifenzähler,V=länge,Z=EEpromaddresse
- Dim Tist As Integer , Talt As Byte , Tsoll As Byte , Thy As Byte , T_h As Byte , T_l As Byte
- Dim Fist As integer , Falt As Byte , Fsoll As Byte , Fhy As Byte , F_h As Byte , F_l As Byte
- Dim Ti As Byte , Fi As Byte , Tand As Byte , Fand As Byte
- Dim C_h As Byte , C_l As Byte , Ch As Word
- Dim Temp As Byte , Tempw As Word , Tempi As Integer , Tempstr As String * 6
- Thy = 2
- Fhy = 2
- Waitms 50 'wegen Lcdinit
- Deflcdchar 1 , 14 , 31 , 31 , 31 , 31 , 31 , 31 , 14
- Cls
- Do '###################################################
- Incr Z
- Tempw = Getadc(3) 'Tempsoll
- Shift Tempw , Right , 5
- Tsoll = Tempw + 20
- If Tsoll <> Talt Then Tand = 10
- Talt = Tsoll
- Tempw = Getadc(2) 'Feuchtsoll
- Shift Tempw , Right , 2
- Tempw = Tempw / 5
- Fsoll = Tempw + 48
- If Fsoll <> Falt Then Fand = 10
- Falt = Fsoll
- Gosub Lese_am
- If I2cbuf(0) = 3 Then
- Tempw = I2cbuf(2) * 256
- 'Shift Tempw , Left , 8
- Tempw = Tempw + I2cbuf(3)
- Fist = Tempw / 10
- Tempi = I2cbuf(4) * 256
- 'Shift Tempi , Left , 8
- Tempi = Tempi + I2cbuf(5)
- 'Tempi = Tempi + 5
- 'Tempi = Tempi / 10
- Tist = Tempi / 10
- If Fist >= Fsoll Then
- Reset Portd.3
- Fi = 79
- End If
- If Tist >= Tsoll Then
- Reset Portd.2
- Ti = 79
- End If
- Temp = Tist + Thy
- If Temp <= Tsoll Then
- Set Portd.2
- Ti = 1
- End If
- Temp = Fist + Fhy
- If Temp <= Fsoll Then
- Set Portd.3
- Fi = 1
- End If
- Else
- Fi = $2d
- Ti = $2d
- End If
- Locate 1 , 1
- If Fand > 0 Then
- Lcd "Feu.Soll: " ; Fsoll
- Decr Fand
- Else
- Lcd "Feuchte : " ; Fist
- End If
- Lcd "%r "
- Lcd Chr(fi)
- Locate 2 , 1
- If Tand > 0 Then
- Lcd "Raumsoll: " ; Tsoll
- Decr Tand
- Else
- Tempi = Tempi Mod 10
- Lcd "Raum : " ; Tist ; "," ; Tempi
- End If
- Lcd Chr(223)
- Lcd "C "
- Lcd Chr(ti)
- #if _sim = 1
- Timer0 = 250
- #endif
- Do
- If Neu = 1 Then Antwort
- Loop Until Tifr.0 = 1
- Reset Tifr.0
- If Tifr.2 = 1 Then
- Initlcd
- Tifr.2 = 0
- Waitms 80
- Deflcdchar 1 , 14 , 31 , 31 , 31 , 31 , 31 , 31 , 14
- Cls
- End If
- Loop
- End
- '(###############################################################################
- ')
- Lese_am:
- #if _sim = 0
- I2cstart
- I2cwbyte Am3220w 'Schreibadresse
- I2cwbyte 3 'Registerlesen
- I2cwbyte 0 'beginne Bei Reg 0
- I2cwbyte 4 'lese 4 Register
- I2cstop
- I2cstart
- I2cwbyte Am3220r
- I2crbyte F_h , Ack
- I2crbyte F_l , Ack
- I2crbyte T_h , Ack
- I2crbyte T_l , Ack
- I2crbyte C_h , Ack
- I2crbyte C_l , Nack
- I2cstop
- #else
- Tempw = Getadc(1)
- F_l = Tempw
- Shift Tempw , Right , 8
- F_h = Tempw
- Tempw = Getadc(0)
- T_l = Tempw
- Shift Tempw , Right , 8
- T_h = Tempw
- #endif
- Return