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 ---
- 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 ---
Modérateur : Jérémy
Memoire flash versus EEPROM
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Re moi,
PAs évident de comprendre , je ne suis toujours pas trés à l'aise avec les pointeurs mais ca vient .
Je n'arrive pas a avoir le même résultat que toi en transposant ton code avec mon PIC .
N'étant pas très a l'aise je ne trouve pas mon erreur !
Je pense que je vais pas trop faire triturer mon programme, j'ai deja pas ma la de chose à traiter lol
Résultat sur hyper terminal
PAs évident de comprendre , je ne suis toujours pas trés à l'aise avec les pointeurs mais ca vient .
Je n'arrive pas a avoir le même résultat que toi en transposant ton code avec mon PIC .
N'étant pas très a l'aise je ne trouve pas mon erreur !
Je pense que je vais pas trop faire triturer mon programme, j'ai deja pas ma la de chose à traiter lol
Code : Tout sélectionner
unsigned char Texte[50];
unsigned long *txt;
const code unsigned char CodePin [128]="...........0123456789....................................";
long int PP, PP0;
//------------------------------------------------------------------------------------
// --- Copie le texte depuis ROM vers RAM
void strConstRamCpy(char *dest, const char *source) {
while(*source) *dest++ = *source++ ;
*dest = 0 ; // terminateur
}
//------------------------------------------------------------------------------------
strConstRamCpy(Texte, " UART1_Write_CText(CodePin)\r\n");
UART1_Write_Text(Texte);
strConstRamCpy(Texte, CodePin);
UART1_Write_Text(Texte);
UART1_Write(13);
UART1_Write(10);
delay_ms(100);
PP=CodePin;
strConstRamCpy(Texte, " Pointeur Initial CodePin PP=");
UART1_Write_Text(Texte);
LongWordToStr(PP,Texte);
UART1_Write_Text(Texte);
strConstRamCpy(Texte, " soit ");
UART1_Write_Text(Texte);
LongWordToHex(PP,Texte);
UART1_Write_Text(Texte);
UART1_Write(13);
UART1_Write(10);
PP0=PP>>6 ;
PP=(PP0+1)<<6 ;
strConstRamCpy(Texte, " Pointeur Corrige modulo 64 PP=");
UART1_Write_Text(Texte);
LongWordToStr(PP,Texte);
UART1_Write_Text(Texte);
strConstRamCpy(Texte, " soit ");
UART1_Write_Text(Texte);
LongWordToHex(PP,Texte);
UART1_Write_Text(Texte);
UART1_Write(13);
UART1_Write(10);
strConstRamCpy(Texte, " Lecture Flash Zone CodePin : \r\n");
UART1_Write_Text(Texte);
Delay_ms(100);
txt=&TEXTE[0];
FLASH_Read_N_Bytes(PP, txt,64);
*(txt+64)=0;
UART1_Write_Text(txt);
UART1_Write(13);
UART1_Write(10);
strConstRamCpy(Texte, " Ecriture de \" Paulo 9876543210\" en Flashrom adresse CodePin : \r\n");
UART1_Write_Text(Texte);
Delay_ms(100);
txt=&TEXTE[0];
strConstRamCpy(txt,"Paulo 9876543210") ;
FLASH_Write_64(PP,txt);
Delay_ms(100);
strConstRamCpy(Texte, " RE-Lecture zone Flashrom precedement ecrite en CodePin : \r\n");
UART1_Write_Text(Texte);
Delay_ms(100);
// -- RAZ pour etre sur du contenu relu
for (i=0;i<64;i++) TEXTE[i]=0;
txt=&TEXTE[0];
FLASH_Read_N_Bytes(PP, txt,64);
*(txt+64)=0;
UART1_Write_Text(txt);
UART1_Write(13);
UART1_Write(10);
Résultat sur hyper terminal
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Memoire flash versus EEPROM
Memoire flash versus EEPROM
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
En mettant :
J'ai une erreur de compilation sur cette ligne .
Illegal pointer conversion
Code : Tout sélectionner
unsigned char Texte[128];
J'ai une erreur de compilation sur cette ligne .
Code : Tout sélectionner
strConstRamCpy(Texte, CodePin);
Illegal pointer conversion
Memoire flash versus EEPROM
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
J'ai une erreur de compilation sur cette ligne
strConstRamCpy(Texte, CodePin);
je ne vois aucune errreur sur cette ligne là ..
par contre :
Code : Tout sélectionner
strConstRamCpy(Texte, " Ecriture de \" Paulo 9876543210\" en Flashrom adresse CodePin : \r\n");
UART1_Write_Text(Texte);
Delay_ms(100);
txt=&TEXTE[0];
strConstRamCpy(txt,"Paulo 9876543210") ;
FLASH_Write_64(PP,txt);
Delay_ms(100);
Attention: il faut utiliser FLASH_Erase_Write !
Code : Tout sélectionner
strConstRamCpy(txt,"Paulo 9876543210") ;
FLASH_Erase_Write_64(PP,txt);
Delay_ms(100);
Memoire flash versus EEPROM
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Re,
Merci encore de ton œil avertis .
Sur mon pic il me semble que je suis opbligé d'effacer par bloc de 1024 bytes ou 512 words (page 102). Ce que mon confirme la librairie avec ce pic je n'ai que FLASH_Erase_Write_1024 de disponible !
Laisse tomber Paul , c'est trop compliqué pour moi ! j'y reviendrais dans quelques années lol. ca m'auras permis de me frotter a ce genre de chose et de débroussailler mon esprit
Un grand merci d'avoir jeter un oeil. JE regrette seulement que ce soit si compliqué pour enregistrer des valeurs en dur. je tombe un peu des nues , Je trouve ca abérant de ne pas avoir un peu d'EEPROM sur ce genre de PIC
Merci encore de ton œil avertis .
Sur mon pic il me semble que je suis opbligé d'effacer par bloc de 1024 bytes ou 512 words (page 102). Ce que mon confirme la librairie avec ce pic je n'ai que FLASH_Erase_Write_1024 de disponible !
Laisse tomber Paul , c'est trop compliqué pour moi ! j'y reviendrais dans quelques années lol. ca m'auras permis de me frotter a ce genre de chose et de débroussailler mon esprit
Un grand merci d'avoir jeter un oeil. JE regrette seulement que ce soit si compliqué pour enregistrer des valeurs en dur. je tombe un peu des nues , Je trouve ca abérant de ne pas avoir un peu d'EEPROM sur ce genre de PIC
Memoire flash versus EEPROM
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
une autre piste !
pour un code PIN , ce doit etre suffisant..
4.5 User ID
Four memory locations (8000h-8003h) are designated
as ID locations where the user can store checksum or
other code identification numbers. These locations are
readable and writable during normal execution.
Zone USER ID Locations 8000h..8003h:
testé sur un 16F1847. .
à verifier pur ton MCU
Memoire flash versus EEPROM
Memoire flash versus EEPROM
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
effectivement
sur la datasheet du 18F87J50 , on peut lire
The TBLPTR is comprised of three SFR registers:
Table Pointer Upper Byte, Table Pointer High Byte and Table Pointer Low Byte
(TBLPTRU:TBLPTRH:TBLPTRL). These three registers join to form a 22-bit wide pointer.
The low-order 21 bits allow the device to address up to 2 Mbytes ofp rogram memory space.
The 22nd bit allows access to the device ID, the user ID and the Configuration bits.
ce qui est contredit plus loin !!!
Par contre j'ai refait des test avec le clicker2 18F87J50 .. OK
qui s'averent positif , à condition de respecter un effacement de 1024 byte,
une ecriture possible de 1024 bytes (pas moins!)
et en lecture
2 possibilités:
et une lecture byte par byte
ou une lecture par N bytes
sinon , 1 petite EEPROM en boitier T0-72 ( like a transistor!)
DS2431
1024-Bit 1-Wire EEPROM
1Kb Serial EEPROM Operates from Single-Contact 1-Wire Interface
sur la datasheet du 18F87J50 , on peut lire
The TBLPTR is comprised of three SFR registers:
Table Pointer Upper Byte, Table Pointer High Byte and Table Pointer Low Byte
(TBLPTRU:TBLPTRH:TBLPTRL). These three registers join to form a 22-bit wide pointer.
The low-order 21 bits allow the device to address up to 2 Mbytes ofp rogram memory space.
The 22nd bit allows access to the device ID, the user ID and the Configuration bits.
ce qui est contredit plus loin !!!
Par contre j'ai refait des test avec le clicker2 18F87J50 .. OK
qui s'averent positif , à condition de respecter un effacement de 1024 byte,
une ecriture possible de 1024 bytes (pas moins!)
et en lecture
2 possibilités:
et une lecture byte par byte
ou une lecture par N bytes
Code : Tout sélectionner
#define Directory "C:\\_MikroC\\_MesProjets_MikroC\\\_18F87J50_Clicker2"
#define Projet "PIC18F87J50_Test_Ecr_Lect_FLASH.mcppi"
#define Version "180624"
#define Source "PIC18F87J50_Test_Ecr_Lectu_Zone_Flash"
#define OSCILLATEUR_INTERNE // 8MHz*PLL=48Mhz
// ac:PIC18F87J50_schem
//-- commandes terminal VT220
#define CLS 12 // effacement de page sur Terminal VBRAY
#define CR 13
#define VT 10
#define LF 10
#define TAB 9
#define BELL 7
#define MAXLEN1 80
const code char chaine0[]="Projet : "Projet"\r\n";
const code char chaine1[]="FOSC=8MHZ No PLL => 8MHz \r\n";
const code char chaine2[]="UART COM1:19200, UART2 COM2 :19200 \r\n";
const code char chaine3[]="18F87J50 : Tests IT UART1\r\n ";
const code char chaine4[]="Source: "Source"_"Version".c \r\n";
const code char *RS_Str[]={chaine0,chaine1,chaine2,chaine3,chaine4};
const code unsigned char CodePin [2048]=
"...........0123456789..................................."
"...........0123456789..................................."
"...........0123456789..................................."
"...........0123456789..................................." ;
long int PP,PP0;
// pin definitions
sbit LD1 at LATD4_bit;
sbit LD2 at LATE4_bit;
sbit LD1_Direction at TRISD4_bit;
sbit LD2_Direction at TRISE4_bit;
sbit BP1 at RD7_bit;
sbit BP2 at RH3_bit;
sbit BP1_Direction at TRISD7_bit;
sbit BP2_Direction at TRISH3_bit;
char TEXTE[128];
char * txt;
unsigned char CRam1[64];
char *p;
unsigned int i,j,k,l,m;
unsigned int L1;
unsigned char buffer1[MAXLEN1];
unsigned int Index1=0;
unsigned int UART1_DataReady=0;
unsigned int i1=0;
unsigned char c1;
int CptErr;
unsigned char r;
void RAZ_UART1()
{ int i1;
for (i1=0;i1<MAXLEN1;i1++) buffer1[i1]=0;
Index1=0;
i1=0;
c1=RCREG; // vide le buffer RCREG
c1=0;
UART1_DataReady=0;
// REGISTER 8-2: PIE1: PERIPHERAL INTERRUPT ENABLE REGISTER 1
//PIE1.RC1IE
RCIE_bit=1 ;
}
void UART1_Write_CText(const char *txt1)
{
while (*txt1)
UART1_Write(*(txt1++));
}
// --- Copie le texte depuis ROM vers RAM
void strConstRamCpy(char *dest, const char *source)
{
while(*source) *(dest++) = *(source++) ;
*dest = 0 ; // terminateur
}
void CRLF1()
{
UART1_Write(CR);
UART1_Write(LF);
}
void Decompile_byte(unsigned char un)
{
unsigned char masque;
masque = 0x80;
while (masque > 0u )
{
if ((un & masque)>0)
UART1_Write(49u); // '1'
else
UART1_Write(48u); // '0'
masque =masque >>1;
}
}
void Hardware_Init(void)
{
ANCON0=0xFD ; // AN1= analog
ANCON1=0xFF; // No analog on AN15--AN10
TRISA=0xFF;
TRISA2_bit=0; // output for UART asm TX output
TRISB=0xFF;
TRISC=0xFF;
TRISG=0xFF;
ADSHR_bit = 1; // Alternate SFR is selected
ANCON0 = 0xFF; // All pins to digital
ANCON1 = 0xFF;
BP1_Direction = 1; // Set direction for buttons
BP2_Direction = 1;
LD1_Direction = 0; // Set direction for LEDs
LD2_Direction = 0;
LD1 = 0; // turn off LEDs
LD2 = 0;
}
// main function
void main() {
#ifdef OSCILLATEUR_INTERNE
// the internal oscillator is set to the default frequency of 1 MHz.
// The Internal Oscillator Frequency Select bits (IRCF<2:0>)
// select the frequency output of the internal oscillator block
// pour conserver 19200 bauds à 16Mhz sinon retombe à 1200 bauds
// OSCCON=0x70; // 8MHz
//OSCCON=0x60; // 4MHz
// OSCCON=0x50 ; // 2Mhz
// OSCCON=0x40 ; // 1Mhz
// OSCCON=0x30 ; // 500Khz
// OSCCON=0x10 ; // 125Khe
// OSCCON=0b01110000;
OSCCON.IRCF2=1; //HFINTOSC – (8 MHz)
OSCCON.IRCF1=1;
OSCCON.IRCF0=1;
OSCCON=0x72; // 8Mhz
OSCTUNE=0;
//OSCTUNE.PLLEN=0; // 0 =sans PLL => FOSC interne 8Mhz ou Q= 8MHz
OSCTUNE.PLLEN=1; // 1= avec PLL => FOSC=48 Mhz
#endif
Hardware_Init();
txt=&TEXTE[0];
UART1_Init(19200); // Hardware UART init won't work with RB2 as RX , and RB5 as TX is OK
Delay_ms(100);
CRLF1();
// init pointeur
CRLF1();
//ci dessous met le boxon !
for (i=0;i<4;i++)
{
strConstRamCpy(txt, RS_Str[i]);
UART1_Write_Text(txt);
}
UART1_Write_CText(" Test Ecriture lecture en zone FLASH sur Clicker2 18F87J50\r\n");
UART1_Write_CText("\r\n Init UART\r\n");
UART1_Write_CText(" UART1_Write_CText(CodePin)\r\n");
Delay_ms(100);
UART1_Write_CText(CodePin);
CRLF1();
Delay_ms(100);
PP=CodePin;
UART1_Write_CText(" Pointeur Initial CodePin PP=");
LongWordToStr(PP,CRam1);
UART1_Write_Text(CRam1);
UART1_Write_CText(" soit ");
LongWordToHex(PP,CRam1);
UART1_Write_Text(CRam1);
CRLF1();
PP0=PP>>10 ;
PP=(PP0+1)<<10 ;
UART1_Write_CText(" Pointeur CodePin corrige modulo 1024 PP=");
LongWordToStr(PP,CRam1);
UART1_Write_Text(CRam1);
UART1_Write_CText(" soit ");
LongWordToHex(PP,CRam1);
UART1_Write_Text(CRam1);
CRLF1();
UART1_Write_CText(" Lecture Flash Zone CodePin : \r\n");
Delay_ms(100);
txt=&TEXTE[0];
// RAZ pour etre sur de bien relire le contenu Flash
for (i=0;i<64;i++) TEXTE[i]=0;
EECON1.WPROG=0; //modulo64
FLASH_Read_N_Bytes(PP,txt,64);
*(txt+64)=0;
UART1_Write_Text(txt);
CRLF1();
UART1_Write_CText(" Ecriture de \" Paulo 9876543210\" en Flashrom adresse CodePin : \r\n");
Delay_ms(100);
txt=&TEXTE[0];
strConstRamCpy(txt,"Paulo 9876543210") ;
FLASH_Erase_Write_1024(PP,txt);
Delay_ms(100);
UART1_Write_CText(" RE-Lecture zone Flashrom precedement ecrite en CodePin : \r\n");
Delay_ms(100);
// RAZ pour etre sur de bien relire le contenu Flash
for (i=0;i<64;i++) TEXTE[i]=0;
txt=&TEXTE[0];
//lecture byte par byte
// for (i=0;i<64;i++)
// {
// *(txt+i)= FLASH_Read(PP+i);
// while(EECON1.WRERR==1);
// }
FLASH_Read_N_Bytes(PP,txt,8);
*(txt+64)=0;
UART1_Write_Text(txt);
CRLF1();
while(1);
}
/*
Projet : PIC18F87J50_Test_Ecr_Lect_FLASH.mcppi
FOSC=8MHZ No PLL => 8MHz
UART COM1:19200, UART2 COM2 :19200
18F87J50 : Tests IT UART1
Test Ecriture lecture en zone FLASH sur Clicker2 18F87J50
Init UART
UART1_Write_CText(CodePin)
...........0123456789..............................................0123456789..............................................0123456789..............................................0123456789...................................
Pointeur Initial CodePin PP= 3288 soit 00000CD8
Pointeur CodePin corrige modulo 1024 PP= 4096 soit 00001000
Lecture Flash Zone CodePin :
Ecriture de " Paulo 9876543210" en Flashrom adresse CodePin :
RE-Lecture zone Flashrom precedement ecrite en CodePin :
Paulo 9876543210
1ere solution :
RE-Lecture zone Flashrom Byte par Byte
2em solution:
RE-Lecture zone Flashrom via FLASH_Read_N_Bytes(PP,txt,8);
Paulo 98
*/
sinon , 1 petite EEPROM en boitier T0-72 ( like a transistor!)
DS2431
1024-Bit 1-Wire EEPROM
1Kb Serial EEPROM Operates from Single-Contact 1-Wire Interface
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 92 invités