Chuẩn hoá tương tự/số
Một thay đổi chức năng quan trọng được thêm vào thiết bị PIC18FXXJ Flash là khả năng người dùng có thể chuẩn hoá bộ chuyển đổi tương tự/số. Việc chuyển hoá này sẽ giúp bù lại bất cứ phần offset nào sinh ra trong module.
Để bắt đầu chuẩn hoá, đầu tiên đặt bit chuẩn hoá ADCAL trong thanh ghi ADCON0 (xem Hình 26). Khi đặt bit ADCAL, bắt đầu chuyển đổi tương tự/số bằng
cách đặt bit GO/DONE. Việc chuyển đổi này sẽ không đọc bất cứ một chân đầu vào
tương tự nào. Quá trình này nên thực hiện mỗi lần hoạt động của thiết bị thay đổi, ví dụ, dao động ký thay đổi, điện thếthay đổi, sau mỗi lần reset …
Hình 26: Mở rộng đến các chân đến thêm vào bit chuẩn hóa A/D 5.15 TỔNG KẾT
Thiết bị PIC18FXXJ Flash cho nhà thiết kế hệ thống nhiều tuỳ chọn và tính linh hoạt
cao hơn để thoả mãn các nhu cầu về vi điều khiển của họ. Những khác biệt chính trong tài liệu này giúp phân biệt thiết bị PIC18FXXJ Flash với thiết bị PIC18 Flash, cho phép nhà thiết kế chọn đúng thiết bị cho ứng dụng của mình. Nhà thiết kế nên xem xét những điểm khác biệt khi thiết kế và phát triển sản phẩm.
CHƯƠNG VI
ĐỒNG HỒ BÁO THỨC 6.1 Tóm lược
Mục đích của ta là thiết kế một đồng hồ báo thức tốt hơn với các đặc tính ưu việt mà mọi người thực sự cảm thấy hữu ích. Ta muốn cung cấp nhiều âm báo thức cho
phép người dùng tải MP3 và cài những bài hát khác nhau ứng với những báo hiệu khác nhau. Ta cũng thiết kếđể cung cầp nhiều báo hiệu, cho phép một báo hiệu có thểđặt ở
chếđộ tắt trong nhiều ngày với thời gian ngắn biến thiên và có âm báo thức đặt trước. Cấu hình này được thực hiện toàn bộ qua một ứng dụng Java và tấ cả các lệnh và dữ
liệu đều được gửi qua giao diện USB.
6.2 Chỉ thị hoạt động
Đồng hồ báo thức Spiffy được điều khiển chủ yếu qua ứng dụng Java trên máy tính cá nhân của người dùng. Ứng dụng này là giao diện người dùng đồ hoạ trên nền Swing cho phép sử dụng thời gian và ngày hiện tại, hiệu chỉnh 12 giờ và thời gian quân sự, báo thức với độ dài chờ thay đổi và âm báo thức được tải qua USB vào đồng hồ báo thức. Để sử dụng đồng hồ báo thức, cắm nguồn và cáp USB vào và kiểm tra
xem đồng hồ bắt đầu đếm từ 12 giờ. Tại điểm này, ứng dụng có thể mở và cấu hình/tải có thể bắt đầu.
6.2.1 Ngày tháng/thời gian hiện tại
Theo mặc định, ngày tháng/thời gian hiện tại của đồng hồ báo thức được đồng bộ theo đồng hồ hệ thống của máy tính người dùng. Nếu không thích thì người dùng có thể chọn trên menu Time, tuỳ chọn Edit Date/Time để chỉnh lại phần ngày tháng/thời gian.
Hinh 27: Ngày tháng / thời gian hiện tại 6.2.2 Thời gian 12 giờ hay thời gian quân sự
Theo mặc định, đồng hồ báo thức chỉ giờ dạng 12 giờ nhưng nếu người dùng muốn hiển thị kiểu 24 giờ/thời gian quân sự thì có thể vào menu Time và chọn tuỳ
chọn 12-hr/Military Time.
6.2.3 Báo thức
Người dùng có thể thêm, chỉnh và xoá báo thức qua menu Alarms. Thêm hay chỉnh báo thức thì mở phần chỉnh báo thức ra, ởđó cho người dùng một bộ các nút thể
hiện ngày mà báo thức cần tắt đi, vùng thể hiện thời gian trong ngày mà báo thức cần tắt đi, độ dài chờ và danh sách các âm báo thức người dùng có thể chọn cho báo thức.
Hình29a: Báo thức
6.2.4 Âm báo thức
Người dùng có thể chỉnh các khe âm báo thức hiện tại bằng cách vào menu Tones và chọn Edit. Người dùng sẽ có một hộp thoại mở file để có thể tìm trong hệ
thống file và chọn một file MP3 muốn tải vào đồng hồ báo thức.
Hình 30: Âm báo thức
6.2.5 Đồng bộ, chờ và ngừng báo thức
Khi người dùng chọn xong, có thể đồng bộ theo ý muốn và tải bất cứ âm báo thức thay đổi bào vào đồng hồ báo thức bằng cách vào menu App và chọn Sync. Ngoài ra, khi báo thức được điều khiển, người dùng có thểđể chếđộ chờhau ngưng báo thức qua menu App.
Hình 31: Đồng bộ, ngứng và chờ báo thức Chi tiết về project
6.3 USB
PIC18F4550 có phần hỗ trợ tích hợp cho USB 2.0, nghĩa là có bộ nhớ tích hợp và khảnăng hoạt động không đồng bộđể truyền/lấy dữ liệu qua các đường truyền dữ liệ USB được D+ và D- được chỉ định. Microchip cung cấp firmware cho nhiều thiết lập USB gọi là lớp Thiết bị Giao diện Người dùng và Thiết bị Truyền thông. Firmware lớp Thiết bị Truyền thông được dùng với chức năng cần thiết để cấu hình và tải dữ liệu
qua máy tính vào đồng hồ báo thức. Firmware được cung cấp kèm theo PIC18F4550 bán cùng bộ sản phẩm demo Microchip, vì vậy ta bỏ đi nhiều mã để firmware hoạt
động theo đúng như thiết lập. Firmware CDC do Microchip cung cấp làm việc với driver USB trên máy host qua cổng COM chuẩn, mô phỏng đến chương trình ứng dụng. Microsoft tích hợp driver này trên Windows XP nên khó khăn duy nhất là file .INF chứa ID nhà sản xuất và ID sản phẩm của đồng hồ báo thức đã được cài đặt
để máy tính biết sử dụng driver USB/nối tiếp khi cắm thiết bị vào. Lập trình thiết bị tương đối đơn giản, dùng gói Javacomm do Sun cung cấp cho kết nối nối tiếp trong Java. Ta chọn kết nối USB do sự phổ biến của USB trong lĩnh vực tin học hiện nay và khảnăng truyền dữ liệu tốc độcao, cho phép người dùng chon và tải âm báo thức MP3 mới dễ dàng và nhanh. Theo vấn đề về thời gian và độ phức tạp, dùng driver chuyên biệt, đầy đủ cho Windows XP không dễ dàng và ta chọn thay bằng mô phỏng USB/nối tiếp. Nhược điểm là tốc độ truyền ta dùng không tương đương với USB nhưng ưu điểm là thực dùng USB và tiếp tục phát triển là khả thi trong một giờ hai đợt, một khung thời gian định kỳ.
6.4 Lập trình PIC
Vi điều khiển PIC thực hiện một số tác vụ bao gồm theo dõi ngày tháng và thời gian thực, điều khiển vào/ra từ kết nối USB và giao tiếp với phần cứng thiết bị
Compact Flash bộ mã hoá MP3. Để tất cả các hoạt động chạy một cách trơn tru thì đòi hỏi phải chia chức năng mà các tác vụ đó yêu cầu thành các phần nhỏ để có thể thực hiện tuần tự bằng một vòng lặp chính, do đó cho phép tất cả các tác vụ lấy thời gian bộ
xử lý theo định kỳ.
6.4.1 Đồng hồ
Để theo dõi ngày tháng và thời gian thực, PIC dùng đồng hồ gắn trong dò theo luồng để điều khiển một ngắt có nhiệm vụ tăng giá trị ngày tháng/thời gian một cách chính xác. Ngoài ra, khi ngắt thấy bắt đầu một phút mới, nó kiểm tra báo thức xem có
cần kích hoạt chưa. Nếu có, một cờđược đặt để lần sau qua vòng lặp, chức năng hỏi vòng để kiểm tra cờ kích hoạt báo thức sẽ cho chạy âm báo thức chính xác.
6.4.2 USB
Tác vụ USB dùng thành phần trạng thái để cho phép lưu lại đúng trạng thái của nó trong khi các tác vụ khác vẫn chạy. Ví dụ, đặt ngày tháng/thời gian hiện tại yêu cầu gửi lệnh “set” từ máy tính đến đồng hồ báo thức, để thành phần trạng thái USB vào trạng thái chờ lệnh “clk”, rồi lại thay đổi trạng thái để chờ một số nhất định các byte chứa dữ liệu thời gian/ngày tháng.
Bộ mã hoá MP3 Compact Flash
Compact Flash có bộđiều khiển gắn trên mạch nên dễ dàng gửi lệnh mới để thực
thi độc lập với PIC. Vì vậy, trong vòng lặp chính, nếu báo thức được điều khiển và vì vậy âm báo thức được bật thì khi chức năng chạy được gọi từ vòng lặp chính xác định Compact Flash cần nhiều dữ liệu hơn, nó phát lệnh đọc để ngăn lại trong khi CF đọc, vì vậy cho phép tác vụ chạy nhanh chóng kết thúc hoạt động liên tiếp, lặp lại. Bộ mã
hoá MP3 đòi hỏi dữ liệu phải được gửi vào nối tiếp để hoạt động được chia nhỏra để
gửi dữ liệu thành các gói nhỏ.
6.5 Sử dụng Compact Flash
Ta chọn sử dụng card Compact Flash (CF) để lưu trữ dữ liệu MP3. Lý do chính cho lựa chọn này là card CF có bộđiều khiển riêng gắn cùng để khi kết nối chỉ cần gửi lệnh và chờ thực hiện. Ta chọn kết nối với card CF dùng chế độ Common Memory làm việc với giao diện dữ liệu 8 bit và vì vậy ta có thể lưu trên các chân của vi điều khiển PIC. Ta dùng bảng ngắt CF có sẵn trong trang SparkFun.com.
Dữ liệu trên card CF được lưu trữ trên các sector 512 byte và tất cả các sector phải được viết thành khối kích thước 512 byte. Để kết nối với card CF, ta dùng 3
đường địa chỉđể truy cập vào 8 thanh ghi. Các thanh ghi này được dùng để tải thông
tin địa chỉ và gửi lệnh đọc và viết. Ta cũng có thể tận dụng nhiều đường điều khiển, việc này chỉ tận dụng được những đường quan trọng nhất gồm Reset, Ready, Write Enable và Output Enable. Reset thì dễ hiểu, Ready là tín hiệu từcard để báo hiệu khi bận, Write Enable viết vào thanh ghi địa chỉ và Output Enable đọc từthanh ghi địa chỉ. Khi bật đồng hồ báo thức, card CF được reset và sẵn sàng nhận chấp nhận tín hiệu. Có mã cung cấp để gọi nhiều chức năng và thực hiện những tác vụ phức tạp nhưng mã thực sự dùng trong thiết bịkhá đơn giản. Khi cần chơi một bài hát thì sector đầu tiên
sẽ được tải vào các thanh ghi CF bằng lệnh CF_StartSectorRead(), nó cũng tải thanh
ghi điều khiển bằng lệnh read. Sau đó sector đầu tiên được copy từ card vào bộ đệm trên PIC, việc này thực hiện bằng cách đọc thanh ghi 0 và cho phép đầu ra xuống mức thấp rồi nâng lên mức cao đểđọc lần lượt 512 byte. Để sector kế tiếp sẵn sàng khi cần thiết, lệnh CF_StartSectorRead() được gọi lại để tải trước. Chức năng gửi MP3 đến chip STA013 cũng kiểm tra hết file sau khi tải một sector mới, việc này được thực hiện bằng cách kiểm tra một sector mà tất cả các byte có giá trị 0xFF. Khi viết số bài
hát, trước tiên phải xác định sector bắt đầu. Sau đó, các byte được viết vào sector và mỗi lần sector lấp đầy, bộđệm được viết vào card và nó lại được lấp đầy lại. Khi cả bài hát đã được viết, phần còn lại của sector đó được lấp với giá trị0xFF và được viết,
sau đó công việc cũng được thực hiện tương tự trong sector kế tiếp để có ít nhất một
sector đầy giá trị 0xFF khi kết thúc bài hát.
Nhìn chung, giao diện CF rất cơ bản và dễ sử dụng. Quản lý dữ liệu trên một bộ đệm kích thước sector trên PIC và viết hay đọc vào card CF khiến cho việc truy cập và viết dữ liệu rất dễ dàng.
6.6 Chip bộ mã hoá MP3
Ta chọn STA013 để mã hoá MP3, thực sự thì có những phiên bản mới hơn của chip này phổ biến hơn nhưng ta không nói đến ở đây. Chip này được chọn vì dễ sử
dụng, tất cả những việc cần làm chỉđơn giản là gửi vào một file và nó sẽ quyết định tốc độ bit và các thông tin khác rồi mã hoá phần dữ liệu. Chip có sắn bộ đệm trong và nâng tín hiệu lên mức cao để báo hiệu cho PIC biết nó có thể nhận dữ liệu. Điều này không cần nhiều điều kiện cho việc báo hiệu thời gian chính xác từ PIC, chỉ cần giữ đầy bộđệm nếu có thể.
Hinh 33: Bộ mã hóa MP3
Việc cấu hình chip STA013 được thực hiện qua bus I2C, là bus chia sẻ hai chiều sử dụng đơn giản như một công cụ cấu hình. Dùng giao thức I2C, các lệnh có thểđược viết vào chip và chip được thiết lập để chạy file. Chip STA013 ta dùng có file cấu hình rất lớn do STMicro cung cấp, nhiều người cho rằng đó là firmware cập nhật cho chip
để hoạt động tốt. File này có khoảng 2000 bản ghi vào chip, đầu tiên phải được gửi
vào chip qua bus I2C, khi file đã được gửi thì các lệnh chính xác phải được gửi đi để
cấu hình chip trong môi trường cài đặt. Cấu hình gồm các chi tiết như tốc độ xung và thông tin giao diện để nối vào bộ chuyển đổi số - tương tự. Thiết lập chính xác có thể
thấy trên data sheet của chip này. Khi chip đã được cấu hình, nó phải được chuyển đổi
để sử dụng và chạy các chế độ và sau đó nó sẽ sẵn sàng nhận dữ liệu MP3. Chip mã hoá cũng có nhiều tuỳ chọn tiên tiến gồm tuỳ chọn EQ và thiết lập dung lượng, cho phép sửa đổi âm thanh dễdàng nhưng không được dùng trong mã hiện tại. Các thiết lập này dễthay đổi qua bus I2C.
Dữ liệu MP3 được gửi đến chip qua giao diện SPI đơn giản. Giao diện này có hai
được gửi cho mỗi bit. Dữ liệu được gửi từng byte một đến khi đường yêu cầu dữ liệu của chip xuống mức thấp để báo hiệu bộđệm đã đầy.
Việc khó nhất khi sử dụng chip là thiết lập mạch khởi tạo cho nó và chỉnh tín hiệu 5V sang 3V do STA013 là chip 3V trong khi PIC của ta là 5V. Mạch khởi tạo có
trong sơ đồ, hiệu điện thế có thểđiều chỉnh bằng nhiều cách.
Đầu tiên, có một mạch đơn giản gồm điện trở và tụđiện giữa PIC và STA013, nó giảm điện thế xuống đủ thấp để điện thế không làm hỏng chip STA013. Khó nhất là
đường dữ liệu bus I2C. Cần thực hiện cả hai việc để bộ chia giữa các chip không hoạt
động. Lẽ ra phải dùng thành phần kéo 3V và PIC chỉnh tín hiệu thành High-Z đến khi nó hạ tín hiệu thấp xuống điểm không mà chân và điện trở kéo có sụt điện thế 3V.
Hình 34a: :I2C bus data
Hình 34b: Giao diện 5 xuống 3V một chiều
Để cấp nguồn cho chip STA013 thì phải dùng một bộ điều chỉnh điện thế thay
đổi được 317T, nó cấp nguồn khá ổn định chỉ với một chip và các điện trở và tụđiện kép gắn ngoài. Data sheet của chip này có mạch máy phát dao động tinh thểđược dùng
để cấp xung nhưng điều này không đáp ứng được, vì vậy ta chuyển sang máy phát dao
6.7 Bộ chuyển đổi số - tương tự CS4334
Đây là một bộ chuyển đổi số - tương tựcơ bản. Giao diện khá đơn giảm do chip hỗ trợ kết nối I2S và STA013 cũng vậy. Ngoài việc thiết lập mạch khởi tạo, chip chỉ
cần cấp nguồn và có tín hiệu chính xác từ STA013. StA013 phải thiết lập chính xác theo các thông số kỹ thuật của bộ chuyển đổi số - tương tự kèm theo và hoạt động đơn
giản.
6.8 Màn hình LED
Để hiển thị, ta sử dụng màn hình 7 phần, khiến cho đồng hồ trông giống như đồng hồ báo thức thường hơn là đồng hồ báo thức phức tạp. Điều này hạn chế ta chỉ
hiển thị thời gian và các đối tượng không phức tạp hơn như ngày trong tuần và ngày
tháng nhưng do thiết lập bình thường qua kết nối USB, đó không phải là vấn đề quan trọng.
Để nối màn hình 7 đoạn vào PIC, ta biết là cần phải dùng càng ít chân càng tốt. Quyết định cuối cùng là dùng bốn thanh ghi dịch 8 bit nối tiếp vào/song song ra để có thể tải qua hai chân và có một bit cho mỗi đoạn. Do có bộđiều khiển màn hình 7 đoạn,