Electronic Projects, forums and more.

Go Back   Electronic Circuits Projects Diagrams Free > Electronics Categories > Micro Controllers


Micro Controllers Discuss all aspects of micro controllers - building them, coding them, etc. All controllers are welcome - PIC, BASIC, Z8 Encore!, etc.

Reply
 
Tools
Old 10th November 2008, 02:07 AM   #1
Default 5x7 Matrix Issue

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 by AtomSoft; 10th November 2008 at 02:09 AM.
AtomSoft is offline  
Old 10th November 2008, 02:36 AM   #2
Default

Quote:
Originally Posted by AtomSoft View Post
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.
__________________
=========================
Futz's Microcontrollers & Robotics
=========================
futz is offline  
Old 10th November 2008, 04:19 AM   #3
Default

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)
__________________
Inside every little problem, is a big problem trying to get out.
kchriste is online now  
Old 10th November 2008, 12:32 PM   #4
Default

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.
AtomSoft is offline  
Old 10th November 2008, 01:09 PM   #5
Default

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.
__________________
Il give you shocking experience.
Someone Electro is offline  
Old 10th November 2008, 02:27 PM   #6
Default

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.
Pommie is online now  
Old 10th November 2008, 03:22 PM   #7
Default

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 by AtomSoft; 10th November 2008 at 03:23 PM.
AtomSoft is offline  
Old 10th November 2008, 03:28 PM   #8
Default

OMG thanks Pommie! you saved me so much time! Thanks goes to all of course also.


Why would Alpha being a char overflow?
AtomSoft is offline  
Old 10th November 2008, 03:28 PM   #9
Default

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 by AtomSoft; 10th November 2008 at 03:31 PM.
AtomSoft is offline  
Old 10th November 2008, 05:27 PM   #10
Default

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.
__________________
Il give you shocking experience.
Someone Electro is offline  
Old 10th November 2008, 05:39 PM   #11
Default

Someone Electro:
Awsome i knew about the overflow thing from 0x00-0xFF->0x00 but i didnt know that info on dsPic's . Nice to know
AtomSoft is offline  
Old 10th November 2008, 07:10 PM   #12
Default

Since i had to make my own Eagle drawing would you say this is accurate?


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 fits nice too! I tried it on paper and a foam back and pressed it into the paper.
Attached Thumbnails
5x7 Matrix Issue-matrix.png   5x7 Matrix Issue-led1145.png  

Last edited by AtomSoft; 10th November 2008 at 08:33 PM.
AtomSoft is offline  
Old 10th November 2008, 08:38 PM   #13
Default

Quote:
Originally Posted by AtomSoft View Post
Since i had to make my own Eagle drawing
Excellent! Can I have a copy when you're done? I'll swap ya for my 3M MicroSD socket.
__________________
=========================
Futz's Microcontrollers & Robotics
=========================
futz is offline  
Old 10th November 2008, 10:01 PM   #14
Default

sure let me add some finishing touches and ill post my library here. Its called... well...AtomSoft.lbr lol
AtomSoft is offline  
Old 10th November 2008, 10:37 PM   #15
Default

Here it is. I also made a Molex Mini-B and a V-Ref (7805):

Molex info:
http://www.molex.com/pdm_docs/sd/482420001_sd.pdf
Attached Files
File Type: zip AtomSoft.zip (2.6 KB, 16 views)
AtomSoft is offline  
Reply

Tags
5x7, issue, matrix

Thread Tools
Display Modes


Similar
Title Starter Forum Replies Latest
SPI issue - HW or SW Kryten Micro Controllers 2 24th May 2008 09:30 AM
AV Issue Baggins Electronic Projects Design/Ideas/Reviews 3 6th June 2007 02:26 PM
Pic microcontrolller pwm issue ym2k Micro Controllers 2 23rd September 2004 01:44 AM
some pcb making issue...... bogdanfirst General Electronics Chat 5 5th October 2003 11:05 AM
DVD PSU Issue Callidus General Electronics Chat 1 19th September 2003 03:28 PM



All times are GMT. The time now is 05:50 AM.


Electronic Circuits  |  Learning Electronics
eXTReMe Tracker