Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Tension de Ref interme 1.024V, 2.048V, 4.096V avec Pic18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » sam. 15 janv. 2022 20:01 lien vers la Data-Sheet : Cliquez ici

Bonsoir,

:sifflotte: Je commence bien l'année avec 2 Pic18F27K42 qui ont l'entrée Adc de grillé par ma faute :cry: enfin, je crois ou j'ai mal compris.

J'explique un peu : pour configurer une tension de référence de 4.096V intérieur, j'ai configuré les registres comme ci-dessous

Code : Tout sélectionner

;------------------------- configuration du registre ADREF(bank 62) ----------------------------

      movlw B'00000011'                   ; bit 0 et 1 : 11 = VREF+ est connecté au module interne de référence de tension fixe (FVR)
      movwf ADREF                         ; bit 4      : 0  = VREF- est connecté au VSS

;------------------------- configuration du registre FVRCON(bank 62) ----------------------------

      movlw B'10000000'                                                 
      movwf FVRCON            



Le registre FVRCON se trouve en page 599 du datasheet
Le registre ADREF se trouve en page 624 du datasheet

Malgré cela mon entrée Adc à grillé quand j'ai injecté 3,50V, de plus je ne comprends pas en quoi consiste la configuration du registre FVRCON pour avoir une tension de référence de 4,096V

Quelle qu'un à t'il déjà essayé de se servir de cette tension de référence ?

Et, et t'elle précise ?

Et puis, c'est quoi FVR Buffer 1 Gain sur FVRCON ?

:sifflotte: Hum.... je voudrais bien refaire un essai, mais je ne voudrais pas cramer un troisième Pic, d’où l’expression Jamais deux sans trois.

Merci pour vos réponses

==> A+
Modifié en dernier par Temps-x le sam. 12 févr. 2022 01:15, modifié 2 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » sam. 15 janv. 2022 20:54 lien vers la Data-Sheet : Cliquez ici

bonsoir TempsX

As-tu Enable FRVCON ?

Ton PIC est-il alimenté en 5V .. condition pour choisir Vref 4,096V
Je ne vois pas comment on peut cramer une entree ADC .. avec 3..V

ici test ADC avec Vref 4,096V
:sifflotte: en C
Aide toi, le ciel ou FantasPic t'aidera

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#3 Message par Temps-x » dim. 16 janv. 2022 01:21 lien vers la Data-Sheet : Cliquez ici

Bonsoir paulfjujo,

paulfjujo a écrit :Source du message Ton PIC est-il alimenté en 5V

Ouais il est bien alimenté en 5 volts, j'ai vu en page de la datasheet les conditions pour utiliser la Vréf interne : VDD > 4.75 volts, page 760 du datasheet

Condition Vréf interne.jpg


paulfjujo a écrit :Source du message Je ne vois pas comment on peut cramer une entree ADC .. avec 3..V


Voici la recette pour grillé l’entrée de votre Adc

C'est très simple, il suffit d'activé le bit 7 EN : Fixed Voltage Reference Enable bit et de ne pas activé les bit 0 et 1 ADFVR : FVR Buffer 1 Gain Selection bit
du registre FVRCON
paulfjujo a écrit :Source du message ici test ADC avec Vref 4,096V :sifflotte: en C

Ça m 'aide pas beaucoup, car je vois pas les registres qui sont configurer, mais bon, tu as fais ce que tu pouvais... :-D

Je viens de refaire un essai, :sifflotte: à la volante... et sans grillé le pic... :-D je trouve ceci

Si je mets

FVRCON = 10000001 je trouve pour 1,25 volts 4095
FVRCON = 10000010 je trouve pour 2,25 volts 4095
FVRCON = 10000011 je trouve pour 4,25 volts 4095


Comme mon montage est fait sur fils volant je vais admettre que c'est bon, mais à quoi sert les bits 2 et 3(CDAFVR) de FVRCON, Il n'y à pas 2 Adc non de diou.

Omis la chaleur du pic, est ce que cette tension de référence est stable et fiable ?

Merci

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#4 Message par paulfjujo » dim. 16 janv. 2022 10:57 lien vers la Data-Sheet : Cliquez ici

bonjour à tous


Comme mon montage est fait sur fils volant je vais admettre que c'est bon, mais à quoi sert les bits 2 et 3(CDAFVR) de FVRCON,
Il n'y à pas 2 Adc non de diou.


Oui, mais il y a un DAC .. sortie analogique voir fig 34.1 de la datasheet et CDAFVR

Hypothèse ( non vérifiée,j'y tiens ,à mes 18F27K42 !)
Est-ce qu'une entrée qui semblerait être configurée comme une entrée analogique ADC , mais qui en realité serait une sortie DAC
peut etre mourru si on injecte une tension de 3V ( encore faut-il que le generateur de tension soit à faible impedance de sortie
pour pouvoir delivrer un courant >quelques mA...)
Aide toi, le ciel ou FantasPic t'aidera

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#5 Message par Temps-x » dim. 16 janv. 2022 15:19 lien vers la Data-Sheet : Cliquez ici

Bonjour paulfjujo, et tout le forum,

paulfjujo a écrit :Source du message Oui, mais il y a un DAC .. sortie analogique voir fig 34.1 de la datasheet et CDAFVR

Adc & Dac.jpg


:shock: Ah... enfin je sais à quoi sert les bits CDAFVR du registre FVRCON, avec la figure ci-dessus en comprend tout de suite.
paulfjujo a écrit :Source du message Est-ce qu'une entrée qui semblerait être configurée comme une entrée analogique ADC , mais qui en realité serait une sortie DAC
peut etre mourru si on injecte une tension de 3V


Je ne pense pas que c'est ça car

L'injection sur l'entrée Adc était de 3.5 volts sous 500 µA, de plus, seule le bits EN du registre FVRCON était activé, tout les autres bit du registre FVRCON été à zéro.

Maintenant, J'ai fait une sécurité dans le programme, quand la valeur Adc atteint le maximum(4095) le programme ne lit plus l'adc et une led de couleur rouge s'allume, jusqu’à redémarrage du pic, je pense que tout le monde devrait faire cela pour éviter de détruire l'entrée de l'adc.

C'est quoi ce bit RDY du registre FVRCON

PS : les 2 pic qui ont l'adc détruit son encore utilisable, et se programme très bien, donc ils n'iront pas à déchetterie.

Merci !

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » mar. 18 janv. 2022 11:00 lien vers la Data-Sheet : Cliquez ici

bonjour à tous,


L'injection sur l'entrée Adc était de 3.5 volts sous 500 µA,


je ne vois pas comment l'injection de 500µA puisse detruire une entrée PIC
à part un generateur de tension pouvant debiter > 20mA directement sur l'entree
il y a quand meme des protections sur les dites entrees.. et les diodes de clampage sont prevue pour le depassement tension d'alim .


je pense qu'il y a autre chose ...
Peux-tu poster ton "code Killer" .
:!!: . je suis pret à le tester ,quitte à bousiller une entree..
Aide toi, le ciel ou FantasPic t'aidera

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » mar. 18 janv. 2022 19:21 lien vers la Data-Sheet : Cliquez ici

Bonjour paulfjujo, et tout le forum,

Code très Dangereux, il faut porter un masque pour y toucher et être vacciné

Voici la version qui à muté le variant Omicron du code Killer Code Killer

Ne faite pas ça chez vous.

J'ai fait une protection dans le programme pour éviter la destruction de l'entrée Adc, dans le programme Code Killer

Bon, de toute façon j'ai trouvé d’où venait le problème, il faut impérativement configurer le registre FVRCON correctement sinon, détruction
de l'entrée Adc

paulfjujo a écrit :Source du message :!!: . je suis pret à le tester ,quitte à bousiller une entree..

:cry:

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » dim. 6 févr. 2022 16:31 lien vers la Data-Sheet : Cliquez ici

bonjour Temps-X et à tous,

Je suis en train de regarder ton code Killer ADC,
:sifflotte: pour verifier si je peux en griller un !


As-tu un schema de connection du PIC ?
pour confirmer la configuration de celui ci


L'entree ADC est -elle bien RC3 ?
car au debut

Code : Tout sélectionner


 movlw 
B'00001000'                   mode numérique 14(RC3)
      
movwf ANSELC

puis c'est RA7 ?
movlw B'00000111' ; sélection du canal du convertiseur analogique (RA7)
movwf ADPCH ;


L'envoi data au LCD se fait en mode 4bits mais avec les bits inversés et de plus
commentaire sur Port A au lieu de port B ?
se serait donc RB0,RB1,RB2,RB3 ?

Code : Tout sélectionner

#DEFINE lcd_port   LATB       ; D7   ==>  RA0 
                                          
D6   ==>  RA1
                                          
D5   ==>  RA2
                                          
D4   ==>  RA3                            

#DEFINE lcd_rs     LATA,6                   ; RS   ==>  RA6  
#DEFINE lcd_e     LATA,7                   ; E    ==>  RA7  


ce qui est ci dessous ,pourrait confirmer un ordre de bits inversé sur le quartet de commande,
car à l'endroit donne 0x20

Code : Tout sélectionner

ini_lcd
      movlw 
B'00000100'                   D5                //  0x04     inversé  donne 0x20 
      
call envoi                          mode 4 bits 
      call e_pulse


Bizarre et pas tres logique cette fonction d'envoi sur LCD ....ou tout du moins tres inhabituelle..

je vais attendre ton schema, pour me mettre dans les memes conditions de test ..

A+
Aide toi, le ciel ou FantasPic t'aidera

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » dim. 6 févr. 2022 19:05 lien vers la Data-Sheet : Cliquez ici

Bonsoir paulfjujo et à tous,

paulfjujo a écrit :Source du message :sifflotte: pour verifier si je peux en griller un !

Bonne appétit... :wink:

paulfjujo a écrit :Source du message As-tu un schéma de connexion du PIC ?

Je viens de le faire, le voilà

Batterie-killer.jpg


paulfjujo a écrit :Source du message
L'entree ADC est -elle bien RC3 ?
car au debut

movlw B'00001000' ; mode numérique : 14(RC3)
movwf ANSELC


:roll: Ben ouais, c'est bien ça, ANSELC est bien sur RC3

paulfjujo a écrit :Source du message puis c'est RA7 ?
movlw B'00000111' ; sélection du canal du convertiseur analogique (RA7)
movwf ADPCH ;


Exacte, mais plus bas je le remets sur RC3,

Code : Tout sélectionner


batterie_scan
      rcall _1s                            
; temps de visionnage

      BANKSEL ADPCH                       
; bank 62

      movlw B
'00010011'                   ; sélection du canal du convertiseur analogique (RC3)              
      movwf ADPCH                         
; control la batterie 

      rcall scan_adc                      
;
      
;-----------------------------------------------------------------------------------------------

      movf adc_high,W                     ; controler si l'adc n'est pas
      xorlw 0x0F                          
; en overclocking
      btfss STATUS
,Z
      bra batterie_choix

      movf adc_low
,W
      xorlw 0xFF
      btfsc STATUS
,Z                      ; 
      bra batterie_overclocking           
; arrêt de l'appareil, car overcloking, reprise au prochain démarrage  



paulfjujo a écrit :Source du message L'envoi data au LCD se fait en mode 4bits mais avec les bits inversés et de plus
commentaire sur Port A au lieu de port B ?
se serait donc RB0,RB1,RB2,RB3 ?


:roll: Dans celui que j'ai mi j'ai bien #DEFINE lcd_port LATA ; D7 ==> RA0 tu as du toucher au fichier sans t'en rendre compte.

Les bits d'envois son bien inverser, et c'est fait exprès, pour éviter d'avoir un PCB trop compliquer, pour moi ça change rien car le LCD fonctionne bien, :sifflotte: faut penser en 3 dimensions....

paulfjujo a écrit :Source du message Bizarre et pas très logique cette fonction d'envoi sur LCD ....ou tout du moins très inhabituelle..


Avec l'asm, on peut faire un peu ce qu'on veut, et puis je le sais, je suis un peu tordue, tu as eu la même réflexion que Gérard :lol: qui croyait pas que ça pouvait fonctionner comme ça, et pourtant il c'est rendu compte que tout était correcte.

Merci !

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Tension de Ref interme 1.024V, 2.0248V, 4.096V avec Pic18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#10 Message par paulfjujo » lun. 7 févr. 2022 20:55 lien vers la Data-Sheet : Cliquez ici

bonsoir, Temps-X

J'ai testé la version ASM ...
comportement aleatoire du programme ...
un semblant de reponse de l'ADC ..puis plus rien ?
meme la commutation de mode (type de batterie ) avec le choix sur port B RB0..RB3
est aleatoire ..
je pense à un probleme de bank .. ou ???

j'ai refais un morceau de progr. en C
pour revérifier mon entrée ADC RC3
avec +VRef =4,096 et alim MCU = 5,0V
un potar de 2,2K 10 tours entre +Vcc et 0V et le curseur vers entree RC3 via mon miliamperemetre ...
vraiment currieux que
avec Vin = 105mV Ie =1.43mA
intensité qui decroit queand Vin augmente
avec Vin =4.09V ie = 0.24mA !

test Entree RC3 sous mikroC, avec +Vref=4.096
EA= ADC_Read(19) ; ne gere pas le mode avec +Vref
ex: 4.06V en entree -> seulement 3410 points
avec
EA= ADC_Get_Sample(19);
4.09V en entree -> 4095 points en sortie .. OK

Ouf !
exit L'entree ANA n'est pas MORTE !


peut_etre que le code ci-dessous peut tourner en version de test Mikroc si < 2Ko
en éliminant le superflu..

Code : Tout sélectionner

//   avec Vref interne +4.096V et alim =5V
  // OK avec  ADC_Get_Sample(19) ;   => 4.09V input -> 4095 points
  // BAD avec ADC_Read(19):      => 4.06V input -> 3410 points => on est sur ref=VDD !
  // etonnant Ie =1,43mA pour Ue=0.105V  et Ie=0.24mA pour Ue=4.09V
 #define Version "2022-02"
#define Directory "C:\\_MikroC\\_MesProjets_MikroC\\_18F27K42_ADC_Test_on_LCD_2022"
#define Project "Test_killed_ADC_18F27K42.mcppi"
#define Source  "Test_killed_ADC_18F27K42_2022-02.c"
#define Eeprom " not used ...."
#define Config "P18F27K42_FOSC_64Mhz.cfgsch"


#define PROCESSOR "18F27K42"
#define POWER_SUPPLY  " 5V"

#define OSCILLATEUR_INTERNE
#define FOSC "64.0"  // MHz
#define LCD1602
#define NbCarPL 16


#define BAUD 115200  // UART1

#define CLS 12
#define CR 13    //0x0D
#define LF 10
#define TAB 9
#define BACK 8
#define Beep 7
#define Separator 0x20   // space
#define ON 0    // because led tirée au +VCC
#define OFF 1
#define SPECIAL 1
#define NORMAL 0

#ifndef Byte
#define Byte unsigned char
#endif

#ifndef Word
#define Word unsigned int
#endif



#define LED_ROUGE      LATA4_bit



const code char mesg0[]=" Directory :"Directory"\r\n";
const 
code char mesg1[]=" MikroC pro 7.30 Beta \n\r";
const 
code char mesg2[] =" Projet :"Project"\r\n";
const 
code char mesg3[]=" Test PIC18F27K42\r\n";
const 
char char mesg4[]=" Config bit : "Config" FOSC:"FOSC" MHz\r\n";
const 
char char mesg5[]=" Eeprom: "Eeprom"\r\n";
const 
char char mesg6[]=" Source : "Source"_"Version".c\r\n";
const 
char char mesg7[]=" 18F27K42 + 1 led + UART1 19200 bds\r\n";
const 
char char mesg8[]=" avec LCD 1602 en mode // 4 bits \r\n";
const 
char char mesg9[]=" ";
const 
char char mesg10[]=" ";
const 
code char Messages[]={mesg0,mesg1,mesg2,mesg3,mesg4,mesg5,mesg6,mesg7,mesg8,mesg9,mesg10};
const 
char Blancs[]="  ";

sbit LCD_RS at LATA6_bit;
sbit LCD_EN at LATA7_bit;
sbit LCD_D7 at LATA0_bit;
sbit LCD_D6 at LATA1_bit;
sbit LCD_D5 at LATA2_bit;
sbit LCD_D4 at LATA3_bit;

// Pin direction
sbit LCD_RS_Direction at TRISA6_bit;
sbit LCD_EN_Direction at TRISA7_bit;
sbit LCD_D7_Direction at TRISA0_bit;
sbit LCD_D6_Direction at TRISA1_bit;
sbit LCD_D5_Direction at TRISA2_bit;
sbit LCD_D4_Direction at TRISA3_bit;


unsigned int i,j,k,l,m,n;



#define MAX_LEN1 128
#define MAX_LEN2 64
#define MAX_LEN3 80


volatile unsigned char Temp=0;
volatile unsigned char Buffer1[MAX_LEN1];
volatile int Flag_Buffer1;
volatile unsigned char c1,cx;
volatile unsigned int i1;
volatile unsigned int Index1;
volatile unsigned int CptErr;

unsigned char CRam1[MAX_LEN2];
unsigned char TEXTE [MAX_LEN3];
unsigned char *txt;

volatile unsigned char TP_Deg,TP_Deci;
volatile unsigned int TAmb;
unsigned int EA0=4095;
float F1=0.00;

unsigned char p1;
volatile unsigned int Flag_Timer0;


unsigned char Buff_LCD[33];   // LCD 2x16 + zero
int Nb;

volatile unsigned int Count0 0;
unsigned char Etat_clock=0;

volatile struct chbits {   // 8 flags
       
unsigned FrameErr:1;
       
unsigned RAZ:1;
       
unsigned Elapsed:1;
       
unsigned Togle:1;
       
unsigned Second:1;
       
unsigned Gie:1;
       
unsigned Full:1;
      
unsigned Melodie:1;
 }
Drapeaux ;

void Init_Hardware();
void CRLF1(void) ;
void Raz_Buffer(void) ;
void CPrint(const char *txt);
void strConstRamCpy(unsigned char *dest, const code char *source);

void Interrupts() iv 0x0008 ics ICS_AUTO
{
    if (( 
TMR0IE_bit) && (TMR0IF_bit))
    {
        
//U1TXB=Count0+48;
         // pour 100mS
         
TMR0H         0x3C//15536;
         
TMR0L         0xB0;
        
Count0++;
        if (
Count0 >9)
         {
           
Flag_Timer0=1;
           
TMR0IE_bit=0;
        }
       
TMR0IF_bit0;
    }

 }


// --- Copie le texte depuis FLASH ROM vers RAM
void strConstRamCpy(unsigned char *dest, const code char *source)
 {
  while (*(
source)>0)  *(dest++) = *(source++) ;
  *(
dest) = ;    // terminateur
}

void CRLF1()
{
 
UART1_Write(CR); UART1_Write(LF);
}

void CPrint(const char *txt)
 {
   while (*(
txt++)>0)
      
UART1_Write(*(txt));
 }


 
void Float2Ascii (float xunsigned char *str,char precision)
{
 
// converts a floating point number to an ascii string
 // version limitée à 6 decimales maximum
 // x is stored into str, which should be at least 30 chars long
 
int ieikndig;
 
double y;
  
ndig = ( precision<=0) ? : (precision 22 23 precision+1);
 
ie 0;
 
// if x negative, write minus and reverse
 
if ( 0.0000)
 {
   *
str++ = '-';
   
= -x;
 }
 
// put x in range 1 <= x < 10
 
if (0.00000) while (1.00000)
 {
   
*= 10.000;                // a la place de =*
   
ie--;
 }
 while (
>= 10.000)
 {
   
x/10.000;
   
ie++;
 }
 
// in f format, number of digits is related to size
 
ndig += ie;                                // a la place de =+
 //round. x is between 1 and 10 and ndig will be printed to
 // right of decimal point so rounding is ...
 
for (1ndigi++)
 
y/10.000;
 
+= y/2.000;
 if (
>= 10.000) {1.000ie++;}
 if (
ie<0)
 {
   *
str++ = '0'; *str++ = '.';
   if (
ndig 0ie ie-ndig;
   for (
= -1iei--)  *str++ = '0';
 }
 for (
i=0ndigi++)
 {
   
x;
   *
str++ = '0';
   if (
==  ie ) *str++ = '.';
   
-= (y=k);
   
*= 10.000;
  }
 *
str '\0';
}




void Raz_Buffer1()
{
        
// nettoye le debut de buffer ,car utilisé pour init BT
        
for(i1=0;i1<MAX_LEN1-1;i1++) Buffer1[i1]=0;
        
Buffer1[0]=0;
        
i1=0;
        
p1=0;
        
Index1=0;
        
Flag_Buffer1 =;
        
//c1=RCREG1;
        
c1=0;
        
RC1IE_bit 1;
}


void Init_Hardware()
{
    
ANSELA 0x00;          // RA0 analog , OTHER  digital
    
ANSELB 0x00;
    
ANSELC 0x03;  // RC3
    
TRISA 0x00;
    
TRISC 0xFF;
    
TRISB 0xFF;
    
LATA 0x00;
}

void Init_Timer0()
{

// FOS=64MHz  , FOSC/4=16Mhz
//  Timer0
// pour 100mS
//FOSC=64MHz Prescaler 1:32; TMR0 Preload = 15536; Actual Interrupt Time : 100 ms

//  REGISTER 22-1: T0CON0: TIMER0 CONTROL REGISTER 0
   
T0CON0=0;
   
T0CON0.B7=1;  //   Enable module and operating
   
T0CON0.B4=1;  //MD16=1;
//   OUTPS<3:0>: TMR0 Output Postscaler (Divider) Select bits  0111= 1/8    1111=1/16   0000=1/1
   
T0CON0.B3=0;
   
T0CON0.B2=0;
   
T0CON0.B1=0;
   
T0CON0.B0=0;
//   REGISTER 22-2: T0CON1: TIMER0 CONTROL REGISTER 1
//   bit 7-5 CS<2:0>:Timer0 Clock Source Select bits = 011 HFINTOSC    010=FOSC/4
   
T0CON1.B7=0;  //T0CON1.CS2 !!!!
   
T0CON1.B6=1;  //T0CON1.CS1
   
T0CON1.B5=0//T0CON1.CS0
//   bit 4 ASYNC: TMR0 Input Asynchronization Enable bit
//   T0CON1.ASYNC=0;    //The input to the TMR0 counter is synchronized to FOSC/4
    
T0CON1.ASYNC=1;    //The input to the TMR0 counter is synchronized to FOSC/4
//   bit 3-0 CKPS<3:0>: Prescaler Rate Select bit     1/32
   
T0CON1.B3=0;   // CKPS3:0   0011=> 1/8     0101=> 1/32
   
T0CON1.B2=;
   
T0CON1.B1=;
   
T0CON1.B0=;
 
// pour 100mS
  
TMR0H         0x3C//15536;
  
TMR0L         0xB0;
//pour 1000mS
//   TMR0H         =0x0B ;      // 3036
//   TMR0L         =0xDC ;
//   T0CON1.B3=0;   //  0110=> 1/64
//   T0CON1.B2=1 ;
//   T0CON1.B1=1 ;
//   T0CON1.B0=0 ;
   
PIR3.TMR0IF 0;
   
PIE3.TMR0IE ;      // TMR0 Enable Interrupt.
   
T0CON0.B7=1;  //   Enable module and operating
   
Count0=0;
   
Flag_Timer0=0;

}




void  LCD_Write_CText_At(char x1,char y1,const char T1)
{
if (
strlen(T1<17) )
{
strConstRamCpy(Buff_LCD,T1);
 
Lcd_Out(x1,y1,Buff_LCD);
 }
 }
 


void main()
{
    
OSCTUNE=0;
    
OSCCON1 0x60;
    
OSCFRQ 0x08;        // FOSC = 64MHz
    
Etat_clock=OSCSTAT;
   
//  CLKRCLK=1;
     
Etat_clock=OSCSTAT;

    for (
i=0;i<MAX_LEN2;i++) CRam1[i]=0;

    
Init_Hardware();
    
LCD_RS_Direction=0;
    
LCD_EN_Direction=0;
    
LCD_D7_Direction=0;
    
LCD_D6_Direction=0;
    
LCD_D5_Direction=0;
    
LCD_D4_Direction=0// at TRISA3_bit;

    //LATA.B4=1;

    
UART1_Init(19200);
    
UART_Set_Active(&UART1_Read, &UART1_Write, &UART1_Data_Ready, &UART1_Tx_Idle); // set UART1 active

    
UART1_Write(CLS);
    
CPrint(" Presentation : \r\n");
    for (
i=0;i<10;i++)   CPrint(Messages[i]);
    
Delay_ms(1000);

    
CRLF1();
    
txt=&TEXTE[0];
    
CPrint(" LCD 1602  init\r\n");
    
Lcd_Init();
    
LATA.B4=0;
    
LCD_Write_CText_At(1,1,"Special Chars ");
    
Delay_ms(100);
    
ADC_Init_Advanced(_ADC_INTERNAL_FVRH4 _ADC_INTERNAL_VREFL );  //4.096V
    //ADC_Init();
    
CPrint(" Init ADC 4.096V for RC3 Analog input\r\n");

    
Init_Timer0() ;
     
CPrint(" Init Timer0 sur 1 sec\r\n");

    
Lcd_Cmd(_LCD_CLEAR);  // 1234567890123456
    
LCD_Write_CText_At(1,1,"EA0 =       Pts");


   
// Change IVTBASE if required
   
IVTBASEU 0x00// Optional
   
IVTBASEH 0x00// Default is 0x0008
   
IVTBASEL 0x08;

   
GIE_bit=1;
   
Init_Timer0() ;
    while (
1)
    {
       
LED_ROUGE = ~LED_ROUGE;
       
EA0=ADC_Get_Sample(19);  //  4.09 pour 4.08Volts reels
      // EA0=ADC_Read(19);   //1234567890123456      3.41V pour 4.06V reels
       
strConstRamCpy(CRam1,"EA19= .... pts ");
       
WordToStr(EA0,CRam1);
       
k=strlen(CRam1);*(CRam1+k)=' ';
       
Lcd_Out(1,1,CRam1);
       
UART1_Write_Text(CRam1);UART1_Write(TAB);

        
F1=(float)EA0 /1000.0;
        
Float2Ascii (F1,CRam1,2);
        
//p1= FloatToStr_FixLen(F1,&TEXTE[0],5);  UART1_Write(TAB);
        // UART1_Write_Text(p1); CRLF1();
        
Lcd_Out(2,1,CRam1);
        
UART1_Write_Text(CRam1); UART1_Write(TAB);
        
CRLF1();
        while( 
Flag_Timer0==0);
         
Init_Timer0() ;
    }
}

 



en points et en volts
9 .... pts 0.00
42 .... pts 0.04
485 .... pts 0.48
890 .... pts 0.89
1279 .... pts 1.28
1618 .... pts 1.62
1944 .... pts 1.94
2256 .... pts 2.26
2565 .... pts 2.56
2892 .... pts 2.89
3184 .... pts 3.18
3475 .... pts 3.48
3742 .... pts 3.74
4011 .... pts 4.01
4095 .... pts 4.09
4095 .... pts 4.09
4095 .... pts 4.09
4095 .... pts 4.09





_18F27K42_ADC_Test_on_LCD_2022.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 42 invités