Witam szanownych forumowiczów!
Mam problem z wyświetlaniem wartości natężenie prądu. Korzystałem z zagadnienia poruszonego w "Blubuku" jednak na potrzeby zmieniłem trochę program pod ATmegę32, ponieważ nie posiadam ATtiny26. Zmiana została dokonana w linijce w której wylicza się średnią ( zmienna -> srednia):
zamiast:
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
mamy:
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
żeby wyświetlane wartości pokrywały się z prawdą (zrobiłem do tego arkusz w excelu taki jak w rozdziale 4.8.2. Różnicowy pomiar napięcia). Zmieniłem również rejestr ADCSR który występuje w ATtiny26 na ADCSRA z ATmegi32.
Przepisałem elegancko cały kod do Eclipsa, skompilowałem i niestety wartość prądu na wyświetlaczu nie nie dla każdej wartości ADC odzwierciedla realną wartość prądu (sprawdzane multimetrem). Maksymalna wartość jaką udało mi się wyświetlić i się pokrywała z wcześniejszymi wyliczeniami to 0,5 [A], potem nie wyświetlało wyższych wartości.
Dodatkowo wyświetliłem wartość ADC, na podstawie której była wyliczana wartość prądu i tu akurat wartość była zgodna z tą wyliczoną z Excela dla całego zakresu. zacząłem więc wyświetlać obok wartości ADC wartość "srednia", żeby zobaczyć jakie wartości pokaże. Były to wartości z zakresu zmiennej typu int16_t (-32k do 32k) mimo, że typ zmiennej zmieniałem wielokrotnie, na te mogące pomieścić większe liczby. Ponadto dodałem dla sprawdzenia nową zmienną "uint64_t srednia2 = 100000;" i gdy wyświetliłem jej wartość funkcją "lcd_int();"
pokazała się wartość "-31072", tak jakby przewijało cały czas wartość int16_t. Nie mam pojęcia na czy polega mój błąd. Załączam kod programu, bliźniaczo podobny do tego z książki z rozdziału 4.8.2. .
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
P.S. Jeśli to ważne, to oglądałem serię filmików o ADC ponad dwa razy.