ARDUINO ET IC CDP68HC68P1

Bonsoir à tous,

Je vous expose mon problème sur un projet sur lequel je suis entrain de travailler :

J’ai plusieurs IC CDP68HC68P1 (doc IC CDP 68HC68P1) qui traînent chez moi et dont je voulais tester leurs fonctionnalités avant de pouvoir les utiliser pour des projets plus concret. Je me suis dit que j’allais créer un petit banc de test à IC, cela me permettraient de voir ou revoir la liaison SPI, voir d’autre chose, ben je suis servi.

Pour ce faire, j’ai utilisé une petite board arduino UNO, utiliser la librairie SPI sous arduino pour communiquer avec cet IC
Les entrées / sorties de l’IC je les ai reconnectés sur le port PD de la carte ARDUINO (schema de la carte ARDUINO).

J’ai aussi réalisé le code (pour l’instant que la partie écriture sur l’IC => donc les I/O sont déclarée en sortie) - voir le code en annexe
J’ai aussi créer un projet GITHUB pour ce que ca vous intéresse de le compléter : GitHub - philouxy/arduino_IC68HC68P1: Test Bench to test the functionality of IC 68HC68P1

Après toute cette doc, et explication très succincte, voici mon problème, apparemment quand je configure mon IC (com SPI) et que je veux écrire sur mes sorties (sur l’IC CDP68HC68) que ce soit à 1 ou à 0, rien ne se passe, aucun changement, j’ai testé sur plusieurs IC différents… toujours le même résultat.

Donc je me dis que ca doit être mon code, mais la je suis perdu et ne sais plus ou chercher, si vous avez des idées, suggestions, je suis preneur de tout

En tout cas, merci de me lire

Amicalement - Philou

test_bench_v02.ino.txt (16 KB)

Salut,

On sent la personne qui n’est pas ignorante du codage, mais j’ai passé un bon moment avant de commencer à comprendre ta logique de programmation xD

Il y a un souci dans ta fonction read_on_chip(), tu ne pilote pas le chip select.

Après tu as une approche assez “spéciale” pour voir si ça marche. Faudrait déjà commencer par simple, configuré des sorties, bloqué dans un while(1) et voir au multimètre ce qui se passe.

Bonjour à tous,

Merci B@tto pour ta réponse :wink:

Alors effectivement, j’ai codé un peu à l’arach. Ici je voulais avoir pour l’instant toute mes fonctions visibles avant de faire un code propre avec des “headerfile” et autre constantes.

Bravo pour avoir décoder un peu mon code.

J’ai voulu faire dans mon fonction “loop” la config de mes différentes trames qui seront envoyés sur le chip via SPI et après d’appeler les différentes routines SPI. Je voulais faire une boucle qui me permettent des tester différents états que j’envoie via SPI.

Ici une partie de mes codes :

ici ma partie d’initialisation de ma trame, c’est les bytes qui seront envoyer avec les routines SPI, apparemment mes valeurs sont correctes

  //--- Port configuration on the ARDUINO : INPUT ---// 
  Init_Ports(TB_MODE[1]);   // configuration of ports using on ARDUINO Board (INPUT / OUTPUT / bidirectionnal)
  
  //--- configuration first byte to configure the I/O (PORT) ---// 
  byte_conf_IC_PORT = ((ID1_b << 7) | (ID0_b << 6) | (RS << 5) | (_RW << 4) | (DF << 2) | CM);    // conf = 0b00110000 = 0x30
  
  //--- configuration first byte to configure the I/O (DATA) ---//
  mask_config_byte = ~(RS << 5);    
  byte_conf_IC_DATA = byte_conf_IC_PORT & mask_config_byte;                                       // conf = 0b00010000 = 0x10  
  
  //--- configuration I/O on the IC CDP68HC68P1 ---//
  byte_conf_IO = TB_CONFIG_PORTS[0];                                                              // all in OUTPUT => 0xFF

ici c’est les routines que j’utilise pour communiquer avec le chip

  //Serial.println("=> Activation Chip Enable: Signal Down");
  digitalWrite(SS, LOW); 

  //--- send the message on the SPI Bus ---//
  SPI.transfer(conf); 
  SPI.transfer(msg); 
  
  //--- disable of chip enable (high state) ---// 
  digitalWrite(SS, HIGH); 
  //Serial.println("=> Disable Chip Enable: Signal High");

Ben justement, comme mes sortie de l’IC sont reconnecter à l’ARDUINO, je me disais que j’avais pas besoin de while pour controler ces états vu que le traitement serial sur l’arduino est assez lent. Maintenant je me pose aussi la question si j’ai pas aussi un soucis de delay

Je vais encore plancher ce soir

voilà

[/code]

Bonsoir à tous,

Je me suis replongé plus en détails dans le datasheet du CDP68HC68P1 (voir sur le poste 1 et voir la page 5), plus exactement le mode de lecture du SPI par l'IC.

A l'aide d'un oscillo, je me suis aperçu que mes datas (MOSI) étaient en avance par rapport à ma SCK (clock). J'ai à nouveau lu la doc de l'arduino et la liaison SPI (voir les deux liens ci-dessous).

-> SPI - Config -> Explication SPI - WIKI

Lors de la config que j'ai écrit dans la fonction : Init_Chip_SPI, j'ai mal configurer le SPI_MODE, a ma décharge j'ai confondu les deux tableaux mis en exemple dans le wiki -> c'était SPI_MODE1 ou lieu de SPI_MODE0

nouvelle config :

  //--- configuration of side (rising or ebbing) on SCK signal ---//
  SPI.setDataMode(SPI_MODE1);      //  rising edge - CPOL 
                                   // activation of start SCK - CPHA

J'ai encore des bugs mais maintenant je vois mes sorties bougés, ca vit :grin:

Voilà pour les dernières infos.

Amicalement - Philou

Bonjour à tous,

Toujours sur mon projet de Testeur d'IC, là je reprend mon code et aussi la partie affichage (interface - user)

Nouveau problème : affichage - partie série - interface utilisateur

La valeur de "byte_conf" dont j'aimerai afficher la valeur (que je la mette en binaire, en hexa, ca ne change rien), sur l'interface utilisateur ca m' affiche toujours : 0x FFFFFFFF alors que j'ai une variable de 8bit :

voir code ci-dessous:

byte_conf_IO = 0b11111111;  // 0xFF //TB_CONFIG_PORTS[0];  
...

Message_Console(0, byte_conf_IC_PORT, byte_conf_IO); 
.... 

void Message_Console(char select, char conf, char msg)
{
  switch(select)
  {
    case 0:
       Serial.println("--- Configuration I/O for IC CDP68HC68P1 in OUTPUT ---");
       Serial.print("=> Configuration Byte for PORTS : 0x");  
       Serial.println(conf, HEX);
       Serial.print("=> Configuration port I/O : 0x"); 
       Serial.println(msg, HEX);
    break; 
....

Comme d'hab si vous avez une idée, suggestion, ou autre je suis preneur ;-)

Amicalement - Philou

Bonsoir à tous,

Alors si jamais j’arrive à peu près à ce que je veux, à part quelque problème d’affichage, mais pour l’instant je fais avec :kez_11:
J’ai mis à jour le projet sous Github pour ceux qui veulent participer ou s’inspirer : GitHub - philouxy/arduino_IC68HC68P1: Test Bench to test the functionality of IC 68HC68P1

Voilà pour les infos. Je reviendrai surement pour des infos ou de nouvelles demandes

Amicalement - Philou

test_bench_v02.ino.txt (15.5 KB)