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 le langage C !

Modérateur : Jérémy

HEF sur nouveaux PIC16F (High Endurance Flash)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#11 Message par Temps-x » lun. 30 mars 2020 13:04 lien vers la Data-Sheet : Cliquez ici

Bonjours paulfjujo, et tout le forum,

oops tu as raison sur le brochage :oops: je me suis trompé en croyant qu'il se programmer comme les autres.

oops.jpg


Je viens de voir ceci ou tout est marqué, suffit de savoir lire :sifflotte: mias je suis excusable car tout et en anglais :furieux: je vais me fabriquer une vraie prise pour le programmer ......

==> 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:

HEF sur nouveaux PIC16F (High Endurance Flash)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#12 Message par Temps-x » lun. 30 mars 2020 17:32 lien vers la Data-Sheet : Cliquez ici

Re

Après modification des câbles, et modification des connections de programmation sur le microcontrôleur Pic16F1619, ça fonctionne.

Ok - Pic16F1619.jpg


Le programme planter au démarrage, j'ai résolu la solution en retirant l'alimentation du microcontrôleur, après il faut lancer le programme, puis réalimenter le microcontrôleur, et choisir dans la liste le microcontrôleur, ne pas faire d'auto détection.

Le programme utilisé est PICPgm téléchargeable ICI

J'ai programmé le microcontrôleur sans aucune instruction pour essai..., bon maintenant,.. on va s’occuper de cette zone confiné :wink:

==> 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:

HEF sur nouveaux PIC16F (High Endurance Flash)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#13 Message par Temps-x » mar. 31 mars 2020 01:45 lien vers la Data-Sheet : Cliquez ici

Bonjours paulfjujo, et tout le forum,

:cry: Je me suis réjouit trop vite, quand le Pic est neuf... j'arrive à le programmé, après plus possible de l'effacer, je pense que mon programmeur n'envoie pas assez de tension sur la broche MCLR

J'ai fait des essais en alimentant le microcontrôleur en 5 volts, et 3 volts, mais rien à faire..... :mur:

:roll: Quoi faire... lui mettre 13 volts sur la broche MCLR en continu :sifflotte: et lancé la procédure d'effacement puis de programmation.....

Bon, je vais voir si il y a une solution, mais j'y crois pas trop.... je te joints le fichier de départ pour test, clignotement d'une led sur broche RC7.

16f1619.zip
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:

HEF sur nouveaux PIC16F (High Endurance Flash)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#14 Message par paulfjujo » mar. 31 mars 2020 14:52 lien vers la Data-Sheet : Cliquez ici

bonjour TempsX et à tous

il semblerait que ça fonctionne OK sous MikroC
avec les test suivants

un seul point me parait Bizarre avec l'usage de MPLAB IPE et la façon de proteger la zone HEF contre un effacement
par chargement d'un programme jusqu'au bout 0x1FFF !, ecrabouille la zone HEF malgré
la limitation programme de 0 à1F7F et la declaration de protection zone 1F80-1FFF
J'ai mis un post à ce sujet sur Microchip Forum

m on programme de test de la partie HEF (utilisant la lib FLASH de mikroC)
je declare :
int FData[128]; // for write HEF pour contenir mes datas à stocker
on ne peut pas stocker qu'un byte dans un mot flash de 14 bits => 2 octets donc usage d'entier 16 bits
j'utilise une entree PIC pour valider/invalider l'ecriture
suivie de la lecture systematique de la zone utilisée en HEF
une reprogrammation du PIC m'efface les datas en HEF .. => :furieux: PAS BIEN !

FF=effacé


Test HEF Flash:
Status of Pin HEF_Ecrit) RC1=1
Read Zone HEF
00FF
00FF
00FF
00FF
00FF
00FF
00FF
00FF
00FF
00FF





neamoins, mes tests semblent prouver que le stockage s'est bien fait en HEF
puisque je retouve mes datas , en lecture seule de ladite zone, apres mise hors tension !
(attention RX UART ne doit pas etre connectée pour etre VRAIMENT Hors tension !)
c'est mon cas, je ne connecte que TX vers Terminal.


mikroC code

Code : Tout sélectionner


sbit HEF_Ecrit at PORTC
.B1;
sbit HEF_Ecrit_Dir at TRISC.B1;
int FData[128];  // for write HEF


 init divers : Hardware, uart1 ...etc .
