Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

funkcja waitms w Bascom AVR

marcin w 14 Kwi 2006 07:30 2979 10
  • #1 14 Kwi 2006 07:30
    marcin w
    Poziom 22  

    Witam.
    Mam procesor atmega 8. Napisałem prosty programik zapalający i gaszący diodę. Oto jego treść:

    $regfile = "m8def.DAT"
    $crystal = 8000000
    Do
    Set Portd.4
    Waitms 500
    Reset Portd.4
    Waitms 500
    Loop

    Jednak nie zgadzają mi się czasy. Czas świecenia diody jest ok 5 s, a nie jak w programie 0,5 s. Sprawdzałem ustawienia bascom, jest prawidłowo wszystko ustawione.

    Co może być przyczyną tego ?? Proszę o pomoc, bo w dziedzinie Bascom jestem początkujący, kiedyś jedynie programowałem z poziomu asamblera uC 8051.

    0 10
  • #2 14 Kwi 2006 07:57
    jacobsek
    Poziom 22  

    Sprawdzałeś fuse bity?

    0
  • #3 14 Kwi 2006 08:23
    hunterhouse
    Poziom 26  

    jacobsek napisał:
    Sprawdzałeś fuse bity?


    dokładnie o to chodzi. Atmega8 standardowo jest ustawiona na wewnętrzny oscylator 1Mhz. jeśli chcesz żeby kożystał z zewnętrznego Kwarcu to musisz zmienić fusebity. ale uwaga wielu początkujących przypadkiem blokuje swoje atmegi wiec zanim coś będziesz robił to poczytaj note katalogową i opisy.
    dodam tylko że musisz ustawić pewne bity na 1111.

    0
  • #4 15 Kwi 2006 08:15
    Press
    Poziom 22  

    ATmega8 ma tez wewnetrzny oscylator 8MHz. Tylko z Bascoma nie udalo mi sie go ustawic. Ale PonyProgiem mozna to zrobic bez problemu recznie modyfikujac CKSEL.

    0
  • #5 15 Kwi 2006 08:22
    jacobsek
    Poziom 22  

    W bascomie tez bez problemu można ustawić wewnętrzny na 8Mhz,są tam odpowiednie fusy

    0
  • #6 15 Kwi 2006 09:35
    hunterhouse
    Poziom 26  

    Press napisał:
    ATmega8 ma tez wewnetrzny oscylator 8MHz.

    nieradze ustawiać tego generatora na 8Mhz gdyż oprucz taktowania procesora ma on drugą funkcję. generuje on przebiegi czasowe podczas programowania pamieci EEPROM i FLASH. ustawienie go na 8Mhz może doprowadzić do błędów zapisu oraz skrucenia życia tych pamieci. wiecej info w nocie katalogowej. Brrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr.... (Sprawdź pisownię - od tego jest przycisk, więc to tylko minuta... Light-I)

    0
  • #7 15 Kwi 2006 12:54
    1ceman
    Poziom 12  

    Cześć
    Domyślam się że marcin_w dopiero zaczyna przygodę z mikrokontrolerami jeśli próbuje zaświecić diode.
    Czy nie lepiej mu będzie po prostu w programie zmienić wartość crystal na 1000000 ? Wtedy mikrokontroler będzie liczył dobrze, a zabawa na tym poziomie z "fusami" dość szybko może się skończyć zablokowaniem procesora o czym się sam przekonałem całkiem niedawno :)

    Code:
    $regfile = "m8def.DAT"
    
    $crystal = 1000000
    Do
    Set Portd.4
    Waitms 500
    Reset Portd.4
    Waitms 500
    Loop
    End 'zapomniales zakonczenia

    0
  • #8 15 Kwi 2006 16:16
    greg_matrix
    Poziom 16  

    Chodzi o to, że w mikrokontrolerze oprócz wyboru częstotliwości generatora można także ustawić podział tej częstotliwości przez 8. To się nazywa "clock devide by 8" i standardowo jest włączone. Wtedy procesor działa tak jakby częstotliwość była 1MHz zamiast 8MHz.

    Masz więc dwa wyjścia:
    1. Pamiętać o tym podziale- chcesz mieć "fizycznie" 500ms, więc wpisujesz 500/8=62,5 czyli waitms 63
    2. Wyłączyć podział- w okienku programowania są 3 zakładki, jedna z nich to "Lock and Fuse Bits" i takm "Clock Devide by 8" ustawiasz na OFF i klikasz "Write" żeby ustawienie zostało wpisane do procka. Co do konsekewncji to bardzo możliwe, że to o czym koledzy piszą to prawda (zauważyłem, że błędy zapisu rzeczywiście są wtedy częstsze).

    0
  • #9 15 Kwi 2006 20:16
    jacobsek
    Poziom 22  

    W atmedze 8 chyba nie ma już tej opcji dzielenia przez 8, widziałem ją w attiny 2313.
    Chciałbym poznać też zdanie innych na temat pracy atmegi z zegarem 8Mhz, co sądzą o tym że może powodować błędy w zapisie i skrócić żywotność eeprom a może nawet flash???

    0
  • #10 15 Kwi 2006 20:27
    LordBlick
    VIP Zasłużony dla elektroda

    jacobsek napisał:
    W atmedze 8 chyba nie ma już tej opcji dzielenia przez 8, widziałem ją w attiny 2313.
    Nigdy nie było.
    jacobsek napisał:
    Chciałbym poznać też zdanie innych na temat pracy atmegi z zegarem 8Mhz, co sądzą o tym że może powodować błędy w zapisie i skrócić żywotność eeprom a może nawet flash???
    Po czym to kolega wnosi ?
    Zamiast wymyślania cudów, proponuję lekturę :
    http://www.atmel.com/dyn/products/datasheets.asp?family_id=607

    0
  • #11 18 Kwi 2006 09:03
    jacobsek
    Poziom 22  

    Witam. To nie była moja opinia o pracy atmegi z zegarem 8Mhz. Kol.hunterhouse tak sądzi, ja tylko chciałem sprawdzić czy poza nim ktoś jeszcze, sam do tej pory używałem f=8Mhz w atmedze i nie miałem z tym problemów.
    Pozdrawiam

    0