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, 00: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, 00: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 111 x
One.ASM
(1.13 KiB) Staženo 123 x
Uživatelský avatar
Sunmay
Příspěvky: 171
Registrován: 09 kvě 2006, 00: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, 00: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, 00: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, 00: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, 00: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, 00: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ů“