topstar napisał: Właśnie mam już cały program gotowy w bascomie , nie umiem w tej chwili na tyle dobrze C żeby napisać obsługę PCF, dwóch DS18B20 plus MPX4115. Także chodzi właśnie mi tylko o rozwiązanie pomiaru ciśnienia co 5-10 minut.
Ok doszedłem wkońcu jak to zrobić .
Zaloguj się, aby zobaczyć kod
Zaloguj się, aby zobaczyć kod
W pętli głównej dałem:
If Timer1 = 20 Then 'jesli timer zliczy 20 impulsow(20s)
Timer1 = 0 ' zeruje timer
Gosub Mpx4115 'skok do podprogramu odczytu cisnienia
End If
[/syntax]
Nie wiem czy to dobre rozwiązanie, ale ważne że spełnia moje oczekiwania.
Skoro program spełnia oczekiwania programisty, to
musi byc dobry!
Niemniej jednak te 3 przedstawione fragmenty są pozbawione logicznego sensu.
Popatrz na tę linię kodu:
Config Timer1 = Counter , Edge = Falling , Prescale = 1024
Jeżęli timer1 pracuje jako counter zliczający impulsy zewnętrzne z portu B.1, to te impulsy
nie idą przez prescaler lecz bezpośrednio i są zliczane w tej ilości jak występują na tym pinie.
Dalej,
On Timer1 Licz - w tej instrukcji "Timer1" reprezentuje interrupt OVF1.
Aby ta częśc programu została wykonana (skok do subrutyny Licz) wymagane jest:
Enable interrupts oraz,
Enable Timer1 albo enable OVF1.
zatem nie nastąpi skok do subrutyny.
Mimo tego sama subrutyna nie zawiera nic więcej oprócz incrementacji Rejestru timera1, (TCNT1), który jest incrementowany po każdym impulsie na PB.1.
Przeanalizujmy jeszcze następny fragment:\
Cytat:
W pętli głównej dałem:
If Timer1 = 20 Then 'jesli timer zliczy 20 impulsow(20s)
Timer1 = 0 ' zeruje timer
Z czego wynika że zawartośc rejestru Timer1 nigdy nie przekroczy wartości 20 i nigdy nie dojdzie do jego przepełnienia, a zatem skok do subrutyny: "On Timer1 Licz" jest tutaj również blokowany.
Wobec powyższego, efektem jest 20-secundowy cykl odczytu ciśnienia a nie jak zakładano 5 do 10 min.
Timer1/Counter1 musiałby zliczac 300 do 600 impulsów.
e marcus
0