Jump to content
43oh

4ch Volt Meter using Nokia 5110


Recommended Posts

This is just to show what can be done with 5110.
FYI, inputs are floating, top bar is P1.3, which is pulled-up by default, values are raw, not calibrated.



#include "msp430g2553.h"
#include "PCD8544.h"

#define LCD5110_SCLK_PIN BIT5
#define LCD5110_DN_PIN BIT7
#define LCD5110_SCE_PIN BIT4
#define LCD5110_DC_PIN BIT6
#define LCD5110_SELECT P1OUT &= ~LCD5110_SCE_PIN
#define LCD5110_DESELECT P1OUT |= LCD5110_SCE_PIN
#define LCD5110_SET_COMMAND P1OUT &= ~LCD5110_DC_PIN
#define LCD5110_SET_DATA P1OUT |= LCD5110_DC_PIN
#define LCD5110_COMMAND 0
#define LCD5110_DATA 1

void writeStringToLCD(const char *string);
void writeCharToLCD(char c);
void writeToLCD(unsigned char dataCommand, unsigned char data);
void clearLCD();
void setAddr(unsigned char xAddr, unsigned char yAddr);
void initLCD();

void binaryToUnpackedBCD(unsigned int n, unsigned char * digits);
unsigned char bcd[4] = {0,0,0,0};

int adc[4] = {0,0,0,0};
unsigned char last[4] = {0,0,0,0};
static const char tick[64] = {
0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04,
0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04,
0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04,
0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04,
0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04,
0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04, 0x06, 0x04,
0x07, 0x04, 0x06, 0x04
};

void main(void) {

WDTCTL = WDTPW + WDTHOLD; // disable WDT
BCSCTL1 = CALBC1_1MHZ; // 1MHz clock
DCOCTL = CALDCO_1MHZ;

P1OUT |= LCD5110_SCE_PIN + LCD5110_DC_PIN;
P1DIR |= LCD5110_SCE_PIN + LCD5110_DC_PIN;

// setup USIB
P1SEL |= LCD5110_SCLK_PIN + LCD5110_DN_PIN;
P1SEL2 |= LCD5110_SCLK_PIN + LCD5110_DN_PIN;

UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master
UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 |= 0x01; // 1:1
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST; // clear SW

ADC10CTL1 = INCH_3 + CONSEQ_1;
ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
ADC10DTC1 = 0x04;
ADC10AE0 |= 0x0F;

_delay_cycles(500000);
initLCD();
clearLCD();

// LCD test
writeStringToLCD("4ch Volt Meter");
setAddr(0,5);
writeStringToLCD("by RobG @ 43oh");

char c = 0; // setup tickmarks
char d = 0;
while(d < 4) {
d++;
c = 0;
setAddr(0,d);
while(c < 64) {
writeToLCD(LCD5110_DATA, tick[c]);
c++;
}
}

_bis_SR_register(GIE);

while(1) {
ADC10SA = (unsigned int)&adc[0];
ADC10CTL0 |= ENC + ADC10SC;
_delay_cycles(100000);
}
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void) {
ADC10CTL0 &= ~ENC;
char c = 0;
while(c < 4) {
unsigned char curr = adc[c] >> 4;
unsigned char prev = last[c];
unsigned char b = 0;
unsigned char t = 0;
binaryToUnpackedBCD(curr, bcd);

if(curr < prev) {
setAddr(curr, c + 1);
b = prev - curr + 1;
t = curr;
while(b > 0) {
writeToLCD(LCD5110_DATA, tick[t++]);
b--;
}
} else if(curr > prev) {
setAddr(prev, c + 1);
b = curr - prev;
t = prev;
while(b > 0) {
writeToLCD(LCD5110_DATA, 0x70 | tick[t++]);
b--;
}
}
setAddr(70 ,c + 1);
writeCharToLCD(bcd[2] + 0x30);
writeToLCD(LCD5110_DATA, 0x40);
writeToLCD(LCD5110_DATA, 0x0);
writeCharToLCD(bcd[3] + 0x30);
last[c] = curr;
c++;
}
}

void writeStringToLCD(const char *string) {
while(*string) {
writeCharToLCD(*string++);
}
}

void writeCharToLCD(char c) {
unsigned char i;
for(i = 0; i < 5; i++) {
writeToLCD(LCD5110_DATA, font[c - 0x20][i]);
}
writeToLCD(LCD5110_DATA, 0);
}

void writeToLCD(unsigned char dataCommand, unsigned char data) {
LCD5110_SELECT;
if(dataCommand) {
LCD5110_SET_DATA;
} else {
LCD5110_SET_COMMAND;
}
UCB0TXBUF = data;
while(!(IFG2 & UCB0TXIFG))
;
LCD5110_DESELECT;
}

void clearLCD() {
setAddr(0, 0);
int c = 0;
while(c < PCD8544_MAXBYTES) {
writeToLCD(LCD5110_DATA, 0);
c++;
}
setAddr(0, 0);
}

void setAddr(unsigned char xAddr, unsigned char yAddr) {
writeToLCD(LCD5110_COMMAND, PCD8544_SETXADDR | xAddr);
writeToLCD(LCD5110_COMMAND, PCD8544_SETYADDR | yAddr);
}

void initLCD() {
writeToLCD(LCD5110_COMMAND, PCD8544_FUNCTIONSET | PCD8544_EXTENDEDINSTRUCTION);
writeToLCD(LCD5110_COMMAND, PCD8544_SETVOP | 0x3F);
writeToLCD(LCD5110_COMMAND, PCD8544_SETTEMP | 0x02);
writeToLCD(LCD5110_COMMAND, PCD8544_SETBIAS | 0x03);
writeToLCD(LCD5110_COMMAND, PCD8544_FUNCTIONSET);
writeToLCD(LCD5110_COMMAND, PCD8544_DISPLAYCONTROL | PCD8544_DISPLAYNORMAL);
}

void binaryToUnpackedBCD(unsigned int n, unsigned char * digits) {
__asm(" clr R14");
__asm(" rla R12");
__asm(" rla R12");
__asm(" rla R12");
__asm(" rla R12");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" mov.b R14, 3(R13)");
__asm(" swpb R14");
__asm(" mov.b R14, 1(R13)");
__asm(" rra R14");
__asm(" rra R14");
__asm(" rra R14");
__asm(" rra R14");
__asm(" mov.b R14, 0(R13)");
__asm(" swpb R14");
__asm(" mov.b R14, 2(R13)");
__asm(" and #0x0F0F, 0(R13)");
__asm(" and #0x0F0F, 2(R13)");
return;
}

#ifndef PCD8544_H_#define PCD8544_H_#define PCD8544_POWERDOWN 0x04#define PCD8544_ENTRYMODE 0x02#define PCD8544_EXTENDEDINSTRUCTION 0x01#define PCD8544_DISPLAYBLANK 0x0#define PCD8544_DISPLAYNORMAL 0x4#define PCD8544_DISPLAYALLON 0x1#define PCD8544_DISPLAYINVERTED 0x5// H = 0#define PCD8544_FUNCTIONSET 0x20#define PCD8544_DISPLAYCONTROL 0x08#define PCD8544_SETYADDR 0x40#define PCD8544_SETXADDR 0x80#define PCD8544_HPIXELS 84#define PCD8544_VBANKS 6#define PCD8544_MAXBYTES 504 // PCD8544_HPIXELS * PCD8544_VBANKS// H = 1#define PCD8544_SETTEMP 0x04#define PCD8544_SETBIAS 0x10#define PCD8544_SETVOP 0x80//transform#define NONE 0x00#define FLIP_H 0x01#define FLIP_V 0x02#define ROTATE 0x04 // 90 deg CW#define ROTATE_90_CW ROTATE#define ROTATE_90_CCW (FLIP_H | FLIP_V | ROTATE)#define ROTATE_180 (FLIP_H | FLIP_V)static const char font[][5] = { // basic font{0x00, 0x00, 0x00, 0x00, 0x00} // 20,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 ",{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ',{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ),{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c 
Link to post
Share on other sites

...and here's the vertical version.
Now optimized so only necessary portions of the graph are updated on change.




#include "msp430g2553.h"
#include "PCD8544.h"
#include "condensedFont.h"

#define LCD5110_SCLK_PIN BIT5
#define LCD5110_DN_PIN BIT7
#define LCD5110_SCE_PIN BIT4
#define LCD5110_DC_PIN BIT6
#define LCD5110_SELECT P1OUT &= ~LCD5110_SCE_PIN
#define LCD5110_DESELECT P1OUT |= LCD5110_SCE_PIN
#define LCD5110_SET_COMMAND P1OUT &= ~LCD5110_DC_PIN
#define LCD5110_SET_DATA P1OUT |= LCD5110_DC_PIN
#define LCD5110_COMMAND 0
#define LCD5110_DATA 1

void writeBar(char c);
void writeStringToLCD(const char *string);
void writeCharToLCD(char c);
void writeCondDigitToLCD(char c);
void writeToLCD( char dataCommand, char data);
void clearLCD();
void setAddr(char xAddr, char yAddr);
void initLCD();

