Problème Led matrix Attiny2313

Bonjour,

J'ai réussi à faire afficher des lettres et symboles avec une matrix de led 8x8 1088AS Anode avec un attiny2313V comme cela (ce n'est pas ma photo) :

l'attiny est en dessous la matrix de led :

pin 1 de la matrix est au pin 2 de l'attiny
pin 2 de la matrix est au pin 3 de l'attiny
etc...
pin 16 de la matrix au pin 19 de l'attiny

Maintenant ce que j'ai fait c'est ça :

Mais comme j'inverse le sens de l'attiny2313 il faut que je modifie le code pour que la matrix n'affiche pas n'importe quoi et c'est là que j'arrive pas.

pin 1 de la matrix n'est plus au pin 2 mais au pin 19
pin 2 de la matrix n'est au pin 3 de l'attiny mais au pin 18
etc...
pin 16 de la matrix n'est au pin 19 de l'attiny mais au pin 2

Les pins (broches) du haut en été inversés avec ceux du bas et l'inverse.

Schéma matrix led :

Code qui marche sans retourner l'attiny2313 :

#include <avr/pgmspace.h>

const int row[8]={ //Row pins
1,2,11,5,10,3,15,13 };
const int col[8]={ //Column pins
9,14,7,12,0,6,16,4};

PROGMEM const byte font8x8[40][8] = { //Font matrix
  {
    0x80, 0x60, 0x18, 0x14, 0x13, 0x3C, 0xC0, 0x00      }
  ,  // Code for char A 0
  {
    0x00, 0xFF, 0x91, 0x91, 0x99, 0x66, 0x00, 0x00      }
  ,  // Code for char B 1
  {
    0x78, 0x84, 0x82, 0x81, 0x81, 0x43, 0x00, 0x00      }
  ,  // Code for char C 2
  {
    0x00, 0xFF, 0x81, 0x82, 0x82, 0x44, 0x38, 0x00      }
  ,  // Code for char D 3
  {
    0x00, 0xFF, 0x89, 0x89, 0x89, 0x89, 0x00, 0x00      }
  ,  // Code for char E 4
  {
    0x00, 0xFF, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00      }
  ,  // Code for char F 5
  {
    0x78, 0x84, 0x92, 0x91, 0x91, 0x51, 0x32, 0x00      }
  ,  // Code for char G 6
  {
    0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0xFF, 0x00      }
  ,  // Code for char H 7
  {
    0x81, 0x81, 0xFF, 0x81, 0x81, 0x00, 0x00, 0x00      }
  ,  // Code for char I 8
  {
    0x60, 0x80, 0x81, 0x81, 0xFF, 0x01, 0x01, 0x00      }
  ,  // Code for char J 9
  {
    0x00, 0xFF, 0x18, 0x24, 0x42, 0x81, 0x00, 0x00      }
  ,  // Code for char K 10
  {
    0x00, 0xFF, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00      }
  ,  // Code for char L 11
  {
    0xC0, 0x38, 0x07, 0x38, 0xC0, 0x38, 0x07, 0xF8      }
  ,  // Code for char M 12
  {
    0x00, 0xFF, 0x02, 0x0C, 0x10, 0x20, 0x40, 0xFF      }
  ,  // Code for char N 13
  {
    0x00, 0x7C, 0x82, 0x81, 0x81, 0x81, 0x41, 0x3E      }
  ,  // Code for char O 14
  {
    0x00, 0xFF, 0x21, 0x21, 0x1E, 0x00, 0x00, 0x00      }
  ,  // Code for char P 15
  {
    0x00, 0x3C, 0x42, 0x81, 0xA1, 0x41, 0x81, 0x7E      }
  ,  // Code for char Q 16
  {
    0x00, 0xFF, 0x11, 0x31, 0x4E, 0x80, 0x00, 0x00      }
  ,  // Code for char R 17
  {
    0x00, 0x40, 0x86, 0x89, 0x89, 0x89, 0x71, 0x00      }
  ,  // Code for char S 18
  {
    0x01, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x01, 0x00      }
  ,  // Code for char T 19
  {
    0x00, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x00      }
  ,  // Code for char U 20
  {
    0x00, 0x07, 0x78, 0x80, 0x78, 0x07, 0x00, 0x00      }
  ,  // Code for char V 21
  {
    0xFF, 0xE0, 0x30, 0x18, 0x18, 0x70, 0xC0, 0xFF      }
  ,  // Code for char W 22
  {
    0x81, 0x42, 0x24, 0x18, 0x24, 0x42, 0x81, 0x00      }
  ,  // Code for char X 23
  {
    0x01, 0x06, 0xD8, 0x30, 0x0E, 0x01, 0x00, 0x00      }
  ,  // Code for char Y 24
  {
    0xC1, 0xA1, 0x91, 0x89, 0x85, 0x83, 0x81, 0x00      }
  ,   // Code for char Z 25
  { 
    0x0E, 0x1F, 0x7F, 0xFE, 0xFE, 0x7F, 0x1F, 0x0E     }
  , // Code for HEART 26
  {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00    }, // Code for SPACE 27
    
  
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0 - 28
{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1 - 29
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},//2 - 30
{0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0},//3 - 31
{0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8},//4 - 32
{0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0},//5 - 33
{0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x0},//6 - 34
{0x3E,0x22,0x4,0x8,0x8,0x8,0x8,0x8},//7 - 35
{0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E},//8 - 36
{0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E},//9 - 37


{0x3C,0x8,0x8,0x8,0x8,0x8,0x48,0x30}, // J debout - 38
{0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C},// S debout - 39

};


void setup() {                
  for(int i=0;i<8;i++){
    pinMode(row[i], OUTPUT);    //Set row pins as output
    pinMode(col[i],OUTPUT);     //Set column pins as output
    digitalWrite(row[i], LOW);   // turn off rows
    digitalWrite(col[i], HIGH);   // turn off columns
  }  
}


void display_char(int character ){
  for (int i=0;i<8;i++){ //Cycle through columns

    byte coldata = pgm_read_byte(&font8x8[character][i]); //read column data from PROGMEM
    digitalWrite(col[i],LOW); //Allow current flow in the i'th column
    for(int j=0;j<8;j++){ //cycle through row data

      int x = bitRead(coldata,j); //Read the first bit from the byte (coldata)
      digitalWrite(row[j],x);     // Set the row to 1 or 0

    }
    delayMicroseconds(300);  //Delay for 300us between each segment/column. Don't go bellow 300us!! 
    clearOutput(); //turn off display
  }

}
void clearOutput(){
  for(int i=0;i<8;i++){
    digitalWrite(row[i],LOW); //Turn off rows
    digitalWrite(col[i],HIGH); //Turn off columns
  }
}

void loop() {
  //byte msg[]={8,27,26,27,20,27,9,0,2,10,11,8,13,4}; //Message to be displayed. Numbers corresponds to the position of each letter in the font matrix.
    byte msg[]={27,38,39,35,32,33,35};                                              // In this case the message would be "I 'HEART' U JACKLINE"
for(int i = 0;i<7;i++){ // For each character in msg (total of 14 characters)
    int count=0;        
  while(count<150){
    display_char(msg[i]); //Show the same letter 250 times ~ 250*8*300us = 0.6s for each letter.
    count++;
  }
  delayMicroseconds(100); //Delay between each character for stability
}
}

Si quelqu'un peut modifier mon code ça sera gentil !

PS : Je programme l'attiny2313 avec un Arduino Uno

Merci d'avance

un petit effort avec un papier et un crayon .........

testes avec ça

//const int row[8]={1,2,11,5,10,3,15,13 };//avant
const int row[8]={16,15,6,12,7,14,2,4 };//apres

//const int col[8]={9,14,7,12,0,6,16,4};//avant
const int col[8]={8,3,10,5,0,11,1,13};//apres

Je te remercie, je vais tester.

J'avais comme même essayé mais je me suis emmêlé et je n'ai pas trop compris à quoi correspondait les chiffres dans le code.

j'ai fais ça

Ça ne marche pas, cela affiche du n'importe quoi.

Je viens de voir que j'ai fait une erreur quand j'ai copié mon code sur mon premier post :

c'est plutôt :

const int row[8]={ //Row pins
16,15,11,5,10,3,2,13 };
const int col[8]={ //Column pins
9,14,7,12,0,6,1,4};
//const int row[8]={16,15,11,5,10,3,2,13 };//avant
  const int row[8]={1,2,6,12,7,14,15,4 };//apres

[s]//const int col[8]={9,14,7,12,0,6,1,4};//avant[/s]
[s]  const int col[8]={8,3,10,5,0,11,16,13};//apres[/s]

nota :comme je ne vois pas ce que viens faire un 0 ( zéro) dans la déclaration des pinoches, je suppose que c'est un huit. et si c'est bien un huit il faut changer
//const int col[8]={9,14,7,12,0,6,1,4};//avant
const int col[8]={8,3,10,5,9,11,16,13};//apres

Merci mais cela ne marche pas non plus, ça affiche n'importe quoi même en changeant le 8.

Moi aussi le 0 me semble étrange, voilà d'ou j'ai pris le code :

http://forum.arduino.cc/index.php?topic=116477.0

J'ai du changer ça :

const int row[8]={ //Row pins
  9,14,7,12,0,6,1,4};
const int col[8]={ //Column pins
  13,2,3,10,5,11,15,16};

en ça : (car ma matrix de led est anode et non cathode)

const int row[8]={ //Row pins
16,15,11,5,10,3,2,13 };
const int col[8]={ //Column pins
9,14,7,12,0,6,1,4};

Je vais retester avec l'attiny2313 à l'endroit.

Je retester avec avec l'attiny2313 à l'endroit et cela marche correctement mais pas quand on inverse le sens.

bizarre...

donc à l'endroit, avec cette déclaration, ca fonctionne
const int row[8]={ //Row pins
16,15,11,5,10,3,2,13 };
const int col[8]={ //Column pins
9,14,7,12,0,6,1,4};
et attiny <===> matrice si matrice inversée

2 1 16
3 2 15
4 3 14
5 4 13
6 5 12
7 6 11
8 7 10
9 8 9
10 rien rien
11 rien rien
12 9 8
13 10 7
14 11 6
15 12 5
16 13 4
17 14 3
18 15 2
19 16 1
20 rien rien

C'est ca oui, ca me semble logique mais cela montre du n'importe quoi au lieu de lettre.

Par contre le 0 est étrange.

Ah mais ça ne serait pas plutôt les pins de l'attiny non ?

le 0 correspondrait a PD0 > pin 2 de l'attiny.

tu me dis que ta matrice de leds est inversée par rapport à celle faite pour le code d'origine.
que ta matrice est à anodes communes sur les colonnes alors que la matrice prévue pour le prog est à cathodes communes sur les colonnes.
effectivement, on peut penser qu'il s'agit des pinoches du µ, mais cela s'arête à 16

par contre ton schéma du µ, il comporte une numérotation qui n'a rien a voir avec la réalité de l'attiny

ce schéma est il fourni avec le prog ? tout deviendrait plus facile

tu me dis que ta matrice de leds est inversée par rapport à celle faite pour le code d'origine.

Plutôt l'attiny.

que ta matrice est à anodes communes sur les colonnes alors que la matrice prévue pour le prog est à cathodes communes sur les colonnes.

exact mais je l'ai modifié (attiny à l'endroit)

effectivement, on peut penser qu'il s'agit des pinoches du µ, mais cela s'arête à 16

oui mais ces pinoches ont les utilises dans le programme, si veut faire clignoter une led à la broche au pin 4 de l'attiny il faudra mettre pin 2 dans le code.

ce schéma est il fourni avec le prog ? tout deviendrait plus facile

Non, j'ai vu ça sur google. Vu qu'il y avait un 0 j'ai pensé à ça.

attiny <===> matrice si matrice inversée attiny pin pour le code

2 1 16 0
3 2 15 1
4 3 14 2
5 4 13 3
6 5 12 4
7 6 11 5
8 7 10 6
9 8 9 7
10 rien rien
11 rien rien
12 9 8 9
13 10 7 10
14 11 6 11
15 12 5 12
16 13 4 13
17 14 3 14
18 15 2 15
19 16 1 16
20 rien rien

un espoir de retrouver la source?

Je parlais du schéma : "ce schéma est il fourni avec le prog ? tout deviendrait plus facile"

C'est moi qui a ajouté la colonne de droite:

attiny <===> matrice si matrice inversée attiny pin pour le code

2 1 16 0
3 2 15 1
4 3 14 2
5 4 13 3
6 5 12 4
7 6 11 5
8 7 10 6
9 8 9 7
10 rien rien
11 rien rien
12 9 8 9
13 10 7 10
14 11 6 11
15 12 5 12
16 13 4 13
17 14 3 14
18 15 2 15
19 16 1 16
20 rien rien

non, je parlais bien du schéma de l'attiny, il y a des entetes de colonne en haut, à gauche et à droite qui disent "PIN dans le CODE"

d'où ma question, ce schéma est il donné avec ton code

pour la matrice inversée ( cathode/anode )
il aurait fallu, je pense, inverser les commandes dans le code

par exemple ici

void clearOutput(){
  for(int i=0;i<8;i++){
    digitalWrite(row[i],LOW); //Turn off rows
    digitalWrite(col[i],HIGH); //Turn off columns
  }
}

non il était pas avec.

Surement.

Comment ? (Je suis nul tout ce qui est calcul malheureusement).

void clearOutput(){
  for(int i=0;i<8;i++){
    digitalWrite(row[i],LOW); //Turn off rows
    digitalWrite(col[i],HIGH); //Turn off columns
  }
}

Code des pins du code original pour matrix cathode.

const int row[8]={ //Row pins
  9,14,7,12,0,6,1,4};
const int col[8]={ //Column pins
  13,2,3,10,5,11,15,16};

Encore merci !

tu confirmes qu' avec le µ à l'endroit, tu écrit bien des lettres et des chiffres et que c'est bien ce que tu veux écrire ?
le schéma de la matrice correspond bien à celle que tu utilises?

tu confirmes qu' avec le µ à l'endroit, tu écrit bien des lettres et des chiffres et que c'est bien ce que tu veux écrire ?

Oui

le schéma de la matrice correspond bien à celle que tu utilises?

Oui, c'est un 1088AS Anode.

alors, on repart de zéro :

as tu mis des résistances de limitation? (220 ohms pour 5V ). attention, avec toutes les inversions qu'il y a eu.....

sur ta matrice, as tu dans un angle, un repère pour te signaler la pinoche N°1?

sur le schéma de la matrice, le N° de chaque ligne /colonne est en face de la pinoche de la matrice qui lui correspond.

selon le schéma ci joint, ta matrice est à cathodes communes sur les lignes.

pour allumer un point, il faut mettre "0" sur la ligne et "1" sur la colonne qui lui correspondent.

lorsque tu montes le µ à l'envers et que rien ne fonctionne .
donnes la correspondance des pinoches de la matrice et du µ sous forme de tableau comme je t'en ai fait un plus haut
comment dis tu à l'IDE arduino que tu compile pour un attyni2313, ( il a besoin de le savoir pour la correspondance des pinoches)
comment compiles tu le programme?
comment le charges tu dans le µ?
ton µ est monté en dur sur une plaquette, tu utilises une horloge interne?
le condo que je vois sur ta photo est pour un reset automatique à la mise sous tension?

1088AS.png

bon, j'ai regardé le code
les colonnes sont déclarées comme ceci: col1, col2, col3, col4, col5, col6, col7, col8
les lignes sont déclarées comme ceci....: lig1, lig2, lig3, lig4, lig5, lig6, lig7, lig8

bien sur il faut déclarer les N° des pinoches du µ qui sont raccordées à ces pinoches de la matrice

exemple: colonne 1 de la matrice = pinoche 13 de la matrice, implique qu'il faut mettre le N° de pin du µ qui est raccordée à cette pinoche 13 de la matrice.

autrement, le programme d'origine est fait pour une matrice à cathodes communes sur les lignes.
la matrice 1088AS est inversée, donc il y a deux solutions

_soit dans les déclarations, inverser les libellés des lignes col et row et ensuite tourner d'un quart de tour la matrice.
_soit inverser les cdes dans le code : les HIGH en LOW et les LOW en HIGH et inverser X: x=!x

pour moi, n'étant un habitué de la prog des atiny avec arduino, je ne sais pas s'il faut mettre directement les N° des pinoches de l'atiny ou si l'atiny est monté sur une platine "arduino, il faudrait tenir compte d'une correspondance.

j'ai trouvé ceci:
// ATMEL ATTINY2313 et pins arduino
//
// +-/-+
// (D 17) PA2 1| |29 VCC
// RX (D 0) PD0 2| |19 PB7 (D 16)
// TX (D 1) PD1 3| |18 PB6 (D 15)
// (D 2) PA1 4| |17 PB5 (D 14)
// (D 3) PA0 5| |16 PB4 (D 13)*
// INT0 (D 4) PD2 6| |15 PB3 (D 12)*
// INT1 (D 5) PD3 7| |14 PB2 (D 11)*
// (D 6) PD4 8| |13 PB1 (D 10)
// *(D 7) PD5 9| |12 PB0 (D 9)
// GND 10| |11 PD6 (D 8 )