The blog of a dedicated radio amateur and electronics enthusiast

"Having fun on the air and in the workshop - communicating and creating"
Showing posts with label OLED. Show all posts
Showing posts with label OLED. Show all posts

20 January 2020

Upgrading my design tools for PIC projects

2020 has just begun, and here is my new year's  resolution, which I have already completed !
For my embedded control projects it was time to standardise on PIC microcontrollers, ( e.g., the PIC16F188** family ), belonging to a newer generation than some of those I had previously been using. PIC development in recent years has now led to devices typically having larger memory, supporting higher clock speeds, with more peripherals including core independent peripherals, and new features, such as peripheral pin select, device information area, configurable logic cell, integrated temperature sensors to name a few.

The new development platform for my embedded control projects
As result I have had to upgrade my hardware tools as well for compatibility; the most significant change being the MicroChip "Snap" programmer/debugger, to replace my obsolete ICD2, and a different prototyping board, which I could call MyDev3, ( see post dated 2 November 2010 ). The MCU featured in the image is a 40 pin 8-bit device, MicroChip PIC part PIC16F18875/P. ( Click on image to zoom ).
All is working fine. The PIC was a new unused blank device and successfully programed with my TEMPSENS-OLED firmware. ( See post dated 6 October 2019 ).
MCU = MicroController Unit, PIC = Programmable Integrated Circuit from MicroChip Inc.


  

06 October 2019

Digital Temperature Sensor with OLED Display

Temperature Sensor - MCU board & OLED display
Serial terminal window showing count & raw adc samples
I was working on this project in April but forgot to post it until now when I was thinking about a future project using this microcontroller unit ( MCU ) board and OLED display; but more about that later.
This digital "thermometer" uses the temperature sensor and 2 Analogue to Digital Converter ( ADC ) channels, integrated on the MCU board. I am using one ADC in averaging mode for temperature. Raw temperature data are sampled every 1.875s and the parsed result of the average of a count of 8 consecutive samples is displayed. Voltage is sampled by the second ADC in basic mode every 1.875s and displayed. This is not the voltage of the batteries shown in the image but actually the supply voltage to the MCU and OLED display. I also send the count number and raw ADC measurements using a serial interface to a pc running a terminal program.
The display shows what the device is, the version of the TEMPSENS-OLED firmware installed, temperature ( in degrees C & F ) with resolution 0.01 degrees, and "battery" voltage with resolution 0.001V. Of course I can change any of the above settings and parameters in my firmware.
In my recent projects I have only learnt the basics, ( such as displaying plain text ), of using an OLED display, and not attempted any scrolling, graphics or animation.
For the next project I am considering using the MCU and OLED display with a GPS receiver module. These are available on a well known online shopping site for as little as 4.26GBP including antenna. I shall also be buying a slightly larger 64 x 128px two colour OLED display to show altitude and position; the latter with possibly 1cm accuracy !
( Click on images to zoom in ).

07 April 2019

More progress with the I2C OLED

OLED displaying real time data from MCU ADC
0.96" 32 x 128 pixel two colour OLED with I2C interface
I think the OLED is very cool. Since my last post I have been doing more with it than just turning it on or off. It quickly became obvious that mine has a 32x128px display area and not as advertised by the seller; however not really a limitation for my present purposes.
Having removed the Si5351 breakout board ( refer to previous post ) incorporating the I2C bus pull-up resistors on the SCL and SDA lines, I then had to provide these resistors separately ( 10K Ohm each ) for the OLED.
In my firmware, written in 'C' language, there is a look-up table of characters I created, with font based on a 8x8 pixel grid which gives exactly 16 characters per 128 pixel row. I have so far included only capital letters, 0 to 9, =, -, +, space and a few common punctuation marks; 41 in total.
It is essential to have the documentation for the Solomon Systech SSD1306 OLED driver. This was located and downloaded.
As in my post of 17 February 2019, the 10 bit analogue to digital converter ( ADC ) on my micro-controller unit ( MCU ) development board was used to sample the voltage on the slider of a potentiometer ( POT ) every 0.5s, and the result sent over I2C bus to be displayed on the OLED.
I now have the basics in place and ready to adapt to a future project which uses an OLED.
I would also like to try a white on black monochrome OLED which I might find easier to read.
( Note : OLED = Organic LED display ). 
     

27 March 2019

Demonstrating I2C serial communications bus

Continuing the theme on serial interfaces from the last post, Inter Integrated Circuit, ( I2C ), is another type of serial communications interface, also called '2-wire bus', and is a very common peripheral interface. There is a master device, slave device(s), addressing and also a clock, making communication synchronous. Two connections are required; serial data ( SDA ) and serial clock ( SCL ).
In this post I demonstrate using I2C with a Silicon Labs Si5351 frequency synthesiser chip and a miniature 0.96" 128/64px two colour OLED display. Both have I2C interfaces but different addresses, hex60 and hex3C respectively, and so can be connected on the same bus. 

Master reads 1 byte from slave ( SCL = clock, SDA = data )
 The I2C protocol is more complex than that for RS232/485 in the previous post. The image above shows that a 4 byte transaction is required in order for the master to read in one byte of data from a slave, ( in this case Si5351 ). Compare to RS485 in the previous post.
The master is my usual micro-controller unit ( MCU ) development board which does have embedded I2C modules. I programmed it with my own firmware to enable and setup I2C to communicate with the Si5351 and OLED.
Top MCU, bottom L OLED, bottom R Si5351 board
Using I2C, I tested the OLED by turning the display on/off and switching between normal and reverse video. I configured the Si5351 on the purple coloured break-out board to generate two square-wave output signals, on my favourite frequency 137.7KHz in the 2190m amateur radio longwave band. See image immediately below.

Si5351 generates two separate output signals simultaneously