eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › at90s2313 resety i zwisy
Ilość wypowiedzi w tym wątku: 29

  • 1. Data: 2010-01-31 16:25:45
    Temat: at90s2313 resety i zwisy
    Od: tomekp <t...@a...ma.kota.pl>

    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


  • 2. Data: 2010-01-31 17:38:03
    Temat: Re: at90s2313 resety i zwisy
    Od: Wojciech Bartczak <o...@o...pl>

    W dniu 2010-01-31 17:25, tomekp pisze:
    > 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
    >
    >
    Witam,

    W twoim układzie zaniepokoiła mnie jedna sprawa. Zostawienie nóżki
    restetu zawieszonej w powietrzu. Z postu wynika, że po testach okazało
    się to mniej kłopotliwe. Aczkolwiek, takie rozwiązanie chyba nie jest
    zbyt zdrowe dla samego procesora. Czy w stanach przejściowych silnika
    jesteś wstanie zagwarantować napięcie na nóżce RESET wyższe od progu
    przełączania ? Wydaje mi się, że zdrowsze będzie ponowne spięcie resetu
    z linią zasilania przez jakiś rozsądny pull-up, a poprawy będzie wymagać
    stabilność zasilania MCU. Może pewniejsze okaże się zasilani impulsowe ?
    Czy przerwałeś ścieżkę do nóżki resetu zaraz obok niej? W przypadku
    indukowanych prądów to może powodować problem, przy montażu układu na
    płytce uniwersalnej. Ew. z tego co wiem, w fuse bitach jesteś wstanie
    zrezygnować z zewnętrznego resetu(do ustalenia z datasheetem).
    Co do samego programu, nie doszukałem się tam żadnej niespodzianki, ale
    nie jestem specem od basica na mcu, także tutaj sprawa zostaje otwarta.

    Pozdrawiam,
    Wojtek.


  • 3. Data: 2010-01-31 20:01:53
    Temat: Re: at90s2313 resety i zwisy
    Od: tomekp <t...@a...ma.kota.pl>


    >
    > W twoim układzie zaniepokoiła mnie jedna sprawa. Zostawienie nóżki
    > restetu zawieszonej w powietrzu. Z postu wynika, że po testach okazało
    > się to mniej kłopotliwe. Aczkolwiek, takie rozwiązanie chyba nie jest
    > zbyt zdrowe dla samego procesora. Czy w stanach przejściowych silnika
    > jesteś wstanie zagwarantować napięcie na nóżce RESET wyższe od progu
    > przełączania ? Wydaje mi się, że zdrowsze będzie ponowne spięcie resetu
    > z linią zasilania przez jakiś rozsądny pull-up, a poprawy będzie wymagać
    > stabilność zasilania MCU. Może pewniejsze okaże się zasilani impulsowe ?
    > Czy przerwałeś ścieżkę do nóżki resetu zaraz obok niej? W przypadku
    > indukowanych prądów to może powodować problem, przy montażu układu na
    > płytce uniwersalnej. Ew. z tego co wiem, w fuse bitach jesteś wstanie
    > zrezygnować z zewnętrznego resetu(do ustalenia z datasheetem).
    > Co do samego programu, nie doszukałem się tam żadnej niespodzianki, ale
    > nie jestem specem od basica na mcu, także tutaj sprawa zostaje otwarta.
    >
    Dzięki za odpowiedź. Problem resetu może być rzeczywiście związany ze
    słabą wydajnością zasilania. Zastosowałem do tego jakąś starą ładowarkę
    od telefonu simensa. Przy starcie przekaźnika może rzeczywiście być
    cienko z prądem i dochodzić do spadku napięcia i resetu. Jeśli chodzi o
    podciąganie pinu resetu to ćwiczyłem to dość dokładnie, wniosek był
    jeden: im więcej naczepiane tym gorzej. Dlatego zostawiłem po prostu
    reset niepodłączony do niczego, tzn przez podstawkę zlutowany jest ze
    ścieżka płytki. Ale ta ścieżka jest krótka, nie więcej niż 1cm albo coś
    koło tego. Generalnie resetowanie się procka to problem dla mnie
    drugorzędny i wolałbym nie dłubać w fusebitach bo wydaje mi się, że
    gdyby procek nie robił resetu to by się zawieszał znacznie znacznie
    częściej. To właśnie to zawieszanie mnie intryguje bo, z tego co wiem, w
    stanach gdzie procek głupieje zaczyna działać watchdog. Jesli procek nie
    odpowiada na pytania watchdoga to ten go resetuje. BYć może źle
    rozumuję, nie wiem. U mnie w czasie zwiechy procesor zachowuje się
    totalnie bez sensu, jak pociągne za sznureczek dioda zaczna migać w
    przypadkowy sposób ale świeci ciągle. A wentylator albo nie pracuje
    wcale albo pracuje non-stop. Konieczne jest wtedy odłączenie zasilania.
    Pozdrawiam
    Tomek


  • 4. Data: 2010-01-31 21:30:19
    Temat: Re: at90s2313 resety i zwisy
    Od: "beznick" <x...@a...cd>


    Użytkownik "tomekp" <t...@a...ma.kota.pl> napisał w wiadomości
    news:hk4nfa$ko7$1@node1.news.atman.pl...
    > Dzięki za odpowiedź. Problem resetu może być rzeczywiście związany ze
    > słabą wydajnością zasilania. Zastosowałem do tego jakąś starą ładowarkę


    Dołóż potężny elektrolit to sie upewnisz

    > częściej. To właśnie to zawieszanie mnie intryguje bo, z tego co wiem, w
    > stanach gdzie procek głupieje zaczyna działać watchdog. Jesli procek nie
    > odpowiada na pytania watchdoga to ten go resetuje. BYć może źle rozumuję,
    > nie wiem. U mnie w czasie zwiechy procesor zachowuje się

    Zapewne program obsługi resetu jest zły
    Odporność na zakłócenia hobbystycznych konstrukcji mikroprocesorowych to
    temat rzeka


  • 5. Data: 2010-01-31 21:56:15
    Temat: Re: at90s2313 resety i zwisy
    Od: tomekp <t...@a...ma.kota.pl>


    >
    > Dołóż potężny elektrolit to sie upewnisz
    Siedzi 470u przy zasilaniu uC i chyba 100u przy wejsciu
    stabilizatora,dodatkowo małe ceramiczne też dodałem
    >
    >> częściej. To właśnie to zawieszanie mnie intryguje bo, z tego co wiem,
    >> w stanach gdzie procek głupieje zaczyna działać watchdog. Jesli procek
    >> nie odpowiada na pytania watchdoga to ten go resetuje. BYć może źle
    >> rozumuję, nie wiem. U mnie w czasie zwiechy procesor zachowuje się
    >
    > Zapewne program obsługi resetu jest zły

    Co rozumiesz przez program obsługi resetu?

    > Odporność na zakłócenia hobbystycznych konstrukcji mikroprocesorowych
    > to temat rzeka

    Zdaje sobie sprawę z niedoskonałości konstrukcji i akceptuję resety
    procesora, natomiast nie pojmuję tych zawieszeń...


  • 6. Data: 2010-01-31 22:05:36
    Temat: Re: at90s2313 resety i zwisy
    Od: "beznick" <x...@a...cd>


    Użytkownik "tomekp" <t...@a...ma.kota.pl> napisał w wiadomości
    news:hk4u5o$lvr$1@node1.news.atman.pl...
    > Co rozumiesz przez program obsługi resetu?

    Jesteś pewien, ze wszystkie wartosci zmiennych ustawiają sie prawidłowo ?
    Inaczej zachowuje się program resetowany, inaczej po włączeniu zasilania,
    inaczej po krótkotrwałym obnizeniu zasilania. Wszystko przewidziałeś w
    programie?

    Moze on pamieta jakieś zmienne i idzie w maliny


  • 7. Data: 2010-01-31 22:32:00
    Temat: Re: at90s2313 resety i zwisy
    Od: tomekp <t...@a...ma.kota.pl>

    beznick pisze:
    >
    > Użytkownik "tomekp" <t...@a...ma.kota.pl> napisał w wiadomości
    > news:hk4u5o$lvr$1@node1.news.atman.pl...
    >> Co rozumiesz przez program obsługi resetu?
    >
    > Jesteś pewien, ze wszystkie wartosci zmiennych ustawiają sie prawidłowo ?
    > Inaczej zachowuje się program resetowany, inaczej po włączeniu zasilania,
    > inaczej po krótkotrwałym obnizeniu zasilania. Wszystko przewidziałeś w
    > programie?
    >
    > Moze on pamieta jakieś zmienne i idzie w maliny
    >

    Z pewnością idzie w maliny ale nie wiem właśnie dlaczego. Ja nie wiem
    czy wszystko przewidziałem, starałem się w każdym możliwym miejscu
    ustawiać wartości wszystkich zmiennych na takie jakie być powinny w
    danym fragmencie kodu. W programie jest tylko pętla gówna i w niej dwie
    instrukcje warunkowe, jedna do włączania stanu idle a druga do
    programowania czasu (w niej jest też pętla). Większość kodu jest zawarta
    w 2 procedurach obsługi przerwania timerów. W nich nie ma pętli. Zatem
    jeśli zapamięta jakieś wartości w chwili krytycznej i wskutek zakłóceń
    wpada w przypadkowe miejsce kodu to może jedynie wylądować albo w
    intrukcjach warunkowych (z których powinien wyjsc bez problemu) albo w
    tej pętli programowania czasu. Z tym,że ona skończy się zawsze o ile
    timer1 działa. Jeśli masz czas i ochotę to listing programu jest w moim
    pierwszym poście. Bliższą analizę utrudnia jeszcze to, że te zawieszenia
    pojawiają się rzadko i niewiadomo od czego zależą.
    Pozdrawiam
    Tomek


  • 8. Data: 2010-01-31 23:04:10
    Temat: Re: at90s2313 resety i zwisy
    Od: Wojciech Bartczak <o...@o...pl>

    W dniu 2010-01-31 21:01, tomekp pisze:
    > Dzięki za odpowiedź. Problem resetu może być rzeczywiście związany ze
    > słabą wydajnością zasilania. Zastosowałem do tego jakąś starą ładowarkę
    > od telefonu simensa. Przy starcie przekaźnika może rzeczywiście być
    > cienko z prądem i dochodzić do spadku napięcia i resetu. Jeśli chodzi o
    > podciąganie pinu resetu to ćwiczyłem to dość dokładnie, wniosek był
    > jeden: im więcej naczepiane tym gorzej. Dlatego zostawiłem po prostu
    > reset niepodłączony do niczego, tzn przez podstawkę zlutowany jest ze
    > ścieżka płytki.

    Jak dokładnie rozwiązałeś stabilizację zasilania
    dla układu ? LM317/LM7805 + "bateria" kondensatorów ?
    Ja bym zrobił tak. Poprawił zasilanie, może coś impulsowego bym
    dał, najlepiej jakiś step-down, wtedy da się odciążyć źródło, zapewne
    transformator :). To powinno rozwiązać problem zasilania.
    Ew, dać większe trafo, które uciągnie układ podczas załączania
    przekaźników.
    Ale ta ścieżka jest krótka, nie więcej niż 1cm albo coś
    > koło tego.

    Problem jest taki, że nie możesz zagwarantowac stałości potencjału tego
    kawałka ścieżki. Jego wartość będzie zależeć od tego co się dzieje w
    okół, może się zdarzyć, że będzie chwilowo mniejszy od progu przełączania.

    > Generalnie resetowanie się procka to problem dla mnie
    > drugorzędny i wolałbym nie dłubać w fusebitach bo wydaje mi się, że
    > gdyby procek nie robił resetu to by się zawieszał znacznie znacznie
    > częściej.

    Problem może być taki, że skoro przysiadał reset w testach, to zamiast
    tego, teraz przysiada zasilanie MCU. A w wyniku tego zaczynają się dziać
    dzikie rzeczy w całym układzie.

    To właśnie to zawieszanie mnie intryguje bo, z tego co wiem, w
    > stanach gdzie procek głupieje zaczyna działać watchdog. Jesli procek nie
    > odpowiada na pytania watchdoga to ten go resetuje.

    Watchdog restartuje procesor, gdy nie dostanie
    sygnału, że wszystko jest ok, czyli, np. długie pętle, intensywne
    obliczenia. Może wystarczy w pętlach które masz w programie wstawić
    takową instrukcję ?

    BYć może źle
    > rozumuję, nie wiem. U mnie w czasie zwiechy procesor zachowuje się
    > totalnie bez sensu, jak pociągne za sznureczek dioda zaczna migać w
    > przypadkowy sposób ale świeci ciągle. A wentylator albo nie pracuje
    > wcale albo pracuje non-stop. Konieczne jest wtedy odłączenie zasilania.

    Może być to wywołane tym, że masz dziwne wartości w rejestrach po
    restarcie. Zgodnie z dokumentacją, po restarcie wykonywane jest
    przerwanie o adresie 0, czyli instrukcja spod adresu 0x0000.
    Zobacz też czy nie masz uaktywnionych innych przerwań od innych
    urządzeń, np. ADC, komparator analogowy ?

    ja proponuje zrobić coś takiego (kod w asm)

    Adres instr. instr.:

    ;; obsługa tylko startu/resetu jeżeli wystąpi

    0x0000 rjmp start
    0x0001 reti
    0x0002 reti
    ....
    0x00a reti

    start: cli ;; blokuje przerwania
    <twoja inicjalizacja zmiennych>
    sei ;; odblokowuje przerwania
    <cała reszta programu>

    To powinno zagwarantować, że wystartujesz pewnie
    a procesor przejdzie pełny restart. Dodatkowo nawet jeżeli pojawi się
    jakieś niespodziewane przerwanie, to zostanie po prostu zignorowane.
    Jeżeli używasz jakichś przerwań (z kodu wnioskuje, że timery)
    to powinieneś pod odpowiednimi adresami mieć wpisane skoki do
    obsługi tych przerwań.

    Pozdrawiam,
    Wojtek.


  • 9. Data: 2010-02-01 06:37:51
    Temat: Re: at90s2313 resety i zwisy
    Od: "EM" <e...@p...onet.pl>

    Witam
    Najpierw usuń źródło zakłóceń, czyli silnik :).
    Czyli daj jakiś dobry gasik na stykach przekaźnika.

    Pozdr
    EM



  • 10. Data: 2010-02-01 09:08:24
    Temat: Re: at90s2313 resety i zwisy
    Od: tomekp <t...@a...ma.kota.pl>


    > ja proponuje zrobić coś takiego (kod w asm)
    >
    > Adres instr. instr.:
    >
    > ;; obsługa tylko startu/resetu jeżeli wystąpi
    >
    > 0x0000 rjmp start
    > 0x0001 reti
    > 0x0002 reti
    > ....
    > 0x00a reti
    >
    > start: cli ;; blokuje przerwania
    > <twoja inicjalizacja zmiennych>
    > sei ;; odblokowuje przerwania
    > <cała reszta programu>
    >
    > To powinno zagwarantować, że wystartujesz pewnie
    > a procesor przejdzie pełny restart. Dodatkowo nawet jeżeli pojawi się
    > jakieś niespodziewane przerwanie, to zostanie po prostu zignorowane.
    > Jeżeli używasz jakichś przerwań (z kodu wnioskuje, że timery)
    > to powinieneś pod odpowiednimi adresami mieć wpisane skoki do
    > obsługi tych przerwań.
    >
    > Pozdrawiam,
    > Wojtek.
    >

    Dzieki za wnikliwą analizę. Byc może powyższy kod problem by rozwiązał
    ale nie wiem czy da sie pożenić asemblera z bascomem w sposób przez
    Ciebie opisany. Przerobiać program na asemblera nie dam rady... O ile
    rozumiem Twój kod chodzi o to, żeby dla wszystkich instrukcji o adresie
    od 0x0001 do 0x00a wykonywany był powrót z procedury obsługi przerwania.
    Nie wiem jak to zrealizowac w bascomie. Ta druga częśc, czyli blokowanie
    przerwań w trakcie inicjalizacji zmiennych jest do zrobienia.
    dzieki i pozdrawiam
    Tomek

strony : [ 1 ] . 2 . 3


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: