Esempio n. 1
0
void hd44780_init(void)
{

    /* init io pins */
    CTRL_OUTPUT();
    PIN_CLEAR(HD44780_RS);
    PIN_CLEAR(HD44780_EN);
#ifdef HAVE_HD44780_RW
    PIN_CLEAR(HD44780_RW);
#endif
    PIN_CLEAR(HD44780_D4);
    PIN_CLEAR(HD44780_D5);
    PIN_CLEAR(HD44780_D6);
    PIN_CLEAR(HD44780_D7);
    DATA_OUTPUT();

    _delay_ms(40);
    PIN_SET(HD44780_D4);
    PIN_SET(HD44780_D5);
    clock_write();

    _delay_ms(4);
    clock_write();

    _delay_ms(1);
    clock_write();

    /* init done */
    _delay_ms(1);
    PIN_CLEAR(HD44780_D4);
    clock_write();
    _delay_ms(1);

    /* configure for 4 bit, 2 lines, 5x9 font (datasheet, page 24) */
    output_byte(0, CMD_FUNCTIONSET(0, 1, 0));

    /* turn on display, cursor and blinking */
    hd44780_config(0,0);

    /* clear display */
    hd44780_clear();

    /* set shift and increment */
    output_byte(0, CMD_ENTRY_MODE(1, 0));

    /* set ddram address */
    output_byte(0, CMD_SETDRAMADR(0));

    /* open file descriptor */
    lcd = fdevopen(hd44780_put, NULL);
    
    /* set current virtual postion */
    current_pos = 0;
}
Esempio n. 2
0
void noinline
output_nibble(uint8_t rs, uint8_t nibble, uint8_t en)
{
  /* compute data bits */
  lcd_data = 0;
  if (nibble & _BV(0))
    lcd_data |= _BV(HD44780_PCF8574x_DB4);
  if (nibble & _BV(1))
    lcd_data |= _BV(HD44780_PCF8574x_DB5);
  if (nibble & _BV(2))
    lcd_data |= _BV(HD44780_PCF8574x_DB6);
  if (nibble & _BV(3))
    lcd_data |= _BV(HD44780_PCF8574x_DB7);

  /* Wenn rs==1, dann RS setzen */
  if (rs)
    lcd_data |= _BV(HD44780_PCF8574x_RS);

  /* backlight status falls vorhanden uebernehmen */
  if (back_light)
    lcd_data |= _BV(HD44780_PCF8574x_BL);
  else
    lcd_data &= ~(_BV(HD44780_PCF8574x_BL));

  /* toggle EN, daten uebertragen */
  clock_write(en);
}
Esempio n. 3
0
void noinline output_nibble(uint8_t rs, uint8_t nibble, uint8_t en)
{
/* switch to write operation and set rs */
#ifdef HAVE_HD44780_RW
    PIN_CLEAR(HD44780_RW);
#endif
    PIN_CLEAR(HD44780_RS);
    if (rs)
        PIN_SET(HD44780_RS);

    /* compute data bits */
    PIN_CLEAR(HD44780_D4);
    PIN_CLEAR(HD44780_D5);
    PIN_CLEAR(HD44780_D6);
    PIN_CLEAR(HD44780_D7);
    if (nibble & _BV(0))
        PIN_SET(HD44780_D4);
    if (nibble & _BV(1))
        PIN_SET(HD44780_D5);
    if (nibble & _BV(2))
        PIN_SET(HD44780_D6);
    if (nibble & _BV(3))
        PIN_SET(HD44780_D7);

    /* set bits in mask, and delete bits not in mask */
    DATA_OUTPUT();

    /* toggle EN */
    clock_write(en);
}
Esempio n. 4
0
void hd44780_init(void)
{
    /* verschiedene Hardware initialisieren */
    hd44780_hw_init();
    _delay_ms(40);

#if HD44780_TYPE == HD44780_KS0066U
    /* Hardware initialisiert -> Standardprozedur KS0066U Datenblatt 4bit Mode */
    output_nibble(0, 0x02);
#else
    /* Hardware initialisiert -> Standardprozedur HD44780 Datenblatt 4bit Mode */
    output_nibble(0, 0x03);

    _delay_ms(4);
    clock_write();

    _delay_ms(1);
    clock_write();

    _delay_ms(1);
    output_nibble(0, 0x02);		//4bit mode
    _delay_ms(1);
    /* init done */
#endif

    /* configure for 4 bit, 2 lines, 5x9 font (datasheet, page 24) */
    output_byte(0, CMD_FUNCTIONSET(0, 1, 0));

    /* turn on display, cursor and blinking */
    hd44780_config(0,0);

    /* clear display */
    hd44780_clear();

    /* set shift and increment */
    output_byte(0, CMD_ENTRY_MODE(1, 0));

    /* set ddram address */
    output_byte(0, CMD_SETDRAMADR(0));

    /* open file descriptor */
    lcd = fdevopen(hd44780_put, NULL);

    /* set current virtual postion */
    current_pos = 0;
}
Esempio n. 5
0
/**********************************************************************
 *    cover_exit
 */
static void SS_CLIBCALLBACK cover_exit(void)
{
        cover_t* list;
        time_t   ptime;
        FILE*    f;
        
        list = clocklist;
        while (list) {
            clock_finish(list);
            list = list->cov_next;
        }

        while (covlist) {
            cover_write(covlist);
            covlist = covlist->cov_next;
        }

        if (clocklist == NULL)
            return;

        f = fopen(PROFILE_FILE, "a");
        if (f == NULL) {
            printf("Failed to open file '%s'\n", PROFILE_FILE);
            return;
        }

        time(&ptime);
        fprintf(f, "Profile output at %s", ctime(&ptime));

        if (!mainfound)
            fprintf(f, "Warning: function main not found from profile list\n");
        fprintf(f, "%4c %9s %6s %9s  %-12s %s\n",
            '%', "time", "calls", "avg", "file", "function");
        if (maxclock == 0)
            maxclock = 1;

        while (clocklist) {
            clock_write(f, clocklist);
            clocklist = clocklist->cov_next;
        }

        fprintf(f, "\n");
        fclose(f);
}
Esempio n. 6
0
void noinline output_nibble(uint8_t rs, uint8_t nibble,uint8_t en)
{
    lcd_data = nibble;

	/* Wenn rs==1, dann RS setzen */
    if (rs)
        lcd_data |= _BV(HD44780_PCF8574x_RS);

	/* WR loeschen = schreiben */
    lcd_data &= ~(_BV(HD44780_PCF8574x_WR));

	/* backlight status falls vorhanden uebernehmen */
	if(back_light)
        lcd_data |= _BV(HD44780_PCF8574x_BL);
    else
        lcd_data &= ~(_BV(HD44780_PCF8574x_BL));

    /* toggle EN, daten uebertragen */
    clock_write(1); //FIXME: bei input_nibble steht hier 'en'
}
Esempio n. 7
0
void noinline output_nibble(uint8_t rs, uint8_t nibble, uint8_t en)
{
    clear_shift_register();
    // Set high level for E at Q7
    PIN_SET(HD44780_2WIRE_D);
    PIN_SET(HD44780_2WIRE_CLK);
    LCD_DELAY();
    PIN_CLEAR(HD44780_2WIRE_CLK);

    // Set level for RS at Q6
    if (rs) //Soll ins Seuer oder Datenregister geschrieben werden?
        PIN_SET(HD44780_2WIRE_D);
    else
        PIN_CLEAR(HD44780_2WIRE_D);
    PIN_SET(HD44780_2WIRE_CLK);
    LCD_DELAY();
    PIN_CLEAR(HD44780_2WIRE_CLK);

    // shift nibble
    shift_nibble_out(nibble);

    /* toggle EN */
    clock_write(1);
}
Esempio n. 8
0
void hd44780_init(void)
{
    /* verschiedene Hardware initialisieren */
    hd44780_hw_init();
    _delay_ms(40);

#if CONF_HD44780_TYPE == HD44780_KS0066U
    /* Hardware initialisiert -> Standardprozedur KS0066U Datenblatt 4bit Mode */
    output_nibble(0, 0x02, 1);
#else
    /* Hardware initialisiert -> Standardprozedur HD44780 Datenblatt 4bit Mode */
    output_nibble(0, 0x03,1);

    _delay_ms(4);
#ifdef HD44780_2WIRE
    output_nibble(0, 0x03,1);
#else
    clock_write(1);
#endif /*HD44780_2WIRE*/

    _delay_ms(1);
#ifdef HD44780_2WIRE
	output_nibble(0, 0x03,1);
#else
    clock_write(1);
#endif /*HD44780_2WIRE*/

    _delay_ms(1);
    output_nibble(0, 0x02,1);		//4bit mode
    _delay_ms(1);
    /* init done */
#endif /*CONF_HD44780_TYPE*/

    /* configure for 4 bit, 2 lines, 5x8 font (datasheet, page 24) */
    output_byte(0, CMD_FUNCTIONSET(0, 1, 0), 1);

    /* turn on display, cursor and blinking */
    hd44780_config(0,0,1);

    /* clear display */
    hd44780_clear(1);
    /* set shift and increment */
    output_byte(0, CMD_ENTRY_MODE(1, 0),1);

    /* set ddram address */
    output_byte(0, CMD_SETDRAMADR(0),1);

/*Configure Controller 2 */
#ifdef HD44780_MULTIENSUPPORT
    /* verschiedene Hardware initialisieren */
    hd44780_hw_init();
    _delay_ms(40);

#if CONF_HD44780_TYPE == HD44780_KS0066U
    /* Hardware initialisiert -> Standardprozedur KS0066U Datenblatt 4bit Mode */
    output_nibble(0, 0x02, 2);
#else
    /* Hardware initialisiert -> Standardprozedur HD44780 Datenblatt 4bit Mode */
    output_nibble(0, 0x03,2);

    _delay_ms(4);
    clock_write(2);

    _delay_ms(1);
    clock_write(2);

    _delay_ms(1);
    output_nibble(0, 0x02,2);		//4bit mode
    _delay_ms(1);
    /* init done */
#endif

    /* configure for 4 bit, 2 lines, 5x9 font (datasheet, page 24) */
    output_byte(0, CMD_FUNCTIONSET(0, 1, 0), 2);

    /* turn on display, cursor and blinking */
    hd44780_config(0,0,2);

    /* clear display */
    hd44780_clear(2);
    /* set shift and increment */
    output_byte(0, CMD_ENTRY_MODE(1, 0),2);

    /* set ddram address */
    output_byte(0, CMD_SETDRAMADR(0),2);
#endif

    /* set current virtual postion */
    current_pos = 0;


}