PIC16F627 nefunguje

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

Moderátor: Moderátoři

Zpráva
Autor
seeter

PIC16F627 nefunguje

#1 Příspěvek od seeter »

Dobrý den, udìlal jsem takovou hloupou aplikaci, kde mi bliká jedna LED dioda. Odzkoušel jsem to na emulátoru od Asixu a vše fungovalo. Poté jsem program nátáhl do procesoru a když jsem jej spustil nic se nestalo. Netušim ani ,kde bych mìl hledat chybu. Tiš￾ák se zdá být v poøádku a program taky. Ovšem v manuálu od Microchipu sem nalezl rùzné promìnné, které se definují, ale u nikoho jsem je nenašel v programu. Prosím o pomoc...díky...

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#2 Příspěvek od jankop »

Dej sem svůj program a schéma zapojení. Pak budem mít o čem diskutovat.

Uživatelský avatar
Sunmay
Příspěvky: 171
Registrován: 09 kvě 2006, 02:00
Bydliště: Morava
Kontaktovat uživatele:

#3 Příspěvek od Sunmay »

Zkusil bych změnit oscilátor z RC na XT ;)
Jak sem se dostal k elektrotechnice? No to je jednoduché, kdy sem byl malý měl sem strašně moc rád stavebnice a to mi zůstalo ... a řekněte mi, která stavebnice má víc součástek :D

seeter

#4 Příspěvek od seeter »

Tady sou ty soubory...
Přílohy
schema.jpg
(14.12 KiB) Staženo 50 x
One.ASM
(1.13 KiB) Staženo 74 x

Uživatelský avatar
Sunmay
Příspěvky: 171
Registrován: 09 kvě 2006, 02:00
Bydliště: Morava
Kontaktovat uživatele:

#5 Příspěvek od Sunmay »

A nastavil si správně ty konfigureční bity (jako že chces používat krystal, že nechces používat watchdog atd.) ?
Jak sem se dostal k elektrotechnice? No to je jednoduché, kdy sem byl malý měl sem strašně moc rád stavebnice a to mi zůstalo ... a řekněte mi, která stavebnice má víc součástek :D

seeter

#6 Příspěvek od seeter »

