Problém s PIC12F1572

Zdravím všechny návštěvníky tohoto fóra
Chtěl bych Vás poprosit o pomoc a radu. Už nějaký čas se učím programovat PIC. Začal jsem s 12F629, 675 a teď chci přejít na 12F1572, kde bych využil možnost změny frekvence interního oscilátoru a hlavně změnu času WDT.
Narazil jsem ale na problém, že mnou používaná verze MPASM v5.51, ani PICkit3 v3.1 tento procesor nevidí a není v jejich seznamech. Programy používám na PC s Win 7, 32bit.
Po prohledání fór jsem nainstaloval na jiný PC s WIN 8, 64bit. novou verzi MPLAB X-IDE s MPASM v5.87. Zde už zmíněný procesor najdu, přeložím program do HEX a dokonce mi na tomto PC “funguje” i PICkit3. V seznamu PICkit3 sice procesor není, ale po manuálním vložení souboru include do jeho knihovny, jej dokáže automaticky detekovat. Soubor HEX přenesu do PIC, ale prográmek nefunguje.
Nevím ale, na co se mám zaměřit, kde je problém. Jestli v hlavičce programu a nastavení procesoru, nebo v komunikaci s PICkit3.

Můžete se mi prosím někdo mrknout na ten program, jestli tam nemám chyby, zvláště v nastavení procesoru, položky CONFIG a START. Tam si nejsem jistý. Samotný program jsem napsal jednoduchý, jen blikání LED. Jde mi teď o rozchození procesoru. Na PIC12F675 mi program funguje.

Nastavení PIC potřebuji jak je psáno v komentářích programu
Předem pěkně děkuji
Luboš

	LIST P=12F1572
	#include "p12f1572.inc"

	 
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOREN_OFF & _CLKOUTEN_OFF


__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LPBOREN_OFF & _LVP_ON




cblock     0x20

CNT1
CNT2
CNT3

endc

#define LED1 PORTA,0
#define LED2 PORTA,1
#define LED3 PORTA,2
#define TL_3 PORTA,3
#define TL_2 PORTA,4
#define TL_1 PORTA,5

	org 	00H
	goto 	START

;*************************************************************************************************************************

;***********************************zacatek programu ***************************************************************

START nop

	BANKSEL   PORTA 			
	CLRF 	PORTA 		;Init PORTA
	
	BANKSEL   LATA 		;Data Latch
	CLRF 	LATA 		
	
	BANKSEL   ANSELA 		
	CLRF 	ANSELA 		;digital I/O
	
	BANKSEL   TRISA 		
	movlw 	38H 			;port 3 4 5 vstup/port 0 1 2  výstup
	movwf 	TRISA 		
					
	BANKSEL  WPUA
	movlw  	30H			;nastavení wpu 4 5
	movwf  	WPUA		;ok
	
	BANKSEL   TRISA
	movlw  	6AH			;nastavení oscilátoru na 4MHz
	movwf  	OSCCON	

	BANKSEL   TRISA
	movlw	13H			;nastavení WDT na 512ms
	movwf	WDTCON

	clrf  	        PORTA		;vynuluj výstupy

;**************************** hlavní program *******

CYKLUS
bsf LED1 ;zapne LED1
call BLIK500 ;čekací smyčka
bcf LED1 ;vypne LED1
call BLIK500 ;čekací smyčka
clrwdt
goto CYKLUS ;

;**************************** cekací smycky **********************************************************************************

BLIK500 ;čekací smyčka 500ms
MOVLW D’11’
MOVWF CNT3
BLIK_LOOP1
MOVLW D’225’
MOVWF CNT2
BLIK_LOOP2
MOVLW D’66’
MOVWF CNT1
BLIK_LOOP3
DECFSZ CNT1,1
GOTO BLIK_LOOP3
DECFSZ CNT2,1
GOTO BLIK_LOOP2
DECFSZ CNT3
GOTO BLIK_LOOP1
RETURN

	end

Ktomu clrwdt sa to ani nedostane ked je wd 512ms a cakacia slucka 1000ms
A prejdi na Cko.

Ahoj
Jj, pravda, zapomněl jsem tam dát další clrwdt po zhasnutí LED.
Mám ale spíš problém s nastavením bank a registrů. Mohl by se mi na to prosím někdo mrknout?
Děkuji

Jo a na Cčko zatím nebudu přecházet. Učím se Asm. Jsem nováček v tomto směru :astonished:)
Ještě jednou děkuji všem, kdo mi poradí
L.

BANKSEL TRISA
movlw 13H ;nastavení WDT na 512ms
movwf WDTCON

BANKSEL PORTA
clrf PORTA ;vynuluj výstupy

Místo GOTO dej BRA a nuluj WDT.

Tento typ PIC má i výstupní latche, nemělo by se zapisovat do nich?

Mělo,ale jde to i do PORTx.

[forum.mcontrollers.com/t/goto-nebo-bra-kdy-je-pouzit/3243/1)

Tak z toho nejsem ani trochu moudrej :astonished:)

Pokud to máš takhle tak používej bra dokud ti při kompilaci nenapíše error.

Ahoj, dal jsem BRA a kompilace i program je v pohodě. Prosím Tě a můžu používat BRA místo GOTO vždy. V pár programech mám i skoky s použitím dolaru a nerozumím téhle Tvé větě:

“Bacha na to!!!když skáčeš pomocí bra $+6 nebo bra $-6 tak to skočí o 3 řádky, ALE goto $+6 nebo goto $-6 skočí při líchém počtu instrukcí o 4.”

Nerozumím, proč skáče o jiný počet řádků, než je zadáno.
Děkuji

Já datasheet tohohle švába nečetl,ale to skákání pomoci $ se týká hlavně pro 18F.

Jde o to že PIC počítá po 2, nejde skákat po lichých číslech. když už dáš někam $ tak si to v simulaci ověř.

Bra $ + 10 není to samé jako goto $ + 10, ale není to pravda vždy.

Jsem po noční a nerad bych se do toho zamotal :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

No já používám GOTO $ +/- u PIC12F675 a jede to v pohodě. Je fakt že jsou to sudá čísla. Lichá jsem nikde nepsal, tak nevím.
Simulátor je teprve v plánu, zatím je to pro mě španělská vesnice, jako ostatně spousta dalších věcí. Zatím se učím a :slight_smile:
Tenhle PIC jsem chtěl vyzkoušet, protože je o 10,-Kč levnější než 675, pro mou aplikaci plně dostačující a má mnohem víc možností v oblasti časování WDT a pracovní frekvence.
Pracuji zrovna na bateriově napájeném snímači otáček a jde mi především o snížení spotřeby.
Děkuji za trpělivost :slight_smile:
L.

Ahoj tohle se týká 18F řady, ta funguje trochu jinak.
PIC12,16 pokud si vzpomínám dobře, tak má 14b programové slovo a jsou v skokách možné jak liché tak sudé adresy. U PIC18 je 16b programové slovo a tam si to zjednodušili v návrchu tak, že se skáče jen po sudých adresách, lichá je na půlku řádku a to nejde.

Na zápis do výstupních pinů si zvykni používat odpovídající LATx pokud to ten konkrétná PIC má. Do PORTx se nezapisuje, tam se jen čte stav vstupů. Ono to sice u některých brouků funguje, ale jen u některých, navíc se pak můžeš dostat do R-M-W pasti a tato chyba/ nedokonalost tě může pěkně ztrestat.

Osobně bych na začátek používal GOTO než BRA. BRA dosáhne jen 127 adres daleko, GOTO obsáhne celou paměť. Ale chápu kam tím Honza míří, šetří to paměť.

BRA $+2 je to stejné co GOTO $+2. Znak dolaru je aktuální adresa PC, takže $ + 2 skočí o 2 adresy dál.

Ahoj, děkuji za další rady.
Jen nerozumím této větě: *Na zápis do výstupních pinů si zvykni používat odpovídající LATx pokud to ten konkrétná PIC má. Do PORTx se nezapisuje, tam se jen čte stav vstupů.

Můžeš mi prosím upřesnit, kde mám tuto chybu?
Děkuji pěkně předem
L.*

Luba : v #DEFINE máš
#DEFINE LED1 PORTA,0
tam máš mít LED1 LATA,0

Mrkni do datasheetu na stranu 109, tam je port nakreslený jak je poskládaný. Většina PICů už to má takhle a u spousty novejších řad už zápisem do PORTx ne ti změna nepromítne na výstupní piny.

Ahoj
aha, už to chápu. No, používal jsem to tak u 675 a tak jsem to jen okopčil.
Opravím to. Děkuji :slight_smile:

No a pro všechny, komu by pomohlo mé nastavení 1572 v úvodu vlákna, tak si doplňte toto:

BANKSEL OPTION_REG
movlw 00H
movwf OPTION_REG

Na jednoduchém blikání LED to nebylo poznat, ale jak jsem dal složitější program, dělal mi psí kusy.
Je potřeba vynulovat OPTION_REG

Můžeš použít přímo CLRF OPTION_REG
Nicméně, nevidím jedinný důvod k tomu ho nulovat a na to co tam máš v assembleru nemá vliv.

Ahoj, Jj, taky varianta.
No, jestli jsem dobře četl v datasheetu, tak bez nulování OPTION_REG nelze povolit jednotlivé pull-upy - strana 115, jestli to správně chápu. V každém případě po tomto zápisu vše chodí jak má.
Děkuji za příspěvěk.

Ještě dodám… jak píšu v minulém příspěvku, tak s jednoduchým blikáním LED jak mám na začátku vlákna to chodilu dobře. To byl ale jen prográmek na rozběhnutí PIC. Teď tam píšu jiný, s infrasnímačem a Schmitt KO a tam mi to zlobilo.