Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - wb2dyb

Pages: [1] 2
1
OLEDs / NHD0420CW-A*3 tHREE LINE MODE, MIDDLE LINE DOUBLE HEIGHT
« on: April 12, 2015, 11:58:47 PM »
Well, learned more but really having trouble figuring out the command structure. And have a display lash up on the desk, and keep fiddling with codes and cannot seem to figure out the three line mode with the two middle lines of the display serving as one double height line. I think, but not certain, that I just cannot figure out how to manipulate the IS and RE bits. And when I try what I think should work, it doesn't.

Has anybody been able to do this? I stumbled into it by accident, thought I had it, but as soon as I power cycled the thing it went to plain old 3 line mode. If I hit Arduino reset it comes back where I want it. What I'm looking to do is exactly as shown in the US2066 data page 37 table 7-2, second image down.

Then there is the table in 7-1 where the UD1 bit is shown as 1 for what I'm looking to do. But the instructions clearly states just above the images that UD1=0 is forbidden in 3 line mode. the first image shows UD1=0, and it is a 3 line display.

As I manipulate these bits I never see a particular bit doing what is shown in this data.

My code:

#include "Wire.h"
#include "OLedI2C.h"
#include "SoftReset.h"
OLedI2C LCD;

void setup()
{
  Wire.begin();
  LCD.init();
 
}
void loop()
{
     /////LCD.sendCommand(B00101010);
     LCD.sendCommand(B00101100); //0100 and 1100 wok
     
/////LCD.sendCommand(B00101110);
  //LCD.sendCommand(B00101000);
   // LCD.sendCommand(B00101010);
  //LCD.sendCommand(B00010000);
  /////LCD.sendCommand(B00101010); //function setset re=1 is=0 3/4 line"
/////LCD.sendCommand(B00101110);
  //LCD.sendCommand(B00001001);  //display on
  LCD.sendCommand(B00101010);
  LCD.sendCommand(B00010101); //3 line format if is=0 & re=1
 

  //LCD.cursPos(1,0);
  //LCD.sendData(00);
 
  delay(100);

 
  LCD.sendString("FREQ  USB  NB  SQ   ",0,0);
  LCD.sendString("14.300.00           ",0,1);
 
  LCD.sendString("RXTX BAND  SQ  DSP >",0,2);
 //LCD.sendString("04",0,3);
  while(1);
}



_______________________________________________

Anything like a command cheat sheet?

Thanks, everyone.

GeorgeC

2
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: April 01, 2015, 11:56:26 PM »
Success! I was getting no results yet. So I cut and paste the init from the OLED pdf instead of what I had. Your last app ran first time, pictures enclosed...

