Sari la conținut
ELFORUM - Forumul electronistilor

Initzializare GPIO la 12f675


Postări Recomandate

Salutare mesterilor

 

Am shi eu o problema ca ma cam 'nevreaza: vreau o aplicatzie de comanda de triac, adica vreau un pic12f675 sa-mi comande in faza un triac. Vreau sa-mi aprinda progresiv becul, sa nu il mai arda ca e nasol de schimbat. Merge tot mai putin initzializarea portului. Vreau asa:

 

; GP0 analog maxi in - intrare analogica de la un cursor de potentziometru,

; GP1 analog rate in- intrare analogica de la un cursor de potentziometru,

; GP2 sync in, 3Mohm to phase- Intrerupere, de faza 0 a alimentarii

; GP3 on/off, connected to Vcc via 10Kohm resistor- nimplementat inca

; GP4 timeout shutdown reserve input jumper, uses internal pullup resistor - neimplementat

; GP5 triac pulse out, positive- ieshire de comanda a grilei triacului

 

 

iata codul pentru initzializare

 

init bcf INTCON, GIE ; disable all interrupts

 

bsf STATUS, RP0 ; Bank 1

call 3FFh ; Get the cal value

movwf OSCCAL ; Calibrate

bcf STATUS, RP0 ; Bank 0

 

clrf GPIO ; clear port

movlw 0x07 ; all digital/ no need for comparator

movwf CMCON

 

movlw 0xff ; prima secventza de test

movwf GPIO ;

 

bsf STATUS, RP0 ; bank1

dirset movlw b'00011111' ; all inputs but GP5

movwf TRISIO ; configure them

bcf STATUS, RP0 ; bank0

 

movlw 0xff ; a doua secventza de test

movwf GPIO ;

 

bsf STATUS, RP0 ; bank1

anaset movlw b'00110011' ; AN0, AN1 analog input, rest digital, fRC ADC freq

movwf ANSEL ;

bcf STATUS, RP0 ; bank0

 

movlw b'00000001' ; enable ADC, Left justified

movwf ADCON0 ;

 

; the timer0, timer0, GP2 must generate interrupts, so enable their interrupt

 

movlw b'01110000' ;

movwf INTCON ; enable the pheripheral interr, TMR0 and INT/GP2

 

bsf STATUS, RP0 ; bank1

movlw b'00000001' ;

movwf PIE1 ; enable only timer1 interrupt

bcf STATUS, RP0 ; return to

bcf STATUS, RP1 ; bank0

 

movlw b'00000000' ;

movwf T1CON ; timer, not enabled yet, no prescaler

 

movlw 0x00 ; timer1 start HI byte

movwf TMR1L ;

movlw 0x00 ; timer1 start LO byte

movwf TMR1H ;

 

 

clrwdt ;Clear WDT

clrf TMR0 ;and tmr0

 

bsf STATUS, RP0 ; bank1

movlw b'01000010' ; 8x prescaler, to TMR0 as timer, GP2 positive interr

movwf OPTION_REG ;

movlw b'00010000' ; WPU only GP4

movwf WPU ;

bcf STATUS, RP0 ; return to

bcf STATUS, RP1 ; bank0

 

bcf faza

bcf eor ;

 

movlw 0xFF ; test

movwf GPIO ; test

clrf GPIO ; test

 

bsf GPIO, 0x05 ; test

bcf GPIO, 0x05 ; test

bsf INTCON, GIE ;

 

 

toate secventzele de test sunt pentru a incerca controlul asupra lui GP5, shi fiecare e eshuata. chiar daca scriu pe tot portul GPIO, chiar daca fac bcf ori bsf. Portul este setat ca I/O general, dezactivat oscilator de clk, dezactivat oscilator ptr TMR1, nu este clock in ptr nimeni dar nu shtiu cine il controleaza. Unde am greshit?

 

EDITAT:

 

list p=12F675

radix hex

include P12F675.INC

__CONFIG _CPD_OFF&_CP_OFF&_BODEN_OFF&_MCLRE_OFF&_WDT_OFF&_INTRC_OSC_NOCLKOUT

 

sa nu uit config wordul.

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

Top autori în acest subiect

Zile populare

Top autori în acest subiect

Initializeaza CMCON si ANSEL *inainte* sa incerci sa te joci cu GPIO. Cele doua secvente de test ale tale sunt ambele inainte de a configura corect ANSEL. La reset, ANSEL trece totul pe analogic si trebuie sa il comuti tu pe digital resetand la 0 I/O-urile corespunzatoare.Secventa asta merge la mine pe simulator. Folosesc MPLAB IDE 6.30.Cirip****************************;[initializarile tale din main... bla, bla....] bsf STATUS, RP0 ; bank1dirset movlw b'00000000' ; all inputs but GP5 movwf TRISIO ; configure them movlw b'00110000' movwf ANSEL ; bcf STATUS, RP0 ; bcf STATUS, RP1 ; bank0bucla movlw 0xff movwf GPIO ; clrf GPIO goto bucla

Link spre comentariu

Salut Cirip shi merci fain de raspunsul rapid.Pana la urma inclin sa cred ca este ceva bug de MPLAB. Nu am nici un motiv sa cred ca secventza pe care mi-ai dat-o nu ar merge, mi se pare 100% ok, dar uite ca nici asta nu merge sub MPLAB 5.70. :shock: :shock: :shock: Eu folosesc 5.70 pentru ca (macar credeam...) este ultima versiune fara bug-uri care suporta ICD1, ca de ICD2 n-am inca bani.Ca sa revin la problema in cauza, am instalat acum o saptamana MPLAB v7.00. Aseara am intrat pe siteul microchip shi vad ca de doua zile au scos v7.01, :d , unul din bug-urile corectate privindu-l chiar pe 675 cu porturile lui. Astfel softul original merge brici in simulatorul lui V7.01 dar nu misca nimic in v7.00 :shock: Una shi mai tare: deshi intre cele doua versiuni se pare ca s-a schimbat ceva, asamblorul este acelashi, shi el cu ceva bug-uri, pentru ca hex-ul scos cu v7.0 este identic cu cel produs de 7.01, shi in plus nu misca defel.Voi ce propunetzi?

Link spre comentariu

Dupa cate stiu eu, MPLAB 5.xx nu suporta 12F675, asa ca n-are cum sa-l simuleze. Eu am instalate vers 5.6 si 6.3. 5.6 merge cu ICD1. 6.3 o folosesc cand vreau sa urnesc un 675. Asa ca, cel putin la mine, nu s-a manifestat nici un bug. Cand am avut de scris ceva ptr 675 am scris, am simulat (cu MPLAB6.3 si cu selectia corecta a cipanului) si am turnat in cip. A mers din prima. De altfel, daca nu selectezi cipul care trebuie in simulator, nici nu apar toate SFR-urile. ANSEL nu apare daca nu selectezi un cip care are "ANSEL".Cirip

Link spre comentariu

5.70 shtie de 675, da' constat ca nu merge cum trebuie. 5.40 cred ca era cel ce nu shtia de 675. Shi cipul era selectat, era tot in regula. De altfel am portat totul pe 873 unde merge brici din prima, nici macar n-a fost necesar sa fac debug.Ash fi zis ca sunt eu de vina pana ce am testat cu 7.01, aparut alaltaieri :), cu care merge pe simulator. In practica, tot aiurea, de aia m-am suparat shi l-am lasat cu 873. Probabil ca o sa folosesc acuma shi 6.30, alaturi de 5.70 shi 7.01. Mai bine faceau cei de la microchip cate o versiune de MPLAB pentru fiecare cip. Atunci foloseam MPLAB 12.508 pentru 12c508, 16.873 pentru 873, :d :d :d

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