void binaryToUnpackedBCD(unsigned int n, char * digits);
char bcd[4] = {0,0,0,0};

int adc[4] = {0,0,0,0};
char last[4] = {0,0,0,0};
const char bar[8] = {
0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF
};
static const char tick[16] = {
0xFF, 0x55, 0x04, 0x04, 0xFF, 0x55, 0x10, 0x10,
0xFF, 0x55, 0x40, 0x40, 0xFF, 0x55, 0, 0
};
void main(void) {

WDTCTL = WDTPW + WDTHOLD; // disable WDT
BCSCTL1 = CALBC1_1MHZ; // 1MHz clock
DCOCTL = CALDCO_1MHZ;

P1OUT |= LCD5110_SCE_PIN + LCD5110_DC_PIN;
P1DIR |= LCD5110_SCE_PIN + LCD5110_DC_PIN;

// setup USIB
P1SEL |= LCD5110_SCLK_PIN + LCD5110_DN_PIN;
P1SEL2 |= LCD5110_SCLK_PIN + LCD5110_DN_PIN;

UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master
UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 |= 0x01; // 1:1
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST; // clear SW

ADC10CTL1 = INCH_3 + CONSEQ_1;
ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
ADC10DTC1 = 0x04;
ADC10AE0 |= 0x0F;

_delay_cycles(500000);
initLCD();
clearLCD();

// LCD test
writeStringToLCD("Another VMeter");

char x = 9;
char y = 2;
char z = 0;
while(x < 85) {
while(y < 6) {
setAddr(x,y++);
writeToLCD(LCD5110_DATA, tick[z++]);
writeToLCD(LCD5110_DATA, tick[z++]);
writeToLCD(LCD5110_DATA, tick[z++]);
writeToLCD(LCD5110_DATA, tick[z++]);
}
x += 20;
;
y = 2;
z = 0;
}

_bis_SR_register(GIE);

while(1) {
ADC10SA = (unsigned int)&adc[0];
ADC10CTL0 |= ENC + ADC10SC;
_delay_cycles(100000);
}
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void) {
ADC10CTL0 &= ~ENC;
char c = 0;
while(c < 4) {
char curr = adc[c] >> 5;
binaryToUnpackedBCD(adc[c], bcd);
unsigned char prev = last[c];
char e = (c << 4) + (c << 2);
if(prev != curr) { // no need to update (graph only)
char prevSect = (prev == 0 ? 0 : (prev - 1)) >> 3;
char sect = 3; // max section number (starting with 0,) we have 32 bars / 8 pixels = 4
int b = 25; // first bar of the last section, 0 is not displayed so it should be sect * 8 pixels + 1
char d = 2; // top display column
while(b > curr) {
if(prevSect >= sect) { // refresh as needed
setAddr(e, d);
writeBar(0);
}
d++;
sect--;
b -= 8;
}
if(b > 0) { // refresh, equal is handled by enclosing if
setAddr(e, d++);
writeBar(bar[curr - b]);
sect--;
b -= 8;
}
while(b > 0) {
if(prevSect <= sect) { // refresh as needed
setAddr(e, d);
writeBar(0xFF);
}
d++;
sect--;
b -= 8;
}
}
last[c] = curr;
c++;

setAddr(e, 1); // print numeric values
writeCondDigitToLCD(bcd[0]);
writeToLCD(LCD5110_DATA, 0x40);
writeToLCD(LCD5110_DATA, 0x0);
writeCondDigitToLCD(bcd[1]);
writeCondDigitToLCD(bcd[2]);
writeCondDigitToLCD(bcd[3]);
}
}

void writeBar(char c) {
char i = 0;
while(i < 8) {
writeToLCD(LCD5110_DATA, c);
i++;
}
}

void writeStringToLCD(const char *string) {
while(*string) {
writeCharToLCD(*string++);
}
}

void writeCharToLCD(char c) {
char i;
for(i = 0; i < 5; i++) {
writeToLCD(LCD5110_DATA, font[c - 0x20][i]);
}
writeToLCD(LCD5110_DATA, 0);
}

void writeCondDigitToLCD(char c) {
char i;
for(i = 0; i < 3; i++) {
writeToLCD(LCD5110_DATA, condensedDigits[c][i]);
}
writeToLCD(LCD5110_DATA, 0);
}

void writeToLCD(char dataCommand, char data) {
LCD5110_SELECT;
if(dataCommand) {
LCD5110_SET_DATA;
} else {
LCD5110_SET_COMMAND;
}
UCB0TXBUF = data;
while(!(IFG2 & UCB0TXIFG))
;
LCD5110_DESELECT;
}

