Discussion:
Bascom - projekt - gdzie jest błąd? POMOCY!
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Henry(k)
2004-09-27 09:32:42 UTC
Permalink
Pomocy, programik nie działa.

Zrobiłem projekt sterownika do pompy przy piecu i fajnie działa. Ale
skończyły mi się procesory ze starych zapasów (seria z 1996) i kupiłem nowe.
Kupiłem 5 sztuk każdy z innej serii (z 1998, i nowe z 2003)
Programator MAX nie chce ich zaprogramować (wywala się na losowo wybranej
komórce) ale Willem nie robi problemów.

http://www.henrico.republika.pl/gdzie_blad.zip

W linku jest schemat układu i poobcinane źródło do samego programu głównego.
Wygląda to tak:
- włączany jest timer który generuje przerwanie co 250uS
- w obsłudze przerwania są zaszyte liczniki które odliczają czas na odczyty
temperatury z DS1821 oraz obsługa wyświetlaczy

teraz w pętli głównej:
- po wystartowaniu liczników odmierzany jest czas około 3,5 sekundy, po
którym wysyłana jest komenda konwersji temperatury do DS1821
- po kolejnych 1,5 sekundy licznik przekracza wartość 999 i jest skok do
podprocedury odczytującej temperaturę.

W czym problem?
...po osiągnięciu temperatury TLO następuje włączenie przekaźnika (stan H na
P3.5) który uruchamia pompkę.. liczniki zię zerują i nastepuje odmierzanie
znowu czasu 3,5sek - pompka pracuje dalej. Potem kolejne 1,5sek i następuje
aktualizacja temperatury oraz wyłączenie pompki !!! (stan L na P3.5).
Dajej to już jest klepanie przekażnikiem:
- 3,5 sek wyłączony przekaźnik (po aktualizacji temp)
- na 1,5 sek się włącza (po wysłaniu komendy startu konwersji)
- wyłącza się znowu po odczycie i aktualizacji temperatury.

Co jest grane?
Zrobiłem próbę i zanegowałem P3.5. Tzn poniżej temperatury włączenia jest
stan wysoki a po osiągnięciu jej niski. No i klepie jak jest niska
temperatura, a po przekroczeniu jej ustawia się stan niski i ciszaa.
Coś nie tak ze stanem wysokim jest. Ale co?

Pomocy... na starej kości z 1996 roku wszystko działa. Nowych sprawdziłem w
sumie 8 sztuk i na wszystkich to samo. Programator MAX firmy ACS się sypie a
po zaprogramowaniu Willemem takie krzaki.
--
Henry(k)
Odpowiadając na majla usuń cyfrę z adresu.
Henry(k)
2004-09-27 11:07:34 UTC
Permalink
WItam ponownie.

Pozakładałem ręczne pułapki i...
przekaźnik puszcza w momencie wykonywania podprogramu odczytu temperatury, a
dokładnie w trakcie jej odczytu z DS:

Get_temp:
1wreset
1wwrite &HAA ' odczytaj
temp
Temp_buf = 1wread()

wie ktoś dlaczego??
Marek Dzwonnik
2004-09-27 11:26:13 UTC
Permalink
Post by Henry(k)
1wreset
1wwrite &HAA '
odczytaj temp
Temp_buf = 1wread()
wie ktoś dlaczego??
Nie wiem dlaczego. A tym bardziej nie wiem dlaczego na starym Atmelku ma
działać a na nowych nie. Ale...
Czy nie masz jakiegoś konfliktu pomiędzy obsługą przerwań a bascomowymi
1Wire ? Nie wiem jak te funkcje są zrealizowane w Bascomie, ale biorąc pod
uwagę szerokść szczelin czasowych w 1Wire (AFAIR <15us, 15...60us
120...480us) nie da się ich pogodzić z obsługą przerwań co 250us. Tzn.
najprawdopodobniej bascom na czas obslugi 1Wire musi wylączyć przerwania.
Zastanów się np. co cię dzieje w razie zgubienia jednego..kilku przerwań od
timera.

--
Marek Dzwonnik, GG: #2061027 - zwykle jako 'niewidoczny'
(Uwaga Gadu-Gadulcowicze: Nie odpowiadam na anonimy.)
Henry(k)
2004-09-27 11:50:49 UTC
Permalink
Post by Marek Dzwonnik
Nie wiem dlaczego. A tym bardziej nie wiem dlaczego na starym Atmelku ma
działać a na nowych nie. Ale...
Czy nie masz jakiegoś konfliktu pomiędzy obsługą przerwań a bascomowymi
1Wire ? Nie wiem jak te funkcje są zrealizowane w Bascomie, ale biorąc pod
uwagę szerokść szczelin czasowych w 1Wire (AFAIR <15us, 15...60us
120...480us) nie da się ich pogodzić z obsługą przerwań co 250us. Tzn.
najprawdopodobniej bascom na czas obslugi 1Wire musi wylączyć przerwania.
Zastanów się np. co cię dzieje w razie zgubienia jednego..kilku przerwań od
timera.
No ok.
Wyłączam przerwania na czas trwania odczytu temperatury:
---
Stop Timer0
Disable Interrupts
1wreset
1wwrite &HAA
Temp_buf = 1wread()
1wreset
Enable Interrupts
---

