Witam kolegów serdecznie tuż przed świętami.
Piszę program realizujący pomiar temperatury i zapisujący uzyskane dane do pliku zlokalizowanego na karcie SD.
Powoli wtrącam timery zamiast wait().
Mam w sumie trzy problemy.
1) Formatuje uzyskane dane przez zapisem do pliku. Niestety nie wiem jak w stringu zamienić kropkę na przecinek i dopiero taki format zapisać. Chodzi o to, że chciałbym, aby arkusz kalkulacyjny zobaczył liczbę, a nie string
. Czy da się?
2) Timer1 odlicza wybrany przez użytkownika czas trwania pomiarów (Menu_czasu). W tym czasie czujnik dokonuje pomiaru co kilka sekund a dane są zapisywane aż Licz_przepelnien=0. Wtedy wychodzimy z pętli głównej programu, obliczamy statystykę, zapisujemy ją na koniec pliku i wchodzimy w tryb powerdown aż do resetu proca.
Skoro korzystam z przerwania Timer1, jak przerobić ten algorytm tak, aby urządzenie wchodziło w tryb powerdown zaraz po Przygotowanie_pliku i
Menu_czasu? Chodzi o to aby wybudzał się co przerwanie na wykonanie pomiaru i zapis do pliku, a później dalej szedł spać.
Czy ustawienie wszystkich portów jako wyjścia przed wejściem w tryb powerdown zmniejszy pobór energii?
3) Gdy wykorzystuję Timer1 do odliczania czasu od wartości licznika przepełnienia do 0 i dalej nic więcej, wszystko jest ok.
Próbowałem jednak zrealizować odstęp między kolejnymi pomiarami wewnątrz Do...Loop na Timer1. W przerwaniu zaznaczyłem -
zlicz od A do Licz_przepelnien. Jesli A>Licz_przepelnien then A=0.
I powtarzam od nowa. Fakt, działa! Mierzy temperaturę co x sekund. Problem polega na tym, że za każdym razem mierzy ją 5 razy z rzędu, x sekund przerwy, 5 x pomiar i tak dalej...
W programie nie miałem błędu. Gdy usunąłem Do...Loop, wykonało pomiar tylko raz. Rzecz jasna bez Do...Loop to długo nie podziała i słusznie. Jednak widzę, że połączenie Do...Loop oraz Timer1 wewnątrz pętli to nic dobrego.
Dlaczego mierzył 5 razy co mniej więcej domyślne 750ms dla czujnika DS18b20? Powinien zmierzyć tylko raz, poczekać x sekund, znowu...
Na razie w tej części programu jestem zdany na Wait().
Piszę program realizujący pomiar temperatury i zapisujący uzyskane dane do pliku zlokalizowanego na karcie SD.
Powoli wtrącam timery zamiast wait().
Mam w sumie trzy problemy.
1) Formatuje uzyskane dane przez zapisem do pliku. Niestety nie wiem jak w stringu zamienić kropkę na przecinek i dopiero taki format zapisać. Chodzi o to, że chciałbym, aby arkusz kalkulacyjny zobaczył liczbę, a nie string
Kod: text
2) Timer1 odlicza wybrany przez użytkownika czas trwania pomiarów (Menu_czasu). W tym czasie czujnik dokonuje pomiaru co kilka sekund a dane są zapisywane aż Licz_przepelnien=0. Wtedy wychodzimy z pętli głównej programu, obliczamy statystykę, zapisujemy ją na koniec pliku i wchodzimy w tryb powerdown aż do resetu proca.
Skoro korzystam z przerwania Timer1, jak przerobić ten algorytm tak, aby urządzenie wchodziło w tryb powerdown zaraz po Przygotowanie_pliku i
Menu_czasu? Chodzi o to aby wybudzał się co przerwanie na wykonanie pomiaru i zapis do pliku, a później dalej szedł spać.
Czy ustawienie wszystkich portów jako wyjścia przed wejściem w tryb powerdown zmniejszy pobór energii?
Kod: text
3) Gdy wykorzystuję Timer1 do odliczania czasu od wartości licznika przepełnienia do 0 i dalej nic więcej, wszystko jest ok.
Próbowałem jednak zrealizować odstęp między kolejnymi pomiarami wewnątrz Do...Loop na Timer1. W przerwaniu zaznaczyłem -
zlicz od A do Licz_przepelnien. Jesli A>Licz_przepelnien then A=0.
I powtarzam od nowa. Fakt, działa! Mierzy temperaturę co x sekund. Problem polega na tym, że za każdym razem mierzy ją 5 razy z rzędu, x sekund przerwy, 5 x pomiar i tak dalej...
W programie nie miałem błędu. Gdy usunąłem Do...Loop, wykonało pomiar tylko raz. Rzecz jasna bez Do...Loop to długo nie podziała i słusznie. Jednak widzę, że połączenie Do...Loop oraz Timer1 wewnątrz pętli to nic dobrego.
Dlaczego mierzył 5 razy co mniej więcej domyślne 750ms dla czujnika DS18b20? Powinien zmierzyć tylko raz, poczekać x sekund, znowu...
Na razie w tej części programu jestem zdany na Wait().