void clearLCD() {
setAddr(0, 0);
int c = 0;
while(c < PCD8544_MAXBYTES) {
writeToLCD(LCD5110_DATA, 0);
c++;
}
setAddr(0, 0);
}

void setAddr(char xAddr, char yAddr) {
writeToLCD(LCD5110_COMMAND, PCD8544_SETXADDR | xAddr);
writeToLCD(LCD5110_COMMAND, PCD8544_SETYADDR | yAddr);
}

void initLCD() {
writeToLCD(LCD5110_COMMAND, PCD8544_FUNCTIONSET | PCD8544_EXTENDEDINSTRUCTION);
writeToLCD(LCD5110_COMMAND, PCD8544_SETVOP | 0x3F);
writeToLCD(LCD5110_COMMAND, PCD8544_SETTEMP | 0x02);
writeToLCD(LCD5110_COMMAND, PCD8544_SETBIAS | 0x03);
writeToLCD(LCD5110_COMMAND, PCD8544_FUNCTIONSET);
writeToLCD(LCD5110_COMMAND, PCD8544_DISPLAYCONTROL | PCD8544_DISPLAYNORMAL);
}

void binaryToUnpackedBCD(unsigned int n, char * digits) {
__asm(" clr R14");
__asm(" rla R12");
__asm(" rla R12");
__asm(" rla R12");
__asm(" rla R12");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" rla R12");
__asm(" dadd R14, R14");
__asm(" mov.b R14, 3(R13)");
__asm(" swpb R14");
__asm(" mov.b R14, 1(R13)");
__asm(" rra R14");
__asm(" rra R14");
__asm(" rra R14");
__asm(" rra R14");
__asm(" mov.b R14, 0(R13)");
__asm(" swpb R14");
__asm(" mov.b R14, 2(R13)");
__asm(" and #0x0F0F, 0(R13)");
__asm(" and #0x0F0F, 2(R13)");
return;
}

Condensed digits font
#ifndef CONDENSEDFONT_H_
#define CONDENSEDFONT_H_

static const char condensedDigits[][3] = { // condensed digits
{0x3E, 0x41, 0x3E} // 0
,{0x42, 0x7F, 0x40} // 1
,{0x72, 0x49, 0x46} // 2
,{0x22, 0x49, 0x36} // 3
,{0x0F, 0x08, 0x7E} // 4
,{0x27, 0x45, 0x39} // 5
,{0x36, 0x49, 0x32} // 6
,{0x01, 0x01, 0x7F} // 7
,{0x36, 0x49, 0x36} // 8
,{0x16, 0x49, 0x36} // 9
};

#endif /*CONDENSEDFONT_H_*/
Link to post
Share on other sites

Nice to see something displayed! I have no idea what is inverting it though. Did you go through the example code or is this your own?

 

RobG,

 

Do you know whats the sampling rate is? Pretty awesome though. I almost made something like that too...

Datasheet says cycle time is 300ns cycle time, which would mean a 3.33Mhz SPI clock.

Link to post
Share on other sites

It's some of the oLED example code (init and SPI,) and the rest is from 5110 example (font and graphics.)

Inverting will be easy to fix, then I have to figure out addressing, this thing has a lot more options than 5110.

But it's the ADC on 2452 that is not cooperating at all, not sure what's wrong.

Also, once I wire pin 15 {D/C,} I will move to 2553 and run oLED module in 4 wire mode.

Link to post
Share on other sites
I guess I will have to read SSD1306 datasheet :)

 

file.php?id=1129

 

Is the SSD1306 the controller IC on the 5110 or is the SSD1306 a completely different display?

 

Oh, wait a minute... It looks like you just jumped from one display to another half-way through this thread... Man, that's quite confusing...

Link to post
Share on other sites

@Mac, ha, ha, sorry, this is the code I used on 5110 but 43oh's oLED booster pack :)

 

Rob, do you have any suggestions on the board. I'll be putting in an order in the next week.

The few I have:

- Breakout remaining pins to a header.

- Label solder bridges(I missed out on this the first time).

Definitely break out pin 15 for 4 pin SPI, a must for USCI.

 

OK, after few small changes, I am back in business

 

Link to post
Share on other sites

@RobG Thanks for your 5110 code!

 

It's working on SugarAddict's new F5529 breakout board too. Running on UCA1, only minor changes were needed. Functions fine at 1Mhz DCO but gets screwy when I run from XT2 @ 24MHz. (it generates snow on the screen, haha) I think I just need to sort out the bit rate. I'll post the changes on the thread for the F5529. http://www.43oh.com/forum/viewtopic.php?f=8&t=1631&p=12740#p12740

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...