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 działa wolno – ustawienia fusów, zegar wewnętrzny 1MHz zamiast kwarcu 8MHz

JmL(TM) 20 Lut 2008 08:09 2443 21
REKLAMA
  • #1 4825260
    JmL(TM)
    Poziom 24  
    Posty: 804
    Pomógł: 44
    Ocena: 12
    Dopiero dzis pierwszy raz zaczalem programowac mikrokontrolery wiec jakby cos to prosze o wyrozumialosc ale...

    Kupilem ksiazke "Programowanie mikrokontrolerow AVR w jezyku BASCOM". Zrobilem kilka przykladow z ksiazki ale uklady dzialaja strasznie wolno! Np podczas gdy w kodzie jest "Waitms 500" moj uklad wykonuje to w jakies 2s! Domyslam sie ze uklad pracuje na wewnetrznym zegarze 1MHz a w moim ukladzie jest kwarc 8MHz ale jak poprzestawialem fusy to juz 2 proce uwalilem :cry: Dodam ze do ukladu testowego po prostu wzialem nowego procka i zwyczajnie wgralem program. Czy to moze byc wina zlego ustawienia fusow?
  • REKLAMA
  • Pomocny post
    #2 4825490
    Caladan
    Poziom 19  
    Posty: 242
    Pomógł: 33
    Ocena: 3
    To wręcz pewne, że masz złe ustawienie. U mnie ustawienie by używał kwarcu to lfuse = 0xEE.
    Być może masz gdzieś ustawioną zmienną jakąś, która definiuje częstotliwość taktowania. Skąd funkcja opóźniająca ma wiedzieć, czym jest proc taktowany i jak szybko? Poszukaj zmiennej F_CPU albo F_OSC i ustaw właściwą wartość (takie zmienne są przynajmniej w C).
  • #3 4825774
    Kabuto15
    Poziom 19  
    Posty: 336
    Pomógł: 30
    Ocena: 5
    Opóźnienie "Waitms 500" powinno działać dla każdego rodzaju kwarcu o ile jego częstotliwość została zdefiniowany przez dyrektywe
    $crystal = 1000000
  • REKLAMA
  • #4 4825891
    rybol
    Poziom 21  
    Posty: 529
    Pomógł: 19
    Ocena: 4
    a czy max. wartosc to nie waitms 250?
  • #5 4826196
    Kabuto15
    Poziom 19  
    Posty: 336
    Pomógł: 30
    Ocena: 5
    rybol ma racje, oto fragment intrukcji do Bascoma:

    WAITMS
    Action
    Suspends program execution for a given time in mS.
    Syntax
    WAITMS mS
    Remarks
    ms The number of milliseconds to wait. (1-255)
  • #6 4826573
    JmL(TM)
    Poziom 24  
    Posty: 804
    Pomógł: 44
    Ocena: 12
    Caladan napisał:
    To wręcz pewne, że masz złe ustawienie. U mnie ustawienie by używał kwarcu to lfuse = 0xEE.
    Być może masz gdzieś ustawioną zmienną jakąś, która definiuje częstotliwość taktowania. Skąd funkcja opóźniająca ma wiedzieć, czym jest proc taktowany i jak szybko? Poszukaj zmiennej F_CPU albo F_OSC i ustaw właściwą wartość (takie zmienne są przynajmniej w C).


    Domyslnie hfuse na 0xE1 [B11100001] lfuse mam na 0xD9 [B11011001]
    czy jestes pewien ze na 0xEE [B11101110] nie zablokuje proca ponownie?

    Zostala mi ostatnia sztuka wiec wole sie 2x zapytac przed ostatnia zablokowana sztuka :D

    Pozdrawiam!

    Dodano po 5 [minuty]:

    Kabuto15 napisał:
    rybol ma racje, oto fragment intrukcji do Bascoma:

    WAITMS
    Action
    Suspends program execution for a given time in mS.
    Syntax
    WAITMS mS
    Remarks
    ms The number of milliseconds to wait. (1-255)


    Ja uzywam BASOM AVR ver.1.11.9.0 i u mnie w helpie wyczytac mozna:

    WAITMS mS - The number of milliseconds to wait. (1-65535)

    Wynika z tego jasno ze nie 255 jest wartoscia max :D
    A poza tym to przyklad z ksiazki i chyba przed wprowadzeniem do druku upewnili sie ze listingi nie zawieraja bledow...
  • REKLAMA
  • #7 4826637
    Caladan
    Poziom 19  
    Posty: 242
    Pomógł: 33
    Ocena: 3
    Takiej wartości używałem. Ale sprawdź sam wg datasheeta. To ustawienie powinno dać użycie XTALa z częstotliwością pracy o ile dobrze pamiętam od 3 do 8MHz.
  • #8 4826980
    JmL(TM)
    Poziom 24  
    Posty: 804
    Pomógł: 44
    Ocena: 12
    Caladan napisał:
    Takiej wartości używałem. Ale sprawdź sam wg datasheeta. To ustawienie powinno dać użycie XTALa z częstotliwością pracy o ile dobrze pamiętam od 3 do 8MHz.


    Zmienilem ustawienie na 0xEE i kolejny proc zablokowany!

    Juz sie zniechecilem do tego wszystkiego!
    Jak na pierwszy razto wg mnie samo pisanie programow pod te klocki jest banalne a takie problemy ze zmiana ustawien oscylatora to dla mnie nie idzie w parze! Moze ATMEL zrobil to specjalnie zeby najpierw zmarnowac tysiac kosci i dac im zarobic zanim zacznie cokolwiek dzialac jak powinno?

    Czy jest jakies sposob zeby zmienic te wartosci na prawidlowe?
    Przeszukalem elektrode ale nie znalazlem jednoznacznej i jasnej odp [ moze nie potrafie szukac :D ].

    Wiec kupie ostatnie 2 sztuki i pozniej juz sie poddaje jesli tego nie ustawie!
  • #9 4827114
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 574
    Użyj programatora równoległego i po kłopocie tam możesz dowolnie zmieniać fusebity ...
  • #10 4827118
    JmL(TM)
    Poziom 24  
    Posty: 804
    Pomógł: 44
    Ocena: 12
    kamyczek napisał:
    Użyj programatora równoległego i po kłopocie tam możesz dowolnie zmieniać fusebity ...


    A mialbys moze jakis schemat czy lepiej kupic gotowy?
  • #11 4827934
    rybol
    Poziom 21  
    Posty: 529
    Pomógł: 19
    Ocena: 4
    [quote="JmL(TM)"]
    Caladan napisał:


    Ja uzywam BASOM AVR ver.1.11.9.0 i u mnie w helpie wyczytac mozna:

    WAITMS mS - The number of milliseconds to wait. (1-65535)

    Wynika z tego jasno ze nie 255 jest wartoscia max :D
    A poza tym to przyklad z ksiazki i chyba przed wprowadzeniem do druku upewnili sie ze listingi nie zawieraja bledow...


    ja robilem osatnio odczyt temp. i uzywałem wlasnie opoznienia i dzialalo tylko do wartosci ktora podalem;) Dodam ze uzywalem 1.11.8.1
  • #12 4828028
    JmL(TM)
    Poziom 24  
    Posty: 804
    Pomógł: 44
    Ocena: 12
    Co ciekawe...

    Fabrycznie nowa ATMEGE8 zaprogramowalem z domyslnym wew. zegarem 1MHz i gdy w programie zmienilem:
    $crystal = 8000000 na 1000000 uklad zaczal o niebo szybciej pracowac :D

    co w dalszym ciagu nie zmienia faktu ze nie potrafie zmienic LFUSE na zewnetrzny oscylator 8MHz bo za kazdym podejsciem proc sie blokuje.

    Wiem ze temat byl poruszany ale i tak to u mnie nie dziala i nie bardzo wiem co robie zle...
  • #13 4828217
    gregoorr
    Poziom 18  
    Posty: 232
    Pomógł: 19
    Ocena: 34
    JmL(TM) napisał:
    Co ciekawe...

    Fabrycznie nowa ATMEGE8 zaprogramowalem z domyslnym wew. zegarem 1MHz i gdy w programie zmienilem:
    $crystal = 8000000 na 1000000 uklad zaczal o niebo szybciej pracowac :D

    co w dalszym ciagu nie zmienia faktu ze nie potrafie zmienic LFUSE na zewnetrzny oscylator 8MHz bo za kazdym podejsciem proc sie blokuje.

    Wiem ze temat byl poruszany ale i tak to u mnie nie dziala i nie bardzo wiem co robie zle...


    Tak się zastanawiam skąd biorą się te problemy z FUSE.
    Przecież można zrobić tak:
    ATMEGA8 działa wolno – ustawienia fusów, zegar wewnętrzny 1MHz zamiast kwarcu 8MHz
    Tu przecież wszystko widać i każdy chyba wie co to jest IN RC OSC 8Mhz , EXT RC OSC i EXT CRYSTAL.
  • Pomocny post
    #14 4828364
    teedd
    Poziom 19  
    Posty: 219
    Pomógł: 24
    Ocena: 2
    Albo tak jak poniżej.
    Pozdrowienia - teedd
    Załączniki:
    • ATMEGA8 działa wolno – ustawienia fusów, zegar wewnętrzny 1MHz zamiast kwarcu 8MHz programator.JPG (88.05 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #15 4828381
    KiciuR8
    Poziom 11  
    Posty: 49
    Pomógł: 2
    Ocena: 1
    Ja miałem taki sam problem, a wystarczyło tylko zrobić tak: klawisz F4 wybierasz zakładkę Lock and Fuse Bits i w fusbicie Fusebit A987 ustawiasz 0100:Internal RC oscillator 8 MHz i tyle.
  • #17 4828484
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Może problem jest z kwarcem a nie z konfiguracją mikrokontrolera. Sprawdź połączenia, podmień kwarc.
  • #18 4828578
    teedd
    Poziom 19  
    Posty: 219
    Pomógł: 24
    Ocena: 2
    JmL(TM) napisał:
    TEEDD no wlasnie tak ustawilem i procek sie zablokowal!

    A używałeś tego programu? No i głupie pytanie - masz podłączony kwarc?
    teedd
  • #19 4828592
    maromarol
    Poziom 14  
    Posty: 116
    Pomógł: 1
    Ocena: 23
    Witam, a te "uwalone"fusebitami atmegi można łatwo naprawić , jak bawiłem sie z Bascomem źle ustawiłem fusebity a że to była 8515 i pare lat temu kosztował ponad 20zł było mi szkoda i żeby programator mógł widzieć uklad to on musi mieć podawany sygnał zegarowy albo kożystać z wlasnego, jak fusebity od zegara sa źle przestawione i procek nie chce ruszyć to podłanczylem zewnętrzny zegar na jedną z nóżek ukladu(jak podłaczyć zewnętrzny zegar napisane jest w datasheecie ukladu) ja wtedy wykorzystalem sygnal z at90s2313(bo byl w zasięgu ręki) kruciutkim przewodem podlączyłem do 8515 i programator już widział uklad i mogłem poprzestawiać fusebity jak należy, wlutowalem spowrotem kwarc i gotowe. Swoja droga przez pomyłkę raz zablokowałem w 90s2313 programowanie pamieci a to można odblokować tylko równoległym programatorem, oczywiście go nie miałem i znowu na pomoc przyszedł inny avr bo komende erase chip latwo wykonac bez równoległego programatora a komenda ta kasuje wszystko razem z blokadami, polutowalem wiec jego końcówki do plytki z drugim avr-em, napisalem kruciutki programik(dokladnie co i jak już nie pamietam, dawno tego nie robilem) ktory czyści pamięć i procek odratowany.
  • #20 4830222
    JmL(TM)
    Poziom 24  
    Posty: 804
    Pomógł: 44
    Ocena: 12
    teedd napisał:
    JmL(TM) napisał:
    TEEDD no wlasnie tak ustawilem i procek sie zablokowal!

    A używałeś tego programu? No i głupie pytanie - masz podłączony kwarc?
    teedd


    Program wyglada mi na AVR studio [przynajmniej to przypomina]
    A wlasnie... programujac procesor tkwi on tylko w samej podstawce podpietej przez SPI do programatora [taka otrzymalem z programatorem] wiec widze juz moj blad, prawda? Zmieniajac ustawienia na zewnetrzny kwarc procesor musi byc do niego podlaczony, tak? Czyli w takim razie jesli dolacze programator do ukladu z kwarcem gdzie procesor ma pracowac to czy te zablokowane proce "rusza"? Czy to tylko zadziala dla procesorow ktore jeszcze sa ustawione na wewnetrzny zegar 1MHz?
  • Pomocny post
    #21 4830276
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Jeśli ustawiasz zewnętrzny kwarc to musi on być podłączony przy programowaniu. O ile nie namieszałeś czegoś z FUSAMI od programowania szeregowego, to wszystko powinno być ok.
  • #22 4835825
    JmL(TM)
    Poziom 24  
    Posty: 804
    Pomógł: 44
    Ocena: 12
    Dolutowalem zlacze ISP do mojego ukladu z kwarcem, podlaczylem programator i... wszystko smiga jak nalezy! Moj BLAD! Ale jak pisalem na poczatku - pierwszy raz wzialem te uklady do reki i myslalem ze podczas programowania kwarc nie musi byc podlaczony a dopiero po zakonczeniu programowania w ukladzie w ktorym procesor bedzie pracowal...

    Dziekuje wszystkim za POMOC!

    Temat zamykam!

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczył wolnej pracy mikrokontrolera ATMEGA8, który zamiast pracować z zewnętrznym kwarcem 8 MHz, działał na wewnętrznym oscylatorze 1 MHz, co powodowało wydłużenie opóźnień w programie (np. "Waitms 500" trwało około 2 sekund). Przyczyną były nieprawidłowe ustawienia fusebitów (lfuse, hfuse), które decydują o źródle taktowania. Domyślne fusebity ustawiały mikrokontroler na wewnętrzny oscylator RC 1 MHz. Próby zmiany fusebitów na konfigurację zewnętrznego kwarcu (np. lfuse = 0xEE) skutkowały zablokowaniem procesora, co wynikało z braku podłączonego kwarcu podczas programowania. Rozwiązaniem było podłączenie kwarcu do mikrokontrolera podczas zmiany fusebitów oraz użycie programatora ISP (np. STK500 V2) z odpowiednim złączem ISP. Wskazano także na konieczność ustawienia w kodzie dyrektywy $crystal z właściwą częstotliwością taktowania (np. $crystal = 8000000) oraz ewentualne zdefiniowanie zmiennej F_CPU lub F_OSC, aby funkcje opóźniające działały poprawnie. W przypadku zablokowanych fusebitów możliwe jest ich odblokowanie poprzez podanie zewnętrznego sygnału zegarowego do mikrokontrolera i ponowne zaprogramowanie fusebitów. Ostatecznie prawidłowe podłączenie kwarcu i ustawienie fusebitów pozwoliło na poprawne działanie mikrokontrolera z zewnętrznym oscylatorem 8 MHz.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA