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 Năm mới dientuvietnam.netbởi mèomướpDạ năm mới cháu xin kính chúc ông, bà, cô, dì, chú, bác, anh, chị, em, các bạn, các cháu... trong diễn đàn sức khỏe dồi dào, gặp nhìu may mắn và thành công...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 05:42 -
-
Trả lời cho Năm mới dientuvietnam.netbởi nhathung1101Chúc cả nhà ăn no mặc ấm, quần lúc có lúc không.
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 00:02 -
-
Trả lời cho Năm mới dientuvietnam.netbởi vandong1111Năm mới 2025 cháu chúc các chú, các bác mạnh khỏe, vui vẻ, gặp nhiều may mắn.
-
Channel: Tâm tình dân kỹ thuật
29-01-2025, 20:59 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi bqvietNói một cách xây dựng thì kiểu đồng hồ kiêm kẹp dòng NJTY3266 mà bạn Mèo đề cập là đúng nhu cầu người hỏi rồi. Một số cửa hàng bán trên 200ng, vài sàn thương mại điện tử bán dưới - thế là đúng nhu cầu về giá. Nếu khéo săn...
-
Channel: Điện tử dành cho người mới bắt đầu
27-01-2025, 20:02 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nhathung1101Đa năng còn chưa dùng hết, nếu không biết cách dùng.
200k thì hơi khó mua, nhưng 50k chắc là có. Cứ bảo bán cho tôi cái đồng hồ hỏng.-
Channel: Điện tử dành cho người mới bắt đầu
26-01-2025, 23:21 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi nhathung1101Lão Đinh Vặn học giải phương trình hồi đi trẻ mà. Mẫu giáo học lập trình AI rồi. Lớp lão ấy gần lớp em nên em biết....
-
Channel: Điện tử công suất
26-01-2025, 23:11 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Vậy chú đã hỏi hãng SIEMEN chưa? Tại sao cái PLC S7-200 cổ lỗ mà họ vẫn thiết kế riêng cho thị trường TQ với chữ SMART? Thậm chí phần mềm riêng để đọc file ngu.smart?
Vấn đề không còn là công nghệ "cốt lõi" nữa, mà là giá thành quyết định. Ham rẻ là trả giá mà....-
Channel: Điện tử công suất
26-01-2025, 23:01 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi vi van phamĐồng ý với Bqv.
50 năm làm nghề, tôi đã chứng kiến 3 lần máy x quang mới nhập từ nước ngoài về bị lỗi.
- Lần thứ 1 máy xq của Pháp được ks Pháp lằp đặt bị lỗi 1 con didode, đưa cho ks Pháp con didode khác cùng mã số, ông...-
Channel: Điện tử công suất
26-01-2025, 08:09 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi mèomướpDạ chú dinh... muốn sửa lỗi cho hãng thì chú cứ gửi những hình ảnh, video cho họ đi ạ, chú có thể tìm thông tin của những lãnh đạo bên ấy để gửi thì sẽ hiệu quả hơn ạ. Về tổng quan thì họ sẽ ko phản hồi rõ ràng đâu ạ, vì nhận...
-
Channel: Điện tử công suất
26-01-2025, 06:19 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietCuối năm bàn thêm chuyện to hơn chút, đấy là 2 vụ rơi đám 737 đời mới và trục trặc ở cả tá chiếc khác. Ngay cả những thứ tưởng như cao siêu sang xịn thật thì vẫn có thể gặp trường hợp oái oăm như thường. Từ hồi đó bqv đã thấy khó hiểu làm sao lại đẻ ra đám MCAS quái thai đến thế được. Rồi...
-
Channel: Điện tử công suất
24-01-2025, 19:40 -
Comment