hƣơng 4 : THIẾT KẾ HỆ TH NG
4.3. Lập trình phần mềm giao diện PC sử dụng VB.NET
Visual Basic.NET (VB.NET) là ngôn ngữ lập trình hƣớng đối tƣợng (Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không. Visual Basic.NET (VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft ‟s .NET Framework. Do đó, nó cũng không phải là VB phiên bản 7. Thật sự, đây l ngôn ngữ lập trình mới và rất lợi hại, không những lập nền tảng vững chắc theo kiểu mẫu đối tƣợng nhƣ các ngôn ngữ lập trình hùng mạnh khác nhƣ ++, Java m còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những vấn đề khúc mắc khi lập trình. Hơn nữa, Visual Basic.NET (VB.NET) giúp ta đối phó với các phức tạp khi lập trình trên nền Windows v do đó, ta chỉ tập trung công sức vào các vấn đề li n quan đến dự án, công việc của mình.
Trong Form của Project đƣợc tạo bởi VB.net ta tạo giao diện của chƣơng trình nhƣ sau:
Hình 4.26: Giao diện chương trình trên PC
Các thành phần chính trên Form:
- 4 GroupBox chứa các thông tin về nhiệt đô, độ ẩm, điểm sƣơng v trạng thái máy hút ẩm thu thập đƣợc từ các slave trong mạng RS-485.
- 1 GroupBox để lựa chọn cổng OM tr n máy tính để kết nối với mạng RS-485. - 1 GroupBox cho chức năng lƣu số liệu vào file Excel. Trong GropBox này
ngƣời vận hành có thể chọn chu kỳ lƣu l 1 phút, 2 phút, 5 phút, 10 phút, 20 phút, 30 phút, 40 phút, 50 phút, 60 phút …. để chƣơng trình tự động lƣu dữ liệu vào file Excel.
- Ngo i ra tr n Form còn có các nhãn để hiển thị thời gian thực của máy tính. Mã nguồn của chƣơng trình đƣợc trình bày trong phụ lục 3.
Hình 4.27: Giao diện chương trình khi hoạt động
KẾT LU N Kết quả
- Chế tạo 04 modul slave và 01 modul master cho hệ thống mạng kiểm soát nhiệt độ, độ ẩm.
- Lập trình phần mềm nhúng cho các vi điều khiển của master v slave để truyền dữ liệu theo chuẩn MODBUS tr n đƣờng truyền RS-485.
- Lập trình phần mềm cho máy tính để thu thập v lƣu trữ dữ liệu của hệ thống mạng.
- ăng 01 b i báo trong Tuyển tập các báo cáo tại hội nghị khoa học nhân dịp kỷ niệm 25 năm th nh lập Trung tâm Nhiệt đới Việt – Nga.
Hạn chế
- Hệ thống sử dụng đƣơng truyền RS-485 do đó hạn chế về tốc độ và khoảng cách truyền dẫn cũng nhƣ số lƣợng các slave trong mạng.
- Tính bảo mật thông tin chƣa cao do chƣa dùng các mã mật để mã hóa dữ liệu trênđƣờng truyền.
- Các modul mạch in làm thủ công nên chất lƣợng mạch in và tính thẩm mỹ chƣa cao.
ƣớng phát triển đề tài
- Sử dụng các phƣơng thức truyền dẫn khác ƣu việt hơn nhƣ Ethernet.
- Sử dụng đƣờng truyền vô tuyến cho hệ thống nhằm đơn giản hóa việc triển khai hệ thống trong các ứng dụng thực tế. Tuy nhi n điều n y đòi hỏi phải có sự bảo mật thông tin cao vì thế cần sử dụng thêm các mã mật. ƣờng truyền vô tuyến cũng có nhiều nhiễu hơn do đó cần phải sử dụng thêm các mã chống nhiễu v nhƣ vậy độ phức tạp của hệ thống cũng sẽ tăng l n.
- Thêm các chức năng gửi dữ liệu qua mạng Internet để có thể truy cập từ xa bằng PC hoặc SmartPhone...
- Triển khai hệ thống cho nhiều ứng dụng khác nhƣ bảo quản, quân trang, quân nhu, lƣơng thực, thực phẩm, giám sát môi trƣờng….
DANH MỤC CÔNG TRÌNH KHOA HỌ Ê Q ẾN LU
1. ồng Phạm Khôi, Nguyễn Văn Lâm (2012), “Nghi n cứu thiết kế, chế tạo hệ thống mạng kiểm soát nhiệt độ, độ ẩm từ xa phục vụ công tác bảo quản VKTBKT”, Tuyển tập các báo cáo tại hội nghị khoa học nhân dịp kỷ niệm 25 năm thành lập Trung tâm Nhiệt đới Việt – Nga.
TÀI LIỆU THAM KHẢO Tiếng Việt
1. ồng Phạm Khôi, Nguyễn Văn Lâm (2012), “Nghi n cứu thiết kế, chế tạo hệ thống mạng kiểm soát nhiệt độ, độ ẩm từ xa phục vụ công tác bảo quản VKTBKT”, Tuyển tập các báo cáo tại hội nghị khoa học nhân dịp kỷ niệm 25 năm thành lập Trung tâm Nhiệt đới Việt – Nga.
Tiếng Anh
2. Dallas Semiconductor, “Fundamentals of RS-232 Serial Communications”,
Application Note 83.
3. Omega.com, “The RS-232 Standard”.
4. B&B Electronics. 2010, “RS-422 and RS-485 applications ebook”, Manual Documentation, Ottawa, USA.
5. Texas Instruments.2008, “The RS-485 Design Guide”.
6. TIA/EIA-485-A Electrical Characteristics of Generators and Receivers for Use in Balanced Digital Multipoint Systems.
7. Modbus-IDA.ORG. 2006, “MODBUS over serial line specification and implementation guide V1.02”.
8. hipkin utomatic System. 2010, “Modbus for Field Technicians”, anada. 9. Spehro Pefhany. January 2000, “Modbus Protocol”, Toronto, anada.
10.Atmel Corporation. 2011, “Datasheet Tmega128”, US .
11.Sensirion The sensor company, “Datasheet SHT1x (SHT10, SHT11, SHT15) Humidity and Temperature Sensor I ”.
12.Maxim integrated. 2008, “DS1307 64 x 8, Serial, I2C Real-Time Clock”. 13.CodeWizardAVR V3.10 Advanced, Help.
PHỤ LỤC Phụ lục 1: Code C cho master
/******************************************************* This program was created by the
CodeWizardAVR V3.10 Advanced Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project :Master Version :
Date : 9/14/2014
Author : Dong Pham Khoi
Company : Trung tam nhiet doi Viet-Nga Comments:
Chip type : ATmega128 Program type : Application
AVR Core Clock frequency: 8.000000 MHz Memory model : Small
External RAM size : 0 Data Stack size : 1024
*******************************************************/ #include <mega128.h>
#include <delay.h> // I2C Bus functions #include <i2c.h>
// DS1307 Real Time Clock functions #include <ds1307.h>
// Alphanumeric LCD functions #include <alcd.h>
// Declare your global variables here
/* FAT on MMC/SD/SD HC card support */ #include <ff.h>
//Khai bao cac bien dat thoi gian, j:chon loai dieu chinh; k: vao che do dat tg unsigned char j=1,k=0,g=0,l;
unsigned char gio,phut,giay,ngay,thang,nam;
unsigned char hour,min,sec,day_week,day,month,year; unsigned char i;
unsigned char buff[80]; //Bo dem hien thi LCD char display_buffer[128];
//tang k len 1 de k khac 0 de chuong trinh chinh vao che do dat thoi gian // External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void) {
// Place your code here if (k==0)
k=1; else k=0; delay_ms(200); }
//Chon loai don vi can dieu chinh // External Interrupt 4 service routine
interrupt [EXT_INT4] void ext_int4_isr(void) {
// Place your code here if (j==6) j=1; else j=j+1; delay_ms(200); } //Nut tang
// External Interrupt 5 service routine
interrupt [EXT_INT5] void ext_int5_isr(void) {
// Place your code here switch(j) { case 1: if (gio==23) gio=0; else gio=gio+1; break; case 2: if (phut==59) phut=0; else phut=phut+1; break; case 3: if (giay==59) giay=0; else giay=giay+1; break; case 4: if (ngay==31) ngay=1; else ngay=ngay+1; break; case 5: if (thang==12) thang=1; else thang=thang+1; break; case 6: if (nam==99) nam=13; else
nam=nam+1; break; }; delay_ms(200); } //Nut giam
// External Interrupt 6 service routine
interrupt [EXT_INT6] void ext_int6_isr(void) {
// Place your code here switch(j) { case 1: if (gio==0) gio=23; else gio=gio-1; break; case 2: if (phut==0) phut=59; else phut=phut-1; break; case 3: if (giay==0) giay=59; else giay=giay-1; break; case 4: if (ngay==1) ngay=31; else ngay=ngay-1; break; case 5: if (thang==1) thang=12; else thang=thang-1; break; case 6: if (nam==13) nam=99; else nam=nam-1; break; }; delay_ms(200); }
//Reset lai thoi gian da dieu chinh // External Interrupt 7 service routine
interrupt [EXT_INT7] void ext_int7_isr(void) {
// Place your code here lcd_clear();
i2c_init();
/* initialize the RTC, Timer interrupt enabled, Alarm interrupt enabled, CLKOUT frequency=1Hz Timer clock frequency=1Hz */ rtc_init(0,0,0);
rtc_set_time(gio,phut,giay); /* set time */ rtc_set_date(2,ngay,thang,nam); /* set date */
k=0; //Cho k=0 de chuong trinh chinh thoat khoi che do dieu chinh thoi gian delay_ms(200);
}
#define DATA_REGISTER_EMPTY (1<<UDRE0) #define RX_COMPLETE (1<<RXC0)
#define FRAMING_ERROR (1<<FE0) #define PARITY_ERROR (1<<UPE0) #define DATA_OVERRUN (1<<DOR0) // USART0 Receiver buffer
#define RX_BUFFER_SIZE0 16 char rx_buffer0[RX_BUFFER_SIZE0]; #if RX_BUFFER_SIZE0 <= 256
unsigned char rx_wr_index0=0,rx_rd_index0=0; #else
unsigned int rx_wr_index0=0,rx_rd_index0=0; #endif
#if RX_BUFFER_SIZE0 < 256 unsigned char rx_counter0=0; #else
unsigned int rx_counter0=0; #endif
// This flag is set on USART0 Receiver buffer overflow bit rx_buffer_overflow0;
// USART0 Receiver interrupt service routine interrupt [USART0_RXC] void usart0_rx_isr(void) {
char status,data; status=UCSR0A; data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {
rx_buffer0[rx_wr_index0++]=data; #if RX_BUFFER_SIZE0 == 256
// special case for receiver buffer size=256 if (++rx_counter0 == 0) rx_buffer_overflow0=1; #else
if (rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0; if (++rx_counter0 == RX_BUFFER_SIZE0)
{
rx_counter0=0;
} #endif } }
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART0 Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter0==0); data=rx_buffer0[rx_rd_index0++]; #if RX_BUFFER_SIZE0 != 256
if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0; #endif #asm("cli") --rx_counter0; #asm("sei") return data; } #pragma used- #endif
// USART0 Transmitter buffer #define TX_BUFFER_SIZE0 8
char tx_buffer0[TX_BUFFER_SIZE0]; #if TX_BUFFER_SIZE0 <= 256
unsigned char tx_wr_index0=0,tx_rd_index0=0; #else
unsigned int tx_wr_index0=0,tx_rd_index0=0; #endif
#if TX_BUFFER_SIZE0 < 256 unsigned char tx_counter0=0; #else
unsigned int tx_counter0=0; #endif
// USART0 Transmitter interrupt service routine interrupt [USART0_TXC] void usart0_tx_isr(void) { if (tx_counter0) { --tx_counter0; UDR0=tx_buffer0[tx_rd_index0++]; #if TX_BUFFER_SIZE0 != 256
if (tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0; #endif
} }
#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART0 Transmitter buffer #define _ALTERNATE_PUTCHAR_
#pragma used+ void putchar(char c) {
while (tx_counter0 == TX_BUFFER_SIZE0); #asm("cli")
if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0)) {
tx_buffer0[tx_wr_index0++]=c; #if TX_BUFFER_SIZE0 != 256
if (tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0; #endif ++tx_counter0; } else UDR0=c; #asm("sei") } #pragma used- #endif
// USART1 Transmitter buffer #define TX_BUFFER_SIZE1 80 char tx_buffer1[TX_BUFFER_SIZE1]; #if TX_BUFFER_SIZE1 <= 256
unsigned char tx_wr_index1=0,tx_rd_index1=0; #else
unsigned int tx_wr_index1=0,tx_rd_index1=0; #endif
#if TX_BUFFER_SIZE1 < 256 unsigned char tx_counter1=0; #else
unsigned int tx_counter1=0; #endif
// USART1 Transmitter interrupt service routine interrupt [USART1_TXC] void usart1_tx_isr(void) { if (tx_counter1) { --tx_counter1; UDR1=tx_buffer1[tx_rd_index1++]; #if TX_BUFFER_SIZE1 != 256
if (tx_rd_index1 == TX_BUFFER_SIZE1) tx_rd_index1=0; #endif
} }
// Write a character to the USART1 Transmitter buffer #pragma used+
void putchar1(char c) {
while (tx_counter1 == TX_BUFFER_SIZE1); #asm("cli")
{
tx_buffer1[tx_wr_index1++]=c; #if TX_BUFFER_SIZE1 != 256
if (tx_wr_index1 == TX_BUFFER_SIZE1) tx_wr_index1=0; #endif ++tx_counter1; } else UDR1=c; #asm("sei") } #pragma used-
// Standard Input/Output functions #include <stdio.h>
/* FAT function result */ FRESULT res;
/* number of bytes written/read to the file */ unsigned int nbytes;
/* will hold the information for logical drive 0: */ FATFS fat;
/* will hold the file information */ FIL file;
/* will hold file attributes, time stamp information */ FILINFO finfo;
/* file path */
char path[]="0:/file.txt";
// Timer1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) {
// Reinitialize Timer1 value TCNT1H=0xD8F0 >> 8; TCNT1L=0xD8F0 & 0xff; // Place your code here
/* card access low level timing function */ disk_timerproc();
}
// Timer3 overflow interrupt service routine interrupt [TIM3_OVF] void timer3_ovf_isr(void) {
// Reinitialize Timer3 value TCNT3H=0xE17B >> 8; TCNT3L=0xE17B & 0xff; // Place your code here if (k==0&&g==0) {
/* read the date from the RTC */ if(l==0)
{
lcd_gotoxy(2,0); lcd_putsf(" "); l=58;
} else { lcd_gotoxy(2,0); lcd_putchar(58); l=0; } ; }; }
/* error message list */
flash char * flash error_msg[]= { "", /* not used */ "FR_DISK_ERR", "FR_INT_ERR", "FR_INT_ERR", "FR_NOT_READY", "FR_NO_FILE", "FR_NO_PATH", "FR_INVALID_NAME", "FR_DENIED", "FR_EXIST", "FR_INVALID_OBJECT", "FR_WRITE_PROTECTED", "FR_INVALID_DRIVE", "FR_NOT_ENABLED", "FR_NO_FILESYSTEM", "FR_MKFS_ABORTED", "FR_TIMEOUT" };
/* display error message and stop */ void error(FRESULT res)
{
if ((res>=FR_DISK_ERR) && (res<=FR_TIMEOUT)) {
sprintf(display_buffer, "ERROR: %p\r\n",error_msg[res]); lcd_puts(display_buffer); delay_ms(2000); lcd_clear(); } /* stop here */ while(1); }
/* display file's attribute, size and time stamp */ void display_status(char *file_name)
{
if ((res=f_stat(file_name,&finfo))==FR_OK) {
sprintf(display_buffer, "File: %s, Attributes: %c%c%c%c%c\r\n" "Date: %02u/%02u/%u, Time: %02u:%02u:%02u\r\n" "Size: %lu bytes\r\n",
finfo.fname,
(finfo.fattrib & AM_DIR) ? 'D' : '-', (finfo.fattrib & AM_RDO) ? 'R' : '-', (finfo.fattrib & AM_HID) ? 'H' : '-', (finfo.fattrib & AM_SYS) ? 'S' : '-', (finfo.fattrib & AM_ARC) ? 'A' : '-',
finfo.fdate & 0x1F, (finfo.fdate >> 5) & 0xF, (finfo.fdate >> 9) + 1980,
(finfo.ftime >> 11), (finfo.ftime >> 5) & 0x3F, (finfo.ftime & 0xF) << 1, finfo.fsize); lcd_puts(display_buffer); delay_ms(2000); lcd_clear(); } else {
/* an error occured, display it and stop */ error(res);
}; }
void main(void) {
// Declare your local variables here
unsigned char thuong=100; //gan gia tri ban dau cua thuong so min/chu ky luu // Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Port E initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRE=(0<<DDE7) | (0<<DDE6) | (0<<DDE5) | (0<<DDE4) | (0<<DDE3) | (0<<DDE2) | (0<<DDE1) | (0<<DDE0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTE=(0<<PORTE7) | (0<<PORTE6) | (0<<PORTE5) | (0<<PORTE4) | (0<<PORTE3) | (0<<PORTE2) | (0<<PORTE1) | (0<<PORTE0);
// Port F initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRF=(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF3) | (0<<DDF2) | (0<<DDF1) | (0<<DDF0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTF=(0<<PORTF7) | (0<<PORTF6) | (0<<PORTF5) | (0<<PORTF4) | (0<<PORTF3) | (0<<PORTF2) | (0<<PORTF1) | (0<<PORTF0);
// Port G initialization
// Function: Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRG=(0<<DDG4) | (0<<DDG3) | (0<<DDG2) | (0<<DDG1) | (0<<DDG0); // State: Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTG=(0<<PORTG4) | (0<<PORTG3) | (0<<PORTG2) | (0<<PORTG1) | (0<<PORTG0); // Timer/Counter 0 initialization
// Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected ASSR=0<<AS0; TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 1000.000 kHz // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // OC1C output: Disconnected // Noise Canceler: Off
// Input Capture on Falling Edge // Timer Period: 10 ms
// Timer1 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10); TCNT1H=0xD8; TCNT1L=0xF0; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected
TCCR2=(0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00; OCR2=0x00;
// Timer/Counter 3 initialization // Clock source: System Clock // Clock value: 7.813 kHz // Mode: Normal top=0xFFFF // OC3A output: Disconnected // OC3B output: Disconnected // OC3C output: Disconnected // Noise Canceler: Off
// Input Capture on Falling Edge // Timer Period: 1.0001 s
// Timer3 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off
TCCR3A=(0<<COM3A1) | (0<<COM3A0) | (0<<COM3B1) | (0<<COM3B0) | (0<<COM3C1) | (0<<COM3C0) | (0<<WGM31) | (0<<WGM30); TCCR3B=(0<<ICNC3) | (0<<ICES3) | (0<<WGM33) | (0<<WGM32) | (1<<CS32) | (0<<CS31) | (1<<CS30); TCNT3H=0xE1; TCNT3L=0x7B; ICR3H=0x00; ICR3L=0x00; OCR3AH=0x00; OCR3AL=0x00; OCR3BH=0x00; OCR3BL=0x00; OCR3CH=0x00; OCR3CL=0x00;
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (1<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);
// External Interrupt(s) initialization // INT0: On
// INT0 Mode: Low level // INT1: Off
// INT2: Off // INT3: Off // INT4: On
// INT4 Mode: Low level // INT5: On
// INT5 Mode: Low level // INT6: On
// INT6 Mode: Low level // INT7: On
// INT7 Mode: Low level
EICRA=(0<<ISC31) | (0<<ISC30) | (0<<ISC21) | (0<<ISC20) | (0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
EICRB=(0<<ISC71) | (0<<ISC70) | (0<<ISC61) | (0<<ISC60) | (0<<ISC51) | (0<<ISC50) | (0<<ISC41) | (0<<ISC40);
EIMSK=(1<<INT7) | (1<<INT6) | (1<<INT5) | (1<<INT4) | (0<<INT3) | (0<<INT2) | (0<<INT1) | (1<<INT0);
EIFR=(1<<INTF7) | (1<<INTF6) | (1<<INTF5) | (1<<INTF4) | (0<<INTF3) | (0<<INTF2) | (0<<INTF1) | (1<<INTF0);
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity // USART0 Receiver: On
// USART0 Transmitter: On // USART0 Mode: Asynchronous // USART0 Baud Rate: 9600
UCSR0A=(0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | (0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0);
UCSR0B=(1<<RXCIE0) | (1<<TXCIE0) | (0<<UDRIE0) | (1<<RXEN0) | (1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);
UCSR0C=(0<<UMSEL0) | (0<<UPM01) | (0<<UPM00) | (0<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00) | (0<<UCPOL0);
UBRR0H=0x00; UBRR0L=0x33;
// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity // USART1 Receiver: Off
// USART1 Transmitter: On // USART1 Mode: Asynchronous // USART1 Baud Rate: 9600
UCSR1A=(0<<RXC1) | (0<<TXC1) | (0<<UDRE1) | (0<<FE1) | (0<<DOR1) | (0<<UPE1) | (0<<U2X1) | (0<<MPCM1);
UCSR1B=(0<<RXCIE1) | (1<<TXCIE1) | (0<<UDRIE1) | (0<<RXEN1) | (1<<TXEN1) | (0<<UCSZ12) | (0<<RXB81) | (0<<TXB81);
UCSR1C=(0<<UMSEL1) | (0<<UPM11) | (0<<UPM10) | (0<<USBS1) | (1<<UCSZ11) | (1<<UCSZ10) | (0<<UCPOL1);
UBRR1H=0x00; UBRR1L=0x33;
// Analog Comparator initialization // Analog Comparator: Off
// The Analog Comparator's positive input is // connected to the AIN0 pin
// The Analog Comparator's negative input is // connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME); // ADC initialization // ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
// SPI initialization