Boujour,
J'ai un niveau de debutant en se qui concerne la programmation de PIC et je bute sur un disfonctionnement.
Avec des exemple trouvé sur le net en Mikropascal, je voudrai simplement utilisé les 2 CAN d'un 12f675
mais une fois le montage sous tension un seul des CAN (AN0) semble reagir, l'autre (AN1) semble inactif.
Je pense qu'il doit y avoir un soucis dans procedure Init, mais je ne vois pas quoi.
pouvez m'aider ?
merci
code en MikroP :
program
var
wIn: word; // variable contenant la valeur numérisée de la tension analogique
procedure Init;
begin
OPTION_REG := %10000000; // pullup désactivé (bit 7 à 1)
TRISIO.0 := 1; // GP0 configuré en entrée (analogique ou numérique)
TRISIO.1 := 1; // GP1 configuré en sortie (analogique ou numérique)
TRISIO.2 := 0; // GP2 configuré en sortie, commande led D3
TRISIO.3 := 1; // GP3 non utilisé, configuré en entrée
TRISIO.4 := 0; // GP4 configuré en sortie, commande led D2
TRISIO.5 := 0; // GP5 configuré en sortie, commande led D1
CMCON := %00000111; // désactivation comparateurs, on peut aussi écrire CMCON := 7;
ANSEL.ANS0 := 1; // utilisation de l'entrée GPIO.0 comme entrée analogique (AN0)
ANSEL.ANS1 := 1; // utilisation de l'entrée GPIO.1 comme entrée analogique (AN1)
ANSEL.ANS2 := 0; // utilisation de l'entrée GPIO.2 comme sortie numérique (GP2)
ANSEL.ANS3 := 0; // utilisation de l'entrée GPIO.4 comme sortie numérique (GP4)
ADCON0.ADFM := 1; // 0 = left justified, 1 = right justified
ADCON0.VCFG := 0; // tension de référence = VDD
ADCON0.ADON := 1; // activation du module convertisseur A/D
ADCON0.ADCS0 := 1; // |
ADCON0.ADCS1 := 0; // | ADCS = 100 = Fosc/4
ADCON0.ADCS2 := 0; // |
GPIO.2 := 0;
GPIO.4 := 0;
GPIO.5 := 0;
end;
// main program
begin
Init;
while true do
begin
wIn := ADC_Read(0); // lecture entrée analogique AN0
if (wIn >= 1000) then
begin
GPIO.4 := 0;
GPIO.5 := 0;
end
else if (win < 1000) then
begin
GPIO.4 := GPIO.4 xor 1;
Delay_ms(500);
GPIO.5 := 1;
end
end;
begin
wIn := ADC_Read(1); // lecture entrée analogique AN1
if (wIn >= 500) then
begin
GPIO.2 := 0;
end
else if (win < 500) then
begin
GPIO.2 := 1;
end
end;
delay_ms(100);
end.
-----