?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{FILE START}

library

?curdirlinks? - Rev 6

?prevdifflink? - Blame - ?getfile?

/*! \file spyglass.c \brief Spyglass Control Panel UI Board Driver. */
//*****************************************************************************
//
// File Name    : 'spyglass.c'
// Title                : Spyglass Control Panel UI Board Driver
// Author               : Pascal Stang - Copyright (C) 2005
// Created              : 7/20/2005
// Revised              : 7/23/2005
// Version              : 0.9
// 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
//
//*****************************************************************************


#include "global.h"
#include "rprintf.h"
#include "timer.h"
#include "i2c.h"
#include "spyglass.h"

#include "lcd.h"

u08 PcfCtrlData;

u08 pcf8574Write(u08 nodeAddr, u08 data)
{
        // write data
        return i2cMasterSendNI(PCF8574_I2C_BASE_ADDR+(nodeAddr<<1), 1, &data);
}

u08 pcf8574Read(u08 nodeAddr)
{
        u08 data;
        i2cMasterReceiveNI(PCF8574_I2C_BASE_ADDR+(nodeAddr<<1), 1, &data);
        return data;
}

void spyglassInit(void)
{
        i2cInit();
        i2cSetBitrate(100);
        PcfCtrlData = (SPYGLASS_LED0 | SPYGLASS_LED1 | SPYGLASS_BEEPER);
        spyglassSetLeds(0);
        spyglassSetBeeper(0);
}

u08 spyglassGetPushbuttons(void)
{
        return ~pcf8574Read(PCF_NODE_BUTTONS);
}

void spyglassSetLeds(u08 leds)
{
        PcfCtrlData = (PcfCtrlData|0x03) & ~(leds&0x03);
        pcf8574Write(PCF_NODE_CONTROL, PcfCtrlData);
}

void spyglassSetBeeper(u08 state)
{
        if(state)
                PcfCtrlData &=~SPYGLASS_BEEPER;         // beeper on
        else
                PcfCtrlData |= SPYGLASS_BEEPER;         // beeper off
        pcf8574Write(PCF_NODE_CONTROL, PcfCtrlData);
}

u08 spyglassSetLcdContrast(u08 contrast)
{
        u08 data[2];
        data[0] = 0;
        data[1] = contrast;
        return i2cMasterSendNI(MAX517_I2C_BASE_ADDR, 2, data);
}

void spyglassLcdWrite(u08 rs, u08 data)
{
        // prepare LCD control lines
        PcfCtrlData &= ~(SPYGLASS_LCD_RW | SPYGLASS_LCD_RS | SPYGLASS_LCD_E);
        if(rs)
                PcfCtrlData |= SPYGLASS_LCD_RS;
        // set LCD control lines
        pcf8574Write(PCF_NODE_CONTROL, PcfCtrlData);
        // set data lines
        pcf8574Write(PCF_NODE_LCD_DATA, data);
        // clock E line
        pcf8574Write(PCF_NODE_CONTROL, PcfCtrlData|SPYGLASS_LCD_E);
        pcf8574Write(PCF_NODE_CONTROL, PcfCtrlData);
}

void spyglassLcdWriteChar(u08 c)
{
        spyglassLcdWrite(1,c);
}

void spyglassLcdInit(void)
{
        // LCD function set
        spyglassLcdWrite(0,LCD_FUNCTION_DEFAULT);
        // clear LCD
        spyglassLcdWrite(0,1<<LCD_CLR);
        delay(60000);   // wait 60ms
        // set entry mode
        spyglassLcdWrite(0,1<<LCD_ENTRY_MODE | 1<<LCD_ENTRY_INC);
        // set display to on
        spyglassLcdWrite(0,1<<LCD_ON_CTRL | 1<<LCD_ON_DISPLAY );
        // move cursor to home
        spyglassLcdWrite(0,1<<LCD_HOME);
        // set data address to 0
        spyglassLcdWrite(0,1<<LCD_DDRAM | 0x00);

        // set contrast
        spyglassSetLcdContrast(20);
}

void spyglassLcdHome(void)
{
        // move cursor to home
        spyglassLcdWrite(0,1<<LCD_HOME);
}

void spyglassLcdClear(void)
{
        // clear LCD
        spyglassLcdWrite(0,1<<LCD_CLR);
}

void spyglassLcdGotoXY(u08 x, u08 y)
{
        register u08 DDRAMAddr;

        // remap lines into proper order
        switch(y)
        {
        case 0: DDRAMAddr = LCD_LINE0_DDRAMADDR+x; break;
        case 1: DDRAMAddr = LCD_LINE1_DDRAMADDR+x; break;
        case 2: DDRAMAddr = LCD_LINE2_DDRAMADDR+x; break;
        case 3: DDRAMAddr = LCD_LINE3_DDRAMADDR+x; break;
        default: DDRAMAddr = LCD_LINE0_DDRAMADDR+x;
        }

        // set data address
        spyglassLcdWrite(0,1<<LCD_DDRAM | DDRAMAddr);
}
{FILE END}
{FOOTER START}

Powered by WebSVN v2.8.3