. Lệnh trở về đầu dòng thứ nhất: mã lệnh
4.3.2 Ghi kí tự lên LCD để hiển thị:
Sau khi thực hiện quá trình khởi tạo để gửi các lệnh cài đặt chế độ làm việc cùa LCD, kí tự sẽ được hiển thị lên LCD bất kì khi nào vi điều khiển muốn gửi.
Q trình gửi kí tự gồm các bước sau:
- Cho chân R/W=0 để xác định đây là ghi xuống LCD (thông thường chân này được nối đất, nên mặc định chân này ở mức 0, ta không cần quan tâm đến nữa)
- Cho chân RS=1 để xác định đây là kí tự mà vi điều khiển gửi xuống LCD (phân biệt với RS=0, gửi lệnh)
- Gửi mã ascii của kí tự cần hiển thị xuống LCD theo các đường dữ liệu
(RD0-RD7 nếu dùng chế độ 8 bit, R4-R7 nếu dùng chế độ 4 bit) - Đưa chân E (chân cho phép- Enable) lên mức cao, mức 1
- Tạo trễ vài chu kì lệnh
- Đưa chân E xuống mức thấp, mức 0
Câu hỏi 1: Lý do vì sao chúng ta lại dùng transistor trong cách nối vi điều khiển với 2 led 7 đoạn và cách tính tốn mạch như thế nào?:
Nếu chúng ta khơng dùng transistor. Sơ đồ như sau:
Trong đó các chân a,b,c,d,e,f,g,h của cả 2 led 7 đoạn sẽ nối tương ứng với nhau cùng nối vào rb0,rb1..rb7 thông qua điện trở 220 ohm
Như ta đã biết, 1 led 7 đoạn gồm 8 led đơn bên trong. Với loại led chung anod như trên ta vẽ lại sơ đồ điện của từng led 7 đoạn như sau:
Như vậy dòng đi từ chân RA0 lớn nhất khi tấc cả các led đơn a,b,...g,h của led 7 đoạn đều sáng.
Ta tính dịng chảy ra từ RA0:
Giả sử điện áp đổ trên mỗi led là 1.5 V. RA0 mức 1 tương ứng 5 V Suy ra áp đổ trên R1 là : U(R1)=5-1.5=3.5V
Suy ra dòng chảy qua R1 và led là: I (led)= U(R1)/R1=3.5/220=15.9mA Dòng chảy ra từ chân RA0:
I(RA0)= 8 I(led)=8*15.9= 127mA
Điều này khơng thể được vì mỗi chân của vi điều khiển pic16f877a cho dòng ra tối đa cho phép là vài chục mA.
Để giải quyết vấn đề này, ta phải dùng transistor để khuếch đại, khi đó tín hiệu ra từ RA0 chỉ là tín hiệu điều khiển. Dịng đổ đến led sẽ do nguồn trực tiếp
cấp
Sơ đồ như sau:
Như vậy khi RA0 ở mức 0 (0V) transistor dẫn. Dòng đổ từ nguồn 5 V đi vào led qua trở xuống chân a,b,c,...e,f,g của led 7 đoạn (các chân này nối với RB0,RB1..RB6,RB7)
Muốn led tương ứng sáng ta cho các chân a,b...g,h (tức là RB0,RB1,...RB6,RB7) xuống mức 0.
Khi RA0 ở mức 1 (5V), transistor khơng dẫn, khơng có dịng đổ vào các led nên các led khơng sáng (dù cho các chân a,b,...g,h) có ở mức 0 hay khơng Như vậy sơ đồ mạch như hình trên là thõa mãn.
Vấn đề là đi tìm giá trị của các điện trở ở ngõ ra của từng led nối với các chân a,b,c...
Và điện trở phân cực tại RA0- nối với cực B của transistor.
Để các led trong led 7 đoạn sáng đều nhau rõ ràng các điện trở ở ngõ ra của từng led phải bằng nhau. R1=R2=...=R7
Ta cũng biết là mỗi led có sáng hay khơng phụ thuộc vào dữ liệu ở các chân a,b,..g,h tức là các chân RB0,RB1,...RB6,RB7 ở mức 0 hay mức 1 (5V)
Trong các ứng dụng của ta dùng led 7 đoạn hiển thị các con số từ 0-9. như vậy số lượng led sáng là thây đổi
Trường hợp có số lượng led sáng ít nhất là khi hiển thị số 1, có 2 led đơn sáng Trường hợp số lượng led sáng nhiều nhất khi hiển thị số 8. (số 8 có dấu chấm) Ta cũng muốn rằng dù là hiển thị bất cứ số nào trong các số từ 0-9 thì địi hỏi led phải sáng đều và mức sáng là như nhau khi thể hiện các số khác nhau
Suy ra là điện áp ở cực C của transistor là không đổi đối với tải khác nhau (do mỗi led sáng thì số lượng led là khác nhau)
Trường hợp này chỉ xẩy ra khi transistor nếu như mở thì phải mở bão hịa trong tấc cả các trường hợp hiển thị các số khác nhau.
Khi đó Vc=Ve-0.1=5V-0.1V=4.9V.
Từ đó ta tính ra điện trở của R1=R2=..=R7 theo cách tính của led đơn đã đề cập trong chương 4 (phần 4.1)
Ở đây ta chọn: R1=R2=..=R7=220 ohm
Giả sử điện áp đổ trên mỗi led là 1.5V. Ta tính được dịng điện đổ qua mỗi led khi sáng:
Iled=(4.9V-1.5)/220= 15.5 mA
Như đã đề cập như trên, ta phải chọn R10- điện áp phân cực cho cực B của transistor để transistor mở bão hịa khi led 7 đoạn hiển thị bất kì số gì từ 0-9. Trường hợp số led sáng ít nhất khi led 7 đoạn hiển thị số 1, tức led b và c sáng, tấc cả các led khác tắt, ta có hình sau:
Trường hợp số led sáng nhiều nhất khi led 7 đoạn hiển thị số 8 có chấm, tức tấc cả các led đều sáng, ta có hình sau:
Khi đó: Ic = 8 Iled = 8*15.4 = 123 mA
Vì transistor bão hịa nên: Ic=Icbaohoa=123mA Điều kiện để transistor bão hòa là:
Ib>Icbaohoa/k
K là hệ số khuếch đại 1 chiều. Giả sử ở đây: K=100 Suy ra: Ib > Icbaohoa/100
=> Vb/R10 > Icbaohoa/100 Vb=Ve-Veb=5-0.7=4.3 V
Suy ra:
4.3/R10>123/100
Suy ra: R10<(100*4.3)/123= 3.5K
Rõ ràng là với giá trị này thì transistor ln mở bão hòa cho tấc cả các trường hợp hiển thị số từ 0-9 của led 7 đoạn
R10 < 3.5K
Câu hỏi 2: Thuật tốn của chương trình hiển thị 1 led 7 đoạn (xem lại chương trình đã được up lên)?
Start
Chọn bank nhớ chứa TRISB Xóa thanh ghi TRISB (Cho phép các chân PORTB đầu ra)
Chọn bank nhớ 0 chứa PORTB
Gán: W=9
Gọi chương trình con Bảng mã led 7
đoạn
Gọi chương trình con Delay 200ms
Gán: W=0
Gọi chương trình con Bảng mã led 7
đoạn
Trong chương trình này phần quan trọng là gọi chương trình con bảng mã led 7 đoạn.Ta cùng khảo sát chương trình này.
Với sơ đồ kết nối 8 chân a,b,c..g,h của led 7 đoạn với 8 chân RB0,RB1,..RB6,RB7 của vi điều khiển, đầu anod chung của led 7 đoạn nối với nguồn . Quay lại sơ đồ chân của led 7 đoạn để dễ hình dung:
Ta biết rằng: Muốn hiển thị số 1 ta phải đưa ra PORTB mã led 7 đoạn của số