UART1_Write_CText (" Test HEF Flash:\r\n Status of Pin HEF_Ecrit) RC1=");
    UART1_Write(48+PORTC.B1);
    CRLF1();
    if (HEF_Ecrit==0)
    {
    UART1_Write_CText (" Erase zone HEF\r\n");
    FLASH_Erase(0x1F80);  FLASH_Erase(0x1F84); FLASH_Erase(0x1F88);  FLASH_Erase(0x1F8C);
     UART1_Write_CText (" Write Zone HEF\r\n");
    strConstRamCpy(FData,"1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T" );
     FLASH_Write(0x1F80,FData);
        FLASH_Write(0x1F81,FData+1);
         FLASH_Write(0x1F82,FData+2);
              FLASH_Write(0x1F83,FData+3);
                FLASH_Write(0x1F84,FData+4);
                 FLASH_Write(0x1F85,FData+5);
                   FLASH_Write(0x1F86,FData+6);
                    FLASH_Write(0x1F87,FData+7);
                     FLASH_Write(0x1F88,FData+8);
                      FLASH_Write(0x1F89,FData+9);
                       FLASH_Write(0x1F8A,FData+10);
                       
     
}
     UART1_Write_CText (" Read Zone HEF\r\n");
     p1=(char *)RData;
     p2=RData;
     for (i=0;i<10;i=i+1)
     {
     k=   FLASH_Read(0x1F80+i) & 0x00FF;
     WordToHex(k,CRam1);
      UART1_Write_Text(CRam1); CRLF1();
     }
     CRLF1();
     UART1_Write_CText (" fin Test HEF\r\n");

     while(1);
    


phase ecriture

Test HEF Flash:
Status of Pin HEF_Ecrit) RC1=0
Erase zone HEF
Write Zone HEF
Read Zone HEF
0031
0032
0033
0034
0035
0036
0037
0038
0039
0041
0042

fin Test HEF



phase lecture ..OK
Init UART1 RB7=TX RB5=RX


Test HEF Flash:
Status of Pin 5HEF_Ecrit) RC1=1
Read Zone HEF
Read Zone HEF
0031
0032
0033
0034
0035
0036
0037
0038
0039
0041
0042


fin Test HEF




M'enfin, je vais (peut etre) pouvoir rajouter la possibilité de mettre un offset de calibration
en live, via le terminal, si j'ai assez place Programme avec le OLED et sonde OWS
sinon je passerai sur un LCD I2C caracteres (LCD 2119 2 lignes de 16 ne necessitant pas de table de caracteres (car en CGROM du LCD!) )
Aide toi, le ciel ou FantasPic t'aidera

HEF sur nouveaux PIC16F (High Endurance Flash)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#15 Message par Temps-x » mer. 1 avr. 2020 04:33 lien vers la Data-Sheet : Cliquez ici

Bonjours paulfjujo, et tout le forum,

Ben, tant mieux pour toi si tout et arrangé, parce que je peux pas te secourir, j'ai tout essayé, mais pas possible de programmer le pic avec mon vieux programmateur. :sad:

Bonne chance pour la suite. :wink:

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

HEF sur nouveaux PIC16F (High Endurance Flash)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#16 Message par paulfjujo » mer. 1 avr. 2020 15:04 lien vers la Data-Sheet : Cliquez ici

bonjour à tous,

En fait pas tout à fait ...
car je ne peux pas ecrire plus de 32 valeurs ( 32 mots) soit 2 blocs de 32 bytes
la zone étant constituée de 4 blocs de 32 bytes (128 bytes -> 64 mots ) donc 64 valeurs possibles.? NON ?
voirnote AN1673

mon nouveau code de test
permettant de voir qu'on pourrait eventuellement stocker 256 ascii numerique ( ascii de '0' à '9' et le '.' ou ','
mais seulement 128 valeurs ascii aleatoires ( non connues à l'avance), sinon risque d'etre tronquées à 0x3F
le mot Flash étant sur 14 bits et non 16 bits .
mis en évidence sur ce test an collant les ascii stockés "abcd" ..50% bad et "0123"..100% OK ,
sinon il faut "a b c d "


Code : Tout sélectionner


  UART1_Write_CText 
(" Test HEF Flash:\r\n Status of Pin HEF_Ecrit) RC1=");
    UART1_Write(48+PORTC.B1);
    CRLF1();
    if (HEF_Ecrit==0)
    {
      UART1_Write_CText (" Erase zone HEF\r\n");
      for (i=0; i<128;i++)
      {
        FLASH_Erase(0x1F80+i);
        Delay_ms(25);
      }
     UART1_Write_CText (" Write Zone HEF\r\n");
     strConstRamCpy(FData,"abcde f g h i j k l m n o p q r s t u v w x y z 01234 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z " );
      UART1_Write_CText (" Taille Zone à ecrire en HEF :");
     Taille=strlen(FData);
     WordToStr(Taille,CRam1);
     UART1_Write(' ');   Print(CRam1);   CRLF1();
     for (i=0;i<Taille;i++)
       {
          FLASH_Write(0x1F80+i,FData+i);
          Delay_ms(50);
       }
     }
     UART1_Write_CText (" Read Zone HEF\r\n");
     p1=(char *)RData;
     p2=RData;
     for (i=0;i<Taille;i++)
     {
     WordToStr(i,CRam1);
     UART1_Write_Text(CRam1); UART1_Write(TAB);
     k=   FLASH_Read(0x1F80+i);
     if ((i>=24 ) && (i<26))
      {
         WordToHex(k,CRam1);
        UART1_Write_Text(CRam1); UART1_Write(TAB);
        UART1_Write(k>>8);   UART1_Write(TAB);
        UART1_Write(& 0x00FF);
      }
      else
      
{
       WordToHex(k,CRam1);
      UART1_Write_Text(CRam1); UART1_Write(TAB);UART1_Write((unsigned char)(& 0x00FF)); 
      
}
      CRLF1();
      Delay_ms(25);
     }
     CRLF1();
     UART1_Write_CText (" fin Test HEF\r\n");
     while(1);
  }


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

HEF sur nouveaux PIC16F (High Endurance Flash)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#17 Message par paulfjujo » ven. 3 avr. 2020 11:23 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,


Décidément je les collectione .. les cas K
:mur: Vla aut chose!


====================================
inter-Action code et HEF
=================================

ATTENTION ...
le compilateur MikroC ne dit rien du tout sur ce probleme...
puisque MikroC ne distingue pas la zone HEF du reste ...
contrairement à MPLAB IPE ou on peut separer les zones
espace code 0 -0x1F7F
espace HEF 0x1F80 - 0x1FFF

Plantage programme si ROM utilisée empiete la zone HEF de 128 bytes
Les statistiques compilateur donnent :
free ROM= 122 => BAD le programme ne demarre pas ! taille code trop grande
free ROM= 139 => OK le programme demarre ! (si taille code reduite)
because : le code deborde sur HEF
donc si on modifie la HEF ,on bigorne le soft

Code : Tout sélectionner


  if
(Bavard==0)
     {
       CPrint(" BAVARD ON activé   ");   // Pin RC1=0
       }
     else
     
{
      CPrint(" Mode Silencieux   ");   // pin RC1=1
     }
     CRLF1();


free RAM=146 free ROM= 122 => BAD le programme ne demarre pas !


mais OK avec

Code : Tout sélectionner



  if
(Bavard==0)
     {
       CPrint(" BAVARD ON ");   // Pin RC1=0
       }
     else
     
{
      CPrint(" Mode Muet ");   // pin RC1=1
     }
     CRLF1();


free RAM=146 free ROM= 139 => OK le programme demarre !

Je decide donc d'utiliser le dernier block HEF au lieu du premier
pour laisser plus d'espace CODE

=> choix sur dernier bloc HEF de 32 bytes
pour liberer de l'espace programme 0 - 0x1FDF
0x1FE0 .. 0x1FFF

programme demarre OK .. avec 204 word Flash ROM libre

MAIS , si je sauvegarde ma valeur d'Offset dans dernier block =
ecriture OK ..
MAIS Impossible de redemarrer le programme
sur un RESET ? :mur: ??


:sifflotte:
=> retour au stockage dans le 1er block HEF
diminution de mon code , pour ne pas deborder dans le 1er bloc
en 0x1F80
recompilation ..OK
memo Offset OK
Relecture offset depuis 1er bloc HEF -> OK
RESET ..OK

il y a manifestement , des problemes sur la librairie Flash MikroC ..avec CE PIC 16F1619

En attendant , j'ai une solution ( meme si elle n'est pas tres claire) pour stocker mon offset de calibration
sonde DS18B20 : Offset compris entre -3000 et +3000 ( :eek: en 1/1000em de degré !!)
envoyé via UART ou BlueTooth .

oops .. j'ai plus qu'à trouver un thermotre etalon ultra precis ans la gamme 36 -42
pour regler cet offset
Aide toi, le ciel ou FantasPic t'aidera

HEF sur nouveaux PIC16F (High Endurance Flash)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#18 Message par paulfjujo » sam. 4 avr. 2020 14:03 lien vers la Data-Sheet : Cliquez ici

paulfjujo a écrit :Bonjour à tous,


Décidément je les collectione .. les cas K
:mur: Vla aut chose!


====================================
inter-Action code et HEF
=================================

ATTENTION ...
le compilateur MikroC ne dit rien du tout sur ce probleme...
puisque MikroC ne distingue pas la zone HEF du reste ...
contrairement à MPLAB IPE ou on peut separer les zones
espace code 0 -0x1F7F
espace HEF 0x1F80 - 0x1FFF

Plantage programme si ROM utilisée empiete la zone HEF de 128 bytes
Les statistiques compilateur donnent :
free ROM= 122 => BAD le programme ne demarre pas ! taille code trop grande
free ROM= 139 => OK le programme demarre ! (si taille code reduite)
because : le code deborde sur HEF
donc si on modifie la HEF ,on bigorne le soft

Code : Tout sélectionner


  if
(Bavard==0)
     {
       CPrint(" BAVARD ON activé   ");   // Pin RC1=0
       }
     else
     
{
      CPrint(" Mode Silencieux   ");   // pin RC1=1
     }
     CRLF1();
 


free RAM=146 free ROM= 122 => BAD le programme ne demarre pas !


mais OK avec

Code : Tout sélectionner



  if
(Bavard==0)
     {
       CPrint(" BAVARD ON ");   // Pin RC1=0
       }
     else
     
{
      CPrint(" Mode Muet ");   // pin RC1=1
     }
     CRLF1();
 


free RAM=146 free ROM= 139 => OK le programme demarre !

Je decide donc d'utiliser le dernier block HEF au lieu du premier
pour laisser plus d'espace CODE

=> choix sur dernier bloc HEF de 32 bytes
pour liberer de l'espace programme 0 - 0x1FDF
0x1FE0 .. 0x1FFF

programme demarre OK .. avec 204 word Flash ROM libre

MAIS , si je sauvegarde ma valeur d'Offset dans dernier block =
ecriture OK ..
MAIS Impossible de redemarrer le programme
sur un RESET ? :mur: ??


:sifflotte:
=> retour au stockage dans le 1er block HEF
diminution de mon code , pour ne pas deborder dans le 1er bloc
en 0x1F80
recompilation ..OK
memo Offset OK
Relecture offset depuis 1er bloc HEF -> OK
RESET ..OK

il y a manifestement , des problemes sur la librairie Flash MikroC ..avec CE PIC 16F1619

En attendant , j'ai une solution ( meme si elle n'est pas tres claire) pour stocker mon offset de calibration
sonde DS18B20 : Offset compris entre -3000 et +3000 ( :eek: en 1/1000em de degré !!)
envoyé via UART ou BlueTooth .

oops .. j'ai plus qu'à trouver un thermomètre étalon ultra précis ans la gamme 36 -42
pour regler cet offset
Aide toi, le ciel ou FantasPic t'aidera

HEF sur nouveaux PIC16F (High Endurance Flash)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#19 Message par paulfjujo » sam. 11 avr. 2020 20:26 lien vers la Data-Sheet : Cliquez ici

bonsoir,

:-D Probleme SOLVED

mikroE a quand meme fini par repondre et m'aiguiller sur la correcte façon d'utiliser les fonctions FLASH pour la zone HEF
L'ecriture se fait en 1 seule fois par bloc de 32 entiers !

exemple pour stocker des ascii en zone HEF (1F80 .. 1FFF)

Code : Tout sélectionner

#define VERSION "2020_04_11"
// test uniquement avec des entiers
// trop capilotracté pour mixte chars sur entier < 3F
// ecriture modulo 32 !!!!

//#define VERSION "2020_04_01"
// Test Zone HEF  en C

//ac:pinout

// cocher High voltage ICSP Options  MPLAB IPE et Pickit4
//#define VERSION "191229"
//
// Hardware 16F1619  DIP20 :
/*
PIN 1    VDD   +3.3 à +5V
PIN 2    RA5
PIN 3    RA4  output --> Led Rouge ---2.2K--+5V
                    |---750--ICSP VPP  PIN 1 Pickit2
Pin 4     RA3/ MCLR |--- 6,8K --- +5V
Pin 5     RC5 ---> sortie SQA synchro ( ou Led Bleue )
pin 6     RC4
pin 7     RC3
pin 8     RC6
pin 9     RC7
pin 10    RB7  TX ----> UART ---> Ecran  fil Blanc Prolific USB
-----
Pin 20    VSS  --+5V
Pin 19    RA0  --- ICSP Data
Pin 18    RA1  --- ICSP Clock
Pin 17    RA2
Pin 16    RC0  --- <--- OWS sensor DS18B20
Pin 15    RC1  ---<-- input
pin 14    RC2
pin 13    RB4  <---> SDA I2C
pin 12    RB5  Rx  <--- UART <--- clavier fil vert  Prolific USB
pin 11    RB6  <--> SCL I2C
  */
#define DIRECTORY  "C:\\_MikroC\\_MesProjets_MikroC\\_16F1619_TEST_HEF"
#define PROJECT "TTest_HEF_16F1619_UART_2020_0401.mcppi"
#define SOURCE "_16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c"
#define Langage "MikroC 7.6.0"
#define PROCESSOR "PIC 16F1619 "
#define DEVICES  "No"
#define EEPROM  "No"
#define POWER_SUPPLY  " 3.3 to 5V"
#define OSCILLATEUR_INTERNE
#define FOSC "16.0"  // MHz
#define BAUD "19200"  // UART1
#define OTHERS "No"

/* config bits
CONFIG1 : $8007 : 0x38E4
CONFIG2 : $8008 : 0x1E83
CONFIG3 : $8009 : 0x3F1F
*/

#include "built_in.h"     // for  Hi  Lo ..etc

#define CLS 12
#define CR 13
#define LF 10
#define TAB 9
#define BACK 8
#define Beep 7
#define Separator 0x20   // space
#define Byte unsigned char
#define ON 0
#define OFF 1
//#define LCD_ADDR 0x4E  //
#define Word unsigned int

const code char mesg0[]=" Mikroc 7.6.0 "PROCESSOR" \r\n";
const 
code char mesg1[]=" Directory : "DIRECTORY" \r\n";
const 
code char mesg2[]=" Projet : "PROJECT"\r\n";
const 
code char mesg3[]=" Source : "SOURCE" \r\n";
const 
code char mesg4[]=" DEVICE : "DEVICES" \r\n";
const 
code char mesg5[]=" Terminal pour dialogue et Visu  deroulement programme\r\n";
const 
code char mesg6[]= " Alim ="POWER_SUPPLY"\r\n";
const 
code char mesg7[]=" FOSC= "FOSC"\r\n";
const 
code char mesg8[]=" Autres : "OTHERS"\r\n";
const 
code char mesg9[]=" ";
const 
code char Messages[]={mesg0,mesg1,mesg2,mesg3,mesg4,mesg5,mesg6,mesg7,mesg8,mesg9};

sbit Led_Rouge at LATA.B4;
sbit Led_Rouge_Dir at TRISA.B4;
sbit Led_Bleue at LATC5_bit;
sbit Led_Bleue_Dir at TRISC5_bit;
sbit HEF_Ecrit at PORTC.B1;
sbit HEF_Ecrit_Dir at TRISC.B1;

#define MAXLEN_BUFFER1 128
#define MAXLEN_TEXTE 128
Byte TEXTE[MAXLEN_TEXTE];
Byte txt;
volatile unsigned char buffer1[MAXLEN_BUFFER1];
volatile unsigned int Flag_Buffer1;
volatile  unsigned char c1;
volatile unsigned int i1;
volatile unsigned int Index1;
volatile unsigned int CptErr;
Byte  CRam1[64];

int i,j,k,l,m,n;
int FData[128];  // for HEF
unsigned int Taille;
char *p1;
int *p2;

// ============ Functions  ======================

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

void Interrupts() iv 0004 ics ICS_AUTO
 
{
 if ( (
RCIE_bit==1) && ( RCIF_bit==1))
   {
   
//TXREG1='$';
   // traitement separe des erreurs de COM
    // c1 = UART1_Read();
     
c1=RCREG1;
      if (
RCSTA1.OERR==1)    // voir parag 16.1.26 p273
      
{
       
RCSTA.CREN ;
       
c1 RCREG1;
       
RCSTA.CREN ;
        
CptErr++;

       }
      if(
RCSTA.FERR==)
      {
      
RCSTA.SPEN ;
      
RCSTA.SPEN;
      
CptErr++;
       
c1 RCREG1;
      }
     if ((
c1==CR) || (i1 MAXLEN_BUFFER1-2))
      {
      
Flag_Buffer1=1;
      if (
i1 MAXLEN_BUFFER1-2)  Flag_Buffer1=2;
      
PIE1.RCIE=//interdit IT Reception UART
      
buffer1[i1]=0;
      
Index1=i1;
      
i1=0;
      
c1=0;
     }
     else
     {
        
buffer1[i1]=c1;
        
Index1=i1;
        
i1++;
      }
   }
  }


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

#define Print UART1_Write_Text
#define CPrint UART1_Write_CText

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

void UART1_Write_CText(const char *txt)
 {
   while (*
txt)
      
UART1_Remappable_Write(*txt++);
      
Delay_us(5);
}

 
void Init_Hardware()
{
  
//REGISTER 6-1: BORCON: BROWN-OUT RESET CONTROL REGISTER
  
BORCON.SBOREN=0;
  
// no analog on PORT A,B,C
  
ANSELA=0;
  
TRISA=0xFF;
  
Led_Rouge_Dir=0;  // RA4
  
Led_Rouge=0;

  
ANSELB=0;
  
TRISB=0b11111111;
   
// I2C pin must be set as input and Open drain
  
WPUB=;// Weak pull up on port B RB4-RB7 :  0=DISABLED
  //  1=open drain    0=push pull output
  
ODCONB.B4 1;  // 1=open drain  output   SDA
  
ODCONB.B6 1// 1=open drain output   SCL
  
ODCONB.B5 0;  // 0=push pull   input  RX
  
ODCONB.B7 0;  // 0=push pull output   TX

  
SLRCONB=0xF0// 1 = Port pin slew rate is limited
  
INLVLB=00//1 = ST input used for PORT reads and interrupt-on-change
 
  
ANSELC=0;
  
TRISC=0b11011111;    // RC5 output SDA et Led Bleue
  
WPUC=0b00100010 ;// Weak pull up on port C RC5 and RC1
  
HEF_Ecrit_Dir=1//RC1;
  
Led_Bleue_Dir=0;
  
// page 230
  
OPTION_REG.nWPUEN =0;  //  0= Weak pull-ups are enabled by individual WPUx latch values   1=disable WPUP

 
}


 
void Init_Fosc(void)
 {
 
// internal FOSC
 /*
 bit 7 SPLLEN: Software PLL Enable bit
 bit 6-3 IRCF<3:0>: Internal Oscillator Frequency Select bits
     1111 =16 MHz HF
     1110 =8 MHz HF
     1101 =4 MHz HF
     1100 =2 MHz HF
     1011 =1 MHz HF
     1010 =500 kHz HF(1)
     1001 =250 kHz HF(1)
     1000 =125 kHz HF(1)
     0111 =500 kHz MF (default upon Reset)
     0110 =250 kHz MF
     0101 =125 kHz MF
     0100 =62.5 kHz MF
     0011 =31.25 kHz HF(1)
     0010 =31.25 kHz MF
     000x =31 kHz LF
 bit 2
 bit 1-0 SCS<1:0>: System Clock Select bits
 */
  
OSCCON=0;
 
// 16 MHZ
   
OSCCON.IRCF3=1;
    
OSCCON.IRCF2=1;
     
OSCCON.IRCF1=1;
      
OSCCON.IRCF0=1;
// 1x = Internal oscillator block
   
OSCCON.SCS1=1;
   
OSCTUNE=0;
   }


void Config_PPS(void)
{
  
Unlock_IOLOCK();
    
RC5PPS=0;
    
RA4PPS=0;
 
// USART1   RX, TX
   // ---------- Peripheral PIN and EUSART configuration ----------------------
   // PPS_Mapping(char rp_num, char input_output, char funct_name);
  //   PPS_Mapping(RB7, _OUTPUT, _TX_CK);
  //   PPS_Mapping(RB5, _INPUT, _RXPPS);
   // use  direct
    
RB5PPS 0x0D;      //  RX RB5
    
RB7PPS0x12;       // TX RB7
   
   // --- I2C ----------------------
   // PPS_Mapping(RB4 , _OUTPUT, _SDA);
   // PPS_Mapping(RB6 , _OUTPUT, _SCK_SCL);   // Sets RB6 SCL I2C
  
  // TABLE 13-2: AVAILABLE PORTS FOR OUTPUT BY PERIPHERAL
  //   REGISTER 13-2: RxyPPS: PIN Rxy OUTPUT SOURCE SELECTION REGISTER
  //  bit 7-5=0   bit 4-0 RxyPPS<4:0>: Pin Rxy Output Source Selection bits
    
RB6PPS 0x10// 0b00010000; // 16 RB6->MSSP:SCL
    
RB4PPS 0x11//0b00010001; // 17  RB4->MSSP:SDA;
  // TABLE 13-1: PPS INPUT REGISTER RESET VALUES
  // SPI and I2C clock SSPCLKPPS RB6
   
SSPCLKPPS 0x0E;   //RB6->MSSP:SCL;
   // SPI and I2C data SSPDATPPS RB4
   
SSPDATPPS 0x0C;   //RB4->MSSP:SDA;
    
RC5PPS=0;
    
RA4PPS=0;
  
Lock_IOLOCK();
}


void main()
 {
    
Init_Fosc(); // internal FOSC  1111 =16 MHz HF
    
Init_Hardware() ;
    
Config_PPS();
   
//6 x Clignotement Led Rouge (RA4)  et SQA (RC5)\r\n");
   // run once this , to check if MCU is running
   /*
    for (i=0;i<6;i++)
    {
      Led_Bleue=ON;
      Led_Rouge=ON;
     // SQA=1;
      Delay_ms(500);
      Led_Bleue=OFF ;
      Led_Rouge=OFF;
    //  SQA=0;
      Delay_ms(500);
    }
    */
        // ******   INIT UART1 *****************
   
txt=&TEXTE[0];
   
UART1_Remappable_Init(19200);
   
UART1_Write_CText(" Init UART1 RB7=TX RB5=RX \r\n");
    
Delay_ms(500);
   
CRLF1()  ;

   
UART1_Write_CText (" Presentation :\r\n");
   for(
i=0;i<4;i++)
 
//  for(i=0;i<9;i++)
   
{
     
UART1_Write_CText(Messages[i]);
   }
   
Delay_ms(1000);
   
Led_Bleue=OFF;
   
CRLF1();
   
GIE_bit=0;
   
    
strConstRamCpy(txt,"abcdefghijkl0123456789ABCDEFGHIJ@KLMNOPQRSTUVWXYZ-abcdefgh" );
    
Taille=strlen(txt);
    
p1=txt;
    for(
i=0;i<Taille;i++) FData[i]=(int)*(p1+i);

    
UART1_Write_CText (" Test HEF Flash:\r\n Status of Pin HEF_Ecrit) RC1=");
    
UART1_Write(48+PORTC.B1);
    
CRLF1();
    if (
HEF_Ecrit==0)
    {
      
UART1_Write_CText (" Erase zone HEF\r\n");
      for (
i=0i<128;i++)
      {
        
FLASH_Erase(0x1F80+i);
        
Delay_ms(50) ;
      }
     
UART1_Write_CText (" Write Zone HEF\r\n");
     Print(
txt);  CRLF1();
     
UART1_Write_CText (" Taille Zone à ecrire en HEF :");
     
WordToStr(Taille,CRam1);
     
UART1_Write(' ');   Print(CRam1);   CRLF1();
     
     
FLASH_Write(0x1F80,&FData[0]);
     
Delay_ms(10);
     
FLASH_Write(0x1F80+32,&FData[32]);
     
Delay_ms(10);

     }
     
UART1_Write_CText (" Read Zone HEF\r\n");
    
//for (i=0;i<Taille;i++)
     
for (i=0;i<128;i++)
     {
       
WordToStr(i,CRam1);
       
UART1_Write_Text(CRam1); UART1_Write(TAB);
       
k=  FLASH_Read(0x1F80+i);
       
UART1_Write((char)k);
       
CRLF1();
       
Delay_ms(25);
     }
     
CRLF1();
     
UART1_Write_CText (" fin Test HEF\r\n");
     while(
1);
  }
  
/*

nota  MPLAB IPE :
Manually select memories and Ranges
Program Memory  0 - 1F7F
Preserve Program Memory  1F80 - 1FFF

Loading code from C:\_MikroC\_MesProjets_MikroC\_16F1619_TEST_HEF\Test_HEF_16F1619_UART_2020_0401.hex...
2020-04-01 15:28:43 +0200 - Hex file(s) loaded successfully.
2020-04-01 15:28:58 +0200 - Programming...
*****************************************************
Erasing...

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x1f7f
configuration memory
User Id Memory
Programming/Verify complete
2020-04-01 15:29:06 +0200 - Programming complete


===============================================

0 1 mikroCPIC1618.exe -MSF -DBG -pP16F1619 -RA -C -DL -O11111014 -fo16 -N"^C
C:\_MikroC\_MesProjets_MikroC\_16F1619_TEST_HEF\Test_HEF_16F1619_UART_2020_0401.mcppi" -SP"^C
C:\_MikroC\mikroC PRO for PIC\Defs\" -SP"^C
C:\_MikroC\mikroC PRO for PIC\Uses\P16_Enh\" -SP"^C
C:\_MikroC\_MesProjets_MikroC\_16F1619_TEST_HEF\" -SP"^C
C:\_MikroC\mikroC PRO for PIC\" -IP"^C
C:\_MikroC\mikroC PRO for PIC\Uses\P16_Enh\" "_16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c" "
_Lib_Math.mcl" "
_Lib_MathDouble.mcl" "
_Lib_System.mcl" "
_Lib_Delays.mcl" "
_Lib_CType.mcl" "
_Lib_CString.mcl" "
_Lib_CStdlib.mcl" "
_Lib_CMath.mcl" "
_Lib_Conversions.mcl" "
_Lib_OneWire.mcl" "
_Lib_FLASH_w32_e32.mcl" "
_Lib_PPS_1618_19.mcl" "
_Lib_UART_Remappable.mcl" "
_Lib_I2C_Remappable.mcl"
0 1139 Available RAM: 1008 [bytes], Available ROM: 8192 [bytes]
0 122 Compilation Started P16F1619.c
5814 123 Compiled Successfully P16F1619.c
0 122 Compilation Started
_Lib_Delays.c
123 123 Compiled Successfully
_Lib_Delays.c
0 122 Compilation Started _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
0 1004 interrupt handler (Interrupts at 0x0004) _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
304 1509 Generated baud rate is 19231 bps (error = 0.16 percent) _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
320 1505 Suspicious pointer conversion _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
321 1505 Suspicious pointer conversion _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
336 1505 Suspicious pointer conversion _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
343 1505 Suspicious pointer conversion _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
373 123 Compiled Successfully _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
0 127 All files Compiled in 79 ms
0 1144 Used RAM (bytes): 769 (76%)  Free RAM (bytes): 239 (24%) Used RAM (bytes): 769 (76%)  Free RAM (bytes): 239 (24%)
0 1144 Used ROM (program words): 1997 (24%)  Free ROM (program words): 6195 (76%) Used ROM (program words): 1997 (24%)  Free ROM (program words): 6195 (76%)
0 125 Project Linked Successfully Test_HEF_16F1619_UART_2020_0401.mcppi
0 128 Linked in 62 ms
0 129 Project 'Test_HEF_16F1619_UART_2020_0401.mcppi' completed: 453 ms
0 103 Finished successfully: 01 avr. 2020, 15:15:11 Test_HEF_16F1619_UART_2020_0401.mcppi

*/
 


il faut un Pickit4 + MPLAB IPE pour le programmer
Loading code from C:\_MikroC\_MesProjets_MikroC\_16F1619_TEST_HEF\Test_HEF_16F1619_UART_2020_0401.hex...
2020-04-11 20:11:05 +0200 - Hex file(s) loaded successfully.
2020-04-11 20:11:06 +0200 - Programming...

****************************************************
Calculating memory ranges for operation...

Erasing...

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x71f
configuration memory
Programming/Verify complete
2020-04-11 20:11:11 +0200 - Programming complete



resultat

Init UART1 RB7=TX RB5=RX

Presentation :
Mikroc 7.6.0 PIC 16F1619
Directory : C:\_MikroC\_MesProjets_MikroC\_16F1619_TEST_HEF
Projet : TTest_HEF_16F1619_UART_2020_0401.mcppi
Source : _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c

Test HEF Flash:
Status of Pin HEF_Ecrit) RC1=0
Erase zone HEF
Write Zone HEF
abcdefghijkl0123456789ABCDEFGHIJ@KLMNOPQRSTUVWXYZ-abcdefgh
Taille Zone à ecrire en HEF : 58
Read Zone HEF
0 a
1 b
2 c
3 d
4 e
5 f
6 g
7 h
8 i
9 j
10 k
11 l
12 0
13 1
14 2
15 3
16 4
17 5
18 6
19 7
20 8
21 9
22 A
23 B
24 C
25 D
26 E
27 F
28 G
29 H
30 I
31 J
32 @
33 K
34 L
35 M
36 N
37 O
38 P
39 Q
40 R
41 S
42 T
43 U
44 V
45 W
46 X
47 Y
48 Z
49 -
50 a
51 b
52 c
53 d
54 e
55 f
56 g
57 h
58
59
60
61
62
63
64 ÿ
65 ÿ
66 ÿ
67 ÿ
68 ÿ
69 ÿ
70 ÿ
71 ÿ
72 ÿ
73 ÿ
74 ÿ
75 ÿ
76 ÿ
77 ÿ
78 ÿ
79 ÿ
80 ÿ
81 ÿ
82 ÿ
83 ÿ
84 ÿ
85 ÿ
86 ÿ
87 ÿ
88 ÿ
89 ÿ
90 ÿ
91 ÿ
92 ÿ
93 ÿ
94 ÿ
95 ÿ
96 ÿ
97 ÿ
98 ÿ
99 ÿ
100 ÿ
101 ÿ
102 ÿ
103 ÿ
104 ÿ
105 ÿ
106 ÿ
107 ÿ
108 ÿ
109 ÿ
110 ÿ
111 ÿ
112 ÿ
113 ÿ
114 ÿ
115 ÿ
116 ÿ
117 ÿ
118 ÿ
119 ÿ
120 ÿ
121 ÿ
122 ÿ
123 ÿ
124 ÿ
125 ÿ
126 ÿ
127 ÿ

fin Test HEF

Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

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