Hiển thị các bài đăng có nhãn công nghệ và điện tử. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn công nghệ và điện tử. Hiển thị tất cả bài đăng

Thứ Hai, 25 tháng 4, 2016

Sạc điện thoại cho xe máy TKS-X1

 Đây là thiết bị sạc mới tích hợp IC bảo về và ổn định dòng điện giúp kéo dài tuổi thọ pin cho điện thoại và máy tính bảng.

 Sản phẩm này có nắp cao su bảo vệ tránh nước nên khác an tâm khi đi xa hoặc trời mưa, giá mình nhập khẩu về trực tiếp nên chỉ đóng thuế hải quan thôi rất rẻ các bạn mua mình để lại giá 150K/1 cái dùng vô tư bảo hành 1 đổi một nhé.


Hướng dẫn mua hàng: Gọi 01649768889
Đặt hàng: http://goo.gl/xt2uJL

Hỗ trợ: http://goo.gl/bn6CLv

Sạc xe máy, sạc điện thoại, sạc smartphone, sạc dự phòng, sạc điện thoại từ xe máy, sạc smartohone từ xe máy, sạc điện thoại, sạc cao cấp, sạc máy tính bảng, củ sạc, cục sạc, đồ sạc, thiết bị sạc.

Thứ Hai, 28 tháng 3, 2016

Làm trạm phát Radio mini (cực nhỏ)

Have you ever wanted to broadcast your own radio station within your neighborhood? Ever get curious on where people get those "Surveillance Bugs" from spy and action movies? This small and simple FM transmitter is the toy that geeks have always wanted.

FM transmitters can be complicated to build, that's why I'm teaching you how to make a foolproof FM transmitter. There's no need to buy kits, this tutorial includes the PCB layout and the schematics. It has a range of up to 1/4 mile or more. It's great for room monitoring, baby listening and nature research.





My Experience:

FM transmitters remind me of my early years in electronics. When I was 8, I came across Art Swan's FM transmitter circuit. At the time I had no idea of where I'm supposed to buy the parts, so I recycled mine out of junk. I guess the biggest struggle that you're going to face is finding a trimmer capacitor. I'll give some tips on the last step of this instructable. In a nutshell, I highly recommend this project for everyone and also those who are still new in electronics.

Technical Specifications:

- 1/4 Mile Radius Range
-Powered By A 9V Battery
- Lasts For Several Days
- Adjustable 87-108MHz



Please Watch: Celebrating the 1st episode of my new YouTube channel! It's my first time to document a project with videography. I hope you guys enjoy the vid! Please leave a comment below, I would appreciate some advise regarding the video.

Disclaimer: This project is for educational purposes only and is not intended to air/ interfere with present radio channels. Neither site nor I, am liable for careless actions. Please check for the legality before attempting the project within your area. As long as



MISC:

- Copper Clad PCB/ Perfboard
- Solid Gauge # 18 Wire
- Electret Microphone
- ¼" Bolt
Transistors:

- 2N3904 General NPN Transistor (2x)

Capacitors:

- 15pF or 40pF Trimmer Capacitor
- 100nF Ceramic Capacitor (2x)
- 10nF Ceramic Capacitor
- 4pF Ceramic Capacitor

Resistors:

- 1M Ohm ¼w Resistor
- 100K Ohm ¼w Resistor
- 10K Ohm ¼w Resistor (3x)
- 1K Ohm ¼w Resistor
- 100 Ohm ¼w Resistor

Thứ Năm, 18 tháng 10, 2012

Mạch chuyển đổi từ 12V lên 28 DC dùng LM2585

Mạch chuyển đổi từ 12V lên 28 DC dùng LM2585


Nguyên lý nâng áp của mạch này là sử dụng nguyên lý của mạch nguồn Boot trong đó cuộn cảm và mạch đóng cắt đóng vai trò quan trọng. Mạch đóng cắt dùng để đóng cắt dòng điện tạo ra dòng điện biến thiên trong cuộn cảm. Trong Lm2585 đã được tích hợp sẵn bộ dao động và mạch công suất.Do đó theo nguyên lý của nguồn Boot chúng ta chỉ cần lắp thêm cuộn cảm (Như hình trên) . Điện áp và công suất đầu ra phụ thuộc vào giá trị của cuộn cảm. Ngoài ra mạch có chức năng ổn định điện áp đầu ra với chân phản hồi 2 từ LM2585. Điện áp đầu ra luôn đựoc giữa cố định là 28VDC. Do LM2585 có công suất nhỏ nên chúng ta chỉ ứng dụng với nhưng bài toán yêu cầu điều khiển, ứng dụng nhỏ, hay chạy tải nhỏ.

Một số ic thông dụng họ 74xx

Họ 74 có nhiều mức công suất khác nhau. Nó chỉ khác nhau bằng các chữ cái như : LS - HC - HCT. Mức LS là ứng với mức công suất thấp nhất. Điện áp cung cấp cho nó chỉ là từ 4.75 - 5.25V thôi.


74ls00 Cổng NAND với 2 đầu vào
74ls04 Cổng NOT
74ls06 Cổng NOT với cực thu hở
74ls08 Cổng AND với 2 ngõ vào
74ls10 Cổng NAND với 3 ngõ vào
74ls13 Cổng NOT với 3 ngõ vào
74ls11 Cổng AND với 3 ngõ vào
74ls14 Cổng NOT với 6 ngõ vào
74ls12 Cổng NAND với 3 ngõ vào cực thu hở
74ls21 Cổng AND với 4 ngõ vào
74ls22 Cổng NAND với 4 ngõ vào cực thu hở
74ls25 Cổng NOR với 4 ngõ vào
74ls27 Cổng NOR với 3 ngõ vào
74ls30 Cổng NAND với 8 ngõ vào
74ls32 Cổng OR với 2 ngõ vào
74ls33 Cổng NOR với 2 ngõ vào . Cực thu hở
74ls42 Giải mã từ 1 đến 10
74ls45 Giải mã BCD sang thập phân
74ls47 Giải mã BCD sang LED 7 thanh
74ls90 Đếm nhị phân đồng bộ thuận với Kd = 10
74ls92 Đếm nhị phân đồng bộ thuận với Kd = 12
74ls93 Đếm nhị phân đồng bộ thuận với Kd = 16
74ls121 Bộ đa hài 1 xung
74ls154 Giải mã 4 vào --> 16 ra
74ls138 Giải mã 3 vào --> 8 ra
74ls192 Đếm mã BCD lên xuống với Kd = 10
74ls193 Đếm nhị phân đồng bộ 8 bít
74ls237 Bộ phân kênh : 3 -->8
74ls374 Trigio - D . Với 8 chốt điều chỉnh
74ls390 Bộ đếm 10. Chia 2 và chia 5.
74ls107 FipFlop - JK
74ls175 FipFlop - D
74ls289 Định vị 8 bít
74ls279 Chốt RS
74ls164 Thanh ghi 8 bit vào nối tiếp ra song song
74ls166 Thanh ghi 8 bít vào song song ra nối tiếp
74ls273 Thanh ghi 8 bit
74ls150 Dồn kênh : 16 -->1
74ls151 Dồn kênh : 16 -->1
74ls153 Dồn kênh : 2 -->1
74ls157 Dồn kênh : 4 -->2
74ls158 Dồn kênh : 2 -->1
74ls160 Đếm mã BCD
74ls162 Đếm mã BCD
74ls161 Đếm mã nhị phân - 4 bit
74ls163 Đếm mã nhị phân - 4 bit
74ls155 Giải mã từ 2 --> 4
74ls156 Giải mã từ 2 --> 4
74ls167 Giải mã từ 2 --> 4
74ls139 Giải mã từ 2 --> 4
74ls145 Giải mã BCD sang thập phân
74ls185
74ls147 Mã hóa ưu tiên từ 10 --> 4
74ls148 Mã hóa ưu tiên từ 10 --> 4
74ls125 Bộ đệm 3 trạng thái
74ls126 Bộ đệm 3 trạng thái
74ls85 So sánh 2 số nhị phân 8 bít
74ls181 Phép tính số học
74ls74 Trigio - D
74ls76 Trigo - JK
74ls01 Cổng NAND với 4 đầu ra
74ls02 Cổng NOR với 4 đầu ra
74ls595 Thanh ghi 8 bit với chốt đầu ra

Một số IC thông dụng


Trên thị trường có rất nhiều loại IC mà ta chưa biết đến nó. Nhưng con IC này có những úng dụng vào thực tế rất hay. Nếu như ta không biết chức năng hay tên của nó thì ta khó có thể tìm được nó. Như mình muốn làm mạch đếm từ 0 đến 10 chẳng hạn hiện thị lên LED 7seg. Như vậy tôi phải biết được nhưng IC có tác dụng làm như thế. Phải biết tên của nó Đố với bài đó thì nó là IC đếm đến 10 họ TTL hay CMOS cũg được là 74LS90 và IC hiện thị LED 7SG 74LS47 và 1 con IC tạo xung 555.
Sau đây là những loại IC có ứng dụng thực tế mà ta hay sử dụng:


+ PT2262 - 2272 : Đôi IC dùng để thu phát hồng ngoại nhiều kênh

+ PT2248 - 2249 : Đôi IC dùng để thu phát hồng ngoại

+ LM558 : Tạo xung vuông

+ L298 : Mạch cầu H điều khiển (46V - 3A)

+ LM556 : Dao động tạo xung tam giác và vuông

+ LM723 : IC ổn áp

+ ICL8038 : IC dao động cũng tạo xung sin, vuông, tam giác

+ Max038 : IC dao động tạo xung sin, vuông, tam giác

+ LM350 Điều chỉnh điện áp 3A

+ DS1307 : Đồng hồ đọc thời gian thực (RTC)

+ DS12887 : Đồng hồ đọc thời gian chuẩn

+ LM565 : Vòng khóa pha

+ ADC0809 : Biến đổi từ tương tự sang tín hiệu số (ADC - 8bit)

+ ADC0804 : Biến đổi từ tương tự sang tín hiệu số (ADC - 8bit)

+ LM335 : Cảm biến đo nhiệt độ

+ LM337 : Điều chỉnh điện áp (-) từ -1.25 -> - 40V

+ LM317 : Điều chỉnh điện áp (+) từ +1.25 -> +40V

Ứng dụng của quang trở

Thông thường, điện trở của quang trở khoảng 1000 000 ohms. Khi chiếu ánh sáng vào, điện trở này giảm xuống rất thấp. Người ta ứng dụng đặc tính này của quang trở để làm ra các mạch phát hiện sáng/tối.



Flash bên dưới mô phỏng quá trình cho dòng điện đi qua của Quang trở


Mạch phát hiện sáng tối dùng quang trở
Khi ánh sáng yếu, trở kháng của quang trở cao. Dòng ở cực B của transistor bé, đèn tắt. Tuy nhiên, khi ánh sáng mạnh, dòng chạy qua quang trở đến cực B của transistor thứ nhất cũng như transistor thứ 2 làm đèn sáng. Biến trở bên dưới tạo thành cầu chia áp để chỉnh độ nhạy của quang trở


Ứng dụng của mạch phát hiện sáng tối
Mở/tắt đèn đường tự động




Đo tốc độ quay
Trong thực tế ta gặp rất nhiều trường hợp chuyển qua lại giữa tín hiệu tượng tự (Analog) và tín hiệu số (Digital)

Trong phần này tôi sẽ giới thiệu quá trình chuểyn đổi giữa 2 lạo tín hiệu này dưới dạng lý thuyết đơn giản
Phần này cũng sẽ giúp các bạn hiểu được các bit rate được tạo ra như thế nào và nó ảnh hưởng như thế nào đến chất lượng tín hiệu thu được .

Phần trên là tín hiệu Analog (có dạng sóng hình sin), là 1 miền liên tục, có rất rất nhiều giá trị (trục thẳng đứng là biên độ tín hiệu, vì là liên tục nên có vô số giá trị - các bác học vi phân trong lớp 12 chắc biết rồi chứ ạ)

Phần dưới là tín hiệu Digital (có dạng các xung vuông) chỉ có 2 giá trị : 0 và 1

Mức 1 không nhất thiết phải điện áp dương hoặc lớn hơn mức 0 . Điện sao cũng được, miễn là có 2 mức khác nhau.
Ví dụ: 15V là mức 0 còn -5 là mức 1, tùy thuộc vào hệ thống. Có thể đặt mức theo khoảng điện áp, như từ 0V->3V là mức 0 ; từ 3V->6V là mức 1.Trên hình, có chỗ điện áp là 4V nhưng vẫn là mức 1. Nhiễu chỉ có thể tăng/giảm biên độ tín hiệu nhưng trong hệ thống số, tín hiệu chỉ có 2 mức nên 4V vẫn là mức 1. Rõ ràng, tín hiệu số có khả năng hạn chế nhiễu.

Nếu tín hiệu là 3V thì sao nhỉ ? Lúc đó, nó không xử lý -> treo máy , hihihi. Nói chung, người ta luôn chọn khoảng cách giữa mức 1 và mức 0 sao cho hệ thống vẫn hoạt động tốt với mức ảnh hưởng lớn nhất của nhiễu. Nhiễu thường bé lắm ! Cỡ mili vôn thôi !

Nhiễu nhỏ như vậy, cỡ mili vôn hoặc micrô vôn mà nghe cát-xét thì vẫn nghe tiếng xì ? Bởi vì tín hiệu đọc được bởi đầu từ thì cỡ vài mili vôn thôi! Mà nhiễu thì chỗ nào cũng ảnh hưởng, cũng xâm nhập được, tức là đầu từ cũng bị nhiễu. Do vậy, ở lúc đó, chỉ vài mili vôn nhưng ảnh hưởng rất ghê! Mới đọc từ băng lên chỉ có 10mV mà nhiễu tới 3mV rồi! Suy nghĩ 1 chút, ta thấy để đánh giá mức ảnh hưởng của nhiễu thì không thể dựa vào điện áp nhiễu. Tín hiệu 5V còn nhiễu vài 5mV thì không sao nhưng tín hiệu 200mV mà nhiễu cỡ vài mV là ghê ! Để đánh giá điều này, người ta sử dụng thông số S/N ( signal/noise ) , tức là tỷ số tín hiệu/nhiễu

Ví dụ 1 : S/N = 5V / 5mV = 1000
Ví dụ 2 : S/N= 200mV/ 5mV = 40
Rõ ràng, ví dụ 1 cho chất lượng tốt hơn vì mức tín hiệu gấp 1000 lần nhiễu (nhiễu quá nhỏ), ví dụ 2 tín hiệu gấp có 40 lần nhiễu (nhiễu tương đối là lớn)

Các bạn hay chơi Ampli, cát-xét, Equalizer chắc cũng hay nhìn thấy cái chữ “dB”, vậy nó là cái gì?
Ngoài cách đánh giá mức tín hiệu so với nhiễu như ở trên, còn có đại lượng PSNR
PSNR = 20lg S/N (peak signal to noise ratio )
Ví dụ 1 : PSNR = 20log 5V/5mV = 20log 1000 = 20x3 = 60dB
Tại sao phải lấy log ? Vì tai người, mắt người thường không tuyến tính, tức không tăng theo hàm bậc nhất .
Ví dụ : bạn nghe 1 âm thanh 2W và 8W thì chưa chắc gì có cảm giác lớn gấp 4 lần . Gía trị dB có thể âm vì sử dụng log mà, ví dụ lg (0/1000) = -2 . Khi đó thì nghe nhỏ hơn .Hàm lg là phép toán ngược với phép lũy thừa
102 = 100 =>lg 100= 2

Chắc nhiều người đang thắc mắc, vậy quá trình ghi và đọc đĩa CD nó diễn ra như thế nào ? Xin thưa là đại khái như sau :

Trong quá trình ghi đĩa CD, luồng tín hiệu dạng số được đưa vào đầu vào của tia lazer (chuỗi các bít 1 và 0, , ví dụ như là 100110111010 ….),gặp bít 0 thì tia lazer bắn 1 lỗ vào bề mặt của đĩa, còn bít 1 thì không bắn.
Khi đọc đĩa CD thì quá trình ngược lại, mắt thần (len) của đầu đọc đĩa sẽ phát ra tia lazer chiều vào mặt đĩa CD. Khi gặp lỗ trên mặt CD, tia lazer không bị phản xạ lại, đầu đọc hiểu đó là bít 0. Chỗ nào còn nguyên (không bị lỗ), tia lazer bị phản xạ ngược lại, mắt thần nhận được tia phản xạ đó, đầu đọc đĩa hiểu đó là bít 1.
Rõ ràng, với hệ thống tương tự, các máy móc phải được thiết kế để phân biệt rất nhiều mức tín hiệu. Trong khi đó, với hệ thống số, máy móc chỉ cần phân biệt 2 mức. Với 2 mức là rất dễ chế tạo. Ví dụ như, công tắc=đóng hoặc mở, đèn=sáng hoặc tắt, dây điện=dẫn hoặc ngưng, tụ điện= phóng điện hoặc nạp điện
Tóm lại, với đĩa CD thì cứ vô tư sao chép, miễn đĩa tốt thì không bao giờ xì xì do sao chép nhiều.
Chính vì thế nên nếu sao chép các file nhạc (không có convert) từ đĩa này sang đĩa kia, từ PC sang USB…. Thì không baio giờ mất chất lượng .

