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

atmega8 - przerywa na wyjściu

tadtal 30 Lis 2010 22:17 1361 8
REKLAMA
  • #1 8810872
    tadtal
    Poziom 11  
    Witam.
    Otóż programowaniem mikrokontrolerów (w moim przypadku programowanie to całkiem mocne słowo) zaintersowałem się kilka dni temu. Zlutowałem programator pod LPT i na początku kombinowałem z zapalaniem diod. Wszystko grało, potem zaprogramowałem mikrokontroler gotowym wsadem, ustawiłem fusebity i w oparciu o ten układ zbudowałem programator na USB (usbasp).
    Tutaj przez pewien czas, też wszystko było ok, natomiast po którejś z kolei próbie wgrania programu zaczeły się schody. A mianowicie ustawiam dla b0 i b1 stany, by zaswiecic (na stałe) diode, a ona owszem, świeci, ale przerywa z dość dużą częstotliwością (mruga). Gdy wgrywam program i chcę by dioda mrugała - wtedy albo świeci na stałe, albo w ogóle nie świeci. Dodam jeszcze, że po tych dziwnych wydarzeniach, zaprogramowalem ten sam mikrokontroler programatorem pod LPT i jeden raz było dobrze. Wróciłem do programowania przez USB i problem znowu sie pojawił. Po nastepnej przesiadce na LPT objawy pozostały takie same i teraz niezależnie poprzez jaki port (programator) zaprogramuje atmega8 to albo szybko mruga, albo w ogole nie swieci.
    Do LPT uzywalem ponyprog2000 natomiast do usbasp nie uzywalem avrdude tylko jakis chinski programik progisp167...

    Sam obstawiam, że padł mikrokontroler(moze jakis fusebit przestawiony?). Może jakies porady, co by zapobiegać takim wydarzeniom ? Na tą chwile nie mam innej sprawnej atmegi co by sprawdzić czy to nie wina programatora...
  • REKLAMA
  • REKLAMA
  • #3 8811164
    tadtal
    Poziom 11  
    tu nie było skomplikowanych operacji, po prostu działało, a po kilku próbach zmiany portów wyjściowych przestało - jestem na samym początku jeśli chodzi o mikrokontrolery.

    Pierwszy program (bascom) :

    $regfile "m8def.dat"
    config PORTB = &B00000011
    PORTB = &B00000001

    Do
    Loop


    //* tutaj dioda świeciła, wszystko było ok - pierwszy raz programowane poprzez LPT*//

    Drugi program :

    $regfile "m8def.dat"
    $crystal = 1000000

    config PORTB = &B00000011

    Do
    PORTB = &B00000001
    Waitms 250
    PORTB = 0
    Waitms 250
    Loop


    //* też wszystko było ok, kilkakrotnie zmienialem odstepy między mruganiem itd... też na początku programowane na LPT *//


    Po zrobieniu i uruchomieniu Usbasp wgrałem te same programy, zmieniałem wartości, czyściłem pamięć flash itd (po prostu ogarniałem program itd)


    Dodam, że przy ustawieniu dwóch portów wyjsciowych i podpięciu dwóch diod, zaczeło się mruganie. Oby dwie świeciły w odpowiednio podpiętych miejscach, ale mrugały ( a miały świecić na stałe).
    Po tej operacji, cokolwiek wgrałem dioda (diody) na odpowiednich portach swieciły ale mrugały. Raz się zdarzyło, że przy programie z mruganiem diody, świeciła się na stałe. Trzeba zakupić nowego procka ?
  • REKLAMA
  • #4 8811297
    dondu
    Moderator na urlopie...
    Nie znam BASCOMa, ale nie widzę abyś ustawił odpowiednie bity portu B jako wyjścia, czyli w rejestrze DDRB, chyba że robi to instrukcja:

    config PORTB = &B00000011 


    A jak masz ustawiony zegar i czy czasem nie jest tak, że masz kwarc np. 12MHz a w programie ustawione 1MHz?

    $crystal = 1000000 


    tadtal napisał:
    Trzeba zakupić nowego procka ?

    Nie sądzę, raczej wina leży po stronie programu, chyba że przestawiałeś fusbity.

    Dobrze byłoby abyś załączył schemat Twojego rozwiązania.
  • #5 8811414
    tadtal
    Poziom 11  
    Progam w bascomie był dobry - swiadczy o tym min. to, że na samym początku wszystko działało.
    Zauważyłem, że dioda która ma mrugać (pomijając fakt, że mruga cały czas z dużą częstotliwościa - coś na styl podłączenia żarówki pod napięcie zmienne 10hz) w momencie kiedy powinna nie świecić, leciutko sie ściemnia, a w momencie gdy powinna sie zapalać troche się rozjaśnia... świeci cały czas, ale przygasa i rozjaśnia się w odstępach czasu odpowiednich do pierwotnego mrugania... nic już z tego nie rozumiem...


    Po zakupie nowego mikrokontrolera i wgraniu tych samych wsadów, wszystko jest ok. Programowałem poprzez LPT, wole z tym usbasp nie ryzykowac (przy tamtym procku schody zaczeły się własnie przy używaniu usbasp). Czy jest możliwość, że przez ten dziwny programik tak się działo ?
  • REKLAMA
  • #6 8813676
    gaskoin
    Poziom 38  
    PORTB = &B00000001
    Waitms 250
    PORTB = 0
    Waitms 250
    Loop



    Nie znam bascoma w ogóle ale z tego co widzę to zapalasz diodę, czekasz 250ms po czym ja gasisz i czekasz 250 ms - taki program napisałeś i dziwisz się, że mruga? :D
  • #8 8822071
    arktik1
    Poziom 27  
    
    config PORTB = &B00000011
    

    Zaprogramowałeś pierwsze 2 porty jako wyjścia, resztę jako wejścia.
    Powinno być w zasadzie tak:
    
    config PORTB = &B00000011
              PORTB = &B00000000
    

    potem
    
    PORTB = &B00000001
    Waitms 250
    PORTB = 0
    Waitms 250
    Loop
    


    zrób tak:
    
    Do
    PORTB.0 = 1
    Waitms 250
    PORTB.0 = 0
    Waitms 250
    Loop
    

    Lub tak:
    
    do
    TOGGLE PORTB.0
    Waitms 250
    Loop
    

    A najlepiej użyj zmiennej do liczenia przerw mrugania, inaczej jeśli coś dopiszesz to może być problem z Waitms xxx
    I oczywiście prędkość programu musi się zgadzać z oscylatorem.
REKLAMA