728x90

728x90

Showing posts with label MikroC. Show all posts
Showing posts with label MikroC. Show all posts

Saturday, June 13, 2020

AT89C52 interfaces to a one wire DS18B20 digital thermometer

DS18X20 One-Wire Digital Temperature Sensor

DS1820 series is series of digital temperature sensor developed by Maxim Integrated. It uses one wire protocol. The master MCU accesses only one digital pin working in both direction. The slave ds18b20 has only three pins, two pins are supply voltage and one other is the data pin.

AT89C52 interfaces to a one wire DS18B20 digital thermometer


AT89C52 interfaces to a one wire DS18B20 digital thermometer
Two ds18b20 package I possess. 


AT89C52 interfaces to a one wire DS18B20 digital thermometer
DS18B20 TO-92 package. VDD and GND
are supply voltage. DQ is digital data pin.

The DS18B20 is one of its family. It could sample the temperature data between -55 to +125 degree Celsius.
The physical packages are available in TO-92, SMD and a probe-type. 
The temperature data is made of two 8-bit wide register giving a 16-bit temperature data. But it contain five signed bits. Temperature data has a 7-bit decimal and 4-bit fraction numbers.

AT89C52 interfaces to a one wire DS18B20 digital thermometer
S is signed indication

For full technical specification I can not show the full detail here. We can see the full specification from the datasheet. For programming example, we can get it from the application note done by the manufacturer. 

We can use multiple one wire devices on a single pin. Each device is identified by its 64-bit ROM ID.
Typically we need a pull-up resistor with a resistance between 4.7 k to 10 k Ohm depend on the data rate.

Programming in MikroC

MikroC is also available for 8051 devices family. It contains an extensive software and hardware libraries.
One wire library supports both ds18b20 and ds18s20. In MikroC it's called oneWire library. It contains some functions:
  • Ow_Reset
  • Ow_Read
  • Ow_Write
We need these three functions to access to the one wire devices.
In this example, I use AT89C52 to read the temperature data from a ds18b20 and display it to the multiplexed SSD.

AT89C52 interfaces to a one wire DS18B20 digital thermometer
AT89C52 CPU clocks at 24 MHz. Display is connected to P2 and P3. A single ds18b20
is connected to P1.2.

MikroC source code:


AT89C52 interfaces to a one wire DS18B20 digital thermometer
A negative temperature reading of -12.8 degree Celsius.


Click here to download this example.

Tuesday, June 9, 2020

AT89C52 interfaces to a 16x2 character LCD

Character LCD With HD44780 LCD Controller

A character LCD has been a popular display device for many decades. Currently, there are a dozen of modern display devices in the market. Most display device have a built-in LCD controller and driver. The Hitachi HD44780 is an industrial standard character LCD controller in use for many decades. However there are many alternative controller IC compatible with this device today.

AT89C52 interfaces to a 16x2 character LCD
A sample of 16x2 LCD with HD44780 compatible controller.
AT89C52 interfaces to a 16x2 character LCD
Pin diagram

With a high level programming language, programming this device could make from scratch. MikroC is popular C compiler targeting many different microcontrollers. It has a lot of built-in libraries comes with the compiler. Libstock is a supporting website contain many shared libraries made by many developers.

In this example, I use AT89C52 microcontroller from Atmel. It's a non-ISP flash microcontroller. But we can test the program of this device in simulator.

For this LCD module, there are 16 pins connection including the back LED. VSS and VDD are supply voltage pins, typically 5 V DC. RS (register select) pin use for selecting between LCD command and display data register. RW (read/write) use for reading and writing between the LCD and the MCU. Typically it's wired to ground because we just only write to LCD for displaying texts. E (enable) used for latching the 8-bit data to the LCD controller. A and K are back LED pins.

We don't need to explain more about technical details because we gonna use the high level programming language with a ready-to-use LCD library.

MikroC LCD Library For HD44780

In MikroC there are some related LCD function we gonna use here.
  1. Lcd_Init() this function initialize the LCD operation with 4-bit mode
  2. Lcd_Cmd() this function write the command to LCD such as clearing the display, moving cursor and so on.
  3. Lcd_Out() write the string of characters to the LCD at any position.
Before we can use these functions, the LCD pin connection declaration must be done first. For more details, please see the library function help file comes with the compiler.

AT89C52 interfaces to a 16x2 character LCD
AT89C52 clocks at 24 MHz. LCD connects to P3 using 4-bit data mode.

MikroC source code.

/*Select the control pins*/
sbit LCD_RS at P3_0_bit;
sbit LCD_EN at P3_1_bit;
/*Select the 4-bit data pins*/
sbit LCD_D4 at P3_4_bit;
sbit LCD_D5 at P3_5_bit;
sbit LCD_D6 at P3_6_bit;
sbit LCD_D7 at P3_7_bit;
void main(){
  long seconds=0;
  
  /*LCD inititializing*/
  Lcd_Init();
  /*Cleaning up display data*/
  Lcd_Cmd(_LCD_CLEAR);
  /*Turning Off The Cursor*/
  Lcd_Cmd(_LCD_CURSOR_OFF);
  /*Starting the texts*/
  Lcd_Out(1,3,"HELLO AT89C52");
  Lcd_Out(2,2,"MikroC For 8051");
  Delay_ms(2000);
  /*Erasing all Texts*/
  Lcd_Cmd(_LCD_CLEAR);
  while(1);
}

AT89C52 interfaces to a 16x2 character LCD
A running program shows a displaying texts before the MCU clear them.

Click here to download source file of this example.

We can use SN74HC595N shift registers chip to drive this character LCD in 4-bit mode. This chip converts from serial data that use SPI interface from microcontroller to parallel output. Parallel output data will drive the character LCD. So microcontroller uses only 3 pins to send serial data to serial character LCD module.

320x50

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (57) AVR (58) CCS PICC (28) DAC (1) DHT11 (2) Display (106) Distance Sensor (3) DS18B20 (3) dsPIC (3) dsPIC30F1010 (3) dsPIC30F2010 (1) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (68) Interrupt (19) Keil (5) Keypad (10) LCD (48) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (73) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (10) PCD8544 (3) PCF8574 (5) PIC (108) PIC12F (3) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (12) PICKit2 (1) PWM (11) RTC (9) Sensor (11) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (96)

tyro-728x90