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

Atmega16 - niestabilność przy wewnętrznym oscylatorze RC 4MHz, fusebity

Prodig 30 Maj 2006 12:31 1859 16
REKLAMA
  • #1 2678741
    Prodig
    Poziom 20  
    Posty: 487
    Pomógł: 4
    Ocena: 14
    Witam!

    Zrobiłem sterownik na procesorze atmega16. Program napisalem w bascomie. Włączyłem oscylator wewnętrzny RC 4MHz.

    Problem polega na tym, że procesor co jakiś czas zaczyna głupieć. Przykładowo czas zaczyna "lecieć" szybciej lub jakieś krzaki wyświetla na LCD.

    Nie wiem co jest grane. Flagi ustawiłem tak:
    Fusebit KL - 00:6 CK, no delay
    Fusebit A987 - 0011:Internal RC oscilator 4MHz.

    Do czego jest flaga Fusebit B? Jest tam do wyboru BODEN Disabled lub BODEN Enebled. A flaga Fusebit C?

    Dziękuję i pozdrawiam.

    Moderowany przez McRancor:

    Wywaliłem "Pomocy" z tematu, przecież wiadomo że jak piszesz na tym forum, to nie po to żeby się pochwalić niestabilnym prockiem, poczytaj przyklejony temat o pisaniu postów

  • REKLAMA
  • #2 2678777
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    BODEN = Brown Out Detector ENable
    Jeżeli sie nie mylę to jest to włącznik sprzętowego resetu kontrolera poniżej jakiegoś progu napięcia zasilania.
  • #3 2678801
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Oscylator rc jest niestety mało stabiny ew funkcji Vcc i temp dodatkowo nalezy do skalibrowac do vcc dla konkretnego ukladu . W twoim przypadu sadze ze problem leży w napieciuzsilania wspólnym z peryferiami wstaw kwarca ustaw bity i bedzie ok
  • #4 2678818
    jacobsek
    Poziom 22  
    Posty: 419
    Pomógł: 61
    Ocena: 24
    Boden ustaw sobie na te 4V z hakiem co tam jest,w przypadku spadku napięcia nastąpi reset,chroni to nieco przed zgłupieniem programu gdy spada napięcie.
  • REKLAMA
  • #5 2678821
    Prodig
    Poziom 20  
    Posty: 487
    Pomógł: 4
    Ocena: 14
    Nie jest ważna dla mnie dokładność pomiaru dlatego zrobiłem to na wewnętrznym RC. Poza tym, pamiętam, że kiedyś podobne problemy miałem z zewnętrznym kwarcem - też wyskakiwały krzaki i procesor wariował.

    Jeżeli chodzi o zasilanie to sprawdzałem na oscyloskopie - wygląda OK.
  • #6 2678833
    jacobsek
    Poziom 22  
    Posty: 419
    Pomógł: 61
    Ocena: 24
    Fuse bit C służy do załączania lub wyłączania podziału częstotliwości osylatora prze 8,jeśli masz go załączonego to układ chodzi z podziałem :8 czyli znacznie wolniej.
    Moze wstaw kod to prędzej coś można będzie zobaczyć co się tam dzieje?
  • #7 2678862
    Prodig
    Poziom 20  
    Posty: 487
    Pomógł: 4
    Ocena: 14
    Kod jest dosyć długawy. Wstawię tylko początek na razie:

    
    $regfile = "m16def.dat"
    $crystal = 4050000
    
    Config Kbd = Portd
    Config Lcd = 16 * 1a
    Cursor Off
    
    Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 10 , 10 , 4         ' v
    Cls
    Deflcdchar 2 , 32 , 32 , 32 , 4 , 12 , 4 , 4 , 5            '1
    Cls
    Deflcdchar 3 , 32 , 32 , 32 , 6 , 9 , 2 , 4 , 15            '2
    Cls
    
    Dim Key As Byte
    Dim I As Integer                                           
    Dim Z As Long
    Dim J As Integer
    Dim Hh As Byte
    Dim Mm As Byte
    Dim Czasseansu As Eram Integer At 10
    Dim Czasseansu2 As Integer
    Dim Czaszwloki As Eram Integer At 20
    Dim Czaszwloki2 As Integer
    Dim Czaspracy As Eram Single At 30
    Dim Czaspracy2 As Single
    Dim Calkczaspracy As Eram Single At 40
    Dim Calkczaspracy2 As Single
    Dim Czaswent As Eram Integer At 50
    Dim Czaswent2 As Integer
    Dim Hp As Long
    Dim Mp As Long
    Dim Sp As Long
    Dim Tmp As Single
    Dim Tmp2 As Single
    Dim Maxczas As Eram Integer At 60                          
    Dim Maxczas2 As Integer
    Dim Podanehaslo As String * 8
    Dim Haslo As Eram String * 6 At 70
    Dim Haslo2 As String * 6
    Dim Cyfra As Byte
    Dim Click As Bit
    Dim Tmpsek As Integer
    Dim Tmpsek2 As Integer
    Dim Tmpsek3 As Integer
    Dim Tmpsek5 As Integer
    Dim Tmpsek4 As String * 20
    Dim Unihaslo As String * 6
    Dim Tekst As String * 8
    
    'powitanie
    Cls
    Lcd " WITAJ!      " ; Chr(1) ; Chr(2) ; Chr(3)
    Wait 3
    


    Dodam jeszcze, że w programie występuje dosyć dużo poleceń 'waitms'.

    Wydaje mi się, że jak dam BODEN Enabled to jest OK.
  • #8 2678896
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    Nie wiem jak masz rozwiązane programowanie układu. Jeśli masz programatorek podłączony na kablu to na czas testowania układu proponowałbym go odpiąć. Z własnego doświadczenia wiem, że czasami lubi nieźle namieszać w papierach. Kolejna rzecz to zasialcz. Jeśli zrobiłeś go sobie w oparciu o stabilizator LM7805 to dobrze by było gdyby w pobliżu wejścia i wyjścia tego układu a masę dać kondensatorki kilka, kilkadziesiąt nanofaradów. Jest jeszcze do ustawienia bit, chyba, CKOPT, który zwiększa amplitudę przebiegu jednak nie wiem czy to się tyczy pracy z wewnętrznym zegarem. Spróbować nie zaszkodzi. Bit ten powinieneś ustawić na wartość "0".

    --
    pozdrawiam
  • REKLAMA
  • #9 2678993
    Prodig
    Poziom 20  
    Posty: 487
    Pomógł: 4
    Ocena: 14
    Odłączam programator gdy testuję.

    Muszę tutaj jeszcze napisać, że problem nie występuje zawsze. Pojawia się raz na jakiś czas.

    Sterownik steruje dwoma przekaźnikami, które podłączone są do portów przez tranzystor, do którego bazy podłączony jest rezystor 4,7k. Cewki przekaźników zabezpieczone są diodami. Zauważyłem, że na zasilaniu pojawia się czasem krótki "pik" gdy załączane są przekaźniki. Nie wiem jak go wyeliminować, podłączyłem 10nF między kolektor a masę ale chyba nie pomogło.
  • REKLAMA
  • #10 2679598
    00
    Poziom 11  
    Posty: 14
    Pomógł: 1
    Piszesz, że ustawiłes ocsylator na 4 MHz a z programu wynika 4,05 MHz
    może to ma wpływ.
  • #12 2680752
    Prodig
    Poziom 20  
    Posty: 487
    Pomógł: 4
    Ocena: 14
    00 napisał:
    Piszesz, że ustawiłes ocsylator na 4 MHz a z programu wynika 4,05 MHz
    może to ma wpływ.


    W programie ustawiłem troche więcej, żeby wykalibrować. Tak dokładniej chodzi.

    Jeżeli chodzi o kondensatory to już wstawiłem wszędzie gdzie się dało :) Przetestuję teraz w urządzeniu, które jest sterownane przez ten sterownik.
  • #13 2682225
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    Witam

    A moze wina lezy po stronie programu, moze wykionuje w pewnym momencie jakas nieprzewidziana operacje i sie wykrzacza....?? Jak czesto sie zawiesza ?
  • #14 2684565
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam ponownie

    Napisałeś, że testujesz bez programatora. Czy układ badany/testowany jest w miejscu docelowym ? Chodzi mi o to co jest podpięte pod styki przekaźników. Jeśli masz tam ~230V to bez zastanowienia zakładaj układ gasikowy na styki czyli szeregowo połączony rezystorek (około) 39R/1W i kondensator 100nF/630V. Miałem podobny problem z AT89C2051 w sterowniku do pieca centralnego. Po wstawieniu układów gasikowych problem zniknął.

    --
    pozdrawiam
  • #15 2685623
    Prodig
    Poziom 20  
    Posty: 487
    Pomógł: 4
    Ocena: 14
    cyberdar napisał:
    Jeśli masz tam ~230V to bez zastanowienia zakładaj układ gasikowy na styki czyli szeregowo połączony rezystorek (około) 39R/1W i kondensator 100nF/630V.


    Dzięki za radę, będę o tym pamiętał w razie dalszych problemów.
  • #17 2729145
    jacobsek
    Poziom 22  
    Posty: 419
    Pomógł: 61
    Ocena: 24
    To zależy od tego co dalej załącza ten przekaźnik,miałem taki przypadek że przy 150nf podtrzymaywał się stycznik który załączałem przekaźnikiem więc trzeba ostrożnie....jeśli ten kondensator jesy na 250 v prądu przemiennego to mozesz,tego typu kondzie są liczone na przepięcia chwilowe na dużo wyższe napięcie niż znamionowe ale to już zależy od typu tego który posiadasz

