F_CPU zmora programisty…

F_CPU narobiło mi dość dużo problemów i straconego czasu. Generalnie nie mogę powiedzieć że straconego poznieważ zdobyłem cenną wiedzę która zapene przyda się w przyszłości. Wszystko rozbiło się o czujnik wilgotności DHT11, pisząc program w  Atmel Studio 6 i głowiąc się co jest nie tak i dlaczego nie mogę odczytać pomiaru postanowiłem podpiąć oscyloskop. Podpięcie oscyloskopu miało tylko potwierdzić że wszystko jest ok i to wina niesprawnego sensora. Niestety to co zobaczyłem na ekranie wprowadziło mnie w stan konsternacji, wszystko co do tej pory pisałem działało bez problemów, w tym przypadku jednak straciłem wiarę w AVR (tylko na chwile). Na ekranie oscyloskopu przebieg nie wyglądał tak jak miał wyglądać z perspektywy programu. Po pierwsze stan niski nie trwał 18ms tak jak założyłem:

//reset port
 DHT11_DDR |= (1<<DHT11_INPUTPIN); //output
 DHT11_PORT |= (1<<DHT11_INPUTPIN); //high
 _delay_ms(100);
//send request
 DHT11_PORT &= ~(1<<DHT11_INPUTPIN); //low
 _delay_ms(18);
 DHT11_PORT |= (1<<DHT11_INPUTPIN); //high
DHT11 Atmega8
DHT11 Atmega8

 

 

ale 1.6ms.

 

 

Po tygodniowej walce z różnymi kombinacjami i gotowymi biliotekami wkońu postanowiłem napisać post na elektroda.pl. Dzieki jednej jedynej odpowiedzi z linkiem do artykułu który wyjaśnia dleczego mogą się pojawiać problemy z _delay_ms() i F_CPU, zastosowałem się do wskazówek w artykule http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html udało się pierwsze odpalenie programu i pomiar prawidłowy!

DHT11 Atmega8

 

 

 

 

 

A to już odczyt w LabView:

labview dht11

Leave a Comment