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

Antwort per Email an