MI problema es "sencillo" quiero poder programar la pantalla lcd desde microblaze,para el cual he creado el hardware en vivado y compilado. Lo he abierto con el xilinx sdk y he comenzado a realizar un programa en C. He estado leyendo el datasheet de la pantalla que usa el microcontrolador ILI9486. En el apartado "7.3.3.2.1.2." del datasheet muestra un ejemplo de conjuntos de palabras que envías con los 8 pines que son la comunicación en paralelo y para la comunicación y no consigo que reaccione ante nada. He comprobado con un osciloscopio las señales de salida de la fpga y salen las señales correctas.
Por lo tanto mi duda es un poco de luz con respecto al tema o en su defecto, como poder adaptar las librerías de arduino a microblaze para poder usarlo de manera más sencilla.
Este es el código que estoy usando para dicha palabra de estado que quiero enviar:
Código: Seleccionar todo
/*
* Send_test.c
*
* Created on: 1 jun. 2019
* Author: Edu
*/
#include "xparameters.h"
#include "xgpio.h"
#include "xil_printf.h"
#include <stdio.h>
#include "microblaze_sleep.h"
/* Pines de Control Sobre el LCD
#define LCD_RST 0x12 //18
#define LCD_CS 0x11 //17
#define LCD_RS 0x10 //16
#define LCD_WR 0x0F //15
#define LCD_RD 0x0E
/*Pines D para el BUS de datos y parámetros que van desde el 7 al 0
#define LCD_D7 0x07
#define LCD_D6 0x06
#define LCD_D5 0x05
#define LCD_D4 0x04
#define LCD_D3 0x03
#define LCD_D2 0x02
#define LCD_D1 0x09
#define LCD_D0 0x08
/*Pines de control sobre protocolo SPI para tarjeta SD
#define SD_SCK 0x0D
#define SD_MOSI 0x0C
#define SD_MISO 0x0B
#define SD_SS 0X0A
#define Screen_On
#define Column_Strt
#define Column_End
#define Page_Strt
#define Page_End
*/
// Rst CS RS RD WR
#define Screen_Wr_On 0x13 // 1 0 0 1 1
#define Screen_Wr_Off 0x12 // 1 0 0 1 0
#define Screen_Cmd_Data 0x04 // 0 0 1 0 0
#define Data_Identification 0x05
#define ECC 0x2C
#define Screen_Off 0x28
#define Screen_On 0x29
#define Sleep_In 0x10
#define Sleep_Out 0x11
#define Colum_Cmd 0x2A //479
#define Colum_IniMsb 0x00
#define Colum_IniLsb 0x00
#define Colum_EndMsb 0x01
#define Colum_EndLsb 0xDF
#define Page_Cmd 0x2B //319
#define Page_IniMsb 0x00
#define Page_IniLsb 0x00
#define Page_EndMsb 0x00 //0x01
#define Page_EndLsb 0x0F //0x3F
#define Memory_Writ 0x2C
#define Memory_Read 0x2E
#define azul 0x00
//Direccionamiento a dispositivo
#define GPIO_DEVICE XPAR_AXI_GPIO_0_DEVICE_ID
#define Param_Data 1
#define Control 2
int Status;
XGpio GpioOutput;
void WriteFunction(int Param1o0);
void CommandFunction(int byte,int Param1o0);
void WriteFunction(int Param1o0){
if (Param1o0 == 1){
XGpio_DiscreteWrite(&GpioOutput,Control,Screen_Wr_On+Screen_Cmd_Data);
usleep_MB(50);
XGpio_DiscreteWrite(&GpioOutput,Control,Screen_Wr_Off+Screen_Cmd_Data);
usleep_MB(50);
XGpio_DiscreteWrite(&GpioOutput,Control,Screen_Wr_On+Screen_Cmd_Data);
}
else{
XGpio_DiscreteWrite(&GpioOutput,Control,Screen_Wr_On);
usleep_MB(50);
XGpio_DiscreteWrite(&GpioOutput,Control,Screen_Wr_Off);
usleep_MB(50);
XGpio_DiscreteWrite(&GpioOutput,Control,Screen_Wr_On);
}
}
void CommandFunction(int Hexa,int Param1o0){
XGpio_DiscreteWrite(&GpioOutput,Param_Data,Hexa);
usleep_MB(50);
WriteFunction(Param1o0);
}
main(){
Status = XGpio_Initialize(&GpioOutput,GPIO_DEVICE);
if(Status != XST_SUCCESS){
xil_printf("\n El inicio ha sido fallido \n\r");
return XST_FAILURE;
}
XGpio_SetDataDirection(&GpioOutput,Control,0x00000);
XGpio_SetDataDirection(&GpioOutput,Param_Data,0x00000000);
CommandFunction(Data_Identification,0);
CommandFunction(Screen_Off,0);
CommandFunction(azul,0);
CommandFunction(ECC,0);
}