Rev 122 | Blame | Last modification | View Log | RSS feed
#include <avr/io.h>#include <avr/wdt.h>#include <avr/interrupt.h>#include <avr/pgmspace.h>#include <util/delay.h>#include <stdlib.h>#include "avrutil.h"#include "e2p.h"#include "wire.h"#include "mio.h"#include "lcd.h"#include "config.h"#include "uart.h"#ifndef NULL#define NULL ((void *)0)#endif/* ------------------------------------------------------------------------- */#define UART_BAUD_RATE 9600volatile uint8_t tmr0_ovf = 0;volatile uint32_t systime = 0;#define UART_SEND_DELAY 5000#define BUTTON_DELAY 500#define LCD_SEND_DELAY 80volatile uint16_t buttontime = BUTTON_DELAY;volatile uint16_t sendtime = UART_SEND_DELAY;volatile uint8_t lcdTimer = LCD_SEND_DELAY;int main(void) {/*DDR : 1 = Output, 0 = InputPORT: 1 = Pullup for Input, otherwise set outputPIN : Read input pin*//*PB0 -PB1 -PB2 -PB3 -PB4 -PB5 -PB6 -PB7 -*/DDRB = 0B00001111;PORTB = 0B00000000;/*PC0 -PC1 -PC2 -PC3 -PC4 -PC5 -*/DDRC = 0B11111111;PORTC = 0B00000000;/*PD0 -PD1 -PD2 -PD3 -PD4 -PD5 - Input PcInt - * I/O Interrupt PCINT21PD6 - Output - * Status LEDPD7 - Input, Pullup - * Button*/DDRD = 0B01011111;PORTD = 0B10000000;sysclockInit();uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );wdt_enable(WDTO_1S); // Watchdog for 1 secsei(); // Enable interruptsi2c_master();e2p_init();mio_init();lcd_init();lcd_setCursor(0, 1);lcd_print("Time:\0");char display[10];uint16_t address = 0x0003;sbi(PORTD, PD6);_delay_us(100);cbi(PORTD, PD6);mio_iodir(0x02);mio_pullups(0x02);//mio_writeReg(0x00, 0x02);//mio_writeReg(0x06, 0x02);//mio_writeReg(0x0a, 0x01);//mio_writeReg(0x0a, 0x00);for(;;){wdt_reset();cbi(PIND, PD6);if (!rbi(PIND, PD7) && !buttontime) {sbi(PORTD, PD6);delay_ms(1);cbi(PORTD, PD6);uint8_t lsb = systime & 0x000000ff;e2p_writeByte(address, lsb);e2p_flush();uint8_t rdata = e2p_readByte(address);uart_puts("Write: ");utoa(lsb, display, 16);uart_puts(display);uart_puts("\r\n");lcd_overprint_right(display, 2, 3, 0);uart_puts("Read: ");utoa(rdata, display, 16);uart_puts(display);uart_puts("\r\n");lcd_overprint_right(display, 2, 6, 0);buttontime = BUTTON_DELAY;}if (!sendtime) {ltoa(systime, display, 10);uart_puts(display);uart_puts("\r\n");sendtime=UART_SEND_DELAY;}if (!lcdTimer) {ultoa(systime, display, 10);lcd_overprint_right(display, 10, 6, 1);uint8_t but1 = mio_readPin(1);if (but1) {cbi(PORTD, PD6);mio_latchPin(0, 0x00);} else {sbi(PORTD, PD6);mio_latchPin(0, 0x01);}utoa(but1, display, 16);lcd_overprint_right(display, 2, 0, 0);lcdTimer = LCD_SEND_DELAY;}_delay_ms(1);}return 0;}ISR(TIMER0_OVF_vect) {tmr0_ovf++;// Clk/1 TCCR0B = (1<< CS00);//20.0Mhz, 1ms = 78ovf//16.5Mhz, 1ms = 64ovf//16.0Mhz, 1ms = 62ovf//12.0Mhz, 1ms = 46ovfif (tmr0_ovf>=64) {systime++;tmr0_ovf = 0;if (sendtime)sendtime--;if (lcdTimer)lcdTimer--;if (buttontime)buttontime--;}}