Đếm thời gian Timer0, Dùng timer0 + Xử lý quét led 7 đoạn, Lập trình Pic

dem-thoi-gian-su-dung-timer0-hien-thi-led-7doan-quet-lap-trinh-pic-phan-cung
Đếm thời gian Timer0 được dùng nhiều trong các bộ đếm sử dụng để thực hiện một công việc sau một khoảng thời gian quy định, đếm thời gian có nhiều phương pháp để hoạt động như đếm thông qua delay, thông qua các hàm timer được quy định sẵn trong chương trình, hoặc đếm dựa vào một số ic tác động bên ngoài như IC tạo xung, IC thời gian thực,… được ứng dụng nhiều trong cuộc sống như đồng hồ timer, đồng hồ thể thao, đồng hồ đếm giây, hệ thống hẹn giờ bật tắt thiết bị,… giúp giảm sức lao động tăng thời gian chính xác khi hoạt động.

Mua linh kiện điện tử tại Điện tử Nhật Tùng

Liên hệ làm mạch  Phone: 0967.551.477 Zalo: 0967.551.477 Email: dientunhattung@gmail.com Địa Chỉ: 171/25 Lê Văn Thọ, P8, Gò Vấp, Tp HCM Chi tiết: Nhận làm mạch và đồ án Điện tử  
Khóa học Vi điều khiển có phí Hình thức học: Video hoặc Kèm trực tiếp ===>>>>  Kích vào hình để được biết thêm chi tiết khóa học lập trình vi điều khiển online

Tải File bài giải

Pass giải nén: Huynhnhattung.com
===>>>   Nếu bạn chưa có phần mềm giải nén:

Hướng dẫn Tải và Cài đặt phần mềm giải nén Winrar

 

Video Đếm thời gian Timer0, Dùng timer0 + Xử lý quét led 7 đoạn

 

Blog Đếm thời gian Timer0, Dùng timer0 + Xử lý quét led 7 đoạn

Đề bài đếm thời gian Timer0:

dem-thoi-gian-su-dung-timer0-hien-thi-led-7doan-quet-lap-trinh-pic-de-bai

Bài giải đếm thời gian Timer0:

Phần cứng chương trình đếm thời gian Timer0:

  • Đề yêu cầu đếm thời gian bằng timer0  vì vậy phải sử dụng và tính toán timer0 để tạo ra thời gian chính xác nhất.
  • Quét 4 led 7 đoạn Anot chung sẽ giúp tối ưu được phần cứng nhưng phầm mềm phải hiểu rõ thì mới có thể hoạt động ổn định. Các chân Anot chung phải sử dụng tranzitor pnp và tùy theo dòng cung cấp cho led mà chọn pnp cho phù hợp, thường được sử dụng chân A1015.
  • Led đơn được sử dụng nhấp nháy 1Hz, khi sử dụng lưu ý phải tính toán giá trị trở 330 hạn dòng cho led.
  • Sử dụng dao động ngoài thạch anh 20M gắn vào chân OSC1 OSC2.
  • Các linh kiện chính cần sử dụng tham khảo tại.
    Thông số kỹ thuậtMua Linh kiện
    Pic16F887Pic16F877
    Led đơnLed đơn
    Điện trởĐiện trở
    Nút nhấnNút nhấn
    Thạch anhThạch anh
    Led 7 đoạn AnotLed 7 đoạn Anot
    Tranzitor A1015Tranzitor A1015
     
dem-thoi-gian-su-dung-timer0-hien-thi-led-7doan-quet-lap-trinh-pic-phan-cung

Ủng hộ mình bằng cách Donate qua momo: 0967551477.

Phần mềm đếm thời gian Timer0:

Khai báo thư viện tiền sử lý của đếm thời gian Timer0:

  • Vi điều khiển hiện tại mình đan dùng là Pic16F877A
  • Hiện đan dùng thạch anh ngoài và thạch anh ngoài 20M bằng lệnh #Fuses    hs     và    #delay(clock=20M).
  • Khi sử dụng timer0 phải biết được địa chỉ thanh ghi của biến cờ tràn. Với timer0 thì địa chỉ là 0x0b.2 tên thanh ghi vị trí tương ứng là TMR0IF, ở đây khai báo trước để dễ nhớ nếu các bạn ngại định nghĩa thì có thể sử dụng trực tiếp hoặc đặt một tên khác để dễ nhớ hơn.
  • Định nghĩa chân: tùy theo chức năng của chân mà tên định nghĩa được bám sát vào nội dung đan thực hiện.
  • Vì đây là bài thi nên việc định nghĩa chân phụ thuộc rất lớn vào nội dung đề bài.
  • Mã 7 đoạn là đoạn mã Anot: Cấu trúc lệnh cho bạn nào cần copy : ” unsigned int8 ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8.0x80,0x90,0xff} “.
  • Tên khai báo biến thì cái này tùy thuộc vào chức năng để khai báo cho phù hợp. 
  • Khi không biết giá trị cụ thể là bao nhiêu thì chỉ cần khai báo signed int32 đây là biến 32bit có dấu vì vậy giá trị rất rộng không sợ sai yêu cầu của đề bài đưa ra.
