a) lập trình cho Led đơn: Led đơn nối với chân P3.0 của VĐK, theo sơ đồ mạch trên thì Led đơn tích cực mức 1 (sáng) và tắt ở mức 0.
Để thuận tiện, ta sẻ định nghĩa chân P3.0 như sau:
sbit LED = P3^0;
b) phím bấm nối với chân P1.0, nếu chân P1.0 bằng 0 tức là phím đang được nhấn, ngược lại nếu bằng 1 thì phím chưa được nhấn.
Ta cũng định nghĩa chân P1.0 như sau
sbit sw1 = P1^0;
c) lập trình cho Led 7 đoạn
Led 7 đoạn chẳng qua là 8 led đơn ghép lại ta có các led a,b,c,d,e,f,g, ghép lại với nhau và nối với VĐK theo thứ tự sau:
ở ví dụ này Led 7 đoạn tích cực ở mức 0 để đèn sáng số 0 ta làm như sau
à giá trị đưa vào P2 như sau 11000000 = C
d) chương trình:
#include"REGX51.h" // khai báo thư viện của VDK
sbit sw1 = P1^0; // định nghĩa chân P1.0
sbit LED = P3^0; // định nghĩa chân P3.0
unsigned char i,a; // khai báo a,i kiểu unsighned char tức là a và i có
// giá trị từ 0 à 255
void delay(unsigned int x) { // hàm delay tạo thời gian trể tùy vào tham số x
// truyền vào
while(x--);
}
unsigned char led_sang[10] =
{0xC0,0xF9,0xA4,0xb0,0x99 ,0x92,0x82,0xf8,0x80 ,0x98};
//Mảng chứa giá trị sáng của Led 7 đoạn (0à9)
void main (void) // hàm chính
{
i=0;
a=0;
sw1 = 1;//input
for(;;){
if(sw1==0)
{
P2=led_sang[i]; // HIEN THI LED 7 DOAN
i=i+1;
if (i==10) i=0;
a=i%2; //KIEM TRA SO CHAN LE
if (a==0)
LED = 1; //NEU CHAN THI BAT LEN
if (a==1)
LED=0; //LE THI TAT DI
delay(50000);
}
}
}
Thứ Ba, 2 tháng 10, 2012
Bài 14:Khối toán đo quãng đường bằng Encoder
Encoder là gì:
Encoder là thiết bị thường được sử dụng để đo và tính các khoảng cách dựa trên việc đếm số lổ trên encoder.
Có nhiều loại encoder nhưng chúng chỉ khác nhau về số lỗ. Có loại chỉ có 50 lỗ, 100 lỗ nhưng có loại lên đến vài ngàn lỗ.
Cấu tạo:
Encoder thường gồm một tấm tròn được khoét các lỗ cách đều nhau. Encoder 100 lỗ tức là trên tấm đĩa tròn có 100 lỗ. tấm đĩa đó được giử ở trong thân encoder và được nối với trục quay của encoder. Một bên tấm đĩa gắn một con LED phát sáng, bên còn lại gắn một con cảm biến ánh sáng (tương tự như là cảm biến dò đường vậy). Con led phát sáng và con cảm biến ánh sáng nằm cố định khi encoder quay.

Nguyên lý hoạt động của encoder dùng để đếm số lỗ có thể hiểu đơn giản như sau:
- Khi trục encoder quay, tấm đĩa gắn với trục quay nên cùng quay với trục quay.
- Con led phát sáng liên tục khi cấp nguồn và chiếu vào tấm đĩa, phía bên kia cứ mỗi lần ánh sáng từ con led chiếu qua 1 lỗ của tấm đĩa thì con cảm biến ánh sáng thu nhận được và xác định tương ứng 1 lỗ. Như vậy nếu trục encoder quay đúng 1 vòng thì tương ứng con cảm biến ánh sáng cũng phát hiện ra đúng số lỗ của encoder đó.
Ví dụ:
Muốn đo quảng đường 1 mét bằng cách sử dụng encoder 100 lỗ và trục của encoder được gắn vào trục quay của bánh xe ta thực hiện như sau:
- Xác định chu vi của bánh xe (chẳng hạn là 25 cm)
- Cứ 1 vòng quay của encoder thì bánh xe quay được một vòng, tức là:
Cứ 100 lỗ robot-> chạy được 25 cm
? lỗ -> chạy được 100 cm
Vậy ta có số lỗ cần thiết của encoder để robot chạy được 1m bằng 100*100/25=400(lỗ)
Thuật toán sử dụng encoder.

Chương trình sử dụng ngắt ngoài để đếm số lổ encoder:
void EX0_int0(void) interrupt 0
{
ACC=encoder_low;
if(ACC==0)
{
ACC=encoder_high;
if(ACC==0)
EX0=0;
else
{
encoder_high=encoder_high-1;
encoder_low=255;
}
}
else
encoder_low=encoder_low-1;
}
Encoder là thiết bị thường được sử dụng để đo và tính các khoảng cách dựa trên việc đếm số lổ trên encoder.
Có nhiều loại encoder nhưng chúng chỉ khác nhau về số lỗ. Có loại chỉ có 50 lỗ, 100 lỗ nhưng có loại lên đến vài ngàn lỗ.
Cấu tạo:
Encoder thường gồm một tấm tròn được khoét các lỗ cách đều nhau. Encoder 100 lỗ tức là trên tấm đĩa tròn có 100 lỗ. tấm đĩa đó được giử ở trong thân encoder và được nối với trục quay của encoder. Một bên tấm đĩa gắn một con LED phát sáng, bên còn lại gắn một con cảm biến ánh sáng (tương tự như là cảm biến dò đường vậy). Con led phát sáng và con cảm biến ánh sáng nằm cố định khi encoder quay.
Nguyên lý hoạt động của encoder dùng để đếm số lỗ có thể hiểu đơn giản như sau:
- Khi trục encoder quay, tấm đĩa gắn với trục quay nên cùng quay với trục quay.
- Con led phát sáng liên tục khi cấp nguồn và chiếu vào tấm đĩa, phía bên kia cứ mỗi lần ánh sáng từ con led chiếu qua 1 lỗ của tấm đĩa thì con cảm biến ánh sáng thu nhận được và xác định tương ứng 1 lỗ. Như vậy nếu trục encoder quay đúng 1 vòng thì tương ứng con cảm biến ánh sáng cũng phát hiện ra đúng số lỗ của encoder đó.
Ví dụ:
Muốn đo quảng đường 1 mét bằng cách sử dụng encoder 100 lỗ và trục của encoder được gắn vào trục quay của bánh xe ta thực hiện như sau:
- Xác định chu vi của bánh xe (chẳng hạn là 25 cm)
- Cứ 1 vòng quay của encoder thì bánh xe quay được một vòng, tức là:
Cứ 100 lỗ robot-> chạy được 25 cm
? lỗ -> chạy được 100 cm
Vậy ta có số lỗ cần thiết của encoder để robot chạy được 1m bằng 100*100/25=400(lỗ)
Thuật toán sử dụng encoder.

Chương trình sử dụng ngắt ngoài để đếm số lổ encoder:
void EX0_int0(void) interrupt 0
{
ACC=encoder_low;
if(ACC==0)
{
ACC=encoder_high;
if(ACC==0)
EX0=0;
else
{
encoder_high=encoder_high-1;
encoder_low=255;
}
}
else
encoder_low=encoder_low-1;
}
Bài 6:sử dụng phần mềm Topview Simulator
phần mềm Topview Simulator không có sơ đồ mạch nhưng mô phỏng bằng cách thiết lập các chân của vi điều khiển tới các thiết bị
à
Chọn chíp mô phỏng

à
Ví dụ cho việc thiết kế mạch như ở ví dụ trên:

à thiết lập Led đơn và Led 7 đoạn

à
thiết lập phím bấm


à
Để xem các thiết lập vửa rồi : vào View

à Kết quả là :

à
Cách load file.hex vào để chạy chương trình

à cách chạy mô phỏng : kích vào nút Go dừng lại thì kích vào nút Stop và Reset

à thế là xong.
à
Chọn chíp mô phỏng
à
Ví dụ cho việc thiết kế mạch như ở ví dụ trên:
à thiết lập Led đơn và Led 7 đoạn

à
thiết lập phím bấm
à
Để xem các thiết lập vửa rồi : vào View
à Kết quả là :

à
Cách load file.hex vào để chạy chương trình

à cách chạy mô phỏng : kích vào nút Go dừng lại thì kích vào nút Stop và Reset
à thế là xong.
Bài 16:Tạo hàm Delay
Chương trình delay trong lập trình robot nói riêng và lập trình nhúng nói chung là rất quan trọng, delay là chương trình để tạo ra khoảng thời gian trể, có nhiều cách để tạo ra một hàm delay, thường thì người ta dùng vòng lặp hoặc dùng bộ định thời. ở đây mình giới thiệu một hàm delay bằng cách sử dụng vòng lặp vì các bộ định thời của vi điều khiển đã được sử dụng trên các ngắt rồi. hehe
Chương trình như sau:
void delay_ms(unsigned int x){
unsigned int TGIAN_TRE1;
while(x!=0)
{
TGIAN_TRE1=121;
while(TGIAN_TRE1!=0)
{
TGIAN_TRE1=TGIAN_TRE1-1;
}
x=x-1;
}
}
Để tạo ra chương trình delay này ta phải biết khoảng thời gian thực hiện một lệnh trong chương trình tốn bao nhiêu thời gian, chương trình trể là chương trình thực hiện các lệnh và không có tác dụng điều khiển robot như các lệnh lặp for, while .v.v. Chẳng hạn lệnh TGIAN_TRE1=TGIAN_TRE1-1; chỉ tốn 1 hay 2 micro giây gì đó(lâu rồi quên nhưng chỉ cần tính ngược lại là được vì chương trình mình đã thử và chạy khá chính xác), thời gian của chương trình trể bằng tổng thời gian thực hiện các lệnh có trong chương trình.
Với chương trình này ta sử dụng như sau:
Muốn trể 1 mili giây ta gọi hàm: delay_ms(1);
Muốn trể 100 mili giây ta gọi hàm: delay_ms(100);
Muốn trể 1 giây ta gọi hàm: delay_ms(1000);
Ta có một thao tác như sau:
Void main(void)
{
keo_len();
for(int i=0;i<10;i++) // lặp 10 lần
delay_ms(1000); // trể 1 giây
keo_xuong();
}
Như vậy chương trình trên thực hiện thao tác kéo lên sau đó trể 10 giây rồi kéo xuống.
Chương trình như sau:
void delay_ms(unsigned int x){
unsigned int TGIAN_TRE1;
while(x!=0)
{
TGIAN_TRE1=121;
while(TGIAN_TRE1!=0)
{
TGIAN_TRE1=TGIAN_TRE1-1;
}
x=x-1;
}
}
Để tạo ra chương trình delay này ta phải biết khoảng thời gian thực hiện một lệnh trong chương trình tốn bao nhiêu thời gian, chương trình trể là chương trình thực hiện các lệnh và không có tác dụng điều khiển robot như các lệnh lặp for, while .v.v. Chẳng hạn lệnh TGIAN_TRE1=TGIAN_TRE1-1; chỉ tốn 1 hay 2 micro giây gì đó(lâu rồi quên nhưng chỉ cần tính ngược lại là được vì chương trình mình đã thử và chạy khá chính xác), thời gian của chương trình trể bằng tổng thời gian thực hiện các lệnh có trong chương trình.
Với chương trình này ta sử dụng như sau:
Muốn trể 1 mili giây ta gọi hàm: delay_ms(1);
Muốn trể 100 mili giây ta gọi hàm: delay_ms(100);
Muốn trể 1 giây ta gọi hàm: delay_ms(1000);
Ta có một thao tác như sau:
Void main(void)
{
keo_len();
for(int i=0;i<10;i++) // lặp 10 lần
delay_ms(1000); // trể 1 giây
keo_xuong();
}
Như vậy chương trình trên thực hiện thao tác kéo lên sau đó trể 10 giây rồi kéo xuống.
Bài 15:Tổng quan lập trình robot
Chương trình cho robocon là một chương trình được viết để điều khiển robot thực hiện một số chức năng nhất định tùy theo chiến thuật thi đấu của đội thông qua việc lập trình cho các thiết bị linh kiện tích hợp trên mạch điện tử. Trung tâm của mạch điện tử điều khiển robot là một vi điều khiển có chức năng điều khiển các module khác của mạch như module cảm biến , module hiển thị, module công suất với các cơ cấu chấp hành, module điều chỉnh với các công tắc hành trình và nút nhấn cùng các module khác.

Nhìn vào hình vẻ trên ta có thể thấy việc thực thi của một chương trình robot đó là:
Module vi điều khiển sẻ nhận thông tin từ các module có chức năng làm đầu vào là module điều chỉnh và module cảm biến sau đó thực hiện xử lý thông tin và đáp ứng ra các module có chức năng làm đầu ra như module hiển thị và module chấp hành.
Có thể nói robot cũng như một máy tính vậy. Có thể so sánh các module đầu vào của robot như là các thiết bị input của một máy tính như bàn phím chuột hay máy fax, các module đầu ra của robot như là màn hình hay máy in, và khối vi điều khiển của mạch điều khiển như là khối xử lý trung tâm CPU của máy tính vậy. Và tất nhiên là lập trình cho robot cũng bao gồm các công việc mà bất kỳ một chương trình lập trình nào cũng phải có là : input -> processing -> output. Sau này đi vào các thuật toán cơ bản các bạn sẻ hiểu rỏ hơn về các module input hay output của robot.
Nhưng bây giờ là một ví dụ cụ thể: Theo yêu cầu của luật thi năm nay, các robot tự động phải mang quà tới đặt vào các kim tự tháp, để làm được công việc đó thì mỗi robot được lập trình dò đường để ghi điểm phải có một số thao tác nhất định như:
- Khởi động bằng một nút nhấn (liên quan tới thuật toán chọn chương trình) tức là chọn đầu vào cho robot xử lý.
- Dò đường tới gần kim tự tháp để ghi điểm (liên quan đến thuật toán dò đường)
- Điều khiển cơ cấu chấp hành đặt cấu kiện xuống kim tự tháp để ghi điểm (liên quan đến thuật toán điều khiển động cơ)
Trước khi đi vào các giải thuật thì các bạn nên nắm vững cách lập trình cho các thiết bị hay linh kiện có chức năng input, output hay là chức năng điều khiển.
Input: Nút nhấn, công tắc hành trình, cảm biến dò đường, encoder.
Về cảm biến dò đường các bạn có thể tham khảo trên các tài liệu đã post trên diển đàn, các tài liệu đã chỉ dẫn rất rỏ ràng.
Output: Led 7 đoạn, động cơ
Cách lập trình cho mỗi thiết bị này đã được trình bày rỏ trong mỗi thuật toán ở trên.
Nhìn vào hình vẻ trên ta có thể thấy việc thực thi của một chương trình robot đó là:
Module vi điều khiển sẻ nhận thông tin từ các module có chức năng làm đầu vào là module điều chỉnh và module cảm biến sau đó thực hiện xử lý thông tin và đáp ứng ra các module có chức năng làm đầu ra như module hiển thị và module chấp hành.
Có thể nói robot cũng như một máy tính vậy. Có thể so sánh các module đầu vào của robot như là các thiết bị input của một máy tính như bàn phím chuột hay máy fax, các module đầu ra của robot như là màn hình hay máy in, và khối vi điều khiển của mạch điều khiển như là khối xử lý trung tâm CPU của máy tính vậy. Và tất nhiên là lập trình cho robot cũng bao gồm các công việc mà bất kỳ một chương trình lập trình nào cũng phải có là : input -> processing -> output. Sau này đi vào các thuật toán cơ bản các bạn sẻ hiểu rỏ hơn về các module input hay output của robot.
Nhưng bây giờ là một ví dụ cụ thể: Theo yêu cầu của luật thi năm nay, các robot tự động phải mang quà tới đặt vào các kim tự tháp, để làm được công việc đó thì mỗi robot được lập trình dò đường để ghi điểm phải có một số thao tác nhất định như:
- Khởi động bằng một nút nhấn (liên quan tới thuật toán chọn chương trình) tức là chọn đầu vào cho robot xử lý.
- Dò đường tới gần kim tự tháp để ghi điểm (liên quan đến thuật toán dò đường)
- Điều khiển cơ cấu chấp hành đặt cấu kiện xuống kim tự tháp để ghi điểm (liên quan đến thuật toán điều khiển động cơ)
Trước khi đi vào các giải thuật thì các bạn nên nắm vững cách lập trình cho các thiết bị hay linh kiện có chức năng input, output hay là chức năng điều khiển.
Input: Nút nhấn, công tắc hành trình, cảm biến dò đường, encoder.
Về cảm biến dò đường các bạn có thể tham khảo trên các tài liệu đã post trên diển đàn, các tài liệu đã chỉ dẫn rất rỏ ràng.
Output: Led 7 đoạn, động cơ
Cách lập trình cho mỗi thiết bị này đã được trình bày rỏ trong mỗi thuật toán ở trên.
Đăng ký:
Nhận xét (Atom)
DBS M05479
Quang Cao