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 - migająca dioda co 4s zamiast 1s, konfiguracja Bascom

PietrekDer 10 Kwi 2005 18:49 1971 13
REKLAMA
  • #1 1393267
    PietrekDer
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 5
    Witam. Projektuje pewien układ i przerzuciłem się z 90S2313 na ATmega8. Wcześniej używałem 90S2313 i tego programatora z EdW (kit 3500).
    Tyle żeby naswietlić sytuacje, a problem polega na tym, że napisałem sobie prosty programik w bascomie aby przetestować, czy ten mega8 się zaprogramował i jest wszystko ok. Program testowy:

    do : wait 1 : toggle portb.7 : loop

    wczesniejsze konfigi są (wszystkie jako wyjścia, stan pocz. 1)
    I dioda miga, ale nie co 1s, ale co 4s :| ?? Wiem że polecenia wait nie są dokładne, ale ... Może gdy się używa ATmega8 trzeba wprowadzić dodatkowe polecenia konfiguracyjne? Proszę o pomoc. Z góry dziękuje.
  • REKLAMA
  • #2 1393285
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Jaką masz ustawioną (domyślnie) częstotliwość kwarcu?

    Nie znam BASCOMa, ale w przypadku ATMega musisz ustalić źródło sygnału zegarowego (i czasem też jego częstotliwość). Ustawiony fabrycznie pracuje na wewnętrznym generatorze RC 1 MHz. Zmieniając te ustawienia (fusebits) trzeba uważać, żeby sobie nie przełączyć źródła programowania i zegara, bo mogą być problemy z powrotem.
  • REKLAMA
  • Pomocny post
    #3 1393313
    Dexter77
    Poziom 28  
    Posty: 889
    Pomógł: 134
    Ocena: 19
    Na poczatku daj dyrektywe $crystal=1000000.
    ATmega fabrycznie pracuje z wewnetrzny zegarem 1MHz mimo podpietego kwarcu. Trzeba przestawic fusebity zeby zmusic procek do pracy z kwarcem.
    Pozdro
    Dexter
  • REKLAMA
  • #4 1393829
    PietrekDer
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 5
    No tak, jak dam dyrektywe $crystal = 1000000 to działa. W sumie to może nawet lepiej że domyślnie jest z wewnętrznego oscylatora, bo teraz mam dwa dodatkowe porty :), a projekt który mam na mysli będzie ich potrzebował :) Dzięki :D
  • REKLAMA
  • #5 1393931
    MODI
    Poziom 17  
    Posty: 262
    Pomógł: 21
    Ocena: 16
    Cytat:
    o tak, jak dam dyrektywe $crystal = 1000000 to działa. W sumie to może nawet lepiej że domyślnie jest z wewnętrznego oscylatora, bo teraz mam dwa dodatkowe porty , a projekt który mam na mysli będzie ich potrzebował Dzięki

    niewiem jak to jest z tym atmegą ale zazwyczaj niemożna używać portów pod którymi jest kwarc. Poprostu nie są dostępne.
  • #6 1393953
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    MODI napisał:

    niewiem jak to jest z tym atmegą ale zazwyczaj niemożna używać portów pod którymi jest kwarc. po prostu nie są dostępne.


    Poczytaj dokumentację www.atmel.com W ATMega masz możliwość użycia wyprowadzeń używanych również do podłączenia kwarcu jako normalnych portów, pod warunkiem wykorzystania innego źródła zegarowego (wewnętrzny generator RC).

    ps. w nomenklaturze powszechnie używanej piny, na których masz kwarc to nie są porty

    /Dopisane/

    PietrekDer - nie pisz tak (poniżej), bo ktoś Ci uwierzy. To nie jest wewnętrzny kwarc, tylko skalibrowany generator RC

    Możesz go przestroić do 8 MHz (na fusebitach), tylko tak jak napisałem musisz uważać, żeby przy okazji nie zablokować sobie generatorka lub programowania ISP.
  • #7 1393972
    PietrekDer
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 5
    Też tak myślałem, ale jeśli jest wewnętrzny kwarc, to pewnie po to, aby mozna było te porty użyć jako we/wy. Postanowiłem to sprawdzić :) I okazuje się że działa! podłączyłem diodę do portb.6 (kwarc jest na PB.6 i PB.7) i normalnie sobie mruga :) nawet nie musiałem wylutowywać kwarcu (bo domyslnie go wlutowałem w płytke) :D
  • #8 1419343
    DmZ
    Poziom 18  
    Posty: 371
    Ocena: 37
    witam.zadam pytanie, może głupie ale nie znalazlem na nie odpowiedzi na elektrodzie ani w google (jak dotąd):

    żeby amienić taktowanie zrgara trzeba ustawić fusebity. teraz jak to zrobić za pomocą avrdude i programatora złożonego z 6 kabelków (w zasadzie 4)? czy ktos mobłby mi pomóc z ustaleniem wartości fusebitów dla atmegi8 na zegar 8Mhz (wewnętrzny)?

    z góry dziękuje z apomoc.

    dmz
  • #9 1436609
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Witam...

    Chciałbym się podłączyć pod temat z takim pytaniem...
    Przeglądnełem pdf do atmega8 i nie wiem czy dobrze zrozumiałem...
    Jeżeli od początku używam ustawień fabrycznych (wew RC 1MHz) to nie wystarczy wpisać nowej wartości do rejestru OSCCAL aby zmienić jego ustawienia...?.?.?
    Według dokumentacji jeżeli
    OSCCAL = 0 -> 1MHz
    OSCCAL = 0xFF -> 8MHz

    Używam AVR-GCC + programator (6 kabli od LPT)
    I mam też STK500 + AVRStudio4

    Bardzo prosze żeby ktoś opisał jak to zrobić a może nawet warto by umieścić taki opis w FAQ...
  • #11 1436688
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 123
    Z Twojej wypowiedzi można wynioskować że zmiana oscal o 1 da nam zmiane częstotliwości o 27,5Khz, przyjmując że dryf temperaturowy o 1st. celsiusza daje nam potrzebę zmiany oscal = 1, otrzymujemy że AVR na wewnętrznym RC działa jak przetwornik temperatura - częstotliwość :) z dokładnością o wiele leprzą od ds18b20. :)

    Light'I < a po co zaglądać do pdfa skoro można zapytać na elektrodzie, najwyżej paru się uśmieje ;)
  • #12 1436774
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    McRancor napisał:
    Light'I < a po co zaglądać do pdfa skoro można zapytać na elektrodzie, najwyżej paru się uśmieje ;)
    Wiesz są lepsze sposoby na poprawienie sobie humoru niż nabijanie się z ludzkiej niewiedzy. Może to być np. poczucie, że zrobiłeś kawał dobrej roboty, że skłoniłeś kogoś do ruszenia głową. Ostatecznie można odwiedzić dział "Na Wesoło". Co do meritum tematu, OSCCAL jest przewidziany raczej do przecyzowania ustawień częstotliwości. Tym niemniej najwięcej informacji jest właśnie Tu.
    Light'I
  • #13 1436913
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 123
    Nie zrozum mnie źle, nie mam zamiaru nabijać się z czyjejś niewiedzy, bo w naszej dziedzinie (elektronika) nikt nie wie wszystkiego, sam nieraz łapie się na takich błahostkach że wstyd, chodzi mi tylko o pewne zależności wynikłe ze złego rozumowania, jak napisałem wyżej.

    Jeśli kogokolwiek uraziłem, to przepraszam, nie miałem takiego zamiaru, a co do mobilizacji, RDFM możnaby powiedzieć każdemu. Na elektrodzie też temat był poruszany, tylko czasem się po prostu nie chce szukać, ściągać noty, jak można szybciej i prosciej zapytać, a po kilku minutach ma się odpowiedź.

    A cały temat z domyślnie ustawionym RC idealnie nadaje się do FAQ!
  • #14 1436967
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Ciesze się, że sprawiło ci to tyle radości...

    Czytałem pdf i przeglądałem posty...
    Pytałem bo nie do końca czaje i miałem nadziej, że da się bez fuse bitów...
    Czytając posty na forum nie raz trafiłem na problem spowodowany złym ustawieniem fusebit...
    Ale narazie "ruszę głową" i postaram się sam to rozkminić...

    Dzięki za zaintersowanie...

    Dodano:

    Dobra jest praktycznie po sprawie...
    STK500 razem z AVRStudio4 pozwala ustawić opcje wymagające fuse bitów prawie bez zagłębiania się w pdf...
    Wybiera się tylko opcje
    np. Int. RC Osc. 4MHz; Start-up-time; 6CK + 64ms
    A fuse bity są ustaiwane odpowiednio do tej opcji...
    Co nie zmienia faktu, że dobrze było by rozumieć dokumentacje...

    Pozdrowienia prześmiewcy ;)