My cpp file: (it's a real mess, but it works

Code: [Select]
// 1602-OLED-Arduino-Library/OLedI2C.cpp
// keywords.txt / OLedI2C.cpp / OLedI2C.h
// The 3 files should be in %your arduino dir%\libraries\OLedI2C\
// The directory name must match the library name for libraries to work.

/*
This is my first Library to make writing to the OLED 1602
Display much easier, the display is based on the SSD1311.
The display has 16 characters and 2 lines.
The library is far from complete and may be prone to errors.
Feedback welcome, visit www.gadjet.co.uk
Phil Grant 2013
Scrolling contributed by Nathan Chantrell http://nathan.chantrell.net/
Updated 06/11/2013 to include the cursPos data in the sendString function
sendString("string", col, row)
*/
#include "OLedI2C.h"

// NEW
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "Arduino.h"

#include "Wire.h"
#define OLED_Address 0x3c
#define OLED_Command_Mode 0x80
#define OLED_Data_Mode 0x40

OLedI2C::OLedI2C(){}
OLedI2C::~OLedI2C(){}


void OLedI2C::init() {
   // *** I2C initial *** //
 delay(100);
 sendCommand(0x2A); //function set (extended command set)
sendCommand(0x71); //function selection A
sendData(0x00); // disable internal VDD regulator (2.8V I/O). data(0x5C) = enable regulator (5V I/O)
sendCommand(0x28); //function set (fundamental sendCommand set)
sendCommand(0x08); //display off, cursor off, blink off
sendCommand(0x2A); //function set (extended command set)
sendCommand(0x79); //OLED command set enabled
sendCommand(0xD5); //set display clock divide ratio/oscillator frequency
sendCommand(0x70); //set display clock divide ratio/oscillator frequency
sendCommand(0x78); //OLED command set disabled
sendCommand(0x09); //extended function set 4 line
sendCommand(0x06); //COM SEG direction
sendCommand(0x72); //function selection B
sendData(0x00); //ROM CGRAM selection
sendCommand(0x2A); //function set (extended command set)
sendCommand(0x79); //OLED command set enabled
sendCommand(0xDA); //set SEG pins hardware configuration
sendCommand(0x10); //set SEG pins hardware configuration
sendCommand(0xDC); //function selection C
sendCommand(0x00); //function selection C
sendCommand(0x81); //set contrast control
sendCommand(0x7F); //set contrast control
sendCommand(0xD9); //set phase length
sendCommand(0xF1); //set phase length
sendCommand(0xDB); //set VCOMH deselect level
sendCommand(0x40); //set VCOMH deselect level
sendCommand(0x78); //OLED command set disabled
sendCommand(0x28); //function set (fundamental command set)
sendCommand(0x01); //clear display
sendCommand(0x80); //set DDRAM address to 0x00
sendCommand(0x0C); //display ON
 
 /*
sendCommand(0x2A);  //function set (extended command set)
sendCommand(0x71);  //function selection A, disable internal Vdd regualtor
sendCommand(0x00);
sendCommand(0x28);  //function set (fundamental command set)
sendCommand(0x08);  //display off, cursor off, blink off
sendCommand(0x2A);  //function set (extended command set)
sendCommand(0x79);  //OLED command set enabled
sendCommand(0x72);  //function selection B, disable internal Vdd regualtor
sendCommand(0x00);     //ROM CGRAM selection
sendCommand(0xD5);  //set display clock divide ratio/oscillator frequency
sendCommand(0x70);  //set display clock divide ratio/oscillator frequency
sendCommand(0x78);  //OLED command set disabled
sendCommand(0x09);  //extended function set (4-lines)
        sendCommand(0x06);  //COM SEG direction
sendCommand(0x72);  //function selection B, disable internal Vdd regualtor
sendCommand(0x00);     //ROM CGRAM selection
sendCommand(0x2A);  //function set (extended sendCommand set)
sendCommand(0x79);  //OLED sendCommand set enabled
sendCommand(0xDA);  //set SEG pins hardware configuration
sendCommand(0x10);  //set SEG pins hardware configuration   // <--------- Change
sendCommand(0xDC);  //function selection C
sendCommand(0x00);  //function selection C
sendCommand(0x81);  //set contrast control
sendCommand(0xff);  //set contrast control
sendCommand(0xD9);  //set phase length
sendCommand(0xF1);  //set phase length
sendCommand(0xDB);  //set VCOMH deselect level
sendCommand(0x40);  //set VCOMH deselect level
sendCommand(0x78);  //OLED sendCommand set disabled
sendCommand(0x28);  //function set (fundamental sendCommand set)
sendCommand(0x01);  //clear display
sendCommand(0x80);  //set DDRAM address to 0x00
sendCommand(0x0C);  //display ON
 */
 /*
 sendCommand(0x2A); // **** Set "RE"=1 00101010B
 sendCommand(0x71);
 sendCommand(0x5C);
 sendCommand(0x28);

 sendCommand(0x08); // **** Set Sleep Mode On
 sendCommand(0x2A); // **** Set "RE"=1 00101010B
 sendCommand(0x79); // **** Set "SD"=1 01111001B

 sendCommand(0xD5);
 sendCommand(0x70);
 sendCommand(0x78); // **** Set "SD"=0  01111000B

 sendCommand(0x09); // **** Set 5-dot, 3 or 4 line(0x09), 1 or 2 line(0x08)

 sendCommand(0x06); // **** Set Com31-->Com0  Seg0-->Seg99

 // original:
 // **** Set OLED Characterization *** //
 // sendCommand(0x2A);  // **** Set "RE"=1
 // sendCommand(0x79);  // **** Set "SD"=1
 // **** CGROM/CGRAM Management *** //
 // sendCommand(0x72);  // **** Set ROM
 // sendCommand(0x00);  // **** Set ROM A and 8 CGRAM

 // **** CGROM/CGRAM Management *** //
 sendCommand(0x72);     // **** Set ROM
 sendData(B00000011);     // **** Set ROM A and 8 CGRAM This selects CGROM A, 00000000 selects CGROM C
 // **** Set OLED Characterization *** //
 sendCommand(0x2A);     // **** Set "RE"=1
 sendCommand(0x79);     // **** Set "SD"=1

 sendCommand(0xDA); // **** Set Seg Pins HW Config
 sendCommand(0x10);   

 sendCommand(0x81);  // **** Set Contrast
 sendCommand(0xFF);

 sendCommand(0xDB);  // **** Set VCOM deselect level
 sendCommand(0x30);  // **** VCC x 0.83

 sendCommand(0xDC);  // **** Set gpio - turn EN for 15V generator on.
 sendCommand(0x03);

 sendCommand(0x78);  // **** Exiting Set OLED Characterization
 sendCommand(0x28);
 sendCommand(0x2A);
 sendCommand(0x05); // **** Set Entry Mode
 sendCommand(0x06); // **** Set Entry Mode
 sendCommand(0x08); 
 sendCommand(0x28); // **** Set "IS"=0 , "RE" =0 //28
 sendCommand(0x01);
 sendCommand(0x80); // **** Set DDRAM Address to 0x80 (line 1 start)

 */
 
 
 delay(100);
 sendCommand(0x0C);  // **** Turn on Display
 }
 
 // void OLedI2C::cursPos(uint8_t col, uint8_t row)
 // {
 // int row_offsets[] = { 0x00, 0x40 };
 // sendCommand(0x80 | (col + row_offsets[row]));
 // }

 void OLedI2C::cursPos(uint8_t col, uint8_t row)
 {
 int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };// **************THIS WAS THE CHANGE FOR 4 LINES
 sendCommand(0x80 | (col + row_offsets[row])); //was 0x80
 }
 
 // NEW 03-23-2015
 // cloumn, row / setCursor
  //void OLedI2C::setCursor(uint8_t col, uint8_t row)
  //{
  // int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };// **************
  //sendCommand(0x80 | (col + row_offsets[row]));
  //}
 
