Witam
Mam taki problem, a mianowicie już nie mam pojęcia co źle robię. W środowisku Proteus chcę zainicjalizować wyświetlacz i wypisać nań jakiś znak. Niestety nic się nie dzieje. Może to przez błędne przeczytanie datasheet, ale wszędzie gdzie nie patrzyłem, jest, że dane są zapisywane na opadającym zboczu E oraz, że instrukcje sa dla RS = 0 a dane do wyświetlenia dla RS = 1;
Wyświetlacz: HD44780
Napisałem program ,zbudowałem schemat i co? i nic;/ Więc proszę kolegów o pomoc, gdyż ja już straciłem cierpliwość
8-bitowy tryb pracy - chyba z tym jest ten problem, gdyż wszędzie wszyscy robią na 4 i może przez nieuwagę o czymś zapomniałem... A, że nie lubię zmieniać założeń "bo coś nie działa" to chciałbym rozwiązać ten problem w istniejącej wersji
.
plik lcd.h:
main:
na razie w mainie nic nie ma, a i to będzie w przyszłości przesyłany znak. Na razie na sztywno chcę wypisać jakikolwiek znak...
schemat w proteusie:
[img]
http://img5.imageshack.us/my.php?image=proteusjpg.jpg&via=yfrog[/img]
Z góry dziękuję, za wszystkie odpowiedzi.
Pozdrawiam
Damian
Mam taki problem, a mianowicie już nie mam pojęcia co źle robię. W środowisku Proteus chcę zainicjalizować wyświetlacz i wypisać nań jakiś znak. Niestety nic się nie dzieje. Może to przez błędne przeczytanie datasheet, ale wszędzie gdzie nie patrzyłem, jest, że dane są zapisywane na opadającym zboczu E oraz, że instrukcje sa dla RS = 0 a dane do wyświetlenia dla RS = 1;
Wyświetlacz: HD44780
Napisałem program ,zbudowałem schemat i co? i nic;/ Więc proszę kolegów o pomoc, gdyż ja już straciłem cierpliwość
8-bitowy tryb pracy - chyba z tym jest ten problem, gdyż wszędzie wszyscy robią na 4 i może przez nieuwagę o czymś zapomniałem... A, że nie lubię zmieniać założeń "bo coś nie działa" to chciałbym rozwiązać ten problem w istniejącej wersji
plik lcd.h:
#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
void init()
{
/*Ports: */
#define LCD_Data_ADD DDRC
#define LCD_CTR_ADD DDRD
#define LCD_Data_PORT PORTC
#define LCD_CTR_PORT PORTD
/*Adresses: */
#define CLEAR 0x01;_delay_us(80)
#define RETURN 0x02;_delay_us(40)
#define MODE 0x06;_delay_us(40)
#define DISP_on 0x0C;_delay_us(40)
#define FUN_8_Bit 0x38;_delay_us(40)
#define DDRAM 0x00;_delay_us(40)
#define WRITE_CTR_up 0x03;_de;ay_us(40)
#define WRITE_CTR_down 0x01;_delay_us(40)
#define RS_SET LCD_CTR_PORT |= _BV(0)
#define RS_CLR LCD_CTR_PORT &= ~_BV(0)
#define E_SET LCD_CTR_PORT |= _BV(1)
#define E_CLR LCD_CTR_PORT &= ~_BV(1)
_delay_ms(25); //rozruch
LCD_Data_ADD = 0xFF; //wszystkie porty na out
LCD_CTR_ADD = 0x0F; //pół na in i pół na out
//inicjalizacja:
RS_CLR;
E_SET;
LCD_Data_PORT = CLEAR;
E_CLR;
E_SET;
LCD_Data_PORT = RETURN;
E_CLR;
E_SET;
LCD_Data_PORT = MODE;
E_CLR;
E_SET;
LCD_Data_PORT = DISP_on;
E_CLR;
E_SET;
LCD_Data_PORT = FUN_8_Bit;
E_CLR;
E_SET;
LCD_Data_PORT = DDRAM;
E_CLR;
}
void string(const unsigned char zn)
{
RS_SET;
E_SET;
LCD_Data_PORT = 0x50;
E_CLR;
_delay_us(100);
}main:
#include "lcd.h"
main()
{
unsigned char i;
init();
string(i);
}na razie w mainie nic nie ma, a i to będzie w przyszłości przesyłany znak. Na razie na sztywno chcę wypisać jakikolwiek znak...
schemat w proteusie:
[img]
http://img5.imageshack.us/my.php?image=proteusjpg.jpg&via=yfrog[/img]
Z góry dziękuję, za wszystkie odpowiedzi.
Pozdrawiam
Damian