Henry(k)
Guest
Mon Sep 27, 2004 8:32 am
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)
Guest
Mon Sep 27, 2004 10:07 am
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
Guest
Mon Sep 27, 2004 10:26 am
Użytkownik "Henry(k)" <henrico8@op.pl> napisał w wiadomości
news:cj8scn$2q3$1@nemesis.news.tpi.pl
Quote:
Get_temp:
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)
Guest
Mon Sep 27, 2004 10:50 am
Użytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisał w
wiadomości news:4157f8d6$1@news.home.net.pl...
Quote:
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
Guest
Mon Sep 27, 2004 12:33 pm
Quote:
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)
Guest
Mon Sep 27, 2004 12:44 pm
Użytkownik "As" <.NOSPAM.a.s.i.e.r@poczta.onet.pl> napisał w wiadomości
news:cj94s6$j7d$1@atlantis.news.tpi.pl...
Quote:
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ł :-)
Quote:
+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
Quote:
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
Guest
Mon Sep 27, 2004 1:50 pm
"Henry(k)" <henrico8@op.pl> wrote in message
news:cj8mk5$qpo$1@atlantis.news.tpi.pl...
Quote:
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)
Guest
Mon Sep 27, 2004 1:52 pm
Użytkownik "entroper" <entroper@CWD.spamerom.poczta.onet.pl> napisał w
wiadomości news:cj98tg$3mr$1@achot.icm.edu.pl...
Quote:
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
Guest
Mon Sep 27, 2004 4:06 pm
"Henry(k)" <henrico8@op.pl> wrote in message
news:cj99cb$epi$1@atlantis.news.tpi.pl...
Quote:
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?
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