/Modules/HumanInterfaces/nanoterm01A/SW/lcd.c |
---|
0,0 → 1,146 |
/* mija 2008 |
source file for lcd HITACHI 16x2,8x2,... |
!!! must be set PINs,PORTs,DDR in lcd.h |
ver.: 0.0 TESTED |
(source from lcd.c from (c)miho 2005) |
*/ |
#include <avr/io.h> |
#include <util/delay.h> |
#include <avr/pgmspace.h> |
#include "lcd.h" |
#include <stdio.h> |
//************************************************************* |
#define H_D0 PORT_D0 |=_BV(PIN_D0) |
#define L_D0 PORT_D0 &= ~(_BV(PIN_D0)) |
#define H_D1 PORT_D1 |=_BV(PIN_D1) |
#define L_D1 PORT_D1 &= ~(_BV(PIN_D1)) |
#define H_D2 PORT_D2 |=_BV(PIN_D2) |
#define L_D2 PORT_D2 &= ~(_BV(PIN_D2)) |
#define H_D3 PORT_D3 |=_BV(PIN_D3) |
#define L_D3 PORT_D3 &= ~(_BV(PIN_D3)) |
#define H_E PORT_E |=_BV(PIN_E) |
#define L_E PORT_E &= ~(_BV(PIN_E)) |
#define H_RS PORT_RS |=_BV(PIN_RS) |
#define L_RS PORT_RS &= ~(_BV(PIN_RS)) |
//************************************************************* |
// Definice konstant pro LCD display |
// |
#define LCD_CURSOR_ON_ 0x0E // kurzor jako blikajici radka pod znakem |
#define LCD_CURSOR_OFF_ 0x0C // zadny kurzor |
#define LCD_LINE_2 0x40 // adresa 1. znaku 2. radky |
// Definice rezimu LCD displeje |
// |
uint8_t PROGMEM LCD_INIT_STRING[4] = |
{ |
0x28, // intrfejs 4 bity, 2 radky, font 5x7 |
LCD_CURSOR_OFF_, // display on, kurzor off, |
0x01, // clear displeje |
0x06 // inkrement pozice kurzoru (posun kurzoru doprava) |
}; |
void LCD_init_IO_PIN(void) |
{ |
DDR_D0 |= _BV(PIN_D0); |
DDR_D1 |= _BV(PIN_D1); |
DDR_D2 |= _BV(PIN_D2); |
DDR_D3 |= _BV(PIN_D3); |
DDR_E |= _BV(PIN_E); |
DDR_RS |= _BV(PIN_RS); |
} |
void LCD_init(void) |
{ |
uint8_t a; |
LCD_init_IO_PIN(); |
_delay_ms(20); |
L_E; |
L_RS; |
for (a=0;a<3;a++) |
{ |
_delay_ms(2); |
LCD_send_nibble(0x3); |
} |
_delay_us(40); |
LCD_send_nibble(0x2); |
_delay_us(40); |
for (a=0;a<3;a++) |
{ |
LCD_send_command(pgm_read_byte(&(LCD_INIT_STRING[a]))); |
_delay_ms(2); |
} |
} |
void LCD_putc(uint8_t data) |
{ |
LCD_send_data(data); |
} |
void LCD_send_command(uint8_t data) |
{ |
L_RS; |
LCD_send(data); |
H_RS; |
} |
void LCD_send_data(uint8_t data) |
{ |
H_RS; |
LCD_send(data); |
} |
void LCD_send(uint8_t data) |
{ |
LCD_send_nibble(data >> 4); |
LCD_send_nibble(data); |
_delay_us(40); |
} |
void LCD_send_nibble(uint8_t data) |
{ |
L_D0;L_D1;L_D2;L_D3; |
if (data & 0x1) H_D0; |
if (data & 0x2) H_D1; |
if (data & 0x4) H_D2; |
if (data & 0x8) H_D3; |
H_E; |
_delay_us(1); |
L_E; |
} |
void LCD_clear(void) |
{ |
LCD_send_command(1); |
_delay_ms(2); |
} |
void LCD_gotoxy( uint8_t x, uint8_t y) |
{ |
uint8_t Adr; |
Adr=x-1; |
if(y==2) |
Adr+=LCD_LINE_2; |
LCD_send_command(0x80|Adr); |
} |
/Modules/HumanInterfaces/nanoterm01A/SW/lcd.h |
---|
0,0 → 1,58 |
/* mija 2008 |
*.h file for defines lcd.c |
data PIN_D0 |
PIN_D1 |
PIN_D2 |
PIN_D3 |
write PIN_E |
commamnd/data PIN_RS |
!!!!NOTE must be set PIN with PORT and DDR |
*/ |
//************************************************************* |
#define PIN_D0 PA1 |
#define PORT_D0 PORTA |
#define DDR_D0 DDRA |
#define PIN_D1 PD3 |
#define PORT_D1 PORTD |
#define DDR_D1 DDRD |
#define PIN_D2 PA0 |
#define PORT_D2 PORTA |
#define DDR_D2 DDRA |
#define PIN_D3 PD2 |
#define PORT_D3 PORTD |
#define DDR_D3 DDRD |
#define PIN_E PD4 |
#define PORT_E PORTD |
#define DDR_E DDRD |
#define PIN_RS PD5 |
#define PORT_RS PORTD |
#define DDR_RS DDRD |
//************************************************************* |
void LCD_init(void); |
void LCD_putc(uint8_t data); |
void LCD_gotoxy( uint8_t x, uint8_t y); |
void LCD_clear(void); |
void LCD_send_data(uint8_t data); |
void LCD_send_command(uint8_t data); |
void LCD_send(uint8_t data); |
void LCD_send_nibble(uint8_t data); |
void LCD_init_IO_PIN(void); |
//************************************************************* |
/Modules/HumanInterfaces/nanoterm01A/SW/nanoterm01A.c |
---|
0,0 → 1,98 |
/* mija 2008 |
nanotern01A |
ver.: 0.0 tested |
*/ |
//************************************************************* |
#include <avr/io.h> |
#include <util/delay.h> |
#include <avr/interrupt.h> |
#include <avr/sleep.h> |
#include "rs232.h" |
#include "lcd.h" |
//************************************************************* |
void line_feed(void); |
void PWM_init(void); |
void COMP_init(void); |
ISR(ANA_COMP_vect); |
void main(void); |
//************************************************************* |
#define text "Test 0.0" |
//************************************************************* |
uint8_t a,pos; |
uint8_t buf[8] = text; |
//************************************************************* |
void line_feed(void) |
{ |
uint8_t length; |
LCD_clear(); |
length=pos; |
while(pos) {LCD_putc(buf[length-(pos)]);buf[length-(pos--)]=0x20;} |
LCD_gotoxy(length+1,2); |
pos=length; |
} |
void PWM_init(void) |
{ |
TCNT1 = 0; |
OCR1B = 0x1; |
DDRB |= _BV(PB4); |
TCCR1A |= _BV(COM1B1) | _BV(WGM10); |
TCCR1B |= _BV(WGM12) | _BV(CS10); |
} |
void PWM_set(void) |
{ |
if (ACSR & _BV(ACO)) OCR1BL = 0x1f; |
else OCR1BL = 0x1; |
} |
void COMP_init(void) |
{ |
ACSR |= _BV(ACBG) | _BV(ACIE); |
DIDR |= _BV(AIN1D); |
} |
ISR(ANA_COMP_vect) |
{ |
PWM_set(); |
} |
void main(void) |
{ |
LCD_init(); |
rs232_init(); |
PWM_init(); |
COMP_init(); |
PWM_set(); |
LCD_clear(); |
for (pos=0;pos<8;pos++) LCD_putc(buf[pos]); |
LCD_gotoxy(1,2); |
sei(); |
pos=0; |
for(;;) |
{ |
a=rs232_get(); |
switch (a) |
{ |
case ('\n'): line_feed();break; |
case ('\r'): LCD_gotoxy(1,2);pos=0;break; |
case ('\f'): LCD_clear();LCD_gotoxy(1,2);pos=0;break; |
default :if(pos > 7 ) {line_feed();LCD_gotoxy(1,2);pos=0;} LCD_putc(a);buf[pos++]=a; |
} |
} |
} |
/Modules/HumanInterfaces/nanoterm01A/SW/nanoterm01A.hex |
---|
0,0 → 1,51 |
:1000000014C02DC02CC02BC02AC029C028C027C0B6 |
:1000100026C025C040C023C022C021C020C01FC0B0 |
:100020001EC01DC01CC0280C010611241FBECFED30 |
:10003000CDBF10E0A0E6B0E0EAE0F3E003C0C89571 |
:1000400031960D92A836B107D1F710E0A8E6B0E0DE |
:1000500001C01D92AA36B107E1F776D055C1D0CFC5 |
:100060001DBC1CBC81E090E099BD88BDBC9A8FB5D9 |
:1000700081628FBD8EB589608EBD0895459B03C09A |
:100080008FE188BD089581E088BD089588B18864B6 |
:1000900088B9099A08951F920F920FB60F921124F2 |
:1000A0002F933F934F935F936F937F938F939F9380 |
:1000B000AF93BF93EF93FF93E1DFFF91EF91BF9178 |
:1000C000AF919F918F917F916F915F914F913F91F0 |
:1000D0002F910F900FBE0F901F901895EF92FF92E7 |
:1000E0000F931F93CF93DF93ACD0F0906800FF2065 |
:1000F000F1F08F2DCF2DDD2700E610E0EE2468947F |
:10010000E5F8FD2FEC2FE81BF109E00FF11F8081CE |
:1001100092D080916800FD2FEC2FE81BF109E00FD1 |
:10012000F11FE082815080936800882351F762E0DC |
:100130008F2D8F5F8DD0F0926800DF91CF911F914E |
:100140000F91FF90EF9008958AD0CCD089DF9EDF89 |
:1001500095DF77D01092680080E0E82FFF27E05A03 |
:10016000FF4F808168D0809168008F5F8093680026 |
:10017000883098F362E081E06BD078941092680048 |
:10018000BED0809369008C3061F08D3021F08A30D0 |
:1001900079F4A4DFF5CF62E081E05AD010926800D4 |
:1001A000EFCF4FD062E081E053D010926800E8CFEB |
:1001B00080916800883030F091DF62E081E048D0C3 |
:1001C000109268008091690036D080916800E82F15 |
:1001D000FF27E05AFF4F9091690090838F5F8093D3 |
:1001E0006800CECFD19A8B9AD09A8A9A8C9A8D9A9F |
:1001F0000895D9989398D8989298992780FDD99A7C |
:1002000081FD939A82FDD89A83FD929A949A81E017 |
:100210008A95F1F7949808951F93182F82958F70FF |
:10022000E8DF812FE6DF8DE08A95F1F71F910895D1 |
:10023000959AF2DF0895FCDF08959598EDDF959A81 |
:10024000089581E0FADF84EF91E00197F1F70895D6 |
:100250008150623009F4805C8068EFDF0895EF928E |
:10026000FF920F931F93CF93DF93BCDF88E893E156 |
:100270000197F1F79498959810E0C4EFD1E08C2F96 |
:100280009D2F0197F1F783E0B4DF1F5F1330B9F7BB |
:100290001DE0812F8A95F1F782E0ABDF1A95F1F727 |
:1002A00086E290E0D92FC82F0F2EF4EFEF2EF1E069 |
:1002B000FF2EF02D082F192F0D5F1F4FFD2FEC2F54 |
:1002C000C895802DBADF9F2D8E2D0197F1F72196CD |
:1002D0000C171D0799F7DF91CF911F910F91FF9098 |
:1002E000EF900895599A12B88CE089B988E18AB9DB |
:1002F00008955D9BFECF8CB980E090E008955F9BF0 |
:0A030000FECF8CB199270895FFCFBE |
:08030A005465737420302E309D |
:00000001FF |
/Modules/HumanInterfaces/nanoterm01A/SW/rs232.c |
---|
0,0 → 1,47 |
/* mija 2008 |
source file for hw USART ATtiny2313 |
fixed boud rate 9600 8N1 |
PD1 - TX |
PD0 - RX |
ver.: 0.0 TESTED |
*/ |
#include <avr/io.h> |
#include "rs232.h" |
//************************************************************** |
void rs232_init(void) |
{ |
//set baud rate fixed 9600 8N1 |
UCSRA = UCSRA | ( 1 << U2X) ; |
UBRRH = 0; |
UBRRL = 12; |
//enable RX TX |
UCSRB = (1<<RXEN)|(1<<TXEN); |
//8N1 |
//UCSRC = (1<<UMSEL); |
} |
int rs232_put(char data) |
{ |
// Wait for empty transmit buffer |
while ( !( UCSRA & (1<<UDRE)) ); |
// Put data into buffer, sends the data |
UDR = data; |
return 0; |
} |
int rs232_get(void) |
{ |
// Wait for data to be received |
while ( !(UCSRA & (1<<RXC)) ); |
// Get and return received data from buffer |
return UDR; |
} |
/Modules/HumanInterfaces/nanoterm01A/SW/rs232.h |
---|
0,0 → 1,11 |
// defines for rs232.c |
// fixed BAUD 9600 |
//************************************************************** |
void rs232_init(void); |
int rs232_put(char data); |
int rs232_get(void); |
//************************************************************** |