Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

5x7 Matrix Issue

Status
Not open for further replies.

AtomSoft

Well-Known Member
Ok i got a new matrix up and its pretty cool. The issue im having is that it shows all data until the letter "T" im not sure why? Everything else seems to work and the letters and number and symbols show fine ... (upto "T") then it jumps to the beginning and everything looks shifted or not in places.

Here is the complete code so far.

Im using 2 8 bit shift registers to control columns in 2 digits. Might alter that later to fit 3 digits. But anyway here is the code:

Code:
#include <p18f448.h>
#include <stdio.h>
#include <delays.h>

#pragma config WDT = OFF, LVP = OFF, OSC = HS

unsigned rom char mytxt[] = {
        0x00, 0x00, 0x00, 0x00, 0x00,            // Code for char  
        0x00, 0x00, 0x5F, 0x00, 0x00,            // Code for char !
        0x00, 0x0E, 0x00, 0x0E, 0x00,            // Code for char "
        0x14, 0x3E, 0x14, 0x3E, 0x14,            // Code for char #
        0x00, 0x2E, 0x6B, 0x3A, 0x00,            // Code for char $
        0x26, 0x16, 0x08, 0x34, 0x32,            // Code for char %
        0x36, 0x49, 0x49, 0x76, 0x60,            // Code for char &
        0x00, 0x06, 0x00, 0x00, 0x00,            // Code for char '
        0x00, 0x1C, 0x22, 0x41, 0x00,            // Code for char (
        0x00, 0x41, 0x22, 0x1C, 0x00,            // Code for char )
        0x22, 0x14, 0x6B, 0x14, 0x22,            // Code for char *
        0x08, 0x08, 0x3E, 0x08, 0x08,            // Code for char +
        0x00, 0x00, 0x58, 0x38, 0x00,            // Code for char ,
        0x00, 0x08, 0x08, 0x08, 0x00,            // Code for char -
        0x60, 0x60, 0x00, 0x00, 0x00,            // Code for char .
        0x20, 0x10, 0x08, 0x04, 0x02,            // Code for char /
        0x3E, 0x45, 0x49, 0x51, 0x3E,            // Code for char 0
        0x00, 0x42, 0x7F, 0x40, 0x00,            // Code for char 1
        0x72, 0x49, 0x49, 0x49, 0x46,            // Code for char 2
        0x22, 0x41, 0x49, 0x49, 0x36,            // Code for char 3
        0x18, 0x14, 0x12, 0x7F, 0x10,            // Code for char 4
        0x2F, 0x49, 0x49, 0x49, 0x31,            // Code for char 5
        0x3E, 0x49, 0x49, 0x49, 0x32,            // Code for char 6
        0x01, 0x71, 0x09, 0x05, 0x03,            // Code for char 7
        0x36, 0x49, 0x49, 0x49, 0x36,            // Code for char 8
        0x26, 0x49, 0x49, 0x49, 0x3E,            // Code for char 9
        0x00, 0x00, 0x36, 0x36, 0x00,            // Code for char :
        0x00, 0x00, 0x5B, 0x3B, 0x00,            // Code for char ;
        0x08, 0x14, 0x22, 0x41, 0x00,            // Code for char <
        0x14, 0x14, 0x14, 0x14, 0x14,            // Code for char =
        0x00, 0x41, 0x22, 0x14, 0x08,            // Code for char >
        0x02, 0x01, 0x59, 0x09, 0x06,            // Code for char ?
        0x0F, 0x05, 0x1F, 0x70, 0x10,            // Code for char @
        0x7E, 0x09, 0x09, 0x09, 0x7E,            // Code for char A
        0x7F, 0x49, 0x49, 0x49, 0x36,            // Code for char B
        0x3E, 0x41, 0x41, 0x41, 0x22,            // Code for char C
        0x7F, 0x41, 0x41, 0x22, 0x1C,            // Code for char D
        0x7F, 0x49, 0x49, 0x49, 0x41,            // Code for char E
        0x7F, 0x09, 0x09, 0x09, 0x01,            // Code for char F
        0x3E, 0x41, 0x49, 0x49, 0x3A,            // Code for char G
        0x7F, 0x08, 0x08, 0x08, 0x7F,            // Code for char H
        0x00, 0x00, 0x7F, 0x00, 0x00,            // Code for char I
        0x30, 0x40, 0x40, 0x3F, 0x00,            // Code for char J
        0x7F, 0x08, 0x14, 0x22, 0x41,            // Code for char K
        0x7F, 0x40, 0x40, 0x40, 0x40,            // Code for char L
        0x7E, 0x01, 0x06, 0x01, 0x7E,            // Code for char M
        0x7F, 0x02, 0x1C, 0x20, 0x7F,            // Code for char N
        0x3E, 0x41, 0x41, 0x41, 0x3E,            // Code for char O
        0x7E, 0x09, 0x09, 0x09, 0x06,            // Code for char P
        0x3E, 0x41, 0x51, 0x21, 0x5E,            // Code for char Q
        0x7E, 0x09, 0x19, 0x29, 0x46,            // Code for char R
        0x26, 0x49, 0x49, 0x49, 0x32,            // Code for char S
        0x01, 0x01, 0x7F, 0x01, 0x01,            // Code for char T
        0x3F, 0x40, 0x40, 0x40, 0x3F,            // Code for char U
        0x1F, 0x20, 0x40, 0x20, 0x1F,            // Code for char V
        0x3F, 0x40, 0x30, 0x40, 0x3F,            // Code for char W
        0x41, 0x22, 0x1C, 0x22, 0x41,            // Code for char X
        0x01, 0x02, 0x7C, 0x02, 0x01,            // Code for char Y
        0x61, 0x51, 0x49, 0x45, 0x43,            // Code for char Z
        0x00, 0x7F, 0x41, 0x41, 0x41,            // Code for char [
        0x02, 0x04, 0x08, 0x10, 0x20,            // Code for char BackSlash
        0x41, 0x41, 0x41, 0x7F, 0x00,            // Code for char ]
        0x08, 0x04, 0x02, 0x04, 0x08,            // Code for char ^
        0x40, 0x40, 0x40, 0x40, 0x40,            // Code for char _
        0x03, 0x03, 0x06, 0x00, 0x00,            // Code for char `
        0x00, 0x20, 0x54, 0x54, 0x38,            // Code for char a
        0x7E, 0x50, 0x50, 0x20, 0x00,            // Code for char b
        0x38, 0x44, 0x44, 0x28, 0x00,            // Code for char c
        0x00, 0x20, 0x50, 0x50, 0x7C,            // Code for char d
        0x38, 0x54, 0x54, 0x48, 0x00,            // Code for char e
        0x10, 0x7C, 0x12, 0x02, 0x04,            // Code for char f
        0x00, 0x24, 0x4A, 0x4A, 0x3C,            // Code for char g
        0x7C, 0x10, 0x10, 0x60, 0x00,            // Code for char h
        0x00, 0x00, 0x7A, 0x00, 0x00,            // Code for char i
        0x20, 0x40, 0x40, 0x3A, 0x00,            // Code for char j
        0x7C, 0x10, 0x6C, 0x00, 0x00,            // Code for char k
        0x00, 0x00, 0x7C, 0x00, 0x00,            // Code for char l
        0x70, 0x08, 0x10, 0x08, 0x70,            // Code for char m
        0x78, 0x10, 0x08, 0x08, 0x70,            // Code for char n
        0x30, 0x48, 0x48, 0x30, 0x00,            // Code for char o
        0x00, 0x7C, 0x14, 0x14, 0x08,            // Code for char p
        0x08, 0x14, 0x14, 0x7C, 0x40,            // Code for char q
        0x00, 0x78, 0x10, 0x08, 0x10,            // Code for char r
        0x00, 0x48, 0x54, 0x54, 0x24,            // Code for char s
        0x00, 0x10, 0x7C, 0x10, 0x00,            // Code for char t
        0x38, 0x40, 0x40, 0x38, 0x00,            // Code for char u
        0x00, 0x38, 0x40, 0x38, 0x00,            // Code for char v
        0x38, 0x40, 0x30, 0x40, 0x38,            // Code for char w
        0x44, 0x28, 0x10, 0x28, 0x44,            // Code for char x
        0x04, 0x08, 0x70, 0x08, 0x04,            // Code for char y
        0x64, 0x54, 0x54, 0x54, 0x4C,            // Code for char z
        0x00, 0x08, 0x36, 0x41, 0x41,            // Code for char {
        0x00, 0x00, 0x7F, 0x7F, 0x00,            // Code for char |
        0x41, 0x41, 0x36, 0x08, 0x00,            // Code for char }
        0x00, 0x00, 0x00, 0x00, 0x00             // Code for char ~
         };
void showChar(unsigned rom char *image, unsigned char alpha);
void Scroll(unsigned rom char *image, unsigned char *alpha);

//SHIFT INFO
#define Shift_Tris TRISD
#define S_Data LATDbits.LATD0
#define RegOne LATDbits.LATD1
#define RegTwo LATDbits.LATD2

void ShiftReg(char Reg, char Data);
void BitShift(char tBit, char Reg);
void showChar(unsigned rom char *image, unsigned char alpha);

void main (void){
	unsigned char i;
	int x,w;

    ADCON1 = 0x07;
	Shift_Tris = 0x00;
	TRISB = 0x00;
	
    while(1){

		for(w=0;w<94;w++){
			for (x=0;x<120;x++){			
				showChar(mytxt,w);
			}
		}

	}
}

void BitShift(char tBit, char Reg){
	char x;

	RegOne = 0;
	RegTwo = 0;

    if(tBit != 0)
            S_Data = 1;
        else
            S_Data = 0;


	if(Reg == 1){
		RegOne = 0;RegOne = 1; 
	}
	else if(Reg == 2){
		RegTwo = 0;RegTwo = 1;
	}

	RegOne = 0;
	RegTwo = 0;
}

void showChar(unsigned rom char *image, unsigned char alpha){
	unsigned char x,y,w,z;
	
	alpha *= 5;
	image += alpha;

	BitShift(1,1);
			
	for (x=0;x<5;x++){
		LATB = *image++ & 0xFF;
		BitShift(0,1);
		Delay100TCYx(60);
	}

	for(x=0;x<2;x++)
		BitShift(0,1);

}



