PIC18F05Q40 MPLAB X

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
pepe363
Příspěvky: 183
Registrován: 30 srp 2009, 00:00

PIC18F05Q40 MPLAB X

#1 Příspěvek od pepe363 »

zdravím,

můj život je v troskách. Příležitostně jsem si doteď programoval staré PICy v MPLAB IDE 8.92 v assembleru a všechno bylo krásný. Jenže teď stavím malý projekt na motorku a naprosto neuváženě jsem použil moderní PIC18F05Q40 a až příliš pozdě (když už mám hotovou a osazenou desku a zbývá jen programování) jsem zjistil že můj starý dobrý MPLAB tento čip již nepodporuje a musím se přesunout na MPLAB X. Tady začíná peklo. Z nějakého důvodu již není podporován pro můj čip MPASM a je dostupný pouze překladač XC8. Nedokážu napsat sebekratší program v asm aniž bych při pokusu o překlad nedostal chybu snad na každém řádku. Chci zůstat u asm, nechci C.
Četl jsem i tento ofíko dokument od Microchipu a komické je, že mi nefungují ani jejich příklady.
Může mě někdo nasměrovat na nějaké návody jak vůbec s MPLABem X pracovat a jak hlavně korektně zapsat program aby se řádně zkompiloval ? Prošel jsem mraky videí na YouTube a všechno jenom Céčko. Nejsou na tohle téma k dispozici nějaké knihy v češtině ?

Zkusil jsem zkompilovat tento kód:

Kód: Vybrat vše

; Definice procesoru a zahrnutí definic registrů
    LIST    P=18F05Q40

; Definice proměnných
    CBLOCK  0x20
    COUNT1
    COUNT2
    ENDC

; Začátek kódu
    ORG     0x0000      ; Začátek programu na adrese 0x0000

; Hlavní program
START:
    CLRF    PORTA       ; Vymaž PORTA
    CLRF    LATA        ; Vymaž LATA
    CLRF    TRISA       ; Nastav všechny piny PORTA jako výstupní

BLINK:
    BSF     LATA, 0     ; Nastav pin RA0
    CALL    DELAY       ; Zavolej zpoždění
    BCF     LATA, 0     ; Vymaž pin RA0
    CALL    DELAY       ; Zavolej zpoždění
    GOTO    BLINK       ; Opakuj smyčku

; Podprogram pro zpoždění
DELAY:
    MOVLW   0xFF        ; Nastav WREG na 0xFF
    MOVWF   COUNT1      ; Ulož do COUNT1
    MOVLW   0xFF        ; Nastav WREG na 0xFF
    MOVWF   COUNT2      ; Ulož do COUNT2

DELAY_LOOP1:
    DECFSZ  COUNT1, F   ; Decrementuj COUNT1
    GOTO    DELAY_LOOP1 ; Opakuj, pokud není nula
    DECFSZ  COUNT2, F   ; Decrementuj COUNT2
    GOTO    DELAY_LOOP1 ; Opakuj, pokud není nula

    RETURN              ; Návrat z podprogramu

    END                 ; Konec programu


a dostal tyto chyby:

Kód: Vybrat vše

project_honda.asm:5:: error: (876) syntax error
project_honda.asm:15:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:16:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:17:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:20:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:22:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:29:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:31:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:34:: warning: (1522) RAM access bit operand not specified, assuming banked memory
project_honda.asm:36:: warning: (1522) RAM access bit operand not specified, assuming banked memory
make[2]: *** [nbproject/Makefile-default.mk:116: build/default/production/project_honda.o] Error 1
make[1]: *** [nbproject/Makefile-default.mk:91: .build-conf] Error 2
make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2
project_honda.asm:15:: error: (800) undefined symbol "PORTA"
project_honda.asm:16:: error: (800) undefined symbol "LATA"
project_honda.asm:17:: error: (800) undefined symbol "TRISA"
project_honda.asm:29:: error: (800) undefined symbol "COUNT1"
project_honda.asm:31:: error: (800) undefined symbol "COUNT2"


Díky :)
petrfilipi
Příspěvky: 2901
Registrován: 13 zář 2005, 00:00

#2 Příspěvek od petrfilipi »

Nevím jak tyto moderní PICy, ale u starších začínal program na adrese 4. I když tyto PICy mají, zda se, start opravdu na adrese 0.
A zkusil bych ještě jednu věc : stáhl bych jakýkoli kompilátor, třeba MikroC. V něm bych napsal krátký program v Céčku a nechal ho zkompilovat a zkusil bych ho nahrát do PICu. Bude-li to v pořádku, tak mezi přeloženými soubory bude i překlad do assembleru a pak i hex soubor ve strojovém kódu. A uvidíš, jak to přeloží překladač a pak najdeš jednodušeji svoji chybu. Program na blikání budou mít určitě mezi příklady, nebudeš muset napsat ani řádek kódu v Céčku.
Teď ještě koukám na konec tvého výpisu chyb a řekl bych, že je problém s definičním souborem PICu.
Pak se taky podívej třeba sem.

PF
Uživatelský avatar
MiloPS3
Příspěvky: 279
Registrován: 07 srp 2010, 00:00

#3 Příspěvek od MiloPS3 »

skompilovat to slo ale jsou tam naky varovani ...

Kód: Vybrat vše

#include <xc.inc>

; Definice procesoru a zahrnutí definic registrů
    LIST    P=18F05Q40
   

; Definice proměnných
    ;CBLOCK  0x20
    COUNT1  equ   0x20
    COUNT2  equ   0x21
    ;ENDC

; Začátek kódu
    ORG     0x0000      ; Začátek programu na adrese 0x0000

; Hlavní program
START:
    CLRF    PORTA,0       ; Vymaž PORTA
    CLRF    LATA,0        ; Vymaž LATA
    CLRF    TRISA,0       ; Nastav všechny piny PORTA jako výstupní

BLINK:
    BSF     LATA, 0     ; Nastav pin RA0
    CALL    DELAY       ; Zavolej zpoždění
    BCF     LATA, 0     ; Vymaž pin RA0
    CALL    DELAY       ; Zavolej zpoždění
    GOTO    BLINK       ; Opakuj smyčku

; Podprogram pro zpoždění
DELAY:
    MOVLW   0xFF        ; Nastav WREG na 0xFF
    MOVWF   COUNT1,0      ; Ulož do COUNT1
    MOVLW   0xFF        ; Nastav WREG na 0xFF
    MOVWF   COUNT2,0      ; Ulož do COUNT2

DELAY_LOOP1:
    DECFSZ  COUNT1,F   ; Decrementuj COUNT1
    GOTO    DELAY_LOOP1 ; Opakuj, pokud není nula
    DECFSZ  COUNT2, F   ; Decrementuj COUNT2
    GOTO    DELAY_LOOP1 ; Opakuj, pokud není nula

    RETURN              ; Návrat z podprogramu

    END                 ; Konec programu

Kód: Vybrat vše

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make  -f nbproject/Makefile-default.mk dist/default/debug/test_18F05Q40.X.debug.hex
make[2]: 'dist/default/debug/test_18F05Q40.X.debug.hex' is up to date.

BUILD SUCCESSFUL (total time: 102ms)
Symbols unmodified. Previously loaded from F:/kopie_PIC/test_18F05Q40.X/dist/default/debug/test_18F05Q40.X.debug.elf...
Loading code from F:/kopie_PIC/test_18F05Q40.X/dist/default/debug/test_18F05Q40.X.debug.elf...
Program loaded with pack,PIC18F-Q_DFP,1.24.430,Microchip
Loading completed


jinak Xko je katastrofa ... :evil:
skus najit nakej sterej ekvivalent toho 18F05Q40 co pude v MPLAB IDE
Uživatelský avatar
pepe363
Příspěvky: 183
Registrován: 30 srp 2009, 00:00

#4 Příspěvek od pepe363 »

petrfilipi píše:Nevím jak tyto moderní PICy, ale u starších začínal program na adrese 4. I když tyto PICy mají, zda se, start opravdu na adrese 0.
A zkusil bych ještě jednu věc : stáhl bych jakýkoli kompilátor, třeba MikroC. V něm bych napsal krátký program v Céčku a nechal ho zkompilovat a zkusil bych ho nahrát do PICu. Bude-li to v pořádku, tak mezi přeloženými soubory bude i překlad do assembleru a pak i hex soubor ve strojovém kódu. A uvidíš, jak to přeloží překladač a pak najdeš jednodušeji svoji chybu. Program na blikání budou mít určitě mezi příklady, nebudeš muset napsat ani řádek kódu v Céčku.
Teď ještě koukám na konec tvého výpisu chyb a řekl bych, že je problém s definičním souborem PICu.
Pak se taky podívej třeba sem.

PF


Díky, mrknu na to
Uživatelský avatar
pepe363
Příspěvky: 183
Registrován: 30 srp 2009, 00:00

#5 Příspěvek od pepe363 »

MiloPS3 píše:skompilovat to slo ale jsou tam naky varovani ...

Kód: Vybrat vše

#include <xc.inc>

; Definice procesoru a zahrnutí definic registrů
    LIST    P=18F05Q40
   

; Definice proměnných
    ;CBLOCK  0x20
    COUNT1  equ   0x20
    COUNT2  equ   0x21
    ;ENDC

; Začátek kódu
    ORG     0x0000      ; Začátek programu na adrese 0x0000

; Hlavní program
START:
    CLRF    PORTA,0       ; Vymaž PORTA
    CLRF    LATA,0        ; Vymaž LATA
    CLRF    TRISA,0       ; Nastav všechny piny PORTA jako výstupní

BLINK:
    BSF     LATA, 0     ; Nastav pin RA0
    CALL    DELAY       ; Zavolej zpoždění
    BCF     LATA, 0     ; Vymaž pin RA0
    CALL    DELAY       ; Zavolej zpoždění
    GOTO    BLINK       ; Opakuj smyčku

; Podprogram pro zpoždění
DELAY:
    MOVLW   0xFF        ; Nastav WREG na 0xFF
    MOVWF   COUNT1,0      ; Ulož do COUNT1
    MOVLW   0xFF        ; Nastav WREG na 0xFF
    MOVWF   COUNT2,0      ; Ulož do COUNT2

DELAY_LOOP1:
    DECFSZ  COUNT1,F   ; Decrementuj COUNT1
    GOTO    DELAY_LOOP1 ; Opakuj, pokud není nula
    DECFSZ  COUNT2, F   ; Decrementuj COUNT2
    GOTO    DELAY_LOOP1 ; Opakuj, pokud není nula

    RETURN              ; Návrat z podprogramu

    END                 ; Konec programu

Kód: Vybrat vše

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make  -f nbproject/Makefile-default.mk dist/default/debug/test_18F05Q40.X.debug.hex
make[2]: 'dist/default/debug/test_18F05Q40.X.debug.hex' is up to date.

BUILD SUCCESSFUL (total time: 102ms)
Symbols unmodified. Previously loaded from F:/kopie_PIC/test_18F05Q40.X/dist/default/debug/test_18F05Q40.X.debug.elf...
Loading code from F:/kopie_PIC/test_18F05Q40.X/dist/default/debug/test_18F05Q40.X.debug.elf...
Program loaded with pack,PIC18F-Q_DFP,1.24.430,Microchip
Loading completed


jinak Xko je katastrofa ... :evil:
skus najit nakej sterej ekvivalent toho 18F05Q40 co pude v MPLAB IDE


Zkompilovat to šlo ? Dáš mi prosím screen obrazovky abych se podíval na verzi MPLABu a kompileru ?

Děkuju
petrfilipi
Příspěvky: 2901
Registrován: 13 zář 2005, 00:00

#6 Příspěvek od petrfilipi »

Fakt mrkni na ten můj odkaz - na konci je nějaká možnost nepoužívat MPLAB X.

PF
Uživatelský avatar
MiloPS3
Příspěvky: 279
Registrován: 07 srp 2010, 00:00

#7 Příspěvek od MiloPS3 »

verze 6.20 dneska stazena, mel jsem starou a tam tenhle pic nebyl
projekt v priloze

kdyz se to prelozi je to tam napsany ..

Kód: Vybrat vše

BUILD SUCCESSFUL (total time: 102ms) 
Přílohy
test_18F05Q40.zip
(7.86 KiB) Staženo 132 x
Uživatelský avatar
pepe363
Příspěvky: 183
Registrován: 30 srp 2009, 00:00

#8 Příspěvek od pepe363 »

Díky moc, už mi překlad konečně funguje ! :parmen:

