www.thachdt.com www.thachdt.com www.thachdt.com www.thachdt.com Điện thoại: 0901965800

Thứ Tư, 31 tháng 1, 2018

Các lỗi thường gặp ở máy điều hòa và cách sửa chữa khắc phục



Chào các bạn hôm nay mình chia sẽ một số lỗi cơ bản của máy điều hòa mà mình tổng kết được sau một thời gian sửa chữa tại cửa hàng như sau

1 - Máy điều hòa bị thiếu gas hoặc hết gas

Đa số chúng ta đều nghĩ rằng gas điều hòa sẽ bị mất dần theo thời gian sử dụng. Nhưng không, máy điều hòa không khí là một hệ thống kín và gas lạnh bên trong máy là loại hóa chất rất bền không bị phân hủy trong điều kiện hoạt động của máy nên không có hiện tượng hao hụt gas. Máy chỉ thiếu gas, hết gas trong trường hợp bị rò rỉ và xì trên đường ống, tại các van, các chỗ đấu nối ống bằng rắc-co… hay trong quá trình lắp điều hòa mới người lắp đặt không kiểm tra và nạp đủ gas.
Khi máy bị thiếu gas hoặc hết gas sẽ có một số hiện tượng sau :
Máy không lạnh khi bị xì hết gas và kém lạnh khi máy thiếu gas.
Có hiện tượng bám tuyết ngay van ống nhỏ của dàn nóng.
Dòng điện hoạt động thấp hơn dòng định mức ghi trên máy.
Áp suất gas hút về máy nén thấp hơn áp suất làm việc bình thường (bình thường từ 65-75psi). Áp suất phía cao áp cũng thấp hơn bình thường.
Trong một số máy điều hòa không khí, khi bị thiếu gas board điều khiển sẽ tự động tắt máy sau khoảng 5-10 phút và báo lỗi trên dàn lạnh

2 - Máy nén không chạy hay block không chạy.

Máy nén (Block) được xem là trái tim của máy điều hòa, khi block không chạy thì máy điều hòa sẽ không lạnh.
Một số nguyên nhân làm máy nén – block không chạy là do:
Mất nguồn cấp đến máy nén : do lỗ do board điều khiển, contactor không đóng, hở mạch.
Nhảy thermic bảo vệ máy nén : thường do hư tụ, quạt dàn nóng yếu hoặc hư, motor máy nén không quay.
Cháy một trong các cuộn dây động cơ bên trong, trường hợp này có thể dẫn tới nhảy CB nguồn

3 - Máy lạnh quá lạnh

Nguyên nhân khiến máy điều hòa quá chạy quá lạnh là do:
Bộ điều khiển nhiệt độ (thermostat) bị hư
Chỉnh nhiệt độ xuống quá thấp so với nhu cầu sử dụng
Với lỗi này bạn có thể sửa điều hòa theo cách sau:
Kiểm tra thông mạch của bộ điều khiển nhiệt độ và dây dẫn
Sét lại nhiệt độ cho phù hợp

4 - Máy chạy liên tục nhưng không lạnh

Nguyên nhân khiến máy điều hòa hoạt động nhưng không lạnh là do:
Thiếu gas hay đường ống gas lỏng bị cản trở hoặc nghẹt.
Lọc gió bị dơ, dàn lạnh bị dơ không được vệ sinh thường xuyên cũng làm máy điều hòa kém lạnh.
Không đủ không khí đi qua dàn lạnh.
Dàn ngưng tụ bị dơ hay bị nghẹt một phần.
Có không khí hay khí không ngưng trong.
Không khí giải nhiệt không tuần hoàn.
Máy nén hoạt động không hiệu quả.
Tải quá nặng.
Cách sửa chữa điều hòa tại nhà khi máy chạy liên tục nhưng không lạnh như sau:
Thử xì, đo Gas, xạc Gas
Thay thế chi tiết cản trở
Kiểm tra quạt
Bảo trì dàn nóng
Rút gas hút chân không và sạc gas mới
Tháo dỡ các vật cản dòng không khí giải nhiệt
Kiểm tra hiệu suất máy nén
Kiểm tra tải

5 - Điều hòa chạy gây ra tiếng ồn lớn hay kêu to

Khi máy nén chạy ồn sẽ phát ra tiếng ồn phát ra từ phía giàn nóng, tức là từ phía cục nóng thường đặt ngoài trời.
Tình trạng này do có thể xuất phát từ một trong số nguyên nhân: Dư gas, chi tiết nào đó bên trong máy nén bị hư, khi thợ lắp điều hòa chưa tháo các tấm vận chuyển. Các bulong hay đinh vít bị lỏng cũng sẽ tạo ra các âm thanh rung động khi điều hòa hoạt động. Hay sự tiếp xúc giữa các ống với nhau hoặc với vỏ máy cũng làm điều hòa chạy ồn.
Để khắc phục bạn cần làm như sau:
Rút bớt lượng gas đã sạc bằng cách xả ga ra môi trường bằng khóa lục giác. Vị trí xả ra ngay tại đầu côn phía cuối của giàn nóng – cục nóng.
Thay máy nén bằng cách đi mua máy nén đúng mã số, thương hiệu, đúng công suất và thay thế hoặc nhờ tới chuyên viên thay thế.
Vặn chặt các bulông hay đinh vít, kiểm tra xem máy nén có đúng với tình trạng như ban đầu hay không nhé.
Tháo các tấm vận chuyển nhằm để cho hệ máy đỡ va chạm và gây kêu.
Nắn thẳng hay cố định ống sao cho không tiếp xúc với ống hoặc các chi tiết kim loại khác.
Kiểm tra xem mặt đế đặt máy nén có bị xiên, lũng hay bị cong làm cho máy nén bị xiên và đụng với thành của võ giàn nóng – cục nóng và gây nên kêu. Kiểm tra xem các buloong phía dưới đáy máy nén xem có lỏng hay không, nếu lỏng thì xiết vừa phải. Không được xiết chặt các buloong đó nhé.
Lưu ý: Đa số các quạt của điều hòa trung tâm đều có mô-tơ gắn trực tiếp vào nó. Nhưng một số loại điều hòa cũ hơn lại sử dụng dây cu-roa để kéo quạt, và hệ thống dây này có thể gây ra những tiếng ồn do không được lắp đặt chính xác.
Nếu điều hòa của bạn là loại động cơ gắn trực tiếp, khi nó gây ồn bạn cần phải ngắt điện điều hòa và liên hệ với đơn vị sửa chữa. Các cánh quạt hoặc động cơ có thể đã bị hỏng.
Có nhiều ống dẫn nhiệt/dẫn lạnh của điều hòa làm bằng kim loại, vì vậy nó có thể gây ồn. Nếu tiếng ồn quá lớn bạn có thể cần một giải pháp cách ly giữa hệ thống làm mát/làm nóng với hệ thống ống dẫn

6 - Áp suất hút thấp

Nguyên nhân của tình trạng này là do:
Máy điều hòa nhà bạn bị thiếu gas hay do đường ống gas lỏng bị cản trở hoặc nghẹt. Máy điều hòa không được vệ sinh thường xuyên làm lọc gió bị bẩn, giàn lạnh bẩn sẽ không đủ không khí qua giàn lạnh cũng dẫn đến áp suất hút thấp. Một số nguyên nhân khác nữa như: van tiết lưu bị nghẹt, bầu cảm biến của van tiết lưu bị xì.
Cách chữa điều hòa khi áp suất hút thấp là:
Thử xì gas
Thay thế chi tiết cản trở
Kiểm tra quạt
Thay valve hoặc ống mao

7 - Áp suất hút cao

Nguyên nhân của căn bệnh này là do:
Điều hòa bị dư gas
Máy nén hoạt động không hiệu quả
Vị trí lắp cảm biến không đúng
Tải quá nặng
Cách sửa chữa điều hòa khi áp suất hút của máy lạnh cao:
Rút bớt lượng gas đã sạc
Kiểm tra hiệu suất máy nén
Đổi vị trí lắp cảm biến
Kiểm tra tải

8 - Áp suất nén cao

Nguyên nhân có thể do:
Máy điều hòa bị dư gas
Dàn ngưng tụ bị dơ hay bị nghẹt một phần
Có không khí hay khí không ngưng trong máy lạnh
Không khí giải nhiệt không tuần hoàn
Nhiệt độ của không khí hoặc nước giải nhiệt cao
Thiếu không khí hoặc nước giải nhiệt
Trong trường hợp này 220von khuyên bạn chữa điều hòa theo cách sau:
Rút bớt lượng gas đã sạc
Bảo trì dàn nóng
Rút gas hút chân không và sạc gas mới
Tháo dỡ các vật cản dòng không khí giải nhiệt

9 - Áp suất nén thấp

Nguyên nhân là máy điều hòa bị thiếu gas hoặc có thể do máy nén hoạt động không hiệu quả
Phương pháp sửa điều hòa khi áp suất nén thấp là thử xì gas và kiểm tra hiệu suất máy nén

10 - Block chạy và dừng liên tục do quá tải

Nguyên nhân block chạy và dừng liên tục:
Cuộn dây contactor máy nén bị hư
Điện thế thấp
Thiếu gas hoặc dư gas
Dàn ngưng tụ bị dơ hay bị nghẹt một phần
Phương pháp sữa chữa như sau:
Kiểm tra thông mạch của coil và các tiếp điểm
Kiểm tra điện thế
Thử xì
Rút bớt lượng gas đã sạc
Bảo trì dàn nóng
Thay valve hoặc ống mao

11 - Quạt dàn nóng không chạy

Nguyên nhân:
Ngắn mạch hay đứt dây
Bộ điều khiển nhiệt độ (thermostat) bị hư
Tụ điện bị hư hay ngắn mạch
Cuộn dây contactor quạt bị hư
Động cơ quạt bị ngắn mạch hay chạm vỏ
Cách sửa chữa :
Kiểm tra mạch điện bằng đồng hồ
Kiểm tra thông mạch của bộ điều khiển nhiệt độ và dây dẫn
Kiểm tra tụ điện bằng đồng hồ
Kiểm tra thông mạch của coil và các tiếp điểm
Kiểm tra độ cách điện bằng đồng hồ

12 - Quạt dàn lạnh không chạy

Nguyên nhân :
Ngắn mạch hay đứt dây
Tụ điện bị hư hay ngắn mạch
Cuộn dây contactor quạt bị hư
Động cơ quạt bị ngắn mạch hay chạm vỏ
Cách sửa điều hòa :
Kiểm tra mạch điện bằng đồng hồ
Kiểm tra tụ điện bằng đồng hồ
Kiểm tra thông mạch của coil và các tiếp điểm
Kiểm tra độ cách điện bằng đồng hồ

13 - Máy nén và quạt dàn ngưng không chạy

Nguyên nhân:
Ngắn mạch hay đứt dây
Bộ điều khiển nhiệt độ (thermostat) bị hư
Cuộn dây contactor máy nén bị hư
Cách khắc phục:
Kiểm tra mạch điện bằng đồng hồ
Kiểm tra thông mạch của bộ điều khiển nhiệt độ và dây dẫn
Kiểm tra thông mạch của coil và các tiếp điểm

14 - Block không chạy nhưng quạt chạy

Nguyên nhân:
Ngắn mạch hay đứt dây
Bộ điều khiển nhiệt độ (thermostat) bị hư
Tụ điện bị hư hay ngắn mạc
Cuộn dây contactor máy nén bị hư
Block bị ngắn mạch hay chạm vỏ
Máy nén bị kẹt
Cách khắc phục :
Kiểm tra mạch điện bằng đồng hồ
Kiểm tra thông mạch của bộ điều khiển nhiệt độ và dây dẫn
Kiểm tra tụ điện bằng đồng hồ
Kiểm tra thông mạch của coil và các tiếp điểm
Kiểm tra độ cách điện bằng đồng hồ

15 - Máy điều hòa không chạy

Nguyên nhân của máy điều hòa không chạy:
Không có điện nguồn
Đứt cầu chì hoặc vasitor
Lỏng mối nối điện
Ngắn mạch hay đứt dây
Thiết bị an toàn mở
Biến thế bị hư
Cách khắc phục :
Kiểm tra điện thế
Kiểm tra cỡ và loại cầu chì
Kiểm tra mối nối điện và xiết chặt lại nếu mối nối lỏng
Kiểm tra mạch điện bằng đồng hồ
Kiểm tra thông mạch của thiết bị bảo vệ
Kiểm tra mạch điều khiển bằng đồng hồ

16 - Điều hòa bị chảy nước

Điều hòa nhiệt độ là thiết bị tạo ra sự ngưng tụ nước liên tục. Lượng nước này thường được dẫn ra ngoài bằng ông nhựa hoặc cao su, hoặc cũng có thể dùng một bơm điện nhỏ để dẫn nước ra ngoài.
Nguyên nhân :
Do đường ống thoát nước trong quá trình lắp đặt không có độ dốc, nước không thể thoát và tồn lại trong máng, lâu dần sẽ tràn máng và chảy xuống tường, nguy hiểm hơn nếu là trần thạch cao sẽ làm hỏng trần.
Một nguyên nhân khác nữa là do việc sử dụng lâu ngày không vệ sinh khiến lỗ thoát tại mặt lạnh bị tắc cũng khiến tràn máng và chảy nước.
Khắc phục và sửa chữa điều hòa bị chảy nước như sau :
Với nguyên nhân thứ nhất bạn chỉ việc chỉnh lại ống thoát nước sao cho có một độ dốc tối thiểu giúp nước thoát tốt hơn. Đối với các máy lắp đặt mà vị trí làm đường ống dài, chúng tôi khuyến nghị nên cho đường ống thoát tại vị trí nhất định chứ không nên đi dọc đường ống.
Đối với nguyên nhân thứ 2, bạn chỉ cần tháo mặt lạnh và dùng que nhỏ, dài thông lỗ thoát của máng đồng thời tiến hành vệ sinh mặt lạnh.

17 - Gió thổi ra khỏi dàn lạnh có mùi hôi

Có mùi hôi của gas : Dàn lạnh bị xì gas. Trường hợp này nên tắt máy và mở cửa phòng và quạt hút cho thông thoáng. Gas lạnh ở nồng độ cao sẽ gây choáng hoặc bất tỉnh nếu hít phải.
Có mùi hôi nhà vệ sinh: Do ống nước xả dàn lạnh nối trực tiếp với hệ thống ống nước xả nhà vệ sinh hoặc hố gas mà không có bẫy hơi, mùi hôi trong ống xả hoặc hố gas đi ngược vào dàn lạnh gây hôi.
Có mùi hôi nấm mốc: Do lâu ngày không sử dụng nên có nấm mốc trong dàn lạnh. Máy chạy khoảng một chút sẽ hết mùi hôi. Nên vệ sinh máy vì nấm mốc không tốt cho sức khỏe.
Ngoài ra còn một số nguyên nhân khác liên quan đến kỹ thuật như: hỏng mạch, hỏng block .v.v

18 - Máy không lạnh hoặc lúc lạnh lúc không

Trường hợp máy lúc lạnh lúc không là do chỉnh remote ở chế độ Dry hoặc sự cố ở dàn nóng hoặc bị thiếu gas.
Board điều khiển trên dàn lạnh lỗi
Block bị sự cố: Quạt dàn nóng quay nhưng máy nén không chạy(không nghe tiếng máy nén chạy)
Quạt dàn nóng bị sự cố: Theo dõi khoảnh 10-20 phút không thấy quạt dàn nóng quay hoặc quay chậm hơn bình thường. Khi quạt dàn nóng không quay hoặc quay chậm, block sẽ chạy và ngưng bất thường (lắng nghe tiếng block chạy)
Xì hết gas: Kiểm tra rất dễ bằng cách quan sát 2 ống đồng nối vào dàn nóng, cả 2 ống nhỏ và lớn đều không ướt, sờ vào không lạnh (khi máy lạnh hoạt động tốt, cả 2 ống đều có nhiệt độ gần bằng nhau khoảng 57oC, nhìn bằng mắt 2 ống đều bị ướt). Gió thổi ra dàn nóng không nóng.
Chỉnh chế độ hoạt động trên remote không đúng: Kiểm tra trên remote đã chỉnh đúng chế độ (mode) Cool hoặc Auto không, nếu không thì chỉnh lại. Các chế độ Dry, Fan, Heat đều không làm lạnh. Một số trường hợp bật chế độ Timer cũng có thể không lạnh.

19 - Điều hòa bật nhưng không hoạt động

Nguyên nhân :
Điều hòa không chạy có thể do các nguyên nhân ở nguồn điện. Trong trường hợp này bạn cần kiểm tra lại các ổ cắm điện, aptomat đã bật chưa? cầu chỉ bị hỏng, ngắn mạch, chuột cắn dây nguồn…
Điều khiển từ xa của điều hòa bị hỏng ( kiểm tra lại pin và thay pin mới )
Điều khiển không nhận tín hiệu. Đối với trường hợp này bạn cần kiểm tra lại xem điều khiển có hoạt động không bằng cách sử dụng một chiếc điện thoại có máy ảnh, chỉ mắt nhận vào đầu chụp ảnh rồi bấm nút, nếu thấy có chớp sáng ở màn hình hiển thị của máy ảnh là điều khiển không bị hỏng, lúc này bạn cần thay mắt nhận khiển ở mặt lạnh, để đảm bảo hơn bạn nên gọi thợ sửa. Nếu không có chớp sáng tức là điều khiển bị hỏng, thay điều khiển cùng loại hoặc mua điều khiển đa năng hiện đang bán rất nhiều trên thị trường. Để tạm thời chữa cháy trong trường hợp này bạn có thể bật máy chạy trong chế độ auto bằng nút khởi động có sẵn trên mặt lạnh.

Thứ Tư, 17 tháng 1, 2018

Mạch sạc ắc quy 12V đơn giản

Chào các bạn !
220von chia sẽ mạch nạp ắc quy tự động dùng cho các bình điện 12V từ 5Ah đến 150Ah , khi bình bị yếu mạch sẽ tự động sạc cho bình và khi bình dầy mạch tự động ngắt sạc để không làm hỏng bình

Sơ đồ mạch :
220von

Mạch sử dụng điện áp 12V AC hoặc 12V DC , diode D4 là loại diode có dòng 30A thông dụng trong các máy hàn điện tử

Trong mạch 220von sử dụng opamp LM311 để so sánh áp , đầu vào + của opamp LM311 lấy áp từ zener 6V là áp chuẩn lấy mẫu , đầu vào - lấy áp từ mạch phân áp R5 VR1 R4 , khi chân vào - có áp lớn hơn chân vào + thì relay sẽ cắt sạc , ngược lại relay sẽ đóng điện để sạc cho bình , biến trở VR1 dùng để chỉnh mức ngưỡng điện áp khi bình đầy
Sử dụng diode MUR3060PT có dòng là 30A và sử dụng relay loại lớn 30A để cho dòng sạc cao đáp ứng cho các bình dung tích lớn

Video test mạch :




220von


Các bạn dùng phần mềm proteus 8.6 trở lên để mở file mạch
Mật khẩu giải nén : www.220von.com

Đăng kí kênh youtube của 220von để tìm xem nhiều mạch hay khác

Mọi chi tiết xin gửi email về : 220von.com@gmail.com
ĐT : 0932654586
, , , ,

Điều khiển góc quay động cơ bước bằng biến trở

Chào các bạn !
Hôm nay 220von tiếp tục chia sẻ với các bạn mạch điều khiển góc quay động cơ bước bằng biến trở , động cơ bước sẽ mô phỏng vị trí và chiều quay của biến trở khi chúng ta xoay núm vặn , mạch được sử dụng cho những ứng dụng có yêu cầu điều khiển trục góc quay dưới 360° ở những vị trí khó điều khiển bằng tay

Video hoạt động của mạch như sau :


Ở mạch trong video trên 220von sử dụng động cơ bước 28BYJ-48 loại 5V có hộp số với tỉ số truyền là 1/64 nên cho momen xoắn cao , bước của động cơ là 5.625°
Điện áp hoạt động của mạch từ 7V DC đến 24V DC
Kích thước mạch là  3.6cm x 2.4cm
Khi mạch hoạt động sẽ có một đèn led nháy cứ mỗi 1s để báo trạng thái mạch chạy tốt

Mạch có chức năng lưu lại ví trí của trục động cơ bước vào bộ nhớ để tránh trường hợp vị trí trục động cơ bước bị sai lệch khi mất điện đột ngột

220v

220von


220volt


Sơ đồ và chú thích linh kiện :
220v

Layout mạch vẽ trên proteus :


Vì động cơ bước là loại nhỏ hoạt động ở điện áp 5V với dòng tải test max khi hoạt động là 350mA nên 220von chọn ic ổn áp 78M05 (1.5A) để cấp nguồn cho vi điều khiển và cho cả động cơ bước

Một phần đoạn code điều khiển động cơ bước được 220von viết trên STVP :

void dongcobuoc(u8 val)
{
if(val&0x01)GPIO_WriteHigh(D1_PORT, (GPIO_Pin_TypeDef)D1_PIN);
else GPIO_WriteLow(D1_PORT, (GPIO_Pin_TypeDef)D1_PIN);
if(val&0x02)GPIO_WriteHigh(D2_PORT, (GPIO_Pin_TypeDef)D2_PIN);
else GPIO_WriteLow(D2_PORT, (GPIO_Pin_TypeDef)D2_PIN);
if(val&0x04)GPIO_WriteHigh(D3_PORT, (GPIO_Pin_TypeDef)D3_PIN);
else GPIO_WriteLow(D3_PORT, (GPIO_Pin_TypeDef)D3_PIN);
if(val&0x08)GPIO_WriteHigh(D4_PORT, (GPIO_Pin_TypeDef)D4_PIN);
else GPIO_WriteLow(D4_PORT, (GPIO_Pin_TypeDef)D4_PIN);
}
void chaythuan(void)
{
  if(value==0)value=0x01;
  value=value<<1;
  if(value==0x02)dongcobuoc(0x0C);
  if(value==0x04)dongcobuoc(0x06);
  if(value==0x08)dongcobuoc(0x03);
  if(value==0x10){dongcobuoc(0x09);value=0x01;}
}
void chaynguoc(void)
{
  if(value==0)value=0x01;
  value=value<<1;
  if(value==0x02)dongcobuoc(0x09);
  if(value==0x04)dongcobuoc(0x03);
  if(value==0x08)dongcobuoc(0x06);
  if(value==0x10){dongcobuoc(0x0C);value=0x01;}
}
void stop(void)
{
dongcobuoc(0x00);
}

Link tải file :https://drive.google.com/file/d/1wDS5w2_ie_cyW_cG5HEO0pIysKLcY6g7/view?usp=sharing

Các bạn dùng phần mềm proteus 8.6 trở lên để mở file mach , file nap.s19 để nạp chương trình cho chip stm8s003 , các bạn dùng mạch nạp stlink v2 để nạp chip
Mật khẩu giải nén file : www.220von.com

220von đã chế tạo thành công mạch điều khiển góc quay động cơ bước từ xa bằng biến trở với khoản  cách 100m các bạn có thể vào kênh youtube của mình để xem

Các bạn nhấn nút đăng kí theo dõi kênh video youtube của 220von để xem nhiều mạch hay khác 

Mọi chi tiết xin gửi mail : 220von.com@gmail.com
ĐT : 0932654586

Thứ Hai, 27 tháng 11, 2017

, , , ,

Tự chế cảm biến phát hiện vật cản hồng ngoại


Chào các bạn hôm nay 220von tiếp tục chia sẽ với các bạn nguyên lý mạch cảm biến phát hiện vật cản dùng tia hồng ngoại dùng trong các thiết bị điện dân dụng như vòi nước rửa tay tự động , chống trộm hay trong công nghiệp như cảm biến đếm sản phẩm và trong cuộc thi robocon như cảm biến dò đường .v.v

Nguyên lý của mạch này như sau : mắt phát hồng ngoại sẽ phát ra sóng ánh sáng có bước sóng hồng ngoại , ở mắt thu bình thường thì có nội trở rất lớn (khoảng vài trăm kilo ôm ) , khi mắt thu bị tia hồng ngoại chiếu vào thì nội trở của nó giảm xuống ( khoảng vài chục ôm). Lợi dụng nguyên lý này người ta đã chế tạo ra các cảm biến hồng ngoại ( IR )

Link mạch https://drive.google.com/file/d/1PmYhaT15Fe97V3lKLwyQijYrcQI0m972/view?usp=sharing
Mật khẩu giải nén file : www.220von.com

Hình sau biểu diễn nguyên lí làm việc của cảm biến  :
Nguyên lí làm việc


Bây giờ 220von sẽ đi vào phần mạch cảm biến :
 
Sơ đồ mạch
Ở sơ đồ này 220von sử dụng nguồn cấp 5V DC, ở đầu ra dùng relay nên cho dòng tải ra rất lớn khoản 10A nên rất thuận tiện cho việc đấu thẳng động cơ vào mà không cần qua mạch khuếch đại trung gian
Trong sơ đồ có một biến trở phục vụ cho việc chỉnh độ nhạy của cảm biến và khoản cách của cảm biến
Các loại linh kiện và giá trị từng linh kiện điều được chú thích trong sơ đồ
Cảm biến này 220von không sử dụng sóng mang 38khz nên khoản cách phát hiện vật cản chỉ tầm 5cm trở lại thôi , ở bài chia sẻ sau 220von sẽ hướng dẫn tăng khoản cách cảm biến lên vài mét

Ảnh mạch thực tế :
220von.blogspot.com

 220von sử dụng linh kiện dán nên phần lớn linh kiện nằm ở mặt dưới của mạch

Video hoạt động của mạch cảm biến :





Một đặc điểm nữa là tia hồng ngoại bị hấp thụ bởi các vật có màu tối  nên cảm biến này còn được dùng trong các mạch dò đường ( dò line ) trong các robot tự dò đường


Hy vọng qua bài viết này các bạn mới tìm hiểu về điện tử sẽ nắm rõ được nguyên lý của loại cảm biến này , và có thể áp dụng vào ứng dụng của các bạn

Mọi thắc mắc xin gửi về :
Email :  220von.com@gmail.com
Trang fanpage : fb.com/220von

Thứ Bảy, 28 tháng 10, 2017

Mạch hẹn giờ tắt mở thiết bị điện

 Thật bất tiện khi bạn chạy lui chạy tới chổ có công tắt để tắt một thiết bị điện trong nhà nào đó trong một khoản thời gian ngắn hoạt động , vậy bạn có mún thiết bị điện của bạn sẽ tự động tắt sau một khoản thời gian hoạt động cần thiết không ví dự như sau 5- 10 phút hoặc sau 1 tiếng 2 tiếng thì thiết bị tự động tắt , khi ấy bạn sẽ không cần phải chạy tới chổ có công tắt để tắt thiết bị đó nữa , 220von sẽ giới thiệu cho bạn một mạch giúp bạn với chức năng như vậy , và giá thành ché tạo mạch này rất rẻ với cách sử dụng rất đơn giản như video mà 220von sẽ giới thiệu sau đây

Mạch hẹn giờ tắt mở thiết bị điện dùng vi điều khiển STM8S103 , sử dụng biến trở để chỉnh thời gian hẹn từ 0 đến 60 phút , hiển thị lên màn hình LED
Mạch sử dụng điện áp 220V , và đóng cắt được tải 220V - 10A bằng relay



Video test mạch với máy bơm nước : 


Sơ đồ mạch : 
Sơ đồ


Mach IN


Code :
Code được viết bằng STVD với trình biên dịch Cosmic 16

 Hàm main.h :

/**
  ******************************************************************************
  * @file        main.h
  * @author      220von
  * @version      V1.0.0
  * @date   
  * @brief   This file is header for module main.c
  ******************************************************************************
  * @attention
  */

/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef __MAIN_H__
#define __MAIN_H__

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/


#define NUT_PORT        (GPIOD)
#define NUT_PIN            (GPIO_PIN_4)

#define ADC_PORT        (GPIOD)
#define ADC_PIN            (GPIO_PIN_5)

#define A_PORT  (GPIOC)
#define A_PIN  (GPIO_PIN_4)
#define B_PORT  (GPIOC)
#define B_PIN  (GPIO_PIN_3)
#define C_PORT  (GPIOD)
#define C_PIN  (GPIO_PIN_1)
#define D_PORT  (GPIOC)
#define D_PIN  (GPIO_PIN_7)
#define E_PORT  (GPIOD)
#define E_PIN  (GPIO_PIN_3)
#define F_PORT  (GPIOC)
#define F_PIN  (GPIO_PIN_5)
#define G_PORT  (GPIOC)
#define G_PIN  (GPIO_PIN_6)

#define DOT_PORT  (GPIOD)
#define DOT_PIN  (GPIO_PIN_2)

#define LED1_PORT  (GPIOB)
#define LED1_PIN  (GPIO_PIN_4)
#define LED2_PORT  (GPIOB)
#define LED2_PIN  (GPIO_PIN_5)


#define R_PORT  (GPIOA)
#define R_PIN  (GPIO_PIN_3)


/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Public functions ----------------------------------------------------------*/

#endif /* __MAIN_H__ */

/******************* (C) COPYRIGHT 220von *****END OF FILE****/



Hàm main.c:
/**
  ******************************************************************************
  * @file        main.c
  * @author     220von
  * @version      V1.0.0
  * @date   
  * @brief   This file contains the main function for GPIO Toggle example.
  ******************************************************************************
  * @attention
  */

/* Includes ------------------------------------------------------------------*/
/*#include "stm8s_conf.h"*/
#include "main.h"
#include "stm8s_gpio.h"
#include "stm8s_adc1.h"
#include "stm8s_clk.h"
#include "stm8s_tim4.h"
#include "stm8s_tim1.h"
#include "stm8s.h"
#include "stm8s_it.h"
#include "stm8s_flash.h"

BitStatus dot_set=0,menu=0;
u8 min=0,sec=0;
u16 i=0;
u16 adc_val=1000;
 const u8 so[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


void delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}
///////////////////////////////////////////////////////////////////////////
void send_led7seg(u8 giatri, BitStatus dot)
{
    if(giatri&0x01)GPIO_WriteLow(A_PORT, (GPIO_Pin_TypeDef)A_PIN);
    else GPIO_WriteHigh(A_PORT, (GPIO_Pin_TypeDef)A_PIN);
   
    if(giatri&0x02)GPIO_WriteLow(B_PORT, (GPIO_Pin_TypeDef)B_PIN);
    else GPIO_WriteHigh(B_PORT, (GPIO_Pin_TypeDef)B_PIN);   
   
    if(giatri&0x04)GPIO_WriteLow(C_PORT, (GPIO_Pin_TypeDef)C_PIN);
    else GPIO_WriteHigh(C_PORT, (GPIO_Pin_TypeDef)C_PIN);   

    if(giatri&0x08)GPIO_WriteLow(D_PORT, (GPIO_Pin_TypeDef)D_PIN);
    else GPIO_WriteHigh(D_PORT, (GPIO_Pin_TypeDef)D_PIN);
   
    if(giatri&0x10)GPIO_WriteLow(E_PORT, (GPIO_Pin_TypeDef)E_PIN);
    else GPIO_WriteHigh(E_PORT, (GPIO_Pin_TypeDef)E_PIN);

    if(giatri&0x20)GPIO_WriteLow(F_PORT, (GPIO_Pin_TypeDef)F_PIN);
    else GPIO_WriteHigh(F_PORT, (GPIO_Pin_TypeDef)F_PIN);
   
    if(giatri&0x40)GPIO_WriteLow(G_PORT, (GPIO_Pin_TypeDef)G_PIN);
    else GPIO_WriteHigh(G_PORT, (GPIO_Pin_TypeDef)G_PIN);
   
    if(dot==1)GPIO_WriteLow(DOT_PORT, (GPIO_Pin_TypeDef)DOT_PIN);
    else GPIO_WriteHigh(DOT_PORT, (GPIO_Pin_TypeDef)DOT_PIN);
}
///////////////////////////////////////////////////////////////////////////
u8 quetled=0;
void putc_to_3_led7seg(u8 value1,u8 value2,BitStatus dot)
{
    switch(quetled)
     {
         case 1:
           {
                GPIO_WriteHigh(LED2_PORT, (GPIO_Pin_TypeDef)LED2_PIN);
                send_led7seg(value1,0);
                GPIO_WriteLow(LED1_PORT, (GPIO_Pin_TypeDef)LED1_PIN);
                break;
             }
         case 2:
           {
                GPIO_WriteHigh(LED1_PORT, (GPIO_Pin_TypeDef)LED1_PIN);
                send_led7seg(value2,dot);
                GPIO_WriteLow(LED2_PORT, (GPIO_Pin_TypeDef)LED2_PIN);
                break;
             }             
           
     }
}
///////////////////////////////////////////////////////////////////////////
void hienthi_led7seg(u8 value1,BitStatus dot)
{
    u8 chuc;
    u8 le;
    chuc = value1/10;
    le = value1%10;
    if(value1<10)putc_to_3_led7seg(0x00,so[value1],dot);
  else  putc_to_3_led7seg(so[chuc],so[le],dot);
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void main(void)
{
    CLK_DeInit();
        CLK_HSICmd( ENABLE);
    /* Configure the Fcpu to DIV1*/
    CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
    /* Configure the HSI prescaler to the optimal value */
    CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
    /* Output Fcpu on CLK_CCO pin */
    /*CLK_CCOConfig(CLK_OUTPUT_CPU);*/
    /* Configure the system clock to use HSI clock source and to run at 16Mhz */
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
       
         /* Define flash programming Time*/
    FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
        /* Unlock Data memory */
    FLASH_Unlock(FLASH_MEMTYPE_DATA);
       
       
    TIM1_DeInit();
    TIM1_TimeBaseInit(16, TIM1_COUNTERMODE_UP, 65535,0);
    TIM1_Cmd(ENABLE);

   
       
     ADC1_DeInit();
         ADC1_Cmd(ENABLE);
     ADC1_ConversionConfig(ADC1_CONVERSIONMODE_CONTINUOUS,ADC1_CHANNEL_5 ,ADC1_ALIGN_RIGHT);
     ADC1_PrescalerConfig(ADC1_PRESSEL_FCPU_D2);
     ADC1_StartConversion();
 
  /* Time base configuration */
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124); // ngắt timer4 mỗi 1ms
  /* Clear TIM4 update flag */
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  /* Enable update interrupt */
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);
   
   
  /* Initialize I/Os in Output Mode */
    GPIO_Init(ADC_PORT, (GPIO_Pin_TypeDef)ADC_PIN, GPIO_MODE_IN_FL_NO_IT );
   
    GPIO_Init(LED1_PORT, (GPIO_Pin_TypeDef)LED1_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(LED2_PORT, (GPIO_Pin_TypeDef)LED2_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
   
    GPIO_WriteHigh (LED1_PORT, (GPIO_Pin_TypeDef)LED1_PIN);
    GPIO_WriteHigh  (LED2_PORT, (GPIO_Pin_TypeDef)LED2_PIN);

    GPIO_Init(A_PORT, (GPIO_Pin_TypeDef)A_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(B_PORT, (GPIO_Pin_TypeDef)B_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(C_PORT, (GPIO_Pin_TypeDef)C_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(D_PORT, (GPIO_Pin_TypeDef)D_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(E_PORT, (GPIO_Pin_TypeDef)E_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(F_PORT, (GPIO_Pin_TypeDef)F_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(G_PORT, (GPIO_Pin_TypeDef)G_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(DOT_PORT, (GPIO_Pin_TypeDef)DOT_PIN,      GPIO_MODE_OUT_PP_HIGH_FAST);
   
    GPIO_Init(R_PORT, (GPIO_Pin_TypeDef)R_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_WriteLow(R_PORT, (GPIO_Pin_TypeDef)R_PIN);   
    GPIO_Init(NUT_PORT, (GPIO_Pin_TypeDef)NUT_PIN, GPIO_MODE_IN_FL_NO_IT );
   
     enableInterrupts();
  while (1)
  {

    ////////////////////////////////////////////////////////////////////////
    switch(menu)
    {
        case 0:
        {
            for(i=0;i<50;i++)
            {
                adc_val += ADC1_GetConversionValue ();
                delay(10);
            }
            adc_val=adc_val/50;
            min=adc_val/33;
            if(min>=30)min=30; // chỉnh max thời gian hẹn là 30 phút      
            sec=0;
            GPIO_WriteLow(R_PORT, (GPIO_Pin_TypeDef)R_PIN);   
            hienthi_led7seg(min,0);
            break;
        }
        case 1:
        {
            if(min==0)GPIO_WriteLow(R_PORT, (GPIO_Pin_TypeDef)R_PIN);   
            else GPIO_WriteHigh(R_PORT, (GPIO_Pin_TypeDef)R_PIN);   
            hienthi_led7seg(min,dot_set);
            break;
        }
    }

////////////////////////////////////////////////////////////////////////////
  }

}

/**
  * @brief Delay
  * @param nCount
  * @retval None
  */


#ifdef USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param file: pointer to the source file name
  * @param line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/**
  * @}
  */

/******************* (C) COPYRIGHT 220von *****END OF FILE****/



Và cuối cùng là hàm ngắt phục vụ cho phần đếm thời gian :

/**
  ******************************************************************************
  * @file     stm8s_it.c
  * @author   MCD Application Team
  * @version  V2.0.1
  * @date     18-November-2011
  * @brief    Main Interrupt Service Routines.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/

#include "stm8s_it.h"
#include "stm8s_tim1.h"
#include "main.h"
#include "stm8s_tim4.h"
#include "stm8s_gpio.h"


/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/* Public functions ----------------------------------------------------------*/

/** @addtogroup GPIO_Toggle
  * @{
  */
#ifdef _COSMIC_
/**
  * @brief  Dummy interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(NonHandledInterrupt, 25)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#endif /*_COSMIC_*/

/**
  * @brief  TRAP interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER_TRAP(TRAP_IRQHandler)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
/**
  * @brief  Top Level Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(TLI_IRQHandler, 0)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  Auto Wake Up Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(AWU_IRQHandler, 1)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  Clock Controller Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(CLK_IRQHandler, 2)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  External Interrupt PORTA Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  External Interrupt PORTB Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  External Interrupt PORTC Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  External Interrupt PORTD Interrupt routine
  * @param  None
  * @retval None
  */
   
   
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
   

  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  External Interrupt PORTE Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#ifdef STM8S903
/**
  * @brief  External Interrupt PORTF Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(EXTI_PORTF_IRQHandler, 8)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#endif /*STM8S903*/

#if defined (STM8S208) || defined (STM8AF52Ax)
/**
  * @brief CAN RX Interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(CAN_RX_IRQHandler, 8)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  CAN TX Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(CAN_TX_IRQHandler, 9)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#endif /*STM8S208 || STM8AF52Ax */

/**
  * @brief  SPI Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(SPI_IRQHandler, 10)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  Timer1 Update/Overflow/Trigger/Break Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  Timer1 Capture/Compare Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

#ifdef STM8S903
/**
  * @brief  Timer5 Update/Overflow/Break/Trigger Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(TIM5_UPD_OVF_BRK_TRG_IRQHandler, 13)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
/**
  * @brief  Timer5 Capture/Compare Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(TIM5_CAP_COM_IRQHandler, 14)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

#else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
/**
  * @brief  Timer2 Update/Overflow/Break Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  Timer2 Capture/Compare Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#endif /*STM8S903*/

#if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
    defined(STM8S005) ||  defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8AF626x)
/**
  * @brief Timer3 Update/Overflow/Break Interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(TIM3_UPD_OVF_BRK_IRQHandler, 15)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  Timer3 Capture/Compare Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(TIM3_CAP_COM_IRQHandler, 16)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#endif /*STM8S208, STM8S207 or STM8S105 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */

#if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \
    defined(STM8S003) ||  defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8S903)
/**
  * @brief  UART1 TX Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @brief  UART1 RX Interrupt routine
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#endif /*STM8S105*/

/**
  * @brief  I2C Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(I2C_IRQHandler, 19)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

#if defined(STM8S105) || defined(STM8S005) ||  defined (STM8AF626x)
/**
  * @brief  UART2 TX interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(UART2_TX_IRQHandler, 20)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }

/**
  * @brief  UART2 RX interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
#endif /* STM8S105*/

#if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
/**
  * @brief  UART3 TX interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(UART3_TX_IRQHandler, 20)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }

/**
  * @brief  UART3 RX interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(UART3_RX_IRQHandler, 21)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
#endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */

#if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
/**
  * @brief  ADC2 interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(ADC2_IRQHandler, 22)
{

    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
    return;

}
#else /*STM8S105, STM8S103 or STM8S903 or STM8AF626x */
/**
  * @brief  ADC1 interrupt routine.
  * @param  None
  * @retval None
  */
 INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
{

    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
    return;

}
#endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */

#ifdef STM8S903
/**
  * @brief  Timer6 Update/Overflow/Trigger Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(TIM6_UPD_OVF_TRG_IRQHandler, 23)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
/**
  * @brief  Timer4 Update/Overflow Interrupt routine
  * @param  None
  * @retval None
  */
   
extern u8 quetled;
extern  BitStatus dot_set,menu;
BitStatus nut_set =0;
u16 msec=0;
u8 count=0;
extern u8 sec;
extern u8 min;
 INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23) // ngắt timer
{
   
      /* Cleat Interrupt Pending bit */
    msec++;
  if(msec>=1000){sec++;msec=0;dot_set ^= 1;}
  if(sec>=60){min--;sec=0;}
  if(min==0){menu=0;sec=0;}
    quetled++;
    if(quetled>2)quetled=0;
   
    if((!(GPIO_ReadInputPin(NUT_PORT,(GPIO_Pin_TypeDef)NUT_PIN)))&&(nut_set==1))count++;
  if(GPIO_ReadInputPin(NUT_PORT,(GPIO_Pin_TypeDef)NUT_PIN)) {count=0;nut_set=1;}
   
  if(count>=100){menu ^=1;nut_set=0;count=0;}
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}
#endif /*STM8S903*/

/**
  * @brief  Eeprom EEC Interrupt routine
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(EEPROM_EEC_IRQHandler, 24)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
}

/**
  * @}
  */

/******************* (C) COPYRIGHT 220von *****END OF FILE****/

Toàn bộ chi phí linh kiện chế tạo mạch này rơi vào khoản 60k

Nếu các bạn muốn hợp tác với mình để mở rộng chức năng cho ứng dụng này hoặc chia sẻ ý tưởng ứng dụng vào cuộc sống thì gửi mail cho mình theo địa chỉ : 220von.com@gmail.com
Hoặc theo dõi trang fan page facebook : https://www.facebook.com/220von/