void OLedI2C::clearLcd()
{
sendCommand(0x01);
}

void OLedI2C::lcdOff()
{
sendCommand(0x08);  // **** Turn on Off
}

void OLedI2C::lcdOn()
{
sendCommand(0x0C);  // **** Turn on On
}

 void OLedI2C::sendCommand(unsigned char command)
{
    Wire.beginTransmission(OLED_Address); // **** Start I2C
    Wire.write(OLED_Command_Mode);      // **** Set OLED Command mode
    Wire.write(command);
    Wire.endTransmission();                  // **** End I2C
      delay(10);
}
void OLedI2C::sendFloat(float digit, uint8_t dec, uint8_t nad, uint8_t col, uint8_t row)
{
char line[10];//Ten characters, I hope that's enough
dtostrf(digit,dec,nad,line);//Convert the float value to a string
sendString(line, col, row);

}

 void OLedI2C::setContrast(unsigned char contrast) // contrast as 0x00 to 0xFF
{
     //Set OLED Command set
sendCommand(0x2A);
sendCommand(0x79);

sendCommand(0x81);  // Set Contrast
sendCommand(contrast); // send contrast value
sendCommand(0x78);  // Exiting Set OLED Command set
   sendCommand(0x28);

}

void OLedI2C::sendString(const char *String, uint8_t col, uint8_t row)
{
  cursPos(col, row);
  unsigned char i=0;
  while(String[i])
  {
    sendData(String[i]);      // *** Show String to OLED
    i++;
  }
}
void OLedI2C::sendData(unsigned char data)
{
  Wire.beginTransmission(OLED_Address);  // **** Start I2C
  Wire.write(OLED_Data_Mode);      // **** Set OLED Data mode
  Wire.write(data);
  Wire.endTransmission();                     // **** End I2C
}
void OLedI2C::scrollString(char* message, byte row, unsigned int time)//written by Nathan Chantrell http://nathan.chantrell.net/
{
 char buffer[16];
 for (byte i=0;i<strlen(message)+16;i++) {
  byte pos = i+1;
  for (byte j=0;j<16;j++) {
   if ((pos<16)||(pos>strlen(message)+15)) { // pad and trail with blank spaces
     buffer[j]=' ';
   }
   else buffer[j]=message[pos-16];
   pos++;
  }
 //cursPos(0,row); removed by PG
 sendString(buffer, 0, row); //Edited by PG tho include the cursor pos within the sendString command
 delay(time);
 }
}

/*

// NEW 03-23-2015
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void OLedI2C::createChar(uint8_t location, uint8_t charmap[])
{
  location &= 0x7; // we only have 8 locations 0-7
  Wire.beginTransmission(OLED_Address);
    Wire.write(OLED_Data_Mode | (location << 3)); // SETCGRAMADDR 0x40  [ Wire.write(B01000000); ]
    delayMicroseconds(30);
    //Wire.write(location);
  for (uint8_t i = 0 ; i < 8 ; i++) {
    Wire.write(charmap[i]);
    //Wire.write(OLED_Data_Mode);
    delayMicroseconds(40);
  }
  Wire.endTransmission();
  delay(50);
}
*/

// NEW 03-31-2015
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void OLedI2C::createChar(uint8_t location, uint8_t charmap[])
{
   location &= 0x7;            // we only have 8 locations 0-7
   
   sendCommand(0x40 | (location << 3));
   delayMicroseconds(30);
   
   for (int i=0; i<8; i++)
   {
      sendData(charmap[i]);      // you're missing [i] in you're code // call the virtual write method
      delayMicroseconds(40);
   }
}


Thank you very much.

GeorgeC

3
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: April 01, 2015, 07:01:03 PM »
LCD.sendData(0)

Sends that character from ROM C

LCD.sendData(1)

Likewise sends that from ROM C, if I make it

LCD.sendData(8)

It sends the lefty pointing arrow, etc

George

4
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: April 01, 2015, 05:29:24 PM »
I found this:
http://www.circuitvalley.com/2012/02/lcd-custom-character-hd44780-16x2.html

I know the way this is done is pretty much identical as in the HD44780 controller, among others.

I have to study this more later. It looks like the part to store the character is pretty much the same. The getting it back out part is the issue...

I have to run, back at it in about 5 hours

George

5
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: April 01, 2015, 08:08:20 AM »
Well, that was very different. Attached are pix of the two messages.

What it is displaying is 0000:0000 and 0000:0001 from ROM C in the built in CG

GeorgeC

6
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: April 01, 2015, 12:15:44 AM »
Something tells me that while the writing of the character might be working something is missing in getting it to display.

  // Print custom font 1
  Wire.write(B01000000); // control byte or the data byte, Co and D/C# bits following by six 0s.
  Wire.write(B00000000); // print custom font 0  [8bit (hi bit 0000/low bit 0000
 

Here's where the US2066 data is slim in detail, certainly for the newcomer.

The first line above only sets the CGRAM address to 0x00
The next line, depending on DC or RW can mean to write to B00000000

But shouldn't there be a 0x72 sent before B00000000?

Just not enough in that data...

GeorgeC

7
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 31, 2015, 11:14:58 PM »
I think I used the wrong OLedI2C.h file. I need to clean this mess up.

So back to where it just sits there blank after loading your test file.

GeorgeC

8
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 31, 2015, 10:51:45 PM »
Thanks Chris. The first suggestions made earlier prompted me to just start fresh in a library directory. So made all those changes and now while it compiles nothing happens, and anything on display from previous helloworld stuff freezez till power cycle.

Now the most recent suggestions gets this error:


C:\Program Files (x86)\Arduino\libraries\OLedI2C\OLedI2C.cpp: In member function 'void OLedI2C::createChar(uint8_t, uint8_t*)':
C:\Program Files (x86)\Arduino\libraries\OLedI2C\OLedI2C.cpp:206: error: invalid conversion from 'uint8_t*' to 'unsigned char'
C:\Program Files (x86)\Arduino\libraries\OLedI2C\OLedI2C.cpp:206: error:   initializing argument 1 of 'void OLedI2C::sendData(unsigned char)'


Line 206 is:
     sendData(charmap);      // call the virtual write method






Totally lost now. I sorta followed what you were doing...

GeorgeC

9
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 31, 2015, 01:12:46 PM »
My OLedI2C.cpp attached, with your mod at the bottom. I used your version of the file and while it compiled ok, nothing displayed.
Couldn't wait. Just tried it. Got this error:

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.5 (Windows 7), Board: "Arduino Uno"
C:\Users\georgec\Documents\Arduino\libraries\OLEDArduinoLibrarymaster\OLedI2C.cpp: In member function 'void OLedI2C::createChar(uint8_t, uint8_t*)':
C:\Users\georgec\Documents\Arduino\libraries\OLEDArduinoLibrarymaster\OLedI2C.cpp:265: error: call of overloaded 'write(uint8_t*&)' is ambiguous
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:64: note: candidates are: virtual size_t TwoWire::write(uint8_t) <near match>
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:86: note:                 size_t TwoWire::write(long unsigned int) <near match>
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:87: note:                 size_t TwoWire::write(long int) <near match>
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:88: note:                 size_t TwoWire::write(unsigned int) <near match>
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:89: note:                 size_t TwoWire::write(int) <near match>
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:49: note:                 size_t Print::write(const char*) <near match>



My OLedI2C.cpp file:

/*
This is my first Library to make writing to the OLED 1602
Display much easier, the display is based on the SSD1311.
The display has 16 characters and 2 lines.
The library is far from complete and may be prone to errors.
Feedback welcome, visit www.gadjet.co.uk
Phil Grant 2013
Scrolling contributed by Nathan Chantrell http://nathan.chantrell.net/

Updated 06/11/2013 to include the cursPos data in the sendString function
sendString("string", col, row)

*/
#include "OLedI2C.h"
#include "Wire.h"
#define OLED_Address 0x3c
#define OLED_Command_Mode 0x80
#define OLED_Data_Mode 0x40

OLedI2C::OLedI2C(){}
OLedI2C::~OLedI2C(){}