i dalej to samo.
Powyższy fragment wyłącza mi przekaźnik, natomiast start przetwarzania
temperatury:

Stop Timer0
1wreset
1wwrite &HEE
Start Timer0

włącza mi go spowrotem :-/
No i tylko i wyłącznie w przypadku gdy port P3.5 ma ustawiany stan wysoki
tak się dzieje.
Spadnie temperaturka poniżej progu Tlo i mam stan niski... i ciszę na porcie
P3.5.

PS. ma może ktoś procedurkę obsługi DS1821 w asm ?
--
Henry(k)

Odpowiadając na majla usuń cyfrę z adresu.
As
2004-09-27 13:33:06 UTC
Permalink
Post by Henry(k)
Pomocy, programik nie działa.
Zrobiłem projekt sterownika do pompy przy piecu i fajnie działa. Ale
skończyły mi się procesory ze starych zapasów (seria z 1996) i kupiłem nowe.
Kupiłem 5 sztuk każdy z innej serii (z 1998, i nowe z 2003)
Programator MAX nie chce ich zaprogramować (wywala się na losowo wybranej
komórce) ale Willem nie robi problemów.
[ciach]
Co do atmelków to faktycznie jest różnica miedzy starą a nową wersją
(nastąpiła zmiana technologii). W nowych wersjach np. w uśpieniu był duży
prąd rzędu 100uA, który cały czas się zmieniał. Nie wiem czy już to
poprawili bo od kilku lat nie używam tych procesorków.
Co do twojego projektu to zmieniłbym trzy rzeczy. Przede wszystkim
powinieneś podłączyć masę do stabilizatora, po drugie spróbować podwiesić do
+5V nóżkę P3.5 przez rezystor np. 22k. Po trzecie spróbuj dać histerezę w
procedurze porównania temperatur. Kiedyś robiłem regulator temperatury i też
o tym zapomniałem. W okolicach temperatury granicznej przekaźnik mi szalał
bo pomiar raz był równy temperturze granicznej a raz niższy (oczywiście
dopóki temperatura na skutek załączonego ogrzewania nie podniosła się na
tyle żeby chwilami nie spadać poniżej założonej granicy).
A.S.
Henry(k)
2004-09-27 13:44:27 UTC
Permalink
Post by As
Co do atmelków to faktycznie jest różnica miedzy starą a nową wersją
(nastąpiła zmiana technologii). W nowych wersjach np. w uśpieniu był duży
prąd rzędu 100uA, który cały czas się zmieniał. Nie wiem czy już to
poprawili bo od kilku lat nie używam tych procesorków.
Co do twojego projektu to zmieniłbym trzy rzeczy. Przede wszystkim
powinieneś podłączyć masę do stabilizatora, po drugie spróbować podwiesić do
oczywiście jest, tylko tak programik wyrysował :-)
Post by As
+5V nóżkę P3.5 przez rezystor np. 22k. Po trzecie spróbuj dać histerezę w
Nie podwieszałem, bo port ma wewnętrzne rezystory
Post by As
procedurze porównania temperatur. Kiedyś robiłem regulator temperatury i też
histereza jest, tylko jak napisałem to jest fragment z którego usunąłem
wszystko co mogłoby zamącić cały program.
--
Henry(k)
Odpowiadając na majla usuń cyfrę z adresu.
entroper
2004-09-27 14:50:29 UTC
Permalink
Post by Henry(k)
Pomocy, programik nie działa.
(...)

pytanie pomocnicze (z ukrytym rozwiazaniem problemu): jakie jest
napiecie w stanie H na pinie P3.5 ?

pozdrawiam
entrop3r
Henry(k)
2004-09-27 14:52:35 UTC
Permalink
Post by entroper
pytanie pomocnicze (z ukrytym rozwiazaniem problemu): jakie jest
napiecie w stanie H na pinie P3.5 ?
Ja pi***e DZIAŁA

Dziękuję głównie As i Tobie !

Podciągnąłem i działa.

Napięcie na nodze było raz w stanie wysokim a raz w stanie niewiadomojakim.
Nie rozumiem tego gdyż:
- wersja z 1996 roku proca działa miodzio
- port ma rezystory pull-up

czyżby rezystor raz był a raz go nie było w zależności od wykonywanego
fragmentu kodu?
--
Henry(k)
Odpowiadając na majla usuń cyfrę z adresu.
entroper
2004-09-27 17:06:39 UTC
Permalink
Post by Henry(k)
Ja pi***e DZIAŁA
Dziękuję głównie As i Tobie !
Podciągnąłem i działa.
Napięcie na nodze było raz w stanie wysokim a raz w stanie
niewiadomojakim.
Post by Henry(k)
- wersja z 1996 roku proca działa miodzio
- port ma rezystory pull-up
czyżby rezystor raz był a raz go nie było w zależności od wykonywanego
fragmentu kodu?
pewnie przemigrowali w strone gestszych struktur i wydajnosc portu sie
zmniejszyla (i cholera wie, co sie jeszcze spieprzylo przy okazji)-
BTW - w datasheecie mam podana bardzo niska wydajnosc portu (prad
wyplywajacy) - ten rezystor byl i tak "na granicy". A bascom pewnie
uzywa do sterowania pinem 1-wire instrukcji read-modify-write, co
powoduje wlasnie takie sensacje.

pozdrawiam
entrop3r

Loading...