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