0.96" SSD1306 128X64 OLED Display Module

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Sat May 05, 2012 4:43 pm

User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby howardhb » Sat May 05, 2012 5:30 pm

Stick sequence for Config menu does work, but not for activating the "hopping" telemetry pages :(
Will look carefully at the code....
Arduino IDE not very helpfull - not being able to "single step" through the code

H.
User avatar
howardhb
 
Posts: 189
Joined: Tue Oct 11, 2011 7:10 pm
Location: Port Elizabeth, South Africa

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Sat May 05, 2012 8:56 pm

Howard,
here is my config for a board with the OLED. I just checked and auto telemetry works.
This is what config items I currently use which may not be default (I include this as a file from within mwi.ino right after include of config.h). Not sure if you find anything useful. Sorry, too tired to clean it up some more before posting.
Code: Select all
/* TRI60 3S configs */

/*
hier nur eintragen, was nicht default ist.
im original sketch nach "include config.h" ein
   include auf dieses file einfuegen
*/


/* for flased mystery ESCs : */
//#define MINCOMMAND 1000
//#define MINTHROTTLE 1080
//#define MAXTHROTTLE 2000
//#define EXT_MOTOR_RANGE

#define HELI_120_CCPM
#define COLLECTIVE_PITCH      AUX2 //THROTTLE
// Set Maximum available movement for the servos. Depending on modell.
#define SERVO_ENDPOINT_HIGH {2000,2000,2000,2000,2000,2000,2000,2000};
#define SERVO_ENDPOINT_LOW  {1020,1020,1020,1020,1020,1020,1020,1020};

// Limit the range of Collective Pitch. 100% is Full Range each way and position for Zero Pitch
#define COLLECTIVE_RANGE { 12, 1500, 80 }// {Min%, ZeroPitch, Max%}.
#define YAW_CENTER             1500      // Use servo[5] SERVO_ENDPOINT_HIGH/LOW for the endpoits.
#define YAWMOTOR                0       // If a motor is use as YAW Set to 1 else set to 0.

// Limit Maximum controll for Roll & Nick  in 0-100%
#define CONTROLL_RANGE   { 100, 100 }      //  { ROLL,PITCH }


#undef TRI
#undef QUADX
#undef VTAIL4
#undef SERIAL_SUM_PPM
#undef GPS
#undef GPS_SERIAL
#undef FFIMUv2
#undef FREEIMUv035_MS
#undef QUADRINO
#undef MEGA

#define YAW_DIRECTION -1

#define I2C_SPEED 400000L

#define TRUSTED_ACCZ


#undef FAILSAFE
#define FAILSAVE_DELAY     15
#define FAILSAVE_THR0TTLE  (MINTHROTTLE + 300)    // Throttle level used for landing - may be relative to MINTHROTTLE - as in this case


#define RCAUXPIN8
#undef D12_POWER
#undef DISABLE_POWER_PIN


#undef FREEIMUv035_MS
#define CRIUS_LITE
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = -Y; gyroADC[PITCH] = X; gyroADC[YAW] = -Z;}
#define ACC_ORIENTATION(X, Y, Z)  {accADC[ROLL]  = X;  accADC[PITCH]  = Y; accADC[YAW]  =  Z;}

#undef INTERNAL_I2C_PULLUPS


#define VBAT 
#define VBATSCALE     79 // mystery 20A ESC/BEC, war HK-SS-ESC:78 //79 //110 // mein spezieller Spannungsteiler 3S
#define VBATLEVEL1_3S 102 // 10.2V unter Last
#define VBATLEVEL2_3S 100 // 10.0V unter Last
#define VBATLEVEL3_3S 98  // 9.8V unter Last
#define NO_VBAT       75 // Avoid beeping without any battery

#define POWERMETER_SOFT
#define PLEVELDIVSOFT 10000
#define PLEVELDIV 1540
#define PSENSORNULL 504


#define LCD_CONF
#define LCD_CONF_AUX
#define SUPPRESS_LCD_CONF_AUX34

#undef LCD_SERIAL3W
#undef LCD_TEXTSTAR
#undef LCD_VT100
#define OLED_I2C_128x64
#define SUPPRESS_OLED_I2C_128x64LOGO

#define LCD_TELEMETRY
#define LCD_TELEMETRY_AUTO "12345"
#define VBATREF 24 // 12.6V - VBATLEVEL1_3S  (for me = 126 - 102 = 24)

#define LOG_VALUES 2
//#define DEBUG

#define SUPPRESS_OSD_SERIAL_COMMANDS

//#define LCD_TELEMETRY_FREQ 11       // to send telemetry data over serial 23 <=> 60ms <=> 16Hz (only sending interlaced, so 8Hz update rate)
#define LCD_TELEMETRY_AUTO_FREQ 1667 // to step to next telemetry page 667 <=> 2s



#ifdef INTERNAL_I2C_PULLUPS
   #error " you MUST undefine internal i2c pullups. Else you destroy board!"
#endif



User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Jin'Gej » Mon May 21, 2012 5:28 pm

i got one of these OLED
http://cgi.ebay.fr/0-96-128x64-OLED-Dis ... 0536921656
it has some jumpers to set it to I2C
is it possible to get it running?
Jin'Gej
 
Posts: 3
Joined: Sun Apr 29, 2012 4:35 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby howardhb » Mon May 21, 2012 6:36 pm

I don't think so.
See post #1 of this thread.
User avatar
howardhb
 
Posts: 189
Joined: Tue Oct 11, 2011 7:10 pm
Location: Port Elizabeth, South Africa

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Jin'Gej » Tue May 22, 2012 5:19 pm

i saw it, but i thought someone got it now...
Jin'Gej
 
Posts: 3
Joined: Sun Apr 29, 2012 4:35 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby mbrak » Tue May 22, 2012 6:52 pm

Hi Jin'Gej

You did not believe me? :)

BR Michael
User avatar
mbrak
 
Posts: 136
Joined: Sat Dec 03, 2011 8:08 pm
Location: Germany, Lemgo

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Wayne » Mon May 28, 2012 9:43 pm

First, Thank You for dev_20120528.
Looks like I can compile with BARO BMP085 or LCD/OLED but not both at the same time.
‘Not declared…&lcd_param_text14, &conf.P8[PIDVEL], &__P,’
I am now moving my MEGA controller over to a frame that flys so I can test fly GPS before my new parts get here. :D
Again Thank you all and keep up the good work!

EDIT:
BTW I love the new GUI look plus I have made my OLED logo changes and added my custom Telemetry page 7 that includes all three GPS locations. Works great!
Wayne
 
Posts: 86
Joined: Sun Jul 31, 2011 10:44 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby howardhb » Tue May 29, 2012 8:07 am

Wayne wrote:I have made my OLED logo changes and added my custom Telemetry page 7 that includes all three GPS locations. Works great!

Please post your code for page 7 GPS. :P I would love to use it!

H.
User avatar
howardhb
 
Posts: 189
Joined: Tue Oct 11, 2011 7:10 pm
Location: Port Elizabeth, South Africa

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Wayne » Tue May 29, 2012 10:03 pm

Howard I have attached a document of what I have done to make page 7 work for me.
It will take some thought to make it work for everyone.
I found that because I live at longitude -121. I had to invert the number to get OLDE to display GPS_long correctly. ((GPS_longitude_home*-1)/10) * 10; (I'm sure I did this the hard way but it works for me)
Also with the newly added GPS SECONDS digits I have also had to comment out the Armed/Failsafe indicator and burn the locations MINUTES digits.

Code: Select all
Wayne’s OLED changes….

MW_dev_20120528

Config.h tab…

#define LCD_CONF
#define OLED_I2C_128x64 // OLED http://www.multiwii.com/forum/viewtopic.php?f=7&t=1350
#define LCD_TELEMETRY
#define LCD_TELEMETRY_AUTO  "7" // only displays page 7

LCD tab….

Paste over line 5:
static char line1[17],line2[17],line3[17],line4[17],line5[17],line6[17],line7[17];

Insert at line 1681:
#ifndef SUPPRESS_TELEMETRY_PAGE_7
    case 7:
    case '7': // contributed by PatrikE
#if GPS
    if (linenr++ % 2) {
      strcpy_P(line1,PSTR("Lat     Long --"));
      strcpy_P(line4,PSTR("Home Position"));
      strcpy_P(line6,PSTR("Hold Position"));
      // 0123456789012345
      //if (armed) line1[14] = 'A'; else line1[14] = 'a';
      //if (failsafeCnt > 5) line1[15] = 'F'; else line1[15] = 'f';
      LCDsetLine(1);LCDprintChar(line1);
      LCDsetLine(4);LCDprintChar(line4);
      LCDsetLine(6);LCDprintChar(line6);
    } else {
      strcpy_P(line2,PSTR("------- --------"));
      line2[0] = '0' + GPS_latitude / 1000000 - (GPS_latitude/10000000) * 10;
      line2[1] = '0' + GPS_latitude / 100000 - (GPS_latitude/1000000) * 10;
      line2[2] = '0' + GPS_latitude / 10000 - (GPS_latitude/100000) * 10;
      line2[3] = '0' + GPS_latitude / 1000 - (GPS_latitude/10000) * 10;
      line2[4] = '0' + GPS_latitude / 100 - (GPS_latitude/1000) * 10;
      line2[5] = '0' + GPS_latitude / 10 - (GPS_latitude/100) * 10;
      line2[6] = '0' + GPS_latitude - (GPS_latitude/10) * 10;
     
      //line2[8] = '0' + (GPS_longitude*-1) / 10000000 - ((GPS_longitude*-1)/100000000) * 10;
      line2[9] = '0' + (GPS_longitude*-1) / 1000000 - ((GPS_longitude*-1)/10000000) * 10;
      line2[10] = '0' + (GPS_longitude*-1) / 100000 - ((GPS_longitude*-1)/1000000) * 10;
      line2[11] = '0' + (GPS_longitude*-1) / 10000 - ((GPS_longitude*-1)/100000) * 10;
      line2[12] = '0' + (GPS_longitude*-1) / 1000 - ((GPS_longitude*-1)/10000) * 10;
      line2[13] = '0' + (GPS_longitude*-1) / 100 - ((GPS_longitude*-1)/1000) * 10;
      line2[14] = '0' + (GPS_longitude*-1) / 10 - ((GPS_longitude*-1)/100) * 10;
      line2[15] = '0' + (GPS_longitude*-1) - ((GPS_longitude*-1)/10) * 10;
      strcpy_P(line5,PSTR("------- --------"));
      line5[0] = '0' + GPS_latitude_home / 1000000 - (GPS_latitude_home/10000000) * 10;
      line5[1] = '0' + GPS_latitude_home / 100000 - (GPS_latitude_home/1000000) * 10;
      line5[2] = '0' + GPS_latitude_home / 10000 - (GPS_latitude_home/100000) * 10;
      line5[3] = '0' + GPS_latitude_home / 1000 - (GPS_latitude_home/10000) * 10;
      line5[4] = '0' + GPS_latitude_home / 100 - (GPS_latitude_home/1000) * 10;
      line5[5] = '0' + GPS_latitude_home / 10 - (GPS_latitude_home/100) * 10;
      line5[6] = '0' + GPS_latitude_home - (GPS_latitude_home/10) * 10;
     
      //line5[8] = '0' + (GPS_longitude_home*-1) / 10000000 - ((GPS_longitude_home*-1)/100000000) * 10;
      line5[9] = '0' + (GPS_longitude_home*-1) / 1000000 - ((GPS_longitude_home*-1)/10000000) * 10;
      line5[10] = '0' + (GPS_longitude_home*-1) / 100000 - ((GPS_longitude_home*-1)/1000000) * 10;
      line5[11] = '0' + (GPS_longitude_home*-1) / 10000 - ((GPS_longitude_home*-1)/100000) * 10;
      line5[12] = '0' + (GPS_longitude_home*-1) / 1000 - ((GPS_longitude_home*-1)/10000) * 10;
      line5[13] = '0' + (GPS_longitude_home*-1) / 100 - ((GPS_longitude_home*-1)/1000) * 10;
      line5[14] = '0' + (GPS_longitude_home*-1) / 10 - ((GPS_longitude_home*-1)/100) * 10;
      line5[15] = '0' + (GPS_longitude_home*-1) - ((GPS_longitude_home*-1)/10) * 10;
      strcpy_P(line7,PSTR("------- --------"));
      line7[0] = '0' + GPS_latitude_hold / 1000000 - (GPS_latitude_hold/10000000) * 10;
      line7[1] = '0' + GPS_latitude_hold / 100000 - (GPS_latitude_hold/1000000) * 10;
      line7[2] = '0' + GPS_latitude_hold / 10000 - (GPS_latitude_hold/100000) * 10;
      line7[3] = '0' + GPS_latitude_hold / 1000 - (GPS_latitude_hold/10000) * 10;
      line7[4] = '0' + GPS_latitude_hold / 100 - (GPS_latitude_hold/1000) * 10;
      line7[5] = '0' + GPS_latitude_hold / 10 - (GPS_latitude_hold/100) * 10;
      line7[6] = '0' + GPS_latitude_hold - (GPS_latitude_hold/10) * 10;
     
      //line7[8] = '0' + (GPS_longitude_hold*-1) / 10000000 - ((GPS_longitude_hold*-1)/100000000) * 10;
      line7[9] = '0' + (GPS_longitude_hold*-1) / 1000000 - ((GPS_longitude_hold*-1)/10000000) * 10;
      line7[10] = '0' + (GPS_longitude_hold*-1) / 100000 - ((GPS_longitude_hold*-1)/1000000) * 10;
      line7[11] = '0' + (GPS_longitude_hold*-1) / 10000 - ((GPS_longitude_hold*-1)/100000) * 10;
      line7[12] = '0' + (GPS_longitude_hold*-1) / 1000 - ((GPS_longitude_hold*-1)/10000) * 10;
      line7[13] = '0' + (GPS_longitude_hold*-1) / 100 - ((GPS_longitude_hold*-1)/1000) * 10;
      line7[14] = '0' + (GPS_longitude_hold*-1) / 10 - ((GPS_longitude_hold*-1)/100) * 10;
      line7[15] = '0' + (GPS_longitude_hold*-1) - ((GPS_longitude_hold*-1)/10) * 10;
      LCDsetLine(2);LCDprintChar(line2);
      LCDsetLine(5);LCDprintChar(line5);
      LCDsetLine(7);LCDprintChar(line7);

    }
#endif // case 7 : GPS
    break;
#endif
Wayne
 
Posts: 86
Joined: Sun Jul 31, 2011 10:44 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Tue May 29, 2012 10:59 pm

shall we integrate Wayne's version for the GPS page? I cannot comment on this in any way as I do not own GPS.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby howardhb » Wed May 30, 2012 12:50 am

Yes! It's quite handy to be able to see GPS co-ords on the display...

Wayne thanks for your code!, but, I'm not sure why, on my OLED display your code produces "garbage" characters for the GPS co-ords.
So I've edited your code......
I added abs( ) function to all the co-ords, to eliminate multiplication by -1...

Code: Select all
#ifndef SUPPRESS_TELEMETRY_PAGE_7
    case 7:
    case '7':
#if GPS

    if (linenr++ % 2) {
      strcpy_P(line1,PSTR("   Lat        Long  "));
      LCDsetLine(1);LCDprintChar(line1);
    } else  {
      strcpy_P(line2,PSTR("---------  ---------"));
      int32_t aGPS_latitude = abs(GPS_latitude);
      line2[0] = '0' + aGPS_latitude / 100000000 - (aGPS_latitude/1000000000) * 10;
      line2[1] = '0' + aGPS_latitude / 10000000 -  (aGPS_latitude/100000000) * 10;     
      line2[2] = '0' + aGPS_latitude / 1000000 -   (aGPS_latitude/10000000) * 10;
      line2[3] = '0' + aGPS_latitude / 100000 -    (aGPS_latitude/1000000) * 10;
      line2[4] = '0' + aGPS_latitude / 10000 -     (aGPS_latitude/100000) * 10;
      line2[5] = '0' + aGPS_latitude / 1000 -      (aGPS_latitude/10000) * 10;
      line2[6] = '0' + aGPS_latitude / 100 -       (aGPS_latitude/1000) * 10;
      line2[7] = '0' + aGPS_latitude / 10 -        (aGPS_latitude/100) * 10;
      line2[8] = '0' + aGPS_latitude - (aGPS_latitude/10) * 10;
 
      int32_t aGPS_longitude = abs(GPS_longitude);
      line2[11] = '0' + aGPS_longitude / 100000000 -  (aGPS_longitude/1000000000) * 10;
      line2[12] = '0' + aGPS_longitude / 10000000 -   (aGPS_longitude/100000000) * 10;
      line2[13] = '0' + aGPS_longitude / 1000000 -    (aGPS_longitude/10000000) * 10;
      line2[14] = '0' + aGPS_longitude / 100000 -     (aGPS_longitude/1000000) * 10;
      line2[15] = '0' + aGPS_longitude / 10000 -      (aGPS_longitude/100000) * 10;
      line2[16] = '0' + aGPS_longitude / 1000 -       (aGPS_longitude/10000) * 10;
      line2[17] = '0' + aGPS_longitude / 100 -        (aGPS_longitude/1000) * 10;
      line2[18] = '0' + aGPS_longitude / 10 -         (aGPS_longitude/100) * 10;
      line2[19] = '0' + aGPS_longitude -              (aGPS_longitude/10) * 10;
      LCDsetLine(2);LCDprintChar(line2);
   }
 

   if (linenr++ % 2) {
      strcpy_P(line4,PSTR("Home Position"));
      LCDsetLine(4);LCDprintChar(line4);
   } else {
   
      strcpy_P(line5,PSTR("---------  ---------"));
      int32_t aGPS_latitude_home = abs(GPS_latitude_home);
      line5[0] = '0' + aGPS_latitude_home / 100000000 - (aGPS_latitude_home/1000000000) * 10;
      line5[1] = '0' + aGPS_latitude_home / 10000000 -  (aGPS_latitude_home/100000000) * 10;     
      line5[2] = '0' + aGPS_latitude_home / 1000000 -   (aGPS_latitude_home/10000000) * 10;
      line5[3] = '0' + aGPS_latitude_home / 100000 -    (aGPS_latitude_home/1000000) * 10;
      line5[4] = '0' + aGPS_latitude_home / 10000 -     (aGPS_latitude_home/100000) * 10;
      line5[5] = '0' + aGPS_latitude_home / 1000 -      (aGPS_latitude_home/10000) * 10;
      line5[6] = '0' + aGPS_latitude_home / 100 -       (aGPS_latitude_home/1000) * 10;
      line5[7] = '0' + aGPS_latitude_home / 10 -        (aGPS_latitude_home/100) * 10;
      line5[8] = '0' + aGPS_latitude_home -             (aGPS_latitude_home/10) * 10;
     
      int32_t aGPS_longitude_home = abs(GPS_longitude_home);
      line5[11] = '0' + aGPS_longitude_home / 100000000 -  (aGPS_longitude_home/1000000000) * 10;
      line5[12] = '0' + aGPS_longitude_home / 10000000 -   (aGPS_longitude_home/100000000) * 10;
      line5[13] = '0' + aGPS_longitude_home / 1000000 -    (aGPS_longitude_home/10000000) * 10;
      line5[14] = '0' + aGPS_longitude_home / 100000 -     (aGPS_longitude_home/1000000) * 10;
      line5[15] = '0' + aGPS_longitude_home / 10000 -      (aGPS_longitude_home/100000) * 10;
      line5[16] = '0' + aGPS_longitude_home / 1000 -       (aGPS_longitude_home/10000) * 10;
      line5[17] = '0' + aGPS_longitude_home / 100 -        (aGPS_longitude_home/1000) * 10;
      line5[18] = '0' + aGPS_longitude_home / 10 -         (aGPS_longitude_home/100) * 10;
      line5[19] = '0' + aGPS_longitude_home -              (aGPS_longitude_home/10) * 10;
      LCDsetLine(5);LCDprintChar(line5);   
   }
 
   if (linenr++ % 2) {
      strcpy_P(line6,PSTR("Hold Position"));
      LCDsetLine(6);LCDprintChar(line6);

      } else {
      strcpy_P(line7,PSTR("---------  ---------"));
      int32_t aGPS_latitude_hold = abs(GPS_latitude_hold);
      line7[0] = '0' + aGPS_latitude_hold / 100000000 - (aGPS_latitude_hold/1000000000) * 10;
      line7[1] = '0' + aGPS_latitude_hold / 10000000 -  (aGPS_latitude_hold/100000000) * 10;     
      line7[2] = '0' + aGPS_latitude_hold / 1000000 -   (aGPS_latitude_hold/10000000) * 10;
      line7[3] = '0' + aGPS_latitude_hold / 100000 -    (aGPS_latitude_hold/1000000) * 10;
      line7[4] = '0' + aGPS_latitude_hold / 10000 -     (aGPS_latitude_hold/100000) * 10;
      line7[5] = '0' + aGPS_latitude_hold / 1000 -      (aGPS_latitude_hold/10000) * 10;
      line7[6] = '0' + aGPS_latitude_hold / 100 -       (aGPS_latitude_hold/1000) * 10;
      line7[7] = '0' + aGPS_latitude_hold / 10 -        (aGPS_latitude_hold/100) * 10;
      line7[8] = '0' + aGPS_latitude_hold -             (aGPS_latitude_hold/10) * 10;

      int32_t aGPS_longitude_hold = abs(GPS_longitude_hold);
      line7[11] = '0' + aGPS_longitude_hold / 100000000 -  (aGPS_longitude_hold/1000000000) * 10;
      line7[12] = '0' + aGPS_longitude_hold / 10000000 -   (aGPS_longitude_hold/100000000) * 10;
      line7[13] = '0' + aGPS_longitude_hold / 1000000 -    (aGPS_longitude_hold/10000000) * 10;
      line7[14] = '0' + aGPS_longitude_hold / 100000 -     (aGPS_longitude_hold/1000000) * 10;
      line7[15] = '0' + aGPS_longitude_hold / 10000 -      (aGPS_longitude_hold/100000) * 10;
      line7[16] = '0' + aGPS_longitude_hold / 1000 -       (aGPS_longitude_hold/10000) * 10;
      line7[17] = '0' + aGPS_longitude_hold / 100 -        (aGPS_longitude_hold/1000) * 10;
      line7[18] = '0' + aGPS_longitude_hold / 10 -         (aGPS_longitude_hold/100) * 10;
      line7[19] = '0' + aGPS_longitude_hold -              (aGPS_longitude_hold/10) * 10;
      LCDsetLine(7);LCDprintChar(line7); 
    }
 
#endif // case 7 : GPS
    break;
#endif


also, line5:
Code: Select all
static char line1[23],line2[23],line3[23],line4[23],line5[23],line6[23],line7[23];


Marvellous!

Thanks, H.
Last edited by howardhb on Wed May 30, 2012 12:40 pm, edited 1 time in total.
User avatar
howardhb
 
Posts: 189
Joined: Tue Oct 11, 2011 7:10 pm
Location: Port Elizabeth, South Africa

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Wayne » Wed May 30, 2012 1:31 am

Yep, I got garbage characters when the location is a negative number.
I got it to work for me but a coder will have to get involved to get it to work for everyone.
Wayne
 
Posts: 86
Joined: Sun Jul 31, 2011 10:44 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Wed May 30, 2012 8:48 am

this code (with or without the abs() ) breaks the logic of displaying exactly one line at a time (like interlaced display on TV). This will introduce a huge increase in cycle time probably in the range of some 1000s extra microseconds. To avoid this performance hit I did introduce the interlacing scheme. Is there good reason to deviate from that for GPS? I think not, so please adapt the GPS code to that logic (as can be seen with the other cases (or teach me why GPS is special).

If you need faster update rate of the data set displayed, simply increase the update.freq #define.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby howardhb » Wed May 30, 2012 12:49 pm

I've modified the code and posted in my previous post.
User avatar
howardhb
 
Posts: 189
Joined: Tue Oct 11, 2011 7:10 pm
Location: Port Elizabeth, South Africa

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Fri Jun 01, 2012 2:27 pm

I've modified the code and posted in my previous post.


Arhm, you are still displaying half of the lines in one cycle. You really want that chunk of data (and time for processing) in one cycle?
I will copy it over soon but would feel safer if it was cut down to exactly one line only upoon every call.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Fri Jun 01, 2012 2:34 pm

Howard,
We got a display problem:
after some time the offset of the first line gets somewhat shifted so that top 50% of first line get displayed at bottom of screen.
I have not yet figured out what triggers this. Could setting an invalid line cause this? With debug enabled, the range check for linenumber is disabled.
Attachments
20120525_110709-small.jpg
display problem - offset shift?
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby howardhb » Fri Jun 01, 2012 4:46 pm

Hi Hamburger.

I have not seen that effect on my display :o
Last night I merged Alex's latest dev (r840) which has new i2c addressing scheme.
I'm not sure which Dev you are using but I've made quite a few changes. (all your "sanity" optimisations are still included)

But, notably, I've changed i2c_clear_OLED() to write, directly, 1024 bytes of 0x00, instead of simply printing spaces.
The function now always resets the page address to 0, so subsequent printing "should" be at the correct line address.
(This might now be masking the "creeping" problem, because I have not seen it)

Also, I've added functionality to display the logo permanently, until any "other" printing is needed, after which the logo is re-displayed... @nhadrian requested this, and I use it too.
Still a 'work in progress'...
It is enabled by adding a #define LOGO_PERMANENT in config.

Attached is the zip of my code.
Please be so kind as to try it out and by all means, make any enhancements you deem necessary.

As you mentioned, GPS printing still needs enhancing, but I haven't got round to doing it yet....
Attachments
LCD dev 0528 with Alex r840 I2C addressing changes.zip
(17.76 KiB) Downloaded 229 times
User avatar
howardhb
 
Posts: 189
Joined: Tue Oct 11, 2011 7:10 pm
Location: Port Elizabeth, South Africa

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Helischorsch » Mon Jun 04, 2012 8:38 pm

Hello,

I am new to MultiiWii and building my first Tricopter.
The Arduino Nano and GY-80 is already running and i can connect to it via HC-04 Bluetooth Module.

Now i'm looking for a display and i found another I2C OLed 128x64 at the bay.

http://www.ebay.de/itm/IIC-I2C-0-96-128X64-White-OLED-Display-Module-AVR-PIC-Arduino-Compatible-/170842973484?pt=LH_DefaultDomain_0&hash=item27c708e52c

Oled_Bottom.jpg
OLED Bottom
(18.73 KiB) Not downloaded yet


Oled_Top.jpg
OLED Top
(10.5 KiB) Not downloaded yet




It is based on the SSD1306 but has a second "controller" installed with a 8x16 characterset.
So it can display 4 lines with 16 chars(8x16), and it is no need to store a charactertable in the MultiWii memory.

Test1.jpg
OLED Test 1


Playing around with the display and the Arduino democode i noticed that the SSD1306 commands and Data cold be passed-through.

Test2.jpg
OLED Test 2


Now my question: On which codebase should i start to adapt the display?

Helischorsch
Helischorsch
 
Posts: 2
Joined: Thu May 10, 2012 11:29 am

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Mon Jun 04, 2012 8:42 pm

From your comment I understand you need not make any changes?
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Helischorsch » Mon Jun 04, 2012 8:59 pm

SSD1306 commands must be passed-through. The OLED has another I2C adress and other basic commands.
Please take a look at the democode on the linked ebay page.
Helischorsch
 
Posts: 2
Joined: Thu May 10, 2012 11:29 am

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Mon Jun 04, 2012 10:38 pm

Ok.
Please use latest version from google rep trunk/_shared. Post your diff and I will integrate it.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Strippo » Tue Jun 05, 2012 7:43 pm

Hi,

I have just integratet my OLED and it works fine for parameter setting, but I have a question about telemetry, if I enter telemetry the pages a change in 1-2 seconds, it is to short to see the values, how can I stop each page for longer displaying?
I try same stick combo like to enter the tele mod, pages stop, but values are not longer updated.

What did I wrong??
Strippo
Strippo
 
Posts: 2
Joined: Tue Jun 05, 2012 7:36 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Tue Jun 05, 2012 8:42 pm

Strippo,
nothing wrong on your part - that is how I did implement it.
At end of config.h you find auto.tele.freq; increase it or
set the auto.tele sequence to just 1 value like "1"
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby forsakenrider » Wed Jun 06, 2012 4:24 am

This is very cool! I'm definitely going to have to order one of these!
forsakenrider
 
Posts: 23
Joined: Thu May 10, 2012 2:08 am
Location: Montreal, QC, Canada

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Strippo » Wed Jun 06, 2012 11:40 am

Thanks, Hamburger

I will try to increase the time, btw is it not possible to hold each page, to display the values continusly??
Would be very nice!
Strippo
Strippo
 
Posts: 2
Joined: Tue Jun 05, 2012 7:36 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Thu Jun 14, 2012 9:57 am

yes. it has bothered me for some time too.
The current timed auto stepping is a relict really from the time when my LCD+BT combo had a broken tx pin and could only receive but not send data to the mwc.

Expect it to be changed in a not too distant future.
The TX-combo nick-fwd & roll-left will do one single step forward in the defined step-sequence.
Downside: let us assume your sequence is "654321" . You want to see page '5', so you enter the tx-combo twice. Then it wil auto-update page 5 forever. Now to turn it off, you have to go to the invisible '0' at the end of the sequence, requiring you to enter the tx-combo 5 times.
It could be avoided by using a second tx-combo for stop, but I think auto.telemetry toggling is not important enough to merit 2 tx-combos.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Thu Jun 14, 2012 1:41 pm

Howard,
I just had another quick glance at your OLED code changes. It will take some more days before I can integrate it; Alex is currently cleaning up the mess in _shared.

About that shift error in the display I posted on earlier, from my tests it looks like the error gets hidden, if DEBUG is not defined. Code in question:
Code: Select all
void LCDsetLine(byte line) { // Line = 1 or 2 - vt100 has lines 1-99
   [...]
#elif defined(OLED_I2C_128x64)
  #ifndef DEBUG // sanity check for production only. Debug runs with all possible side effects
    if (line<1 || line>(MULTILINE_PRE+MULTILINE_POST)) line = 1;
  #endif
  i2c_OLED_set_line(line-1);
#endif

I know you changed some basic oled functions and maybe that cured the shift symptom anyway; but if possible could you please run your latest version with #define DEBUG, cycle through the config menu and the telemetry pages (manually invoke by sending '1'... or via auto.telemetry) and see if the problem is gone for good?
If so, more kudos to you for improving on the basic oled functions.
Hamburger
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby AlouetteIII » Wed Jun 20, 2012 11:09 am

@Hamburger - in the default start screen - which shows version & ready to fly - how to show ( in the empty bottom scetion) what TYPE of software is coded into that board - for example - Tricopter or Quad X or Y6 ?
User avatar
AlouetteIII
 
Posts: 27
Joined: Tue Jan 25, 2011 2:34 pm
Location: AU Australia

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Wayne » Wed Jun 20, 2012 12:44 pm

Find and copy this line in the LCD tab....
strcpy_P(line1,PSTR("Ready to Fly")); LCDsetLine(2); LCDprintChar(line1);
I make these changes....
Paste/insert the line or lines directly below it, change the message and line number....
strcpy_P(line1,PSTR("Aerial-Ventures.com")); LCDsetLine(4); LCDprintChar(line1);
strcpy_P(line1,PSTR("Wayne ***-***-****")); LCDsetLine(5); LCDprintChar(line1);
Wayne
 
Posts: 86
Joined: Sun Jul 31, 2011 10:44 pm

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Gartenflieger » Wed Jun 20, 2012 9:43 pm

Hi Guys,

could use some help here: Damaged my LCD from wide.hk in a crash and lost two capacitors: C5 and C8 (the bigger ones). If someone has one of the units lying around and could get a peek at the capacity values I would be very grateful. Unfortunately, they are not on the wide.hk official image, it doesn't match what is actually on the back of my board.

Best regards, Christoph
User avatar
Gartenflieger
 
Posts: 65
Joined: Sat Oct 01, 2011 10:07 pm
Location: Dortmund, Germany

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Synthex » Mon Jun 25, 2012 8:46 pm

Hello,

Would it be possible to have an option in config.h file, to automatically display basic informations (voltage, Aux positions, ...) on the module OLED,
without enable the telemetry option ?

Regards
Synthex
 
Posts: 7
Joined: Wed Dec 14, 2011 11:09 am
Location: Lille France

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Mon Jun 25, 2012 9:08 pm

currently not. And it would do just what the telemetry option does - so not much to gain here from adding yet another option.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Synthex » Tue Jun 26, 2012 6:24 pm

Ok. but, here is the result :
Multiwii_oled.jpg

my settings :
#define OLED_I2C_128x64
#define LCD_TELEMETRY
#define LCD_TELEMETRY_AUTO "1"
#define VBAT
#define BUZZER
Synthex
 
Posts: 7
Joined: Wed Dec 14, 2011 11:09 am
Location: Lille France

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Tue Jun 26, 2012 6:49 pm

update
I did the integration of Howard's latest code;
+ OLED driving
+ updated LOGO
+ new LOGO.PERMANENT option
+ GPS parameters accessible in configuration menu (untested, I have no GPS)
- without the GPS display. That part needs some more tweaking from Howard.

Good thing: the previous display error of shifted lines is gone.

It is in _shared now.
Hamburger
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Tue Jun 26, 2012 7:04 pm

Synthex wrote:Ok. but, here is the result :
my settings :
#define OLED_I2C_128x64
#define LCD_TELEMETRY
#define LCD_TELEMETRY_AUTO "1"
#define VBAT
#define BUZZER


your settings look good.
You can try and define DEBUG and LOG_VALUES 1.
Your displayed data confuse me. Mine looks like this now:
26062012857.jpg


Your first display line looks wrong. Starting with an 'A'?
You have inverse attribute on, not sure why. It is used if and only if some error (cycle time, i2c errors, failsafes) was detected or if the user defined limit for battery voltage or capacity (powermeter) was triggerred. You will have to dig there somehow.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby LenzGr » Tue Jun 26, 2012 11:05 pm

Very cool. I ordered mine today, let's see how long it takes to get shipped to Germany...
User avatar
LenzGr
 
Posts: 166
Joined: Wed Nov 23, 2011 10:50 am
Location: Hamburg, Germany

0.96" SSD1306 128X64 OLED Display Module

Postby matteo3e5 » Thu Jul 12, 2012 7:36 am

Hi Guys,

I am a multiwii user and I have to modify pid configuration aux settings etc when I am on the field and I don't want to bring with me a notebook.
The OLED Display that you are developping seems the right solution to my problem and it works with multiwii version 2.0 and 2.1 (new serial protocol).

I want build one, so the questios are :

What OLED do I have to buy ?
Where can I find a connection diagram or a schematics ?
How is the OLED menu navigated ... using the tx sticks ?
Sorry for asking so many questions but reading the posts I didn't get a clear idea, thank you in advance
Marco
matteo3e5
 
Posts: 8
Joined: Thu May 24, 2012 6:34 am

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Thu Jul 12, 2012 9:13 am

if you have a smartfone, you could also get a bluetooth module connected to your copter, install blueterm or some such on your fone and use that for configuration and telemetry.

search for a link Howard provided to the ebay seller,
it is 2 wires for i2c + 2 wires for power,
navigation is with tx sticks
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby matteo3e5 » Thu Jul 12, 2012 8:37 pm

Hamburger wrote:if you have a smartfone, you could also get a bluetooth module connected to your copter, install blueterm or some such on your fone and use that for configuration and telemetry.

search for a link Howard provided to the ebay seller,
it is 2 wires for i2c + 2 wires for power,
navigation is with tx sticks


thank you, I placed an order for this one
http://www.ebay.it/itm/130566448551?ssP ... 1497.l2649

Is there any software to download or the last version of multiwii fully support this i2c display ?
In the past I have seen that an update version of the lcd.ino file was required.

thanks a lot,
Marco
matteo3e5
 
Posts: 8
Joined: Thu May 24, 2012 6:34 am

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Thu Jul 12, 2012 9:00 pm

best to get v2.1 release candidate.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby LenzGr » Thu Jul 12, 2012 9:21 pm

matteo3e5 wrote:thank you, I placed an order for this one
http://www.ebay.it/itm/130566448551?ssP ... 1497.l2649

That's the one I received today, ordered from wide.hk directly some 10 days ago. It's tiny! I'll report back once I've connected it.
Is there any software to download or the last version of multiwii fully support this i2c display ?
In the past I have seen that an update version of the lcd.ino file was required.

The latest 2.1 development drops should support this display just fine.
User avatar
LenzGr
 
Posts: 166
Joined: Wed Nov 23, 2011 10:50 am
Location: Hamburg, Germany

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby matteo3e5 » Fri Jul 13, 2012 6:42 pm

Thank you Hamburger and LenzGr

LenzGr let me how it works

Marco
matteo3e5
 
Posts: 8
Joined: Thu May 24, 2012 6:34 am

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby LenzGr » Fri Jul 13, 2012 9:32 pm

Here are pictures of the module I received. I wonder how to physically mount it to my copter - how did others do this? Just use some double sided thick foam tape?

Image

Image
User avatar
LenzGr
 
Posts: 166
Joined: Wed Nov 23, 2011 10:50 am
Location: Hamburg, Germany

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Fri Jul 13, 2012 11:46 pm

Yes. Double sided tape. On top of allinone board but not dirdctly on sensor.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby LenzGr » Sun Jul 15, 2012 12:57 am

Thanks for the hint! I'll have to find another place, as my sensor board sits underneath the Seeeduino Mega board I'm currently using.

I managed to connect the OLED Module and it works, using a the current code in _shared (r982)! This will be very useful for quickly tuning parameters in the field.

I enabled the following configuration options:

Code: Select all
=== modified file 'config.h'
--- config.h   2012-07-14 16:08:10 +0000
+++ config.h   2012-07-14 23:46:54 +0000
@@ -28,7 +28,7 @@
     //#define BI
     //#define TRI
     //#define QUADP
-    //#define QUADX
+    #define QUADX
     //#define Y4
     //#define Y6
     //#define HEX6
@@ -50,24 +50,24 @@
     //#define MINTHROTTLE 1300 // for Turnigy Plush ESCs 10A
     //#define MINTHROTTLE 1120 // for Super Simple ESCs 10A
     //#define MINTHROTTLE 1064 // special ESC (simonk)
-    #define MINTHROTTLE 1150
+    #define MINTHROTTLE 1015
 
   /****************************    Motor maxthrottle    *******************************/
     /* this is the maximum value for the ESCs at full power, this value can be increased up to 2000 */
-      #define MAXTHROTTLE 1850
+      #define MAXTHROTTLE 2000
 
   /****************************    Mincommand          *******************************/
     /* this is the value for the ESCs when they are not armed
        in some cases, this value must be lowered down to 900 for some specific ESCs, otherwise they failed to initiate */
-      #define MINCOMMAND  1000
+      #define MINCOMMAND  900
 
   /**********************************    I2C speed   ************************************/
-    #define I2C_SPEED 100000L     //100kHz normal mode, this value must be used for a genuine WMP
-    //#define I2C_SPEED 400000L   //400kHz fast mode, it works only with some WMP clones
+    //#define I2C_SPEED 100000L     //100kHz normal mode, this value must be used for a genuine WMP
+    #define I2C_SPEED 400000L   //400kHz fast mode, it works only with some WMP clones and with most current boards
 
   /***************************    Internal i2c Pullups   ********************************/
-    /* enable internal I2C pull ups (in most cases it is better to use external pullups) */
-    //#define INTERNAL_I2C_PULLUPS
+    //enable internal I2C pull ups (in most cases it is better to use external pullups)
+    #define INTERNAL_I2C_PULLUPS
 
   /**************************************************************************************/
   /*****************          boards and sensor definitions            ******************/
@@ -91,7 +91,7 @@
       //#define QUADRINO        // full FC board 9DOF+baro board from witespy  with BMP085 baro     <- confirmed by Alex
       //#define QUADRINO_ZOOM   // full FC board 9DOF+baro board from witespy  second edition
       //#define QUADRINO_ZOOM_MS// full FC board 9DOF+baro board from witespy  second edition       <- confirmed by Alex
-      //#define ALLINONE        // full FC board or standalone 9DOF+baro board from CSG_EU
+      #define ALLINONE        // full FC board or standalone 9DOF+baro board from CSG_EU
       //#define AEROQUADSHIELDv2
       //#define ATAVRSBIN1      // Atmel 9DOF (Contribution by EOSBandi). requires 3.3V power.
       //#define SIRIUS          // Sirius Navigator IMU                                             <- confirmed by Alex
@@ -186,7 +186,7 @@
    /* optionally disable stick combinations to arm/disarm the motors.
      * In most cases one of the two options to arm/disarm via TX stick is sufficient */
     #define ALLOW_ARM_DISARM_VIA_TX_YAW
-    #define ALLOW_ARM_DISARM_VIA_TX_ROLL
+   // #define ALLOW_ARM_DISARM_VIA_TX_ROLL
 
   /***********************          Cam Stabilisation             ***********************/
     /* The following lines apply only for a pitch/roll tilt stabilization system. Uncomment the first or second line to activate it */
@@ -308,7 +308,7 @@
          Spektrum Satellites are 3V devices.  DO NOT connect to 5V!
          For MEGA boards, attach sat grey wire to RX1, pin 19. Sat black wire to ground. Sat orange wire to Mega board's 3.3V (or any other 3V to 3.3V source).
          For PROMINI, attach sat grey to RX0.  Attach sat black to ground. */
-      //#define SPEKTRUM 1024
+      #define SPEKTRUM 1024
       //#define SPEKTRUM 2048
 
     /*******************************    SBUS RECIVER    ************************************/
@@ -598,10 +598,10 @@
   /**************************************************************************************/
 
     /* uncomment this line if you plan to use a LCD or OLED */
-      //#define LCD_CONF
+      #define LCD_CONF
 
     /* to include setting the aux switches for AUX1 -> AUX4 via LCD */ //to review (activate[] is now 16 bit long)
-      //#define LCD_CONF_AUX
+      #define LCD_CONF_AUX
 
     /* if program gets too large (>32k), need to exclude some functionality */
       /* uncomment to suppress some unwanted aux3 aux4 items in config menu (only useful if LCD_CONF_AUX is enabled) */
@@ -614,7 +614,7 @@
       //#define LCD_VT100       // SERIAL LCD: vt100 compatible terminal emulation (blueterm, putty, etc.)
       //#define LCD_ETPP        // I2C LCD: Eagle Tree Power Panel LCD, which is i2c (not serial)
       //#define LCD_LCD03       // I2C LCD: LCD03, which is i2c
-      //#define OLED_I2C_128x64 // I2C LCD: OLED http://www.multiwii.com/forum/viewtopic.php?f=7&t=1350
+      #define OLED_I2C_128x64 // I2C LCD: OLED http://www.multiwii.com/forum/viewtopic.php?f=7&t=1350
 
     /******************************   Logo settings     ***********************************/
       //#define SUPPRESS_OLED_I2C_128x64LOGO  // suppress display of OLED logo to save memory
@@ -665,7 +665,7 @@
        The active page on the LCD does get updated automatically
        Easy to use with Terminal application or display like LCD - if available uses the 4 preconfigured buttons  to send 'A', 'B', 'C', 'D' */
     /********************************    Activation     ***********************************/
-    //#define LCD_TELEMETRY
+    #define LCD_TELEMETRY
 
     /* to enable automatic hopping between a choice of telemetry pages uncomment this.
        This may be useful if your LCD has no buttons or the sending is broken
@@ -677,7 +677,7 @@
     //#define LCD_TELEMETRY_AUTO  "212232425262729" // strong emphasis on page 2
 
     /* same as above, but manual stepping sequence; requires stick input for each stepping */
-    //#define LCD_TELEMETRY_STEP "0123456789" // must begin with 0
+    #define LCD_TELEMETRY_STEP "012345679" // must begin with 0
 
 
     /* on telemetry page B (2) it gives a bar graph which shows how much voltage battery has left. Range from 0 to 12 Volt is not very informative


I noticed that the comment in config.h above the LCD_TELEMETRY_AUTO definition seems to be wrong - it states "roll=left & pitch forward" to switch pages, while the actual stick combo is "roll=right & pitch forward"

However, I too have a strange problem with the overview page that displays the battery voltage and uptime: the first line blinks and changes between the voltage/mAh display and the BARO altitude (that's where the "A" character comes from). It looks like a page wrap to me, which is odd since there should still be at least one line free...
User avatar
LenzGr
 
Posts: 166
Joined: Wed Nov 23, 2011 10:50 am
Location: Hamburg, Germany

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby LenzGr » Sun Jul 15, 2012 1:08 am

The following patch fixed the flickering for me - there is no line 9 on the OLED...

Code: Select all

=== modified file 'LCD.ino'
--- LCD.ino   2012-07-03 15:52:04 +0000
+++ LCD.ino   2012-07-15 00:06:07 +0000
@@ -1663,7 +1663,7 @@
       break;
       case 5:// height
       LCDsetLine(8);// to clear the unused line
-      LCDsetLine(9);
+      // LCDsetLine(9);
 #if BARO
       int16_t h = (BaroAlt - BAROaltStart) / 100;
       LCDprint('A'); lcdprint_int16(h); LCDprint('m');
User avatar
LenzGr
 
Posts: 166
Joined: Wed Nov 23, 2011 10:50 am
Location: Hamburg, Germany

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Sun Jul 15, 2012 2:25 am

No. Juzt checked ode.
Tele.auto is roll.left+nick.fwd
Tele.step is roll.right +nick.fwd
Tbose are two independAnt features.

about line9 cannot say.will check later.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby LenzGr » Sun Jul 15, 2012 1:56 pm

Hamburger wrote:No. Juzt checked ode.
Tele.auto is roll.left+nick.fwd
Tele.step is roll.right +nick.fwd
Tbose are two independAnt features.

Ah, I see. I just looked at the comments in config.h for LCD_TELEMETRY_STEP, I admit I did not check the docs for all the available stick combos yet :)
Code: Select all
/* same as above, but manual stepping sequence; requires stick input for each stepping */


The "same as above" confused me into thinking that the stick sequence is also identical. I suggest expanding this as follows:

Code: Select all
/* same as above, but manual stepping sequence; requires stick input (throttle=low & roll=right & pitch=forward) to step through each defined telemetry page */


about line9 cannot say.will check later.

Thanks for looking into this! I also noticed I have some "blank" pages given the configuration above, I'll look into this and will try to report more details.
User avatar
LenzGr
 
Posts: 166
Joined: Wed Nov 23, 2011 10:50 am
Location: Hamburg, Germany

Re: 0.96" SSD1306 128X64 OLED Display Module

Postby Hamburger » Sun Jul 15, 2012 6:21 pm

ok, comment changed in _shared.
User avatar
Hamburger
 
Posts: 2557
Joined: Tue Mar 01, 2011 2:14 pm
Location: air

PreviousNext

Return to Ideas

Who is online

Users browsing this forum: No registered users and 9 guests