lecture d'eeprom ( HELP) - C - Programmation
Marsh Posté le 15-09-2003 à 09:57:18
si tu dis pas
- sur quel type de machine (PC ? MAC ? SUN ? HP ? ...)
- sur quel OS
- avec quel langage
on risque pas de pouvoir t'aider
en plus, pour ce genre de question, google est souvent ton ami
Marsh Posté le 15-09-2003 à 10:02:18
philou_a7 a écrit : si tu dis pas |
Bah j'ai deja cherché sur GOOGLE mais bon pas top !
PC + win 2000 + langage C !
En gros voilà le programme :
/*--------------------------------------------------------------------------*/
/* Travaux Pratiques : Pilotage statique des Pins d'un port série */
/*--------------------------------------------------------------------------*/
/* Nom du programme : Ctrl-DB9.cpp */
/* Auteur : D.PAYON */
/* Date de création : 14/09/2003 */
/* Version : 1.0 */
/* Modifications : -> Utilisation des API de Windows /
/*--------------------------------------------------------------------------*/
#include <windows.h> // pour utiliser les API32
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define CR 0x0D // Symbole du retour chariot
#define LF 0x0A // Symbole du saut de ligne
#define aigu 0x82 // Symbole du é en code page 437
#define grave 0x8A // Symbole du è en code page 437
#define aaxan 0x85 // Symbole du à en code page 437
/*--------------------------------------------------------------------------*/
/* Choix du port série */
/*--------------------------------------------------------------------------*/
int Choix_Port()
{
int NoPort,flag=0;
do
{
system("cls" );
flag=0;
fflush(stdin);
printf("\t\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\t\tº Choix du Port S%crie º\n",aigu);
printf("\t\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t- Quel Port s%crie est utilis%c pour cette liaison ?\n\n",aigu,aigu);
printf("\t\t\t- 1 - COM1 ( 3F8 )\n" );
printf("\t\t\t- 2 - COM2 ( 2F8 )\n" );
printf("\t\t\t- 3 - COM3 ( 3E8 )\n" );
printf("\t\t\t- 4 - COM4 ( 2E8 )\n\n\t\t\t " );
scanf("%d",&NoPort);
if((NoPort==1)||(NoPort==2)||(NoPort==3)||(NoPort==4))
{
}
else
{
printf("\t\tMauvais choix, veuillez vous limiter au choix propos%c!\n\n",aigu);
system("pause" );
flag=1;
}
} while(flag==1);
return(NoPort);
}
/*--------------------------------------------------------------------------*/
/* Initialisation du Port Série */
/*--------------------------------------------------------------------------*/
void Initialiser(HANDLE hCom, char N_Port[4+1])
{
BOOL retour;
//La structure DCB définit les paramétres de transmission de l'UART.
DCB dcb_struct; //Création de la structure Device Control Block
retour = GetCommState(hCom,&dcb_struct); // Vérifier l'existence du port.
if (retour == 0) return;
else
{
dcb_struct.fDtrControl=DTR_CONTROL_DISABLE; // DTR=0
dcb_struct.fRtsControl=RTS_CONTROL_DISABLE; // RTS=0
dcb_struct.fOutxCtsFlow=TRUE; // Par défaut
retour = SetCommState(hCom,&dcb_struct); // Configuration du port avec ces paramètres.
}
}
/*--------------------------------------------------------------------------*/
/* Paramètres de configuration de la liaison série */
/*--------------------------------------------------------------------------*/
void main(void)
{
char carac,NomPort[4+1];
int flag=0,CTS=7,EtatComm=0,state,x,y,z;
BYTE *BufferIn;
HANDLE hCom;
BOOL retour;
DCB dcb_structure; //Création de la structure Device Control Block
DWORD ModemStatus,NbOctetsALire,NbOctetsLus,i;
sprintf(NomPort,"COM%d",Choix_Port()); // Saisie du N° du Port série utilisé
system("CLS" );
// Création du port de communication.
hCom=CreateFile(NomPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (hCom == INVALID_HANDLE_VALUE) //Traitement des erreurs.
{
printf("\n\tErreur d'acc%cs au port S%crie %s\n\n\n",grave,aigu,NomPort);
system("PAUSE" );
return;
}
else
{
Initialiser(hCom,NomPort); // Saisie et affectation des paramétres du port série
PurgeComm(hCom,PURGE_TXCLEAR&PURGE_RXCLEAR); // Vide des tampons d'émission/réception
/*--------------------------------------------------------------------------*/
/* Envoi de caractères saisis au clavier, et lecture des caractères reçus. */
/*--------------------------------------------------------------------------*/
printf("\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\tº Communication avec le %s º\n",NomPort);
printf("\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t( Appuyer sur la touche Ctrl + Q pour sortir de ce programme.)\n\n" );
do
{
if(state!=EtatComm)
{
system("CLS" );
state=EtatComm;
x=(EtatComm&4)>>2;
y=(EtatComm&2)>>1;
z= EtatComm&1;
printf("\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\tº Communication avec le %s º\n",NomPort);
printf("\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t( Appuyer sur la touche Ctrl + Q pour sortir de ce programme.)\n\n" );
printf("\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\tº RTS = %d DTR = %d CTS = %d º\n",x,y,z);
printf("\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t Pour faire commuter RTS %c l'%ctat 1 -> Appui sur 'r'\n",aaxan,aigu);
printf("\t Pour faire commuter RTS %c l'%ctat 0 -> Appui sur 't'\n",aaxan,aigu);
printf("\t Pour faire commuter DTR %c l'%ctat 1 -> Appui sur 'd'\n",aaxan,aigu);
printf("\t Pour faire commuter DTR %c l'%ctat 0 -> Appui sur 's'\n",aaxan,aigu);
printf("\t Pour lire les octets envoy%cs -> Appui sur 'l'\n",aigu);
}
if ( kbhit() )
{
carac=getch();
if (carac=='r')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fRtsControl=RTS_CONTROL_ENABLE; // RTS=1
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm|0x4; // Positionner le bit b2 à 1.
}
else if(carac=='t')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fRtsControl=RTS_CONTROL_DISABLE; // RTS=0
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm&0xFB; // Positionner le bit b2 à 0.
}
if (carac=='d')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fDtrControl=DTR_CONTROL_ENABLE; // DTR=1
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm|0x2; // Positionner le bit b1 à 1.
}
else if(carac=='s')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fDtrControl=DTR_CONTROL_DISABLE; // DTR=0
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm&0xFD; // Positionner le bit b1 à 0.
}
if (carac=='l')
{
retour = GetCommState(hCom,&dcb_structure);
BufferIn= (BYTE*) malloc( NbOctetsALire * sizeof(BYTE));
retour=ReadFile(hCom , BufferIn , NbOctetsALire , &NbOctetsLus , NULL);
for (i=0 ; i<NbOctetsLus;i++)
{
printf("%c",BufferIn[i]); // Affichage à l'écran des octets lus
if (BufferIn[i]==CR) putchar(LF);
}
free ( BufferIn );
}
}
retour=GetCommModemStatus(hCom,&ModemStatus);
flag=MS_CTS_ON & ModemStatus;
if(CTS!=flag>>4)
{
CTS=flag>>4;
if(CTS==1) {EtatComm=EtatComm|0x1;}
else {EtatComm=EtatComm&0xFE;}
}
} while(carac!=0x11); // Caractère de sortie du programme.
}
CloseHandle(hCom); // Fermeture du Handle hCom.
}
/*--------------------------------------------------------------------------*/
/* Lecture sur le port série */
/*--------------------------------------------------------------------------*/
Marsh Posté le 15-09-2003 à 10:05:58
ReplyMarsh Posté le 15-09-2003 à 10:09:52
chrisbk a écrit : |
Bah disons que j'aimerais bien en faire ce que tu penses mais peux pas !
Ct juste pour donner une idée de mon problème !
Stuffer
Marsh Posté le 15-09-2003 à 10:39:16
On n'a pas de 24C04 dans nos placards.
http://membres.lycos.fr/webelec/24c04.htm dit que l'interface est I2C. Y a qq infos sur le comment lui causer.
Sur http://hometown.aol.com/mcs51supp/24c04/24c04.htm (allemand), y a brochage.
Qq infos sur www.jlink.com.tw/Datasheet/24c04.pdf (Googlisation du 24C04).
Ce qu'il faut voir est : les broches à mettre à la masse, au + d'alim, la ou les broches par lesquelles envoyer des données..
Ensuite, le prog envoie (en l'adaptant) ce qu'il faut pour que le circuit soit content.
Marsh Posté le 15-09-2003 à 11:57:13
C'est juste de la lecture ecriture sur port série une fois que tu as fait le bon cablage. Par contre il faut connaitre le protocole de communication avec l'eeprom pour lui envoyer qqchose qu'elle comprendra et ça je sais pas
PS : c'est quoi ces horreurs de system("cls" ) et system("pause" ) ???????? sert toi des APIs curses si tu veux faire un peu de mise en forme texte, mais pitié, pas ça !!!
Marsh Posté le 15-09-2003 à 09:07:26
Je recherche la routine de lecture et aussi celle d'écriture pour une eeprom de type 24C04 !
Vous connaissez un bon site ? ou vous l'avez peut etre en stock ?
Merci !
Message édité par Stuffer le 15-09-2003 à 09:12:45