Chúng ta bắt đầu tìm hiểu cách biến 1 tín hiệu tương tự sang tín hiệu số và ngược lại .

Lấy mẫu: (SAMPLING)

Có 1 đóng bài hát của Tuấn Vũ, lấy ngẫu nhiên 1 bài ra nghe rồi kết luận : đại ca hát hay quá => Cái đó là gọi là lấy mẫu đấy.

T1, T2... là các lần lấy mẫu. T1 là lần lấy mẫu thứ nhất, T2 là lần thứ 2 ….
t1, t2... là khoảng thời gian đẻ tiếp tục lấy mẫu tiếp theo, theo hình trên lần lấy mẫu thứ nhất T1 cách lần lấy mẫu thứ hai T2 một khoảng thời gian là t2.
Lấy mẫu là giai đoạn đầu của quá trình chuyển tín hiệu tương tự thành tín hiệu số (tức điện áp ở micro thành điện áp số để lưu vô đĩa CD). Cứ sau 1 khoảng thời gian cố định, người ta đo mức tín hiệu tương tự - tất nhiên là thiết bị điẹn tử đ chứ có cha nào ngồi để đo được. Từ t1 đến t2, có vô số giá trị nhưng ta chỉ lấy “9V” làm giá trị đại diện. Tương tự cho các thời điểm khác. Vì sao không lấy hết các giá trị mà chỉ lấy ở thời điểm T1 ? Dễ hiểu thôi ! Vì sao không kiểm tra nguyên bao gạo mà chỉ lấy 1 nhúm ra coi rồi kết luận gạo ngon hay dở? Vì nhiều quá ! Nếu ta lấy mẫu hết thì rõ ràng ta cần nhiều đĩa để lưu trữ. Bởi vậy mà từ t1->t2, ta lấy 1 giá trị thôi !
Số lần lấy mẫu trong 1 giây gọi là tần số lấy mẫu (Sampling rate)
Ví dụ : Sampling rate f= 8KHz => T=1/f = 1/8000Hz = 0,125ms
Nghĩa là : cứ 0,125 giây thì người ta lại đo lấy mẫu một lần , tương đương 1 giây lấy mẫu 8000 lần . Kinh khủng .

Lượng tử hóa (Quantize)

Người ta chia điện áp đo được thành các mức Một mức đại diện cho 1 khoảng giá trị.
Ví dụ 16 mức
0 - 1V : mức 0
1V - 2V: mức 1
........
15V - 16V : mức 15

giả sử điện áp đo được là :
0.5V ---> mức 0 ,
1V ---> mức 1 ,
1.2V ---> mức 1 ,
3V ---> mức 3 ,
5.4V ---> mức 5 ,

Sau bước lượng tử hóa, miền giá trị của các điện áp đọc được là rất rộng sẽ trở thành 1 số giá-trị hữu hạn nhất định. Như ta thấy, 1V và 1.2V đều là mức 1 . Vậy ở bước này, 1 lần nữa ta lại làm sơ lược hơn tín hiệu.
-----Số lần lấy mẫu là vô hạn --> trong 1 khoảng thời gian thì chỉ lấy 1 số mẫu nhất định
----- giá trị của các mẫu lấy được là vô hạn ----> chia thành các mức và 1 khoảng giá trị sẽ được đại diện bởi 1 mức
Bước này, nói cho toán học 1 chút là " Ta rời rạc hóa tín hiệu". Đang là 1 đường liền tục thì biến thành 101010

MÃ HOÁ

Bước này đơn giản là ta đổi hệ 10 thành nhị phân. Sau đó, dĩ nhiên là truyền đi hoặc là lưu vô đĩa CD, đĩa cứng (nếu đang thu âm... )
Vd: lấy ví dụ trên, giả sử dùng 4 bit để mã hoá các mức .
0.5V ---> mức 0 (0000)
1V ---> mức 1 (0001)
1.2V ---> mức 1 (0001)
3V ---> mức 3 (0011)
5.4V ---> mức 5 (0101)
Luồng tín hiều thu được sẽ là 00000001000100110101
Thiết bị thu sẽ đọc lần lượt, dựa vào số bít dùng để mã hoá tín hiệu đã thống nhất từ trước, nó tách từng nhóm 4 bit trong dãy số trên ra, ví dụ 0000 nó hiểu là 0, 0001 là mức 1 …

Số các mức gọi là độ rộng của mẫu (Resolution, ), ví dụ trên độ rộng là 16 mức => dùng 4 bit nhị phân để lưu trữ.
Dùng 1 số nhị phân có 4 bit thì có tất cả 16 số nhị phân : 0001, 0010,....... 1111 . Bởi vì : 2 mũ 4 =16 . Muốn lưu trữ 256 số thì số bit cần dùng để mã hoá 8 (vì 2 mũ 8 = 256 )

Tốc độ lấy mẫu = (tần số lấy mẫu) x (độ rộng mẫu) . Tiếng Anh gọi là sampling rate
vd: 16khz x 8 bit = 16000 x 8 = 128000b/s = 128kb/s

He he, đến đây chắc mọi người biết bit rate bài hát được hình thành và tính toán ra sao rồi chứ .

Ở trên là quá trình tạo tín hiệu PCM. Khi bạn thu âm bằng micro vào PC, CD thì thực sự ta đang thực hiện quá trình trên. Bây giờ nhìn vào thông số như "PCM 44khz 16bits " thì chắc là bạn đã hiểu được ý nghĩa của chúng rồi chứ
Không biết có hiểu thật không, tôi cứ giải thích lại 1 lần nữa cho chắc, đó là
+ Tần số lấy mẫu (sampling rate) = 44KHz
+ Số bít dùng để mã hoá các mức tín hiệu = 16bít
=> Tốc độ (bit rate) = 44Khz x 16 bit = 44000Hz x 16 bit = 704000b/s = 704kb/s

Đó là quá trình biến đổi từ Analog sang Digital
Vậy có được file dạng Digital rồi, để đọc được nó ta phải làm sao
Qúa trình đi ngược lại so với quá trinhg trên mà thôi .

Giải mã :

Các bạn thấy sau khi giải mã thì ta thu được 1 đường gấp khúc trong khi đường gốc là 1 đường cong. Chuyện này dễ hiểu đúng không ?

Các bạn có thấy hình trên đường gấp khúc nhìn rõ lắm không ?
Cũng dễ thấy, nếu ta càng tăng tần số lấy mẫu, tăng độ rộng mẫu thì đường giải mã được sẽ càng mịn (trên hình : các đường nối giữa các lần lấy mẫu sẽ nhỏ lại, càng nhỏ ta càng thấy nó mịn hơn đúng không) và càng giống đường gốc. Điều này giải thích tại sao bitrate càng cao thì nghe càng hay, càng giống thực, vì kết quả tái tạo lại sẽ chính xác hơn.
Một ông tên là Nyquyst đã nghiên cứu và nói là tần số lấy mẫu lớn hơn 2 lần băng thông thì kết quả thu được là gần trung thực .