void ShiftReg(char Reg, char Data){
//S_Data  S_Clock RegOne RegTwo 
	char x;

	RegOne = 0;
	RegTwo = 0;


	for(x=0;x<8;x++){
        if((Data & 0x01) != 0)
            S_Data = 1;
        else
            S_Data = 0;

		if(Reg == 1){
			RegOne = 0;Nop();RegOne = 1; 
		}
		else if(Reg == 2){
			RegTwo = 0;Nop();RegTwo = 1;
		}
		

		Data = Data >> 1;
	}

	RegOne = 0;
	RegTwo = 0;
}

EDIT: The above in bold is new.
 
Last edited:
Ok i got a new matrix up and its pretty cool. The issue im having is that it shows all data until the letter "T" im not sure why? Everything else seems to work and the letters and number and symbols show fine ... (upto "T") then it jumps to the beginning and everything looks shifted or not in places.
Does the S show up correctly? The reason I ask is because S is 52 chars * 5 bytes = 260 bytes. I'm thinking it's something to do with it only being able to do 255 bytes. If R was the last character it showed, that would make sense.

Just a guess. I haven't studied the code at all.
 
One of the things that looks a little risky is doing a shift on signed data:

Data = Data >> 1;

In the routine:
void ShiftReg(char Reg, char Data)
 
OK...
Futz the "S" shows Correctly.... But the next one is "!" and its shifted to the RIGHT (>>) by 1?

kchriste im not using that routine yet. Meaning its not being called.
 
If you have the pickit try running debug mode and watching the variable while single stepping trough your code.

And as already sead,watch your byte variables don't overflow somewhere.
 
What happens if you change it to,
Code:
void showChar(unsigned rom char *image, unsigned char alpha){
unsigned char x,y,w,z;
    
    //alpha *= 5;
    //image += alpha;

    image+=5*(int)alpha;
As alpha is a char it will overflow. Casting to an int should fix it.

Mike.
 
I tried to debug but that ghost breakpoint keeps happening and im tired of it. It sux!

I think futz was on the right track.

I seperated the whole thing into Numbers/Symbols/Text(alpha) and it shows each ok when i loop through each.

I guess i can use it like that but i have to create a way to change input for lookup. Like :

Test to perform on all chars:
Code:
1) toupper  to all. If its already a Upper or a symbol then it returns the original.
2) isdigit , isalpha if none of the 2 then its a symbol
3.
  a. If its a alpha. - 0x41
  b. if its a number - 0x30
  c. If its a symbol - 0x20 (for most symbols except 4) 
     c.2. If its last 4 symbols - 0x7B

thats why i wanted it whole :)
 
Last edited:
oh i see now if its char * 5 = overflow on the alpha Its funny tho becuase "S" showed perfect and its number 52

52*5 = 260 and a char is 255. So isnt it supposed to get screwed?
 
Last edited:
PICs don't have error handling so if you overflow a variable it just rolls over back to 0 and goes on from there.

With dsPICs you can have it generate a error or simply clip it to prevent a overflow.
 
Since i had to make my own Eagle drawing would you say this is accurate?
led1145-png.23667

matrix-png.23665

Anyone know how to move the text on the Symbol?

Of course i have to move the pins down some so it matches my datasheet.

OK I now have a eagle part made for it :D fits nice too! I tried it on paper and a foam back and pressed it into the paper.
 

Attachments

  • MATRIX.png
    MATRIX.png
    8.3 KB · Views: 592
  • LED1145.png
    LED1145.png
    68.6 KB · Views: 576
Last edited:
nice thanks. Im always adding new parts now to my eagle library. Mainly becuase im tired of looking :D

Ill add my own resistors with 3-10mm spacings. Caps, Crystals.. etc... And name them generically like the 5x7 Matrix is called 57_Anode_Row. This way i know what it is easy. I mostly do DIP but some SSOP, SOIC are obligations.
 
nice thanks. Im always adding new parts now to my eagle library. Mainly becuase im tired of looking :D

Ha, thanks to both of you - I've collected your parts. As if I didn't have enough libs in my installation already.:p

Just wonder if you knew about this:
**broken link removed**
 
Ha, thanks to both of you - I've collected your parts. As if I didn't have enough libs in my installation already.:p
My SD socket doesn't yet have the four mounting pads/shell automatically connected to ground yet. I'm still learning about how to do that. I'll repost when it's done. If you use it before I repost, fix that.

Just wonder if you knew about this:
**broken link removed**
I do now! :D
 
Which SD socket did you buy, I've got to use one in an upcoming project and am baffled by the sheer amount of different SD sockets there are.
I plan on using a MAX3392E level converter for the 5V to 3.3V level translation.
 
Last edited:
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top