PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 27-12-2008, 05:04 PM   #16
dungbk49
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 20
:
anh tungtot_vl cám ơn anh đã nhiệt tình giúp em quá nhiều rồi, em đã thử làm theo hướng của anh, em mới chỉ làm cho nó hiển thị thôi anh ạ, còn thực hiện dịch chữ thì chưa, nhưng nó giật mạnh quá anh ạ, có giải pháp nào ko anh.
dungbk49 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-12-2008, 02:07 PM   #17
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
việc giật nhiều hay ít tùy thuộc vào cấu hình pc của bạn và tốc độ quét quang báo. tuy nhiên cầu hình pc thì chắc bạn không thể nâng cao hơn được. chỉ còn cách là bạn điều chỉnh tốc độ quét sao cho đạt được mức giật thấp nhất là được. vì nó là trình mô phỏng nên có khác với mạch thực tế. mạch thực tế nếu tốc độ quét càng cao thì ảnh càng mịn (ít giật), nhưng trong mô phỏng thì chưa hẳng như thế. do đó chỉ còn cách là bạn tự điều chỉnh tốc độ quét để đạt được mức giật thấp nhất thôi. tốt nhất là bạn nên làm mạch thực tế để kiểm tra và lắm rỏ hơn về phần cứng
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-12-2008, 12:13 PM   #18
dientudong
Đệ tử 5 túi
 
Tham gia ngày: Oct 2008
Bài gửi: 95
:
Nhờ các bạn xem giúp mình mạch điều khiển led đơn sáng tắt khi nhấn nút. sao mình không cần nhấn mà nó đã hoạt động.
File Kèm Theo
File Type: rar led.rar (11.9 KB, 60 lần tải)
dientudong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2009, 01:19 AM   #19
dungbk49
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 20
:
anh tungtot_vl ơi, em làm theo hướng của anh nhưng khi tiến hành dịch chữ thì em không làm được anh ạ, em đã thử áp dụng thuật toán của em đã làm trước đây áp dụng vào cách của anh nhưng ko thể được em bó tay rồi. Hơn nữa trong hàm Display() nếu khai báo là unsigned char m=1 thì nó hiển thị đúng ý đồ (như trong file em gửi kèm) nhưng em muốn chỉ cần trong hàm Display() khai báo là: unsigned char m và trong hàm main khai báo là unsigned char m=1 là đạt được mục đích rồi. Nhưng thực tế lại không như em muốn mà bắt buộc trong hàm Display() phải khai báo là unsigned m=1 thì mới được.
- Hơn nữa em lại chưa làm được phần dịch chữ em chịu thua rồi. Anh giúp em phần dịch chữ được không anh
File Kèm Theo
File Type: rar matrixv7.1.rar (20.5 KB, 63 lần tải)
dungbk49 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2009, 08:47 AM   #20
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
led

Trích:
Nguyên văn bởi dientudong View Post
Nhờ các bạn xem giúp mình mạch điều khiển led đơn sáng tắt khi nhấn nút. sao mình không cần nhấn mà nó đã hoạt động.
trong lệnh if của bạn thiếu 1 dấu = phải ghi là if(ra0==1).
vì lệnh if nằm trên vòng lặp white nên khi chay chương trình chương trình chỉ chạy 1 lần lệnh ì trong vòng hàm main nên khi mở mô phỏng lên thì nó đã thực hiển lệnh if rồi trong khi đó bạn chưa kịp nhấn switch nên khi bạn nhấn switch để thục hiện lệnh thì nó không có tác dụng. vì vậy khi bạn nhấn giữ switch và khi đó đồng thời chương trình đang thực hiện lệnh if thì chương trình của bạn mới có tác dụng.
bạn nên bỏ lệnh if phía dưới vòng lặp white thì hiệu quả hơn
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2009, 04:42 PM   #21
nguyenhung1811
Đệ tử 3 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 48
:
nhờ các bạn chỉ giúp mình giải thuật hiển thị chữ và phương pháp chạy chữ với. mình dùng 595 để quét led ma trận ... nhưng đang bí về giai thuật hiển thị chữ. ... ai có tài liệu thì cho mình xin link với nhé. cảm ơn
nguyenhung1811 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 02:53 PM   #22
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
hỏi về giải thuật cho Matrix

chào các anh , em viết chương trình cho bảng quang báo 16*32 , dùng 4 con 595 để dich data ra cột , còn hàng thì sử dung 2 con 74ls138, em đang gặp rắc rối ở chỗ cho nó chạy chữ tử trái qua phải, các " cao thủ " nào chỉ cho em .
Code:
#include "D:\Hoctap\baitapchoPIC\ledmatran.h"

const unsigned int8 K[]={

0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,32,0,56,142,227,0,
0 ,0,80,0,68,81,20,1,
32,40,34,130,68,81,20,1,
64,36,82,134,64,81,20,1,
128,34,138,138,32,81,228,1,
0,33,250,146,16,81,4,1,
128,34,138,162,8,81,4,1,
64,36,138,194,4,81,20,1,
32,200,137,130,124,142,227,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,

0,68,144,44,34,130,28,0,
0,202,144,34,82,134,34,0,
0,81,145,33,138,138,2,0,
0,95,146,225,251,146,2,0,
0,81,148,34,138,162,58,0,
0,81,152,36,138,194,34,0,
0,81,144,40,138,130,60,0,
0,0,0,0,0,0,0,0,

};

 int8 i,r;
void main()
{
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   setup_timer_2(T2_DISABLED,0,1);
   
  

   set_tris_b(0b11110000);
   set_tris_c(0x00);
 ////////////////////////////// hiển thị đata trên 4 matrix  
   while(1)
    {               
               
               for(i=0;i<16;i++)
                        {
                        spi_write(K[i*4+3])
                         spi_write(K[i*4+2]);
                         spi_write(K[i*4+1]);
                           spi_write(K[i*4+0]);
                           output_high(pin_C2);
                           output_low(pin_c2);
                            delay_us(1300);
                           output_b(i+32);
                        
                        }
      }

thay đổi nội dung bởi: namqn, 10-01-2009 lúc 05:57 PM.
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 06:40 PM   #23
longtu
Đệ tử 6 túi
 
longtu's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Send a message via Yahoo to longtu
Viêc hiển tren led matran có 2 công việc chính: 1 là quét hàng, 2 là hien thị dữ liệu.
Việc quét hàng, theo mình nen dùng ngắt Timer để thực hiện, vì khi đó công việc quét hàng đã sảy ra môt cách tự động, khi đó mình không cần quan tấm đến quét hàng nữa mà công việc bay giò là tìm cách hiển thị trên màn hinh led mà thôi.

Để hiển thị trên màn hình led được dễ dàng, bạn nên coi các led là những điểm ảnh(pixel) -->viêc hiển thị trên màn hình led là tìm cách thay đổi giá trị của các điểm ảnh này.

Chính vì vậy, khi làm dến led matran hay là lam quang báo, các bạn nen viết các hàm cơ bản sau:
*point(x,y)//cho phép sáng 1 điểm có tọa độ là (x,y)trên màn hình led
*line(x1,y1,x2,y2)// cho phép sáng 1 đoan thẳng có tọa độ điểm đầu là (x1,y1) và tọa độ điểm cuối (x2,y2).
*area(x1,y1,x2,y2)//cho phep sang 1 vung.

Nếu ban làm duoc như vây thì việc "vẽ" gì lên trên màn hình led hoàn toàn dễ dàng.

Một vài góp ý chia sẽ.

Thân,
__________________
--------------------------------------------------------------------------------------
Phùng Minh Tuân
Email: tuan.phmt@gmail.com
"Cuộc đời sóng gió nuôi ta lớn
Bao lần thất bại dạy ta khôn".

thay đổi nội dung bởi: longtu, 10-01-2009 lúc 06:41 PM. Lý do: sai chính ta
longtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-01-2009, 08:28 PM   #24
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
Trích:
Nguyên văn bởi longtu View Post
Viêc hiển tren led matran có 2 công việc chính: 1 là quét hàng, 2 là hien thị dữ liệu.
Việc quét hàng, theo mình nen dùng ngắt Timer để thực hiện, vì khi đó công việc quét hàng đã sảy ra môt cách tự động, khi đó mình không cần quan tấm đến quét hàng nữa mà công việc bay giò là tìm cách hiển thị trên màn hinh led mà thôi.

Để hiển thị trên màn hình led được dễ dàng, bạn nên coi các led là những điểm ảnh(pixel) -->viêc hiển thị trên màn hình led là tìm cách thay đổi giá trị của các điểm ảnh này.

Chính vì vậy, khi làm dến led matran hay là lam quang báo, các bạn nen viết các hàm cơ bản sau:
*point(x,y)//cho phép sáng 1 điểm có tọa độ là (x,y)trên màn hình led
*line(x1,y1,x2,y2)// cho phép sáng 1 đoan thẳng có tọa độ điểm đầu là (x1,y1) và tọa độ điểm cuối (x2,y2).
*area(x1,y1,x2,y2)//cho phep sang 1 vung.

Nếu ban làm duoc như vây thì việc "vẽ" gì lên trên màn hình led hoàn toàn dễ dàng.

Một vài góp ý chia sẽ.

Thân,
em chưa hiểu mấy , em thấy trên diễn dàn hình như là không ai sử dụng các hàm để viết , bác chĩ rõ cho em hiểu thêm bẳng một ví dụ cụ thể đươc không
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2009, 08:56 AM   #25
longtu
Đệ tử 6 túi
 
longtu's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Send a message via Yahoo to longtu
Bạn coi màn hình led hiển thị của bạn là các điểm ghép lại. Bây giờ bạn tìm cách điều khiển từng điểm sáng đó đi. Nghĩa là bạn muốn điểm nào sáng hay tắt cũng đựoc. Trước hết bạn cứ tìm hiều như vây đã nhé. Khi nào làm xong chuyện này, mình sẽ goi ý them nhé.

Thân,
__________________
--------------------------------------------------------------------------------------
Phùng Minh Tuân
Email: tuan.phmt@gmail.com
"Cuộc đời sóng gió nuôi ta lớn
Bao lần thất bại dạy ta khôn".
longtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2009, 09:04 AM   #26
longtu
Đệ tử 6 túi
 
longtu's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Send a message via Yahoo to longtu
Bạn tham khảo doan code nay nhé:

//cho phep sang 1 diem tren man hình
//cho toa do diem can sang (x,y)
//unsigned char buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT];
void point(int8 x,int8 y)
{
unsigned char *pt;
int8 mask=0b00000001;
int16 j;
mask = mask << (y%8);
pt=&buff_mh[0][0];
// j=(y/6*BITMAP_WIDTH_BIT+x);//hang nay minh ghi nham la chia cho 6
j=(y/8*BITMAP_WIDTH_BIT+x); //Minh sua lại hang này là chia cho 8
pt+=j;
*pt|= mask;
}

Thân,
__________________
--------------------------------------------------------------------------------------
Phùng Minh Tuân
Email: tuan.phmt@gmail.com
"Cuộc đời sóng gió nuôi ta lớn
Bao lần thất bại dạy ta khôn".

thay đổi nội dung bởi: longtu, 15-01-2009 lúc 12:29 PM. Lý do: Ghi nhầm
longtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2009, 11:31 AM   #27
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
lmd

Trích:
Nguyên văn bởi dungbk49 View Post
anh tungtot_vl cám ơn anh đã nhiệt tình giúp em quá nhiều rồi, em đã thử làm theo hướng của anh, em mới chỉ làm cho nó hiển thị thôi anh ạ, còn thực hiện dịch chữ thì chưa, nhưng nó giật mạnh quá anh ạ, có giải pháp nào ko anh.
máy hôm nay bận quá không giúp bạn được.
bài của bạn viết khó hiểu quá, vì tôi không hiểu cách trình bày của bạn.
tôi có viết một đoạn code tương thích với phần cứng của bạn. bạn chạy thủ xem thế nào nhé.
cách này viết hơi khó một tí nhưng nó rất thuận lợi để bạn thực hiện các hiệu ứng 1 cách dễ dàng. chúc vui vẽ
#include <16F877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#device 16F877a*=16 ADC=8
#use delay(clock=4000000)
#use fast_io(a)
#byte porta=0x05
#use fast_io(b)
#byte portb=0x06
#use fast_io(c)
#byte portc=0x07
#use fast_io(d)
#byte portd=0x08
#use fast_io(e)
#byte porte=0x09
int8 const font[] = {131,191,191,191,255,
131,187,185,130,249,255,
131,235,235,247,255,
255,255,255,
239,131,171,187,199,255,
130,255,
129,42,169,255,
131,247,239,131,255,
255,255,255,
251,131,251,255,
131,190,188,131,249,255,
255,255,255,
183,131,191,
199,187,187,199,255,
255,255};

int const ic[] = {0x01,0x02,0x04,0x08};
int ht[32]; // ram cho man hinh
void codinh();
void dinhtrai();
void display();
//============================
void codinh()
{ int a,b,c;
for(a=0;a<32;a++)
{ ht[a] = font[a]; }
for(b=0;b<20;b++)// delay
{display();}
}

//=========================
void dinhtrai()
{ int a,b,c;
for(a=0;a<32;a++)
{ ht[a] = 0xff; } // xoa man hinh
for(a=0;a<32;a++)
{ ht[31] = font[a];
display();
for(b=0;b<32;b++)
{ ht[b-1] = ht[b]; }

}
for(a=0;a<32;a++)
{ ht[31] = 0xff;
for(b=0;b<32;b++)
{ ht[b-1] = ht[b]; }
display();
}
}
//========================================
void display()
{ int a,b,i;
for(a=0;a<20;a++) // toc do dich
{
for(b=0;b<4;b++) // chon ic quet
{ portb = ic[b];
for(i=0;i<8;i++)
{
portd = ht[b*8+i];
porte = i;
delay_us(1000);
}
}
}

}
void main()
{
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x00);
set_tris_e(0x00);
while(1)
{
codinh();
dinhtrai();
delay_ms(2000);

}

}
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2009, 11:39 AM   #28
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
[QUOTE=nguyennam8888;22058]chào các anh , em viết chương trình cho bảng quang báo 16*32 , dùng 4 con 595 để dich data ra cột , còn hàng thì sử dung 2 con 74ls138, em đang gặp rắc rối ở chỗ cho nó chạy chữ tử trái qua phải, các " cao thủ " nào chỉ cho em .

lmd cơ bản không có gì khó nhưng do chúng ta làm phức tạp chương trình quá nên khó tìm ra cách để thực hiện các hiệu ứng thôi.
trong ccs có các hàm:
rotate_left();
rotate_right();
shift_left();
shift_right();
dùng để dịch các byte trong mãng. nếu bạn muốn dịch trái hay phải một cách đơn giản thì nên sử dụng các hàm này
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2009, 03:45 PM   #29
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
[QUOTE=tungtot_vl;22094]
Trích:
Nguyên văn bởi nguyennam8888 View Post
chào các anh , em viết chương trình cho bảng quang báo 16*32 , dùng 4 con 595 để dich data ra cột , còn hàng thì sử dung 2 con 74ls138, em đang gặp rắc rối ở chỗ cho nó chạy chữ tử trái qua phải, các " cao thủ " nào chỉ cho em .

lmd cơ bản không có gì khó nhưng do chúng ta làm phức tạp chương trình quá nên khó tìm ra cách để thực hiện các hiệu ứng thôi.
trong ccs có các hàm:
rotate_left();
rotate_right();
shift_left();
shift_right();
dùng để dịch các byte trong mãng. nếu bạn muốn dịch trái hay phải một cách đơn giản thì nên sử dụng các hàm này
nếu như vậy là dich cả byte chứ, 4 lệnh trên em chưa biết cách sử dụng nó , trong tài liệu CCS tiếng việt cũng không nói nhiều về nó ,Bác chỉ cụ thể cho em đươc không
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2009, 03:49 PM   #30
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
Trích:
Nguyên văn bởi longtu View Post
Bạn tham khảo doan code nay nhé:

//cho phep sang 1 diem tren man hình
//cho toa do diem can sang (x,y)
//unsigned char buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT];
void point(int8 x,int8 y)
{
unsigned char *pt;
int8 mask=0b00000001;
int16 j;
mask = mask << (y%8);
pt=&buff_mh[0][0];
j=(y/6*BITMAP_WIDTH_BIT+x);
pt+=j;
*pt|= mask;
}

Thân,
anh , em không hiểu mấy,buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT] là sao, nó có tác dụng gí
pt=&buff_mh[0][0];
j=(y/6*BITMAP_WIDTH_BIT+x);
em cũng không hiểu
mong anh chỉ em cụ thể với , em mới bắt đầu thôi mà
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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


Múi giờ GMT. Hiện tại là 05:36 AM.


Đượ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