Ví dụ: tai người nghe 0Hz->20Khz,suy ra băng thông = 20khz-0hz = 20khz, vậy thì tần số lấy mẫu ít nhất phải là 2x 20khz =40khz. Thời nay, với đĩa DVD, người ta đã dùng tới 96kHz
Dù tần số lấy mẫu có tăng lên thì rõ ràng ta cũng mất thông tin. Ta đã không lưu trữ tất cả. Cái gì mà chuyển sang Digital thì đã cắt thành từng khúc hết rồi ! Khi đó chỉ có mất đi chứ không thể thêm ra. Bởi vậy đừng dùng phần mềm convert để tăng bitrate hay tần số lấy mẫu nhé các bác. Ảnh số cũng tương tự. Khi phóng to ảnh trên máy vi tính thì quá ghê ! Càng phóng càng ghê ! Quá trình scan hình cũng như trên đó! Người ta chia tấm hình thành những ô nhỏ, gọi là pixel. Trong 1 ô như vậy chắc cú là có nhiều điểm với màu khác nhau nhưng người ta chỉ lấy 1 màu làm đại diện. Dễ thấy, nếu số pixel cao và độ sâu màu cao thì ảnh sẽ đẹp và sắc nét. Với máy ảnh số thì màn hình bao gồm những cảm biến. Mỗi cảm biến là 1 pixel, màu của 1 cảm biến là màu của 1 điểm ảnh. Cảm biến là từ chỉ thiết bị cảm nhận được sự biến đổi. Nói chung, cái nào mà biến ánh sáng, nhiệt độ,.. thành điện thì là cảm biến (sensor). Ánh sáng, nhiệt độ,.. thay đổi thì điện cũng thay đổi theo là được. Và đều được gọi là thiết bị mặc dù nó nhỏ xíu

Tới đây, có thể mọi người thắc mắc là " Tại sao tín hiệu mất đi mà không cảm thấy như vậy" . Đó là vù nhanh quá nên mình khó nhận ra đấy!, tai người mà chứ có phải tai …. Đâu , hihihihi .

Kết luận:

- Bitrate, tần số lấy mẫu càng cao thì nghe càng hay
- Convert lại để tăng bit rate :
nếu dùng 1 file MP3 64kbs Convert lên MP3 128kbs hoàn toàn không hay thêm tí nào.
Nếu dùng 1 file MP3 64kbs 32kHz Convert lên MP3 128kbs 44kHz hoàn toàn không hay thêm tí nào.
- Hạn chế sự có mặt của thiết bị Analog trong quá trình xử lý/biên tập âm thanh/hình ảnh.

Các file WMA, MP3 , AAC, đều là dạng lossy(mất thông tin). Các encoder Mp3,... sẽ cắt bớt những phần mà tai người rất ít nhận ra, ví dụ như khoảng tần số cao từ 16khz-20khz, hoặc là trong lúc có rất nhiều âm to, nhỏ thì những âm nhỏ sẽ được bỏ đi .

Nói chuyện vui chút, các bạn chắc cũng đã mua đĩa ngoài chợ trời rồi đúng không ?Các bạn để ý 1 điều : đĩa VCD mua ở chợ thường là ca nhạc lồng thêm người mẫu ThaiLand hoặc phim đám đá hự hự. đó là do họ lồng vào bán cho chạy. Nguồn của mấy ông làm đĩa là trên mạng mà thôi ! Trên mạng thì là mp3, wma,.. đều là những dạng lossy . Sau đó, mấy ổng đó phải chuyển thành MPEG để ghi ra đĩa VCD. Mà MPEG lại là 1 dạng lossy . Hai lần lossy nên chất lượng kém là phải. Hehe, đúng nhỉ .

Chắc đến đây các bạn đã có chút ít hiểu biết thêm về lĩnh vục điện tử số, đặc biệt là liên qua trực tiếp đến các file MP3 Tuấn Vũ – tài sản vô giá của mình . Hy vọng nó giúp ích nhiều hơn nữa trong cuộc sống số muôn màu của chúng ta.

Thứ Hai, 15 tháng 10, 2012

Điện thoại made by Viettel

Tin từ Tập đoàn Viễn thông Quân đội (Viettel) cho biết, loạt điện thoại di động Sumo 2G V6206 đầu tiên do Viettel tự sản xuất trên dây chuyền của mình đã xuất xưởng và hoạt động đảm bảo chỉ tiêu chất lượng. 

Cụ thể, theo tập đoàn này, Sumo 2G V6206 là điện thoại “2 sim 2 sóng” có thiết kế nhỏ gọn với trọng lượng 70 gram, hoạt động trên băng tần 900/1800 MHz. Kết nối mạng dựa trên sóng 2G GSM và GPRS (Class 10). Điện thoại này hướng vào nhóm khách hàng phổ thông.



Sumo 2G V6206 được trang bị màn hình TFT 262 nghìn màu, kích thước 1,77 inch độ phân giải 128 x 160 pixel. Bên cạnh đó là các tính năng giải trí như nghe đài FM, nghe nhạc MP3, chụp ảnh, quay phim,... và khe cắm thẻ nhớ microSD cho phép mở rộng bộ nhớ tới 32GB. Với những tính năng trên, Sumo 2G V6206 được trang bị pin 900 mAh, đem lại thời gian chờ lên tới 200 giờ và thời gian đàm thoại liên tục 5 giờ.

Viettel cho biết, đây là sản phẩm do công ty tự chế tạo hoàn toàn với quy trình sản xuất và lắp ráp được thực hiện trên dây chuyền sản xuất thiết bị tại Công ty Thông tin M1. Dự kiến sau khi đánh giá về toàn diện hiệu quả sản xuất, điện thoại Sumo 2G V6206 sẽ được chế tạo với số lượng lớn và phân phối tại các thị trường Viettel có triển khai kinh doanh.

“Đây là sự kiện đánh dấu bước tiến mới của Viettel trong chiến lược sản xuất thiết bị viễn thông sau khi sản xuất thành công số lượng lớn USB DCOM 3G và được thị trường đón nhận trong năm 2011”, tập đoàn này cho biết.

Sản xuất thiết bị là 1 trong 4 trụ quan trọng trong chiến lược phát triển của Viettel. Nhiệm vụ chính nhằm làm chủ công nghệ và tự sản xuất các loại thiết bị viễn thông, từ điện thoại di động cơ bản, smartphone, USB 3G, tablet và máy tính PC All-in-one.

Tháng 10/2011, Viettel chính thức vận hành dây chuyền sản xuất thiết bị điện tử viễn thông có khả năng sản xuất nhiều chủng loại. Dây chuyền này có công suất thiết kế đạt tới 5 triệu USB 3G/năm, hoặc 3 triệu máy điện thoại di động/năm hoặc 900 ngàn máy tính/năm, phục vụ cho nhu cầu thị trường của Viettel, bao gồm cả những thị trường nước ngoài mà Viettel đầu tư.

TheoVnEconomy - Genk.vn

Thuật toán mới giảm một nửa thời gian sạc pin

Công nghệ pin luôn là một bài toán khó đối với các nhà khoa học không chỉ bằng cách tăng thêm dung lượng pin nhưng không làm thay đổi kích thước mà còn làm cho pin bền hơn, rẻ hơn, sạc nhanh hơn.

Pin luôn là một trong những linh kiện có tốc độ phát triển kém nhất trên các thiết bị di động. Các nhà khoa học hiện vẫn đang rất đau đầu trong việc tìm ra giải pháp có thể nâng cao hết mức dung lượng pin có thể mà không làm thay đổi kích thước của chúng. Đó không phải là một việc dễ dàng, chính vì thế mà các nhà nghiên cứu ở đại học California San Diego đã chọn một hướng mới trong việc phát triển công nghệ pin.

Mới đây, họ đã khám phá ra thuật toán mới có thể làm rút ngắn thời gian sạc pin lithium-ion xuống còn một nửa. Bên cạnh đó thì thuật toán này cũng có thể làm giảm giá thành của linh kiện pin bên trong các thiết bị di động qua đó phần nào làm hạ giá thành sản phẩm.



Theo đó, các nhà khoa học tại San Diego đã phát triển ra được một thuật toán có khả năng phân tích và tính toán xem các ion nào ở bên trong các cell pin nhằm đánh giá tình trạng của pin một cách chính xác hơn. Trong quá trình thử nghiệm, nhóm nghiên cứu đã tiến hành sạc đầy một viên pin chỉ trong 15 phút. Giáo sư Miroslav Krstic, người dẫn đầu nghiên cứu này cho hay:

"Nghiên cứu mở ra một tương lai mới cho phép những viên pin có thể được sạc nhanh hơn và hoạt động hiệu quả hơn. Điều đó giúp cho các nhà sản xuất có thể làm ra những sản phẩm có pin bền hơn với giá thành cũng rẻ hơn."

Rõ ràng là công nghệ này vẫn chưa thể tiềm năng bằng việc tăng thêm dung lượng cho pin lithium-ion nhưng ít ra nó cũng có thể đem lại sự tiện dụng trong việc sạc pin của người dùng.

Tham khảo: Gizmodo

Thứ Ba, 2 tháng 10, 2012

Bài 11:Thuật toán dò dường

Mục đích của việc dò đường: giúp cho robot di chuyển trên các vạch trắng có sẳn trên sân thi đấu để đến các mục tiêu và ghi điểm. Việc dò đường hay còn gọi là dò line làm tăng độ chính xác khi di chuyển của robot.

Cách lập trình dò đường:
- Dựa vào sự thay đổi trạng thái trên các cảm biến dò đường. Cảm biến dò đường được giới thiệu rất kỹ trong các tài liệu đã post trên diễn đàn. Nhưng có thể khái quát như sau:
Một cảm biến của robot thường gồm một con phát và một con thu như hình dưới, khi cấp nguồn thì con phát phát sáng. Mỗi khi đi qua vạch trắng ánh sáng phát từ con phát sẻ phản xạ xuống vạch trắng lên con thu, con thu nhận ánh sáng sẻ thay đổi mức điện áp từ 0v tương ứng với mức 0 thành 5v tương ứng với mức 1. Còn khi ở trên sân có các màu tối ánh sáng không phản xạ lên nên con thu luôn ở mức 0. Như vậy vi điều khiển sẻ liên tuc kiểm tra mức trạng thái có trên mỗi cảm biến thu để xác định được robot có đang ở trên vạch trắng hay không và xác định được độ lệch tương đối của robot so với vạch trắng dựa vào cách bố trí các cảm biến.



- Từ các giá trị của cảm biến đưa về vi điều khiển sẻ điều khiển tốc độ các động cơ dò đường một cách phù hợp nhất để đưa robot chạy vào giửa đường line nhằm đảm bảo độ chính xác khi di chuyển.
* Dưới đây là một số hình ảnh minh hoạ cho thuật toán dò đường theo vạch trắng.

Robot ở trạng thái lý tưởng trong quá trình dò đường.





Hình 2: Các trường hợp dò đường



a. Robot đang bị lệch phải, trường hợp này xử lý bằng cách nạp tốc độ bánh phải lớn tốc độ hơn bánh trái.
b. Robot đang bị lệch trái, trường hợp này xử lý bằng cách nạp tốc độ bánh trái lớn hơn tốc độ bánh phải.
Các bước để có một chương trình dò đường:
Xác định các trường hợp mà các cảm biến có thể nhận trong quá trình dò đường.
- Ứng với mỗi giá trị từ module cảm biến, xác định vị trí lệch của robot so với vạch trắng.
Ví dụ:
8 cảm biến được nối vào 8 chân của vi điều khiển ở cổng P0 của vi điều khiển theo trình bày ở hình dưới:

Nếu giá trị tại cổng P0 là 00011000 thì giá trị tương ứng của mắt trái 1 và mắt phải 1 bằng 1, tức là hai mắt giửa của robot nhận được vạch trắng và có mức điện áp bằng 1, do đó ta biết được là robot đang nằm ở chính giửa vạch trắng.
Nếu giá trị tại cổng P0 là 11000000 thì giá trị tương ứng của mắt trái 4 và mắt trái 3 bằng 1, tức là hai mắt ngoài cùng bên trái của robot nhận được vạch trắng và có mức điện áp bằng 1, do đó ta biết được là robot đang nằm lệch nhiều về phía bên phải của vạch trắng.
Tương tự, nếu giá trị tại cổng P0 là 00000011 thì giá trị tương ứng của mắt phải 4 và mắt phải 3 bằng 1, tức là hai mắt ngoài cùng bên phải của robot nhận được vạch trắng và có mức điện áp bằng 1, do đó ta biết được là robot đang nằm lệch nhiều về phía bên trái của vạch trắng.
Có khá nhiều các vị trí tương đối của cảm biến so với vạch trắng và với mỗi vị trí đó ta hoàn toàn có thể xác định độ lệch của robot trên vạch trắng và từ đó điều khiển tốc độ của hai động cơ dò đường cho phù hợp để đưa robot về chính giữa vạch trắng nhằm đảm bảo độ chính xác cho robot di chuyển tới mục tiêu.

- như vậy sau khi đã xác định được các trường hợp mà khi dò đường robot có thể gặp phải, ta nhận giá trị của cảm biến và so sánh với các trường hợp đã thiết lập, nếu các cảm biến đang rơi vào trường hợp nào thì ta điều khiển động cơ cho từng trường hợp đó.
Chương trình dò đường đơn giản như sau:


void do_duong(void)
{
while(1)
{
ACC=P0; // nhận giá trị cảm biến từ cổng P0 vào thanh ghi đa chức năng ACC
if(ACC==11000000) // MT4 và MT3 nhận -> lệch phải nhiều
{
RMOTOR=200; // bánh trái chạy chậm hơn bánh phải
LMOTOR=50; // để điều chỉnh robot vào giửa line
}
if(ACC==01100000) // MT3 và MT2 nhận -> lệch phải vừa
{
RMOTOR=200;
LMOTOR=100;
}
if(ACC==00110000) // MT2 và MT1 nhận -> lệch phải ít
{
RMOTOR=200;
LMOTOR=50;
}
if(ACC==00011000) // hai mắt giữa nhận -> không lệch
{
RMOTOR=200;
LMOTOR=200;
}


if(ACC==00001100) // MP1 và MP2 nhận -> lệch trái ít
{
RMOTOR=50;
LMOTOR=200;
}
if(ACC==00000110) // MP2 và MP3 nhận -> lệch trái vừa
{
RMOTOR=100;
LMOTOR=200;
}
if(ACC==00000011) // MP3 và MP4 nhận -> lệch trái nhiều
{
RMOTOR=150; // bánh phải chạy chậm hơn bánh trái
LMOTOR=200; // để điều chỉnh robot vào giửa line
}
}
}



Chương trình này chỉ chứa một số trường hợp đơn giản, vẫn còn khá nhiều trường hợp và nhiều giải thuật khác hay hơn, mình chỉ đưa ra một ví dụ đơn giản để các bạn có thể phát triển tối ưu hơn

Bài 12:Các thao tác cơ cấu

Chức năng: điều khiển các cơ cấu của robot thực hiện các thao tác nhằm ghi điểm với các cấu kiện.
Ví dụ: khi robot muốn đặt cấu kiện vào kim tự tháp chẳng hạn, nó phải thực hiện một số thao tác như, đẩy cấu kiện và đúng vị trí, đặt cấu kiện xuống.v.v.
Ở đây ta mô phỏng thao tác kéo xuống để đưa cấu kiện xuông.
Thuật toán:





Giải thích cho thuật toán:
- Chọn chiều thao tác: muốn robot thao tác kéo lên hay xuống thì đầu tiên là chọn chiều quay của động cơ.
- Nạp thời gian thực hiện thao tác: Thông thường để kiểm tra một thao tác thực hiện được kết thúc khi nào thf người ta sử dụng các công tắc hành trình như đã nói ở trên, nhưng để an toàn hơn trong trường hợp công tắc hành trình có thể hỏng do va đập nhiều, ta có thể tính toán khoảng thời gian thực hiện thao tác để kết thúc thao tác trong trường hợp công tắc bị hỏng. Khoảng thời gian tính toán phải đủ để lớn hơn thời gian chạm công tắc hành trình, vì ưu tiên kiểm tra công tắc hành trình trước.
- Chạy cơ cấu: Cấp nguồn cho động cơ thực hiện thao tác hạ cơ cấu để bỏ cấu kiện vào vị trí.
- Giảm thời gian thực hiện: đồng thời với việc thao tác, giảm thời gian thực hiện xuống.
- Kiểm tra : Nếu đã chạm công tắc hành trình: tức là cơ cấu đã đưa cấu kiện đến đúng vị trí cần để, nạp thời gian thực hiện về 0 và kết thúc thao tác. Nếu chưa chạm công tắc thì kiểm tra thời gian thực hiện.
- Kiểm tra : Nếu thời gian thực hiện đã bằng 0 thì dừng thao tác và kết thúc. Nếu thời gian thực hiện còn lớn hơn 0 thì tiếp tục thực hiện bước chạy cơ cấu.
Chương trình cho một thao tác:

void keo_xuong(void)
{
KEO_ROLE=0; // chọn chiều động cơ
KEO_MOTOR=80; // nạp tốc độ động cơ
CT_KEOXUONG=1;
int thoi_gian_thuc_hien=1000; // nạp thời gian thực hiện
while(thoi_gian_thuc_hien!=0) // trong khi chua het thoi gian
{
if(CT_KEOXUONG==1) // đã chạm công tắc hành trình
{
thoi_gian_thuc_hien==0;
// nạp thời gian thực hiện bằng 0 để kết thúc thao tác
}
else
thoi_gian_thuc_hien--; // giảm thời gian thực hiện xuống
}
KEO_MOTOR=0; // dừng động cơ

Bài 13:Thuật toán nhận biết ngã tư và đếm ngã tư

Ý nghĩa thuật toán:
Khi robot do đường trên sân thi đấu nó không chỉ đi thẳng mà còn rẻ phải rẻ trái .v.v. Khi robot chuyển hướng thì thường nó phải tìm một ngã tư để tiếp tục dò đường sau khi quay. Vậy làm sao để robot nhận biết được nó đang đứng tại một ngã tư và ngã tư đó là ngã tư thứ mấy? Ta có thuật toán đếm ngã tư.







Nhìn vào hình vẻ này ta thấy muốn robot nhận biết được ngã tư thì số cảm biến dò đường nằm trên vạch trắng sẻ lớn hơn 3, vì vạch trắng theo chiều dọc chỉ đủ để chứa 2 cảm biến, robot gặp ngã tư tức là các cảm biến cùng nằm trong vạch trắng ngang.


Vậy để kiểm tra robot có nằm trên ngã tư không ta chỉ cần kiểm tra một tổ hợp trên 3 cảm biến trong 8 cảm biến nhận vạch trắng.
Ví dụ: Nếu cổng P0 được nối tới các cảm biến thì ta kiểm tra giá trị cổng P0, nếu P0 = 00011100 tức là có ba cảm biến nhận vạch trắng như vậy robot đã bắt được 1 ngã tư. Ta dùng một biến để kiểm tra ngã tư là co_nga_tu.
Nếu muốn di chuyển tới ngã tư thứ mấy thì ta dùng một biến để lưu số ngã tư đã đi qua, mỗi lần qua ngã tư thì biến này tăng lên 1 chẳng hạn, và chỉ cần kiểm tra biến này bằng bao nhiêu thì ta xác định được ngã tư robot đang đến là ngã tư thứ mấy.
Chương trình kiểm tra ngã tư đơn giản: kiểm tra tổ hợp 3 trên 4 cảm biến ở giửa của robot.


void kt_nga_tu(void)
{
ACC=P0; // Nhận giá trị cảm biến ở cổng P0 vào thanh ghi ACC
if(ACC==00111000) // trường hợp 3 mắt nhận
{
co_nga_tu=1; // đã có ngã tư
}
else if(ACC==00110100) // trường hợp 3 mắt nhận
{
co_nga_tu=1;
}
else if(ACC==00101100) // trường hợp 3 mắt nhận
{
co_nga_tu=1;
}
else if(ACC==00011100) // trường hợp 3 mắt nhận
{
co_nga_tu=1;
}
else if(ACC==00111100) // trường hợp 4 mắt nhận
{
co_nga_tu=1;
}
else
do_duong(); // nếu không gặp ngã tư thì gọi hàm dò đường trên vạch //trắng dọc
}



Chương trình chính của chúng ta sẻ như sau: Chẳng hạn ta viết chương trình cho robot chạy tới ngả tư thứ 3 rồi thực hiện thao tác rẻ trái.

void main(void)
{
bit dem_so_nga_tu=0; // khai bao bien đếm ngã tư
bit co_nga_tu=0; // khai báo biến cờ ngã tư =0
while(dem_nga_tu!=3) // trong khi chưa đủ 3 ngã tư
{
kt_nga_tu(); // gọi hàm kiểm tra ngã tư để kiểm tra ngã tư
if(co_nga_tu==1) // nếu đã gặp ngả tư
dem_so_nga_tu++; // tăng giá trị đếm ngã tư lên


}
re_trai(); // gọi hàm rẻ trái để thực hiện thao tác rẻ trái
}



Bài 7:lập trình led 7 seg

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);
}
}
}

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;
}




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.

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.

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.

Giao tiếp vi điều khiển với Module 548




Sơ đồ nguyên lý giao tiếp giữa Vi Điều Khiển với Module Sim548:



Code Demo:



#include "Pic_GSM_demo.h"


#include ".\myLCD16x2.c"
#include


#define Led0 PIN_C1
#define Led1 PIN_C2
#define GSM_PW PIN_E2
#define GSM_SENSE PIN_E1
#define TEXTMODE 5;
#define PDUMODE 0;


void GSM_init(void);
void GSM_start(void);
void GSM_sel_mess_mode(char mode);


void GSM_init(void)
{
output_bit(GSM_PW,1);
output_bit(Led1,1);
output_float(GSM_SENSE);
}
void GSM_start(void)
{
//start up GSM module
delay_ms(2000);
lcd_init();

lcd_putc("\fwww.elabvn.com\n");
lcd_putc("Pic GSM rev 1.0");
//printf("GSM demo \n \r");
output_bit(GSM_PW,0);
output_bit(Led1,0);
delay_ms(2000);
output_bit(GSM_PW,1);
output_bit(Led1,1);
lcd_putc("\nGSM initializing");
delay_ms(50000);


}


void GSM_sel_mess_mode(char mode)
{
if(mode>0) //text mode
{
output_bit(Led1,0);
printf("AT+CMGF=1");
putc(13);//enter CR
output_bit(Led1,1);
delay_ms(1000);
output_bit(Led1,0);


}
else //PDU mode
{
output_bit(Led1,0);
printf("AT+CMGF=0");
putc(13);//enter CR
output_bit(Led1,1);
delay_ms(1000);
output_bit(Led1,0);
}

}


void main()
{
int1 gsm_ok;
int cnt;
int1 temp;
char c;
int i;



GSM_init();
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab


// TODO: USER CODE!!
GSM_start();
GSM_sel_mess_mode(5);

printf("ATE1"); //echo on
putc(13);//enter CR
delay_ms(1000);//

printf("AT");
putc(13);//enter CR
output_bit(Led1,1);
lcd_putc("\nGSM send message ");
delay_ms(1000);
output_bit(Led1,0);
printf("AT+CMGS=");
putc(34);//"
printf("0989703330");
putc(34);//"

putc(13);//enter CR
delay_ms(1000);//cho ki tu ">"
printf("SIM300 Ready");
delay_ms(1000);//
putc(0x1A);//CTRL+Z
output_bit(Led1,1);
delay_ms(2000);//

lcd_putc("\nGSM sent done ");
while(1);
}


Nguồn: anhduc_4share

Mạch đếm sản phẩm dùng Chip AT89C51

Mấy hôm nay Chip đang loay hoay tìm mạch đếm sản phẩm,để lắp 1 mạch đếm người qua lại,lang thang 1 hồi chip tìm được 1 bài viết rất hay và dễ hiểu lại Viết bằng ASM,đúng món chip cần,Chip lại đang học LT C rồi sẽ chuyển sang C cho anh em xem.Anh em điện tử có gì thắc mắc Comment bên dưới nhé?

 

Đây là một 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 bằng kỷ thuật đếm xung, sử dụng phương pháp quét led để hiển thị số đếm và có khả năng dừng băng truyền

Bây giờ chúng ta bắt đầu nhé: Giới thiệu sơ qua cho các bác biết trong mạch có những gì nhé : để làm mạch này thì chúng ta có 3 khối chính đó là khối phát hồng ngoại , khối thu hồng ngoại, khối hiển thị và dĩ nhiên là không thể thiếu bộ xử lý trung tâm rồi đúng không, các bác dùng vi điều khiển họ 8051 nhé (ở đây mình dùng con 89c51)

Khối phát hồng ngoại: dùng timer0 để phát xung 38khz ở một chân của 89c51 ở đây mình chọn chân p1.5, còn vấn đề phát như thế nào thì mình sẻ nói sau.

Còn đây là sơ đồ mạch phát:



ở đây mình dùng cách ghép darlington để khuếch đại tín hiệu đưa ra từ chân p1.5 vì tín hiệu từ 89c51 rất bé nên chúng ta cần khuếch đại dòng cho nó để đủ sáng led, Q1,Q2 các bác dùng loại NPN nhé ở đây mình dùng con C1815. Nói sơ qua cho các bác hiểu nguyên lý hoạt động của nó nhé: chúng ta phát dạng xung vuông có tần số là 38khz tức là chân p1.5 của 89c51 sẻ liên tục đảo chiều cứ lên 1 rồi lại xuống 0, khi p1.5 lên 1 thì Q1 dẫn lúc đó có dòng Vcc chạy từ cực C xuống E của Q1, vì cực E của Q1 nối với cực B của Q2 nên khi Q1 dẫn thì cực B của Q2 có dòng nên Q2 cũng dẫn và có dòng chạy từ Vcc qua cực C và xuống E của Q2 rồi qua led phát hồng ngoại qua điện trở rồi xuống mass, lúc này led phát hồng ngoại sáng còn khi chân p1.5 xuống mức 0 thì Q1 và 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 năng là phát hiện sự mất xung ( có sản phẩm đi qua ) và đưa về con 89c51 để xử lý tăng số đếm lên 1 đơn vị

đây là sơ đồ mạch thu:



Các bác nối theo sơ đồ nhé, cho mấy bác thông số luôn nè: R15 là 2k2, R16 chọn 1K R16 có khả năng chống nhiểu nữa nếu như có nhiểu thì các bác chỉ việc thay con trở R16 có giá trị nhỏ hơn là được nhưng mà mình nghĩ chắc là không còn nhiểu đâu vì ngày xư mình dùng tới 22k và rất nhiểu nên giờ giảm xuống 1k và thấy rất tốt các bác yên tâm, R17 chọn 100Ω, biến trở R18 chọn 100k, tụ C4 và C5 chọn khoảng 10uF.

Nguyên lý hoạt động: khi có sản phẩm đi qua thì led thu hồng ngoại bị che khuất lúc này có dòng đi từ Vcc qua led thu hồng ngoại ròi qua cực B của Q3 lúc này Q3 dẫn, cực C của Q3 xuống mức thấp lúc này tụ C4 xả điện qua diode qua Q3 và xuống mass lúc này chân số 2 của LM555 được kích và tạo ra một xung ở chân số 3 đưa về cho ic89c51 xử lý. (chân số 3 của LM555 được nối vào chân P3.2 của 89c51 tức là chân 12 )

Biến trở R18 dùng để điều chỉnh tốc độ nhận dạng sản phẩm đi qua, khi có sản phẩm đi qua thì led thu hồng ngoại bị che khuất ta có sơ đồ mất xung như sau.



Khối hiển thị : dùng để hiển thị số lượng sản phẩm đã đi qua.

Đây là sơ đồ khối hiển thị:



Q4 và Q5 dùng loại PNP ở đây mình dùng A1015. Còn R13, R14 thì các bác chọn khoảng 10k còn trở R5 đến R12 thì các bác chọn sao cho led đủ sáng nhé (nên chọn giá trị nhỏ thôi ) còn bác nào mà sợ tốn trở thì làm thế này bỏ R5 đến R12 đi ta cứ nối thẳng nó vào Port0 của 89c51 thay vào đó là ta sẻ gắn cho nó một con trở ở cực C của Q4 và Q5 là khoảng 220Ω các bác cứ chọn sao cho led đủ sáng là được. Ở đây mình dùng led Anot chung ( loại Anot chung này chân chung được nối lên nguồn )

Led 7đoạn các bác về giải mã nó nhé.

Đây là hình dạng của led



Các bác dùng VOM để ở thang đo điện trở nhỏ nhất rồi đưa que đỏ vào chân số 3 hoặc chân số 8 que còn lại lần lượt đưa vào các chân 1,2,4,5,6,7,9,10 xem đâu là a, đâu là b… ( lưu ý là VOM trên thị trường có loại của trung quốc thì que đỏ là cực âm và que đen là cực dương các bác chú ý nhé nếu là loại này thì phải làm ngược lại đưa que đen vào chân số 3 hoặc 8 còn que kia thì đo các chân còn lại )

Còn ở đây mình giải mã ra được : 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 của led vào port0 như thế này nhé: “a” nối vào chân P0.7 ( tức là chân 32 của 89c51 ) lần lượt cho tới “dp” nối vào chân P0.0 (tức là chân 39 của 89c51)
Như vậy là xong phần cứng bây giờ chúng ta thử cho nó hiển thị lên số 0 nhé. Quy tắc là như thế này khi ta cho phép dòng đi qua con led thì led tích cực và muốn cho chổ nào sáng thì ta cho chổ đó về 0 giả sử muốn cho led đơn vị sáng lên số 0 thì ta điều khiển sao cho chân p1.7 lên mức 1 và chân p1.6 về mức 0 như vậy là led đơn vị được cho phép và muốn hiển thị lên số 0 thì ta cần làm cho các thanh led a,b,c,d,e,f sáng để cho nó sáng thì các chân này sẻ về mức 0 (cụ thể như con led mình đã giải mã thì mình điều khiển con 89c51 để cho chân 1,2,4,6,7,9, của led về mức 0 vậy là sẻ có số 0 hiển thị trên led đơn vị ) như vậy thì muốn hiển thị số 0 thì P0 cần xuất ra giá trị là 00000011 tức là 03H tương tự số 1 là chân "b,c" sáng và port0 cần xuất ra giá trị là 10011111 tức là F9H tương tự ta có được bảng số như sau: 0 = 03H; 1 = 9FH; 2 = 25H; 3 = 0DH; 4 = 99H; 5 = 49H; 6 = 41H; 7 = 1FH; 8 = 01H ; 9 = 09H

Đây là mạch tổng quát :(click vào ảnh để phóng to)



Phần cứng như thế là ổn bây giờ chúng ta đi viết chương trình cho nó nhé:Để viết chương trình các bạn cần nắm được mình cần làm gì cái đã: chúng ta đang làm một mạch đếm sản phẩm và chúng ta quản lý số đếm trong R7 nên chương trình chính chúng ta có nhiệm vụ là nạp các giá trị ban đầu cho phép ngắt, tách số BCD và hiển thị ra LED. Trong mạch này chúng ta sử dụng 3 nguồn ngắt đó là ngắt timer0 dùng để phát xung cho mạch phát, ngắt ngoài 0 dùng để tăng số lượng sản phẩm và 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ế độ 2 ( timer0 chế độ 2 có khả năng tự nạp lại giá trị ban đầu nên chúng ta chỉ cần nạp một lần là đủ ). Chúng ta dùng thạch anh 12MHz nên ta có 1 chu kỳ máy = 1µs, chúng ta phát ở tần số 38khz vậy ta có T=1/f = 1/38 = 0.026ms = 26 µs → Ton =Toff = 26/2 = 13
như vậy cần nạp cho timer0 giá trị là -13.Trong chương trình ngắt timer0 ta chỉ việc đảo trạng thái chân p1.5 là được và ta có đoạn chương trình ngắt timer0 là:






T0_ISR: CPL P1.5 RETI




Chương trình đếm sản phẩm: chúng ta sử dụng ngắt ngoài 0. Khi phát hiện mất xung ( có sản phẩm đi qua) chân P3.2 xuống mức thấp và lúc này xảy ra ngắt ngoài 0. Trong chương trình ngắt ngoài 0 chúng ta tăng số đếm lên 1 đơn vị và so sánh nó với giá trị là 100 khi nó đạt đến 100 thì reset nó về 0
ta có đoạn chương trình ngắt ngoài 0:






EX0_ISR:
INC R7 ; tang s? d?m lên 1 don v?
CJNE R7,#100,EXIT ;so sánh R7 v?i 100 n?u chua = 100 thì nh?y t?i EXIT còn n?u b?ng 100 thì xóa nó v? 0
MOV R7,#0
EXIT: RETI




Còn bác nào muốn dừng băng truyền thì trong chương trình ngắt ngoài 0 ta so sánh số đếm với các giá trị định sẳn chẳng hạn như các giá trị 20,40,60,80,100, khi số đếm bằng các giá trị này thì cho dừng bằng truyền trong 5s rồi cho băng truyền hoạt động trở lại.
ta có lại đoạn chương trình ngắt ngoài 0 như sau:






E0_ISR: INC R7 ; tăng R7 lên 1 CJNE R7,#20,TIEP ; so sánh R7 với 20, nếu chưa bằng thì nhảy tới nhản TIEP còn nếu bằng rồi thì gọi chương trình TIEPTUC ACALL TIEPTUC ; gọi chương trình TIEPTUC TIEP: CJNE R7,#40,TIEP1 ; so sánh R7 với 40 ACALL TIEPTUC ; gọi chương trình tiếp tục TIEP1: CJNE R7,#60,TIEP2 ; so sánh R7 với 60 ACALL TIEPTUC ; gọi chương trình TIEPTUC TIEP2: CJNE R7,#80,TIEP3 ; so sánh R7 với 80 ACALL TIEPTUC ; gọi chương trình TIEPTUC TIEP3: CJNE R7,#100,EXIT ; so sánh R7 với 100 MOV R7,#0 ; xóa R7 về 0 ACALL TIEPTUC ; gọi chương trình TIEPTUC EXIT: RETI ; quay về từ ngắt






