I faced a problem here. I'm using Humidity sensor
http://www.cytron.com.my/viewProduct.php?pcode=SN-HMD&name=Humidity%20Sensor and LCD(2x16) interface with Atmega32 microcontroller.
Unfortunately, my LCD doesn't display anything on screen. Besides, at same time I've been tested using LEDs, but it works!
I attached my coding, hope anyone can advice and help me.
- CODE: SELECT_ALL_CODE
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#define LCD_CPRT PORTC
#define LCD_CDDR DDRC
#define LCD_APRT PORTA
#define LCD_ADDR DDRA
#define LCD_RS 5
#define LCD_RW 6
#define LCD_EN 7
void delay_us(unsigned int d)
{
_delay_us(d);
}
void delay_ms(unsigned int d)
{
_delay_ms(d);
}
void E_Pulse(void)
{
LCD_APRT |= (1<<LCD_EN); //Enable=1
delay_us(100);
LCD_APRT &= ~(1<<LCD_EN); //Enable=0
delay_us(100);
}
void lcdCommand(unsigned char cmnd)
{
LCD_CPRT = cmnd;
LCD_APRT &= ~(1<<LCD_RS); //RS=0
LCD_APRT &= ~(1<<LCD_RW); //RW=0
E_Pulse();
}
void lcdData(unsigned char data)
{
LCD_CPRT = data;
LCD_APRT |= (1<LCD_RS); //RS=1
LCD_APRT &= ~(1<<LCD_RW); //RW=0
E_Pulse();
}
void lcd_init()
{
LCD_CDDR = 0xFF;
LCD_ADDR = LCD_ADDR | 0b11100000; //PA5-PA7 as output
LCD_APRT &= ~(1<<LCD_EN);
delay_us(2000);
lcdCommand(0x38);
lcdCommand(0x0E);
lcdCommand(0x01);
delay_us(2000);
lcdCommand(0x06);
}
void lcd_gotoxy(unsigned char x, unsigned char y)
{
unsigned char firstCharAdr[] = {0x80,0xC0,0x94,0xD4};
lcdCommand(firstCharAdr[y-1] + x - 1);
delay_us(100);
}
void lcd_print(char * str)
{
unsigned char i=0;
while(str[i]!=0)
{
lcdData(str[i]);
i++;
}
}
int main(void)
{
lcd_init();
delay_us(100);
DDRA &= 0b11110000;
DDRD = 0xFF; //set PORTD as output for LEDs blinking
delay_us(100);
ADCSRA = 0x87;
ADMUX = 0x61;
while(1)
{
ADCSRA |= (1<<ADSC); //Start conversion
while ((ADCSRA & (1<<ADIF)) == 0);
PORTD = ADCH; //Output of sensor display on LEDs
char string[16];
itoa(ADCH, string, 10); //Convert 16 characters to decimal value
delay_us(10);
lcd_gotoxy(1,1); //Location of LCD
lcd_print(string + 0x30); //Add ASCII code of '0'
delay_ms(1000);
}
return 0;
}