/*! \file lcdconf.h \brief Character LCD driver configuration. */
//*****************************************************************************
//
// File Name    : 'lcdconf.h'
// Title                : Character LCD driver for HD44780/SED1278 displays
//                                      (usable in mem-mapped, or I/O mode)
// Author               : Pascal Stang - Copyright (C) 2000-2002
// Created              : 11/22/2000
// Revised              : 4/30/2002
// Version              : 1.1
// Target MCU   : Atmel AVR series
// Editor Tabs  : 4
//
// This code is distributed under the GNU Public License
//              which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************

#ifndef LCDCONF_H
#define LCDCONF_H

// Define type of interface used to access the LCD
//      LCD_MEMORY_INTERFACE:
//              To use this mode you must supply the necessary hardware to connect the
//              LCD to the CPU's memory bus.  The CONTROL and DATA registers of the LCD
//              (HD44780 chip) must appear in the CPU's memory map.  This mode is faster
//              than the port interface but requires a little extra hardware to make it
//              work.  It is especially useful when your CPU is already configured to
//              use an external memory bus for other purposes (like accessing memory).
//
// LCD_PORT_INTERFACE:
//              This mode allows you to connect the control and data lines of the LCD
//              directly to the I/O port pins (no interfacing hardware is needed),
//              but it generally runs slower than the LCD_MEMORY_INTERFACE.
//              Depending on your needs, when using the LCD_PORT_INTERFACE, the LCD may
//              be accessed in 8-bit or 4-bit mode.  In 8-bit mode, one whole I/O port
//              (pins 0-7) is required for the LCD data lines, but transfers are faster.
//              In 4-bit mode, only I/O port pins 4-7 are needed for data lines, but LCD
//              access is slower.  In either mode, three additional port pins are
//              required for the LCD interface control lines (RS, R/W, and E).

// Enable one of the following interfaces to your LCD
//#define LCD_MEMORY_INTERFACE
#define LCD_PORT_INTERFACE

// Enter the parameters for your chosen interface'
// if you chose the LCD_PORT_INTERFACE:
#ifdef LCD_PORT_INTERFACE
        #ifndef LCD_CTRL_PORT
                // port and pins you will use for control lines
                #define LCD_CTRL_PORT   PORTC
                #define LCD_CTRL_DDR    DDRC
                #define LCD_CTRL_RS             2
                #define LCD_CTRL_RW             3
                #define LCD_CTRL_E              4
        #endif
        #ifndef LCD_DATA_POUT
                // port you will use for data lines
                #define LCD_DATA_POUT   PORTA
                #define LCD_DATA_PIN    PINA
                #define LCD_DATA_DDR    DDRA
                // access mode you will use (default is 8bit unless 4bit is selected)
                #define LCD_DATA_4BIT
        #endif
#endif

// if you chose the LCD_MEMORY_INTERFACE:
#ifdef LCD_MEMORY_INTERFACE
        #ifndef LCD_CTRL_ADDR
                // CPU memory address of the LCD control register
                #define LCD_CTRL_ADDR   0x1000
        #endif
        #ifndef LCD_DATA_ADDR
                // CPU memory address of the LCD data register
                #define LCD_DATA_ADDR   0x1001
        #endif
#endif


// LCD display geometry
// change these definitions to adapt settings
#define LCD_LINES                               2       // visible lines
#define LCD_LINE_LENGTH                 16      // line length (in characters)
// cursor position to DDRAM mapping
#define LCD_LINE0_DDRAMADDR             0x00
#define LCD_LINE1_DDRAMADDR             0x40
#define LCD_LINE2_DDRAMADDR             0x14
#define LCD_LINE3_DDRAMADDR             0x54

// LCD delay
// This delay affects how quickly accesses are made to the LCD controller.
// The HD44780 LCD controller requires an access time of at least 1us.
// LCD_DELAY should be scaled to take at least half that time (500us).
// Each NOP takes 1 CPU clock cycle to execute.  Thus, at 4MHz, you should
// use at least 2 NOPs, at 8MHz at least 4 NOPs, etc.
// You can also use the delay_us(xx) command for longer access times.

// LCD_DELAY is now automatically set in lcd.h,
// however, if you define it here, this definition will override the automatic setting

// use this for a fail-safe delay
//#define LCD_DELAY     delay_us(5);

#endif