Trong chương trình TIEPTUC chúng ta sẻ cho dừng băng truyền nhưng ở đây mình chỉ làm mô phỏng nên mình thay cái động cơ điều khiển băng truyền là một con led khi led sáng thì báo hiệu là đang dừng băng truyền.
Trong main chúng ta nạp các giá trị ban đầu cho phép ngắt và tách số BCD rồi hiển thị lên LED dùng phương pháp quét led ( nói sơ qua về phương pháp quét led cho một số bác chưa biết hiểu: chúng ta nối các chân a,b,c,d,e,f,g,dp của led chục và led đơn vị lại với nhau, và ta gửi tín hiệu ra led để hiển thị giá trị cần hiển thị và dĩ nhiên là nếu chúng ta cho phép cả hai led thì cả hai led đều hiển thị một số, cho nên trong một lúc chúng ta chỉ cho phép một led sáng.
ví dụ khi muốn hiển thị số 15 thì ta cần led chục hiển thị số 1 còn led đơn vị hiển thị số 5 vậy thì đầu tiên ta gửi tín hiệu cho sáng số 1 rồi tắt led đơn vị và cho phép led chục, delay một khoảng thời gian rồi gửi tiếp tín hiệu cho sáng số 5 rồi tắt led chục và cho phép led đơn vị)
quét led nghĩa là cho trong một trạng thái chỉ có một led được sáng cứ như thế led chục sáng số 1 và tắt led đơn vị, delay một khoảng thời gian rồi tắt led chục và cho led đơn vị sáng số 5 rồi delay một khoảng thời gian, tốc độ sáng led là khoảng 24hình/s như thế thì mắt chúng ta có không thể nhận biết được sự thay đổi đó và có cảm giác là nó đang hiển thị số 15. Giải thuật tách số đếm trong R7 như thế này: chúng ta nạp cho B một giá trị là 10 và lấy R7 chuyển vào A rồi lấy A chia cho B như thế phần nguyên sẻ nằm trong A ( tức là số chục lưu trong A ) còn phần dư nằm trong B ( tức là số đơn vị nằm trong B), như vậy là ta đã tách được số chục và số đơn vị ra, chúng ta chuyển số hàng chục ra port0 rồi cho led chục tích cực và tắt led đơn vị, rồi chuyển B và A rồi xuất nó ra port0 và cho phép led đơn vị sáng và tắt led chục.
Còn đây là code hoàn chỉnh:





ORG 0000H ; điểm vào reset LJMP MAIN ; gọi chương trình chính ORG 000BH ; vecter timer 0 LJMP T0_ISR ; gọi chương trình ngắt timer 0 ORG 0003H ; vecter ngắt ngoài 0 LJMP E0_ISR ; gọi chương trình ngắt ngoài 0 ORG 001BH ; vecter timer 1 LJMP T1_ISR ; gọi chương trình ngắt timer 1 ORG 0030H ; điểm vào chương trình chính MAIN: MOV TMOD, #12H ; timer 0 chế độ 2 và timer 1 chế độ 1 MOV TH0,#(-13) ; sau 13 Ms thì xảy ra ngắt timer 0 ( tần số 38Khz) SETB TR0 ; cho phép timer 0 chạy SETB EA ; cho phép ngắt toàn bộ SETB ET0 ; cho phép ngắt timer 0 SETB EX0 ; cho phép ngắt ngoài SETB IT0 ; ngắt cạnh xuống CLR P1.4 ; xóa p1.4 về 0 (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 trong R7 vào A MOV B,#10 ; nạp cho B giá trị 10 DIV AB ; chia A cho B MOV DPTR,#LUT ; chỉ con trỏ DPTR vào bảng LUT MOVC A,@A+DPTR ;chuyển giá trị đã chọn trong bảng LUT vào thanh ghi tích lũyA MOV P0,A ; xuất A ra port 0 CLR P1.7 ; cho phép led chục sáng SETB P1.6 ; tắt led đơn vị ACALL DELAY ; gọi chương trình delay MOV A,B ; chuyển B vào A MOV DPTR,#LUT ; chỉ con trỏ DPTR vào bảng LUT MOVC A,@A+DPTR ;chuyển giá trị đã chọn trong bảng LUT vào thanh ghi tích lũyA MOV P0,A ; xuất A ra port 0 CLR P1.6 ; cho phép led đơn vị sáng SETB P1.7 ; tắt led chục ACALL DELAY ; gọi chương trình delay SJMP LOOP ; quay lại chương trình chính RET T0_ISR: CPL P1.5 ; đảo trạng thái p1.5 ( mục đích tạo xung vuông ) RETI ; quay lại từ ngắt E0_ISR: INC R7 ; tăng R7 lên 1 CJNE R7,#20,TIEP ; so sánh R7 với 20, nếu chưa bằng thì nhảy tới nhản TIEP còn nếu bằng rồi thì gọi chương trình TIEPTUC ACALL TIEPTUC ; gọi chương trình TIEPTUC TIEP: CJNE R7,#40,TIEP1 ; so sánh R7 với 40 ACALL TIEPTUC ; gọi chương trình tiếp tục TIEP1: CJNE R7,#60,TIEP2 ; so sánh R7 với 60 ACALL TIEPTUC ; gọi chương trình TIEPTUC TIEP2: CJNE R7,#80,TIEP3 ; so sánh R7 với 80 ACALL TIEPTUC ; gọi chương trình TIEPTUC TIEP3: CJNE R7,#100,EXIT ; so sánh R7 với 100 MOV R7,#0 ; xóa R7 về 0 ACALL TIEPTUC ; gọi chương trình TIEPTUC EXIT: RETI ; quay về từ ngắt DELAY: MOV R6,#200 DJNZ R6,$ RET ; 3 dòng lệnh này là delay 400Ms TIEPTUC: 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 1 MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) ; hai dòng lệnh này là nạp giá trị cho timer 1 ( sau 50000 Ms thì xảy ra ngắt timer 1) SETB TR1 ; cho timer 1 chạy RET ; kết thúc chương trình tiếp tục T1_ISR: DJNZ R5,THOAT ; giảm R5 đi 1 và so sánh nó với 0 nếu chưa bằng 0 thì thoát còn nếu bằng 0 thì lằm tiếp CLR 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 1 CLR TR1 ; dừng timer 1 MOV R5,#50 ; nạp lại cho R5 giá trị 50 THOAT: RETI ; trở về từ ngắt LUT: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H END
Theo hlab.com.vn

Mạch dùng điều khiển Led quảng cáo

Mạch điện bên dưới là 1 trong những dạng mạch dùng điều khiển Led quảng cáo trên thị trường. Mạch được thiết kế dùng chung với phần mềm lập trình Led MD LEDSIGN. Sử dụng phần mềm lập trình Led MD LEDSIGN lập trình chip AT89C52 thật dễ dàng, nhanh chóng, chính xác. Hãy tải phần mềm lập trình Led MD LEDSIGN về để trải nghiệm sự tiện lợi.
Sơ đồ nguyên lý mạch điều khiển Led Sign:




Giải thích:
Điện trở VR1, RO1, RO2, CO1 và LM555C tạo thành mạch dao động có tần số thay đổi bằng cách điều chỉnh biến trở VR1. Dao động này cấp vào chân 15 (Counter 1) của Vi Điều Khiển AT89C52
Khối nguồn nhận nguồn 12VDC thông qua JP ổn áp xuống 5VDC nhờ IC ổn áp LM7805 cấp nguồn cho toàn mạch
Khối công xuất sử dụng Transistor D882 được điều khiển bởi AT89C52
Vi Điều Khiển AT89C52 điều khiển 16 cổng Led, tốc độ điều khiển trạng thái 16 cổng Led sẽ phụ thuộc vào chương trình delay hay là tùy thuộc vào tần số của mạch dao động LM555 cấp vào chân 15 của AT89C52. Phần mềm lập trình led MD LEDSIGN cho phép cài đặt thời gian delay hay đếm xung từ LM555 để điều khiển 16 cổng Led.








DBS M05479
Quang Cao