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
-
bởi thanghiCùng với sự bùng nổ của công nghệ và xu hướng chuyển đổi số, ngành điện tử đang trở thành một trong những lĩnh vực thu hút nhiều doanh nhân và nhà đầu tư. Việc thành lập công ty trong ngành này không chỉ giúi hạn ở việc sản xuất phần cứng mà còn mở rộng sang các dịch vụ...
-
Channel: Xu hướng, nhu cầu và thị trường
Hôm qua, 21:02 -
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
-
bởi namlangnhoXin chào mọi người. E có sử dụng 1 cục nguồn tổ ong 12v-30A chạy đèn led xe trà sữa. Mà thợ thi công bị rò điện nên điện rò ra khung xe. E dùng đồng hồ đo điện ở khung xe và cả output thì thấy có dòng điện xoay chiều hơn 100v. Nên chạm...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 00:12 -
-
bởi Manh.n.trCác bác cho em hỏi cách điều chế xung răng cưa sang xung vuông với ạ. Em đang thấy khó ạ...
-
Channel: Kỹ thuật điện tử tương tự
13-12-2024, 20:46 -
-
Trả lời cho hỏi về thiết kế mạch tuần tự trên proteusbởi Hatruong1309
-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
Comment