Need help in setting a 1.3inch oled display


Closed Thread
Results 1 to 5 of 5
  1. #1
    Join Date
    Jun 2016
    Posts
    60

    Default Need help in setting a 1.3inch oled display

    I did buy this display because just a little larger of the one I was using sucessfully. Both are I2C but the 1.3 inch dosn't work! It doesn't clear the display and it print on the first line only. I did try to change several display setting command withou any luck. Has anybody faced this problem before and give me some help in making this display working correctly?

    Thank you in advance for any help

    Alberto

  2. #2


    Did you find this post helpful? Yes | No

    Default Re: Need help in setting a 1.3inch oled display

    If you want help, you need to post.

    OLED model?
    Pic xxxxxxx?
    PBP code?
    Schematic?

  3. #3
    Join Date
    Jun 2016
    Posts
    60


    Did you find this post helpful? Yes | No

    Default Re: Need help in setting a 1.3inch oled display

    OK problem solved! It was the initialize command set that needed to be adjusted for the SSH1106 controller.

    Alberto

  4. #4
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,517


    Did you find this post helpful? Yes | No

    Default Re: Need help in setting a 1.3inch oled display

    Care to share the code?

    /Henrik.

  5. #5
    Join Date
    Jun 2016
    Posts
    60


    Did you find this post helpful? Yes | No

    Default Re: Need help in setting a 1.3inch oled display

    Care to share the code?

    /Henrik.
    Not at all! here the code. Please note that it needs the include "Elapsed.bas" in order to work. Please also note that the original code has been posted by timc and I did modify his code to have it working with 1,3 inch oled driven by SH1106.

    Alberto

    Code:
     ;----[16F88 Hardware Configuration]---------------------------------------------
    #IF __PROCESSOR__ = "16F88"
      #DEFINE MCU_FOUND 1
    #CONFIG
    cfg1 = _INTRC_IO              ; INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin
    cfg1&= _WDT_OFF               ; WDT disabled
    cfg1&= _PWRTE_OFF             ; PWRT disabled
    cfg1&= _MCLR_ON               ; RA5/MCLR/VPP pin function is MCLR
    cfg1&= _BODEN_OFF             ; BOR disabled
    cfg1&= _LVP_OFF               ; RB3 is digital I/O, HV on MCLR must be used for programming
    cfg1&= _CPD_OFF               ; Code protection off
    cfg1&= _WRT_PROTECT_OFF       ; Write protection off
    cfg1&= _DEBUG_OFF             ; In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins
    cfg1&= _CCP1_RB0              ; CCP1 function on RB0
    cfg1&= _CP_OFF                ; Code protection off
      __CONFIG _CONFIG1, cfg1
    
    cfg2 = _FCMEN_ON              ; Fail-Safe Clock Monitor enabled
    cfg2&= _IESO_ON               ; Internal External Switchover mode enabled
      __CONFIG _CONFIG2, cfg2
    
    #ENDCONFIG
    
    #ENDIF
    
    ;----[Verify Configs have been specified for Selected Processor]----------------
    ;       Note: Only include this routine once, after all #CONFIG blocks
    #IFNDEF MCU_FOUND
      #ERROR "No CONFIGs found for [" + __PROCESSOR__ +"]"
    #ENDIF
       
    INCLUDE "Elapsed.bas"
    '=============================== MCU SETUP =====================================
      
    DEFINE OSC 8                        ' define fosc
    define I2C_HOLD 1                   ' define I2C type
    
        TrisB = %00000000               ' Set all port B pins as outputs
        TrisA = %00001100               ' Set portA.2 & portA.3 as inputs
        CMCON = 7                       ' Turn Off Comparators
        ADCON1 = 7                      ' Disable A/D converter    
        ANSEL = %00000000               ' set all analog pins to digital
        OSCCON = %01110000              ' Set PIC16F88 to 8 MHz = %01110000
                                        ' or set to 4 MHz = %01100000                                        
    '===============================================================================
    
    LED                 var PortB.3
    SDA                 var PortA.2             ' I2C Data   PortA.2
    SCL                 var PortA.3             ' I2C Clock  PortA.3
    Res                 var PortB.0
    
    '===============================================================================
    
    False               con 0
    True                con 1
    
    Flag_Text           var bit
    
    I2CDevice           var byte
    LENGTH              VAR BYTE[2]
    DC                  VAR Byte                ' DATA OR COMMAND: $40=DATA or $0=COMMAND 
    LCD_DATA            VAR BYTE
    COM                 VAR BYTE                ' COMMAND
    PAGE                VAR BYTE                ' LCD PAGE(B0 TO B7)
    
    I                   VAR BYTE
    J                   VAR BYTE
    X                   VAR BYTE                ' LCD POSITION X(0 TO 127)
    Y                   VAR BYTE                ' LCD POSITION Y(0 TO 7)
    
    say                 var byte                ' counter 
    text_reg            var byte                ' index for text
    letter_reg          var byte                ' data carrier for text chars
    letter_count        var byte                ' count of letters in your text
    Text_Buff           var byte[27]
    Text_String         var byte
    Old_Seconds         var byte
    
    Counter             var word
    charset             var word                ' Char codes index
    chartmp             var word                ' char codes index temp
    letter_temp         var word	            ' working copy
    
    '===============================================================================
    
    CLEAR
    I2CDevice = $78                             ' Display = $78 (SA0 pin = 0)
    DC = $00                                      ' value for commands
    
    for I = 0 to 10
    pause 100
    led = !Led
    next I
    led = 0
    
    '====================== lcd initialization for (SH1106 & SSD1306 driver) ===========================
    
    INIT:
    
    I2CWrite SDA,SCL,I2CDevice,[DC,$AE]         ' Display Off
    I2CWrite SDA,SCL,DC,I2CDevice,[$20]
    I2CWrite SDA,SCL,I2CDevice,[DC,$10]           
    I2CWrite SDA,SCL,I2CDevice,[DC,$B0]     
    I2CWrite SDA,SCL,I2CDevice,[DC,$C8]
        
    I2CWrite SDA,SCL,I2CDevice,[DC,$00]
    I2CWrite SDA,SCL,I2CDevice,[DC,$10]     
    I2CWrite SDA,SCL,I2CDevice,[DC,$40]
           
    i2cwrite sda,scl,I2CDevice,[DC,$81]     
    i2cwrite sda,scl,I2CDevice,[DC,$7F]    
    i2cwrite sda,scl,I2CDevice,[DC,$A1]    
    i2cwrite sda,scl,I2CDevice,[DC,$A6] 
    I2CWrite SDA,SCL,I2CDevice,[DC,$A8]     
    I2CWrite SDA,SCL,I2CDevice,[DC,$3F]        
    I2CWrite SDA,SCL,I2CDevice,[DC,$A4]        
    I2CWrite SDA,SCL,I2CDevice,[DC,$D3]  
    I2CWrite SDA,SCL,I2CDevice,[DC,$00] 
    I2CWrite SDA,SCL,I2CDevice,[DC,$D5]
    I2CWrite SDA,SCL,I2CDevice,[DC,$F0]
    I2CWrite SDA,SCL,I2CDevice,[DC,$D9] 
    I2CWrite SDA,SCL,I2CDevice,[DC,$22]
    I2CWrite SDA,SCL,I2CDevice,[DC,$DA]
    I2CWrite SDA,SCL,I2CDevice,[DC,$12]
    I2CWrite SDA,SCL,I2CDevice,[DC,$DB]
    I2CWrite SDA,SCL,I2CDevice,[DC,$20]
    I2CWrite SDA,SCL,I2CDevice,[DC,$8D]
    I2CWrite SDA,SCL,I2CDevice,[DC,$14]
    I2CWrite SDA,SCL,I2CDevice,[DC,$AF]          ' Display On
                  
    PAUSE 100
    
    '===============================================================================
    
    GOSUB CLEAR_LCD
    pause 5
    
    Gosub ResetTime    ' Reset Time to  0d-00:00:00.00    
    Gosub StartTimer   ' Start the Elapsed Timer
    
    '-------------------------------------------------------------------------------
    'First byte is the column number (2-129)
    'Second byte is the page number (0-7)
    'Third byte on is text (max 21 characters)
    'First byte after text must be a NULL 
    '-------------------------------------------------------------------------------
    
    arraywrite Text_Buff,[2,1,"ELAPSED TIME:",0]
    gosub Print_XY
    
    arraywrite Text_Buff,[30,6,"Test C(30);R(6)",0]
    gosub Print_XY
    
    
    Main:
    
    Pause 1    
    
    IF MinutesChanged THEN MinutesChanged = 0
    if Old_Seconds <> Seconds then
    Old_Seconds = Seconds
    
    arraywrite Text_Buff,[2,3, DEC Days,"d-",DEC2 Hours,":",DEC2 Minutes,":",DEC2 Seconds,0]
    gosub Print_XY
    ENDIF
    
    Counter = Counter + 1
    if Counter > 50 then Led = False
    if Counter > 1000 then  
    Led = True
    Counter = 0
    endif
    
    GOTO MAIN
    
    '============================== Print Lines ====================================
    
    Print_XY
    X = Text_Buff[0]                              ' Column in first position
    Y = Text_Buff[1]                              ' Page (Row) in second
    
    gosub Set_XY		                          ' set cursor position
    
    Text_String = 2			                      ' point to 1st character to print
    DO while Text_Buff[Text_String] <> 0
    letter_reg = Text_Buff[Text_String]
    gosub Find_Char
    Text_String = Text_String + 1
    loop
    return
    
    '=============================== Send data =====================================
    
    SEND_DATA:
    DC = $40
    I2CWrite SDA,SCL,I2CDevice,[DC,LCD_DATA]
    RETURN
    
    '============================== Send Command ===================================
    
    SEND_COMMAND:
    DC = $00
    I2CWrite SDA,SCL,I2CDevice,[DC,COM]
    RETURN
    
    '============================== clear lcd ======================================
    
    CLEAR_LCD:
    X = 2
    Y = 0
    LCD_DATA = $00
    
    FOR Y = 0 TO 7
    gosub SET_XY
    
    FOR I = 0 TO 131
    GOSUB SEND_DATA
    NEXT I
    
    NEXT Y
    X = 2
    Y = 0 
    gosub SET_XY                            
    RETURN 
    
    '======================= Set Page & Column position ============================
    
    SET_XY:
    
    COM = 176 + y :GOSUB SEND_COMMAND            ' PAGE (ROW) SELECTION
     
    COM = x//15 :GOSUB SEND_COMMAND              ' LOW NIBBLE COLUMN SELECTION
    
    COM = (x/15) + 16 :GOSUB SEND_COMMAND        ' HIGH NIBBLE COLUMN SELECTION
    
    RETURN
    
    '================================ Find Char ====================================
    Find_Char:
    
    	letter_temp = letter_reg - 32	' Space is now at index 0 all other characters are 32 less into index
    	letter_temp = letter_temp * 5	' Every character is made of 5 bytes
        for charset=letter_temp to letter_temp+4
    	IF letter_reg < "A" then
    	chartmp = charset - 0 	' lookup variable must be 8 bits 
        lookup chartmp,[$00,$00,$00,$00,$00,$00,$00,$5F,$00,$00,$14,$7F,$14,$7F,$14,$00,$08,$07,$03,$00,_	'sp,!,#,"
    					$24,$2A,$7F,$2A,$12,$23,$13,$08,$64,$62,$36,$49,$56,$20,$50,_	'$,%,&
    					$00,$08,$07,$03,$00,$00,$1C,$22,$41,$00,$00,$41,$22,$1C,$00,_	'',(,)
    					$2A,$1C,$7F,$1C,$2A,$08,$08,$3E,$08,$08,$00,$00,$70,$30,$00,_	'*,+,,
    					$08,$08,$08,$08,$08,$00,$00,$60,$60,$00,$20,$10,$08,$04,$02,_	'-,.,/
    					$3E,$51,$49,$45,$3E,$00,$42,$7F,$40,$00,$72,$49,$49,$49,$46,_	'0,1,2
    					$21,$41,$49,$4D,$33,$18,$14,$12,$7F,$10,$27,$45,$45,$45,$39,_	'3,4,5
    					$3C,$4A,$49,$49,$31,$41,$21,$11,$09,$07,$36,$49,$49,$49,$36,_	'6,7,8
    					$46,$49,$49,$29,$1E,$00,$00,$14,$00,$00,$00,$40,$34,$00,$00,_	'9,:,;
    					$00,$08,$14,$22,$41,$14,$14,$14,$14,$14,$00,$41,$22,$14,$08,_	'<,=,>
    					$02,$01,$59,$09,$06,$3E,$41,$5D,$59,$4E],LCD_DATA	'?,@
    	elseif  (letter_reg < "[") then 
    	chartmp = charset - 165		' subtract previous table length so "A" = zero 					
    	lookup chartmp,[$7C,$12,$11,$12,$7C,_	'A
    					$7F,$49,$49,$49,$36,$3E,$41,$41,$41,$22,$7F,$41,$41,$41,$3E,_	'B,C,D
    					$7F,$49,$49,$49,$41,$7F,$09,$09,$09,$01,$3E,$41,$41,$51,$73,_	'E,F,G
    					$7F,$08,$08,$08,$7F,$00,$41,$7F,$41,$00,$20,$40,$41,$3F,$01,_	'H,I,J
    					$7F,$08,$14,$22,$41,$7F,$40,$40,$40,$40,$7F,$02,$1C,$02,$7F,_	'K,L,M
    					$7F,$04,$08,$10,$7F,$3E,$41,$41,$41,$3E,$7F,$09,$09,$09,$06,_	'N,O,P
    					$3E,$41,$51,$21,$5E,$7F,$09,$19,$29,$46,$26,$49,$49,$49,$32,_	'Q,R,S
    					$03,$01,$7F,$01,$03,$3F,$40,$40,$40,$3F,$1F,$20,$40,$20,$1F,_	'T,U,V
    					$3F,$40,$38,$40,$3F,$63,$14,$08,$14,$63,$03,$04,$78,$04,$03,_	'W,X,Y
    					$61,$59,$49,$4D,$43],LCD_DATA	'Z
    	else  
    	chartmp = charset - 295		' subtract previous tables length so "[" = zero
    	lookup chartmp,[$00,$7F,$41,$41,$41,$02,$04,$08,$10,$20,_	'[,\
    					$00,$41,$41,$41,$7F,$04,$02,$01,$02,$04,$40,$40,$40,$40,$40,_	'],^,_
    					$00,$03,$07,$08,$00,$20,$54,$54,$38,$40,$7F,$28,$44,$44,$38,_	'`,a,b
    					$38,$44,$44,$44,$28,$38,$44,$44,$28,$7F,$38,$54,$54,$54,$18,_	'c,d,e
    					$00,$08,$7E,$09,$02,$0C,$52,$52,$4A,$3C,$7F,$08,$04,$04,$78,_	'f,g,h
    					$00,$44,$7D,$40,$00,$20,$40,$40,$3D,$00,$7F,$10,$28,$44,$00,_	'i,j,k
    					$00,$41,$7F,$40,$00,$7C,$04,$78,$04,$78,$7C,$08,$04,$04,$78,_	'l,m,n
    					$38,$44,$44,$44,$38,$7C,$18,$24,$24,$18,$18,$24,$24,$18,$7C,_	'o,p,q
    					$7C,$08,$04,$04,$08,$48,$54,$54,$54,$24,$04,$04,$3F,$44,$24,_	'r,s,t
    					$3C,$40,$40,$20,$7C,$1C,$20,$40,$20,$1C,$3C,$40,$30,$40,$3C,_	'u,v,w
    					$44,$28,$10,$28,$44,$4C,$50,$50,$50,$3C,$44,$64,$54,$4C,$44,_	'x,y,z
    					$00,$08,$36,$41,$00,$00,$00,$77,$00,$00,$00,$41,$36,$08,$00,_	'{,|,}
    					$02,$01,$02,$04,$02],LCD_DATA	'~
    	endif
        gosub SEND_DATA
        next charset
    	LCD_DATA = $00		' space between characters always $00 
        gosub SEND_DATA
    	return
    
    
    '===============================================================================
    END

Similar Threads

  1. Winstar OLED Display Problem with lcdout comands
    By bubbleless in forum mel PIC BASIC Pro
    Replies: 32
    Last Post: - 31st December 2019, 06:53
  2. Cannot drive I2C Oled :(
    By elcrcp in forum mel PIC BASIC Pro
    Replies: 21
    Last Post: - 20th August 2016, 13:19
  3. OLED Display Noise problem
    By gunayburak in forum mel PIC BASIC Pro
    Replies: 24
    Last Post: - 5th July 2016, 11:15
  4. Help With OLED Display / 128X64 SSD1306
    By Denner in forum General
    Replies: 6
    Last Post: - 25th May 2013, 16:40
  5. OLED 128x128 color display
    By Ron Marcus in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 21st May 2007, 02:45

Members who have read this thread : 3

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts