Tengo un LCD LCM1602C que obtuve con el Arduino Starter Kit. Quiero conectarlo con ATmega16. Pero no importa lo que haga, el LCD no imprime nada. Solo para verificar si el LCD está funcionando, lo conecté Arduino y el proyecto de ejemplo subido y parece funcionar bien. Como el código no funcionaba, también intenté ejecutarlo en Proteus y funcionó perfectamente solo una diferencia y es que LCM1602C no estaba disponible, así que usé LM016L LCD, ya que ambos tienen Configuración de pin similar. El código que estoy intentando ejecutar en ATmega 16 es el siguiente:
#include <avr/io.h>
#include <util/delay.h>
#define RS 6
#define E 7
void send_a_command (unsigned char command);
void send_a_character(unsigned char character);
int main(void)
{
_delay_ms(5000);
DDRC = 0xFF;
DDRD = 0xFF;
_delay_ms(50);
send_a_command(0x01);// sending all clear command
send_a_command(0x38);// 16*2 line LCD
send_a_command(0x0F);// screen and cursor blink
send_a_character (0x44);
send_a_character (0x44);
send_a_character (0x44);
send_a_character (0x44);
send_a_character (0x44);
send_a_character (0x44);
send_a_character (0x44);
send_a_character (0x44);
while(1);
}
void send_a_command (unsigned char command)
{
PORTC=command;
PORTD&= ~(1<<RS);
PORTD|= (1<<E);
_delay_ms(50);
PORTD&= ~(1<<E);
PORTC = 0;
}
void send_a_character (unsigned char character)
{
PORTC=character;
PORTD|= (1<<RS);
PORTD|= (1<<E);
_delay_ms(50);
PORTD&= ~(1<<E);
PORTC =0;
}
Imagen de la simulación de Proteus:
Nota: se dio el retraso inicial de 5000 ms porque pensé que a la LCD le podrían faltar las instrucciones de inicio justo después de encenderla. El código no se ejecuta incluso después de eliminar esa declaración.
Intenté buscar la hoja de datos LCM1602C pero no tuve suerte en encontrar una. Entonces, ¿hay algún otro conjunto de instrucciones de comando para LCM1602C?