dem-thoi-gian-su-dung-timer0-hien-thi-led-7doan-quet-lap-trinh-pic-khai-bao

Chương trình con đếm thời gian timer0:

  • Chương trình con đầu tiên là hiển thị, vì ở đây là quét led 7 đoạn nên chỉ cần mỗi thời điểm chỉ cho một led 7 đoạn sáng đồng thời kích chân tương ứng, với tần số quét từ 50Hz trở lên thì hiệu ứng lưu ảnh trên mắt sẽ được ứng dụng tốt vì vậy sẽ không thấy được led bị nhấp nháy. Ở đây không hướng dẫn chi tiết về quét led chỉ nói khái quát sơ qua.
  • Đây là một chương trình quét led đặt biệt hơn các chương trình khác, nếu sử dụng tạo trễ bằng delay như thông thường thì sẽ bị ảnh hưởng đến chương trình timer0 rất lớn, kéo theo sai số do timer0 đếm ra, vì vậy tận dụng đếm giây bằng timer0 để quét led. Mỗi lần timer0 tràn tạo được 0.2ms, cách tính phần chương trình chính, vì vậy khi tq nhỏ hơn 5 tức 1ms đầu thì quét led chân quét hàng chục của phút, tương tự khi tq nhỏ hơn 10 tức 1ms tiếp theo sẽ quét hàng đơn vị của phút, tương tự cho hai trường hợp còn lại, như vậy tần số quét led sẽ là 250Hz theo điều kiện lý tưởng, ở đây bỏ qua sai số của các chương trình khác. 
dem-thoi-gian-su-dung-timer0-hien-thi-led-7doan-quet-lap-trinh-pic-chuong-trinh-con-quet-led

Chương trình chính thực hiện toàn bộ hoạt động của vi điều khiển dùng đồng hồ timer Delay

  • Bắt đầu chương trình chính phải khỏi rạo ngõ vào ra cho vi điều khiển. Một chân của vi điều khiển thì làm nhiệm vụ I/O vì thế phải khỏi tạo. Port D, Port C, Port B kết nối vào led 7 đoạn và Led đơn nhấp nháy nên xuất dữ liệu nên khởi tạo là 0x00.
  • Sử dụng timer0 để đếm chu kỳ tạo xung 0.2ms nên khai báo t0_internal và sử dụng bộ chia timer04. từ đó suy ra cách tính: 20M/4=5M sử dụng bộ chia 4 là chia của phần cứng do nhà sản xuất quy định. 5M/4=1.25M sử dụng bộ chia 2 của timer0, từ đó suy ra f = 1.25M   => T = 0.8uS. Timer0 đếm 8bit => 2^8 = 256 xung    => t0 max = 0.8uS x 256 = 0.2048ms. Chọn thời gian tràn timer00.2ms    => bắt đầu đếm từ 6.
  • Gán giá trị ban đầu bằng 0 chuẩn bị cho chu kỳ đếm, nếu không gán giá trị sẽ Random trong dãy khai báo của các biến.

  • Gọi hàm hiển thị để hiển thị quét led 7 đoạn với tần số 250Hz. Sau đó kiểm tra nếu biến cờ tràn TMR0IF=1 tức timer0 đã đếm đến ngưỡng 255 thì xóa cờ tràn cho TMR0IF=0 chuẩn bị cho chu kỳ mới, đồng thời khởi tạo giá trị ban đầu là 6 để đếm chu kỳ tiếp theo bằng 0.2ms. Sau 0.2ms thì biến trantq tăng lên một đơn vị, khi giá trị tràn đạt ngưỡng 2500 tức được 500ms thì bật led nhấp nháy sáng, ngược lại nếu đạt ngưỡng 4999 tức đếm được 2499 tức 499ms tiếp theo tắt led, và một lần tràn tiếp theo cũng tắt led sẽ tạo đủ 1Hz nhấp nháy led đơn, cho tran=0 chuẩn bị cho chu kỳ mới, sau đó tăng giá trị giay lên một đơn vị, kiểm tra nếu giây vượt 59 tức đủ một phút thì cho giay=0 chuẩn bị cho chu mới đếm giây và tăng phut lên một đơn vị, khi phut vượt ngưỡng 59 thì khởi tạo lại thời gian ban đầu.
dem-thoi-gian-su-dung-timer0-hien-thi-led-7doan-quet-lap-trinh-pic-chuong-trinh-chinh

Chúc các bạn có một kỳ thi thành công…!!!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *