PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 26-03-2009, 01:08 PM   #1
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Oa oa anh ơi, được rồi . Ha ha, thank anh nhiều lắm . May quá, em sửa mãi mà ko được, giờ mới được.
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 11:32 AM   #2
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
à, em còn 1 vấn đề là, em ghi giá trị đọc được từ ADC vào biến ADCvalue, sau đó, em dùng hàm chuyển đổi kiểu :
sprintf(Nhietdo, "%d",ADCvalue );
rồi dùng lệnh lcd_putstr(Nhietdo) (Hàm của anh Nam viết ở trang 2) để hiển thị lên LCD mà ko thấy gì cả. Anh xem hộ em mới
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 05:13 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi silvadk2 View Post
à, em còn 1 vấn đề là, em ghi giá trị đọc được từ ADC vào biến ADCvalue, sau đó, em dùng hàm chuyển đổi kiểu :
sprintf(Nhietdo, "%d",ADCvalue );
rồi dùng lệnh lcd_putstr(Nhietdo) (Hàm của anh Nam viết ở trang 2) để hiển thị lên LCD mà ko thấy gì cả. Anh xem hộ em mới
Bạn khai báo Nhietdo như thế nào?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-04-2009, 10:27 AM   #4
thuyenld
Đệ tử 2 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 32
:
cho em hỏi :
em làm mạch LCD nhưng đi dây nhầm nối 4 chân data của LCD : DB0...DB3 thì có chạy được ko?(theo tutorial thì là DB4...DB7)
Nếu được thì code phải sửa như nào?
em cảm ơn.
thuyenld vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-04-2009, 04:53 PM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi thuyenld View Post
cho em hỏi :
em làm mạch LCD nhưng đi dây nhầm nối 4 chân data của LCD : DB0...DB3 thì có chạy được ko?(theo tutorial thì là DB4...DB7)
Nếu được thì code phải sửa như nào?
em cảm ơn.
Chip điều khiển của module LCD chỉ dùng các chân DB4..DB7 cho chế độ 4 bit, do đó bạn phải sửa lại phần cứng, không còn cách nào khác.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-04-2009, 09:55 AM   #6
ltpbkis
Đệ tử 1 túi
 
ltpbkis's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: BKHN
Bài gửi: 14
:
Send a message via ICQ to ltpbkis
Hiển thị giá trị cua ADC ra LCD

Các bác cho em hỏi thêm nhé!
Em muốn hiển thị giá trị của đầu vào ADC ra LCd thi lam thế nào nhỉ? Giá trị của ADC được lưu ở ADCBUF, nhưng giá trị đó là dạng số nguyên. Khi muốn hiện thị dạng số thực ra LCD thì làm thế nào? Mình có thể chuyển đổi kiểu dữ liệu từ số nguyến sang dạng khác được ko?
Mong sớm nhận được hồi âm của các bác.
ltpbkis vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-04-2009, 05:24 PM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi ltpbkis View Post
Các bác cho em hỏi thêm nhé!
Em muốn hiển thị giá trị của đầu vào ADC ra LCd thi lam thế nào nhỉ? Giá trị của ADC được lưu ở ADCBUF, nhưng giá trị đó là dạng số nguyên. Khi muốn hiện thị dạng số thực ra LCD thì làm thế nào? Mình có thể chuyển đổi kiểu dữ liệu từ số nguyến sang dạng khác được ko?
Mong sớm nhận được hồi âm của các bác.
Giả sử điện áp tham chiếu (reference voltage) của bạn là 5 V, và bạn đang dùng ADC 10-bit, giá trị nguyên x mà bạn đọc vào sẽ tương ứng với giá trị thực x*5/1024 V. Bạn dùng công thức này để tính ra giá trị thực. Sau đó dùng hàm sprintf() để chuyển giá trị thực đó thành một chuỗi ký tự biểu diễn cho số thực tương ứng, rồi xuất chuỗi ký tự đó đến LCD để hiển thị.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-04-2009, 04:51 PM   #8
ltpbkis
Đệ tử 1 túi
 
ltpbkis's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: BKHN
Bài gửi: 14
:
Send a message via ICQ to ltpbkis
Em đã thử nhưng không thành công. Bác có thể nói cụ thể hơn không nhỉ?
Em dùng lệnh sprintf nhưng trình biên dịch báo lỗi. Có cách nào khác để chuyển dữ liệu từ float sang chuỗi ký tự không bác?
ltpbkis vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2009, 04:21 PM   #9
popeye_ts22
Đệ tử 2 túi
 