Podsumowanie tematu

✨ Problem dotyczy niestabilnej pracy mikrokontrolera Atmega16 z wewnętrznym oscylatorem RC 4 MHz, objawiającej się przyspieszaniem czasu działania i pojawianiem się zakłóceń na wyświetlaczu LCD. Ustawienia fusebitów obejmują wewnętrzny oscylator 4 MHz oraz brak opóźnienia CK, jednak autor pyta o funkcję fusebitów B (BODEN) i C. Fusebit B (BODEN) odpowiada za włączenie detektora Brown-Out, który resetuje układ przy spadku napięcia zasilania, co może zapobiegać błędom działania. Fusebit C kontroluje podział częstotliwości oscylatora przez 8, co znacząco zmienia taktowanie. Wskazano, że oscylator RC jest mniej stabilny i wymaga kalibracji względem napięcia zasilania i temperatury, a problemy mogą wynikać z zakłóceń na linii zasilania, zwłaszcza podczas załączania przekaźników. Zalecane jest stosowanie kondensatorów filtrujących (np. 100 µF na wyjściu stabilizatora i kondensatory ceramiczne blisko mikrokontrolera), odłączanie programatora podczas testów oraz ewentualne zastosowanie kwarcu zamiast oscylatora RC dla stabilniejszej pracy. Dodatkowo, przy sterowaniu przekaźnikami podłączonymi do sieci 230 V, sugerowane jest stosowanie układów gasikowych (rezystor 39 Ω/1 W i kondensator 100 nF/630 V) w celu eliminacji zakłóceń. Pojawiła się też dyskusja o doborze kondensatorów do układów gasikowych, gdzie napięcie znamionowe kondensatora powinno być dostosowane do warunków pracy. Autor potwierdził, że problem występuje sporadycznie i nie zawsze, a zasilanie na oscyloskopie wygląda poprawnie. Kod programu jest napisany w Bascom AVR i zawiera definicje konfiguracji LCD i klawiatury oraz zmienne do pomiaru czasu pracy.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA