![]() |
dsPIC Tutorial 6 - SPI module và quét LED ma trận
2 Attachment(s)
Tutorial này được bắt đầu khá lâu rồi, nhưng tôi quá bận để hoàn thành nó, do đó đến hôm nay mới post lên. Module SPI được giới thiệu qua 1 ví dụ, và việc quét LED ma trận cũng được minh họa qua 1 ví dụ khác (cho LED 8x8, nguyên tắc có thể mở rộng dễ dàng cho các kích thước khác). Chỉ có mã nguồn cho C30, vì tôi không có thời gian chuyển thành mã hợp ngữ.
Mã nguồn C30 cùng với tập tin hex được dịch sẵn nằm trong tập tin .rar. Code đã được thử nghiệm trên mạch thực, nhưng phần mạch cho LED đã bị thất lạc khi tôi chuyển nhà 2 lần, do đó tôi chỉ vẽ lại mạch nguyên lý theo suy luận từ code. Mọi góp ý, thắc mắc đề nghị các bạn post ở luồng này. Chúc các bạn thành công. Thân, |
cám ơn anh nhiều về tài liệu của dsPic. Em dang làm chương trinh về xuất kí tự đồ họa của CGRAM cua LCD . nhung vẩn chuă làm được. Anh có vi dụ nào về chương trinh này không(Viết bằng MPLAP, lập trình cho Pic 16f877a). monh sự giúp đỡ của các anh! Cám ơn rất nhiều
namqn: câu hỏi của bạn nên được đặt trong box "Cơ bản về vi điều khiển và PIC". |
Hiện nay em cũng rất quan tâm đến vấn đề Dspic đặc biệt trong đó có giao tiếp với máy tính qua SPI, nhưng túi tiền khá hạn chế theo mọi người em nên mua những gì để tiện cho việc thực hành, đạt hiệu quả một cách nhanh nhất và chi phí cũng ít nhứt. THanks
|
Trích:
Thân, |
các đại ca ơi?cho e hỏi mẫu của 1 chương trình ngắt dùng C30,e viết ngắt SPI ở chế độ slave để nhận dữ liệu và xuất ra 1 chân E0
|
các anh giúp e xem đoạn code này sai ở đâu với! e thử mà vẫn chưa chạy:
Code:
void __attribute__((__interrupt__)) _SPI1Interrupt(void) |
anh xem xem hộ em mới, em viết 1 hàm để ghi dữ liệu lên thẻ MMC rồi đọc, gửi lên mt mà không thấy được, xem hộ em xem sai ở chỗ nào :
unsigned int writeSector(unsigned long sector, unsigned char *buf) { unsigned int count=0; LATBbits.LATB8=0; MMCCommand(0x58,sector*32,0xFF); if (MMCResponse(0x00)) { SPIData(0xFF); SPIData(0xFE); for(count = 0; count < 32; count++) SPIData(buf[count]); SPIData(0xFF); SPIData(0xFF); } LATBbits.LATB8=1; SPIData(0xFF); return TRUE; } Còn đây là ctr chính : int main(void) { unsigned char Buf[32]; unsigned int i,j; SystemInit(); disk_initialize(); for(i=0;i<32;i++) Buf[i]=i; writesector(1,Buf); SendMessage(Buf); while(1); } em nạp rồi xem trong thẻ mà ko thấy có gì, hic. |
D:\Example\LED\main.c:556: undefined reference to `writesector'
Link step failed. Lỗi này sửa làm sao vậy các bác |
Trích:
Thân, |
ơ hơ, vậy mà em ko để ý, lỗi thế mà cũng phải hỏi bác, thank bác nhiều nhiều !
|
a Nam ơi,sao em viết cho con dspic33 ở chế độ slave không được anh ạ,
|
em cấu hình như sau:
1/ giao tiếp spi//////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\///////////////////////////////////////////////////////////// em làm giao tiếp spi giữa con master là dspic30f4011, slave là dspic33fj256gp710. chỉ đơn giản là con master truyền liên tục các số từ 0-255, và slave sẽ nhận tín hiệu dạng word và hiển thị lên LCD, em cấu hình sao mà mãi mạch vẫn chưa chạy được anh à. con master có lẽ là được rồi, còn con slave vẫn chưa nhận được . em cấu hình như sau: em có dùng chân B0 của master để điều khiển chân SS của con slave - con master: ////////////////////////////////////////////////////////////////// Code:
void khoi_tao_SPI1_master(void)//cke=1 ckp=0 Code:
void khoi_tao_SPI1_slave(void)//cke ckp=0 |
mạch icsp có cần mắc thêm điện trở hay điốt j không anh. nếu có mỗi chip không thì detect được, nếu kết nối mạch với bộ LCD và cấp nguồn 5v cho lcd thì PK2 không detect được chip, em phải rút nguồn 5v ra mới detect được.
|
giúp em điều khiển matrận 8*8 bằng pic6f84
anh NAM a!e moi học pic6f84a mà khó hiểu quá.thầy em bảo làm đề tài về nó bằng cách chạy chữ matrận 8*8 ma e cũng hơi khó hiểu nguyên lý ntn.e chỉ mới viết được đoạn mong anh xem qua và giúp e với.em cảm ơn anh rất nhiều.
#include "p16f84.inc" temp = 0x0c temp1 = temp + 1 org 0 bsf status,0 movlw b'11000' movwf trisa movlw FFh movwf trisb bcf status,0 anh xem giùm em chương trình chính như vậy đã đúng chưa. giả sử em chạy chữ "B" chẳng hạn rlf FEH 81H 81H FEH 81H 81H 81H FEH 00H end anh sửa giùm em nha em thực sự cần sự giúp đỡ của anh. |
ec ec. em đang học hợp ngữ. nên đọc mấy cái ccs này chẳng hiểu gì hết. anh nào biết nguyên lý đư data vào 595 giúp em với.
em đang tìm hiểu về 595 để làm đề tài quang báo. nhưng em vẫn chưa hiểu cho lắm về hoạt động của con này. theo em hiểu như thế này không biết có đúnh không, nhờ các anh chỉ giáo thêm : +khi muốn đưa 1 bit vào thì mình cần 1 xung clock o chân 11 để đưa 1 bit này đi vào thanh ghi bên trong nó và muốn xuất 8 bit ra 8 chân của nó thì ta cần 1 tác động mức cao lên chân 12 +giả sử em muốn truyền 8 bit 10101100 tương ứng ngõ ra từ Q0(mức 0)-Q7(mức 1) thì em truyền theo thứ tự 00110101 vào thanh ghi, như vậy là cần 8 chu kỳ xung clock ở chân 11 +và sau đó em cho chân 12 lên 1 thì 8 bit này được đẩy ra 8 ngõ ra Q0-Q1 thế là 8 em được đẩy ra. như vậy thì cần 1 xung ở chân 12. Nhưng ở đây em thắc mắc hoài mà không nghĩ ra được. vấn đề là như thế này : +thứ nhất : theo như ý em tìm hiểu thì chân 11 và 12 là 2 chân có chu kỳ xung khác nhau. Nhưng dướng như tất cả các mạch về quang báo em tìm thấy được trên mạng hầu như chân 11 và 12 mắc chung vời nhau. Nếu như vậy thì 2 chân cùng 1 xung clock.nếu như vậy chắc chắn em đã hiểu sai vấn đề truyền data và xuất dữ liệu ra 8 ngõ ra. +thứ 2: giả sử em cần xuất 8byte để quyét led matrix 8*8. như vậy thì làm sao để chốt 8byte này đây?để 8byte tiếp sẽ là của con led thứ 2.do em đang làm đồ án thiết kế hiển thị chữ trên 10 led matrix 8*8 dùng bàn phím hex, cách nhấn phím hiển thị như điện thoại. +thứ 3 : em thấy chân 9 dữ liệu ra nối tiếp của con 1 được mắc với 14 của con tiếp theo. như vậy khi em bấm A, tiếp tục bấm B thì chữ hiển thị là A led 1 và B led 2 hay là B led 1 A led 2. do em đang học hợp ngữ nên tài liệu toàn là ccs nên em không hiểu gì hết. đó là những thắc mắc của em. mong các bạn, các anh giúp đỡ em. em xin cảm ơn mọi người nhiều lắm. |
Múi giờ GMT. Hiện tại là 01:21 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