LỜI NÓI ĐẦU Công cuộc công nghiệp hóa hiện đại hóa đất nước đang diễn ra theo sự tiến bộ của khoa học kĩ thuật. Trước tình hình đó đã có khá nhiều yêu cầu cấp bách và cũng có những thách thức đặt ra cho giới trí thức .
Cơ điện tử là một lĩnh vực mới mà ở nước ta đang nghiên cứu và từng bước phát triển để ứng dụng vào quá trình sản xuất góp phần năng cao năng suất lao động .
Do vậy là sinh viên với chuyên ngành cơ điện tử cần phải nắm vững kiến thức và kĩ năng từ đơn giản đến phức tạp như : biết cách sử dụng thành thạo các loại cảm biến kết nối với hệ thống để thu nhận tín hiệu . rèn luyện kĩ năng lập trình trên các hệ thống sử dụng vi điều khiển và PLC trong các hệ thống công nghiệp và các ứng dụng trong sinh hoạt và sản xuất.
Sau thời gian học tập và nghiên cứu cùng với sự nỗ lực của nhóm chúng em đã hoàn thành nhiệm vụ thiết kế mô hình cổng tự động. Em xin chân thành cảm ơn thầy trong bộ môn cơ điện tử đã giúp đỡ tận tình, và đặc biệt cảm ơn thầy hướng dẫn đồ án. Mô hình không tránh khỏi những thiếu xót, chúng em mong được sự chỉ bảo của các thầy để sản phẩm hoàn thiện hơn và có thể ứng dụng vào thực tế .
MỤC LỤC CHƯƠNG 1: GIỚI THIỆU SƠ LƯỢC VỀ CỔNG TỰ ĐỘNG VÀ NHIỆM VỤ MÔN HỌC.
1.1 GIỚI THIỆU:
1.2 NHIỆM VỤ VÀ PHÂN TÍCH NHIỆM VỤ
CHƯƠNG 2: THIẾT KẾ TỔNG QUÁT PHẦN CỨNG
2.1. Sơ đồ khối
2.2. Sơ lược chức năng của từng khối
2.2.1. Vi điều khiển melga32
2.2.2. Khối thu hồng ngoại
2.2.3. Khối hiển thị
2.2.4. Khối công suất
2.3. Thiết kế chi tiết
2.3.1. Khối thu hồng ngoại
-Sơ đồ nguyên lý
2.3.2. Khối MCU
2.3.4. Khối công suất:
- Sơ đồ nguyên lý
2.3.3. Khối hiển thị:
CHƯƠNG 3: LÝ THUYẾT LIÊN QUAN
3.1. Điều khiển từ xa dùng tia hồng ngoại
3.2 Ngắt trong timer 0
3.3. Ngắt ngoài
3.4Mô hình cửa tự động bằng solidwoks.
CHƯƠNG 4: THIẾT KẾ CHƯƠNG TRÌNH
4.1. GIẢI THUẬT CHƯƠNG TRÌNH CHÍNH
4.1. Giải thuật chương trình chính
4.2 Chương trình điều khiển
CHƯƠNG5: KẾT LUẬN VÀ TÀI LIỆU THAM KHẢO
5.1 KẾT QUẢ VÀ THỰC NGHIỆM .
5.2HƯỚNG PHÁT TRIỂN CỦA ĐỒ ÁN MÔN HỌC
5.3 TÀI LIỆU THAM KHẢO
44 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2826 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Thiết kế và điều khiển cửa tự động bằng remote, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LỜI NÓI ĐẦU
Công cuộc công nghiệp hóa hiện đại hóa đất nước đang diễn ra theo sự tiến bộ của khoa học kĩ thuật. Trước tình hình đó đã có khá nhiều yêu cầu cấp bách và cũng có những thách thức đặt ra cho giới trí thức .
Cơ điện tử là một lĩnh vực mới mà ở nước ta đang nghiên cứu và từng bước phát triển để ứng dụng vào quá trình sản xuất góp phần năng cao năng suất lao động .
Do vậy là sinh viên với chuyên ngành cơ điện tử cần phải nắm vững kiến thức và kĩ năng từ đơn giản đến phức tạp như : biết cách sử dụng thành thạo các loại cảm biến kết nối với hệ thống để thu nhận tín hiệu . rèn luyện kĩ năng lập trình trên các hệ thống sử dụng vi điều khiển và PLC trong các hệ thống công nghiệp và các ứng dụng trong sinh hoạt và sản xuất.
Sau thời gian học tập và nghiên cứu cùng với sự nỗ lực của nhóm chúng em đã hoàn thành nhiệm vụ thiết kế mô hình cổng tự động. Em xin chân thành cảm ơn thầy trong bộ môn cơ điện tử đã giúp đỡ tận tình, và đặc biệt cảm ơn thầy hướng dẫn đồ án VŨ THĂNG LONG. Mô hình không tránh khỏi những thiếu xót, chúng em mong được sự chỉ bảo của các thầy để sản phẩm hoàn thiện hơn và có thể ứng dụng vào thực tế .
Em xin chân thành cảm ơn !
Nha trang, ngày 18 tháng 5 năm 2010
Nhóm sinh viên thực hiện
CHƯƠNG 1: GIỚI THIỆU SƠ LƯỢC VỀ CỔNG TỰ ĐỘNG VÀ NHIỆM VỤ MÔN HỌC.
1.1 GIỚI THIỆU:
Hiện nay tự động hóa được ứng dụng vào rất nhiều lĩnh vực và ngành nghề, tại nhiều cơ quan và xí nghiệp vì lý do an ninh nên đã đầu tư tiền xây hang rào và cổng cơ quan. Vì độ an toàn nên những chiếc cổng này thường rất nặng nên việc vận hành thường mất rất nhiều sức lực của nhân viên bảo vệ và cũng mất khá nhiều thời gian. Cổng tự động có các ưu điểm sau:
Thay thế sức người bằng máy móc, tiết kiệm thời gian.
Người sử dụng dễ dàng vận hành, bảo trì.
Gía thành hợp lý.
Đảm bảo an toàn khi sử dụng, ít bị ảnh hưởng do thời tiết.
1.2 NHIỆM VỤ VÀ PHÂN TÍCH NHIỆM VỤ
Nhiệm vụ của đồ án môn học là thiết kế mô hình cổng tự động dùng ATmega32 để làm cổng tự động ta cần biết :
Biết cách đọc và dịch datasheet của các IC để biết nguyên lí hoạt động và chức năng của chúng .
Lập trình ứng dụng họ Vi điều khiển ATmega32.
Lập trình tự để làm 1 sản phẩm thực tế là :
Bước 1: Đi khảo sát thị trường, thăm dò nhu cầu của người sử dụng như muốn thiết kế cổng theo kiểu dáng nào, khối lượng cổng bao nhiêu, vận hành như thế nào
Bước 2: Nêu các yêu cầu với 1 cổng tự động mà thị trường đang cần và bắt đầu ý tưởng thiết kế mô hình sản phẩm .
Bước 3: Phân tích ưu nhược điểm của từng ý tưởng 1 để chọn ra mô hình cuối cùng .
Bước 4: Bắt tay vào làm sản phẩm thực và lập trình cho chạy thử .
Hiểu hơn về cấu tạo cũng như hoạt động các khối chức năng của vi điều khiển như điều khiển động cơ và tốc độ động cơ…..và các khối chức năng khác .
Rèn luyện tư duy lập trình cho vi điều khiển .
CHƯƠNG 2: THIẾT KẾ TỔNG QUÁT PHẦN CỨNG
2.1. Sơ đồ khối:
Khối hiển thị
Khối thu hồng ngoại
Khối MCU Melga32
Khối công suất
Hệ thống hoạt động theo chương trình đã nạp trên ROM, qua sự điều khiển của MCU Melga32. Mắt thu hồng ngoại đặt nơi có thể hứng được tia hồng ngoại của remote tivi truyền tới tốt nhất. Mắt thu hồng nhận tín hiệu từ Remote truyền tới rồi đưa vào vi điều khiển để giải mã rồi truyền tín hiệu ra các chân đìu khiển.
Dựa vào chương trình đã nap trong VĐK và tín hiệu mà nó nhận được, mà MCU cho các thiết bị ngoại vi hoạt động: điều khiển led hoạt đông theo chương trình định sẵn, điều khiển các thiết bị như quạt điện, đèn và các thiết bị khác.
2.2. Sơ lược chức năng của từng khối:
2.2.1. Vi điều khiển melga32 là phần tử thu nhập xử lý thông tin và đưa ra các tìn hiệu điều khiển thiêt bị.
2.2.2. Khối thu hồng ngoại là thu tín hiệu từ remote và tín hiệu ra của nó là thông tin được đưa vào VĐK .
2.2.3. Khối hiển thị là để giao tiếp vớ người sử dụng như hiển thị ra led tín hiệu điều khiển.
2.2.4. Khối công suất là dùng để đóng mở nguồn công suất.
2.3. Thiết kế chi tiết:
2.3.1. Khối thu hồng ngoại:
-Sơ đồ nguyên lý:
+ Khối này gồm mắt thu hồng ngoại U5 có võ bọc bằng kim loại để chống nhiểu.
Hình dạng bên ngoài như hinh bên
Cấu tạo bằng chất bán dẫn có 3 chân:
1.Chân đưa tín hiệu ra (OUT).
2.Chân nối mass (GND).
3.Chân nối nguồn +5V (VCC).
+ Điện trở R50 và tụ hóa C21 có tác dụng lọc nhiễu.
+ Chân tín hiệu OUT được nối với chân ngắt ngoài của vi điều khiển (Encoder).
- Nguyên lý hoạt động:
Khi Remote phát tín hiệu hồng ngoại thì mắt thu sẽ nhận được, tín hiệu thu được nhờ tụ C21 và trở R50 lọc nhiễu rồi đưa tín hiệu về chân ngắt ngoài INT0 của vi điều khiển.
2.3.2. Khối MCU:
- Khối nguồn cho VĐK:
Nguồn nuôi của vi điều khiển là nguồn DC 5V, sau khi qua biến áp 12V, điện áp xoay chiều 220V sẽ còn 12V và được đưa qua chỉnh lưu thành dòng 1 chiều, sau khi qua IC ổn áp 7805,điện áp ra còn 5V và được đưa vào vi điều khiển.
Để cho điện áp sau chỉnh lưu trở nên tương đối ổn định,ta dùng các tụ lọc.
- Mạch nguyên lý của Atmelga32:
Atmega 32 là vi điều khiển họ AVR, có 40 chân, trong đó có 4 PORT:A, B, C, D. Mỗi PORT có 8 chân, có thể khai báo là đầu vào hoặc đầu ra tùy người sử dụng. Các chân còn lại là chân nguồn, đất, reset(như hình), và có chân gắn thạch anh để tạo tần số dao động cho nó.
PORTC chỉ là các chân vào ra bình thường.
PORTA là kênh vào ADC, dùng để đọc tín hiệu điện áp, biến từ tín hiệu tương tự thành tín hiệu số.
PORTB là nơi để kết nối LCD hiển thị ra bên ngoài.
PORTD có 3 kênh PWM (2,3,4), 2 chân(Mas_RXD, Mas_TXD)kết nối giao tiếp với máy tính qua RS232.
+ PORTD.2 là chân ngắt ngoài được nối với đầu ra của mắt thu hồng ngoại.
+ PORTC.0, PORTC.1, PORTC.2, các chân để kích rơle điều khiển thiết bị bên ngoài.
+ PORTA điều khiển động cơ
Để biết rõ hơn về vi điều khiển melga32 ta tìm hiểu thêm trong Datasheet của nó.
2.3.3. Khối hiển thị:
- Gồm 8 led đơn mắt theo sơ đồ như hình bên:
Cực dương của 8 led dược nối thông qua 8 con điện trở rồi nối dến nguồn 5V. Các chân âm của led được gắn vào một PORT của VĐK.
2.3.4. Khối công suất:
- Sơ đồ nguyên lý:
-Nguyên lý hoạt động: Tín hiệu điều khiển từ vi điều khiển (PORTC.0) đưa vào chân B đẻ kích transitor làm đóng ngắt Rowle. Khi Rơle đóng thì sẽ có điện áp AC 220V đi qua tải.
- Tính toán và thiết kế:
+ Chọn Rơle có điện áp kích cuộn dây là 5VDC, điện trở 100Ω, điện áp chịu đựng của tiếp điểm là 220VAC.
+ Chọn Q13 là Transitor C1815 có dòng IC khoảng 400mA chọn dòng điện qua led là 10mA.
+ Tính R57:
Vậy chọn trở ở đây là R57= 220Ω.
+ Dòng qua Rơle: I rơle=
+ Tổng dòng IC = 50mA +10mA =60mA.
+ Điêù kiện để Transitor bảo hòa : IB >=
Chọn β =60.
+ Tính R58 :
Để bảo hòa sâu ta chọn R58=1KΩ
Vậy các thông số của mạch là:
Q13 là C1815 có dòng IC khoảng 400mA.
R57=220Ω, R58=1KΩ
CHƯƠNG 3: LÝ THUYẾT LIÊN QUAN
3.1. Điều khiển từ xa dùng tia hồng ngoại
Khái niệm về tia hồng ngoại:
Ánh sáng hồng ngoại (tia hông ngoại) là ánh sáng không thể nhìn thấy bằng mắt thường, có bước sóng khoảng 0.8 µm đến 0.9 µm, tia hồng ngoại có vận tốc truyền bằng vận tốc ánh sáng.
Tia hồng ngoại có thể truyền đi được nhiều kênh tín hiệu. Nó ứng dụng rộng rãi trong công nghiệp.Lượng thông tin có thể đạt được 3 Mbít/s…Trong kỹ thuật truyền tin bằng sợi quang dẫn không cần các trạm khuếch đại giữa chừng, người ta có thể truyền một lúc 15000 điện thoại hay 12 kênh truyền hình qua một sợi tơ quang với đường kính 0.13 mm với khoảng cách 10 km hay 20 km. Lượng thông tin được truyền đi bởi ánh sáng hồng ngoại lớn gấp nhiều lần so với sóng điện từ mà người ta vẫn dùng.
Tia hồng ngoại dễ bị hấp thụ, khả năng xuyên thấu kém. Trong điều khiển từ xa, chùm tia hồng ngoại phát tia đi hẹp, có hướng do đó khi thu phải đúng hướng.
3.1.1. Sơ đồ khối hệ thống điều khiển từ xa dùng tia hồng ngoại
Máy phát:
Phát lệnh điều khiển
Mã
hóa
Điều
chế
Khuếch
đại
Dao động tạo sóng mang
Giải thích sơ đồ khối máy phát
Máy phát có nhiệm vụ tạo ra lệnh điều khiển, mã hóa và tín hiệu đến máy thu, lệnh truyền đi đã được điều chế
Khối phát lệnh điều khiển:
Khối này có nhiệm vụ tạo ra lệnh điều khiển từ nút nhấn (phím điều khiển). Khi một phím được ấn tức là một lệnh đã được tạo ra. Các nút ấn này có thể là một nút (ở mạch điều khiển đơn giản), hay một ma trận nút (mạch điều khiển chức năng). Ma trận phím được bố trí theo cột và hàng. Lệnh điều khiển được đưa đến bộ mã hóa dưới dạng các bít nhị phân tương ứng với từng phím điều khiển
Khối mã hóa:
Để truyền các tín hiệu khác nhau đến máy thu mà chúng không lẫn lộn nhau, ta phải tiến hành mã hóa các tín hiệu. Khối mã hóa này có nhiệm vụ biến đổi các lệnh điều khiển thành các bit nhị phân, hiện tượng biến đổi này gọi là mã hóa. Có nhiều phương pháp mã hóa khác nhau.
Điều chế biên độ xung
Điều chế vị trí xung
Điều chế độ rộng xung
Điều chế mã xung
Trong kỷ thuật điều khiển từ xa tia hồng ngoại, phương pháp điều chế mã xung thường được sử dụng nhiều hơn cả, vì phương pháp này tương đối đơn giản, dễ thực hiện
Khối dao động tạo sóng mang
Khối này có nhiệm vụ tạo sóng mang tần số ổn định, sóng mang này sẽ mang tìn hiệu điều khiển khi truyền ra môi trường
Khối điều chế:
Khối này có nhiệm vụ kết hợp tín hiệu điều khiển đã mã hóa sóng mang để đưa đến khối khuếch đại
Khối khuếch đai:
Khuếch đại tín hiệu đủ lớn để LED phát hồng ngoại tín hiệu ra môi trường
Máy thu:
Khuếch
đại
Tách
sóng
Giải
mã
Chốt
Mạch chấp hành
Khuếch
đại
Giải thích sơ đồ khối máy thu
Chức năng của máy thu là thu được tín hiệu điều khiển từ máy phát, loại bỏ sóng mang, giải mã tín hiệu điều khiển thành các lệnh riêng biệt, từ đó mỗi lệnh sẽ đưa đến khối chấp hành cụ thể
LED thu
Thu tín hiệu hồng ngoại do máy phát truyền tới và biến đổi thành tín hiệu điều khiển
Khối khuếch đại
Có nhiệm vụ khuếch đại tín hiệu điều khiển lớn lên từ từ, LED thu hồng ngoại để quá trình xữ lí tín hiệu được dễ dàng
Khối tách sóng mang
Khối này có chức năng triệt tiêu sóng mang, chỉ giữ lại tín hiệu điều khiển như tín hiệu gửi đi từ máy phát
Khối giải mã
Nhiệm vụ của khối này là giải mã tín hiệu điều khiển thành các lệnh điều khiển dưới dạng các bit nhị phân hay các dạng khác để đưa đến khối chấp hành cụ thể
Khối chốt
Có nhiệm vụ giữ nguyên trạng thái tác động khi tín hiệu điều khiển không còn, điều này có nghĩa là khi phát lệnh điều khiển ta chỉ tác động vào phím ấn một lần, trạng thái mạch chỉ thay đổi khi ta chỉ tác động vào nút khác thực hiện điều khiển lệnh khác.
Khối khuếch đại:
Khuếch đại tín hiệu điều khiển đủ lớn để tác động được vào mạch chấp hành
Khối chấp hành
Có thể là role hay một linh kiên điều khiển nài đó, đây là khối cuối cùng tác động trực tiếp vào thiết bị thực hiện nhiệm vụ điều khiển mong muốn
3.2 Ngắt trong timer 0
Bộ ngắt timer0, 8 bít nếu được thiết lập thì nó sẽ hoạt động với 5 tần số chia của thạch anh ngoài đưa vào vi điều khiển. Khi bắt đầu hoạt động thì ta có thể thiết lập 2 chế độ ngắt là ngắt tràn và ngắt so sánh .
Ngắt tràn là ngắt mà khi timer hoạt động nó sẽ đếm số xung cấp vào khi nào được 255 xung thì sẽ dừng chương trình chính và đi thực hiện chương trình phục vụ ngắt. Số lần ngắt trong 1s sẽ bằng số xung cấp vào chia cho 255.
Ngắt so sánh là ngắt mà khi timer hoạt động nó sẽ đếm số xung cấp vào khi nào đến giá trị mà ta so sánh thì sẽ dừng chương trình chính và đi thực hiện chương trình phục vụ ngắt .
3.3. Ngắt ngoài
Ngắt ngoài là chương trình con phục vụ ngắt ngoài sẽ được thực hiện khi có các sự kiện sau xảy ra:
Khi phát hiện sườn lên của xung .
Khi phát hiện sườn xuống của xung .
Khi có bất kì sự thay đổi nào .
Ở mức thấp (low level) .
3.4Mô hình cửa tự động bằng solidwoks.
CHƯƠNG 4: THIẾT KẾ CHƯƠNG TRÌNH
4.1. Giải thuật chương trình chính
Start
Nạp giá trị khởi tạo thanh ghi ban đầu
i =0
So sánh hai chuổi frame và frame_table[i]==0?
i< num_frame
Điều khiển thiết bị thứ i
i++
4.2 Chương trình
CodeVisionAVR C Compiler V1.24.6 Standard
;(C) Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
;
;e-mail:office@hpinfotech.com
;Chip type : ATmega32
;Program type : Application
;Clock frequency : 8,000000 MHz
;Memory model : Small
;Optimize for : Size
;(s)printf features : int, width
;(s)scanf features : int, width
;External SRAM size : 0
;Data Stack size : 512 byte(s)
;Heap size : 0 byte(s)
;Promote char to int : No
;char is unsigned : Yes
;8 bit enums : Yes
;Word align FLASH struct: No
;Enhanced core instructions : On
;Automatic register allocation : On
.EQU UDRE=0x5
.EQU RXC=0x7
.EQU USR=0xB
.EQU UDR=0xC
.EQU SPSR=0xE
.EQU SPDR=0xF
.EQU EERE=0x0
.EQU EEWE=0x1
.EQU EEMWE=0x2
.EQU EECR=0x1C
.EQU EEDR=0x1D
.EQU EEARL=0x1E
.EQU EEARH=0x1F
.EQU WDTCR=0x21
.EQU MCUCR=0x35
.EQU GICR=0x3B
.EQU SPL=0x3D
.EQU SPH=0x3E
.EQU SREG=0x3F
.DEF R0X0=R0
.DEF R0X1=R1
.DEF R0X2=R2
.DEF R0X3=R3
.DEF R0X4=R4
.DEF R0X5=R5
.DEF R0X6=R6
.DEF R0X7=R7
.DEF R0X8=R8
.DEF R0X9=R9
.DEF R0XA=R10
.DEF R0XB=R11
.DEF R0XC=R12
.DEF R0XD=R13
.DEF R0XE=R14
.DEF R0XF=R15
.DEF R0X10=R16
.DEF R0X11=R17
.DEF R0X12=R18
.DEF R0X13=R19
.DEF R0X14=R20
.DEF R0X15=R21
.DEF R0X16=R22
.DEF R0X17=R23
.DEF R0X18=R24
.DEF R0X19=R25
.DEF R0X1A=R26
.DEF R0X1B=R27
.DEF R0X1C=R28
.DEF R0X1D=R29
.DEF R0X1E=R30
.DEF R0X1F=R31
.EQU __se_bit=0x80
.EQU __sm_mask=0x70
.EQU __sm_adc_noise_red=0x10
.EQU __sm_powerdown=0x20
.EQU __sm_powersave=0x30
.EQU __sm_standby=0x60
.EQU __sm_ext_standby=0x70
.MACRO __CPD1N
CPI R30,LOW(@0)
LDI R26,HIGH(@0)
CPC R31,R26
LDI R26,BYTE3(@0)
CPC R22,R26
LDI R26,BYTE4(@0)
CPC R23,R26
.ENDM
.MACRO __CPD2N
CPI R26,LOW(@0)
LDI R30,HIGH(@0)
CPC R27,R30
LDI R30,BYTE3(@0)
CPC R24,R30
LDI R30,BYTE4(@0)
CPC R25,R30
.ENDM
.MACRO __CPWRR
CP R@0,R@2
CPC R@1,R@3
.ENDM
.MACRO __CPWRN
CPI R@0,LOW(@2)
LDI R30,HIGH(@2)
CPC R@1,R30
.ENDM
.MACRO __ADDD1N
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
SBCI R22,BYTE3(-@0)
SBCI R23,BYTE4(-@0)
.ENDM
.MACRO __ADDD2N
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
SBCI R24,BYTE3(-@0)
SBCI R25,BYTE4(-@0)
.ENDM
.MACRO __SUBD1N
SUBI R30,LOW(@0)
SBCI R31,HIGH(@0)
SBCI R22,BYTE3(@0)
SBCI R23,BYTE4(@0)
.ENDM
.MACRO __SUBD2N
SUBI R26,LOW(@0)
SBCI R27,HIGH(@0)
SBCI R24,BYTE3(@0)
SBCI R25,BYTE4(@0)
.ENDM
.MACRO __ANDD1N
ANDI R30,LOW(@0)
ANDI R31,HIGH(@0)
ANDI R22,BYTE3(@0)
ANDI R23,BYTE4(@0)
.ENDM
.MACRO __ORD1N
ORI R30,LOW(@0)
ORI R31,HIGH(@0)
ORI R22,BYTE3(@0)
ORI R23,BYTE4(@0)
.ENDM
.MACRO __DELAY_USB
LDI R24,LOW(@0)
__DELAY_USB_LOOP:
DEC R24
BRNE __DELAY_USB_LOOP
.ENDM
.MACRO __DELAY_USW
LDI R24,LOW(@0)
LDI R25,HIGH(@0)
__DELAY_USW_LOOP:
SBIW R24,1
BRNE __DELAY_USW_LOOP
.ENDM
.MACRO __CLRD1S
LDI R30,0
STD Y+@0,R30
STD Y+@0+1,R30
STD Y+@0+2,R30
STD Y+@0+3,R30
.ENDM
.MACRO __GETD1S
LDD R30,Y+@0
LDD R31,Y+@0+1
LDD R22,Y+@0+2
LDD R23,Y+@0+3
.ENDM
.MACRO __PUTD1S
STD Y+@0,R30
STD Y+@0+1,R31
STD Y+@0+2,R22
STD Y+@0+3,R23
.ENDM
.MACRO __POINTB1MN
LDI R30,LOW(@0+@1)
.ENDM
.MACRO __POINTW1MN
LDI R30,LOW(@0+@1)
LDI R31,HIGH(@0+@1)
.ENDM
.MACRO __POINTW1FN
LDI R30,LOW(2*@0+@1)
LDI R31,HIGH(2*@0+@1)
.ENDM
.MACRO __POINTB2MN
LDI R26,LOW(@0+@1)
.ENDM
.MACRO __POINTW2MN
LDI R26,LOW(@0+@1)
LDI R27,HIGH(@0+@1)
.ENDM
.MACRO __POINTBRM
LDI R@0,LOW(@1)
.ENDM
.MACRO __POINTWRM
LDI R@0,LOW(@2)
LDI R@1,HIGH(@2)
.ENDM
.MACRO __POINTBRMN
LDI R@0,LOW(@1+@2)
.ENDM
.MACRO __POINTWRMN
LDI R@0,LOW(@2+@3)
LDI R@1,HIGH(@2+@3)
.ENDM
.MACRO __GETD1N
LDI R30,LOW(@0)
LDI R31,HIGH(@0)
LDI R22,BYTE3(@0)
LDI R23,BYTE4(@0)
.ENDM
.MACRO __GETD2N
LDI R26,LOW(@0)
LDI R27,HIGH(@0)
LDI R24,BYTE3(@0)
LDI R25,BYTE4(@0)
.ENDM
.MACRO __GETD2S
LDD R26,Y+@0
LDD R27,Y+@0+1
LDD R24,Y+@0+2
LDD R25,Y+@0+3
.ENDM
.MACRO __GETB1MN
LDS R30,@0+@1
.ENDM
.MACRO __GETW1MN
LDS R30,@0+@1
LDS R31,@0+@1+1
.ENDM
.MACRO __GETD1MN
LDS R30,@0+@1
LDS R31,@0+@1+1
LDS R22,@0+@1+2
LDS R23,@0+@1+3
.ENDM
.MACRO __GETBRMN
LDS R@0,@1+@2
.ENDM
.MACRO __GETWRMN
LDS R@0,@2+@3
LDS R@1,@2+@3+1
.ENDM
.MACRO __GETWRZ
LDD R@0,Z+@2
LDD R@1,Z+@2+1
.ENDM
.MACRO __GETD2Z
LDD R26,Z+@0
LDD R27,Z+@0+1
LDD R24,Z+@0+2
LDD R25,Z+@0+3
.ENDM
.MACRO __GETB2MN
LDS R26,@0+@1
.ENDM
.MACRO __GETW2MN
LDS R26,@0+@1
LDS R27,@0+@1+1
.ENDM
.MACRO __GETD2MN
LDS R26,@0+@1
LDS R27,@0+@1+1
LDS R24,@0+@1+2
LDS R25,@0+@1+3
.ENDM
.MACRO __PUTB1MN
STS @0+@1,R30
.ENDM
.MACRO __PUTW1MN
STS @0+@1,R30
STS @0+@1+1,R31
.ENDM
.MACRO __PUTD1MN
STS @0+@1,R30
STS @0+@1+1,R31
STS @0+@1+2,R22
STS @0+@1+3,R23
.ENDM
.MACRO __PUTDZ2
STD Z+@0,R26
STD Z+@0+1,R27
STD Z+@0+2,R24
STD Z+@0+3,R25
.ENDM
.MACRO __PUTBMRN
STS @0+@1,R@2
.ENDM
.MACRO __PUTWMRN
STS @0+@1,R@2
STS @0+@1+1,R@3
.ENDM
.MACRO __PUTBZR
STD Z+@1,R@0
.ENDM
.MACRO __PUTWZR
STD Z+@2,R@0
STD Z+@2+1,R@1
.ENDM
.MACRO __GETW1R
MOV R30,R@0
MOV R31,R@1
.ENDM
.MACRO __GETW2R
MOV R26,R@0
MOV R27,R@1
.ENDM
.MACRO __GETWRN
LDI R@0,LOW(@2)
LDI R@1,HIGH(@2)
.ENDM
.MACRO __PUTW1R
MOV R@0,R30
MOV R@1,R31
.ENDM
.MACRO __PUTW2R
MOV R@0,R26
MOV R@1,R27
.ENDM
.MACRO __ADDWRN
SUBI R@0,LOW(-@2)
SBCI R@1,HIGH(-@2)
.ENDM
.MACRO __ADDWRR
ADD R@0,R@2
ADC R@1,R@3
.ENDM
.MACRO __SUBWRN
SUBI R@0,LOW(@2)
SBCI R@1,HIGH(@2)
.ENDM
.MACRO __SUBWRR
SUB R@0,R@2
SBC R@1,R@3
.ENDM
.MACRO __ANDWRN
ANDI R@0,LOW(@2)
ANDI R@1,HIGH(@2)
.ENDM
.MACRO __ANDWRR
AND R@0,R@2
AND R@1,R@3
.ENDM
.MACRO __ORWRN
ORI R@0,LOW(@2)
ORI R@1,HIGH(@2)
.ENDM
.MACRO __ORWRR
OR R@0,R@2
OR R@1,R@3
.ENDM
.MACRO __EORWRR
EOR R@0,R@2
EOR R@1,R@3
.ENDM
.MACRO __GETWRS
LDD R@0,Y+@2
LDD R@1,Y+@2+1
.ENDM
.MACRO __PUTWSR
STD Y+@2,R@0
STD Y+@2+1,R@1
.ENDM
.MACRO __MOVEWRR
MOV R@0,R@2
MOV R@1,R@3
.ENDM
.MACRO __INWR
IN R@0,@2
IN R@1,@2+1
.ENDM
.MACRO __OUTWR
OUT @2+1,R@1
OUT @2,R@0
.ENDM
.MACRO __CALL1MN
LDS R30,@0+@1
LDS R31,@0+@1+1
ICALL
.ENDM
.MACRO __CALL1FN
LDI R30,LOW(2*@0+@1)
LDI R31,HIGH(2*@0+@1)
CALL __GETW1PF
ICALL
.ENDM
.MACRO __CALL2EN
LDI R26,LOW(@0+@1)
LDI R27,HIGH(@0+@1)
CALL __EEPROMRDW
ICALL
.ENDM
.MACRO __GETW1STACK
IN R26,SPL
IN R27,SPH
ADIW R26,@0+1
LD R30,X+
LD R31,X
.ENDM
.MACRO __NBST
BST R@0,@1
IN R30,SREG
LDI R31,0x40
EOR R30,R31
OUT SREG,R30
.ENDM
.MACRO __PUTB1SN
LDD R26,Y+@0
LDD R27,Y+@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM
.MACRO __PUTW1SN
LDD R26,Y+@0
LDD R27,Y+@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1SN
LDD R26,Y+@0
LDD R27,Y+@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
CALL __PUTDP1
.ENDM
.MACRO __PUTB1SNS
LDD R26,Y+@0
LDD R27,Y+@0+1
ADIW R26,@1
ST X,R30
.ENDM
.MACRO __PUTW1SNS
LDD R26,Y+@0
LDD R27,Y+@0+1
ADIW R26,@1
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1SNS
LDD R26,Y+@0
LDD R27,Y+@0+1
ADIW R26,@1
CALL __PUTDP1
.ENDM
.MACRO __PUTB1PMN
LDS R26,@0
LDS R27,@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM
.MACRO __PUTW1PMN
LDS R26,@0
LDS R27,@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1PMN
LDS R26,@0
LDS R27,@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
CALL __PUTDP1
.ENDM
.MACRO __PUTB1PMNS
LDS R26,@0
LDS R27,@0+1
ADIW R26,@1
ST X,R30
.ENDM
.MACRO __PUTW1PMNS
LDS R26,@0
LDS R27,@0+1
ADIW R26,@1
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1PMNS
LDS R26,@0
LDS R27,@0+1
ADIW R26,@1
CALL __PUTDP1
.ENDM
.MACRO __PUTB1RN
MOVW R26,R@0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM
.MACRO __PUTW1RN
MOVW R26,R@0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1RN
MOVW R26,R@0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
CALL __PUTDP1
.ENDM
.MACRO __PUTB1RNS
MOVW R26,R@0
ADIW R26,@1
ST X,R30
.ENDM
.MACRO __PUTW1RNS
MOVW R26,R@0
ADIW R26,@1
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1RNS
MOVW R26,R@0
ADIW R26,@1
CALL __PUTDP1
.ENDM
.MACRO __PUTB1RON
MOV R26,R@0
MOV R27,R@1
SUBI R26,LOW(-@2)
SBCI R27,HIGH(-@2)
ST X,R30
.ENDM
.MACRO __PUTW1RON
MOV R26,R@0
MOV R27,R@1
SUBI R26,LOW(-@2)
SBCI R27,HIGH(-@2)
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1RON
MOV R26,R@0
MOV R27,R@1
SUBI R26,LOW(-@2)
SBCI R27,HIGH(-@2)
CALL __PUTDP1
.ENDM
.MACRO __PUTB1RONS
MOV R26,R@0
MOV R27,R@1
ADIW R26,@2
ST X,R30
.ENDM
.MACRO __PUTW1RONS
MOV R26,R@0
MOV R27,R@1
ADIW R26,@2
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1RONS
MOV R26,R@0
MOV R27,R@1
ADIW R26,@2
CALL __PUTDP1
.ENDM
.MACRO __GETB1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R30,Z
.ENDM
.MACRO __GETW1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R0,Z+
LD R31,Z
MOV R30,R0
.ENDM
.MACRO __GETD1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R0,Z+
LD R1,Z+
LD R22,Z+
LD R23,Z
MOVW R30,R0
.ENDM
.MACRO __GETB2SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R26,X
.ENDM
.MACRO __GETW2SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
.ENDM
.MACRO __GETD2SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R1,X+
LD R24,X+
LD R25,X
MOVW R26,R0
.ENDM
.MACRO __GETBRSX
MOVW R30,R28
SUBI R30,LOW(-@1)
SBCI R31,HIGH(-@1)
LD R@0,Z
.ENDM
.MACRO __GETWRSX
MOVW R30,R28
SUBI R30,LOW(-@2)
SBCI R31,HIGH(-@2)
LD R@0,Z+
LD R@1,Z
.ENDM
.MACRO __LSLW8SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R31,Z
CLR R30
.ENDM
.MACRO __PUTB1SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
ST X,R30
.ENDM
.MACRO __PUTW1SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
ST X+,R30
ST X+,R31
ST X+,R22
ST X,R23
.ENDM
.MACRO __CLRW1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
CLR R0
ST Z+,R0
ST Z,R0
.ENDM
.MACRO __CLRD1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
CLR R0
ST Z+,R0
ST Z+,R0
ST Z+,R0
ST Z,R0
.ENDM
.MACRO __PUTB2SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
ST Z,R26
.ENDM
.MACRO __PUTW2SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
ST Z+,R26
ST Z,R27
.ENDM
.MACRO __PUTBSRX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
ST Z,R@1
.ENDM
.MACRO __PUTWSRX
MOVW R30,R28
SUBI R30,LOW(-@2)
SBCI R31,HIGH(-@2)
ST Z+,R@0
ST Z,R@1
.ENDM
.MACRO __PUTB1SNX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM
.MACRO __PUTW1SNX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM
.MACRO __PUTD1SNX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X+,R31
ST X+,R22
ST X,R23
.ENDM
.MACRO __MULBRR
MULS R@0,R@1
MOV R30,R0
.ENDM
.MACRO __MULBRRU
MUL R@0,R@1
MOV R30,R0
.ENDM
.CSEG
.ORG 0
.INCLUDE "remote.vec"
.INCLUDE "remote.inc"
__RESET:
CLI
CLR R30
OUT EECR,R30
;INTERRUPT VECTORS ARE PLACED
;AT THE START OF FLASH
LDI R31,1
OUT GICR,R31
OUT GICR,R30
OUT MCUCR,R30
;DISABLE WATCHDOG
LDI R31,0x18
OUT WDTCR,R31
OUT WDTCR,R30
;CLEAR R2-R14
LDI R24,13
LDI R26,2
CLR R27
__CLEAR_REG:
ST X+,R30
DEC R24
BRNE __CLEAR_REG
;CLEAR SRAM
LDI R24,LOW(0x800)
LDI R25,HIGH(0x800)
LDI R26,0x60
__CLEAR_SRAM:
ST X+,R30
SBIW R24,1
BRNE __CLEAR_SRAM
;GLOBAL VARIABLES INITIALIZATION
LDI R30,LOW(__GLOBAL_INI_TBL*2)
LDI R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
LPM R24,Z+
LPM R25,Z+
SBIW R24,0
BREQ __GLOBAL_INI_END
LPM R26,Z+
LPM R27,Z+
LPM R0,Z+
LPM R1,Z+
MOVW R22,R30
MOVW R30,R0
__GLOBAL_INI_LOOP:
LPM R0,Z+
ST X+,R0
SBIW R24,1
BRNE __GLOBAL_INI_LOOP
MOVW R30,R22
RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:
;STACK POINTER INITIALIZATION
LDI R30,LOW(0x85F)
OUT SPL,R30
LDI R30,HIGH(0x85F)
OUT SPH,R30
;DATA STACK POINTER INITIALIZATION
LDI R28,LOW(0x260)
LDI R29,HIGH(0x260)
JMP _main
.ESEG
.ORG 0
.DSEG
.ORG 0x260
;___ 1 /*****************************************************
;___ 2 This program was produced by the
;___ 3 CodeWizardAVR V2.03.4 Standard
;___ 4 Automatic Program Generator
;___ 5 © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
;___ 6
;___ 7
;___ 8 Project :
;___ 9 Version :
;___ 10 Date : 6/4/2010
;___ 11 Author :
;___ 12 Company :
;___ 13 Comments:
;___ 14
;___ 15
;___ 16 Chip type : ATmega16L
;___ 17 Program type : Application
;___ 18 Clock frequency : 8.000000 MHz
;___ 19 Memory model : Small
;___ 20 External RAM size : 0
;___ 21 Data Stack size : 512
;___ 22 *****************************************************/
;___ 23
;___ 24 #include
;___ 25 #include
;___ 26
;___ 27 //----------------------------------------
;___ 28 bit start;
;___ 29 char i,pwm,dem;
;___ 30
;___ 31 int data,tg,tg_truoc;
;___ 32
;___ 33 //----------------------------------------
;___ 34
;___ 35 // Alphanumeric LCD Module functions
;___ 36
;___ 37
;___ 38 // External Interrupt 0 service routine
;___ 39 interrupt [EXT_INT0] void ext_int0_isr(void)
;___ 40 {
.CSEG
_ext_int0_isr:
RCALL SUBOPT_0x0
;___ 41
;___ 42 start=1;
SET
BLD R2,0
;___ 43 i++;
INC R4
;___ 44 if(i==13) //ket thuc frame
LDI R30,LOW(13)
CP R30,R4
BRNE _0x3
;___ 45 {
;___ 46 i=0;
CLR R4
;___ 47 start=0;
CLT
BLD R2,0
;___ 48
;___ 49 }
;___ 50
;___ 51 if(tg>75) //xd bit start
_0x3:
LDI R30,LOW(75)
LDI R31,HIGH(75)
CP R30,R9
CPC R31,R10
BRGE _0x4
;___ 52 {
;___ 53 i=2;
LDI R30,LOW(2)
MOV R4,R30
;___ 54 data=0;
CLR R7
CLR R8
;___ 55 }
;___ 56 if(tg<45) //xd bit 1
_0x4:
LDI R30,LOW(45)
LDI R31,HIGH(45)
CP R9,R30
CPC R10,R31
BRGE _0x5
;___ 57 {
;___ 58 data<<=1;
LSL R7
ROL R8
;___ 59 data=data|0x01;
LDI R30,LOW(1)
OR R7,R30
;___ 60 }
;___ 61 else if(tg<75) //xd bit 0
RJMP _0x6
_0x5:
LDI R30,LOW(75)
LDI R31,HIGH(75)
CP R9,R30
CPC R10,R31
BRGE _0x7
;___ 62 data<<=1;
LSL R7
ROL R8
;___ 63
;___ 64
;___ 65
;___ 66 tg=0;
_0x7:
_0x6:
CLR R9
CLR R10
;___ 67 }
RCALL SUBOPT_0x1
RETI
;___ 68
;___ 69 // Timer 0 overflow interrupt service routine
;___ 70 interrupt [TIM0_OVF] void timer0_ovf_isr(void)
;___ 71 {
_timer0_ovf_isr:
RCALL SUBOPT_0x0
;___ 72
;___ 73 dem++; //DK toc do
INC R6
;___ 74 if(dem<pwm)
CP R6,R5
BRSH _0x8
;___ 75 PORTA.1=0;
CBI 0x1B,1
;___ 76 else PORTA.1=1;
RJMP _0x9
_0x8:
SBI 0x1B,1
;___ 77
;___ 78 //----------------
;___ 79 if(start) //tg giua 2 xung remote
_0x9:
SBRS R2,0
RJMP _0xA
;___ 80 tg++;
LDI R30,LOW(1)
LDI R31,HIGH(1)
__ADDWRR 9,10,30,31
;___ 81
;___ 82 }
_0xA:
RCALL SUBOPT_0x1
RETI
;___ 83
;___ 84
;___ 85
;___ 86 // Declare your global variables here
;___ 87
;___ 88 void main(void)
;___ 89 {
_main:
;___ 90 // Declare your local variables here
;___ 91
;___ 92 // Input/Output Ports initialization
;___ 93 // Port A initialization
;___ 94 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
;___ 95 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
;___ 96 PORTA=0xFF;
LDI R30,LOW(255)
OUT 0x1B,R30
;___ 97 DDRA=0xFF;
OUT 0x1A,R30
;___ 98
;___ 99 // Port B initialization
;___ 100 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
;___ 101 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
;___ 102 PORTB=0x00;
LDI R30,LOW(0)
OUT 0x18,R30
;___ 103 DDRB=0x00;
OUT 0x17,R30
;___ 104
;___ 105 // Port C initialization
;___ 106 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
;___ 107 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
;___ 108 PORTC=0x00;
OUT 0x15,R30
;___ 109 DDRC=0xFF;
LDI R30,LOW(255)
OUT 0x14,R30
;___ 110
;___ 111 // Port D initialization
;___ 112 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
;___ 113 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
;___ 114 PORTD=0x00;
LDI R30,LOW(0)
OUT 0x12,R30
;___ 115 DDRD=0x00;
OUT 0x11,R30
;___ 116
;___ 117 // Timer/Counter 0 initialization
;___ 118 // Clock source: System Clock
;___ 119 // Clock value: 1000.000 kHz
;___ 120 // Mode: Normal top=FFh
;___ 121 // OC0 output: Disconnected
;___ 122 TCCR0=0x01;
LDI R30,LOW(1)
OUT 0x33,R30
;___ 123 TCNT0=0x00;
LDI R30,LOW(0)
OUT 0x32,R30
;___ 124 OCR0=0x00;
OUT 0x3C,R30
;___ 125
;___ 126 // Timer/Counter 1 initialization
;___ 127 // Clock source: System Clock
;___ 128 // Clock value: Timer 1 Stopped
;___ 129 // Mode: Normal top=FFFFh
;___ 130 // OC1A output: Discon.
;___ 131 // OC1B output: Discon.
;___ 132 // Noise Canceler: Off
;___ 133 // Input Capture on Falling Edge
;___ 134 // Timer 1 Overflow Interrupt: Off
;___ 135 // Input Capture Interrupt: Off
;___ 136 // Compare A Match Interrupt: Off
;___ 137 // Compare B Match Interrupt: Off
;___ 138 TCCR1A=0x00;
OUT 0x2F,R30
;___ 139 TCCR1B=0x00;
OUT 0x2E,R30
;___ 140 TCNT1H=0x00;
OUT 0x2D,R30
;___ 141 TCNT1L=0x00;
OUT 0x2C,R30
;___ 142 ICR1H=0x00;
OUT 0x27,R30
;___ 143 ICR1L=0x00;
OUT 0x26,R30
;___ 144 OCR1AH=0x00;
OUT 0x2B,R30
;___ 145 OCR1AL=0x00;
OUT 0x2A,R30
;___ 146 OCR1BH=0x00;
OUT 0x29,R30
;___ 147 OCR1BL=0x00;
OUT 0x28,R30
;___ 148
;___ 149 // Timer/Counter 2 initialization
;___ 150 // Clock source: System Clock
;___ 151 // Clock value: Timer 2 Stopped
;___ 152 // Mode: Normal top=FFh
;___ 153 // OC2 output: Disconnected
;___ 154 ASSR=0x00;
OUT 0x22,R30
;___ 155 TCCR2=0x00;
OUT 0x25,R30
;___ 156 TCNT2=0x00;
OUT 0x24,R30
;___ 157 OCR2=0x00;
OUT 0x23,R30
;___ 158
;___ 159 // External Interrupt(s) initialization
;___ 160 // INT0: On
;___ 161 // INT0 Mode: Falling Edge
;___ 162 // INT1: Off
;___ 163 // INT2: Off
;___ 164 GICR|=0x40;
IN R30,0x3B
ORI R30,0x40
OUT 0x3B,R30
;___ 165 MCUCR=0x02;
LDI R30,LOW(2)
OUT 0x35,R30
;___ 166 MCUCSR=0x00;
LDI R30,LOW(0)
OUT 0x34,R30
;___ 167 GIFR=0x40;
LDI R30,LOW(64)
OUT 0x3A,R30
;___ 168
;___ 169 // Timer(s)/Counter(s) Interrupt(s) initialization
;___ 170 TIMSK=0x01;
LDI R30,LOW(1)
OUT 0x39,R30
;___ 171
;___ 172 // Analog Comparator initialization
;___ 173 // Analog Comparator: Off
;___ 174 // Analog Comparator Input Capture by Timer/Counter 1: Off
;___ 175 ACSR=0x80;
LDI R30,LOW(128)
OUT 0x8,R30
;___ 176 SFIOR=0x00;
LDI R30,LOW(0)
OUT 0x30,R30
;___ 177
;___ 178 // LCD module initialization
;___ 179
;___ 180
;___ 181 // Global enable interrupts
;___ 182 #asm("sei")
sei
;___ 183
;___ 184 while (1)
_0xB:
;___ 185 {
;___ 186 // Place your code here
;___ 187
;___ 188 PORTC=~PORTA;
IN R30,0x1B
COM R30
OUT 0x15,R30
;___ 189 if(start==0)
SBRC R2,0
RJMP _0xE
;___ 190 {
;___ 191 if(data==2039) //phim so 1
LDI R30,LOW(2039)
LDI R31,HIGH(2039)
CP R30,R7
CPC R31,R8
BRNE _0xF
;___ 192 {
;___ 193 PORTA.0=0;
CBI 0x1B,0
;___ 194 delay_ms(10);
RCALL SUBOPT_0x2
;___ 195 pwm=255;
;___ 196
;___ 197 }
;___ 198 //----------------
;___ 199 if(data==1015) //phim so 2
_0xF:
LDI R30,LOW(1015)
LDI R31,HIGH(1015)
CP R30,R7
CPC R31,R8
BRNE _0x10
;___ 200 {
;___ 201 PORTA.0=1;
SBI 0x1B,0
;___ 202 delay_ms(10);
RCALL SUBOPT_0x2
;___ 203 pwm=255;
;___ 204
;___ 205 }
;___ 206
;___ 207 //----------------
;___ 208 if(data==1527) //phim so 3
_0x10:
LDI R30,LOW(1527)
LDI R31,HIGH(1527)
CP R30,R7
CPC R31,R8
BRNE _0x11
;___ 209 {
;___ 210 PORTA.0=0;
CBI 0x1B,0
;___ 211 delay_ms(10);
RCALL SUBOPT_0x3
;___ 212 pwm=100;
;___ 213
;___ 214 }
;___ 215
;___ 216 //----------------
;___ 217 if(data==503) //phim so 4
_0x11:
LDI R30,LOW(503)
LDI R31,HIGH(503)
CP R30,R7
CPC R31,R8
BRNE _0x12
;___ 218 {
;___ 219 PORTA.0=1;
SBI 0x1B,0
;___ 220 delay_ms(10);
RCALL SUBOPT_0x3
;___ 221 pwm=100;
;___ 222
;___ 223 }
;___ 224 //----------------
;___ 225 if(data==759) //phim so 6
_0x12:
LDI R30,LOW(759)
LDI R31,HIGH(759)
CP R30,R7
CPC R31,R8
BRNE _0x13
;___ 226 pwm=0;
CLR R5
;___ 227 if(data==1783)
_0x13:
LDI R30,LOW(1783)
LDI R31,HIGH(1783)
CP R30,R7
CPC R31,R8
BRNE _0x14
;___ 228 {
;___ 229 PORTB=~PORTB;
IN R30,0x18
COM R30
OUT 0x18,R30
;___ 230 delay_ms(200);
LDI R30,LOW(200)
LDI R31,HIGH(200)
ST -Y,R31
ST -Y,R30
CALL _delay_ms
;___ 231 }
;___ 232 }
_0x14:
;___ 233
;___ 234
;___ 235 };
_0xE:
RJMP _0xB
;___ 236 }
_0x15:
RJMP _0x15
;___ 237
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES
SUBOPT_0x0:
ST -Y,R30
ST -Y,R31
IN R30,SREG
ST -Y,R30
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES
SUBOPT_0x1:
LD R30,Y+
OUT SREG,R30
LD R31,Y+
LD R30,Y+
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES
SUBOPT_0x2:
LDI R30,LOW(10)
LDI R31,HIGH(10)
ST -Y,R31
ST -Y,R30
CALL _delay_ms
LDI R30,LOW(255)
MOV R5,R30
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES
SUBOPT_0x3:
LDI R30,LOW(10)
LDI R31,HIGH(10)
ST -Y,R31
ST -Y,R30
CALL _delay_ms
LDI R30,LOW(100)
MOV R5,R30
RET
_delay_ms:
ld r30,y+
ld r31,y+
adiw r30,0
breq __delay_ms1
__delay_ms0:
__DELAY_USW 0x7D0
wdr
sbiw r30,1
brne __delay_ms0
__delay_ms1:
ret
;END OF CODE MARKER
__END_OF_CODE:
CHƯƠNG 4: KẾT LUẬN VÀ TÀI LIỆU THAM KHẢO
4.1 KẾT QUẢ VÀ THỰC NGHIỆM
Đã hoàn thành nhiệm vụ thiết kế cổng tự động .
Kết quả thực nghiệm chạy trong 1 tuần khá ổn định .
Khi hoạt động gây tiếng ồn
4.2HƯỚNG PHÁT TRIỂN CỦA ĐỒ ÁN MÔN HỌC
Thiết kế máy cho cá ăn chạy ổn định hơn với mô hình lớn hơn.
4.3 TÀI LIỆU THAM KHẢO
THIẾT KẾ BOARD GIAO TIẾP
KĨ THUẬT ỨNG DỤNG VI ĐIỀU KHIỂN AVR ( Ngô Diên Tập ).
Datasheet của IC PT2248,PT 2249 được download từ ALLDATASHEETS.COM .
Datasheet của ATMEGA 32 được download từ ATMEL.COM.
Những wedsite tham khảo như dientuvietnam.vn
Vagram.net, cdtvn.net ………..
MỤC LỤC
Các file đính kèm theo tài liệu này:
- Thiết kế và điều khiển cửa tự động bằng remote.doc