pic16f84a e pin ra4

Ciao, sto usando un 16f84 per pilotare un 4051. Per il clock del PIC Ho usato un oscillatore RC. vedi schema in :

formatting link
Premendo F il PIC accende i led da RB0 a RB5 e imposta con RA2,RA3,RA4 gli ingressi sul 4051 per abilitare nell'ordine Y7,Y0,Y1,Y2,Y3,Y4

la tavola di verit=E0 del 4051 =E8 questa: EN A2 A1 A0 CHANNEL L L L L Y0: maschera AND $E3 L L L H Y1: maschera $E7 L L H L Y2: maschera $EB L L H H Y3: maschera $EF L H L L Y4: maschera $F3 L H L H Y5: non usato $FF L H H L Y6: non usato $FF L H H H Y7: non usato $FF H X X X None Per attivare RA2..RA4 forzo prima un PORTA:=3DPORTA OR $1C; (e mi porto nello stato Y7) e quindi un AND con la maschera indicata sopra

Il problema sembra essere con ra4, infatti non riesco a rendere attiva Y4. Quando arrivo a quello step invece di avere un livello alto (come da maschera $F3), ho una tensione di pochi volt (0.16), mentre la prima volta quando abilito Y7 la tensione su RA4 arriva a circa 3.8V (VCC=3D5V)

Forse il problema =E8 dovuto al fatto che RA4 condivide anche T0CKI? Comunque ho impostato il bit 5 del OPTION_REG a zero (Internal instruction cycle clock (CLKOUT)) ? O che RA4 sia un "open drain output" ? Non mi spiego per=F2 perch=E8 la prima volta (con l'OR $1C) ho per=F2 un livello alto su RA4...

Come posso risolvere la situazione ? Allego sorgente in uPascal.

program MioGDF; { Comando multiplexer 4051 RA2 =3D> A0 RA3 =3D> A1 RA4 =3D> A2

Uscite Y0..Y4 OR $1C INPUTS ON INH C B A CHANNEL L L L L Y0: maschera AND SE3 L L L H Y1: maschera SE7 L L H L Y2: maschera SEB L L H H Y3: maschera SEF L H L L Y4: maschera SF3 L H L H Y5: non usato SFF L H H L Y6: non usato SFF L H H H Y7: non usato SFF H X X X None

RB0 (max freq) RB5 (min freq)

} Const KEY_Freq:Byte=3D6; KEY_Mode:Byte=3D7; Max_Freq:Byte=3D6; Max_Mode:Byte=3D3; MaskFreq:ARRAY[0..6] Of Byte =3D($FF,$E3,$E7,$EB,$EF,$F3,$00); MaskMode:ARRAY[0..3] Of Byte =3D($02,$00,$01,$00); //sine, square, triang Var CurrFreq:Byte; absolute $00C; CurrMode:Byte; absolute $01C; // dbg:Byte; absolute $04F; Procedure Push_Freq; Var BtS:Byte; Begin If CurrFreq

Reply to
merco
Loading thread data ...

merco wrote: cut

Non so perche la prima volta dia livello alto ma di solito non uso RA4 come uscita proprio perche è open drain. Non so se con qualche BJT collegato opportunamente si riesce a fargli sputare una tensione decente. io ti consiglio o di usare un pin diverso o di passare al 16f628 che è particamente equivalente all'84 se lo configuri così, però puoi anche ottenere, con configurazione diversa, 16 pin di I/O e non solo 13. Ciao, Fremebondo

Reply to
Fremebondo

Se il prob è dovuto all'uscita di tipo Open drain, ti basta un pullup di qualche K.

Reply to
Ugo

esatto un bel pull up ha risolto... ma "open drain" cos'=E8 ?

Reply to
merco

E' un tipo, una soluzione di uscita di uno stadio elettronico.

Nel digitale, è in grado di forzare uno stato logico basso, ma per uno stato alto ha bisogno di un "aiuto" (polarizzazione) dall'esterno... il pull-up. Si contrappone a soluzioni circuitali che invece sono in grado di forzare entrambi gli stati logici (totem-pole) senza aiuti esterni.

Ciaoooooooooooo

"merco" ha scritto nel messaggio news: snipped-for-privacy@g49g2000cwa.googlegroups.com... esatto un bel pull up ha risolto... ma "open drain" cos'è ?

Reply to
Ugo

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.