tak to sem teda nenastavil...a ani nevim, jak se to dìlá... :-(

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#7 Příspěvek od jankop »

Zkus třeba následující. Direktiva __CONFIG nastavuje mimo jiné i typ oscilátoru.

Kód: Vybrat vše

 list      p=16F627             ; list directive to define processor
    #include <P16f627.inc>      ; processor specific variable definitions
    errorlevel -302
    __CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC

   
;--------- CONSTANTS DEFINITIONS---------------------------------------
    #define     RAM_Start       0x20 
    #define     TIME0           D'30'
    #define     TIME1           D'30'
    #define     TIME2           D'30'
;--------- VARIABLE DEFINITIONS ---------------------------------------
    CBLOCK  RAM_Start
TMP0 
TMP1 
TMP2 
    ENDC
;----------------------------------------------------------------------
        ORG     0x000           ; Processor reset vector
reset   nop
        goto init               ; Go to beginning of program
        ORG     0x004           ; interrupt vector location
        nop
init    
        BSF STATUS,RP0
        MOVLW B'00000000'
        MOVWF TRISA
        MOVLW B'00000000'
        MOVWF TRISB
        BCF STATUS,RP0
;------------------------------ 
        MOVLW TIME2 
        MOVWF TMP2
        MOVLW TIME1
        MOVWF TMP1
        MOVLW TIME0
        MOVWF TMP0
        DECFSZ TMP0,F
        GOTO $-1
        DECFSZ TMP1,F
        GOTO $-5
        DECFSZ TMP2,F
        GOTO $-9
;------------------------------
FIRST   MOVLW B'00000100'   
        MOVWF PORTB
;
        MOVLW TIME2
        MOVWF TMP2
        MOVLW TIME1
        MOVWF TMP1
        MOVLW TIME0
        MOVWF TMP0
        DECFSZ TMP0,F
        GOTO $-1
        DECFSZ TMP1,F
        GOTO $-5
        DECFSZ TMP2,F
        GOTO $-9    
;       
        MOVLW B'00000000'   
        MOVWF PORTB

;
        MOVLW TIME2
        MOVWF TMP2
        MOVLW TIME1
        MOVWF TMP1
        MOVLW TIME0
        MOVWF TMP0
        DECFSZ TMP0,F
        GOTO $-1
        DECFSZ TMP1,F
        GOTO $-5
        DECFSZ TMP2,F
        GOTO $-9
        GOTO FIRST
;
    END 
Nebo ještě lépe takto:

Kód: Vybrat vše

list      p=16F627             ; list directive to define processor
    #include <P16f627.inc>      ; processor specific variable definitions
    errorlevel -302
    __CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC

   
;--------- CONSTANTS DEFINITIONS---------------------------------------
    #define     RAM_Start       0x20 
    #define     TIME0           D'30'
    #define     TIME1           D'30'
    #define     TIME2           D'30'
;--------- VARIABLE DEFINITIONS ---------------------------------------
    CBLOCK  RAM_Start
TMP0 
TMP1 
TMP2 
    ENDC
;----------------------------------------------------------------------
        ORG     0x000           ; Processor reset vector
reset   nop
        goto init               ; Go to beginning of program
        ORG     0x004           ; interrupt vector location
        nop
init    
        BSF STATUS,RP0
        MOVLW B'00000000'
        MOVWF TRISA
        MOVLW B'00000000'
        MOVWF TRISB
        BCF STATUS,RP0
;------------------------------ 
        call delay
FIRST   MOVLW B'00000100'   
        MOVWF PORTB
        call delay
        MOVLW B'00000000'   
        MOVWF PORTB
        call delay
        GOTO FIRST
;------------------------------
delay
        MOVLW TIME2
        MOVWF TMP2
del2    MOVLW TIME1
        MOVWF TMP1
del1    MOVLW TIME0
        MOVWF TMP0
del0    DECFSZ TMP0,F
        GOTO del0
        DECFSZ TMP1,F
        GOTO del1
        DECFSZ TMP2,F
        GOTO del2
        return
;
    END 

seeter

#8 Příspěvek od seeter »

tak jsem to celé zkopíroval a prohnal emulátorem, ten to vše pøijal až na _DATA_CP_OFF - není definovaná a tak jsem jí smazal... když sem to pustil na emul. tak to fungovalo...ale po natažení do procesoru to poøád nefunguje...chtìl jsem se zeptat na pár vìcí: proè tam jsou na zaèátku programu pøíkazy pro pøerušení a proè tam jsou pøidané promìnné jako TIME0,1 a 2? co znamená errorlevel - 302 a co znamenájí ty definice v øádku a co znamená CBLOCK RAM_Start ? :oops:

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#9 Příspěvek od jankop »

Kód: Vybrat vše

_DATA_CP_OFF - není definovaná 
zřejmě je v tvém kompileru starší verze souboru P16f627.inc, to lze snadno napravit. V prostředí MPLAB 8.0 je to legální konstrukce.

Kód: Vybrat vše

ale po natažení do procesoru to pořád nefunguje
Jaký používáš krystal? Do 4MHz je vhodné použít _XT_OSC místo _HS_OSC v direktivě __CONFIG.

Kód: Vybrat vše

 proč tam jsou na začátku programu příkazy pro přerušení  

První NOP na adrese 0x000 je rezervace pro ICD - In Circuit Debugging, tebe se to s emulátorem netýká, můžeš to vypustit. ORG 0x004 rezervuje prostor pro přerušení a na místo budoucího vektoru jsem vložil tu druhou NOP. Žádné přerušení v programu neexistuje ale brzo to budeš potřebovat.

Kód: Vybrat vše

proč tam jsou přidané proměnné jako TIME0,1 a 2
To nejsou proměnné, nýbrž konstanty.Chtěl jsem ti prezentovat, že je naprosto zcestné používat přímo v programu číselné konstanty. Pokud bys chtěl v původním programu konstantu D'30' změnit, musel bys to dělat na třech místech. Ve složitějším programu je to jen zdrojem chyb.

Kód: Vybrat vše

errorlevel - 302 
Je příkaz, který potlačí chybová hlášení o přepínání bank. U složitějších programů budeš moc rád, že ho znáš, protože tohle hlášení nic neřeší, ale hodně překáží.

Kód: Vybrat vše

CBLOCK RAM_Start 
Předtím definovaná konstanta RAM_Start ukazuje na počátek použitelné RAM. Příkaz CBLOCK definuje počátek pole uživatelských promněných. Mezi CBLOK a ENDC píšeš svoje proměnné a nemusíš jim přiřazovat absolutní adresy třeba pomocí EQU, jak jsi to udělal ty.

Kód: Vybrat vše

co znamenájí ty definice v řádku  
Je to nastavení jednotlivých konfiguračních bitů procesoru. Jejich význam najdeš v datasheetu třeba pod pojmem configuration bits.

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#10 Příspěvek od jankop »

Pokud v direktivě __CONFIG dáš na místo parametru _HS_OSC parametr _INTRC_OSC_NOCLKOUT, tak by měl být použit interní oscilátor. Připojený krystal nebude ničemu vadit.

seeter

#11 Příspěvek od seeter »

tak to teda klobouk dolù, to jste teda dobrej... :-) díky moc za vysvìtlení...ještì se na to kouknu...

seeter

#12 Příspěvek od seeter »

ten krystal mám 5 MHz...

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#13 Příspěvek od jankop »

Krystal může spolehlivě kmitat s emulátorem, ale s reálnou PIC nemusí. Chce to zkusit nejprve asi s tím interním oscilátorem. Bez inicializace pracuje na 4MHz. Použij

Kód: Vybrat vše

__CONFIG _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
a uvidíš.

seeter

#14 Příspěvek od seeter »

tak _INTRC_OSC_NOCLKOUT to jako pøíkaz nebere, ale to by nebyl problém, když tam ten krystal je pøipojenej, ale poøád to nefunguje,...jako b to vùbec nežilo a pøitom je napìtí jak na plusu tak na MCLR a když tam program vypálím, tak ho i zpìtnì kontroluji, zda tam je... a vždy tam je... :-(

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#15 Příspěvek od jankop »

Najdi soubor P16f627.inc a zkontroluj parametr _INTRC_OSC_NOCLKOUT. Bude tam nejspíš, jen v trochu jiné podobě.
S tímto parametrem krystal nepotřebuješ. Čím vlastně programuješ? Programuješ i s konfiguračním slovem? Přečti kompletně obsah procesoru a pošli mi ho emailem.

Odpovědět

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