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

Pic16f874 a Pic16f874A

13 Mar 2009 18:36 2556 24
  • Poziom 16  
    Witam.

    Czy ktoś mógłby mi pomóc w następującej sprawie.Otóż posługując się programem Realizer v4.00 stworzyłem program dla procesora Pic16f874.
    Realizer sam dokonuje kompilacji w efekcie czego otrzymuje się gotowy
    plik hex,którym można zaprogramować procesor, program tworzy również
    plik asm.Kłopot mój polega na tym, że obecnie są do dostania tylko
    procesory Pic16f874A, których Realizer nie obsługuje. Pytanie moje jest
    następujące czy ktoś wie jak, czy też co zrobić aby plikiem otrzymanym
    z kompilacji dla Pic16f874 móc zaprogramować Pic16f874A. Korzystam z
    programatora proPic2 (sprawny),programuję z programu Icprog.Dodam,
    że generalnie w tej materii jestem "zielony", i proszę o radę w stylu
    możliwie zrozumiałym.
  • Specjalista - Mikrokontrolery
    klikasz tutaj -> http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010238

    szukasz takiego dzialu dokumentow jak Migration Documents, sciagasz PIC16F87X to PIC16F87XA Migration, czytasz.

    na pierwszej stronie zauwazasz:

    Cytat:

    Although the comparator is a new peripheral on the 16F87XA, the 16F87XA is defined to maintain 100%
    pinout compatibility with the PIC16F87X. This is achieved by mapping the comparator inputs with the existing
    ADC channels on PORTA. The comparator is disabled on power-up so that existing PIC16F87X code
    requires no modification
    .


    i to w zasadzie zamyka temat, zakladajac, ze twoj programator obsluguje ten uklad.

    4\/3!!
  • Poziom 16  
    Witam.

    Jak już mówiłem w temacie mikroprocesorów jestem
    zupełnie zielony.
    Nie wiem do czego odnoszą się słowa ADC oraz PORTA.
    Gdybyś mógł trochę mnie oświecić (łopatologicznie).
    Czy z Pic16f84 na Pic16f84A jest podobnie?

    Pozdrawiam
  • Specjalista - Mikrokontrolery
    wykonaj takie kroki jak opisalem, tylko poszukaj procka PIC18F84A na stronie microchipa i wszystko stanie sie jasne.

    co do 'oswiecania' to polecam jakis kurs w internecie, albo ksiazke.

    4\/3!!
  • Poziom 16  
    Witam.

    Zrobiłem tak jak wskazałeś, tzn. wszedłem na stronę
    odnalazłem dokument z jego treści wnoszę, że powinienem
    jeśli dobrze zrozumiałem dokonać mappingu (przekierowania?) wejść komparatora do portu A, tylko
    nie mam pojęcia jak?
    Zdaję sobie sprawę, że dla ciebie to może być śmieszne,
    dopiero co zaczynam z mikroprocesorami. Błedem było
    chyba to, że wybrałem Realizera, który prawie wszystko
    robi sam, program się po prostu rysuje.

    Pozdrawiam.
  • Specjalista - Mikrokontrolery
    jesli nie uzywasz komparatora, to nic nie musisz zmieniac.

    to nie jest kwestia tego czy to jest smieszne czy nie, ale pytasz o rzeczy ktore poruszone sa w dokumentacji do tych mikrokontrolerow, a ja nie mam w zwyczaju powtarzac tego co tam juz zostalo napisane - calkiem prostym jezykiem zreszta ...

    jesli dopiero zaczynasz, to musisz po prostu troche nad tym posiedziec - samo nic nie przyjdzie od razu.

    4\/3!!
  • Poziom 16  
    Witam

    Dziękuję za dotychczasowe porady.Wiem,że pytam o rzeczy
    dla ciebie proste ale to nie jest tak, że od razu pisałem po
    pomoc. Też szukałem, pytałem kolegów itp. Z większości
    porad i z tego do czego sam doszedłem też wynikało,że
    w hex-sie nic nie muszę zmieniać.Tylko,że niestety po
    zaprogramowaniu Pic16f874A plikiem hex otrzymanym w
    wyniku kompilacji programu na Pic16f874 ten pierwszy
    nie daje znaku życia,(podczas procesu programowania nie ma żadnych komunikatów o błędach) i stąd też moja konsternacja i sięganie po pomoc do tych, którzy wiedzą
    więcej.
    To że nic nie przychodzi łatwo to już wiem od dawna.
    PO twoich wypowiedziach i treści innych twoich postów
    uważam cię za eksperta.Postaraj się o trochę wyrozumiałości dla tych, którzy wiedzą mniej.
    Skoro jak mówisz nic nie muszę zmieniać to co może być
    przyczyną tego stanu rzeczy? Dodam,że Realizer tworzy
    oprócz pliku hex również plik z tekstem programu w
    asemblerze i w razie czego mogę w nim dokonać zmian.

    Pozdrawiam.
  • Specjalista - Mikrokontrolery
    skad pewnosc, ze kod w ogole dziala? czy zostal sprawdzony na wlasciwym procku? czy uklad jest fizycznie sprawny i na pewno poprawny?

    4\/3!!
  • Poziom 16  
    Witam

    Kod działa. Pic16f874 zaprogramowany nim pracuje
    zgodnie z założonym programem. Problem w tym, że został
    mi tylko jeden bez literki "A". Kupiłem w sklepie jeden z A
    aby sprawdzić czy będzie "chodził" i niestety tan nie daje
    żadnych znaków życia.Oczywiście nie mogę wykluczyć, ze
    nie jest wadliwy. Kupię po prostu następny i zobaczę co
    będzie.

    Pozdrawiam.
  • Specjalista - Mikrokontrolery
    to akurat malo prawdopodobne moim zdaniem, zeby nowy uklad byl wadliwy.

    jak wyglada kwestia bitow konfiguracyjnych? czy wykorzystujesz jakos ten komparator?

    4\/3!!
  • Poziom 16  
    Witam

    Odnośnie bitów, to na tyle się jeszcze nie znam.
    Komparatora nie wykorzystuję, jego nóżki są wolne.
    Gdy w ustawieniach programatora zaznaczę opcję pic16F874(w programatorze siedzi pic16f874A)
    i programuję go hex-em z kompilacji na 16f874 to zgłasza
    błąd przy pierwszym adresie. Gdy w opcjach programatora
    zaznaczę pic16f874A i programuję go tym samym hex-em
    to nie zgłasza żadnych błędów.
    Dysponuję plikiem asm. wytworzonym przez Realizera
    ale jak już mówiłem słabo się na nim znam.

    Pozdrawiam.
  • Specjalista - Mikrokontrolery
    mozesz go tutaj wrzucic, moze akurat cos madrego da sie z niego wywnioskowac.

    wrzuc tez hex'a.

    bity konfiguracyjne dla tych dwoch ukladow sa podobne, ale nie wiem, czy nie sa przypadkiem w innej kolejnosci (MPLAB tak pokazuje).

    4\/3!!
  • Poziom 16  
    Witam

    Stworzyłem w Realizerze nowy krótki program na próbę.Jego działanie to
    migotanie diody led po aktywowaniu wejścia RB5 wyj. toRB6
    Poniżej plik.asm.; Realizer Gold (V4.00g) : generated PIC16F874 Code
    ; File : D:\ProjREALIZER\Proj2\sch2.asm
    ; Scheme Version : 1.00
    ; Date : Sun Mar 15 18:41:09 2009
    ; Used variables : 3
    ; Used functions : 5


    list p=16F874,r=dec

    #define PIC16CXX
    #define ADC10


    variable glabnr = 0

    org H'000E'
    RROMST

    title "sch2"
    subtitle "1.00"

    nolist

    include "c:\progra~1\realiz~1\lib\p16f874.inc"
    include "sch2.inc"
    include "c:\progra~1\realiz~1\lib\p16c6lib.inc"
    include "c:\progra~1\realiz~1\lib\p16c6slp.inc"
    include "c:\progra~1\realiz~1\lib\p16c6eep.inc"
    include "c:\progra~1\realiz~1\lib\p16c6xxx.inc"
    list

    Reset
    movlw B'00000000'
    movwf INTCON
    clrwdt


    PerInit
    PortInit
    selectBank0
    clrf PORTA
    clrf PORTB
    clrf PORTC
    clrf PORTD
    clrf PORTE
    selectBank1
    movlw H'00'
    movwf TRISA
    movlw H'20'
    movwf TRISB
    movlw H'00'
    movwf TRISC
    movlw H'00'
    movwf TRISD
    movlw H'00'
    movwf TRISE

    AdcInit
    selectBank ADCON1
    movlw B'00000111'
    movwf ADCON1

    Rtcinit
    selectBank TICK
    clrf TICK
    selectBank TMR0
    movlw H'64'
    movwf TMR0
    selectBank OPTION_REG
    movlw H'D6'
    movwf OPTION_REG
    bsf INTCON,PEIE
    bsf INTCON,T0IE
    bsf INTCON,GIE

    RamInit
    selectBank0
    movlw H'25'
    movwf FSR
    RamInit1
    clrf INDF
    incf FSR
    movf FSR,W
    cplw H'27'
    selectPage RamInit1
    btfss STATUS,Z
    goto RamInit1


    RealMain
    Rtc
    bcf INTCON,T0IE
    selectBank TICK
    movf TICK,W
    clrf TICK
    bsf INTCON,T0IE
    selectBank RTICK
    movwf RTICK
    RTIMEND
    nop


    ; Decrement 8 bit timers
    selectPage RTC0000
    selectBank H'26'
    btfsc H'26',7
    goto RTC0000
    sub2www H'26',2,RTICK,2,H'26',2
    RTC0000
    RtcSkip

    diginb v0n1,0,1,PORTB,5,1
    RINPEND
    nop
    oscfb v0n0,1,1,19,100,T00000,2
    and2bbb v0n0,1,1,v0n1,0,1,v0n2,2,1
    digoutb v0n2,2,1,PORTB,6,1
    ROUTPEND
    nop
    clrwdt
    selectPage RealMain
    goto RealMain

    ifndef RTC_INT
    #define RTC_INT
    Rtcint
    selectBank TMR0
    movlw H'64'
    addwf TMR0
    bcf INTCON,T0IF
    selectBank TICK
    incf TICK
    selectBank0
    movf stackPcLath,W
    movwf PCLATH
    popStack
    retfie
    endif

    doInterrupt
    selectPage Rtcint
    btfsc INTCON,T0IF
    goto Rtcint
    selectBank0
    movf stackPcLath,W
    movwf PCLATH
    popStack
    retfie
    RROMEND
    nop

    org H'0000'
    selectPage Reset
    goto Reset

    org H'0004'
    pushStack
    movf PCLATH,W
    movwf stackPcLath
    selectPage doInterrupt
    goto doInterrupt

    end

    Pozdrawiam.

    Dodano po 12 [minuty]:

    ORAZ

    HEX
    ; Realizer Gold (V4.00g) : generated PIC16F874 Code
    ; File : D:\ProjREALIZER\Proj2\sch2.inc
    ; Scheme Version : 1.00
    ; Date : Sun Mar 15 18:41:09 2009
    ; Used variables : 3
    ; Used functions : 5


    stackW equ H'20'
    stackStatus equ H'21'
    stackPcLath equ H'22'
    stackPcl equ H'23'
    REGX equ H'24'
    REG0 equ H'27'
    REG1 equ H'28'
    REG2 equ H'29'
    REG3 equ H'2A'
    REG4 equ H'2B'
    REG5 equ H'2C'
    REG6 equ H'2D'
    STACK0 equ H'002E'
    FREQ1000 equ 8000
    ROM_PAGES equ 2
    PAGE_LENGTH equ H'07FF'

    v0n1 equ H'0025'
    v0n0 equ H'0025'
    v0n2 equ H'0025'
    T00000 equ H'0026'
    PORTA_MASK equ H'0000'
    PORTB_MASK equ H'0020'
    PORTC_MASK equ H'0000'
    PORTD_MASK equ H'0000'
    PORTE_MASK equ H'0000'
    TICK equ H'2F'
    RTICK equ H'30'
    ARTICK equ H'30'
    RRAMST equ H'25'
    RRAMEND equ H'31'

    RRAMNVST equ H'00'
    RRAMNVEND equ H'00'
  • Poziom 16  
    Witam
    Na pic16f874dział na pic16f874A nie
  • Poziom 24  
    Najprawdopodobniej bity konfiguracyjne, nieustawione lub ustawione niewłaściwie, dlatego chciałem hexa, by to zobaczyć, bowiem na tym listingu configu nie widać wcale, ale skoro hexa nie wolno udostępniać ......
  • Poziom 18  
    Nie no po prostu.. rence i cycki opadają!


    miganie diody na porcie RB0....
    Code:

    udata
       cnt1   res   1      ;counters
       cnt2   res   1      ;------

    RST      CODE   0x0000
             nop
             pagesel   main
             goto    main

    main:
          banksel   TRISB         ;Switch to Bank 1      
             bcf      TRISB, 0   ;
            banksel   PORTB         ;
             
    Main_Loop:
             incfsz   cnt1      
             goto   skip
             incfsz   cnt2      
                goto    skip
                incf    PORTB       ;
    skip:
               
          goto   Main_Loop
  • Poziom 16  
    Witam.

    Już wolno oto hex

    :040000008A110E282B
    :08000800A000030E8312031394
    :10001000A100210E0A08A2008A11A32800308B003B
    :100020006400831203138501860187018801890119
    :1000300083160313003085002030860000308700CF
    :1000400000308800003089008316031307309F00BA
    :1000500083120313AF0183120313643081008316EC
    :100060000313D63081000B178B168B1783120313E3
    :10007000253084008001840A0408273C8A11031D6E
    :100080003A288B12831203132F08AF018B168312A9
    :100090000313B00000008A1183120313A61B572814
    :1000A000831203133008260283120313A60083125F
    :1000B00003132514861E25100000831203138A11D2
    :1000C000A61F7628133083120313A600831203138E
    :1000D000A6138A1183120313A51873288A11831299
    :1000E0000313A514762883120313A5108312031398
    :1000F00025118A11A51C832883120313251C83282C
    :100100008312031325158A118312031325198B28D3
    :1001100006138A118C280617000064008A114128F2
    :1001200083120313643081070B1183120313AF0A88
    :100130008312031322088A0083120313210E830003
    :10014000A00E200E09008A110B19902883120313A8
    :1001500022088A0083120313210E8300A00E200EB2
    :040160000900000092
    :00000001FF

    Pozdrawiam.
  • Poziom 24  
    Podany kod nie zawiera bitów konfiguracyjnych, w przypadku procesora 16F874A defaultowo zapis do flasza jest wyłączony, natomiast w procesorze 16F874 jest włączony i dlatego działa.
    Podczas programowania musisz ręcznie ustawiać tzw. fuse bity, wachdoga (WDT) tez warto wyłączyć gdy się go nie używa.
    Ponadto, Realizer tworzy kod-horror, dzieci można nim straszyć, monstrualny i nieefektywny. Kolega powyżej dał przykład jak powinno to wyglądać - kilkanaście linijek.
  • Poziom 18  
    adamwesola napisał:
    Podany kod nie zawiera bitów konfiguracyjnych, w przypadku procesora 16F874A defaultowo zapis do flasza jest wyłączony, natomiast w procesorze 16F874 jest włączony i dlatego działa.
    Podczas programowania musisz ręcznie ustawiać tzw. fuse bity, wachdoga (WDT) tez warto wyłączyć gdy się go nie używa.
    Ponadto, Realizer tworzy kod-horror, dzieci można nim straszyć, monstrualny i nieefektywny. Kolega powyżej dał przykład jak powinno to wyglądać - kilkanaście linijek.


    Kolega powyżej bez bicia przyznaje że pisał ten kod 5 minut i jest on brzydki, a także że brakuje na końcu 'end' (ale to akurat picasm dobrze diagnozuje).
  • Poziom 16  
    Witam

    Odnośnie kodu tworzonego przez Realizera to wiem, że jest
    "makabryczny", ale zanim nie poznam asemblera to
    jestem na niego skazany , poza tym dużo robiłem w Realizerze na ST62xx i nie było kłopotów.Teraz "przesiadam
    się na PIC-e.Jeżeli można to mam jeszcze kilka pytań.
    Podany prze zemnie hex pochodzi bezpośrednio z kompilacji.Cz ktoś mógłby mi wskazać w którym jego
    miejscu znajdują się dane o konfiguracji i jak je odczytać.
    W menu programu obsługującego mój programator pod
    FUSES znajdują się takie opcje: watch dog,power up,
    brown out, low voltage,data protcition, code protect,
    debug, które powinienem zaznaczyć dla pic16f874A?.
    Czy jak niczego nie zaznaczę to jest to równoznaczne z
    nie zapisaniem bitów konfiguracyjnych?(chyba nie).Jak
    włączyć zapis do flesza?.Czy gdybym zczytał program z
    zaprogramowanego procesora w postaci hex-a to byłby
    on inny niż ten po kompilacji(chodzi mi o to czy sam
    programator czegoś nie dodaje)

    Pozdrawiam.
  • Poziom 24  
    Tak wygląda Twój program zdisasemblowany, dołożyłem do niego linijkę konfiguracji procesora, nazywa się __ config, w mplabie znajdziesz co każda pozycja w nim oznacza.
    Po wczytaniu do programatora pliku hex, "fusy" samoczynnie przyjmą wartości zapisane w hexie.
    Tzw. fuse bity , są w istocie pozycjami w rejestrze konfiguracji procesora.
    Możesz je zmieniać w programatorze, niezależnie od wartości jakie zawiera w sobie plik .hex
  • Poziom 16  
    Witam

    Co to jest mplab ( rozumiemz że jakiś program).
    Wnoszę również, że teraz z każdego programu utworzonego
    w Realizerze muszę wyciągnąć plik asm. dodać do niego
    "świętą poprawkę" i skompilować od nowa.
    Niestety nie posiadam żadnego kompilatota, Realizer
    robił to sam. Gdybyś mógł podać jakiś link skąd pobrać
    można kompilator

    Pozdrawiam.
  • Poziom 16  
    Witam

    Po tygodniu innych zajęć ponownie zasiadłem do omawianego tematu.
    I tak jeżeli linijkę tekstu dotyczącego bitów konfiguracyjnych
    umieszczę w pliku asm. otrzymanego z Realizera to nie
    daje się go skompilować.
    Co najciekawsze to to,że jak stwierdziłem Pic16F874A
    zaprogramowany nie zmienionym programem na
    Pic16F874 zaczął pracować zgodnie z programem gdy ma
    napięcie zasilania nie 5V a obniżone do 3,5V, na programatorze
    odznaczyłem wszystkie fusy, gdy są ustawione zgodnie z
    zaleceniami procesor nie daje znaków życia. Co to moze
    oznaczać?.

    Pozdrawiam.