Icm7228 Code offert

réalisation en cours de programmation mais deja je vous offre le code fonctionel qui demeure encore en ebauche

le code est segmenté en 2 partie j'ai utilisé Atmel studio avec le module arduino donc j'ai creer 2 fichier .ino

mon idée a été de creer un code qui utilise au max des mot pour eviter la minipulation de BITS

de plus on retrouve des tableau de Bits recopié du datasheet de l'icm7228

il y a aussi des fonction et des info dans ce code qui ne sont pas utilisé pour le moment comme par exemple un tableau de bit concernant les code digit.

le fichier icm7228.ino

#define decodeHex HIGH
#define decodeCodeB LOW

#define modeActiv HIGH
#define modeInactiv LOW

#define dataComingInactiv LOW
#define dataComingActiv HIGH

#define writeActif HIGH
#define  writeInactiv LOW

#define shutdownActiv HIGH
#define shutdownInactiv LOW

#define DecodeActiv LOW
#define DecodeInactiv HIGH

const int ArduinoPinsID[] = {2, 3, 4, 5, 8, 9, 10, 11};
//a utilisé quand mode est a l'etat Haut

const int ArduinoPinsMode = 7;
const int ArduinoPinsWrite = 6;
const int ArduinoPinsShutdown = 8;
const int ArduinoPinsDecode = 9;
const int ArduinoPinsDecodeType = 10;
const int ArduinoPinsDataComing = 11;

//Tableau pour le décodage CodeB/HEX
const int icm7228CharCodeByteArray[16][4] =
{
  {0,	0,	0,	0},
  {0,	0,	0,	1},
  {0,	0,	1,	0},
  {0,	0,	1,	1},
  {0,	1,	0,	0},
  {0,	1,	0,	1},
  {0,	1,	1,	0},
  {0,	1,	1,	1},
  {1,	0,	0,	0},
  {1,	0,	0,	1},
  {1,	0,	1,	0},
  {1,	0,	1,	1},
  {1,	1,	0,	0},
  {1,	1,	0,	1},
  {1,	1,	1,	0},
  {1,	1,	1,	1},
};
//tableau des digit
const int icm7228Digit[8][3] =
{
  {0, 0, 0},
  {0, 0, 1},
  {0, 1, 0},
  {0, 1, 1},
  {1, 0, 0},
  {1, 0, 1},
  {1, 1, 0},
  {1, 1, 1}
};

//charactere alphanumerique HEXA
const char icm7228AlphaCharHexArray[6] = {'A', 'b', 'C', 'd', 'E', 'F'};
//charactere alphanumerique Code_B le Code _ est en fait un blank
const char icm7228AlphaCharCodeBArray[6] = {'-', 'E', 'H', 'L', 'P', '_'};

int digitB[4] = {1, 7, 4, 5,}; //digit x4 du haut 
boolean digitBp[4] = {1, 0, 1, 1}; //gestion des point 
int digitH[4] = {8, 9, 3, 6};digit x4 du bas
boolean digitHp[4] = {1, 1, 0, 1}; Idem pour le bas

void setup() {
    icm7228ArduinoSetup();
}

void loop() {
  icm7228ConfigDecodeHEX();
  for (int i = 3; i >= 0; i--)
  {
    for (int j = 0 ; j <= 3; j++)
    { 
      digitalWrite(ArduinoPinsID[j],icm7228CharCodeByteArray[digitH[i]][3-j]);
      digitalWrite(ArduinoPinsID[7],digitHp[i]);      
    }
    delay(2);

icm7228Write();
  }
  for (int i = 3; i >= 0; i--)
  {
    for (int j = 0 ; j <= 3; j++)
    { 
      digitalWrite(ArduinoPinsID[j],icm7228CharCodeByteArray[digitB[i]][3-j]);
       digitalWrite(ArduinoPinsID[7],digitBp[i]);
   }
    delay(2);
icm7228Write();
  }
while(true); }

le fichier icm7228Function

//configuration des broche de la Arduino
void icm7228ArduinoSetup()
{
  for (int pin = 0; pin <= 7; pin++)
  {
    pinMode(ArduinoPinsID[pin], OUTPUT);
  }
  pinMode(ArduinoPinsMode, OUTPUT);
  pinMode(ArduinoPinsWrite, OUTPUT);

}


void icm7228MODE(boolean etatMode)
{
  digitalWrite(ArduinoPinsMode, etatMode);
}

void icm7228DATA_COMING(boolean etatDataComing)
{
  digitalWrite(ArduinoPinsDataComing, etatDataComing);
}

void icm7228HighWrite()
{
  digitalWrite(ArduinoPinsWrite, writeActif);
}

void icm7228Write()
{
  digitalWrite(ArduinoPinsWrite, writeInactiv);
  digitalWrite(ArduinoPinsWrite, writeActif);
}

void icm7228SHUTDOWN(boolean etatShutdown)
{
  digitalWrite(ArduinoPinsShutdown, etatShutdown);
}

//utilisation des fonction de décodage du drivers
void icm7228DECODE(boolean etatDecode, boolean typeCode)
{
  digitalWrite(ArduinoPinsID[5], etatDecode);
  if (etatDecode == 0)
  {
    switch (typeCode) {
      case 0: icm7228CODE_B();
        break;
      case 1: icm7228HEX();
        break;
    }
  }
}

void icm7228CODE_B()
{
  digitalWrite(ArduinoPinsDecodeType, decodeCodeB);
}

void icm7228HEX()
{
  digitalWrite(ArduinoPinsDecodeType, decodeHex);
}

void icm7228ConfigDecodeHEX()
{
icm7228HighWrite();
icm7228MODE(modeActiv);
icm7228SHUTDOWN(shutdownActiv);
icm7228DECODE(DecodeActiv,decodeHex);
icm7228DATA_COMING(dataComingActiv);
icm7228Write();
delay(2);
icm7228MODE(modeInactiv);
}

void icm7228ConfigDecodeCodeB()
{
icm7228HighWrite();
icm7228MODE(modeActiv);
icm7228SHUTDOWN(shutdownActiv);
icm7228DECODE(DecodeActiv,decodeCodeB);
icm7228Write();
delay(2);
icm7228MODE(modeInactiv);
}

je suis conscient que l'exemple du compteur de départ contient 101ligne de code et que le mien en contient pas loin de 250 mais bon au moins je pense que c'est plus accessble que du bitwise a tout bout de champs de paquerette

amusé vous bien avec ce truc je rajouterais un lien pour DL et des videos de ce petit travail

au plaisir

P.s

la vidéo ce trouve ici