Podsumowanie tematu

✨ Problem dotyczył migania diody podłączonej do portu ATmega8 z częstotliwością 4 sekund zamiast oczekiwanej 1 sekundy przy użyciu Bascoma. Przyczyną była domyślna konfiguracja mikrokontrolera, który fabrycznie pracuje na wewnętrznym oscylatorze RC o częstotliwości 1 MHz, a nie na zewnętrznym kwarcu. Aby uzyskać poprawne taktowanie i działanie polecenia WAIT w Bascom, należy zadeklarować dyrektywę $crystal=1000000 lub zmienić fusebity, aby wymusić pracę z zewnętrznym kwarcem. Dyskusja wyjaśniła, że piny podłączone do kwarcu (PB6, PB7) mogą być używane jako porty tylko przy pracy na wewnętrznym oscylatorze RC. Poruszono także temat konfiguracji fusebitów za pomocą programatora i narzędzi takich jak avrdude czy STK500 z AVRStudio4, które umożliwiają ustawienie taktowania (np. wewnętrzny RC 8 MHz) bez konieczności ręcznego odczytu dokumentacji. Wspomniano również o rejestrze OSCCAL służącym do kalibracji częstotliwości wewnętrznego oscylatora RC. Podsumowując, poprawne ustawienie źródła zegara i deklaracja w Bascom są kluczowe dla uzyskania oczekiwanej częstotliwości migania diody na ATmega8.
Wygenerowane przez model językowy.
REKLAMA