logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Reset procesora Atmega128 przy zwieraniu PE5 do masy - jak temu zaradzić?

genpa 23 Lut 2008 12:18 2593 6
REKLAMA
  • #1 4836504
    genpa
    Poziom 11  
    Posty: 38
    Ocena: 9
    Witam, pisząc program do sterownika natknąłem się na pewne dziwne zachowanie, natomiast:
    -końcówkę PE5 mam ustawioną jako wejście
    -podwieszona jest za pomocą instrukcji set (bascom)
    -do końcówki dołączony jest tranzystor npn który zwiera ją z masą
    Program w pętli oprócz sprawdzania tej końcówki mierzy temperaturę z czujnika ds18b20.
    Problem jest w tym iż często gdy tranzystor przewodzi przez chwilę, procesor się resetuje.
    Końcówka PE5 jest też wyjściem timera3(oc3c) lecz nie jest on zdefiniowany ani uaktywniony w programie.
    Czyżby bascom włączał ten licznik samoczynnie?
    Jeśli tak to jak go wyłączyć odłączyć itp.
    Jeśli mój trop jest zły to co może być przyczyną resetu programu?
    Dzieje się to tylko gdy w krótkich odstępach czasu końcówka portu jest zwierana do masy.:/
    Z góry dziękuję za pomoc.
  • REKLAMA
  • #2 4836555
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Może podczas komunikacji z DSem wystawiasz stan wysoki na pinie i przez tranzystor zwierasz go do masy.
  • REKLAMA
  • REKLAMA
  • #4 4836627
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Umieść kod programu, to może ktoś pomoże. Ja akurat z Bascomem nie miałem doczynienia.
    Pozdrawiam
    Adam

    P.S. Na tym pinie masz również przerwanie zewnętrzne INT5, może to jest przyczyna.
  • #5 4836649
    genpa
    Poziom 11  
    Posty: 38
    Ocena: 9
    $regfile = "m128def.dat"
    $crystal = 10000000
    
    $swstack = 100
    $hwstack = 100
    $framesize = 200
    
    Config Lcd = 16 * 4
    Config Lcdpin = Pin , Db4 = Portf.4 , Db5 = Portf.5 , Db6 = Portf.6 , Db7 = Portf.7 , E = Portf.3 , Rs = Portf.2
    
    Config 1wire = Porte.2
    Config Porte.3 = Output
    Set Porte.3
    
    Config Porte.5 = Input                                      
    Set Porte.5
    
    Plomien Alias Pine.5
    Set Plomien
    
     Dim T As Integer , T1 As Single
    Dim Adr(8) As Byte , X As Byte
    Dim Flaga As Bit , Flaga1 As Bit
      X = 1                                                     'X = 1
      Adr(x) = 1wsearchfirst()
    
    Do
    Set Porte.3
      1wreset                                                   'reset - pierwszy cykl rozkazowy
      1wwrite &H55                                              'polecenie MATCH ROM, bo więcej kostek
      1wwrite Adr(x) , 8                                        ' adres jednej z kostek
      1wwrite &H44
    Reset Porte.3
    
         Waitms 750
    
        Set Porte.3                                             'czas konwersji
      1wreset                                                   'reset - drugi cykl rozkazowy
      1wwrite &H55                                              'polecenie MATCH ROM, bo więcej kostek
      1wwrite Adr(x) , 8                                        ' adres jednej z kostek
      1wwrite &HBE                                              'polecenie odczytu DS18x20
      T = 1wread(2)                                             'od razu wpisz do zmiennej typu Integer
       Shift T , Right , 3                                      'odpowiednik dzielenia przez 8
       If T.12 = 1 Then                                         'jeśli temperatura ujemna
         T = T Or &B1110000000000000                            'uzupełnij jedynki znaku
       End If
       T1 = T                                                   'przepisz wynik do zmiennej Single
       Shift T1 , Right , 1
                         Reset Porte.3
    
        If Plomien = 0 Then
        Locate 1 , 1
        Lcd " PLOMIEN"
        Else
        Cls
        End If
       Locate 2 , 1
    
         Lcd "temp.:" ; T1
    
    Loop




    Opcje kompilatora w tym przypadku maja duże wartości dlatego ze cały program jest dość rozbudowany a ten kod to tylko test tego ze procek dostaje reset po zwarciu pinu PE5 do masy.

    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • REKLAMA
  • #6 4837366
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    A jak podłączyłeś ten tranzystor? I w ogóle po co tam jest tranzystor?
  • #7 4837579
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    !! Bascom WYKŁADA sie przy kompilacji kodów dla proców mega64 i mega128 :)
    Mialem kiedys taki przypadek:
    pisałem sobie kod na szybko w bascomie, i chciałem użyć PF.3 jako pin 1wire. Skonfigurowalem w bascomie 1wire na ten pin i....
    LIPA, odczyt udawał sie raz na 100x a jak juz odczytal to jakas przekłamaną wartość... Po przepisaniu kodu do c i dopisaniu obslugi 1wire wszystko smigało do przodu i do tyłu :) Poza tym mialem tez inne przypadki nieprawidlowego dzialania PF i PE.

    Wniosek: Troche lewa obsługa portów >PORTD w bascomie. Najwiekszy cyrk jest z portem F, a portu g bascom wogole nie widzi <lol>

    >>genpa
    Wywal obsługe 1wire całą, każ procowi migać jakims ledem i wtedy sprawdz czy stan niski na PE5
    resetuje procesor. Jeszcze jedno.
    Podłącz tranzystor kolektorem do procka, emiter do masy, baze przez rezystor do miejsca w ktorym teraz jest podlaczona. Pin podciągnij za tranzystorem do plusa rezystorem 10kR. Pin ustaw jako wejscie Hi-Z....może pomóc :)

Podsumowanie tematu

✨ Problem dotyczy mikrokontrolera Atmega128, w którym zwieranie pinu PE5 do masy przez tranzystor NPN powoduje reset procesora. Pin PE5 jest skonfigurowany jako wejście i podciągnięty programowo w Bascomie, a jednocześnie pełni funkcję wyjścia timera3 (OC3C), który jednak nie jest aktywowany w kodzie. Podejrzenia padają na automatyczne włączenie licznika przez Bascom lub na przerwanie zewnętrzne INT5 przypisane do tego pinu. W dyskusji zasugerowano, że problem może wynikać z nieprawidłowego sterowania pinem podczas komunikacji z czujnikiem DS18B20 lub z błędów w obsłudze portów przez Bascom, zwłaszcza portów F i E. Rekomendowano udostępnienie kodu źródłowego do analizy oraz zmianę sposobu podłączenia tranzystora: kolektor do pinu mikrokontrolera, emiter do masy, baza przez rezystor do sygnału sterującego, a pin PE5 podciągnięty rezystorem 10 kΩ do plusa i ustawiony jako wejście Hi-Z. Sugerowano również wyłączenie obsługi 1-wire w Bascomie i testowanie stabilności pinu PE5 bez dodatkowych funkcji. Wskazano, że Bascom może mieć problemy z poprawną obsługą portów w Atmega128, co może powodować niestabilności i resetowanie procesora przy szybkim zwieraniu pinu do masy.
Wygenerowane przez model językowy.
REKLAMA