Thông báo
Collapse
No announcement yet.
Các vấn đề cơ bản về I/O Port (Revised 12/02/09)
Collapse
This is a sticky topic.
X
X
-
Có ai để ý đến trở treo trong AVR là bao nhiêu không? Hôm trước mình có quét phím, nhưng không dùng trở treo ngoài, các phím như là có vấn đề vì nó rất dễ bị nhiễu.
-
Mình đang đọc ATmega8 về I/O nhưng có chỗ chưa hiểu, ai biết chỉ dùm cái bảng nó nói cái gì vậy? Có thể nói cụ thể 1 pin không?
Leave a comment:
-
-
em dung CodevisionAVR thấy ở thẻ PORTS khi khởi tạo có các chể độ 0;1 khi chọn output và T;P khi chọn là input, em cũng phán đoán lờ mờ nhung chưa hiểu cặn kẽ lắm, thấy các anh thảo luận cũng vỡ ra thêm nhiều điều nhưng và là học mót nên vẫn lờ mờ các anh có thể nói chi tiết hơn về trạng thái 0,1,T,P cho em mở mắt mới được không ạ
Leave a comment:
-
Code://PB0: lay tin hieu //PB1..5: hien thi LED bit dotx10, dotx1; //hien thi dau cham char codex10=0, codex1=0; //hien thi so chuc-don vi char code[17]={63,6,91,79,102,109,125,7,127,111,119,124,57,94,121,113,128};//bang ma char active_HIGH,active_LOW,active_nible; ........ while(1){ for(active_HIGH=1; active_HIGH<6; active_HIGH++) //set tung chan { PORTB = (1<<active_HIGH); //hàng quét switch (active_HIGH){ case 1: active_nible = code[codex10]<<1; break; case 2: active_nible = code[codex10]>>3 + dotx10*(1<<5); break; case 3: active_nible = code[codex1]<<1; break; case 4: active_nible = code[codex1]>>3 + dotx1*(1<<5); break; default: active_nible = 0; break; } for(active_LOW=1; active_LOW < 6; active_LOW++){ DDRB = (1<<active_HIGH); //thiet lap ngo ra muc cao if (active_LOW < active_HIGH) DDRB|= (1<<active_LOW)&active_nible; else if (active_LOW > active_HIGH) DDRB|= (1<<active_LOW)&(active_nible<<1); else goto skip_delay; delay_ms(1); skip_delay: } } } }
Leave a comment:
-
Ứng dụng cho 5 chân
(Một điều cần lưu ý là mạch gốc led bị vẽ sai, hình này là đã chỉnh sửa lại, không hiểu sao Atmel lại có thể xuất bản mà sơ xuất đến thế)
Phân tích theo hình,
- Để quét digit 1 cần phải mức cao chân PB1, PB2,
- Digit 2 thì mức cao PB3, PB4, ứng dụng này không dùng mức cao PB5
- Đối chiếu các chân còn lại thấy có sự tương tự nhau ở hai digit, vậy chỉ cần xác lập một mảng đối chiếu là đủ cho cả hai.
- Nếu lưu tổ hợp từng đoạn cho cả hai digit, tổng thể lên tới 10 x 10 = 100 byte (thậm chí 16 x 16 =256, không khoa học
Bảng tổng hợp quan hệ chức năng sáng từng LED và từng chữ số
Với giải thuật sơ lược như vừa nêu, tôi có viết một đoạn chương trình nhận các số hàng chục và đơn vị (codex10, codex1) và các bit dấu chấm (dotx10, dotx1), xuất ra thành 2 LED-7seg với 2 dấu chấm. Mô phỏng thử trên AVRStudio thấy chạy được, chú ý đây chỉ là đoạn chương trình chính hiển thị số. Quá trình lấy dữ liệu không được đề cập, tuy nhiên có thể lấy dữ liệu dễ dàng bằng ngắt hoặc chuyển đoạn chương trình này thành chương trình phục vụ ngắt timer thay vì dùng hàm delay.
Leave a comment:
-
OK, giải pháp sơ bộ thì có từ khi đặt vấn đề, tuy nhiên câu cú lê thê và xét thấy không phù hợp lắm với tiêu đề topic nên ngại không gởi.
Cơ bản, giả sử nối mạch như sau
Để LEDA sáng, PORTx = 1, PORTy = 0, đồng thời cả hai chân phải được thiết lập ngõ ra. DDRx,y=1
Ngược lại, LEDB sáng khi PORTx=0, PORTy=1, DDRx,y=1
Các trường hợp khác ví dụ PORTx=PORTy, hoặc một trong hai chân thiết lập ngõ vào thì cả hai led đều không thể sáng (điện trở treo xem như quá lớn, bất chấp có hay không). Tuy nhiên nếu dùng 2 chân này chỉ để lái 2 led thì cũng chẳng có gì hay ho để nói.
Nếu nối thêm một chân nữa, ta sẽ có 6 LED theo thứ tự LEDxy, LEDyx, LEDxz, LEDzx, LEDyz, LEDzy
Muốn LEDxy sáng, PORTx=1, PORTy=0, DDRx,y=1 tương tự câu trên
Tuy nhiên nếu chỉ muốn một mình LEDxy sáng còn các LED khác tắt thì còn khả năng tắt chức năng ngõ vào ở chân còn lại. Nếu để ngõ ra mức nào cũng có thể làm ảnh hưởng các LED khác. Nói cách khác chỉ còn cách cho DDRz=0, không quan tâm PORTz vì không ngại trở treo làm ảnh hưởng. Tuy nhiên hay nhất vẫn nên chọn PORTz=0 để ngõ vào có trở kháng thật sự cao, không làm ảnh hưởng.
Để nhiều hơn một LED sáng đồng thời thì phải theo điều kiện là có cùng chân có cùng cực tính, ví dụ LEDxy, xz có thể sáng đồng thời, LEDxy và yz thì không thể.
Tóm lược chức năng sáng cho 3 pin, 6 LED như sau
Tiếp theo, muốn sáng theo một tập hợp nào đó ví dụ sáng các LED xy, xz, yx thì phải quét xoay vòng, có thể lợi dụng chức năng sáng cùng cực tính như trên nhưng vấn đền hơi phức tạp vì ảnh hưởng đến dòng tải, ảnh hưởng độ sáng nên không đề cập. Cách quét sau cho phép một lúc chỉ có một LED sáng:
1. Xoay vòng các chân X, Y, Z thiết lập ngõ ra, mức 1
2. Ở từng trạng thái, xoay vòng các chân còn lại, nếu LED nào sáng thì thiết lập ngõ ra, mức 0 cho chân tương ứng; LED nào tắt thì set ngõ vào, mức 0
Phát triển cái này lên thành ma trận, người ta gọi là ma trận charlieplexed. Tổng quát, với N chân có thể lái được N(N-1) led. Tuy nhiên điểm yếu của phương pháp này là trong một thời điểm chỉ cho phép sáng 1 led. Độ rộng xung tối đa là 1/N/(N+1)Last edited by Kilodeth; 20-09-2008, 03:20.
Leave a comment:
-
@KiloDeth:
Bạn giúp cấu hình cho các chân và giải thuật quét cho mạch này với, một cách để hiểu thêm về I/O port AVR.
Đây đúng là sơ đồ cơ bản của led7seg nhưng đúng như bạn nói, không sử dụng sơ đồ chân như 2 hình bạn đưa ra phía dưới và nó được điều khiển chỉ với 5 chân I/O.
Bạn tự đặt vấn đề và tự trả lời đi nhá!
Vui hơn rồi chứ
Leave a comment:
-
Nguyên văn bởi duc thang Xem bài viếtCứ theo bảng tóm tắt 20 là xong.
Bit PUD làm nhứt đầu.
Ở hình 26, trang 55, có thêm các bit control Rpu (Alternate port Functions). Các bit này điều khiển ở đâu (không tìm thấy thanh ghi chứa các bit này).
Lấy ví dụ chức năng TxD và RxD của chân PD1,0. Không cần cài in/out gì cả cho PD1,0, chỉ cần set các bit RXEN và TXEN là các chân RxD, TxD tự nhận trách nhiệm In/Out tương ứng. Tín hiệu ra không phải bằng cách ghi lên PORTD.1 mà do bộ UART tự phát cấp phát.
Một ví dụ khác là chứ năng SPI, cái này thì khác UART, muốn thu/phát được dữ liệu phải set các chân MISO, MOSI, SCK vào/ra tương ứng chứ bản thân SPI không kiểm soát.
Cũng cám ơn bạn đã đặt ra nhiều vấn đề tưởng như đơn giản mà ...
Leave a comment:
-
Cứ theo bảng tóm tắt 20 là xong.
Bit PUD làm nhứt đầu.
Ở hình 26, trang 55, có thêm các bit PUOExn, PUOVxn control Rpu (Alternate port Functions). Các bit này điều khiển ở đâu (không tìm thấy thanh ghi chứa các bit này).
Leave a comment:
-
Cho em túm cái vụ Rpu này phát:
Hoàn toàn có thể chọn hoặc không chọn trở treo cho từng chân, ngay trong cùng một port
Tham khảo Table 20, trang 52 datasheet ATmega16:
1. Nếu không chọn trở treo, DDxn = 0, PORTxn = 0, PUD có thể bằng 0 (hoặc 1, bất kỳ)
2. Nếu chọn trở treo, DDxn = 0, PORTxn = 1 và PUD = 0
Vậy PUD để chi, khi chỉ cần DDxn và PORTxn là có thể thoải mái cấu hình từng chân rồi? Mình không biết, có lẽ làm nhiều đến lúc cần mới biếtLast edited by Kilodeth; 15-09-2008, 14:21.
Leave a comment:
-
Nguyên văn bởi duc thang Xem bài viếtCăn cứ vào data sheet (ATMega 16)
Trang 51, 52 và 57 : bit PUD control cho điện trở Ppu. Bit PUD ở thanh ghi SFIOR chỉ control chung cho cả port, làm sao chọn riêng cho từng pin như DDxn hoặc PORTxn ?
Xem kỹ lại thì: if PUD =1 thì disable tòan bộ Rpu của VĐK, còn if PUD = 0 thì còn tùy thuộc ngã ra của DDxnvà PORTDxn.
Điều khiển Rpu cho từng pin thấy khá phức tạp.
Tôi cũng đang ở mức tìm hiểu AVR qua tài liệu thôi, viết từng ứng dụng cụ thể để tìm hiểu nó. Mong được học hỏi thêm.
Việc dùng PUD để chọn trở treo có thể thực hiện dễ dàng qua một mạch NAND (xem sơ đồ khối của cổng)
Leave a comment:
-
Căn cứ vào data sheet (ATMega 16)
Trang 51, 52 và 57 : bit PUD control cho điện trở Ppu. Bit PUD ở thanh ghi SFIOR chỉ control chung cho cả port, làm sao chọn riêng cho từng pin như DDxn hoặc PORTxn ?
Xem kỹ lại thì: if PUD =1 thì disable tòan bộ Rpu của VĐK, còn if PUD = 0 thì còn tùy thuộc ngã ra của DDxnvà PORTDxn.
Điều khiển Rpu cho từng pin thấy khá phức tạp.
Tôi cũng đang ở mức tìm hiểu AVR qua tài liệu thôi, viết từng ứng dụng cụ thể để tìm hiểu nó. Mong được học hỏi thêm.
Leave a comment:
-
Nguyên văn bởi duc thang Xem bài viếtĐiện trở kéo lên Rpu hình như chỉ chọn cho cả port, không chọn riêng từng pin được ?
Leave a comment:
Bài viết mới nhất
Collapse
-
bởi dinhthuong92Cảm ơn bác đã chia sẻ nhiều thí nghiệm thực tế.
Về mạch cân bằng cells pin thì theo cá ngân em, nó chỉ có chức năng bảo vệ quá xả và quá nạp cho các cell thôi. Tức là bất kì cell nào trong khi xả mà có áp thấp nhất và bằng...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 21:07 -
-
bởi jigokushoujoCó anh chị nào có thể cho em 1 mạch chống ngược cực, chập mạch, khi bị chạm mạch hay ngược cực thì nó sẽ tự động ngắt nguồn,khi không còn chạm thì nó sẽ đóng nguồn lại bình thường. Em có dùng nguồn 12V 75A từ ắc quy . Em cần chụi...
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 18:24 -
-
bởi chinhnguyen9Tôi nghi ngại về sự hiện diện của điện trở 0,1R trong mach test có thể làm sai lạc và méo mó hoạt động của mạch. Sau khi tháo bỏ điện trở trên test lại thì thấy hoạt động cân bằng tích cực hơn rất nhiều và sờ thấy các most fet của...
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 15:01 -
-
bởi chinhnguyen9Test module cân bằng chủ động kiểu Flying Capacitor Balancing 4s 6A TQ
Hình thức board mạch có vẻ ổn. Hình 1 mặt trên và mặt dưới
Hình 2
Lắp bài test với 3 cell 32-650 (4000mAh) với các mức điện áp trong dòng thứ 2 cell số 5 là pin lion 10Ah để tạo độ...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 11:26 -
-
bởi chinhnguyen9Hính 1 Sản phẩm board cân bằng acquy Minh Quang
Hình 2 Sơ đồ nguyên lý hoạt động
Hình 3 Sơ đồ đấu dây
Dùng 2 khối pin 32-650 khối 1 4s=13V và khối 2 5s =16V bắt nối tiếp, đấu dây đen B0 vào âm, nguồn B1 vào cọc 13V, và B2 vào cọc 29V,...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 10:51 -
-
bởi chinhnguyen91- Sơ khai là mạch cân bằng thụ động do hiệu quả của mạch này là rất kém nên ta vứt nó vào quá khứ.
2- Mạch cân bằng chủ động, so áp liền kề gồm 2 nhánh: dùng từ trường và dùng điện tích
3- Mạch cân bằng chủ động toàn nhóm.(flying capacitor balancing)
Trong mạch cân bằng chủ...-
Channel: Hướng dẫn sử dụng diễn đàn
16-04-2024, 08:48 -
-
bởi saovietnhat
Quyền Lợi:
- Mức lương thỏa thuận.
- Được đào tạo về kỹ năng làm việc trong môi trường năng động và làm việc nhóm
- Được đào tạo chuyên sâu về bán hàng, kinh doanh hiệu quả
- Tham gia BHYT, BHXH, BHTN,...-
Channel: Tuyển dụng
13-04-2024, 15:46 -
-
bởi Trọng TrangTiện đây các anh cho em hỏi: Khi transistor bị nóng thì dùng tản nhiệt. mặc dù đã có tản nhiệt nhưng bản mạch có bị nóng lên do transistor truyền nhiệt vào bản mạch không? Em cảm ơn các anh.
-
Channel: Điện tử dành cho người mới bắt đầu
10-04-2024, 22:48 -
Leave a comment: