CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

PCF8576 lcd driver

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
kmp84



Joined: 02 Feb 2010
Posts: 345

View user's profile Send private message

PCF8576 lcd driver
PostPosted: Mon Oct 31, 2022 11:16 pm     Reply with quote

Hello,
Can anyone help with driver for PCF8576 lcd?
I have 7 seg. Lcd display (2x6) dig. With 3 chip working in static mode.
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Tue Nov 01, 2022 2:23 am     Reply with quote

Basic driving of the chip is not hard.
However everything after this depends on your LCD and connections.
Multiplex setup. Which chip generates the backplane. Which segment
connects to which pin. LCD drive mode. Bias, etc. etc.
You are going to have to set all of these yourself. Completely dependant
on the wiring and nature of the LCD.
kmp84



Joined: 02 Feb 2010
Posts: 345

View user's profile Send private message

PostPosted: Tue Nov 01, 2022 6:57 am     Reply with quote

You have point exact problem:)
I have basic driver for run this chip , but connection to segments are bit mixed up. 1/2 dig. Is connected to first chip and 1/2 to third chip. Digit 1 to 12 are not sequentially with address and different coding.
How to make map and coding digits?

Best Wishes!
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Tue Nov 01, 2022 7:42 am     Reply with quote

The normal way would be to setup an array of values defining the bits
involved.
I'd suggest sitting down and writing a slow test program that
cycles through each output bit in turn, perhaps displaying the bit number
via serial, while it turns on each bit in turn. You can then record the bit
numbers for each segment in each digit. With these known, you can then
generate a bitmap for each digit and value.
kmp84



Joined: 02 Feb 2010
Posts: 345

View user's profile Send private message

PostPosted: Tue Nov 01, 2022 8:24 am     Reply with quote

Hi mr.TT,

For now I wrote small test program that first make initialization and then go from 1 to 19 and write 0xff that switch ON all segments of all 12 digits. I'll decode dig. 0-9 it's OK. But one dig. has, for example 4 bits for i2c add. 0 and 4 bits for add. 6. How to make bitmap? Some example of this kind of bitmap?

Thank you,
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Wed Nov 02, 2022 2:13 am     Reply with quote

Because of the design here, you would need to do it as a two dimensional
array. One dimension the digits, and the other the 0-9 for the numeric values
for each digit.
kmp84



Joined: 02 Feb 2010
Posts: 345

View user's profile Send private message

PostPosted: Wed Nov 02, 2022 2:29 am     Reply with quote

Ttelmah wrote:
Because of the design here, you would need to do it as a two dimensional
array. One dimension the digits, and the other the 0-9 for the numeric values
for each digit.

Yes. I thinking about this but it will produce so many combination.
Ok, I’ll try.

Thank you!
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Wed Nov 02, 2022 2:41 am     Reply with quote

Like all things there are other ways of doing this. For instance you could
have an array of all the 'a' segments, another of the 'b's etc.
Then for each digit just have which segments have to be on (perhaps
as an int1 array, for each number.

So for digit 1, if you want to output '2', you look in the segment array
and find you need a, b, g, e, d. So you look in the a segment array to
find which bit this is, same for the b, then other bits.
Takes less space but involves a bit more work in the decoding.
kmp84



Joined: 02 Feb 2010
Posts: 345

View user's profile Send private message

PostPosted: Wed Nov 16, 2022 2:10 pm     Reply with quote

Hello,

I forgot to post simple test example, just for start using PCF8575 LCD Driver. One PCF8575 IC manage x40 segments in static mode.

Code:


#include <16F1459.h>
#fuses INTRC_IO,NOPLLEN,NOPROTECT,MCLR,PUT,NOWDT  // CLKOUT -> Enable clk/4 out on PIN_A4
#use delay(int=16MHz, clock=24MHz)
#USE RS232(DEBUGGER,rcv=PIN_B6,xmit=PIN_B6,stream=STREAM_SERIAL_INPUT)

#use i2c(Master,sda=PIN_A5,scl=PIN_A4)

#define LCD_SLAVEADR     0b01110000  // 0x70, SA0-GND // PCF8576CT

#define LCD_OFF          0b11010001  // Mode Set:   C,1,0,LP,En,B,M1,M0
#define LCD_ON           0b11001001  // Mode Set:   C,1,0,LP,En,B,M1,M0
#define LCD_DPTRSEL      0b10000000  // DP select   C,0,P5,P4,P3,P2,P1,P0
#define LCD_BANKSEL      0b11111000  // Bank Select C,1,1,1,1,0,I,O
#define LCD_BLINKOFF     0b11110000  // Blink OFF   C,1,1,1,0,A,BF,1BF
#define LCD_BLINK2HZ     0b11110001  // Blink 2Hz   C,1,1,1,0,A,BF,1BF
#define LCD_BLINK1HZ     0b11110010  // Blink 1Hz   C,1,1,1,0,A,BF,1BF
#define LCD_BLINK05HZ    0b11110011  // Blink 0.5Hz C,1,1,1,0,A,BF,1BF
#define LCD_DEVSEL_L1    0b11100000  // Device Sel: C,1,1,0,0,A2,A1,A0
#define LCD_DEVSEL_L2    0b11100010  // Device Sel: C,1,1,0,0,A2,A1,A0
#define LCD_DEVSEL_L3    0b11100100  // Device Sel: C,1,1,0,0,A2,A1,A0


/* Clear All digits(Segments) */
void InitEP600Lcd(unsigned int8 Size){
   
   unsigned int8 i;
   int8 status;                              // Status = 0 if got an ACK
               
   i2c_start();                              // i2c Start
   status = i2c_write(LCD_SLAVEADR);       // w-0x7C
   status = i2c_write(LCD_OFF);            // w-
   status = i2c_write(LCD_DPTRSEL);        // w-
   status = i2c_write(LCD_BANKSEL);        // w-
   status = i2c_write(LCD_BLINKOFF);       // w-
   status = i2c_write(LCD_ON);             // w-
   status = i2c_write(LCD_DEVSEL_L1&0x7F); // w- First subadr. a0,a1,a2 = 0; and clr. bit7=C(Last cmd!)
   
   for(i=0; i<Size; i++){                      //
      status = i2c_write(0);                 // w- RAM data..
      delay_ms(300);
   }
   i2c_stop();                               // i2c Stop
}

/* Switch ON All digit (Segments) */
void SetAllSegments(unsigned int8 Size){   
   unsigned int8 i;
   
   i2c_start();                            // i2c Start
   i2c_write(LCD_SLAVEADR);                // w-0x7C
   i2c_write(LCD_DPTRSEL);                 // w-

   i2c_write(LCD_DEVSEL_L1&0x7F);          // w- First subadr. a0,a1,a2 = 0; and clr. bit7=C(Last cmd!)
   
   for(i=0; i<Size; i++){
      i2c_write(0xff);                     // w- RAM data..
   }
   i2c_stop();                             // i2c Stop
}

#zero_ram
void main(void){
   
   delay_ms(100);                         //StartUp Delay.
   setup_adc(ADC_OFF);                    //Stop ADC.
   setup_adc_ports(NO_ANALOGS);           //Disable Adc-channels.
   setup_comparator(NC_NC_NC_NC);         //Disable Comparator module.   
   
   
   printf("\n\rLCD Display PCF8576CT Demo\n\r");
   
   InitEP600Lcd(24);                      // Init PCF8566-LCD. and Clear all Segment(digits)
   delay_ms(2000);
   SetAllSegments(24);                    // Switch ON All Segments (digits)
   
   for(;;){
     
     // User Code ...
   }
}

Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group