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.

[16F877A][ASM] - Taktowanie procesora podzielone przez 4 ?

grabie2 14 Lip 2013 21:59 1425 4
  • #1 14 Lip 2013 21:59
    grabie2
    Poziom 10  

    Witam!

    To jest moje pierwsze udane starcie z mikrokontrolerami PIC.
    Używam mikrokontrolera PIC16F877A, z kwarcem 11.0592 MHz. Jako pierwsze zadanie postawiłem sobie po prostu wygenerowanie ładnego prostokąta na porcie B procesora(pomijając piny programowania).

    Oto mój program(zacząłem go pisać w oparciu o szkielet jednego z przykładów do MPLAB):

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Wszystko działa zgodnie z oczekiwaniami z wyjątkiem czasu trwania impulsu.
    Jeden impuls trwa dokładnie 724 ns, czyli pojawia się z częstością 1.38 MHz
    To jest dokładnie 8 impulsów kwarcu(11.0592 MHz), prawda?
    Mój kod ma opóźnienie dokładnie 2 instrukcji odpowiednio dla stanu wysokiego i niskiego, prawda?
    Nie znalazłem nic w dokumentacji mówiącego o tym, aby jeden cykl procesora trwał 4 takty zegara, więc zapewne czegoś nie doczytałem, nie ustawiłem.

    Tak więc proszę o wskazanie mi przyczyny takiego, a nie innego opóźnienia i zasugerowanie ew. poprawki/odesłanie do odpowiednie sekcji dokumentacji(Może innej niż dokumentacja procesora ?) mówiącej o tym.

    Wcześniej pracowałem tylko w asemblerze dla i486, i686 oraz dla kilku AVRów, więc jeżeli zrobiłem coś 'dziwnego' w tym jakże prostym programie to proszę również o wytknięcie tego.

    Dziękuję,
    Bartek

    0 4
  • Pomocny post
    #2 14 Lip 2013 23:06
    mickpr
    Poziom 39  

    grabie2 napisał:
    Nie znalazłem nic w dokumentacji mówiącego o tym, aby jeden cykl procesora trwał 4 takty zegara, więc zapewne czegoś nie doczytałem, nie ustawiłem.

    Dokładnie tyle trwa. Wynika to z architektury uC PIC.

    Polecam lekturę np. tego linka http://www.pcbheaven.com/picpages/Instruction_Cycle_Duration_and_Programmable_Delays/
    Ciekawych rzeczy dowiesz się też np. z tego linka http://prz-rzeszow.pl/~zh/ipcores/risc.pdf

    0
  • #3 15 Lip 2013 00:24
    grabie2
    Poziom 10  

    Dziękuję za szybką i rzeczową odpowiedź

    Zapewne ta informacja znalazła by się w jakimś family reference, albo podobnym dokumencie.
    Bo po co umieszczać taki szczegół jak wewnętrzny podział zegara przez 4 w dokumentacji procesora...

    W tej sytuacji, przy maksymalnym taktowaniu 20MHz procesor uzyska 5 MIPS, a jak to się ma do np. ATmegi8 przy 20 MIPSach ?

    Czy ten podział dotyczy wszystkich rodzin PICów? Mam pewne plany co do czekającego na mnie już od kilku miesięcy dsPIC30F2010(Użycie kamery analogowej, zamiast nudnych fotorezystorów w line followerze ;) )

    0
  • #4 15 Lip 2013 08:41
    mickpr
    Poziom 39  

    Spory na linii PIC... AVR moim zdaniem przypominają nieco dawne wojny między użytkownikami komputerów Atari i Commodore.
    Patrząc sobie na PIC i AVR (odrzućmy na chwilę ATXMEGA i dsPIC) - można stwierdzić, że obydwie rodziny mają swoje plusy i minusy.
    PIC - jest wolniejszy, ale ma PLL (dopiero ATXMEGA je posiadają).
    Stwierdzam również (z przykrością), że jest ich więcej i są lepiej "usprzętowione" niż ich koledzy "ze stajni AVR".
    PIC ma też zaletę - że za porządny programator/debugger (PICKIT3) nie trzeba wydać całej pensji.

    Oczywiście (ucinając potencjalne wojny AVR-PIC) - wszak "de gustibus no disputandum est" (o gustach się nie dyskutuje) - każde rozwiązanie jest dobre - jeśli spełnia pokładane w nim zadnia.
    Osobiście uważam, że jeśli komuś zależy na prędkości MCU - na pewno nie wybierze ani AVR'a - ani PIC'a (pomijam dsPIC i ATXMEGA).

    0
  • #5 15 Lip 2013 09:02
    grabie2
    Poziom 10  

    Dziękuję za pomoc oraz precyzyjne i rzeczowe odpowiedzi na pytania.

    Problem z tematu został rozwiązany, więc temat zamknę ku uciesze moderatorów ;)

    Pozdrawiam,
    Bartek

    0