void OLedI2C::init() {
   // *** I2C initial *** //
 delay(100);
 sendCommand(0x2A);   // **** Set "RE"=1   00101010B
 sendCommand(0x71);
 sendCommand(0x5C);
 sendCommand(0x28);

 sendCommand(0x08);   // **** Set Sleep Mode On
 sendCommand(0x2A);   // **** Set "RE"=1   00101010B
 sendCommand(0x79);   // **** Set "SD"=1   01111001B

 sendCommand(0xD5);
 sendCommand(0x70);
 sendCommand(0x78);   // **** Set "SD"=0  01111000B

 sendCommand(0x09);   // **** Set 5-dot, 3 or 4 line(0x09), 1 or 2 line(0x08)

 sendCommand(0x06);   // **** Set Com31-->Com0  Seg0-->Seg99


 // **** CGROM/CGRAM Management *** //
 sendCommand(0x72);     // **** Set ROM
 sendData(B00000011);     // **** Set ROM A and 8 CGRAM

 
 // **** Set OLED Characterization *** //
 sendCommand(0x2A);     // **** Set "RE"=1
 sendCommand(0x79);     // **** Set "SD"=1

 sendCommand(0xDA);    // **** Set Seg Pins HW Config
 sendCommand(0x10);   

 sendCommand(0x81);     // **** Set Contrast
 sendCommand(0xFF);

 sendCommand(0xDB);     // **** Set VCOM deselect level
 sendCommand(0x30);     // **** VCC x 0.83

 sendCommand(0xDC);     // **** Set gpio - turn EN for 15V generator on.
 sendCommand(0x03);

 sendCommand(0x78);     // **** Exiting Set OLED Characterization
 sendCommand(0x28);
 sendCommand(0x2A);
 //sendCommand(0x05);    // **** Set Entry Mode
 sendCommand(0x06);    // **** Set Entry Mode
 sendCommand(0x09); 
 sendCommand(0x28);    // **** Set "IS"=0 , "RE" =0 //28
 sendCommand(0x01);
 sendCommand(0x80);    // **** Set DDRAM Address to 0x80 (line 1 start)





 delay(100);
 sendCommand(0x0C);     // **** Turn on Display
 }
 

 
 
 void OLedI2C::cursPos(uint8_t col, uint8_t row)
 {
 int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };//**************THIS WAS THE CHANGE FOR 4 LINES
 sendCommand(0x80 | (col + row_offsets[row])); //was 0x80
 }
 
void OLedI2C::clearLcd()
{
sendCommand(0x01);
}

void OLedI2C::lcdOff()
{
sendCommand(0x08);     // **** Turn on Off
}


 // Allows us to fill the first 8 CGRAM locations
// with custom characters




void OLedI2C::lcdOn()
{
sendCommand(0x0C);     // **** Turn on On
}

 void OLedI2C::sendCommand(unsigned char command)
{
    Wire.beginTransmission(OLED_Address);     // **** Start I2C
    Wire.write(OLED_Command_Mode);            // **** Set OLED Command mode
    Wire.write(command);
    Wire.endTransmission();                     // **** End I2C
      delay(10);
}
void OLedI2C::sendFloat(float digit, uint8_t dec, uint8_t nad, uint8_t col, uint8_t row)
{
char line[10];//Ten characters, I hope that's enough
dtostrf(digit,dec,nad,line);//Convert the float value to a string
sendString(line, col, row);

}

 void OLedI2C::setContrast(unsigned char contrast) // contrast as 0x00 to 0xFF
{
     //Set OLED Command set
   sendCommand(0x2A);
   sendCommand(0x79);
   
   sendCommand(0x81);     // Set Contrast
   sendCommand(contrast);   // send contrast value
   sendCommand(0x78);     // Exiting Set OLED Command set
   sendCommand(0x28);
   
}

void OLedI2C::sendString(const char *String, uint8_t col, uint8_t row)
{
  cursPos(col, row);
  unsigned char i=0;
  while(String)
  {
    sendData(String);      // *** Show String to OLED
    i++;
  }
}
void OLedI2C::sendData(unsigned char data)
{
  Wire.beginTransmission(OLED_Address);     // **** Start I2C
  Wire.write(OLED_Data_Mode);           // **** Set OLED Data mode
  Wire.write(data);
  Wire.endTransmission();                     // **** End I2C
}
void OLedI2C::scrollString(char* message, byte row, unsigned int time)//written by Nathan Chantrell http://nathan.chantrell.net/
{
 char buffer[16];
 for (byte i=0;i<strlen(message)+16;i++) {
  byte pos = i+1;
  for (byte j=0;j<16;j++) {
   if ((pos<16)||(pos>strlen(message)+15)) { // pad and trail with blank spaces
     buffer[j]=' ';
   }
   else buffer[j]=message[pos-16];
   pos++;
  }
 //cursPos(0,row); removed by PG
 sendString(buffer, 0, row); //Edited by PG tho include the cursor pos within the sendString command
 delay(time);
 }
}
// NEW 03-23-2015
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void OLedI2C::createChar(uint8_t location, uint8_t charmap[])
{
  location &= 0x7; // we only have 8 locations 0-7
  Wire.beginTransmission(OLED_Address);
    Wire.write(OLED_Data_Mode | (location << 3)); // SETCGRAMADDR 0x40  [ Wire.write(B01000000); ]
    delayMicroseconds(30);
    //Wire.write(location);
  for (uint8_t i = 0 ; i < 8 ; i++) {
    Wire.write(charmap);
    //Wire.write(OLED_Data_Mode);
    delayMicroseconds(40);
  }
  Wire.endTransmission();
  delay(50);
}

10
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 29, 2015, 11:15:31 PM »
Chris, forgot to answer your question. Works fine. Just as written. The initial delay fooled me, compiled/loaded and it was dark then as I was typing something the display lit up. That 5 second delay got me.

See, my hangup on hacking on the OLedI2C.cpp file is the use of write, or rather Wire.write to send the binary patterns for the special fonts to the display. And of course, getting them back out. It would have been ideal (In my mind) if they'd just occupy the bottom 8 memory locations and be addressed like any other character.

Thanks, Chris.

GeorgeC

11
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 29, 2015, 03:34:10 PM »
Chris, thanks for the effort. I need to figure out the addressing for this, how to store custom font data in those 8 memory locations. I am not 100% sure how to but I think I can see how to get them out after they are stored. But the command structure seems limited, or I'm just not getting how to set either/or IS RE SD RW or DC. I thank you for the help. I'm just not getting how to "command" it to store the 8 8(really 5) bit font info, and exactly how to get it back when writing text to the display. I think I see that I can use Wire.write to accomplish it, but now sure what the addressing would be then unsure of addressing or commands to use the character. You definitely seeded some ideas, but I fear I'm just not getting it.

Thanks!

GeorgeC

12
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 23, 2015, 01:08:56 AM »
Not sure if this makes a diff, but I'm using the OLedI2C library, needed to use no more then 3 lines to the diaplay. Though, what's in the cpp file for create craracter I did put in the OLedI2C.cpp file, but it errors on compile on the "write(charmap);" The library I used was for the one wire link. That part works fine, except the custom character part.Thanks for the poiinters, one of them has the lines I'm already trying to use, but I really need I2C communication.

GeorgeC


13
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 21, 2015, 11:18:35 PM »
Chris, I found similar language from a VFD display using HD44780 controller.

 // Allows us to fill the first 8 CGRAM locations
// with custom characters
void OLedI2C::createChar(uint8_t location, uint8_t charmap[]) {
  location &= 0x7; // we only have 8 locations 0-7
  sendCommand(VFD_SETCGRAMADDR | (location << 3));
  for (int i=0; i<8; i++) {
   write(charmap);
 }

My problem is that "write" isn't defined anywhere, and in the library it came from VFD_SPI.cpp it isn't defined, I just don't know where that would come from

14
Here's what it looks like.

15
OLEDs / Re: Library that works fine on the NHD-0420CW-A*3
« on: March 18, 2015, 04:49:30 PM »
Hi Paul, I understand that, but I'm not a programmer. I tried some copying from others for this same purpose but part of a different controller's library. (HD44780). But I just don't have what it takes to figure this out. Also, when I thought I had that part working I spent hours and just didn't see how to access a custom font. I know default CGROM is the third one "C", and eventually figured out how to change that, but I just didn't see how to get "at it". I'll eventually figure it out. And the project I wanted this for is now working on breadboard with the OLedI2C (modified for four line) library.

It's fun anyhow! And at 62 I'm learning...

GeorgeC

Pages: [1] 2