Hallo,
ich wollte mir eine Funkuhr mit Temperatur + Luftfeuchtemessung basteln.
Leider führt mein AtMega8a bei jeder Abfrage des DHT11 einen Reset aus.
Der Code für die DHT11 abfrage hab ich von irgendeinen Webseite (die ich nicht wiederfinde) kopiert.
Alles anzeigen
Grüße & Herzlichsten Dank!
Alex
ich wollte mir eine Funkuhr mit Temperatur + Luftfeuchtemessung basteln.
Leider führt mein AtMega8a bei jeder Abfrage des DHT11 einen Reset aus.
Der Code für die DHT11 abfrage hab ich von irgendeinen Webseite (die ich nicht wiederfinde) kopiert.
Quellcode
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Mikrocontroller Konfigurieren
- $regfile = "m8adef.dat"
- $crystal = 1000000
- $hwstack = 100
- $swstack = 40
- $framesize = 100
- 'Ende Mikrocontroller Konfigurieren
- '=============================================================
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Ports Konfigurireren
- Config Portb = Output
- Gnd_digit_1 Alias Portd.5
- Gnd_digit_2 Alias Portd.6
- Gnd_digit_3 Alias Portd.7
- Gnd_digit_4 Alias Portc.3
- Config Gnd_digit_1 = Output
- Config Gnd_digit_2 = Output
- Config Gnd_digit_3 = Output
- Config Gnd_digit_4 = Output
- Config Portc.5 = Input
- Dht_write Alias Portd.4 'Empfange Daten vom DHT-Sensor
- Dht_read Alias Pind.4 'Schreibe Daten zum DHT-Sensor
- Dht_io Alias Ddrd.4 'Umschalten der Datenrichtung write/read
- 'Config Dht_write = Output
- 'Config Dht_read = Input
- 'Port für Spannungsmessung
- 'Ende Ports Konfigurieren
- '=============================================================
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Variablen
- Dim Var_ziffern(14) As Byte
- Var_ziffern(1) = &B0011_1111 '0
- Var_ziffern(2) = &B0000_0110 '1
- Var_ziffern(3) = &B0101_1011 '2
- Var_ziffern(4) = &B0100_1111
- Var_ziffern(5) = &B0110_0110
- Var_ziffern(6) = &B0110_1101
- Var_ziffern(7) = &B0111_1101
- Var_ziffern(8) = &B0000_0111
- Var_ziffern(9) = &B0111_1111
- Var_ziffern(10) = &B0110_1111 '9
- '9
- Var_ziffern(11) = &B0011_1001 'C 'C
- Var_ziffern(12) = &B0111_0001 'F
- Var_ziffern(13) = &B0000_0000 'Clear GND
- Var_ziffern(14) = &B0100_0000 '- Minuszeichen
- Dim Var_ziffern_dot(14) As Byte
- Var_ziffern_dot(1) = &B1011_1111 '0
- Var_ziffern_dot(2) = &B1000_0110 '1
- Var_ziffern_dot(3) = &B1101_1011 '2
- Var_ziffern_dot(4) = &B1100_1111
- Var_ziffern_dot(5) = &B1110_0110
- Var_ziffern_dot(6) = &B1110_1101
- Var_ziffern_dot(7) = &B1111_1101
- Var_ziffern_dot(8) = &B1000_0111
- Var_ziffern_dot(9) = &B1111_1111
- Var_ziffern_dot(10) = &B1110_1111 '9
- '9
- Var_ziffern_dot(11) = &B1011_1001 'C 'C
- Var_ziffern_dot(12) = &B1111_0001 'F
- Var_ziffern_dot(13) = &B1000_0000 'Clear GND
- Var_ziffern_dot(14) = &B1100_0000 '- Minuszeichen
- Dim Dht_daten(5) As Byte 'Array für empfangene Daten
- Dim Luftfeuchtigkeit As Byte At Dht_daten(1) Overlay
- Dim Temperatur As Byte At Dht_daten(3) Overlay
- Dim Crc_ergebniss As Byte At Dht_daten(5) Overlay
- Dim Var_old_sec As Byte
- Dim Var_sec As Byte
- Dim Var_count As Byte
- Dim Var_zahl As Byte
- Dim Var_digit_array(4) As Word
- Dim Var_digit_tmp As Dword
- Dim Var_volt As Single
- Dim Var_volt_adc As Word
- Dim Var_undervoltage As Byte
- 'Ende Variablen
- '=============================================================
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Konstanten
- Const Cons_volt = 0.005
- Const Cons_volt_restart = 4.24
- Const Cons_shutdown = 3
- 'Ende Konstanten
- '=============================================================
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Watchdog
- Config Watchdog = 2048
- 'Start Watchdog
- 'Ende Watchdog
- '=============================================================
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Funktionen
- Declare Function Get_dht11() As Byte
- 'Ende Funktionen
- '=============================================================
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Spannung Messen Anfang
- Config Adc = Single , Prescaler = Auto , Reference = Internal
- Start Adc
- 'Ende Spannung Messen
- '=============================================================
- '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 'Funkuhr
- Config Pind.2 = Input
- Config Dcf77 = Pind.2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Check = 2 , Update = 0,
- Enable Interrupts
- Config Date = Dmy , Separator = .
- 'Ende Funkuhr
- '=============================================================
- Do
- 'Jede Sekunde eine Messung
- If _sec <> Var_old_sec Then
- Var_old_sec = _sec
- Incr Var_sec
- If Var_sec < 11 Then
- Var_digit_tmp = _min Mod 10
- Var_digit_array(1) = Var_digit_tmp
- Var_digit_tmp = _min / 10
- Var_digit_array(2) = Var_digit_tmp
- Var_digit_tmp = _hour Mod 10
- Var_digit_array(3) = Var_digit_tmp
- Var_digit_tmp = _hour / 10
- Var_digit_array(4) = Var_digit_tmp
- Elseif Var_sec = 11 Then
- If Get_dht11() = 1 Then 'Daten richtig empfangen
- Var_digit_array(1) = 10
- Var_digit_tmp = Temperatur Mod 10
- Var_digit_array(2) = Var_digit_tmp
- Var_digit_tmp = Temperatur / 10
- Var_digit_array(3) = Var_digit_tmp
- Var_digit_array(4) = 12
- Else 'Fehlercod ausgeben
- Var_digit_array(1) = 10
- Var_digit_array(2) = 13
- Var_digit_array(3) = 13
- Var_digit_array(4) = 13
- End If
- 'Ende Code erster Teil zweiter Teil da zulang im nächsten Beitrag!
Alex