Sari la conținut
ELFORUM - Forumul electronistilor

PIC12F675 nu merge


criss

Postări Recomandate

Buna am o problema cu un PIC12F675, nu merge.Adica am luat acest exemplu ca sa il testez si nu merge.Picul lam conectat astfel:pinul1 '+'pinul8 '-'pinul3 o rezistenta inseriat un led si apoi la masa. ma gandesc ca oscilatorul intern nu merge sau ceva eu nu am facut bine.si ce trebuie sa setez pe ICprog,mai precis la oscilator?(la diferite setari imi sta ledul aprins iar la altele stins,dar el trebuie sa palpaie).Unde am gresit?folosesc un programator Multi PIC Programmer 5v2.Am folosit mai multe programe gasite pe net dar nici unul nu a mers,+am gasit si un exemplu in microC si nici acesta nu merge. void main() { TRISIO = 0; do { GPIO = 0xFF; Delay_ms(1000); GPIO = 0; Delay_ms(1000); } while(1); }

Link spre comentariu
  • Răspunsuri 24
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Abram Burel

    7

  • criss

    5

  • sofian

    2

  • puiu

    1

Top autori în acest subiect

Sunt cel putin 2 chestii care iti pot crea probleme.1. 12F675 are si comparator si convertor A/D. Daca nu setezi registrii ANSEL si CMCON corect, nu o sa-ti mearga I/O simplu.Cod asembler: BSF STATUS, RP0 ; CMCON e in bancul 1 MOVLW 0x07 ; dezactivare comparator MOVWF CMCON ; BCF STATUS, RP0 ; ANSEL e in bancul 0 CLRF ANSEL ; dezactivare convertorCod limbaje de nivel inalt (poate mai trebuie un ; in functie de limbaj): CMCON=7 ANSEL=02. Daca in programele ASM nu s-a folosit directiva CONFIG sau ai lucrat intr-un limbaj de nivel inalt, nu ai sansa ca bitii de configurare sa fie setati corect.Pentru ambele situatii, citeste foaia de catalog, verifica si seteaza corect.

Link spre comentariu

salut Mama bagat dea binelea in treaba....am crezut ca cu acest microcontroler o sami mearga mai usor(fiind mai ieftin am optat pt ea).Limbajul cu care fac testele este C.ai putea sami dai un exemplu(aprinderea si stingerea unui led pe pinul3) in asm sa am de unde porni.am atasat cateva poze cu setarea programatorului(ce trebuie sa setez la oscilator?) si a fisierului config din mikroC.

Link spre comentariu

Hai sa incerc. N-am unul de-a gata, dar incropim din ce avem.

Mai intai o erata: cele doua registre CMCON si ANSEL sunt exact pe dos de cum spuneam anterior :(

Atentie la directiva CONFIG. Ea arata cum trebuie sa arate si bitii de configurare setati in programator sau in C.

_WDT_OFF nu-ti trebuie watchdog in mod normal

_INTRC_OSC_NOCLKOUT asta este oscilatorul intern

_CP_OFF cod neprotejat

_CPD_OFF data neprotejate

_BODEN_ON nu e esential, dar nu strica sa fie ON

_MCLRE_ON pinul MCLR trebuie conectat la +5V printr-o rezistenta de 1-10K

_PWRTE_ON ajuta la o pornire normala cu orice sursa de alimentare

Nu am pus rutina de delay ca nu-mi plac. Gasesti pe net rutine "standard".

Ledul il poti pune pe oricare din pinii GPIO0-2, fie spre masa fie spre +5V cu o rezistenta de 330ohmi (220ohmi - 10K :) in functie de led).

In ceea ce priveste imaginile, trebuie sa alegi o optiune pentru fiecare "pereche" (de exemplu _WDT_ON _WDT_OFF). E mai sanatos, chiar daca compilatorul alege el ceva. Am mai lucrat si eu cu mikroPascal si n-am priceput de ce au preferat ei casutele alea de bifat, pentru niste chestii care sunt ON/OFF)

	LIST	P=12F675	#INCLUDE	<P12F675.INC>	__CONFIG	_WDT_OFF & _INTRC_OSC_NOCLKOUT & _CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_ON & _PWRTE_ON; CODE	ORG	0	GOTO	_START	ORG	4	RETFIE_START:	BCF	STATUS,RP0	;IN BANK0	CLRF	GPIO	;  CLEAR GPIO	MOVLW	0x07	;  DEACTIVATE COMPARATOR	MOVWF	CMCON	;			;	BSF	STATUS,RP0	;IN BANK 1	CALL 	0X3FF	;  CALIBRATE OSCILATOR	MOVWF	OSCCAL	;	CLRF	ANSEL	;	MOVLW	0x38	;  GPIO0-2 OUT, 3-5 IN	MOVWF	TRISIO	;			;	BCF	STATUS,RP0	;IN BANK 0			;LOOP:	MOVLW	07FH	;	MOVWF	GPIO	;	CALL	DELAY	;	CLRF	GPIO	;	CALL	DELAY	;	GOTO	LOOP	;DELAY:; ENTER ANY DELAY PROCEDURE HERE	RETURN;	END
[/code]
Link spre comentariu

salut mersi pt informatii dar nu stiu dece imi da eroare cand incerc sa compilez codul.folosesc MPlab.am facut un nou proiect pt acest tip de procesor dar imi da eroare.Warning[215] D:\PROJECT\MLAB\TEST_LED\TEST_LED.ASM 1 : Processor superseded by command line. Verify processor symbol.Error[129] D:\PROJECT\MLAB\TEST_LED\TEST_LED.ASM 2 : Expected (END)am observat ca la mai multe fisiere imi da eroarea.

Link spre comentariu

pana la urma am rezolvat cu iesirile in asm si in C. cu configul a fost problema.

 

list p=12f675	include "p12f675.inc" __CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF &_PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUTsmall_delay_tmp	equ	0x20long_delay_tmp	equ	0x21	goto mainsmall_delay:	movlw 0xff	movwf small_delay_tmpsmall_delay_L1:	decfsz small_delay_tmp, F	goto small_delay_L1	return; ----------------------------	long_delay:	movwf long_delay_tmplong_delay_L1:	call small_delay	decfsz long_delay_tmp, F	goto long_delay_L1	returnmain:	bcf STATUS, RP0	clrf GPIO	movlw 0x7	movwf CMCON ; disable comparator	bsf STATUS, RP0	movlw 0x0	movwf TRISIO ; All pins outputs	bcf STATUS, RP0infinite:	bcf GPIO, GP0	movlw 0x82	call long_delay	bsf GPIO, GP0	movlw 0x82	call long_delay;***************************	bcf GPIO, GP2	movlw 0x82	call long_delay	bsf GPIO, GP2	movlw 0x82	call long_delay	goto infinite		end

Daca nu te deranjez cum pot comanda o intrare?si o iesire deodata.

Ex. GP5 intrare(pt intrerupator)

GP4 iesire

in acest caz iesirile sau intarile(dupa caz) trebuie setate pt fiecare port?

 

Si inca o intrebare portul GP3 ii port doar pt intare si reset?

Multumesc

Link spre comentariu

Chiar "deodata" nu poti, pentru ca la un moment dat nu se executa decat o instructiuni si aceasta nu poate fi decat fie de "citire", fie de "scriere".Setarea unuia din cei 6 pini ai portului GPIO se face prin setarea corespunzatoare a bitilor in registrul TRISIO: 1 pentru intrare si 0 pentru iesire.Da GP3 este doar intrare sau pin de reset sau pin pentru programare.Mai multe detalii in foaia de catalog. Fara sa citesti cu atentie si sa te straduiesti sa intelegi ce scrie in ea e greu sa progresezi (daca nu imposibil la un moment dat).

Link spre comentariu

am inceput sa citesc foaia de catalog dar nu inteleg mai nimica de acolo.ai putea da un exemplu pt acesta: vreau sa am o iesire(digitala) pe GP0 si o intrare pe GP1.si inca ceva daca am aplicat un semnal la o intrare (intrerupator) pe o alta poarta sa am un semnal de iesire(pe moment).daca ai putea sami dai ceva link de tutorial cred ca as intelege mai bine decat din foaia de catalog.multumesc

Link spre comentariu
  • 4 săptămâni mai târziu...
Vizitator zundapp

Salut!

Pentru ca tot e vorba de 12F675, ma confrunt cu o problema:

pentru 3 pini de intrare (GP1/2/4) am activat PullUp-urile si pe aceste intrari folosesc 3 jumperi care pot conecta intrarile la masa sau nu (in cazul asta pullup-urile tinindu-le in "1").

Problema este ca PullUp-urile functioneaza numai cind vor, uneori da alteori nu. Banuiesc (si va intreb) ca atunci cind pe o intrare aflata "in aer" daca este activ PullUp-ul, daca masor cu multimetrul ar trebui sa gasesc "1" - ceea ce uneori se intimpla, alteori nu...

Cu cei 3 jumperi incerc sa setez durata unei temporizari. Problema e ca de cele mai multe ori, indiferent de cum sint pusi jumperii programul porneste ca si cum toate intrarile ar fi in "0", desi acestea sint in aer (cu PullUp-ul intern activat).

Nu imi dau seama ce gresesc si ii rog pe cei mai experimentati sa ma ajute (Multumesc!).

Codul ar fi cam asa:

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

#include "p12f675.inc"

__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

 

bsf STATUS,RP0 ; Sel Bank 1

 

movlw b'00000000'

movwf PCON

movlw b'00111110' ; Specifiy GPIO port direction

movwf TRISIO ; Set GPIO ports as xxIIIIIO

movlw b'01111111'

movwf OPTION_REG ;0xxx.xxx - PullUp=enable

movlw b'00110110'

movwf WPU ;PullUp=enable for GP1/GP2/GP4/GP5

movlw b'01010000'

movwf ANSEL

 

bcf STATUS,RP0 ; Sel Bank 0

 

movlw b'00000111' ; 0000.0111 - comparator= OFF

movwf CMCON ;

movlw b'00000000' ;

movwf ADCON0 ;

 

cblock 0x20

T2

T3

endc

 

;************************************ PROGRAM ************************************

 

_START call _WD

bcf GPIO, GP0 ;out=0

 

btfss GPIO, GP5 ;

goto _START

 

btfsc GPIO, GP4 ;J1

goto _x ;1 //// 1xx

goto _k ;0 //// 0xx

 

_k btfsc GPIO, GP1 ;J2

goto _p ;1 //// 01x

goto _t ;0 //// 00x

 

_x btfsc GPIO, GP1 ;J2

goto _y ;1 //// 11x

goto _z ;0 //// 10x

 

_p btfsc GPIO, GP2 ;J3

goto _8 ;1 //// 011

goto _4 ;0 //// 010

 

_t btfsc GPIO, GP2 ;J3

goto _2 ;1 //// 001

goto _1 ;0 //// 000

 

_y btfsc GPIO, GP2 ;J3

goto _120 ;1 //// 111

goto _60 ;0 //// 110

 

_z btfsc GPIO, GP2 ;J3

goto _30 ;1 //// 101

goto _15 ;0 //// 100

 

 

_1 movlw d'10' ;1min

movwf T2 ;

movlw d'1' ;

movwf T3 ;

goto _1A ;

 

_2 movlw d'20' ;2min

movwf T2 ;

movlw d'1' ;

movwf T3 ;

goto _1A ;

 

_4 movlw d'40' ;4min

movwf T2 ;

movlw d'1' ;

movwf T3 ;

goto _1A ;

 

_8 movlw d'80' ;8min

movwf T2 ;

movlw d'1' ;

movwf T3 ;

goto _1A ;

 

_15 movlw d'150' ;15min

movwf T2 ;

movlw d'1' ;

movwf T3 ;

goto _1A ;

 

_30 movlw d'150' ;30min

movwf T2 ;

movlw d'2' ;

movwf T3 ;

goto _1A ;

 

_60 movlw d'150' ;60min

movwf T2 ;

movlw d'4' ;

movwf T3 ;

goto _1A ;

 

_120 movlw d'150' ;120min

movwf T2 ;

movlw d'8' ;

movwf T3 ;

goto _1A ;

 

_1A call _WD

....................

....................

====etc====

....................

....................

goto _START

_WD

CLRWDT

bsf STATUS,RP0

movlw b'11111111'

movwf OPTION_REG

bcf STATUS,RP0

return

 

end

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

Link spre comentariu

Din documentatia tehnica a lui PIC12F675:3.2.1 WEAK PULL-UPEach of the GPIO pins, except GP3, has an individuallyconfigurable weak internal pull-up. Control bits WPUxenable or disable each pull-up. Refer to Register 3-3.Each weak pull-up is automatically turned off when theport pin is configured as an output. The pull-ups aredisabled on a Power-on Reset by the GPPU bit(OPTION<7>).

Link spre comentariu

Cam ciudat layout-ul programului. Ma refer la ordinea declaratiilor:- CBLOCK dupa initializare- lipsa ORGRevenind la programul propriu-zis, cum vrei tu sa vada pullup-urile daca la _START chemi _WD si aici setezi bitul 7 din OPTION_REG, adica tocmai ala care ar trebui sa... activeze pullup-urile (si care e setat corect la initializare) :rolleyes: Ceea ce ma mira este ca zici ca merge cateodata, desi nu zici ca ar merge cum trebuie :)

Link spre comentariu
Vizitator zundapp

Multumesc Abram Burel!Mesteru'-i mester dom'le...Ciudat e ca uneori (rareori) mergea, ciudat rau... :rolleyes: ORG? In datasheet-ul lui 12f675 nu se aminteste mai nimic... Ce e aia?

Link spre comentariu

ORG e o declaratie a asamblorului care ii spune unde sa locateze codul in hex (de la ce adresa). Implicit o ia de la 0, deci n-ar fi nevoie de o declaratie explicita, dar pentru eleganta codului nu strica sa incepi secventa de program cu ORG 0.Asa ceva tine de mediul de programare (in cazul asta asamblor) si nu de foaia de catalog a PIC-ului.Un layout "normal" ar putea fi:Directive (CONFIG, RADIX, ERROR)Definire variabile (CBLOCK)Definire constante (DEFINE)Cod de inceput ORG 0 GOTO _MAIN ORG 4 ; optional GOTO _ISR ; optionalCod principal_MAIN...Cod intreruperi_ISR...Cod subrutine

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări