Hallo, ich finde es toll, dass Ihr Euch mal selbst Gedanken macht und nicht immer nur auf die Hilfe der Entwickler hofft. Weiter so!
* Matthias Berner <matthiasber...@familie-berner.de> [141207 12:05]: > From: Matthias Berner <matthiasber...@familie-berner.de> > Date: Sun, 7 Dec 2014 12:05:44 +0100 > To: ethersex-devel@list.zerties.org > Subject: Re: [ethersex-devel] dht pollen nach einer weile nicht mehr > > hab mir mal die zeiten im Analyzer angeschaut > die Init zeit von 18ms war ziemlich am schwanken, je nachdem was auf dem AVR > noch so zu tun war > > hab mal eine pause hier in dht_start eingefügt > > *(port-1) |= _BV(pin); /* OUTPUT */ > *(port-0) &= ~_BV(pin); /* LOW LEVEL */ > _delay_ms(18); > damit hab ich immer über 20ms reale pulldowntime (die ging ohne mal auf 8ms > runter, möglich dass der DHT dann irgendwann nicht mehr antwortet) Autsch! Der 20ms-Delay wird durch dht_periodic() sichergestellt. Dein Delay in dht_start() bringt das gesamte Timing der Mainloop durcheinander! Laut Datenblatt reichen 18ms, ein Timertick ist mindestens 20ms lang. Sollte das auf Deinem AVR nicht der Fall sein, solltest Du da mit der Ursachensuche beginnen. Man könnte in der ISR einen Portpin togglen und die Zeiten messen. > laut kommentar in der dht.c sollte darauf dann 40ms pullup folgen, sind aber > nur 30 (auch gemessen) 40us nicht 40ms > in dht_read hab ich dass geändert > > *(port-0) |= _BV(pin); /* HIGH LEVEL */ > _delay_us(40); > *(port-1) &= ~_BV(pin); /* INPUT */ Welchen Sensortyp hast Du im Einsatz? Laut Datenblatt DHT22 sind 30us typisch, minimum 20us. Dein Sensor hält sich nicht ans Datenblatt? Die delay-Anweisungen sind übrigend Busy-Waits, die zur Compilezeit auf Basis des AVR-Taktes (F_CPU) berechnet werden. Gruß, eku _______________________________________________ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel