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

[ATmega8][C]Czy ten programik mógł zniszczyć procesor?

janek2222 18 Sty 2011 13:38 2933 22
  • #1 9022339
    janek2222
    Poziom 12  
    Zacząłem pisać prosty zegarek (kod poniżej) i po jego wgraniu PonyProgiem (Programator ISP na LPT) procesor przestał działać. L7805 jest chłodniejszy niż wcześniej, procesor również czyli pewnie nie pobiera prądu. Z prockiem nie ma komunikacji za pomocą ww. programatora.

    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/sleep.h>
    #include "HD44780.c"
    #include <math.h>  
    #include <stdlib.h>
    
    int godz, min, sek, initial, takt = 0; 
    char sgodz[2], smin[2], ssek[2];
    
    SIGNAL (SIG_OUTPUT_COMPARE2)
    {
      if (++takt==16)
      {
         if (sek > 59)
    		{
    		sek = 0;
    		min++;
    		}
    	if (min > 59)
    		{
    		min=0;
    		godz++;
    		}
    	if (godz > 23)
    		{
    		godz = 0;
    		}
    	}
    	if (initial = 1)
    	{
             	itoa(godz, sgodz, 2);
             	itoa(min, smin, 2);
             	itoa(sek, ssek, 2);
    
             	LCD_GoTo(0,2);                   
             	LCD_WriteText(sgodz); 
             	LCD_GoTo(4,2);                      
             	LCD_WriteText(smin); 
             	LCD_GoTo(7,2);               
             	LCD_WriteText(ssek); 
      }
    }
    
    int main (void)
    {
         LCD_Initalize();
         LCD_Clear();
         ininitial = 1;
    }
    


    Oczywiście później zauważyłem że zapomniałem o pętli nieskończonej ale czy to jest winowajcą? Prawdopodobnie programik zawiera jeszcze wiele innych błędów.

    Czy jakiś fragment tego kodu jest winowajcą zejścia procesora czy to tylko przypadek, czy ten procek można jeszcze uratować? Za pomoc z góry dziękuję.
  • #3 9022424
    janek2222
    Poziom 12  
    Light-I napisał:
    Przestawiłeś fusebity podczas programowania...
    https://www.elektroda.pl/rtvforum/topic1790122.html

    Nie, nie przestawiałem, tamten temat przejrzałem już wcześniej ale niestety nie wiele mi to dało...
    Teraz mam obawy że jak zaprogramuję następną ATmegę tym kodem to ją zniszczę.

    Dodano:
    Teraz widzę ten schemat w tamtym wątku - o nim zapomniałem, niestety nie mam takich elementów, jak się zaopatrzę to sprawdzę.
  • Pomocny post
    #4 9022469
    LordBlick
    VIP Zasłużony dla elektroda
    Nie spotkałem się z takim przypadkiem, żeby kod uszkadzał procesor, chyba, że jest jakieś zwarcie...
    1. Sprawdź połączenia.
    2. Daj schemat, foto, to pomyślimy...
  • #5 9022542
    janek2222
    Poziom 12  
    Light-I napisał:
    Nie spotkałem się z takim przypadkiem, żeby kod uszkadzał procesor, chyba, że jest jakieś zwarcie...
    1. Sprawdź połączenia.
    2. Daj schemat, foto, to pomyślimy...

    Do tej pory wszystko było ok, wgrałem parędziesiąt razy inne programiki i nie było problemów. Zlutowałem tą płytkę:
    http://www.kamami.pl/index.php?ukey=product&productID=138481
    Niestety nie miałem jeszcze kondensatorów w nF ale podłączyłem stabilizowany zasilacz 12V, za nim 100 uF, później L7805 z radiatorem, później 100uF i 1uF. Na 7 nóżce ATmegi (VCC) jest równo 5V. Chwilowo nie mam innego procesora do sprawdzenia czy wszystko jest ok z płytką, wszystko odłączyłem od procesora. Raczej są małe szanse na jakieś zwarcie...
  • Pomocny post
    #6 9023636
    PO.
    Poziom 20  
    Obsługa lcd w przerwaniu: wow.

    Sprawdź przede wszystkim połączenia z programatorem, jakimś miernikiem. Poza tym mogłeś przestawić fusebity przypadkiem.

    PS: praktycznie nie ma niszczących kodów, nie ma w asemblerze avr instrukcji HCF :P .
    http://en.wikipedia.org/wiki/Halt_and_Catch_Fire
  • #7 9023709
    janek2222
    Poziom 12  
    PO. napisał:
    Obsługa lcd w przerwaniu: wow.

    Sprawdź przede wszystkim połączenia z programatorem, jakimś miernikiem. Poza tym mogłeś przestawić fusebity przypadkiem.

    PS: praktycznie nie ma niszczących kodów, nie ma w asemblerze avr instrukcji HCF :P .
    http://en.wikipedia.org/wiki/Halt_and_Catch_Fire

    Dzięki za uwagi. Czyli już widzę że obsługa lcd musi polecieć do tej pętli nieskończonej :)
    Połączenia na wszelki wypadek sprawdzę.
    A z tymi fusebitami to będę najpierw musiał pogadać z Google lub innymi wątkami bo mam małe o nich pojęcie.
    Mam Willema kupionego z cztery lata temu, czy on może mi pomóc, nie wiem jakie programatory programują równolegle?
    Cieszy mnie to że niby kodem nie można popsuć ATmegi, jak będzie następna to jeszcze raz z tym samym kodem zaryzykuję.

    Dodano:
    Połączenia niestety są ok.
  • #8 9046922
    janek2222
    Poziom 12  
    Okazało się że jednak stało się coś z procesorem, możliwe że namieszałem coś z fusami ale chwilowo tego nie sprawdzę. Kupiłem nowe ATmegi z symbolem "A" i rzeczywiście pobierają mniej prądu - L7805 się mniej grzeje. Zaryzykowałem i felerny program wgrałem do nowej ATmegi i to przeżyła. Program ten już trochę zmodyfikowałem ale go nie wklejam bo pewnie nie jest najlepiej napisany a co najważniejsze nie działa jak powinien - po rzeczywistych 60 sekundach w nim jest około 58 :) Tak to jest jak się zaczyna od praktyki a nie od teorii.
  • Pomocny post
    #9 9047274
    dondu
    Moderator na urlopie...
    janek2222 napisał:
    Program ten już trochę zmodyfikowałem ale go nie wklejam bo pewnie nie jest najlepiej napisany a co najważniejsze nie działa jak powinien - po rzeczywistych 60 sekundach w nim jest około 58 :) Tak to jest jak się zaczyna od praktyki a nie od teorii.

    Pewnie go nie wykalibrowałeś do danego kwarcu.
  • #10 9047335
    janek2222
    Poziom 12  
    Z tą kalibracją to chodzi o ustawienie preskalera?
  • #12 9053483
    janek2222
    Poziom 12  
    Jeżeli chodzi o dokładność zegara to problem był jak używałem wewnętrznego z ATmegi ustawionego na 1MHz. Błąd to było ok 38 taktów (OCR1A) na sekundę przy ustawionym preskalerze na 64.
    Po ustawieniu fusebitów na zewnętrzny zegar 16M problem zniknął i po kilku godzinach brak jest widocznych odchyłek.
    Zainicjowałem zegar tak (16M):
         TCCR1B  = (1 << WGM12); //CTC
         //TCCR1A  = (1 << COM1A0);                 // ??? 
         TCCR1B |= (1 << CS10) | (1 << CS12);  
         OCR1A   = 15625;                   
         TIMSK   = (1 << OCIE1A);            
         sei(); 

    
    ISR (TIMER1_COMPA_vect)
    {
    }


    Gdzieś znalazłem że jeszcze ktoś używał TCCR1A ale nie wiem po co. Ten kod jest skopiowany z innych wątków i ustawiony wg datasheeta. Myślę że jest dobrze. Ponoć CTC jest lepszym sposobem od innego ale czy tak jest to nie mam pojęcia.

    PS. Dzięki wszystkim za pomoc.
  • Pomocny post
    #13 9053521
    dondu
    Moderator na urlopie...
    Czyli ustawiłeś prawidłowo. Teraz odchyłka zależy już tylko od dokładności Twojego kwarcu.

    Jeżeli ma np. maksymalną możliwą 50ppm to oznacza, że Twój zegar może spieszyć lub spóźniać o:
    odchyłka = 50 / 16.000.000 = 0,000003125
    czyli rocznie odchyłka = 365 * 24 * 60 * 60 * 0,000003125 = 98,55 sekund

    I tutaj zostaje Ci już tylko kalibracja za pomocą programu chyba, że taka dokładność wystarczy.
  • #14 9053524
    mirekk36
    Poziom 42  
    janek2222 napisał:
    Ponoć CTC jest lepszym sposobem od innego ale czy tak jest to nie mam pojęcia.


    To proponuję ci przeczytać jakąś dobrą książkę do C dla AVR, żeby jednak mieć pojęcie, bo takie pisanie programów w postaci jakichś tam zebranych zlepków czegoś z internetu nic ci nie da na dłuższą metę. A Timery w prockach i to obojętnie jakich to jednak podstawa i warto zrozumieć ich obsługę przynajmniej właśnie taką podstawową.
  • #15 9053731
    janek2222
    Poziom 12  
    Dzięki Mirku za cenne rady związane z przeczytaniem książki, szkoda tylko że przy okazji nic merytorycznie nie wniosłeś do tego tematu a wręcz odwrotnie, wg mnie trochę go zbombardowałeś. Czy jesteś autorem książki reklamowanej w twojej stopce?
    Jeżeli już odbiegliśmy od tematu to bardzo mi się nie podobają odpowiedzi typu:
    - zadzwoń do specjalisty,
    - kup sobie książkę.
    Uważam że jak ktoś nie chce pomóc to nie powinien nic odpowiadać.
  • #16 9053742
    Konto nie istnieje
    Konto nie istnieje  
  • #17 9053765
    mirekk36
    Poziom 42  
    Napisałeś , że już wszystko ci działa - więc tylko poleciłem książkę żeby doczytać o timerach zamiast działać na jakichś skopiowanych kawałkach kodu bez zrozumienia ich do końca. Gdzie tu więc jakieś bombardowanie. To dobra porada.

    A odnośnie pierwszego pytania z samego początku to sam popatrz co pisałeś. Najpierw, że nie ruszałeś fusebitów a potem, że być może stało się to przez ustawianie fusebitów w Pony Prog'u

    Bo tak jak pisali poprzednicy - sam kod nigdy nie uszkodzi procesora. Za to PonyProg ma taką przypadłość, że jak się bierze za to osoba początkująca (też tak kiedyś miałem) to zwykle następuje pierwsze zablokowanie procesora. Dlaczego? bo PonyProg dosyć jednak enigmatycznie prezentuje fuski i dlatego milion razy lepiej ustawia się je np za pomocą Bascoma czy też programu "MkAvrCalculator", który w przypadku twojego procka działałby za FREE i miałbyś 100% bezpieczeństwa przy zmianie taktowania za pomocą zakładki "Fusy uproszczone" .... Wypróbuj go to sam zobaczysz jaka jest różnica.

    A wracając do twojego zarzutu, że porada o tym żeby coś przeczytać to "coś strasznego na forum" .... to jednak powiem ci tylko, że nie wszystko można na forum opisać w 2 słowach. Dlatego nieraz fajnie jest coś dokładniej poczytać a szczególnie o timerach i ich chociaż podstawowych trybach działania. TRYB LICZNIKA, TRYB CTC i chociaż podstawowy TRYB PWM. Masz to opisane w wielu książkach w tym tych z wydawnictwa BTC np: "Mikrokontrolery ATmega w praktyce" - to jeśli chodzi o stronę czysto sprzętową bo programowanie przedstawione jest w niej raczej w asemblerze.

    Więc na drugi raz tak się nie oburzaj, gdy ktoś poleca ci jakąś książkę i zwraca uwagę, że akurat jakiś konkretny temat warto poznać dokładniej.
  • #18 9053797
    dondu
    Moderator na urlopie...
    Janku222,
    Mirek ma rację. Zacytował fragment Twojej wypowiedzi który świadczył o tym, iż nie znasz dokładnie Timerów.

    To, że poleca Ci książkę której jest autorem to jest oczywiście autopromocja, ale zaręczam Ci jako bezstronny w tej sprawie, że naprawdę warto ją kupić.
    Sam zresztą ją polecam innym co możesz zobaczyć tutaj: https://www.elektroda.pl/rtvforum/topic224603-1170.html

    Nie zakładaj tylko złych intencji, bo pomimo własnych interesów ludzie wnoszą do tego forum wielką wartość w postaci wiedzy choć nie zawsze w postaci gotowych kodów, ale naprowadzą Cię na rozwiązanie Twojego problemu i to za darmo :) oczekując w zamian jedynie, abyś Ty pomógł innym gdy będziesz mógł.

    Co do MkAvrCalculator - także warto korzystać.
  • #19 9053852
    janek2222
    Poziom 12  
    mirekk36 napisał:
    Napisałeś , że już wszystko ci działa - więc tylko poleciłem książkę żeby doczytać o timerach zamiast działać na jakichś skopiowanych kawałkach kodu bez zrozumienia ich do końca. Gdzie tu więc jakieś bombardowanie. To dobra porada.

    Zrozumiałem to inaczej, polecenie książki było dla mnie równoznaczne z tym że w kodzie mogą być błędy i będę je mógł poprawić po jej przeczytaniu.

    mirekk36 napisał:
    A odnośnie pierwszego pytania z samego początku to sam popatrz co pisałeś. Najpierw, że nie ruszałeś fusebitów a potem, że być może stało się to przez ustawianie fusebitów w Pony Prog'u

    Tak, tu posypuję głowę popiołem, do fusów dotknąłem się po niby zablokowaniu procesora ale teraz nie będę się już o tym rozpisywał.

    mirekk36 napisał:
    PonyProg dosyć jednak enigmatycznie prezentuje fuski i dlatego milion razy lepiej ustawia się je np za pomocą Bascoma czy też programu "MkAvrCalculator", który w przypadku twojego procka działałby za FREE i miałbyś 100% bezpieczeństwa przy zmianie taktowania za pomocą zakładki "Fusy uproszczone" .... Wypróbuj go to sam zobaczysz jaka jest różnica.
    Już wypróbowałem i bardzo polecam MkAvrCalculator, w mojej wersji jest "Fuse - simple" i dla mnie jest to rewelacja przy całym zagmatwaniu dotyczącym fusów (co robi 1 a co zero).

    mirekk36 napisał:
    Masz to opisane w wielu książkach
    Naprawdę doceniam książki.

    mirekk36 napisał:
    Więc na drugi raz tak się nie oburzaj, gdy ktoś poleca ci jakąś książkę i zwraca uwagę, że akurat jakiś konkretny temat warto poznać dokładniej.
    Też mnie źle zrozumiałeś, nie oburzam się na sam fakt polecenia książki a brak pomocy, jednak to już mam nadzieję wyjaśniliśmy - nie była już potrzebna.
  • #21 9053906
    janek2222
    Poziom 12  
    albertb napisał:
    A ja uważam, że jeśli ktoś poświęcił Tobie swój czas to chciał pomóc.
    Nie zamierzam już analizować jego intencji, niejasności mam nadzieję że zostały wyjaśnione.

    dondu napisał:
    To, że poleca Ci książkę której jest autorem to jest oczywiście autopromocja, ale zaręczam Ci jako bezstronny w tej sprawie, że naprawdę warto ją kupić.
    Sam zresztą ją polecam innym co możesz zobaczyć tutaj: https://www.elektroda.pl/rtvforum/topic224603-1170.html

    Zaraz poczytam, skoro też ją polecasz to jest duża szansa że ją kupię. Często w książkach można znaleźć wiedzę do której trudno jest dokopać się w internecie.

    dondu napisał:
    naprowadzą Cię na rozwiązanie Twojego problemu i to za darmo :) oczekując w zamian jedynie, abyś Ty pomógł innym gdy będziesz mógł.
    I to moim zdaniem jest największa wartość internetu, tego forum :)

    dondu napisał:
    Co do MkAvrCalculator - także warto korzystać.
    Już się o tym przekonałem i potwierdzam, polecam.
  • #22 9057567
    PO.
    Poziom 20  
    A ja to wszystko skomentuję, że nie wiem po co używacie programatora z zewnątrz?
    AVR Studio ma obsługę programatora bezpośrednio (używam stk500) z opisem fusków i locków :) .
    Tak samo Eclipse.

    Jeśli używacie środowiska do pisania i kompilacji to czemu nie do samego końca?


    Książka, hmmm. Wszystkie tryby timerów są bardzo ładnie opisane (i rozrysowane!) w datasheecie od avr (dowolnego). Trzeba sobie zarezerwować wieczór i się po prostu przegryźć przez techniczny angielski, jeśli ktoś ma kłopoty z tym. Ale bardziej to ćwiczenie na wyobraźnię. Kawka/herbatka/papierosek/itp i jedziemy...
    Szanuję dorobek Mirka i chętnie bym przejrzał jego książkę z samej ciekawości ale programowanie to przede wszystkim umiejętność myślenia. W dalszej kolejności to znajomość sprzętu i języka - czyli oparcie się na zasobach; a tu już źródła dla każdego według wyboru jego ;) .

    PS: napisałem "prawie" nie ma niszczących kodów na avr bo oczywiście jak ktoś się specjalnie postara to można, ale to wymaga współpracującego hardware'u. Chyba że chcemy zniszczyć sam wsad (jeśli ktoś to traktuje jako zniszczenie działającego całego urządzenia). Tu nie był ten przypadek :D .


    PS2: mnie się kiedyś zdarzył "samoistnie" zablokowany procek bez ruszania ustawień, wtórnie doszedłem że były zimne luty/pojemności na połączeniu z programatorem, bo inaczej nie umiałem tego wytłumaczyć (a błędy połączenia innego typu też się w tej płytce zdarzały).

    PS3: Janku, ten kod masz naprawdę stary, teraz nie używa się SIGNAL tylko ISR do pisania przerwań a nazwy wektorów są w datasheecie.
  • #23 10257480
    janek2222
    Poziom 12  
    Wielkie dzięki wszystkim za pomoc :) Szkoda że ostatnio nie miałem czasu na elektronikę ale za to sporo osób korzysta z programu, który piszę w wolnych chwilach, nie zamierzam go reklamować tak że o nim więcej nie zamierzam pisać :) Do elektroniki zamierzam jeszcze wrócić, może nawet już niedługo. Ale do rzeczy. Dzięki wam jestem przekonany że winne były źle ustawione fusebity a nie kod programu i tym kończę ten wątek.
REKLAMA