Ciao, sto usando un 16f84 per pilotare un 4051. Per il clock del PIC Ho usato un oscillatore RC. vedi schema in :
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