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

Ustawienie zegara, czas trwania polecenia Wait, BASCOM, zl2AVR

bochnio 27 Kwi 2011 17:30 2389 7
REKLAMA
  • #1 9445029
    bochnio
    Poziom 13  
    Witam, dysponuję ogólnie znanym układem ZL2AVR i mam problem z ustawieniem zegara tak by polecenie "waitms 10000" trwalo faktycznie 10 sekund, teraz trwa okolo 9s 200-300ms.

    Moj program wyglada tak:

    $regfile = "m8def.dat"
    $crystal = 8000000 //przy ustawieniu 1000000 jest totalna klapa- trwa okolo 4s

    Config PORTB.1 = Output

    Waitms 10000
    PORTB.1 = 1

    Waitms 10000
    PORTB.1 = 0

    End


    Program jest oczywiście testowy tylko po to by sprawdzić ustawienia zegara i już pojawił się problem... zwory JP2 i JP3 mam wyjęte bo chcę korzystać z wewnętrznego rezonatora. Płytkę odziedziczyłem po kimś więc nie wiem jak są ustawione fuse bity (domyślam się, że to istotne?). Na zewnętrznym kwarcu mam napisane "1600000 KDS 2K". Mógłby mi ktoś doradzić jak ustawić procka w BASCOM-AVR tak by odliczał dokładnie? Obojętne mi czy będę korzystał z wewnętrznego czy zewnętrznego rezonatora, ważne jest dla mnie by czas był dobrze mierzony.

    Moje drugie pytanie: Czy do transmisji szeregowej jest niezbędne odpowiednie ustawienie $crystal??

    Dzięki serdeczne za pomoc.
  • REKLAMA
  • #2 9445070
    piotrva
    VIP Zasłużony dla elektroda
    po pierwsze jako $crystal podaj 16000000 (Twój kwarc to najprawdopodobniej 16 MHz) - o ile masz ustawione jako zewnętrzny kwarc we fusebitach
    co do dokładnego odmierzania czasu to jeśli na prawdę tego chcesz to odpuść sobie instrukcje typu wait, które nigdy nie będą dokładne. Polecam poczytać conieco o timerach, które mogą odmierzać czas dużo prościej i dokładniej niż Wait
  • REKLAMA
  • #3 9446711
    bochnio
    Poziom 13  
    Mam rozwarte JP2 i JP3, więc zewnętrzny kwarc 16Mhz nie powinien być już obsługiwany z tego co zrozumiałem z opisu ZL2AVR. Chciałbym skorzystać z wewnętrznego rezonatora atmegi, teoretycznie 1Mhz powinien pasować, ale nie działa, czy to możliwe, że przez fusebity? Wait na pewno nie jest dokladny, ale to niemożliwe żeby w skali minuty tracil 4 sekundy(?!). Korzystałem z timerów pisząc proste programy w asemblerze 8051, ale tutaj mam inny cel. Jestem prawie pewny, że chodzi o ustawienie poprawnej wartości crystal ew fusebity, ale kompletnie nie wiem jak to ugryźć...

    Ponawiam pytanie o rs232, czy wartosc crystal w tego rodzaju transmisji ma znaczenie i może ją pokrzaczyć ew. uniemożliwić?
  • #4 9446871
    maxiu25
    Poziom 16  
    kwarc w transmisji rs232 lub rs485 ma znaczenie ponieważ korzystasz z USART - ustawienie parametrów transmisji np 1 MHz błąd w transmisji 7,5% przy prędkości 9600, 1,11 MHz błąd w transmisji 3,1% przy prędkości 9600, 1,84 MHz błąd w transmisji 0,2% przy prędkości 9600, itd.
  • REKLAMA
  • #5 9447050
    piotrva
    VIP Zasłużony dla elektroda
    ma nawet podwójne znaczenie - jeśli podasz zły kwarc (nie taki jak jest w rzeczywistości, to program wyliczy błędne wartości ubbr i w ogóle transmisja będzie odbywać się z inną (bliżej nieokreśloną :D ) prędkością
    a to że założyłeś/zdjąłeś zworki do kwarcu to musisz jeszcze to odpowiednio zaprogramować fusebity, żeby procesor się przełączył się na odpowiedni tryb wyboru zegara.
    skoro masz mega8 to może być tez inny dzielnik, i częstotliwość 1,2,4 lub 8 MHz na rdzeniu
  • #6 9449058
    bochnio
    Poziom 13  
    Wielkie dzięki. A wie może ktoś jak podejść w tym momencie do problemu i ustawić fusebity (a może są jednak dobrze? jak to sprawdzić?)? Czy da się coś zrobić poza ich ustawieniem? Nie chcę w nich grzebać, chyba, że to będzie ostateczność, gdyż nie chcę zablokować procka. Jak sprawdzić jaki jest wewnętrzny zegar, względnie jak sprawdzić taktowanie??

    Thx a lot :)
  • REKLAMA
  • #7 9449137
    piotrva
    VIP Zasłużony dla elektroda
    dając w programie:
    
    do
    Set portb.0
    reset portb.0
    loop
    

    i podpinając do PB0 miernik częstotliwości/oscyloskop
    ale zmieniając fusebity procesora nie zablokujesz, ustawiasz Internal (Int.) RC Oscilator 8 MHz i będzie dobrze.
    na prawdę są miliony opisów jak to zrobić, to wcale nie gryzie :D
  • #8 9449180
    bochnio
    Poziom 13  
    Dzięki, przeszukam elektrode jeszcze raz, poustawiam i pochwalę się co mi wyszło ;)
REKLAMA