-
Data: 2010-01-31 16:25:45
Temat: at90s2313 resety i zwisy
Od: tomekp <t...@a...ma.kota.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Witam,
Postanowiłem opisać pewien problem z układem mojej konstrukcji, który
nie zachowuje się tak jak powinen. Otóż skonstruowałem sterownik do
wentylatora łazienkowego na procesorze jak w temacie. Układ ma za
zadanie uruchamiać wentylator na 2 możliwych biegach (pełna prędkość
oraz zredukowana czyli cicha) oraz ma dawać możliwość wyboru jednego z
kilku zaprogramowanych czasów pracy. Całe sterowanie odbywa się przy
pomocy jednego wyłącznika sznurkowego jaki jest dołączony do wentylatora
zaś procesor rozmawia z użytkownikiem przy pomocy mrugania jedną diodą led.
W tescie nazwijmy to laboratoryjnym (czyli sterowanie żarówką zamiast
wentylatora) układ działa znakomicie, natomiast po zamontowaniu
ustrojstwa w kibelku układ od czasu do czasu robi dziwne fochy.
Zdarza się mu bardzo często resetować procesor przy załączaniu
wentylatora i przy jego wyłączaniu. To akurat nie jest dużym problemem
bo po restarcie program rusza z domyślnymi ustawieniami i da się z tym
żyć. Niestety, od czasu do czasu, powiedzmy raz na 2 tyg. przy
wyłączaniu wentylatora procesor zawiesza się. Wchodzi w jakieś sobie
tylko znane fragmenty kodu, co skutkuje brakiem lub nieprawidłową
reakcją na pociągniecia wyłącznikiem sznurkowym oraz przypadkowym
mruganiem diody. I nijak nie da się go z tego stanu wprowadzić.
Koniecznie jest odłączenie go od zasilania. Tego efektu chciałbym się
pozbyć i gdyby ktoś miał pomysł jak to zrobić to byłbym hepi.
Kilka słów na temat hardware'u. Procek pracuje w standardowej aplikacji,
zasilany jest ze stabilizatora + spore elektorlity filtrujące. Pin reset
wisi w powietrzu gdyż wcześniejsze testy wykazały, że to jest
najstabilniejsze rozwiązanie (podciąganie do plusa skutkowało większą
wrażliwością procka na resety). Elementami wykonawczymi są 2 przekaźniki
sterowane przez tranzystory,które są bezpośrednio sterowane z portów
procesora. Jeden z przekaźników sluży do włączania 230V na wentylator,
drugi zaś ma za zadanie zwierać (lub rozwierać) kondensator, który w
obwodzie wentylatora ma za zadanie zmniejszać jego obroty.
Wiem, że takie rozwiązanie jest nie do końca właściwe, powinienem
zastosować jeszcze transoptory do optoizolacji portów i tranzystorów
sterujących przekaźnikami. Ale cóż, układ robiłem z elementów dostępnych
w szufladzie i złożyłem go na płytce uniwersalnej w kilka godzin. Nie
chce mi się po prostu modyfikować strony sprzętowej gdyż sterownik w
sumie działa w porządku. Irytujące jest tylko to zawieszanie procka.
Nie jestem elektronikiem, zajmuję się elektroniką hobbystycznie i to od
przypadku do przypadku. Dlatego zwracam się do mądrzejszych odmnie: co
jest przyczyną zwisów procka? Oczywiście mój układ generuje silne
impulsy zakłócające i procek ma prawo się resetować, ale co z tym
zwisaniem? Co wtedy robi wachdog? Przecież procek w tym stanie nie
powiniem przejść testów diagnostycznych i watchdog powieniem go zresetować.
Program sterujący napisałem w bascomie, dla dociekliwych załączam
listing poniżej.
Dziękuję za uwagę i pozdrawiam
Tomek
Config Portb = &01111111
Config Portd = &1111111
Portb = &B11111111
Portd = &B1111111
Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 64
Stop Ac
Dim Oldb As Bit
Dim Newb As Bit
Dim Clik As Byte
Dim Sclik As Bit
Dim Dclik As Bit
Dim Tclik As Bit
Dim Per As Byte
Dim Oldclik As Byte
Dim Newclik As Byte
Dim Diffclik As Byte
Dim Setczas As Word
Dim Licz As Word
Dim Mryg As Byte
Dim Czest As Byte
Dim Nastawianie As Bit
Dim Czasy(7) As Word
Dim Blyski(7) As Byte
Dim Index As Byte
Dim Indexp As Byte
Dim Czasnas As Byte
Dim Czasreset As Word
On Ovf0 Bleble
On Timer1 Co1s
Enable Interrupts
Enable Int0
Enable Timer0
Enable Timer1
Czasy(1) = 300
Czasy(2) = 600
Czasy(3) = 900
Czasy(4) = 1800
Czasy(5) = 3600
Czasy(6) = 5400
Czasy(7) = 7200
Blyski(1) = 6
Blyski(2) = 11
Blyski(3) = 21
Blyski(4) = 40
Blyski(5) = 80
Blyski(6) = 150
Blyski(7) = 254
Clik = 0
Sclik = 0
Dclik = 0
Tclik = 0
Oldclik = 0
Oldb = Pinb.0
Per = 0
Licz = 0
Mryg = 0
Index = 3
Czest = Blyski(index)
Setczas = Czasy(index)
Nastawianie = 0
Do
If Czasreset = 0 Then
Tclik = 0
Clik = 0
Sclik = 0
Dclik = 0
Nastawianie = 0
Licz = 0
Idle
End If
If Tclik = 1 Then
Czasreset = 1
Set Portd.0
Set Portd.3
Licz = 0
Nastawianie = 1
Sclik = 0
Czasnas = 1
Do
If Dclik = 1 Then
Indexp = Index - 1
Indexp = 7 + Index
Indexp = Indexp + 1
Index = Indexp Mod 7
Setczas = Czasy(index + 1)
Czest = Blyski(index + 1)
Dclik = 0
End If
Loop Until Sclik = 1 Or Czasnas = 0
Tclik = 0
Clik = 0
Sclik = 0
Dclik = 0
Nastawianie = 0
End If
Loop
Co1s:
Load Timer1 , 62500
If Nastawianie = 0 Then
If Sclik = 1 Then
Czasreset = 1
Reset Portd.3
Tclik = 0
Dclik = 0
If Licz < Setczas Then
Sclik = 1
End If
If Licz > Setczas Then
Set Portd.3
Licz = 0
Sclik = 0
Tclik = 0
Dclik = 0
End If
End If
If Dclik = 1 Then
Czasreset = 1
Reset Portd.0
Sclik = 0
Tclik = 0
If Licz < Setczas Then
Dclik = 1
End If
Reset Portd.3
Sclik = 0
Tclik = 0
If Licz > Setczas Then
Set Portd.0
Set Portd.3
Licz = 0
Dclik = 0
Sclik = 0
Tclik = 0
End If
End If
If Dclik = 0 Then
If Sclik = 0 Then
Set Portd.0
Set Portd.3
Licz = 0
End If
End If
Incr Licz
End If
Incr Czasnas
If Czasnas > 120 Then
Czasnas = 0
End If
Incr Czasreset
If Czasreset > 10800 Then
Czasreset = 0
End If
Return
Bleble:
Incr Per
If Per = 100 Then
Newb = Pinb.0
If Newb <> Oldb Then
Incr Clik
Oldb = Newb
End If
Per = 0
Newclik = Clik
Diffclik = Newclik - Oldclik
If Diffclik = 0 Then
If Clik = 1 Then
If Sclik = 0 Then
If Dclik = 0 Then
Sclik = 1
Dclik = 0
Tclik = 0
Else
Sclik = 0
Dclik = 0
Tclik = 0
End If
Else
Sclik = 0
Dclik = 0
Tclik = 0
End If
End If
If Clik = 2 Then
Dclik = 1
Sclik = 0
Tclik = 0
End If
If Clik = 3 Then
Tclik = 1
Dclik = 0
Sclik = 0
End If
Clik = 0
End If
Oldclik = Newclik
End If
Incr Mryg
If Mryg > Czest Then
If Sclik = 1 Or Dclik = 1 Or Tclik = 1 Or Nastawianie = 1 Then
Toggle Portd.6
End If
Mryg = 0
End If
If Sclik = 0 And Dclik = 0 And Tclik = 0 And Nastawianie = 0 Then
Set Portd.6
End If
Return
End
Następne wpisy z tego wątku
- 31.01.10 17:38 Wojciech Bartczak
- 31.01.10 20:01 tomekp
- 31.01.10 21:30 beznick
- 31.01.10 21:56 tomekp
- 31.01.10 22:05 beznick
- 31.01.10 22:32 tomekp
- 31.01.10 23:04 Wojciech Bartczak
- 01.02.10 06:37 EM
- 01.02.10 09:08 tomekp
- 01.02.10 09:15 tomekp
- 01.02.10 10:45 u
- 01.02.10 19:56 MM
- 01.02.10 20:33 tomekp
- 01.02.10 20:36 tomekp
- 02.02.10 06:47 MM
Najnowsze wątki z tej grupy
- ciekawy układ magnetofonu
- Mikroskop 3D
- Jak być bezpiecznym z Li-Ion?
- Szukam monitora HDMI ok. 4"
- Obcinaczki z łapaczem
- termostat do lodowki
- SEP 1 kV E
- Aku LiPo źródło dostaw - ktoś poleci ?
- starość nie radość
- Ataki hakerskie
- Akumulatorki Ni-MH AA i AAA Green Cell
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
Najnowsze wątki
- 2024-12-21 Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 2024-12-21 Ideologia Geniuszy-Mocarzy dostępna na nowej s. WWW energokod.pl
- 2024-12-21 ciekawy układ magnetofonu
- 2024-12-21 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2024-12-21 Warszawa => Java Developer <=
- 2024-12-21 Zalesie Borowe => Medical Equipment Service Engineer <=
- 2024-12-21 Żerniki => Specjalista ds. Employer Brandingu <=
- 2024-12-21 jak tacy debile
- 2024-12-20 Precedensy politycznie motywowanego nie wydawania w UE
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Gdańsk => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-20 czyste powietrze
- 2024-12-20 Katowice => Analyst in the Trade Development department (experience wi