Another test of the LCD HX8347A library with DUE. This time using stimmer's VGA approach (Thank you stimmer!). Even though the LCD can handle 24-bit RGB(888), I decided to keep stimmer 8-bit colour (RRRGGGBB).
http://forum.arduino.cc/index.php?topic=130742.0
Refreshing time: 50 secs.
The sketch and a picture.
// Arduino Due - LCD HX8347A VGA sample 1
// Brief LCD controller HX8347A TFT example for Arduino Due
// ported from Atmel ASF SAM3X-EK Display Controller Example.
// Draw a fractal pattern on the HX8347A LCD controller.
// By Wilfredo Molina 2014 (fractal code by stimmer)
#include "hx8347a.h"
#include "smc.h"
#define CONF_BOARD_HX8347A_LCD_CS 2
struct opt_t display_opt;
HX8347A HX8347A;
void setup() {
Serial.begin(115200);
}
#include <complex>
using namespace std;
const byte cmap[]={0b00000000,0b11100000,0b11100100,0b11101000,0b11101100,0b11110000,0b11110100,0b11111000,0b11111100,
0b11011100,0b10111100,0b10011100,0b01111100,0b01011100,0b00111100,0b00011100,0b00011101,0b00011110,
0b00011111,0b00011011,0b00010111,0b00010011,0b00001111,0b00001011,0b00000111,0b00000011,0b00100011,
0b01000011,0b01100011,0b10000011,0b10100011,0b11000011,0b11100011,0b11100010,0b11100001,0b11100000,0b00000000};
void loop()
{
pmc_enable_periph_clk(ID_SMC);
smc_set_setup_timing(SMC, CONF_BOARD_HX8347A_LCD_CS, SMC_SETUP_NWE_SETUP(1)
| SMC_SETUP_NCS_WR_SETUP(1)
| SMC_SETUP_NRD_SETUP(9)
| SMC_SETUP_NCS_RD_SETUP(9));
smc_set_pulse_timing(SMC, CONF_BOARD_HX8347A_LCD_CS, SMC_PULSE_NWE_PULSE(4)
| SMC_PULSE_NCS_WR_PULSE(4)
| SMC_PULSE_NRD_PULSE(36)
| SMC_PULSE_NCS_RD_PULSE(36));
smc_set_cycle_timing(SMC, CONF_BOARD_HX8347A_LCD_CS, SMC_CYCLE_NWE_CYCLE(10)
| SMC_CYCLE_NRD_CYCLE(45));
smc_set_mode(SMC, CONF_BOARD_HX8347A_LCD_CS, SMC_MODE_READ_MODE
| SMC_MODE_WRITE_MODE | SMC_MODE_DBW_BIT_16);
display_opt.ul_width = HX8347A_LCD_WIDTH;
display_opt.ul_height = HX8347A_LCD_HEIGHT;
display_opt.foreground_color = COLOR_BLACK;
display_opt.background_color = COLOR_WHITE;
if(HX8347A.init(&display_opt)){
puts("Read HX8347A chip ID error, please check the configuration.\r");
}
HX8347A.set_foreground_color(COLOR_WHITE);
HX8347A.draw_filled_rectangle(0, 0, HX8347A_LCD_WIDTH - 1, HX8347A_LCD_HEIGHT - 1);
HX8347A.display_on();
HX8347A.set_foreground_color(COLOR_BLACK);
for(int i=0;i<320;i++){
for(int j=0;j<240;j++){
complex<float> z(0,0),c((i+180.0)/1280.0,(j+640.0)/1280.0);
int n;
for(n=1;n<sizeof(cmap);n++){
z=z*z+c;
if(norm(z)>4.0)break;
}
HX8347A.set_foreground_color(cmap[sizeof(cmap)-n]);
HX8347A.draw_pixel(j, i);
}
}
}
p