popeye_ts22's Avatar
 
Tham gia ngày: Jul 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 42
:
Send a message via Yahoo to popeye_ts22
TUT của bác Nam về LCD trong C30 có áp dụng cho PIC24 được không ạ
__________________
Best Regard.
popeye_ts22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2009, 05:11 PM   #10
popeye_ts22
Đệ tử 2 túi
 
popeye_ts22's Avatar
 
Tham gia ngày: Jul 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 42
:
Send a message via Yahoo to popeye_ts22
Đoạn code sau em dựa vào thư viện lcd_lib_8bit của CCS, chạy trên CCS cho PIC24FJ128GA010 rùi nhưng khi chỉnh sửa cho sang C30 thì không báo lỗi nhưng cũng không thấy hiện tượng gì, các bác giúp em với
Code:
#include <p24FJ128GA010.h>
#include <string.h>
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2) 
_CONFIG2( FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRI)
///////////////////////
#define RS  LATD15
#define RW  LATD5
#define E   LATD4
#define LCD PORTE
/*Ham yeu cau goi lenh dieu khien LCD*/
   void comnwrt(void)
   {
      LATDbits.RS = 0;
      LATDbits.RW = 0;
      LATDbits.E  = 1;
      LATDbits.E  = 0;
      DelayMs(1);
   }
/*Ham yeu cau goi du lieu hien thi len LCD*/
   void datawrt(void)
   {
      LATDbits.RS = 1;
      LATDbits.RW = 0;
      LATDbits.E = 1;
      LATDbits.E = 0;
      DelayMs(1);
   }
void lcd_init(void)
   {
      DelayMs(100);   //   Tao tre 100ms cho LCD khoi dong
      LCD = 0x38;      //   Hai hang, ma tran dot 5*7, 8 bit interface
      comnwrt();
      LCD = 0x0C;      //   Bat hien thi, tat con tro
      comnwrt();
   }
void lcd_putcmd(unsigned int Cx)
   {
      LCD=Cx;
      comnwrt();
   }
void lcd_putchar(char Cx)
   {
     unsigned char x=0;unsigned char i=0;
      x=(strlen(Cx));  
      for(i=0;i<=x;i++)
      {
         if(Cx==' ')i=i+2;
         LCD=Cx;
         datawrt();
      }  
   }
///////////////////
int main(void)
{
	_TRISD4=0;
	LATDbits.E=0;
	_TRISD5=0;
	LATDbits.RW=0;
	_TRISD15=0;
	LATDbits.RS=0;
	TRISE=0xFFF0;
	lcd_init();
	DelayMs(1000);
	lcd_putcmd(0x01);
     while(1);
	{
	lcd_putcmd(0x80);
	lcd_putchar("PIC");
    DelayMs(5000);
	}
}
__________________
Best Regard.
popeye_ts22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-11-2009, 01:34 AM   #11
harakiri
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
Cám ơn anh Nam. Hàm delay là do em thử một trị khác trị tính toán ban đầu nên nó lung tung,không chính xác. Loay hoay tìm nhưng rốt cuộc lại bị lỗi là chưa gọi hàm Init_TMR1(). Một bài học đắt giá cho kinh nghiệm rất ít của em. Sau khi gửi lên máy tính xong, trong hàm main em viết thêm một câu lệnh nhận rất đơn giản (với biến temp em khai bao thuoc kieu char) rồi sau đó gửi ngược lên. Tuy nhiên nó lại không chạy. Nhân đây cho em hỏi, nếu mình muốn nhận về một chuỗi ký tự thì mình tách chuỗi thế nào để nhận được .
************************************************** *******
int main(void) {

InitClock(); // This is the PLL settings
Init_TMR1();
InitUART1(); // Initialize UART2 for 9600,8,N,1 TX/RX


while(1) { // The ever versatile Infinite Loop!
if (U1STAbits.URXDA==1)
{
temp=U1RXREG;
delay_ms(10);
U1TXREG=temp;
}
}
}
************************************************** ******
Còn khi em thử dùng hàm sau để kiểm tra thử :
*******************************
if (U1STAbits.URXDA==1){
U1TXREG='A';
}
else
{delay_ms(50);
U1TXREG='B';
}
********************************
thì kết quả là trên máy tính luôn nhận 'A'.

thay đổi nội dung bởi: harakiri, 08-11-2009 lúc 04:28 PM.
harakiri vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-11-2009, 10:10 PM   #12
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi harakiri View Post
Cám ơn anh Nam. Hàm delay là do em thử một trị khác trị tính toán ban đầu nên nó lung tung,không chính xác. Loay hoay tìm nhưng rốt cuộc lại bị lỗi là chưa gọi hàm Init_TMR1(). Một bài học đắt giá cho kinh nghiệm rất ít của em. Sau khi gửi lên máy tính xong, trong hàm main em viết thêm một câu lệnh nhận rất đơn giản (với biến temp em khai bao thuoc kieu char) rồi sau đó gửi ngược lên. Tuy nhiên nó lại không chạy. Nhân đây cho em hỏi, nếu mình muốn nhận về một chuỗi ký tự thì mình tách chuỗi thế nào để nhận được .
************************************************** *******
int main(void) {

InitClock(); // This is the PLL settings
Init_TMR1();
InitUART1(); // Initialize UART2 for 9600,8,N,1 TX/RX


while(1) { // The ever versatile Infinite Loop!
if (U1STAbits.URXDA==1)
{
temp=U1RXREG;
delay_ms(10);
U1TXREG=temp;
}
}
}
************************************************** ******
Còn khi em thử dùng hàm sau để kiểm tra thử :
*******************************
if (U1STAbits.URXDA==1){
U1TXREG='A';
}
else
{delay_ms(50);
U1TXREG='B';
}
********************************
thì kết quả là trên máy tính luôn nhận 'A'.
Nếu U1STAbits.URXDA bằng '1' thì có dữ liệu để đọc, nên đọc cho đến khi hết dữ liệu trong bộ đệm rồi hẵng dừng. Trong quá trình đọc có thể xuất dữ liệu ngược lại nguồn phát.

Đoạn code đầu tiên của bạn có gọi hàm delay_ms(), không rõ hàm này sẽ delay bao lâu, do đó không nên dùng nó. Đoạn code thứ hai thì rơi vào tình trạng nếu U1STAbits.URXDA bằng '1' thì nó sẽ luôn luôn rơi vào nhánh if, vì trong nhánh if đó bạn không bao giờ đọc dữ liệu ra khỏi bộ đệm để cờ URXDA được xóa về '0'.

Trong đoạn code thử của bạn, bạn nên bỏ hẳn lệnh gọi hàm delay_ms() đi, và phát ngay sau khi nhận được dữ liệu xem. Như vậy dsPIC sẽ chờ đến khi có dữ liệu và phát trả lại dữ liệu ngay khi đọc từ bộ đệm. Đây là cách tôi vẫn thử các module UART.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-12-2009, 12:03 AM   #13
ngoducbinh1987
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 29
:
Xem giùm em cái này với

em đang tập hiện LCD với dspic 30f4013. em có tham khảo mấy bài trong này và chỉnh sửa lại. Nhưng mà không thấy nó chạy gì cả. Anh em nào hảo tâm giúp mình với
ngoducbinh1987 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-05-2010, 01:59 AM   #14
kienvtc
Nhập môn đệ tử
 
Tham gia ngày: Aug 2005
Bài gửi: 1
:
Cho mình hỏi chút. Đã ai gặp trường hợp các chân RE8,RF2,RF3 không cấu hình được cho mục đích IO, các chân khác vẫn bình thường và thử qua một số mạch in khác nhau vẫn gặp trường hợp tương tự. Sử dụng module của dsPic như UART hay I2C vẫn chạy bình thường. Mình thử mọi cách mà ko được. Chắc cấu hình sai ở đâu đấy. Có bạn nào gặp trường hợp tương tự thì trả lời giúp.
kienvtc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-05-2010, 12:59 PM   #15
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
bạn phải cho biết loại chip mình dùng, có thể là cả mạch và code của bạn nữa thì mọi người mới giúp được.
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
alphanumeric lcd, input read

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Học CCS thông qua Tutorial PICVIETNAM FFGmember Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 105 08-09-2017 04:12 PM
dsPIC Tutorial 2-Các kỹ thuật cơ bản namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 33 17-10-2013 11:09 PM
dsPIC Tutorial 5-Module ADC và MCPWM namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 83 12-09-2013 10:33 PM
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 16 22-08-2012 12:35 AM
dsPIC Tutorial 4-Module UART và I2C namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 76 09-05-2012 10:55 AM


Múi giờ GMT. Hiện tại là 02:20 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam