Mạchđếmsảnphẩm ứng dụng viđiềukhiển mcs_51 Chủ nhật - 11/12/2011 18:57 Mạchđếmsảnphẩm ứng dụng viđiềukhiển mcs_51 Chào bác, hơm viết nhằm giúp đở bác làm mạchđếmsản phẩm, thấy có nhiều bác lên mạng tìm kiếm tài liệu cực đa số người mạng chia sẻ hết cho người, hôm sẻ nói cách chi tiết để bạn dể dàng việc làm mạchđếmsảnphẩm Chào bác, hôm viết nhằm giúp đở bác làm mạchđếmsản phẩm, thấy có nhiều bác lên mạng tìm kiếm tài liệu cực q đa số người mạng chia sẻ hết cho người, hơm sẻ nói cách chi tiết để bạn dể dàng việc làm mạchđếmsảnphẩm Đây mạchđếmsảnphẩm ứng dụng viđiềukhiển mcs_51 dùng thu phát hồng ngoại, tăng số lượng sảnphẩm lên kỷ thuật đếm xung, sử dụng phương pháp quét led để hiển thị số đếm có khả dừng băng truyền Bây bắt đầu nhé: Giới thiệu sơ qua cho bác biết mạch có : để làm mạch có khối khối phát hồng ngoại , khối thu hồng ngoại, khối hiển thị dĩ nhiên thiếu xử lý trung tâm không, bác dùng viđiềukhiển họ 8051 (ở dùng 89c51) Khối phát hồng ngoại: dùng timer0 để phát xung 38khz chân 89c51 chọn chân p1.5, vấn đề phát sẻ nói sau Còn sơ đồ mạch phát: dùng cách ghép darlington để khuếch đại tín hiệu đưa từ chân p1.5 tín hiệu từ 89c51 bé nên cần khuếch đại dòng cho để đủ sáng led, Q1,Q2 bác dùng loại NPN dùng C1815 Nói sơ qua cho bác hiểu nguyên lý hoạt động nhé: phát dạng xung vng có tần số 38khz tức chân p1.5 89c51 sẻ liên tục đảo chiều lên lại xuống 0, p1.5 lên Q1 dẫn lúc có dòng Vcc chạy từ cực C xuống E Q1, cực E Q1 nối với cực B Q2 nên Q1 dẫn cực B Q2 có dòng nên Q2 dẫn có dòng chạy từ Vcc qua cực C xuống E Q2 qua led phát hồng ngoại qua điện trở xuống mass, lúc led phát hồng ngoại sáng chân p1.5 xuống mức Q1 Q2 không dẫn nên led phát hồng ngoại tắt khối thu hồng ngoại : có chức phát xung ( có sảnphẩm qua ) đưa 89c51 để xử lý tăng số đếm lên đơn vị sơ đồ mạch thu: Các bác nối theo sơ đồ nhé, cho bác thông số nè: R15 2k2, R16 chọn 1K R16 có khả chống nhiểu có nhiểu bác việc thay trở R16 có giá trị nhỏ mà nghĩ khơng nhiểu đâu ngày xư dùng tới 22k nhiểu nên giảm xuống 1k thấy tốt bác yên tâm, R17 chọn 100Ω, biến trở R18 chọn 100k, tụ C4 C5 chọn khoảng 10uF Nguyên lý hoạt động: có sảnphẩm qua led thu hồng ngoại bị che khuất lúc có dòng từ Vcc qua led thu hồng ngoại ròi qua cực B Q3 lúc Q3 dẫn, cực C Q3 xuống mức thấp lúc tụ C4 xả điện qua diode qua Q3 xuống mass lúc chân số LM555 kích tạo xung chân số đưa cho ic89c51 xử lý (chân số LM555 nối vào chân P3.2 89c51 tức chân 12 ) Biến trở R18 dùng để điều chỉnh tốc độ nhận dạng sảnphẩm qua, có sảnphẩm qua led thu hồng ngoại bị che khuất ta có sơ đồ xung sau Khối hiển thị : dùng để hiển thị số lượng sảnphẩm qua Đây sơ đồ khối hiển thị: Q4 Q5 dùng loại PNP dùng A1015 Còn R13, R14 bác chọn khoảng 10k trở R5 đến R12 bác chọn cho led đủ sáng (nên chọn giá trị nhỏ thơi ) bác mà sợ tốn trở làm bỏ R5 đến R12 ta nối thẳng vào Port0 89c51 thay vào ta sẻ gắn cho trở cực C Q4 Q5 khoảng 220Ω bác chọn cho led đủ sáng Ở dùng led Anot chung ( loại Anot chung chân chung nối lên nguồn ) Led 7đoạn bác giải mã Đây hình dạng led Các bác dùng VOM để thang đo điện trở nhỏ đưa que đỏ vào chân số chân số que lại đưa vào chân 1,2,4,5,6,7,9,10 xem đâu a, đâu b… ( lưu ý VOM thị trường có loại trung quốc que đỏ cực âm que đen cực dương bác ý loại phải làm ngược lại đưa que đen vào chân số que đo chân lại ) Còn giải mã : 1:e 2:d 3:Vcc 4:c 5:dp 6:b 7:a 8:Vcc 9:f 10:g Các bác nối chân led vào port0 nhé: “a” nối vào chân P0.7 ( tức chân 32 89c51 ) “dp” nối vào chân P0.0 (tức chân 39 89c51) Như xong phần cứng thử cho hiển thị lên số Quy tắc ta cho phép dòng qua led led tích cực muốn cho chổ sáng ta cho chổ giả sử muốn cho led đơn vị sáng lên số ta điềukhiển cho chân p1.7 lên mức chân p1.6 mức led đơn vị cho phép muốn hiển thị lên số ta cần làm cho led a,b,c,d,e,f sáng sáng chân sẻ mức (cụ thể led giải mã điềukhiển 89c51 chân 1,2,4,6,7,9, led mức sẻ có số hiển thị led đơn vị ) muốn hiển thị số P0 cần xuất giá trị 00000011 tức 03H tương tự số chân "b,c" sáng port0 cần xuất giá trị 10011111 tức F9H tương tự ta có bảng số sau: = 03H; = 9FH; = 25H; = 0DH; = 99H; = 49H; = 41H; = 1FH; = 01H ; = 09H Đây mạch tổng quát : Phần cứng ổn viết chương trình cho nhé:Để viết chương trình bạn cần nắm cần làm đã: làm mạchđếmsảnphẩm quản lý số đếm R7 nên chương trình có nhiệm vụ nạp giá trị ban đầu cho phép ngắt, tách số BCD hiển thị LED Trong mạch sử dụng nguồn ngắt ngắt timer0 dùng để phát xung cho mạch phát, ngắt dùng để tăng số lượng sảnphẩm ngắt timer1 dùng để dừng băng truyền.Chương trình phát xung: sử dụng ngắt timer0 chế độ ( timer0 chế độ có khả tự nạp lại giá trị ban đầu nên cần nạp lần đủ ) Chúng ta dùng thạch anh 12MHz nên ta có chu kỳ máy = 1µs, phát tần số 38khz ta có T=1/f = 1/38 = 0.026ms = 26 µs → Ton =Toff = 26/2 = 13 cần nạp cho timer0 giá trị -13.Trong chương trình ngắt timer0 ta việc đảo trạng thái chân p1.5 ta có đoạn chương trình ngắt timer0 là: T0_ISR:CPL P1.5RETI Chương trình đếmsản phẩm: sử dụng ngắt Khi phát xung ( có sảnphẩm qua) chân P3.2 xuống mức thấp lúc xảy ngắt Trong chương trình ngắt ngồi tăng số đếm lên đơn vị so sánh với giá trị 100 đạt đến 100 reset ta có đoạn chương trình ngắt 0: EX0_ISR:INC R7 ; tăng số đếm lên đơn vịCJNE R7,#100,EXIT ;so sánh R7 với 100 chưa = 100 nhảy tởi EXIT 100 xóa 0MOV R7,#0EXIT: RETI Còn bác muốn dừng băng truyền chương trình ngắt ngồi ta so sánh số đếm với giá trị định sẳn chẳng hạn giá trị 20,40,60,80,100, số đếm giá trị cho dừng truyền 5s cho băng truyền hoạt động trở lại ta có lại đoạn chương trình ngắt ngồi sau: E0_ISR:INC R7 ; tăng R7 lên 1CJNE R7,#20,TIEP ; so sánh R7 với 20, chưa nhảy tới nhản TIEP gọi chương trình TIEPTUCACALL TIEPTUC ; gọi chương trình TIEPTUCTIEP: CJNE R7,#40,TIEP1 ; so sánh R7 với 40ACALL TIEPTUC ; gọi chương trình tiếp tụcTIEP1: CJNE R7,#60,TIEP2 ; so sánh R7 với 60ACALL TIEPTUC ; gọi chương trình TIEPTUCTIEP2: CJNE R7,#80,TIEP3 ; so sánh R7 với 80ACALL TIEPTUC ; gọi chương trình TIEPTUCTIEP3: CJNE R7,#100,EXIT ; so sánh R7 với 100MOV R7,#0 ; xóa R7 0ACALL TIEPTUC ; gọi chương trình TIEPTUCEXIT: RETI ; quay từ ngắt Trong chương trình TIEPTUC sẻ cho dừng băng truyền làm mơ nên thay động điềukhiểnbăng truyền led led sáng báo hiệu dừng băng truyền Trong main nạp giá trị ban đầu cho phép ngắt tách số BCD hiển thị lên LED dùng phương pháp quét led ( nói sơ qua phương pháp quét led cho số bác chưa biết hiểu: nối chân a,b,c,d,e,f,g,dp led chục led đơn vị lại với nhau, ta gửi tín hiệu led để hiển thị giá trị cần hiển thị dĩ nhiên cho phép hai led hai led hiển thị số, lúc cho phép led sáng ví dụ muốn hiển thị số 15 ta cần led chục hiển thị số led đơn vị hiển thị số ta gửi tín hiệu cho sáng số tắt led đơn vị cho phép led chục, delay khoảng thời gian gửi tiếp tín hiệu cho sáng số tắt led chục cho phép led đơn vị) quét led nghĩa cho trạng thái có led sáng led chục sáng số tắt led đơn vị, delay khoảng thời gian tắt led chục cho led đơn vị sáng số delay khoảng thời gian, tốc độ sáng led khoảng 24hình/s mắt có khơng thể nhận biết thay đổi có cảm giác hiển thị số 15 Giải thuật tách số đếm R7 này: nạp cho B giá trị 10 lấy R7 chuyển vào A lấy A chia cho B phần nguyên sẻ nằm A ( tức số chục lưu A ) phần dư nằm B ( tức số đơn vị nằm B), ta tách số chục số đơn vị ra, chuyển số hàng chục port0 cho led chục tích cực tắt led đơn vị, chuyển B A xuất port0 cho phép led đơn vị sáng tắt led chục Còn code hồn chỉnh: ORG 0000H ; điểm vào resetLJMP MAIN ; gọi chương trình chínhORG 000BH ; vecter timer 0LJMP T0_ISR ; gọi chương trình ngắt timer 0ORG 0003H ; vecter ngắt ngồi 0LJMP E0_ISR ; gọi chương trình ngắt ngồi 0ORG 001BH ; vecter timer 1LJMP T1_ISR ; gọi chương trình ngắt timer 1ORG 0030H ; điểm vào chương trình chínhMAIN: MOV TMOD, #12H ; timer chế độ timer chế độ 1MOV TH0,#(-13) ; sau 13 Ms xảy ngắt timer ( tần số 38Khz)SETB TR0 ; cho phép timer chạySETB EA ; cho phép ngắt toàn bộSETB ET0 ; cho phép ngắt timer 0SETB EX0 ; cho phép ngắt ngoàiSETB IT0 ; ngắt cạnh xuốngCLR P1.4 ; xóa p1.4 (tắt led báo hiệu dừng băng truyền)MOV R7,#0 ; nạp cho R7 giá trị ban đầu (R7 chứa số đếm)MOV R5,#50 ; nạp cho R5 giá trị 50 (mục đích tạo khoảng thời gian để ngừng băng truyền)LOOP: MOV A,R7 ; chuyển số đếm R7 vào AMOV B,#10 ; nạp cho B giá trị 10DIV AB ; chia A cho BMOV DPTR,#LUT ; trỏ DPTR vào bảng LUTMOVC A,@A+DPTR ;chuyển giá trị chọn bảng LUT vào ghi tích lũyAMOV P0,A ; xuất A port 0CLR P1.7 ; cho phép led chục sángSETB P1.6 ; tắt led đơn vịACALL DELAY ; gọi chương trình delayMOV A,B ; chuyển B vào AMOV DPTR,#LUT ; trỏ DPTR vào bảng LUTMOVC A,@A+DPTR ;chuyển giá trị chọn bảng LUT vào ghi tích lũyAMOV P0,A ; xuất A port 0CLR P1.6 ; cho phép led đơn vị sángSETB P1.7 ; tắt led chụcACALL DELAY ; gọi chương trình delaySJMP LOOP ; quay lại chương trình chínhRETT0_ISR: CPL P1.5 ; đảo trạng thái p1.5 ( mục đích tạo xung vng )RETI ; quay lại từ ngắtE0_ISR: INC R7 ; tăng R7 lên 1CJNE R7,#20,TIEP ; so sánh R7 với 20, chưa nhảy tới nhản TIEP gọi chương trình TIEPTUCACALL TIEPTUC ; gọi chương trình TIEPTUCTIEP: CJNE R7,#40,TIEP1 ; so sánh R7 với 40ACALL TIEPTUC ; gọi chương trình tiếp tụcTIEP1: CJNE R7,#60,TIEP2 ; so sánh R7 với 60ACALL TIEPTUC ; gọi chương trình TIEPTUCTIEP2: CJNE R7,#80,TIEP3 ; so sánh R7 với 80ACALL TIEPTUC ; gọi chương trình TIEPTUCTIEP3: CJNE R7,#100,EXIT ; so sánh R7 với 100MOV R7,#0 ; xóa R7 0ACALL TIEPTUC ; gọi chương trình TIEPTUCEXIT: RETI ; quay từ ngắtDELAY: MOV R6,#200DJNZ R6,$RET ; dòng lệnh delay 400MsTIEPTUC: SETB P1.4 ; cho đèn sáng ( báo hiệu dừng băng truyền )SETB ET1 ; cho phép ngắt timer 1MOV TH0,#HIGH(-50000)MOV TL0,#LOW(-50000) ; hai dòng lệnh nạp giá trị cho timer ( sau 50000 Ms xảy ngắt timer 1)SETB TR1 ; cho timer chạyRET ; kết thúc chương trình tiếp tụcT1_ISR: DJNZ R5,THOAT ; giảm R5 so sánh với chưa lằm tiếpCLR P1.4 ; tắt đèn ( báo hiệu cho băng truyền hoạt động trở lại )CLR ET1 ; cấm ngắt timer 1CLR TR1 ; dừng timer 1MOV R5,#50 ; nạp lại cho R5 giá trị 50THOAT: RETI ; trở từ ngắtLUT: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09HEND phù làm mệt không thành Demo : http://www.youtube.com/watch?v=zgxf1ywCd28&feature=player_embedded ...Đây mạch đếm sản phẩm ứng dụng vi điều khiển mcs_51 dùng thu phát hồng ngoại, tăng số lượng sản phẩm lên kỷ thuật đếm xung, sử dụng phương pháp quét led để hiển thị số đếm có khả dừng... 41H; = 1FH; = 01H ; = 09H Đây mạch tổng quát : Phần cứng ổn vi t chương trình cho nhé:Để vi t chương trình bạn cần nắm cần làm đã: làm mạch đếm sản phẩm quản lý số đếm R7 nên chương trình có nhiệm... Biến trở R18 dùng để điều chỉnh tốc độ nhận dạng sản phẩm qua, có sản phẩm qua led thu hồng ngoại bị che khuất ta có sơ đồ xung sau Khối hiển thị : dùng để hiển thị số lượng sản phẩm qua Đây sơ đồ