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; }
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); }
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); }
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; }
/********************************************************************** * 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); }
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' }
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); }
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; }