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 - popsuł się? Komunikat: READLB entry not found.

pend0lino 22 Mar 2006 23:02 9494 36
Najlepsze odpowiedzi

Jak uratować ATmegę8, która po zmianie fuse bitów przestała być widziana przez Bascom i pokazuje komunikat „READLB entry not found”?

Najprawdopodobniej nie uszkodziłeś ATmegi8, tylko ustawiłeś fuse bity na zewnętrzny zegar, więc układ nie startuje i programator ISP nie może się z nim dogadać [#2446646][#2446890] Podaj na XTAL1/X1 zewnętrzny sygnał zegarowy — z generatora TTL, prostego generatora RC/multivibratora albo z drugiego działającego mikrokontrolera z kwarcem; oba układy muszą być zasilane, a wystarczy połączenie wyjścia zegara z wejściem X1/Xtal1 „nieboszczyka” [#2446890][#2450470][#2451439][#2451520][#2451584] Gdy odzyskasz łączność, odczytaj sygnaturę i ustaw fuse bity z powrotem na właściwe [#2451537] Chip erase nie kasuje fuse bitów [#2448628] Jeśli przez pomyłkę wyłączyłeś SPIEN albo RESET, wtedy potrzebny będzie programator równoległy [#2446265][#3349288]
Wygenerowane przez model językowy.
REKLAMA
  • #1 2446211
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Czesc
    W czasie programowania w Bascomie zmienilem cos w opcjach przez przypadek i nagle program przestal widziec mikrokontroler.
    Przy wchodzeniu w oknie programowania do zakładki Lock and Fuse Bits pojawia się komunikat "READLB entry not found".
    Co się stało i jak mogę uratować ten mikrokontroler?

    Dziekuje za pomoc.
  • REKLAMA
  • Pomocny post
    #2 2446263
    submariner
    Poziom 32  
    Posty: 2319
    Pomógł: 51
    Ocena: 268
    fuse bits to jedyne na ktore musisz uwazac przy programatorze szeregowym jak nie masz rownoleglego a pewno nie to wlwasciwie ten procesor powinienes poswiecic na straty jest za tani aby oplacalo sie kombinowac z programatorem rownoleglym ktory moze odblokowac ten uklad , kilka tak pewno zepsujesz wszystkim sie to zdarza :)
  • Pomocny post
    #3 2446265
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    Pytanie czy w opcjach, czy w fusebitach. Jeśli fusebity to najprawdopodobniej zablokowałeś programowanie szeregowe. Rozwiązaniem tego problemu będzie włożenie tego mikrokontrolera do programatora równoległego.
    No chyba, że uwaliłeś mikrokontroler... A na to nie ma rady.

    --
    pozdrawiam
  • #4 2446295
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Mam programator STK200/300, nie wiem czy to szeregowy czy rownolegly.
    Da sie cos zrobic?
  • Pomocny post
    #5 2446378
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam ponownie

    Programator, który posiadasz to programator szeregowy podłączany do portu LPT, co prawda równoległego jednak programowanie mikrokontrolera odbywa się w sposób szeregowy. Jakiś czas temu na tym forum były zamieszczone linki do programatorów równoległych. Jeśli masz ochotę poszperaj.
  • #6 2446422
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Z tego co wyczytalem w internecie zmienilem Fuse Bits na zewnetrzny generator a nie oscylator i dlatego sie posypalo. Nie znalazlem jednak rozwiazania tego problemu.
    Czy ktos zrobil cos takiego i udalo mu sie wyjsc z dobrym mikrokontrolerem? :)
  • Pomocny post
    #7 2446646
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 159
    Popróbuj podłączyć zewnętrzny oscylator ok. 1MHz do pinu Xtal1, najlepiej przez nieduży kondensator np. 100pF i może złapiesz komunikację z procesorem, wtedy zmienisz fuses na właściwe.
    Powodzenia N.
  • #8 2446772
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Na stronie 'domowej' Bascoma (http://www.mcselec.com/) znalazłem informacje jak to rozwiązać.
    Cytat:
    When the fusebits are set to an external oscillator (because you select wrong fusebits or because of a problem during programming) , the microprocessor expects an external clock signal.
    Since this is not applied, the micro can not be programmed anymore.
    You can reanimate the chip with the following methods :
    - apply a clock signal from a clock generator (TTL)
    - apply a clock signal from a second microprocessor circuit. Connect X2 clock output to X1 input of the dead chip.
    Both circuits need to be grounded too.
    The second method is a simple way to replace an expensive clock generator.

    Chcialbym zrobic tak jak pisze w drugim punkcie czyli wykorzystac drugi mikrokontroler. Niestety moj poziom wiedzy nie wystarczy zeby na podstawie tej informacji to zrobic.

    Czy mozecie mi odpowiedziec na kilka pytan:

    1. Poza polaczeniem samych mikrokontrolerow ze soba (wyjscie X2 dobrego z wejsciem X1 zepsutego) co jeszcze musze podlaczyc? Czy VCC i GND do obydwu musze pociągnąć czy tylko jeden zasilić?

    2. Domyslam sie ze musze napisac program i wprowadzic go do dobrego mikrokontrolera. Pewnie wystarczy kilka linijek. Czy ktos moglby mi taki kod napisac bo naprawde nie wiem jak ona ma dzialac?

    3. Czy przy robieniu tego wszystkiego dobry mikrokontroler ma byc ustawiony tak jak jest standardowo na wewnetrzny oscylator czy trzeba go na cos innego przelaczyc? Jesli tak to na co dokladnie bo teraz juz sie troche boje zmiany Fusebitow :|

    Dziekuje.
  • Pomocny post
    #9 2446890
    submariner
    Poziom 32  
    Posty: 2319
    Pomógł: 51
    Ocena: 268
    poprostu podlacz swoj zablokowany procesor do programatora tak jak dobry tylko dodatkowo podaj sygnal zewnetrznego zegara , sygnal ten mozesz wziazc albo z generatora ttl albo z drugiego dzialajacego procesora ,a to znaczy ze oba musza byc podlaczone do zasilania , jesli za duzo nie namieszales to powinien wystartowac , najczesciej blokuje sie poprzez ustawienie fuse na zegar wewnetrzny lub resetem- jak niewlasciwie wykorzystasz ten pin portu .
    ostroznie z utawieniami na wewnetrzny oscylato jesli nie musisz to nie ustawiaj bo wtedy najlatwiej zablokowac procesor jak z jakich powodow nie wystartuje to nie dogadasz sie juz z procesorem.
  • REKLAMA
  • Pomocny post
    #10 2446929
    uC
    Poziom 14  
    Posty: 39
    Pomógł: 13
    Ocena: 1
    Z tego co widze, to ze mozesz wejsc w zakladke fuse/lock i odczytuje Ci, ze to ATmega8, to programowanie szeregowe dziala. Po prostu zblokowales fuse.
    Podlacz swoj programator do procka i zrob chip erase. Fuse'y automatycznie sie kasuja.
  • REKLAMA
  • Pomocny post
    #11 2448628
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 159
    Chip Erase kasuje tylko pamieć flash i eeprom a nie fuses które można tylko odczytać lub wpisać nowe.
    Pozdr. N.
  • Pomocny post
    #12 2448778
    Robin Robinowski
    Poziom 13  
    Posty: 59
    Pomógł: 2
    Ocena: 3
    Najłatwiej chyba kupic nowego procka :-) Z Fuse Bits tez miałem swoje przygody jak uruchamiałem AVR2313. Okazało się ze w programatorze PonyProg bity te posiadają odwrotną logike niż w instrukcji producenta. No i zanim doszedłem do tego to ze 3 procesory zblokowałem :-) To tak dla informacji ;-)
    Erase nie pomoże. Pomoże natomiast podłączenie zewnętrznego sygnału zegarowego.
    Pozdrawiam.
  • #13 2450160
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Czy połączenie takie jak na schemacie z załącznika jest dobre? Z tego co wcześniej pisalem wynika, ze powinienem podlaczyc X2 dobrego mikrokontrolera do X1 zablokowanego. W zwiazku z tym, czy to drugie polaczenie (X1 dobrego -> X2 zablokowanego) jest potrzebne?
    Drugie pytanie - czy dobry mikrokontroler ma dzialac w jakis okreslony sposob czy to nie ma zanczenia? I czy moze pracowac na wewnetrznym oscylatorze tak jak ma to domyslnie ustawione?


    uC napisał:
    Z tego co widze, to ze mozesz wejsc w zakladke fuse/lock i odczytuje Ci, ze to ATmega8, to programowanie szeregowe dziala. Po prostu zblokowales fuse.
    Podlacz swoj programator do procka i zrob chip erase. Fuse'y automatycznie sie kasuja.

    Nie mogę wejść w tą zakładke. Przy próbie zrobienia tego pojawia sie komunikat "READLB entry not found".
    Załączniki:
    • ATmega8 - popsuł się? Komunikat: READLB entry not found. p1.png (51.64 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #14 2450186
    submariner
    Poziom 32  
    Posty: 2319
    Pomógł: 51
    Ocena: 268
    daj sobie spokuj z wewnetrznym oscylatorem z nim sa zawsze problemy odpal procesor na kwarcu ale jak wczesniej opisano podlacz wyjscie z wejsciem zegara tak jak narysowales to poprostu wcisnij w podstawke 2 scalaki jeden na drugi ale to nic nie da.
  • #15 2450402
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Na wielu stronach znalazłem informacje, że podłączenie drugiego mikrokontrolera pomaga. Niestety nie wiem jak zaprogramować ten dobry, żeby generował ten "sygnał zegarowy" (jesli tak to sie nazywa).
    Czy ktos mógłby mi napisać te kilka linijek bo pewnie wiecej to nie zajmuje?
    Bede naprawde wdzieczny!
  • Pomocny post
    #16 2450470
    Andy74
    Poziom 25  
    Posty: 525
    Pomógł: 103
    Ocena: 24
    Witam!
    Jeśli dobrze zrozumiałem ideę tego rozwiązania, to dobry procesor NIC nie musi robić. On ma tylko generować sygnał zegarowy dla drugiego procka, czyli wykorzystujesz jego sprzętowy generator.
    Z tego co wyczytałem w datasheecie, przy użyciu wewnętrznego oscylatora, jego sygnał zegarowy nie jest dostępny na wyjściu X2 (mogę się mylić :roll:), więc układ wg. Twojego schematu nie zadziała.
    Żeby nie kombinować z FUSE w dobrym procku proponuję w tej roli użyć np. AT90S2313 z kwarcem np. 1MHz, wrzucić mu prosty programik w rodzaju DO:LOOP, połączyć jego X2 z X1 zablokowanego. Teraz podłączasz programator do nieboszczyka, włączasz zasilanie (oczywiście zasilasz OBYDWA procki) i już powinieneś mieć komunikację.

    Połączenie X1=>X2 nie jest potrzebne (myślę że wręcz niewskazane!). Łączysz poprostu wyjście generatora jednego procesora z weściem taktującym drugiego (X2=>X1)

    Równie dobrze możesz użyć scalonego generatora łącząc jego wyjście z wejściem X1 nieboszczyka (śmierć kliniczna mam nadzieję :D)

    Powodzenia!
    Andy

    pees Kiedyś używałem takiego połączenia żeby napędzić dwa procki jednym kwarcem i działało.
  • #17 2451075
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Andy74 napisał:
    Żeby nie kombinować z FUSE w dobrym procku proponuję w tej roli użyć np. AT90S2313 z kwarcem np. 1MHz, wrzucić mu prosty programik w rodzaju DO:LOOP, połączyć jego X2 z X1 zablokowanego. Teraz podłączasz programator do nieboszczyka, włączasz zasilanie (oczywiście zasilasz OBYDWA procki) i już powinieneś mieć komunikację.

    Jeśli załóżmy wykorzystam AT90S2313 to mam do niego podłączyć zewnętrzny kwarc o częstotliwości 1MHz, tak? Czyli znowu muszę zmieniać fuse żeby działał na zewnętrznym?
    Jeśli chodzi o sam program który wgram do procesora - dowolny program z pętlą DO:LOOP generuje na wyjściu X2 taki sygnał impulsowy?
  • Pomocny post
    #18 2451439
    Andy74
    Poziom 25  
    Posty: 525
    Pomógł: 103
    Ocena: 24
    Zaproponowałem AT90S2313 bo on nie ma oscylatora wewnętrznego i domyślnie działa na kwarcu (nie dotyczy ATTINY2313!), więc odpada kombinowanie z FUSE. Podłączasz kwarc wg. aplikacji i to wszystko. Powinien generować nawet bez tej pętli DO:LOOP, ale nie przyszło mi nigdy do głowy żeby to sprawdzić, więc 100% pewności nie mam.

    Pozdrawiam
  • Pomocny post
    #19 2451520
    ZbeeGin
    Poziom 39  
    Posty: 4312
    Pomógł: 602
    Ocena: 449
    Radziłbym dodać bufor nieodwracający pomiędzy XTAL2 dobrego procka a XTAL1 niedziałającego procka - jak zaleca firma Atmel (patrz rysunek).

    Druga sprawa to fuse-bity mogłeś przestawić także na zewnętrzny oscylator RC! Radziłbym jednak zajrzeć do dokumentacji o możliwych opcjach pracy oscylatora: http://www.atmel.com/dyn/resources/prod_documents/2486S.pdf
    Załączniki:
    • ATmega8 - popsuł się? Komunikat: READLB entry not found. exitclock.jpg (9.56 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • Pomocny post
    #20 2451537
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 159
    Najprościej weź 2 tranzystory i zrób zwykły multiwibrator na 5V zasilania i dowolna częstotliwosć np. 100kHz i z kolektora puść przez 100pF na xtal1 megi8. xtal2 nie podłączaj. Zrób odczyt sygnatury i jak ją odczytasz to odczytasz też fuses, i po zmiane wpiszesz poprawne ustawienia.
    Pozdr. N.
  • Pomocny post
    #21 2451550
    ZbeeGin
    Poziom 39  
    Posty: 4312
    Pomógł: 602
    Ocena: 449
    :arrow: Sorry Nawigator, ale o ile pamiętam to minimalna częstotliwość potrzebna do przeprowadzenia programowania to 1MHz.
    Choć nowe ATMegi gwarantują poprawność programowania przy założeniu, że częstotliwość jest wyższa niż 100kHz. Jest opisana - choć nie zbyt jasno, w postaci wzoru - ta zależność.
  • #22 2451584
    pend0lino
    Poziom 11  
    Posty: 66
    Ocena: 1
    Podlaczylem wedlug dokumentacji producenta generator RC i udalo sie uratowac dwa z trzech. Ten trzeci nie wiem czego chce bo w ogole sie nie odzywa :/
  • #23 2458776
    ZbeeGin
    Poziom 39  
    Posty: 4312
    Pomógł: 602
    Ocena: 449
    Najprawdopodobniej RESET zamieniłeś na linię portu lub cudem wyłączyłeś ISP przez ustawienie SPIEN (szeregowo nie da się go wyłączyć). Spróbuj jeszcze kwarcu/ceramika lub zewnętrznego sygnału zegarowego.
  • #24 2461790
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 159
    ZbeeGin, masz pewno rację z poprawnym programowaniem, natomiast do odblokowania używałem 100kHz z dobrym skutkiem.
    Chociaż skoro można programować po spi układy z kwarcem np. 32kHz to widać zewn. zegar nie ma znaczenia.
    Pozdr. N.
  • #25 3321749
    danio_ac
    Poziom 11  
    Posty: 45
    A u mnie z atmeg zczytuje wszystko: fuse, signature, lock, calibration
    Ale jak próbuje coś zmienić w ustawieniach to mi wywala komunikat że nie może

    O co biega z tym??
  • #26 3321813
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 123
    A co to jest "komunikat że nie może"?
  • #27 3349236
    danio_ac
    Poziom 11  
    Posty: 45
    To znaczy, że nie można nic do niego grać bo wywala komunikaty o błędach.

    Doszedłem już tak daleko, że wiem iż wyłączony jest bit SPIEN.


    Jak go włączyć??
  • #28 3349288
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 123
    Jedynie programatorem równoległym możesz przestawić ten fus w drugą stronę.
  • #29 3350827
    danio_ac
    Poziom 11  
    Posty: 45
    OK.
    Zastanawia mnie jedna rzecz, a mianowicie czy da się tego fusa programatorem szeregowym przestawić??

    Z tego co wiem to nie, ale...


    może się mylę
  • #30 3350899
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    ... nie mylisz się, zwykłym STK200 i podobnym programatorem nie zmienisz fusa SPIEN. Ale skoro masz taki programator to jak go wogóle zablokowałeś ? ;) bo normalnie w trybie programowania SPI jest on niedostępny np w Pony i innych programach ;)

Podsumowanie tematu

✨ Podczas programowania mikrokontrolera ATmega8 w Bascomie przypadkowo zmieniono fuse bity na ustawienia zewnętrznego generatora zamiast oscylatora, co spowodowało utratę komunikacji i pojawienie się błędu "READLB entry not found". Problem wynika z zablokowania programowania szeregowego, najczęściej przez nieprawidłowe ustawienie fuse bitów, zwłaszcza CKSEL i SUT. Standardowy programator szeregowy (np. STK200/300) nie pozwala na odblokowanie mikrokontrolera, konieczne jest użycie programatora równoległego lub podanie zewnętrznego sygnału zegarowego na pin XTAL1. Rozwiązaniem jest podłączenie zewnętrznego oscylatora (np. kwarc 1 MHz lub generator TTL) do XTAL1 zablokowanego układu, co umożliwia komunikację i zmianę fuse bitów na poprawne. Alternatywnie można wykorzystać drugi mikrokontroler (np. AT90S2313) z kwarcem 1 MHz, który generuje sygnał zegarowy na wyjściu XTAL2, podłączony do XTAL1 zablokowanego układu. Wskazane jest zasilanie obu mikrokontrolerów oraz unikanie ustawiania wewnętrznego oscylatora w dobrym mikrokontrolerze, aby nie utrudniać odblokowania. Chip erase nie kasuje fuse bitów, a bit SPIEN (odpowiedzialny za programowanie ISP) nie może być zmieniony programatorem szeregowym, wymaga programatora równoległego. W praktyce najprościej jest podłączyć zewnętrzny sygnał zegarowy lub użyć programatora równoległego, a w razie poważnego zablokowania rozważyć wymianę mikrokontrolera. Dodatkowo zaleca się stosowanie bufora nieodwracającego między XTAL2 a XTAL1 oraz zapoznanie się z dokumentacją fuse bitów i oscylatorów Atmel.
Wygenerowane przez model językowy.
REKLAMA