B Ứng dụng mạch khuếch đại thuật toán
3.11 Truyền thông USB
Để truyền thông được qua giao thức USB, chúng ta dùng chuẩn HID, tốc độ hoạt động của chip phải là 48MHz (với truyền thông USB 2.0,
full speed) [14]
Phần mềm nhúng truyền thông USB, cần có các hàm: Hid Enable, Hid Read, Hid Write, Hid Disable.
Với cấu trúc:
Hid Enable
Khai báo: void Hid Enable(unsigned readbuff, unsigned writebuff);
Trả về: không
Diễn tả: Cho phép giao tiếp USB HID. Tham số readbuff và writebuff
là Buffer Đọc và Viết Buffer, tương ứng, mà được sử dụng để giao tiếp HID.
3.1 Thiết kế phần cứng hệ thống 28
thư viện USB HID.
Yêu cầu: Không
Ví dụ: Hid Enable(&rd, &wr);
Hid Read
Khai báo: unsigned char Hid Read(void);
Trả về: Số lượng các ký tự trong Đọc Buffer nhận được từ các máy chủ.
Diễn tả: Nhận được tin nhắn từ máy chủ và lưu nó trong bộ đệm đọc.
Hàm trả về số lượng các ký tự nhận được trong bộ đệm đọc.
Yêu cầu: USB HID cần phải được kích hoạt trước khi sử dụng chức năng
này.
Ví dụ: get = Hid Read();
Hid Write
Khai báo: unsigned short Hid Write(unsigned writebuff, unsigned short
len);
Trả về: Nếu việc truyền dữ liệu đã không thành công, hàm trả về 0. Nếu
không, nó trả về số lượng byte truyền được
Diễn tả: Hàm gửi dữ liệu từ Buffer Viết writebuff đến máy chủ. Viết
Buffer có cùng một tham số như được sử dụng trong khởi tạo; xem Hid Enable. Len tham số cần để xác định chiều dài của dữ liệu sẽ được truyền
Yêu cầu: USB HID cần phải được kích hoạt trước khi sử dụng chức năng
này. Ví dụ:
// Thử đến khi thành công: while (!HID Write(writebuff, 1));
Hid Disable
Khai báo: void Hid Disable(void);
Trả về: không
Diễn tả: Ngắt giao tiếp USB
Yêu cầu: USB HID cần phải được kích hoạt trước khi sử dụng chức năng
này.
Ví dụ: Hid Disable();
Đoạn mã nguồn dùng để kiểm tra việc truyền thông:
Ví dụ sau liên tục gửi các số 0 .. 255 đến PC qua USB(Universal Serial Bus). usbdsc.c phải được bao gồm trong dự án.
unsigned short m, k;
3.1 Thiết kế phần cứng hệ thống 29
unsigned short userWR_buffer[64]; void interrupt() {
asm CALL _Hid_InterruptProc asm nop
}
void Init_Main() {
// Disable all interrupts
// Disable GIE, PEIE, TMR0IE, INT0IE,RBIE INTCON = 0;
INTCON2 = 0xF5; INTCON3 = 0xC0;
// Disable Priority Levels on interrupts RCON.IPEN = 0;
PIE1 = 0; PIE2 = 0; PIR1 = 0; PIR2 = 0;
// Configure all ports with analog function as digital ADCON1 |= 0x0F; // Ports Configuration TRISA = 0; TRISB = 0; TRISC = 0xFF; TRISD = 0xFF; TRISE = 0x07; LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATE = 0;
// Clear user RAM
// Banks [00 .. 07] ( 8 x 256 = 2048 Bytes ) asm { LFSR FSR0, 0x000 MOVLW 0x08 CLRF POSTINC0, 0 CPFSEQ FSR0H, 0 BRA $ - 2 } // Timer 0 T0CON = 0x07; TMR0H = (65536-156) >> 8; TMR0L = (65536-156) & 0xFF;
INTCON.T0IE = 1; // Enable T0IE T0CON.TMR0ON = 1;
}
/** Main Program Routine **/ void main() {
Init_Main();
Hid_Enable(&userRD_buffer, &userWR_buffer); do {
for (k = 0; k < 255; k++) { // Prepare send buffer
3.2 Thiết kế hướng đối tượng phần mềm hệ thống [2] 30 Hid_Write(&userWR_buffer, 1); } } while (1); Hid_Disable(); } //————————————————- 3.1.4 Khối nguồn
Khối nguồn là khối cần đến sự ổn định của điện áp, đảm bảo điện áp đúng thiết kế để cung cấp cho toàn bộ mạch. Khối nguồn được thiết kế
theo sơ đồ hình 3.12[15] .
Hình 3.12: Khối nguồn
Nguồn ở đây đã là nguồn điện áp thấp, đầu vào sau bộ biến áp có giá trị từ 8-16v, qua nắn dòng bởi diode mắc hình cầu.
Nếu cần nguồn có mức điện áp khác, ta có thể dùng LM78xx (giá trị điện áp ra sau ổn áp, ví dụ: 05, 08, 12,..) với điện áp dương và LM79xx với điện áp âm, trong đó có thể dùng nguồn máy tính.
3.2 Thiết kế hướng đối tượng phần mềm hệ thống [2]
Phần mềm là một sản phẩm được phát triển hay được kỹ nghệ hoá và được chế tạo tương tự như các sản phẩm công nghiệp (phần cứng) khác. Phát triển phần mềm và chế tạo phần cứng cũng có những điểm tương đồng: đều là sản phẩm và chất lượng của chúng phụ thuộc nhiều vào
3.2 Thiết kế hướng đối tượng phần mềm hệ thống [2] 31