Go Down

Topic: Arduino + max6957 (Read 679 times) previous topic - next topic

mahth

Bonjour a tous.

J'ouvre ce post car je me retrouve coincé avec le max6957 de chez maxim.
Celui-ci communique avec l'Arduino (Stickduino dans mon cas) via le protocole SPI.
J'ai beau revérifier mon câblage, puis mon code. Je n'ai pas encore réussit a allumer une seule led.

Si quelqu'un a déja mit en place un max6957, je me sentirais moins seul :). Mes recherches sur les moteurs de recherche n'aboutissent pas.

Je post mon code si quelqu'un voit une erreur.
Merci d'avance.

Code: [Select]

int Clock = 0;
int Latch = 1;
int Data = 2;

void max6957_init() {
 max6957_send(0x09,0x55); // Conf port 0x09 0x55 Spec PDIP (cf page5)
 max6957_send(0x0A,0x55); // Conf port 0x0A 0x55 Spec PDIP (cf page5)
 max6957_send(0x0B,0x00); // Conf port 0x0B 0x00 Led driver (cf page2 Table2)
 max6957_send(0x0C,0x00); // Conf port 0x0C 0x00 Led driver (cf page2 Table2)
 max6957_send(0x0D,0x00); // Conf port 0x0D 0x00 Led driver (cf page2 Table2)
 max6957_send(0x0E,0x00); // Conf port 0x0E 0x00 Led driver (cf page2 Table2)
 max6957_send(0x0F,0x00); // Conf port 0x0F 0x00 Led driver (cf page2 Table2)
 max6957_send(0x02,0x0F); // Global current 0x02 0x0F 16/16(24ma)
 max6957_send(0x04,0x01); // Conf Regsiter Shutdown 0x04 0x01 Normal operation
}

void max6957_send(int m, int n) {
 digitalWrite(Latch, LOW);
     fct_shift(Data, Clock, MSBFIRST, (m)); // 8bits command (cf page9)
     fct_shift(Data, Clock, MSBFIRST, (n)); // 8bits data (cf page9)
   Serial.println();
 digitalWrite(Latch, HIGH);
}

//Fonction récupéré du fichier wiring_shift.c pour le debug
void fct_shift(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val)
{
 int i;

 for (i = 0; i < 8; i++)  {
   if (bitOrder == LSBFIRST) {
     digitalWrite(dataPin, !!(val & (1 << i)));
     Serial.print(!!(val & (1 << i)));
     }
   else  {
     digitalWrite(dataPin, !!(val & (1 << (7 - i))));
     Serial.print(!!(val & (1 << (7 - i))));
     }
 digitalWrite(clockPin, HIGH);
 digitalWrite(clockPin, LOW);            
 }
}

void setup() {
 Serial.begin(9600);
 pinMode(Clock, OUTPUT);
 pinMode(Latch, OUTPUT);
 pinMode(Data,  OUTPUT);
 digitalWrite(Clock, LOW);
 digitalWrite(Latch, LOW);
 digitalWrite(Data,  LOW);
 max6957_init();
}

void loop() {
 //Port 4 a 11 inexistant en vesion PDIP
 max6957_send(0x2C,0x01); // Port 12 a 1 (cf page12 table3)
 delay(1500);
 max6957_send(0x2C,0x00);
 delay(1500);
}

mahth

Bonjour.
Je remonte ce post histoire de donner des nouvelles après avoir remit la main sur mon prototype ce matin.
Mon code ci-dessus est bien valide, le problème venait de plus haut, coté Stickduino, la pin digital 0 ne voulait apparemment rien savoir.
Après être passer sur la série 4/5/6, la led sur la pin 5 (port 12) s'allume bien, et vice-versa avec 0/1/2.
Que du bonheur en somme :).
Bonne journée.

Luj06

Je suis pas sûr de comprendre : le bus SPI utilise des ports précis normalement, non ? donc comme digital 0 est dédié à la liaison série, il ne peut pas aussi être associé au SPI, si ? SPI, ce sont les pattes MISO, MOSI et SCK non ?

Go Up