![]() |
Các bác cho em hỏi về ADC và LCD
Chào các bác !!!
Vấn đề của em là như thế này, em thấy trong PIC (16f877A), bộ ADC max là 10 bit, tuy nhiên lại có rất nhiều đầu vào analog, các bác thử tư vấn cho em xem có cách nào nâng độ phân giải của ADC lên ko ? Chứ nếu sử dụng bộ ADC ở ngoài thì tốn kém quá, lại lãng phí tài nguyên sẵn có trong PIC. Em nghĩ nếu mình chia điện áp ở đầu vào analog thành 2, rồi đưa và 2 chân analog, như vậy liệu có nâng được độ phân giải của ADC lên thành 11 bit ko nhỉ ? Các bác cho em hỏi 1 câu nữa về LCD, em muốn lập trình cho con LCD 20x4, trong CCS có sẵn driver, nhưng nó lại cố định các chân điều khiển LCD rồi, mình ko tác động được, em có down driver từ trên mạng, nhưng khi mô phỏng, thấy chỉ dùng được cho con 16f877, còn với con 16f877A thì chịu, ko bit đây có phải là lỗi của proteus hay ko, vì em chưa thử mạch thực tế nên chưa biết nó có chạy được ko !!! Nếu bác nào có driver cho lcd 20x4 thì share cho em với nhé. Em xin cảm ơn rất nhiều ạ ! |
Trích:
Thân, |
Em định dùng cho bộ cân điện tử bác ạ !
PIC18 em chưa tìm hiểu , nhưng chắc giá cả đắt hơn con PIC16 nhiều đúng ko ạ ? Em chỉ nghĩ với phần cứng như vậy (con PIC16 ấy), mình làm thế nào để tận dụng hết khả năng của nó, chứ nếu dùng con khác, thì có nhiều cách lắm. À, bác có driver cho lcd 20x4 ko ạ, bác send cho em với nhé ! Em xin cảm ơn bác rất nhiều ạ !!! |
Driver cho LCD CCS có sẵn thư viện mà bạn. chỉ cần khai báo
#include <lcd.c>//đường dẫn đến driver của thư viện hoặc #include "lcd.c" // đường dẫn đến driver nằm cùng thư mục project sau #use delay là đc còn định nghĩa cho các chân thì bạn thêm đoạn này vào đoạn đầu của driver lcd.c Code:
#define LCD_ENABLE_ PIN PIN_B3 //// Nếu bạn nào chưa có (hoặc có nhưng phiên bản khác thì có thể tham khảo) file đính kèm http://www.mediafire.com/?iqzzwmiurtm (sao diễn đàn ko up đc file nhỉ?!) Ý tưởng ADC của bạn khá hay nhưng phải làm mạch ngoài và vref khá chính xác Tui có thể nói lại ý tưởng của bạn như sau: Chia đôi mức điện áp với Vref bằng mức điện áp chia đôi này giả sử Vref=2.5V Vậy từ 0-2.5V bạn đưa vào AN0. Từ 2.5 đến 5V bạn đưa vào AN1 (có thể dùng điôt ổn áp hoặc mạch giới hạn để mức điện áp vào từ 2.5-5V đưa vào AN1 cũng là 0 -2.5v) trong phần mềm... bạn đọc giá trị của AN0 và AN1 rồi cộng dồn... sẽ đc 11bit ngay. Mạch ngoài cũng khá phức tạp đây :( |
Cám ơn bạn đã cho ý kiến !
Việc chỉnh Vref mình nghĩ có thể dùng 1 con DAC, như vậy chắc điện áp ra chính xác (đây mới chỉ là ý tưởng thôi chứ mình cũng chưa test thử). Cái file lcd.c của bạn hình như chỉ dùng được cho lcd 2 dòng thôi thì phải, mình đã thử add vào chương trình, nhưng ko hiểu sao nó lại báo lỗi 133 : "Interrupt handler uses too much stack". Bạn nào biết lỗi này xử lí thế nào ko ? Mình dùng thư viện chuẩn trong ccs thì ok, nhưng cứ dùng thư viện down trên mạng là bị báo lỗi. Xin cám ơn các bạn rất nhiều !!! |
Xin lỗi vì ko đọc kỹ đầu bài, đó đúng là cho LCD20x2 nhưng nó chạy tốt với 2 dòng mà.
Tui vừa sửa sang lại chút xíu driver LCD gốc để hoạt động cho 4 line (và mới test bằng proteus, chưa làm thử thực tế) http://www.mediafire.com/?tvjmzfchrxm Code:
#include <16F877A.h> http://farm3.static.flickr.com/2681/...b6f948c205.jpg |
Cám ơn bạn nhé, để mình test xem thế nào đã, thực tế mình cũng hơi lười :D, ngại ko đọc code LCD, nên chỉ lên mạng tìm có code sẵn nào rồi down về thôi :D
|
Bạn ạ, cái thư viện đó của bạn chạy tốt khi mình test, nhưng ko hiểu sao cứ add vào cái đoạn code mà mình đang viết là nó lại báo cái lỗi trên :lỗi 133 : "Interrupt handler uses too much stack".
Mình thử bỏ ngắt ngoài (tại chân B0) đi thì ok. Ko hiểu sao có ngắt nó lại ko chạy được. Bạn biết vì sao ko ? giúp mình với, cảm ơn bạn nhiều nhé !!! |
!!!
Trích:
Cái thông báo lỗi 133 như sau: " Bộ quản lý ngắt sử dụng quá nhiều ngăn xếp" --> Mình nghĩ nguyên nhân là do chân PB0 đã được định nghĩa dùng cho LCD. Code:
#define LCD_ENABLE_PIN PIN_B2 //// |
Trích:
|
Cám ơn các bạn đã giúp đỡ !
Mình vừa sửa lại rồi, đổi hết các chân nối với LCD vào cổng D, nhưng nó vẫn báo lỗi như vậy bạn ạ !!! Đúng là trong ngắt mình có sử dụng hàm của LCD, nhưng mình nghĩ chắc ko ảnh hưởng gì cả, mình dùng thư viện of CCS thì vẫn dùng bình thường mà. Trong thiết kế of mình, bắt buộc phải sử dụng ngắt, mình ko hiểu lỗi trên là do đâu nữa !!! Rất mong các bạn giúp đỡ !!! |
Bạn post cái Project lên đây cho mọi người cùng kiểm tra nào!
Thực mục sở thị sẽ dễ bắt lỗi hơn đó. :') |
cho em hỏi tí mọi người .
em dùng 6 kenh ADC trong pic 16f877a. khi setup_adc_ports(AN0); .....để đọc gia trị thì ok . setup_adc_ports(AN1); CCS báo lỗi không AN1 không dc định nghĩa. nhưng khi tạo ccs em đã chọn là dùng 6 bộ ADC rùi mà ? mọi người giúp em với |
Đây là code của mình :
Code:
//============================================================================== Rất mong được các bạn giúp đỡ. Xin cảm ơn rất nhiều !!! |
Trích:
|
Múi giờ GMT. Hiện tại là 07:51 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam