MAX6954 SPI Help

Discussion on projects that are created by users and posted on mikroElektronika website.
Post Reply
Author
Message
jayanthd
Posts: 630
Joined: 08 May 2013 18:31
Location: Bangalore

MAX6954 SPI Help

#1 Post by jayanthd » 21 May 2013 13:19

I have written a SPI code for MAX6954 to drive 8 X 16 Segment displays but it is not working. I am testing it in both hardware and Proteus. In Proteus I sometimes see one of the display turn ON for a moment. I am posting my Code and attaching my mikroC PRO PIC + Proteus files. I feel it is an issue with timing that is causing it not to work. Please have a look at my code and tell me where I have gone wrong. If possible please test it on hardware and tell me what is the problem. I don't have an Oscilloscope.

Code: Select all

#define reg_noOp 0x00
#define reg_decodeMode 0x01
#define reg_globalIntensity 0x02
#define reg_scanLimit 0x03
#define reg_configuration 0x04
#define reg_displayTest 0x07
#define reg_digitType 0x0C

#define reg_intensity10 0x10
#define reg_intensity32 0x11
#define reg_intensity54 0x12
#define reg_intensity76 0x13
#define reg_intensity10a 0x14
#define reg_intensity32a 0x15
#define reg_intensity54a 0x16
#define reg_intensity76a 0x17

#define USE_GLOBAL 0x00
#define USE_DISCRETE 0x40
#define RUN 0x01
#define SHUTDOWN 0x00

#define reg_digit0 0x60
#define reg_digit1 0x61
#define reg_digit2 0x62
#define reg_digit3 0x63
#define reg_digit4 0x64
#define reg_digit5 0x65
#define reg_digit6 0x66
#define reg_digit7 0x67
#define reg_digit0a 0x68
#define reg_digit1a 0x69
#define reg_digit2a 0x6A
#define reg_digit3a 0x6B
#define reg_digit4a 0x6C
#define reg_digit5a 0x6D
#define reg_digit6a 0x6E
#define reg_digit7a 0x6F

sbit Chip_Select at RC6_bit;
sbit SoftSpi_CLK at RC3_bit;
sbit SoftSpi_SDI at RC4_bit;
sbit SoftSpi_SDO at RC5_bit;

sbit Chip_Select_Direction at TRISC6_bit;
sbit SoftSpi_CLK_Direction at TRISC3_bit;
sbit SoftSpi_SDI_Direction at TRISC4_bit;
sbit SoftSpi_SDO_Direction at TRISC5_bit;

unsigned digits[] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x53, 0x36, 0x37, 0x38, 0x39};
unsigned char digitsdp[] = {0xB0, 0XB1, 0XB2, 0XB3, 0XB4, 0X75, 0XB6, 0XB7, 0XB8, 0XB9};
unsigned char alphabets1[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0X4B, 0X4C, 0X4D, 0X4E, 0X4F,
                              0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A};
unsigned char alphabets2[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0X6B, 0X6C, 0X6D, 0X6E, 0X6F,
                              0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0X7A};

void MAX6954_Write(unsigned char command, unsigned char data_);
void MAX6955_Init();

void MAX6954_Write(unsigned char command, unsigned char data_)
{

   Chip_Select = 0;
   Soft_SPI_Write(command);
   Soft_SPI_Write(data_);
   Chip_Select = 1;



}

void MAX6955_Init()
{
   MAX6954_Write(reg_decodeMode, 0xFF);
   MAX6954_Write(reg_scanLimit, 0x07);
   MAX6954_Write(reg_configuration, (RUN|USE_DISCRETE));
   MAX6954_Write(reg_globalIntensity, 0x13);
   MAX6954_Write(reg_digitType, 0x00);
   MAX6954_Write(reg_displayTest, 0x01);
   delay_ms(1000);
   MAX6954_Write(reg_displayTest, 0x00);

}

unsigned char i = 0, j = 0, strvolt[23], dpset = 0;
float volt = 0.0;

void main(){

   TRISB = 0x00;
   TRISC = 0x00;
   TRISC.F4 = 1;
   CMCON = 0X07;
   ADCON0 = 0b10000000;
   ADCON1 = 0b11001110;
   CVRCON.CVROE = 0;
   Chip_Select = 1;
   //SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
   Soft_SPI_Init();
   MAX6955_Init();

   while(1){


         volt = ADC_Read(0);
         volt = volt * (5.0 / 1023.0) * 60.0;
         FloatToStr(volt, strvolt);
         j = 0;
         for(i = 0; i < 8; i++){
                 if(strvolt[i] != '.'){
                        if(dpset == 0)
                        MAX6954_Write(0x20 + i, digits[strvolt[i] - 0x30]);
                        else if(dpset == 1)
                        MAX6954_Write(0x20 + i - 1, digits[strvolt[i] - 0x30]);
                 }
                 else if(strvolt[i] == '.'){
                        MAX6954_Write(0x20 + (i - 1), digitsdp[strvolt[i - 1] - 0x30]);
                        dpset = 1;
                 }
         }
         dpset = 0;
         MAX6954_Write(0x27, alphabets2[21]);
         Delay_ms(1000);
   }
}
Attachments
SPI MAX6954 v1.rar
(100.11 KiB) Downloaded 227 times
[HW:] EasyPIC v7, mikroProg PIC, AVR, STM32, PSoC, Tiva, 8051
[SW:] mikroC PRO PIC, dsPIC, PIC32, AVR, ARM, 8051
mikroBasic PRO PIC, dsPIC, PIC32, AVR, ARM, 8051
mikroPascal PRO PIC, dsPIC, PIC32, AVR, ARM, 8051
Visual GLCD, Visual TFT

Post Reply

Return to “User Projects”