|
Tài trợ cho PIC Vietnam |
Luận văn tốt nghiệp Nếu bạn thắc mắc vì sao chúng tôi muốn phổ biến các luận văn tốt nghiệp? Xin xem tại đây |
|
Ðiều Chỉnh | Xếp Bài |
|
03-01-2010, 11:00 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 18
: |
Giúp em về vấn đề hiển thị trên lcd !!
Tình hình là em đag làm đồ án về dụng cụ đo điện áp xài con pic16f88, áp được đưa vào adc và hiển thị lên LCD. Vấn đề em gặp phải là thông số điện áp trên LCD nháy quá nhiều, đôi lúc nhảy những giá trị o chính xác.
Đây là code chương trình của em : [code]#include <16f88.h> #include <def_88.h> #device *=16 ADC=10 #fuses NOWDT, HS, PUT, NOLVP #use delay(clock=4000000) #use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bi ts=8) #include <LCD_4BIT16F88edit.C> // Thu vien ham cho LCD #include <stdio.h> #include <stdlib.h> #include <math.h> int16 temp; int8 nghin,tram,chuc,donvi; int1 mili_volt; float volt; void convert_bcd(int16 x) { nghin = x / 1000 +0x30; temp = x % 1000; tram = temp / 100 +0x30; temp = temp % 100; chuc = temp / 10 +0x30; donvi = temp % 10 +0x30; } void main( ) { set_TRIS_B(0x00); LCD_init(); delay_ms(100); LCD_Putcmd(0X80); printf(LCD_putchar,"DIEN AP "); setup_adc( ADC_CLOCK_INTERNAL ); Setup_ADC_ports (0); Set_ADC_channel (0) ; Delay_us (100); while (1){ temp = read_adc() ; volt=(float)(temp*5)/1023; volt=volt*1000; convert_bcd((int16)volt); lcd_putcmd(0xc0); {printf(lcd_putchar,"U= "); lcd_putchar(nghin); lcd_putchar("."); } lcd_putchar(tram); lcd_putchar(chuc); lcd_putchar(donvi); printf(lcd_putchar," V"); printf("%u.%u%u%u",nghin-0x30,tram-0x30,chuc-0x30,donvi-0x30); } }[code] Tuy nhiên, trước khi vào adc của pic thì em có dùng cái mạch phân áp như sau nữa, o bit có tạo nhiễu nhiều hay o ??!! Các bác có cao kiến gì thì chỉ giáo dùm em với, e sắp bảo vệ rùi nên mong các bác hồi âm sớm ah !! thầy em có bảo là dùng thuật toán cộng giá trị trung bình (gttb) j đó rùi hiển thị thì sẽ bớt nháy đi tuy nhiên e ko bit phải làm sao để lấy ra các lần xuất ra để tính gttb nữa !! mong các ace giúp đỡ !! Thanks !!!
__________________
ALWAYS BE U !! HEHEHE |
27-06-2012, 05:15 PM | #2 |
Đệ tử 1 túi
Tham gia ngày: May 2012
Bài gửi: 12
: |
Hiện nay mình có các mạch điện sau:
1.Giải mã remote sony điều khiển các thiết bị điện từ xa,mạch đã chạy ngon,đã từng bán ra thị trường. 2.Giải mã pt2262/pt2272 điều khiển thiết bị từ xa bằng sóng RF 3.Giải mã pt2248/pt2249 điều khiển thiết bị từ xa dùng sóng hồng ngoại 4.Lập trình đồng hồ có phím chỉnh giờ,phút,giây,hẹn giờ. 5.Lập trình điều khiển led đơn,tạo và thay đổi cường độ sáng cho led,lập trình sáng dồn,sáng chạy,sáng dần 32 led,... 6.Lập trình điều khiển hệ thống đèn giao thông 7.Lập trình chạy chữ trên led ma trận 8.Lâp trình giao tiếp máy tính 9.Lập trình và làm mạch điều khiển xe từ xa,điều khiển động cơ DC 10.Lập trình và điều khiển volume từ xa 11.Dạy vẽ hình ảnh,dạng sóng,đồ thị hàm số,hệ mặt trời và các hành tinh đang chuyển động trên Pascal,C,C++,C# 12.Dạy lập trình vi điều khiển 13.Dạy lập trình PLC bằng ngôn ngữ LAD 14.Dạy vẽ mạch in trên phần mềm protues,vẽ bằng tay,vẽ tự động,tạo chân linh kiện. 15.Làm mạch nguồn hạ áp trực tiếp không dùng biến áp 16.Lập trình làm đồng hồ thời gian thực giao tiếp ds1307,làm đồng hồ vạn niên,lập trình trên 8051 và pic. 17.Hướng dẫn sử dụng các phần mềm liên quan.Bao gồm các phần mềm lập trình cho chip,các phần mềm lập trình hình ảnh và các phần mềm mô phỏng,vẽ mạch in,vẽ mạch nguyên lý. 18.Hiển thị ký tự,hiển thị số đếm trên LCD ... số phone liên hệ: 0166.495.1093 |
03-01-2010, 08:16 PM | #3 |
Đệ tử 5 túi
Tham gia ngày: Sep 2007
Bài gửi: 94
: |
1. Kiểm tra hiển thị LCD có đúng không?
2. Bạn lấy đồng hồ số đo điện áp xem nó có bị nhảy không.... 3. Nếu bước 2 ổn rồi bạn kiêm tra nguồn đưa vào chân Vref+/Vref- có ổn định không?(cái này quan trọng lắm) 4. Nếu bước 3 ổn rồi bạn cấu hình tấc độ adc thấp nhất có thể và bắt đầu đo xem sao. 5, Nếu vẫn không được thay con pic khác xem sao? 6. Nếu vẫn không được tôi pó tay. !
__________________
Windows CE 6 R3 |
04-01-2010, 04:32 PM | #4 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 18
: |
fix !!
dù sao thì cũng cảm ơn các bác nhìu !! các bác quả là rất nhiệt tình trong việc reply bài post của mình, hehe.
Thứ 1, việc hiển thị lên LCD thì o cần phải bàn (đã ok), sai số ở đây o liên quan j đến LCD cả, có sai là ở chỗ khắc phục việc lấy mẫu ADC như bác tungdh đã nói ( mình xài adc_clock_internal), hoặc do nhiễu đến từ các mạch module. Thứ 2, ở đây mình đưa ra ý kiến dùng phương pháp lấy giá trị trung bình là mún các bác giúp mình hỉu rõ hơn cũng như bác nào có cao kiến j thì cho mình được học hỏi. Thứ 3, việc hiển thị là khá chính xác rùi. VD khi o có nhuồn đo thì hiển thị 0,000v tuy nhiên đôi lúc lại hiển thị 0.004 hay 0,009v. Khi có nguồn đo thì thông số hiển thị nháy nhiều, mình dã chỉnh lại thời gian delay nhưng vẫn nháy ở 1 mức độ nào đó ( cug có thể tạm chấp nhận dc), nhưng mình vẫn mún khắc phục điều này đến mức có thể !!! Thân !!
__________________
ALWAYS BE U !! HEHEHE |
04-01-2010, 06:11 PM | #5 | |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 81
: |
Trích:
ví dụ dưới đây là lấy 5 mẫu: Code:
ketqua[k]=read_adc(); k++; if(k>4)k=0;//lay 5 mau de chia trung binh aver=0; for(i=0;i<5;i++) aver+=ketqua[i]; aver=aver/5; => dua aver ra tinh toan va hien thi |
|
04-01-2010, 10:47 PM | #6 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 18
: |
hehe
đúng là cái mình đag cần. Mình chưa test thử nhưng nhìn sơ qua đoạn code của bạn mình cũng đã hỉu rõ hơn 1 chút về thuật toán này, đúng là hay thật. Thanks nhanh0112 đã chỉ giáo nhé !!
__________________
ALWAYS BE U !! HEHEHE |
20-03-2010, 04:23 PM | #7 |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 4
: |
khởi tạo LCD
chào mọi người
Nhân tiện có luồng bàn về LCD, mình đang sử dụng LCD 1602 và giao tiếp 4 bit sử dụng file thư viện lcd_lib_4bit.c trong tutorial của anh Linh nhưng có cái hàm LCD_setPosition mình còn chưa hiểu rõ, mọi người có thể giải trích dùm mình được không Code:
#separate void LCD_SetPosition ( unsigned int cX ) { /* this subroutine works specifically for 4-bit Port A */ LCD_SetData ( swap ( cX ) | 0x08 ); LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); LCD_PulseEnable(); |
|
|