fl { OLED display(128X32) driver UG-2832HSWEG02 Controller:SSD1306 PropForth 5.5 2014/01/02 15:27:31 OLED display(128X32) Propeller VDD ---- 3.3V GND ---- GND RES ---- P0 SCL ---- P28 SDA ---- P29 } \ =========================================================================== \ Characters \ =========================================================================== wvariable Font -2 allot h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h06 c, h5F c, h5F c, h06 c, h00 c, h00 c, h00 c, h00 c, h03 c, h07 c, h00 c, h07 c, h03 c, h00 c, h00 c, h14 c, h7F c, h7F c, h14 c, h7F c, h7F c, h14 c, h00 c, h24 c, h2E c, h2A c, h6B c, h6B c, h3A c, h12 c, h00 c, h46 c, h66 c, h30 c, h18 c, h0C c, h66 c, h62 c, h00 c, h30 c, h7A c, h4F c, h5D c, h37 c, h7A c, h48 c, h00 c, h00 c, h04 c, h07 c, h03 c, h00 c, h00 c, h00 c, h00 c, h00 c, h1C c, h3E c, h63 c, h41 c, h00 c, h00 c, h00 c, h00 c, h41 c, h63 c, h3E c, h1C c, h00 c, h00 c, h00 c, h08 c, h2A c, h3E c, h1C c, h1C c, h3E c, h2A c, h08 c, h08 c, h08 c, h3E c, h3E c, h08 c, h08 c, h00 c, h00 c, h00 c, h80 c, hE0 c, h60 c, h00 c, h00 c, h00 c, h00 c, h08 c, h08 c, h08 c, h08 c, h08 c, h08 c, h00 c, h00 c, h00 c, h00 c, h60 c, h60 c, h00 c, h00 c, h00 c, h00 c, h60 c, h30 c, h18 c, h0C c, h06 c, h03 c, h01 c, h00 c, h3E c, h7F c, h41 c, h49 c, h41 c, h7F c, h3E c, h00 c, h40 c, h42 c, h7F c, h7F c, h40 c, h40 c, h00 c, h00 c, h62 c, h73 c, h59 c, h49 c, h6F c, h66 c, h00 c, h00 c, h22 c, h63 c, h49 c, h49 c, h7F c, h36 c, h00 c, h00 c, h18 c, h1C c, h16 c, h53 c, h7F c, h7F c, h50 c, h00 c, h27 c, h67 c, h45 c, h45 c, h7D c, h39 c, h00 c, h00 c, h3C c, h7E c, h4B c, h49 c, h79 c, h30 c, h00 c, h00 c, h03 c, h03 c, h71 c, h79 c, h0F c, h07 c, h00 c, h00 c, h36 c, h7F c, h49 c, h49 c, h7F c, h36 c, h00 c, h00 c, h06 c, h4F c, h49 c, h69 c, h3F c, h1E c, h00 c, h00 c, h00 c, h00 c, h66 c, h66 c, h00 c, h00 c, h00 c, h00 c, h00 c, h80 c, hE6 c, h66 c, h00 c, h00 c, h00 c, h00 c, h08 c, h1C c, h36 c, h63 c, h41 c, h00 c, h00 c, h00 c, h24 c, h24 c, h24 c, h24 c, h24 c, h24 c, h00 c, h00 c, h00 c, h41 c, h63 c, h36 c, h1C c, h08 c, h00 c, h00 c, h02 c, h03 c, h51 c, h59 c, h0F c, h06 c, h00 c, h00 c, h3E c, h7F c, h41 c, h5D c, h5D c, h1F c, h0E c, h00 c, h7C c, h7E c, h13 c, h13 c, h7E c, h7C c, h00 c, h00 c, h41 c, h7F c, h7F c, h49 c, h49 c, h7F c, h36 c, h00 c, h1C c, h3E c, h63 c, h41 c, h41 c, h63 c, h22 c, h00 c, h41 c, h7F c, h7F c, h41 c, h63 c, h3E c, h1C c, h00 c, h41 c, h7F c, h7F c, h49 c, h5D c, h41 c, h63 c, h00 c, h41 c, h7F c, h7F c, h49 c, h1D c, h01 c, h03 c, h00 c, h1C c, h3E c, h63 c, h41 c, h51 c, h73 c, h72 c, h00 c, h7F c, h7F c, h08 c, h08 c, h7F c, h7F c, h00 c, h00 c, h00 c, h41 c, h7F c, h7F c, h41 c, h00 c, h00 c, h00 c, h30 c, h70 c, h40 c, h41 c, h7F c, h3F c, h01 c, h00 c, h41 c, h7F c, h7F c, h08 c, h1C c, h77 c, h63 c, h00 c, h41 c, h7F c, h7F c, h41 c, h40 c, h60 c, h70 c, h00 c, h7F c, h7F c, h0E c, h1C c, h0E c, h7F c, h7F c, h00 c, h7F c, h7F c, h06 c, h0C c, h18 c, h7F c, h7F c, h00 c, h1C c, h3E c, h63 c, h41 c, h63 c, h3E c, h1C c, h00 c, h41 c, h7F c, h7F c, h49 c, h09 c, h0F c, h06 c, h00 c, h1E c, h3F c, h21 c, h71 c, h7F c, h5E c, h00 c, h00 c, h41 c, h7F c, h7F c, h09 c, h19 c, h7F c, h66 c, h00 c, h26 c, h6F c, h49 c, h49 c, h7B c, h32 c, h00 c, h00 c, h03 c, h41 c, h7F c, h7F c, h41 c, h03 c, h00 c, h00 c, h7F c, h7F c, h40 c, h40 c, h7F c, h7F c, h00 c, h00 c, h1F c, h3F c, h60 c, h60 c, h3F c, h1F c, h00 c, h00 c, h7F c, h7F c, h30 c, h18 c, h30 c, h7F c, h7F c, h00 c, h61 c, h73 c, h1E c, h0C c, h1E c, h73 c, h61 c, h00 c, h07 c, h4F c, h78 c, h78 c, h4F c, h07 c, h00 c, h00 c, h47 c, h63 c, h71 c, h59 c, h4D c, h67 c, h73 c, h00 c, h00 c, h7F c, h7F c, h41 c, h41 c, h00 c, h00 c, h00 c, h01 c, h03 c, h06 c, h0C c, h18 c, h30 c, h60 c, h00 c, h00 c, h41 c, h41 c, h7F c, h7F c, h00 c, h00 c, h00 c, h08 c, h0C c, h06 c, h03 c, h06 c, h0C c, h08 c, h00 c, h80 c, h80 c, h80 c, h80 c, h80 c, h80 c, h80 c, h80 c, h00 c, h00 c, h01 c, h03 c, h06 c, h04 c, h00 c, h00 c, h20 c, h74 c, h54 c, h54 c, h3C c, h78 c, h40 c, h00 c, h41 c, h7F c, h3F c, h48 c, h48 c, h78 c, h30 c, h00 c, h38 c, h7C c, h44 c, h44 c, h6C c, h28 c, h00 c, h00 c, h30 c, h78 c, h48 c, h49 c, h3F c, h7F c, h40 c, h00 c, h38 c, h7C c, h54 c, h54 c, h5C c, h18 c, h00 c, h00 c, h48 c, h7E c, h7F c, h49 c, h03 c, h02 c, h00 c, h00 c, h98 c, hBC c, hA4 c, hA4 c, hF8 c, h7C c, h04 c, h00 c, h41 c, h7F c, h7F c, h08 c, h04 c, h7C c, h78 c, h00 c, h00 c, h44 c, h7D c, h7D c, h40 c, h00 c, h00 c, h00 c, h60 c, hE0 c, h80 c, h80 c, hFD c, h7D c, h00 c, h00 c, h41 c, h7F c, h7F c, h10 c, h38 c, h6C c, h44 c, h00 c, h00 c, h41 c, h7F c, h7F c, h40 c, h00 c, h00 c, h00 c, h7C c, h7C c, h08 c, h38 c, h0C c, h7C c, h78 c, h00 c, h7C c, h7C c, h04 c, h04 c, h7C c, h78 c, h00 c, h00 c, h38 c, h7C c, h44 c, h44 c, h7C c, h38 c, h00 c, h00 c, h84 c, hFC c, hF8 c, hA4 c, h24 c, h3C c, h18 c, h00 c, h18 c, h3C c, h24 c, hA4 c, hF8 c, hFC c, h84 c, h00 c, h44 c, h7C c, h78 c, h4C c, h04 c, h1C c, h18 c, h00 c, h48 c, h5C c, h54 c, h54 c, h74 c, h24 c, h00 c, h00 c, h00 c, h04 c, h3E c, h7F c, h44 c, h24 c, h00 c, h00 c, h3C c, h7C c, h40 c, h40 c, h3C c, h7C c, h40 c, h00 c, h1C c, h3C c, h60 c, h60 c, h3C c, h1C c, h00 c, h00 c, h3C c, h7C c, h60 c, h38 c, h60 c, h7C c, h3C c, h00 c, h44 c, h6C c, h38 c, h10 c, h38 c, h6C c, h44 c, h00 c, h9C c, hBC c, hA0 c, hA0 c, hFC c, h7C c, h00 c, h00 c, h4C c, h64 c, h74 c, h5C c, h4C c, h64 c, h00 c, h00 c, h08 c, h08 c, h3E c, h77 c, h41 c, h41 c, h00 c, h00 c, h00 c, h00 c, h7F c, h7F c, h00 c, h00 c, h00 c, h00 c, h41 c, h41 c, h77 c, h3E c, h08 c, h08 c, h00 c, h00 c, h02 c, h03 c, h01 c, h03 c, h02 c, h03 c, h01 c, h00 c, h4C c, h5E c, h73 c, h01 c, h73 c, h5E c, h4C c, h00 c, \ =========================================================================== \ Constants \ =========================================================================== \ Slave addres h3C for OLED display(128X32) sa0=0 h78 wconstant OLED 0 wconstant P0 \ Setting values to SSD1306-registers \ Default values are comment-out. wvariable init_tbl -2 allot \ hAE \ Display Off sleep-mode (Default) \ hD5 \ DisplayClock, Ratio/Oscillatpr \ h80 \ (Default valuue) hA8 c, \ Multiplex Ratio h1F c, \ 1/32 duty \ hD3 \ Display Offset \ h00 \ (Default valuue) h40 c, \ Display RAM display start line (Default valuue) h8D c, \ Charge Pump Settong h14 c, \ Ensble Charge Pump \ h20 \ Memory Address Mode \ h02 \ Page Address Mode (Default) \ hA4 \ Entire Display ON (Default) \ hA0 \ Segment Re-map (Default) \ hC0 \ COM output, Scan direction normal mode (Default) hDA c, \ COM Pins h02 c, \ Sequential COM pin(Default), Disable COM left/right remap \ h81 \ Contrast control \ h7F \ (Default valuue) \ hD9 \ Ptr-charge Period \ h22 \ (Default valuue) hDB c, \ Vcomh Deselect Level h30 c, \ 0.83Vcc \ hA6 \ Normal Display (Default) hAF c, \ Display On \ =========================================================================== \ Word for I2C_device \ =========================================================================== : err_msg ." I2C error" ; \ If error, print message \ ( n1 -- ) n1:t/f : err? if err_msg cr then ; \ Modified _eewrite ( c1 -- t/f ) write c1 to the eeprom, true if there was an error \ Received acknowledge from i2c-device during scl is high lockdict create _eewrite forthentry $C_a_lxasm w, h131 h113 1- tuck - h9 lshift or here W@ alignl h10 lshift or l, z2WyPj8 l, z1YVPQ0 l, z1vix[h l, z1Sy\fe l, z1bix[i l, z1Sy\fe l, z1Sy\fe l, z1[ix[i l, zfyPO1 l, z1Sy\fe l, z3[yPnK l, z1[ixnh l, z1Sy\fe l, z1bix[i l, z1Sy\fe l, z1YF\ql l, z1viPR6 l, z1Sy\fe l, z1[ix[i l, z1Sy\fe l, z1Sy\fe l, z1[ix[h l, z1bixnh l, z1SV01X l, z2WiQCj l, z3[yQCf l, z1SV000 l, zW0000 l, zG0000 l, zB l, freedict \ =========================================================================== \ Main \ =========================================================================== \ Write controlbyte \ ( n1 -- t/f ) n1:0=command, 1=data t/f:true if there was an error : controlbyte if h40 else h80 then _eewrite ; \ Reset SSD1306 \ ( -- ) : ssd1306_reset P0 pinout P0 pinhi 1 delms P0 pinlo d150 delms P0 pinhi 1 delms ; wvariable ss \ Clear GDDRAM on Page Addressing Mode \ ( -- ) : clr_mem \ Start I2C 4 0 do _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) OLED _eewrite 0 controlbyte or hB0 i + _eewrite or 0 controlbyte or h00 _eewrite or 0 controlbyte or h10 _eewrite or 1 controlbyte or \ Write o to GDDRAM d128 0 do ss W@ _eewrite or loop \ Stop I2C _eestop err? loop ; \ Initialize SSD1306 \ ( -- ) : init_oled ssd1306_reset \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) OLED _eewrite \ Write values to setting registers d10 0 do 0 controlbyte or \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) i init_tbl + C@ _eewrite or loop \ Stop I2C _eestop err? ; \ Display off OLED_LCD \ ( -- ) : lcd_off \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) OLED _eewrite 0 controlbyte or hAE _eewrite or \ Display Off (sleep-mode) \ 0 controlbyte or h8D _eewrite or \ Charge Pump Settong \ 0 controlbyte or h10 _eewrite or \ Disble Charge Pump \ d150 delms \ Stop I2C _eestop err? ; \ Display on after lcd_off \ ( -- ) : lcd_on \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) OLED _eewrite \ 0 controlbyte or h8D _eewrite or \ Charge Pump Settong \ 0 controlbyte or h14 _eewrite or \ Ensble Charge Pump \ d150 delms 0 controlbyte or hAF _eewrite or \ Display On \ Stop I2C _eestop err? ; \ Power off OLED_LCD \ ( -- ) : power_off \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) OLED _eewrite 0 controlbyte or hAE _eewrite or \ Display Off (sleep-mode) 0 controlbyte or h8D _eewrite or \ Charge Pump Settong 0 controlbyte or h10 _eewrite or \ Disble Charge Pump d150 delms \ Stop I2C _eestop err? ; \ Display 8X8 Font by using Horizpntal Addressing Mode \ ( -- ) : test \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) OLED _eewrite 0 controlbyte or h20 _eewrite or \ Memory Addressing Mode 0 controlbyte or h00 _eewrite or \ Horizontal Addressing Mode 0 controlbyte or h21 _eewrite or \ Column Address 0 controlbyte or h00 _eewrite or \ Column Start Address (Default) 0 controlbyte or h7F _eewrite or \ Column End Address (Default) 0 controlbyte or h22 _eewrite or \ Page Address 0 controlbyte or h00 _eewrite or \ Page Start Address 0 controlbyte or h03 _eewrite or \ Page End Address \ Stop I2C _eestop err? \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) OLED _eewrite 1 controlbyte or \ Write o to GDDRAM d768 0 do Font i + C@ _eewrite or d10 delms loop \ Stop I2C _eestop err? ;