Macie panowie racje. Generalnie to dawno temu zaczlem przygode z bascomem wtedy na 89C4051 ale poleglem i dalem sobie spokoj na wiele lat. Teraz wrocilem do tematu. Zaczalem od prostackich programow gdzie np delay 1sekunda sluzyl mi do mrugania ledami itd. Wstawialem takich delai wiele i mi diodki mrugaly jak cos tam mialem zglosic. Ale zaczalem sie zastanawiac ze skoro procek przez tyle sekund nic nie robi to jak ja uzyje watchdoga? No i zaczalem myslec jak pisac programy zeby bylo dobrzea nie tak zupelnie po amatorsku. Ostatnio udalo mi sie zredukowac w programie wygodne w bascomie liczby zmienno przecinkowe i okazalo sie ze parwie 20% flesha mi sie zwolnilo. Do tego wiecej skokow do podprogramow a nie powtarzanie w kolko pamieciozernych instrukcji. Wiec po woli dojrzewam do bycia prawdziwym programista

Wiele klopotu programista sprawiaja timery zawsze chca ich miec jak najwiecej, zeby odmierzac byle co. Ostatnio zaczalem pisac inaczej.
Ostatni moj program sklecilem tak:
jeden timer odmierza 1ms zglaszajac przerwanie ustawia flage. Na poczatku programu odczytyje ta flage i zwiekszam liczniki kolejnych flag dla 10ms i 100ms itd. Potem w programie dziele instrukcje na te wykonywane co 1ms, co 10ms i co 100ms. Co 1ms odczytyje klawisze, wielokrotny odczyt zastepuje mi debounce klawisze. Bascom typowo zceka kilkanascie milisekund i odczytuje klawisze ponownie co jest bez sensu. Co 10ms zmieniam wyjscia przelaczajace przekazniki bo przeciez i tak szybciej nie bede dzialac. A co 100ms wysylam cos na RS232.
Nie wiem czy to dobre podejscie, ocene sami. Na pewno zaczynam pisac z glowa i juz nie uzywam opoznien tylko licze te moje milisekundy
I wlasnie dlatego potrzebuje obsluzyc ADC w tle bez zatrzymywania proca. Moze te 200us nic by nie wnioslo ale ja chce sie nauczyc.
Wiec wlasnie sie dowiedzialem od was ze po ustawieniu muxa pierwszy pomiar nalezy wyrzucic do kosza. Nie wiem dlazcego. Moze potrzebna jest pewna sekwencja ustawic mux odczekac, wlaczyc ADC, odczekac, odczytac dane. Nie wiem czy jest dostep do rejestu sterujacego sample $ hold. Moze trzeba do otworzyc na jakis czas a potem zamknac a nastepnie uruchomic adc?
start adc i stop adc z tego co wiem to wlacza i wylacza zasilanie. Wiec nadal nie wiem jak rozpoczac konwersje i jak sie dobrac do mux-a. Dobzre ze sie dowiedzialem o rejestrach ADCH i ADCL

Idziemy w dobrym kierunku
Dodano po 3 [minuty]: tronics napisał: Nie dam ryby, dam wędkę.
Ryby mi zalujesz

I to w swieta

Dawaj rybe!
Dodano po 9 [minuty]: tronics napisał: a jedynie rozsądne wykorzystanie przerwań.
No wlasnie rozsadne. Atmega8 nie ma pritytetow przewan. Ostatnio pisalem program mierzacy impulse zewnetrzny w zakresie 500-2000us. Podalem sygnal na zewnetrzne przerwanie w ktorym uruchamialem timer. Niestety tylko 8bitowy, wiec jego przerwanie inkrementowalo programowy licznik. No i pojawil sie problem bo czasem zliczenia byly o dokladnie 256 us nizsze. Okazalo sie ze w trakcie wchodzenia w przerwanie zewn pojawialo sie przerwanie wewn i gubilem jeden cykl (256 impulsow) Dopiero w przerwaniu zewnetrznym zaczalem sprawdzac flage przerwania wewnetrznego i sam inkrementowalem licznik. Jednak potem okazalo sie ze kolejny wynik pomiaru mam o 256 za duzy. Musialem w przerwaniu zewn dodatkowo zresetowac flage przerwania wewn. znalezienie tych flag to byla kilku dniowa mordenga. Dlatego teraz prosze znawcow
