Chương trình trên mình viết theo từng module mà, lcd_lib hoàn toàn không có lỗi gì. Chỉ có lỗi của ngắt thôi. Nhưng thư viện đó có sẵn trong WINAVR mà, cú pháp thì chắc không có gì sai đúng ko?
Thông báo
Collapse
No announcement yet.
Dung C cho AVR
Collapse
X
-
Nguyên văn bởi quoc_thaibk Xem bài viếtSo sánh thì về tính chuyên nghiệp nhìn Avrstudio khá là pro.
Cũng okie lập trình nó thì hiểu nhiều hơn và thư viện trên thế giới người ta viết cho nó cũng khá là nhiều.
Còn CV thì hay ở chỗ là có template code cho mình.
Nhưng cũng hổng an toàn.
Theo mình người lập trình phần nhúng mà dùng template quá nhiều không ổn vì dùng template sẽ không hiểu cấu trúc của con chip bạn đang dùng.
Điều thứ 2 nữa là CV dịch ra tốt hơn Winavr (Winavr Avrstudio là 1 đều là GCC ) ở 1 số chỗ.
Ví dụ trong datasheet ở đoạn đọc epprom của họ atmega (mình chưa xài họ khác) nếu bạn dùng code ghi của nó thì chỉ chạy bên CV còn avrstudio không hoạt động vì cách dịch của GCC không tối ưu mã nên nó không đúng thời gian đáp ứng trong datasheet.
ví dụ:
Đây là code trong datasheet:
Code:void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { /* Wait for completion of previous write */ while(EECR & (1<<EEWE)) ; /* Set up address and data registers */ EEAR = uiAddress; EEDR = ucData; /* Write logical one to EEMWE */ EECR |= (1<<EEMWE); /* Start eeprom write by setting EEWE */ EECR |= (1<<EEWE); }
Code:void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { /* Wait for completion of previous write */ while(EECR & (1<<EEWE)) ; /* Set up address and data registers */ EEAR = uiAddress; EEDR = ucData; /* Write logical one to EEMWE */ EECR |= (1<<EEMWE); //EECR |= (1<<EEWE); /* Start eeprom write by setting EEWE */ asm("sbi 0x1C,1"); }
Nên nếu làm với GCC thì cẩn thận nên coi nó dịch mã ASM ra như thế nào đảm bảo an tâm chút .
Comment
-
Nguyên văn bởi tui Xem bài viếtTrời, pác hiểu sai rồi, phép tính (1<<EEWE) chỉ thực hiện ở compiler thôi kết quả compiler cuối cùng là sbi 0x1C,1. AVR-GCC cực kỳ thông minh đấy, pac thử sẽ biết
bạn có thể thử.
Cam đoan về kết quả.
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
Nguyên văn bởi quoc_thaibk Xem bài viếtMình đã thử và đã chứng minh.
bạn có thể thử.
Cam đoan về kết quả.
NVT2Tín đồ AVR giáo.
Comment
-
Nguyên văn bởi nvt2 Xem bài viếtBạn kiểm tra lại mức độ optimization của bạn xem, nếu ở mức thấp thì AVR GCC dịch ra rất nhiều code thừa tuy nhiên nếu chọn chế độ cao thì nó cũng chẳng thua gì CodeVision đâu.
NVT2
Code:13: EECR |= (1<<EEWE); +00000227: 9AE1 SBI 0x1C,1 Set bit in I/O register
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
các anh biết không tui rất tốn thời gian lên đây học AVR nhung các anh không chiệu tải tài liệu co bản lên thi tui mần sao ma học được nhỉ . tui đề nghị mấy anh giúp tủi em nhiệt tinh hơn có được không . những cái ma các anh tưởng chừng như đơn giản thì tui em cảm thấy khó cực ky đấy .thank you
Comment
-
Nguyên văn bởi quoc_thaibk Xem bài viếtỪ sau khi chỉnh lại ức optimization của GCC thì thấy nó cũng tối ưu
Code:13: EECR |= (1<<EEWE); +00000227: 9AE1 SBI 0x1C,1 Set bit in I/O register
NVT2Tín đồ AVR giáo.
Comment
-
Mọi người cho mình hỏi chút về tầm vực của biến trong Winavr:
1. Mình khai báo biến toàn cục ngay dưới phần khai báo header nhưng không thể sử dụng trong các hàm được. Các hàm không bắt khai báo lại nhưng khi vào hàm biến bị khởi tạo lại nên không thể sử dụng kết quả từ hàm này sang hàm khác được. Ngoài ra vi điều khiển cũng rất dễ bị treo
2. Mặc định của biến khi khai báo là static, tức là cho phép thay đổi và lưu giá trị khi thoát ra khỏi hàm đúng ko? Mình cũng đã thử thêm từ khóa static vào phần khai báo mà không khả quan hơn .
3. Giải thuật cho việc quét một số bất kỳ(4,5... chữ số) từ ma trận bàn phím 4x4. Hiện giờ mình đang sử dụng biến đếm cho hàng chục, trăm... và định thời chờ quét phím kế tiếp nhấn trước khi thoát khỏi vòng lặp. Tuy nhiên cách này mình làm gặp chút rắc rối: LCD chạy loạn xạ, không thể hiện thị số được. Mình đính kèm tập tin, mọi người xem sai ở đâu giùm mình nhé!Attached Files:-B
Comment
-
Nguyên văn bởi dinhhieu Xem bài viếtMọi người cho mình hỏi chút về tầm vực của biến trong Winavr:
1. Mình khai báo biến toàn cục ngay dưới phần khai báo header nhưng không thể sử dụng trong các hàm được. Các hàm không bắt khai báo lại nhưng khi vào hàm biến bị khởi tạo lại nên không thể sử dụng kết quả từ hàm này sang hàm khác được. Ngoài ra vi điều khiển cũng rất dễ bị treo
2. Mặc định của biến khi khai báo là static, tức là cho phép thay đổi và lưu giá trị khi thoát ra khỏi hàm đúng ko? Mình cũng đã thử thêm từ khóa static vào phần khai báo mà không khả quan hơn .
Nếu muốn Static thì phại phải tự khai báo,hoặc sử dụng biến toàn cục.
Mình không đọc hết ct của bạn nhưng thấy 1 số điểm ở bạn khai báo sai như sau
Code:int temp, result,view,hundreds, tens, ones,count; count++; DDRB = 0XFF;
như sau:
Code:int temp, result,view,hundreds, tens, ones; static int count=0;//việc cho count bằng 0 này chỉ 1 lần sau khi cấp điện cho vđk sau đó nó là static. count++; DDRB = 0XFF;
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
Nguyên văn bởi nvt2 Xem bài viếtAnh Thái lâu nay chuyên PIC mà giờ cũng làm AVR nhuyễn nhừ rồi hen, hôm trước NVT2 lên BK có gặp anh (hình như ngồi sau lưng luôn thì phải ) mà không biết anh còn nhớ không !
NVT2
Mình là quoc_thaibk không phải anh Thái Moderator.Hỉu nhầm ngại quá.
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
1. Mình đã thử khai báo toàn cục mà không được, trong hàm không đòi khai báo lại biến nhưng khi nạp xuống chip thì nó chạy tùm lum à. Không hiểu sao nữa ! Nếu khai báo trong mỗi hàm thì hàm khác lại không sử dụng được nó .
2. Mình thấy trên một số diễn đàn về WINAVR nói là static là mặc định khi khai báo biến mà, hơn nữa mình cũng đã thử khai báo static rồi mà kết quả cũng vậy thôi.:-B
Comment
-
Nguyên văn bởi dinhhieu Xem bài viết1. Mình đã thử khai báo toàn cục mà không được, trong hàm không đòi khai báo lại biến nhưng khi nạp xuống chip thì nó chạy tùm lum à. Không hiểu sao nữa ! Nếu khai báo trong mỗi hàm thì hàm khác lại không sử dụng được nó .
2. Mình thấy trên một số diễn đàn về WINAVR nói là static là mặc định khi khai báo biến mà, hơn nữa mình cũng đã thử khai báo static rồi mà kết quả cũng vậy thôi.
Bạn thử viết 1 chương trình nhỏ không liên quan tới ct LCD gì của bạn đấy.ví dụ điều khiển led chẳng hạn.
Rồi khai báo biến toàn cục đưa nó ra led coi.
Ví dụ:
Code:unsigned char test; void main() { test=0x55; DDRB=0xff; while(1) { test--; PORTB=test; delay(1000); } }
Nếu khai báo trong hàm con thì tuỳ theo cơ chế trình biên dịch.
Có thể sử dụng trực tiếp các thanh ghi để làm biến khi thoát khỏi hàm con thì trả thanh ghi đó về cho chương trình khác.Nếu khai báo static thì lúc đó mới sử dụng 1 vùng nhớ dành riêng cho ct con.
Còn biến toàn cục đc dành riêng 1 vùng nhớ ban đầu từ lúc ct bắt đầu đến khi nó hết điện .Last edited by quoc_thaibk; 08-08-2007, 10:49.
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
Nguyên văn bởi quoc_thaibk Xem bài viếtẶc.nvt2 lộn mình với Anh Thái mod của Luồng mạch điện ứng dụng rồi.
Mình là quoc_thaibk không phải anh Thái Moderator.Hỉu nhầm ngại quá.
NVT2Tín đồ AVR giáo.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Hỏi về bơm màng bldcbởi vi van phamPhải xem cơ cấu bơm, chứ xem cơ cấu rotor, thì chỉ làm thầy bói xem voi.
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 08:19 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11vg, cám ơn bác...........
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 14:37 -
-
bởi khoine9899
Em chào các anh và mọi người.
Hiện em đang có 1 con bơm màng trong thiết bị y tế đang gặp tình trạng yếu dần hoặc ngừng hoạt động sau thời gian sử dụng
Sau khi tìm hiểu về thông tin của bơm trên mạng thì em được biết...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 11:22 -
-
Trả lời cho Cần mọi người giúp mạch tạo sóng siêu âm máy rửabởi bqviet
-
Channel: Điện tử công suất
27-11-2024, 20:26 -
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
27-11-2024, 11:37 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
27-11-2024, 11:28 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 15:06 -
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 00:35 -
Comment