bonjour,
J'ai pu récuperer 3 autres blocs de 4 matrices 8x8 H MAX7219 que m'a remis un ami..
et les 3 sont en mode inverse ..
entree DIN connecteur à droite des 3 modules ..
pour un defilement de droite à gauche , colonne par colonne ..
J'ai eu à nouveau des surprises ..
sur les 12 digits , que 8 qui défilent correctement à gauche et 9,10 ,11,12 bigornés !
en relisant tous les posts et avec la datasheet RAM BANK du 18F26K22 sous la main
adresse depart pour la zone de travail RAM 0x0016 + 96 = 0x0076
il y a telescopage au dela de 0x5F
Ce qui est étonnant, c'est que je ne l'ai pas vu avec
la version precedente 2 modules 4 xmatrice dans un sens (connecteur à gauche) et le 3em bmoc de 4xMatice sens inverse (connecteur à droite)
La zone 96bits etant déclarée au meme endroit 0x0016
en fait, pourquoi avoir choisi 0x0016, car est située APRES les Regsistre dédiées au Compilateur MikroC R00 à R20
qu'il ne faut absolument pas toucher .. à moins d'etre un supercrak en ASM
et rester en Bank0 accessible de toute part.
pour une appli avec 8 matrices .. ça rentre 0x016 + 64 => 0x56 ( < 0x5F donc OK)
le Probleme est bien visible en activant le mode affichage sur terminal (au lieu des matrices )
les 8 premiers caracteres défilent bien à chaque scan, le '9' est bigorné et les autres '10','A','B' sont figés
Problemo_decalage_96bits_vu_sur_terminal_200307.jpg
post#73 de Satinas...donne la solution
utiliser bsr pour pointer sur un autre bloc RAM (Bank)
Code : Tout sélectionner
unsigned char save_bsr ; unsigned char save_w ; unsigned long temps[24] absolute OFFSET; char Bouclage absolute OFFSET+96;
voir decalage 96 bits , ci dessous ,pour ne décaler qu'une seule colonne à la fois (pixel)
le programme affiche d'abord une trame fixe de 12 caracteres
puis circule en boucle de droite à gauche ..
Code : Tout sélectionner
UART1_Write_CText(" Clear 12 Matrices MAX7219 \r\n" ) ;
Clear_12_Matrice() ;
CRLF1();
SPI_CS=1;
CRLF1();
k=0;
do
{
UART1_Write_CText(" Test Affichage STATIQUE de 12 cars :<0123456789AB>\r\n");
strConstRamCpy(CRam1,"0123456789AB");
remplis_buffer_with_string(CRam1);
_Affiche_96bits_12_Matrices_H();
Delay_ms(2000);
UART1_Write_CText(" Affichage Buffer depuis <OFFSET=0x100h> 24 longs! \r\n");
pB=OFFSET;
for(j=0;j<8;j++)
{ SPI_Write_To_12x7219(j+1,
*(pB+88+j),*(pB+80+j),*(pB+72+j) ,*(pB+64+j),
*(pB+56+j) ,*(pB+48+j),*(pB+40+j),*(pB+32+j),
*(pB+24+j) ,*(pB+16+j),*(pB+8+j),*(pB+j));
Delay_ms(1);
}
CRLF1();
for (j=0;j<96;j++)
{
_Affiche_96bits_12_Matrices_H();
_asm{
movffl WREG,_save_w ; sauvegarder W
movffl BSR,_save_bsr ; sauvegarder BSR
movlb 1 ; sélectionner bank1, BSR = 1
bcf STATUS,C
rlcf _temps+88,F
rlcf _temps+80,F
rlcf _temps+72,F
rlcf _temps+64,F
rlcf _temps+56,F
rlcf _temps+48,F
rlcf _temps+40,F
rlcf _temps+32,F
rlcf _temps+24,F
rlcf _temps+16,F
rlcf _temps+8,F
rlcf _temps+0,F
bcf STATUS,C
rlcf _temps+89,F
rlcf _temps+81,F
rlcf _temps+73,F
rlcf _temps+65,F
rlcf _temps+57,F
rlcf _temps+49,F
rlcf _temps+41,F
rlcf _temps+33,F
rlcf _temps+25,F
rlcf _temps+17,F
rlcf _temps+9,F
rlcf _temps+1,F
bcf STATUS,C
rlcf _temps+90,F
rlcf _temps+82,F
rlcf _temps+74,F
rlcf _temps+66,F
rlcf _temps+58,F
rlcf _temps+50,F
rlcf _temps+42,F
rlcf _temps+34,F
rlcf _temps+26,F
rlcf _temps+18,F
rlcf _temps+10,F
rlcf _temps+2,F
bcf STATUS,C
rlcf _temps+91,F
rlcf _temps+83,F
rlcf _temps+75,F
rlcf _temps+67,F
rlcf _temps+59,F
rlcf _temps+51,F
rlcf _temps+43,F
rlcf _temps+35,F
rlcf _temps+27,F
rlcf _temps+19,F
rlcf _temps+11,F
rlcf _temps+3,F
bcf STATUS,C
rlcf _temps+92,F
rlcf _temps+84,F
rlcf _temps+76,F
rlcf _temps+68,F
rlcf _temps+60,F
rlcf _temps+52,F
rlcf _temps+44,F
rlcf _temps+36,F
rlcf _temps+28,F
rlcf _temps+20,F
rlcf _temps+12,F
rlcf _temps+4,F
bcf STATUS,C
rlcf _temps+93,F
rlcf _temps+85,F
rlcf _temps+77,F
rlcf _temps+69,F
rlcf _temps+61,F
rlcf _temps+53,F
rlcf _temps+45,F
rlcf _temps+37,F
rlcf _temps+29,F
rlcf _temps+21,F
rlcf _temps+13,F
rlcf _temps+5,F
bcf STATUS,C
rlcf _temps+94,F
rlcf _temps+86,F
rlcf _temps+78,F
rlcf _temps+70,F
rlcf _temps+62,F
rlcf _temps+54,F
rlcf _temps+46,F
rlcf _temps+38,F
rlcf _temps+30,F
rlcf _temps+22,F
rlcf _temps+14,F
rlcf _temps+6,F
bcf STATUS,C
rlcf _temps+95,F
rlcf _temps+87,F
rlcf _temps+79,F
rlcf _temps+71,F
rlcf _temps+63,F
rlcf _temps+55,F
rlcf _temps+47,F
rlcf _temps+39,F
rlcf _temps+31,F
rlcf _temps+23,F
rlcf _temps+15,F
rlcf _temps+7,F
movffl _save_bsr,BSR ; recharger BSR
movffl _save_w,WREG ; recharger W
}
Delay_ms(50);
}while(1);
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.