LỚP DD07KSTN
LỚP DD07KSTN
LỚP DD07KSTN
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

LỚP DD07KSTN


 
Trang ChínhLatest imagesTìm kiếmĐăng kýĐăng Nhập
May 2024
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendarCalendar
Latest topics
» simviettel.net bán sim đẹp Viettel, số đẹp Vinaphone, sim số đẹp Mobifone 10 số
ADC_XUẤT LCD I_icon_minitimeThu Nov 07, 2013 2:59 pm by simviettel.net

» đo nhiệt độ
ADC_XUẤT LCD I_icon_minitimeFri Nov 09, 2012 11:56 pm by trongthanh

» Mạch cầu H kích FET dùng IR2110
ADC_XUẤT LCD I_icon_minitimeTue Aug 07, 2012 7:26 pm by Ultra

» HƯỚNG DẪN THIẾT KẾ FANLED CỦA CLB
ADC_XUẤT LCD I_icon_minitimeTue Jan 10, 2012 11:17 pm by dcthuan.cdt

» Thông báo! Giải bóng đá CUP KSTN mùa giải 2011
ADC_XUẤT LCD I_icon_minitimeMon Nov 07, 2011 8:52 pm by lethanhtoan

» điểm danh xem ai đang làm gì
ADC_XUẤT LCD I_icon_minitimeThu Sep 22, 2011 12:18 pm by vanquy311

» về ngày hội việc làm và phỏng vấn thử thành công thật
ADC_XUẤT LCD I_icon_minitimeThu Sep 22, 2011 12:07 pm by vanquy311

» cần trao đổi
ADC_XUẤT LCD I_icon_minitimeThu Sep 22, 2011 11:19 am by blue

» cùng nhau hoàn thành tốt luận văn
ADC_XUẤT LCD I_icon_minitimeWed Sep 21, 2011 2:56 pm by biganaru

Keywords
tượng phân hiện 2011 2010

 

 ADC_XUẤT LCD

Go down 
2 posters
Tác giảThông điệp
Lee
phó tổng giám đốc
phó tổng giám đốc
Lee


Tổng số bài gửi : 106
Join date : 29/12/2009
Age : 34
Đến từ : Tây Ninh

ADC_XUẤT LCD Empty
Bài gửiTiêu đề: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeTue Jun 01, 2010 4:55 pm

Chương trình đã chạy trên phần cứng. ADC_XUẤT LCD Icon_geek ADC_XUẤT LCD Icon_geek ADC_XUẤT LCD Icon_geek
Trích dẫn :
/****************************************************************
*
* PIC Training Course
*
****************************************************************/

/****************************************************************
*
* Module : main.c
* Description : ADC_LCD
* Tool : HI-TECH PIC
* Chip : 16F887A
* History : 19/05/2010
*
* Author : Mai Khac Hiep, CLB NCKH
* Notes :
*
*
****************************************************************/


/****************************************************************
* IMPORT
****************************************************************/

#include <htc.h>
#include "lcd.h"
#include "stdlib.h"
__CONFIG(XT & WDTDIS & PWRTEN & MCLREN & UNPROTECT & SWBOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. word

__CONFIG(BORV21); //2st config. word



/*****************************************************************
GLOBAL VARIABLE
******************************************************************/

unsigned char ngan=1,tram=1,chuc=1,dvi=1;

/*****************************************************************
* ROUTINES
******************************************************************/
void setup_ADC(void);
void setup_LCD(void);
void hienthi(void);
void setup_interrupt(void);
/*****************************************************************
******************************************************************/
void setup_ADC(void)
{ unsigned char i=0;
ANSEL=0xFF;// NGO VAO ANALOG
ADFM=1; // KET QUA LAP DAY BEN PHAI
VCFG1=0; // TAM TOAN THANG=5V
VCFG0=0;
ADCON0=0b00001111;// Fs=Fosc/2...CHON KENH AN3...BAT ADON
TRISA3=1;
ADRESH=0x00;
ADRESL=0x00;
for(;i<10;i++) __delay_ms(100);
}
void setup_LCD(void)
{lcd_init();
lcd_puts("Vin = ");
}
void setup_interrupt(void)
{ GIE=1;
ADIE=1;
ADIF=0;
PEIE=1;
}
void hienthi(void)
{ unsigned char i=0;
lcd_gotoxy(7,0);
lcd_putc(0x30+ngan);
lcd_putc('.');
lcd_putc(0x30+tram);
lcd_putc(0x30+chuc);
lcd_putc(0x30+dvi);
lcd_puts(" V");
for(;i<10;i++) __delay_ms(100);
}
void interrupt isr()
{ long von=0;
if(ADIE && ADIF && PEIE)
{
ADIF = 0;
von=ADRESH*256+ADRESL;
von=(5*von*1000/1024) ; // lay chinh xac 0.001
dvi= von%10;
von=(von-dvi)/10; //
chuc=von%10;
von=(von-chuc)/10;
tram=von%10;
von=(von-tram)/10;
ngan=von%10;
}
}

/****************************************************************
* MAIN
****************************************************************/

/* -- void main (void) -----------------------------------------
*
* Description : Doc dien ap tu chan RA3, xuat len LCD
*/

void main(void)
{ setup_LCD();
setup_interrupt();
setup_ADC();
while(1)
{ GODONE=1;
while(GODONE); //cho xu li xong moi xuat
hienthi();
}
}

/****************************************************************
* END OF standard form.c
****************************************************************


Được sửa bởi Lee ngày Tue Jun 01, 2010 6:49 pm; sửa lần 1.
Về Đầu Trang Go down
rockc4
trưởng phòng
trưởng phòng



Tổng số bài gửi : 35
Join date : 30/03/2010

ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeTue Jun 01, 2010 5:25 pm

Góp ý:
Các rountines viết trước main không cần khai báo như thế này:

Trích dẫn :

void setup_ADC(void);
void setup_LCD(void);
void hienthi(void);
void setup_interrupt(void);
---> chỉ cần khai báo nếu rontines được viết sau main().

Trích dẫn :

unsigned char ngan=1,tram=1,chuc=1,dvi=1;
Khi có cách khác thì không nên đặt biến toàn cục nhiều (tốn bộ nhớ)
ví dụ:

Trích dẫn :

void hienthi(char ngan, char chuc, char tram, char dvi)
{ unsigned char i=0;
lcd_gotoxy(7,0);
lcd_putc(0x30+ngan);
lcd_putc('.');
lcd_putc(0x30+tram);
lcd_putc(0x30+chuc);
lcd_putc(0x30+dvi);
lcd_puts(" V");
for(;i<10;i++) __delay_ms(100);
}

gọi hàm hiển_thị() trong chương trình ngắt luôn, trong main() không cần phải làm j cả.
Cách gọi sẽ như sau:
Trích dẫn :

hienthi(ngan, chuc, tram, dvi);

Theo cách Hiệp đang viết, tất nhiên trong chương trình ngắt phải khai báo các biến ngan, chuc, tram, dvi là biến kiểu char ở đoạn đầu chtrinh ngắt.

Cách viết khác có thể tốt hơn như sau:
trong chương trình ngắt chỉ tính toán tới von=(5*von*1000/1024) ; thôi,
đối số truyền cho hàm con hien_thi() là von, như sau
(von chọn kiểu unsinged int là được 16bit rồi)

- trong chương trình ngắt gọi hàm con
Trích dẫn :

hien_thi(von);
- chương trình con hien_thi() sửa lại như sau:
Trích dẫn :

void hien_thi(unsigned int von)
{
khai báo các biến chuc, tram, dvi ...
tính các giá trị đó từ von
hiển thị lên LCD từng kí tự 1
}
Về Đầu Trang Go down
Lee
phó tổng giám đốc
phó tổng giám đốc
Lee


Tổng số bài gửi : 106
Join date : 29/12/2009
Age : 34
Đến từ : Tây Ninh

ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeTue Jun 01, 2010 6:15 pm

1. Em đã thử để chương trình con hienthi() trong ngắt rồi, nhưng biên dịch báo lỗi tràn bộ nhớ, chắc có lẽ do vòng lặp hay sao ấy, nên để nó trong main.
2. Biến von trong chương trình con phải để kiểu long chị àh, tại phép toán von=von*5*1000 chắc chắn là sẽ tràn nếu von là unsigned int( vì kiểu unsigned int tầm từ 0-65535), gây sai kết quả! Nếu chia 1024 trước để tránh tràn số thì kết quả cũng sai luôn do đây là phép chia nguyên, nó tự động bỏ phần thập phân, do đó sẽ ko lấy được kết quả chính xác tới 0.001.
3. Phần chương trình con, lần sau em sẽ cố gắng tránh sử dụng biến toàn cục. Thanks!
ADC_XUẤT LCD Icon_geek ADC_XUẤT LCD Icon_geek ADC_XUẤT LCD Icon_geek
Về Đầu Trang Go down
rockc4
trưởng phòng
trưởng phòng



Tổng số bài gửi : 35
Join date : 30/03/2010

ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeTue Jun 01, 2010 6:56 pm

Chị chỉnh lại 1 chút bài của Hiệp
(biến Von để kiểu long như Hiệp nói)
Trích dẫn :

/****************************************************************
*
* PIC Training Course
*
****************************************************************/

/****************************************************************
*
* Module : main.c
* Description : ADC_LCD
* Tool : HI-TECH PIC
* Chip : 16F887A
* History : 30/05/2010
*
* Author : Mai Khac Hiep, CLB NCKH
* Notes :
*
*
****************************************************************/


/****************************************************************
* IMPORT
****************************************************************/

#include <htc.h>
#include "lcd.h"
#include "stdlib.h"
__CONFIG(XT & WDTDIS & PWRTEN & MCLREN & UNPROTECT & SWBOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. word

__CONFIG(BORV21); //2st config. word



/*****************************************************************
GLOBAL VARIABLE
******************************************************************/

//unsigned char ngan=1,tram=1,chuc=1,dvi=1;

/*****************************************************************
* ROUTINES
******************************************************************/
/*void setup_ADC(void);
void setup_LCD(void);
void hienthi(void);
void setup_interrupt(void);*/
/*****************************************************************
******************************************************************/
void setup_ADC(void)
{ unsigned char i=0;
ANSEL=0xFF;// NGO VAO ANALOG
ADFM=1; // KET QUA LAP DAY BEN PHAI
VCFG1=0; // TAM TOAN THANG=5V
VCFG0=0;
ADCON0=0b00001111;// Fs=Fosc/2...CHON KENH AN3...BAT ADON
TRISA3=1;
ADRESH=0x00;
ADRESL=0x00;
for(;i<10;i++) __delay_ms(100);
}
void setup_LCD(void)
{lcd_init();
lcd_puts("Vin = ");
}
void setup_interrupt(void)
{ GIE=1;
ADIE=1;
ADIF=0;
PEIE=1;
}
void hienthi(long von)
{
unsigned char i=0, dvi, chuc, ngan, tram;

dvi= von%10;
von=(von-dvi)/10;
chuc=von%10;
von=(von-chuc)/10;
tram=von%10;
von=(von-tram)/10;
ngan=von%10;
lcd_gotoxy(7,0);
lcd_putc(0x30+ngan);
lcd_putc('.');
lcd_putc(0x30+tram);
lcd_putc(0x30+chuc);
lcd_putc(0x30+dvi);
lcd_puts(" V");

for(;i<10;i++) __delay_ms(100);
}

/* -- void interrupt isr() -----------------------------------------
*
* Description : Cho ngat ADC, hien thi ket qua len LCD, 3 chu so thap phan
*/
void interrupt isr()
{ long von=0;
if(ADIE && ADIF && PEIE)
{
ADIF = 0;
von=ADRESH*256+ADRESL;
von=(5*von*1000/1024) ; // lay chinh xac 0.001
hienthi(von);
}
}

/****************************************************************
* MAIN
****************************************************************/

/* -- void main (void) -----------------------------------------
*
* Description : Doc dien ap tu chan RA3, xuat len LCD
*/

void main(void)
{ setup_LCD();
setup_interrupt();
setup_ADC();
while(1)
{
__delay_us(50); //delay giua 2 lan doc ADC
GODONE=1; //bat dau doc
//while(GODONE); khong can thiet, cho ngat
}
}

/****************************************************************
* END OF standard form.c
****************************************************************/

Lệnh while(GODONE); là không cần thiết, vì em chờ ngắt ADC, lệnh này chỉ dùng khi polling xem đã đọc ADC xong chưa.
P/S: Viết cách của Hiệp cũng tốt, chị chỉ hướng dẫn thêm việc gọi 1 hàm con có chứa đối số thì phải làm thế nào cho các bạn chưa biết
Smile
Về Đầu Trang Go down
40903079
Khách viếng thăm




ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeSun Jan 02, 2011 1:47 pm

Các anh chị cho em hỏi, có thể dùng nhiều chân ADC trong con PIC16f887 được k ạh?
Cảm ơn các anh chị nhiều!!! ADC_XUẤT LCD 9474
Về Đầu Trang Go down
Lee
phó tổng giám đốc
phó tổng giám đốc
Lee


Tổng số bài gửi : 106
Join date : 29/12/2009
Age : 34
Đến từ : Tây Ninh

ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeSun Jan 02, 2011 2:15 pm

Pic 16F887 có đến 13 kênh ADC . Nhiêu đó đủ chưa em ! Smile Smile Smile
Về Đầu Trang Go down
40903079
Khách viếng thăm




ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeSun Jan 02, 2011 6:20 pm

Ý em muốn hỏi là dùng cùng lúc nhiều chân ấy!
Về Đầu Trang Go down
Lee
phó tổng giám đốc
phó tổng giám đốc
Lee


Tổng số bài gửi : 106
Join date : 29/12/2009
Age : 34
Đến từ : Tây Ninh

ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeSun Jan 02, 2011 8:01 pm

À dĩ nhiên là được rồi, nếu ko dùng cùng lúc đc thì người ta làm ra 13 kênh đó để làm gì ? Very Happy Very Happy

Để config sử dụng dc thì chỉ cần config cho nó là chân analog bằng ANSEL và ANSELH, rồi trong code ADC thì mình config thanh ghi chọn kênh là xong.

Thân.
Về Đầu Trang Go down
40903079
Khách viếng thăm




ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitimeSun Jan 02, 2011 11:58 pm

ADC_XUẤT LCD 9474 ADC_XUẤT LCD 9474 ADC_XUẤT LCD 9474 ADC_XUẤT LCD 9474 ADC_XUẤT LCD 9474 Cảm ơn anh nhiều!
Về Đầu Trang Go down
Sponsored content





ADC_XUẤT LCD Empty
Bài gửiTiêu đề: Re: ADC_XUẤT LCD   ADC_XUẤT LCD I_icon_minitime

Về Đầu Trang Go down
 
ADC_XUẤT LCD
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
LỚP DD07KSTN :: Câu lạc bộ nghiên cứu khoa học :: PIC 16-
Chuyển đến