Pro ostatní co by řešili stejný problém, vše řekne přiložený screen :wink:
Přílohy
Snímek obrazovky 2024-06-18 220135.jpg
Snímek obrazovky 2024-06-18 220135.jpg
Uživatelský avatar
pepe363
Příspěvky: 183
Registrován: 30 srp 2009, 00:00

#9 Příspěvek od pepe363 »

Tak bohužel, to že je kompilace úspěšná, nic neznamená :!:

Program po nahrátí do procesoru nefunguje. Kontroloval jsem zda běží vnitřní oscilátor a ten je v pořádku.
Ukázalo se že je v MPLABu nějaký krutý bug, jelikož pokud se pokusím program odsimulovat, dostanu chybu že na počáteční adrese 0x00 není žádná instrukce kterou by šlo vykonat.

Poradí mi někdo prosím jak řádně specifikovat začátek programu ? ORG není funkční.

Díky !
Uživatelský avatar
strg
Příspěvky: 27
Registrován: 14 říj 2004, 00:00

#10 Příspěvek od strg »

Toto by mohlo pomoct. :-)

Kód: Vybrat vše

                       ORG     0X00                          ;  Reset procesoru
                       GOTO    START


                        ORG      0X04                        ; Obsluha preruseni
INTERRUPT:       MOVWF   TMP_W
                             ;
                             ;
                             ;
                         MOVFW    TMP_W
                         RETFIE

; Hlavní program
START:
                        CLRF    PORTA,0       ; Vymaž PORTA
                        CLRF    LATA,0        ; Vymaž LATA
                        CLRF    TRISA,0       ; Nastav všechny piny PORTA jako výstupní
Uživatelský avatar
pepe363
Příspěvky: 183
Registrován: 30 srp 2009, 00:00

#11 Příspěvek od pepe363 »

Takhle to mám, ale prostě to nefunguje. A k velkému překvapení jsem zjistil že program memory je úplně, ale úplně prázdné. Co to proboha je za bug ?
Přílohy
Messenger_creation_4aafd7f6-0b58-4add-b236-31dbdf954d62.png
Messenger_creation_4aafd7f6-0b58-4add-b236-31dbdf954d62.png
Messenger_creation_db5a5283-ff5e-411d-a42d-d5f8c344cafe.png
Messenger_creation_db5a5283-ff5e-411d-a42d-d5f8c344cafe.png
Uživatelský avatar
MiloPS3
Příspěvky: 279
Registrován: 07 srp 2010, 00:00

#12 Příspěvek od MiloPS3 »

vsim jsem si toho uz predtim, tet sem to testoval a zapisuje se to do eeprom ... :lol:
funguje to nejak fak divne

Kód: Vybrat vše

#include <xc.inc>
   
; Definice procesoru a zahrnutí definic registr?
 PSECT resetVect, class=CODE, reloc=2;delta=0
resetVect:
    PAGESEL main
    goto main
   
PSECT code, delta=0
 
 ;ORG     0x7ff0
 ;ORG     00h
 
main:

    MOVLW   0x12        ; Nastav WREG na 0xFF
    MOVLW   0x34
    MOVLW   0x56
    goto    $-5

        PSECT   ResetVec,class=CODE,delta=2
    global  ResetVector
ResetVector:

    end     ResetVector                    ; Konec programu

tohle zas zapisuje kod ke konci a neprisel jsem na to jak to dostat na zacatek .. :roll:
Přílohy
Snímek obrazovky 2024-06-21 195321.png
Snímek obrazovky 2024-06-21 195321.png
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#13 Příspěvek od Mahoney »

Použij starší MPLABX, který MPASM ještě podporuje (v. 3.46 apod)
Uživatelský avatar
pepe363
Příspěvky: 183
Registrován: 30 srp 2009, 00:00

#14 Příspěvek od pepe363 »

To bohužel není řešení, protože tyhle staré verze pro změnu nepodporují můj PIC
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#15 Příspěvek od Mahoney »

Pokud nepotřebuješ debug (nepotřebuješ), tak použiješ IPE z novějšího (vším tím jsem už prošel).

Já to dělám tak, že používám externí editor, a kompilátoru jenom předhazuju.

Pokud je to MCU, které MPASM nezná, je třeba si napsat vlastní definici.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“