Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Thông báo
Collapse
No announcement yet.
Đố vui về PIC, các câu đố cực vui và cực hay... hehe..
Lỗi do bác trungkt nói trên do em đánh máy sai thôi, bỏ qua cho e nhé, vi em ko định nói cái đó. Vì đố như vậy dễ quá
He he... bác anthrax phát hiện được rồi. Khà khà.. nhưng bác nào giải thích rõ hơn ??? nếu ko khai báo như bác anthrax nói thì sao?
Nếu ko khai báo "reentrant" thì ví dụ hàm thu()(mức 1) đang trong main đang chạy và i=50 chẳng hạn. Lúc đó đột ngột có ngắt và khi thực hiện ngắt có lệnh gọi lại hàm thu(). Khi chạy hết hàm thu()(mức 2) trong ngắt thì khi đó i=100 mất rồi. Và hết chương trình phục vụ ngắt thì nó quay về main để nó thực hiện công việc đang dang dở, nghĩa là nó quay lại thực hiện tiếp hàm thu()(mức 1). Nhưng bây giờ giá trị của nó ko là 50 mà là 100 mất rồi nên gây ra lỗi ở đây. Đó là do nguyên nhân biến i được lưu trữ ở 1 ô nhớ cố định trong RAM
Khai báo "reentrant" thì có thể gọi lại hàm đó, có thể hàm trong hàm...
Không khai báo "reentrant" : do các biến được lưu ở các ô nhớ cố định, và khi hàm ấy được gọi khi chưa thoát ra thì giá trị mới sẽ đè lên giá trị cũ, và ko có sự cất biến đó vào "Ngăn xếp". Nên có thể dẫn tới các biên cục bộ bị sai.
Lỗi do bác trungkt nói trên do em đánh máy sai thôi, bỏ qua cho e nhé, vi em ko định nói cái đó. Vì đố như vậy dễ quá
He he... bác anthrax phát hiện được rồi. Khà khà.. nhưng bác nào giải thích rõ hơn ??? nếu ko khai báo như bác anthrax nói thì sao?
Bác BA đưa cho cái bài của CB viết khen hay, vào thấy hay thật.
F nhà ta không làm với C nhưng vì nói chuyện với bác BA vui nên đưa thêm một giải pháp củ chuối cho vui.
Đặt tên hàm khác nhau.
Khi yêu cầu biến chung, hoặc cùng biến. Thì khai báo biến dạng volatile. Khi đó, tất cả các bản copy của các biến sẽ thay đổi theo. Như vậy, vẫn đảm bảo hai hàm y nhau, nhưng khi viết thì viết dư ra một hàm (tốn bộ nhớ), nhưng không phải suy nghĩ lằng nhằng. Logic sẽ rõ ràng hơn.
Chờ thêm các bài của CB hehehee... CB bắt đầu lấy biểu tượng của Nigel rồi à, coi chừng lão kiện, và cũng coi chừng ... bị anh em chúng nó bụp
Hồi tui mới học PIC, Nigel ỗng giúp tui qua email và tin nhắn trên đó nhiều lắm, cho nên gần như tui coi ỗng là thầy, mặc dù ỗng chẳng biết đã giúp bao nhiêu thằng sinh viên từ tò te tí te lên đến master rồi expert bên electro tech.
Tiểu đệ có một câu đố vui vui thế này, ChiBang đã đố chủ yếu về cách lập trình, tiểu đệ đố về phần cứng bên ngoài.
Vấn đề thế này, trong thiết kế phần cứng của PIC do thiết kế các thành phần khác bây giờ chỉ còn:
- 1 channel ADC (10bit)
- 1 bộ CCP
- 1 chân OSCIN, gẫy mất chân OSCOUT
- 5 chân IO tự do
- 8 chân để điều khiển 1 LED 7 thanh (loại 1 số) không dùng dot.
bây giờ cần lắp thêm các thành phần sau đây: 1 LED 7 thanh nữa (loại 1 số),
1 keymatrix 4x4, 12 đèn LED đơn, ngoài ra hệ thống phải chạy đa tốc độ tức là có thể điều khiển tốc độ của PIC bằng phần mềm bên trong. Ngoài ra tiểu đệ lỡ lắp mạch như ông TM-eDESIGN, tương 13V vào chân PIC khè khè, làm hỏng mất bộ WATCHDOG bây giờ cần thiết kế một bộ hẹn giờ ngoài (do người dùng định được) để đánh thức PIC dậy khỏi chế độ SLEEP để làm một công việc gì đó.
Yêu cầu: Nếu dùng bộ CCP thì có đủ các chân của nó, nên dùng PWM thì có 1 chân OUT, capture thì có 1 chân, comparator thì có hai chân, LED 7 thanh là loại 1 số không dùng loại 2 số và 8 chân đã nối cứng với 1 LED 7 thanh bây giờ chỉ có thể nối thêm ra một LED khác mà không thể dùng chân này làm việc khác. Keymatrix thì như bình thường vẫn dùng, LED ở đây là LED phát quang bình thường 2 chân. Hệ thống có hai tốc độ thấp và cao, thấp để tích kiệm năng lượng, cao để tính toán việc chọn tốc độ do phần mềm bên trong quyết định. Không dùng thêm IC ngoài, tụ, trở, diode, trans dùng thoải mái.
Chắc câu này dễ, chờ tin các bác !
Mình không sử dụng PIC nên không rành về phần cứng con này tui nhiên mình xin đáp một phần về Keypad thì chỉ cần dùng 1 chân ADC thì có thể điều khiển được 16 phím dễ dàng. Mình dùng AVR chỉ mới 1 ngõ vào ADC mà kết nối được 32 phím và còn có khả năng mở rộng cho phép khoãng 64 phím.
Vcc
|
| | R1
| R2 R3 ..... Rn
ADC<----|------/\/\/\-----/\/\/\------.........
| | |
| | |
\ key1 \ key2 ... \ key n
| | |
gnd gnd gnd
Mình không sử dụng PIC nên không rành về phần cứng con này tui nhiên mình xin đáp một phần về Keypad thì chỉ cần dùng 1 chân ADC thì có thể điều khiển được 16 phím dễ dàng. Mình dùng AVR chỉ mới 1 ngõ vào ADC mà kết nối được 32 phím và còn có khả năng mở rộng cho phép khoãng 64 phím.
Vcc
|
| | R1
| R2 R3 ..... Rn
ADC<----|------/\/\/\-----/\/\/\------.........
| | |
| | |
\ key1 \ key2 ... \ key n
| | |
gnd gnd gnd
Mình không sử dụng PIC nên không rành về phần cứng con này tui nhiên mình xin đáp một phần về Keypad thì chỉ cần dùng 1 chân ADC thì có thể điều khiển được 16 phím dễ dàng. Mình dùng AVR chỉ mới 1 ngõ vào ADC mà kết nối được 32 phím và còn có khả năng mở rộng cho phép khoãng 64 phím.
Vcc
|
| | R1
| R2 R3 ..... Rn
ADC<----|------/\/\/\-----/\/\/\------.........
| | |
| | |
\ key1 \ key2 ... \ key n
| | |
gnd gnd gnd
Cách này dùng được, vì tôi đã dùng rồi, giải pháp được chấp nhận. Nhưng còn nhiều tính năng khác, bác dùng cái này cẩn thận mất cái kia.
Câu đố của bác trúc trắc, em tập trung công lực mở hết nhãn quang mã vẫn ko tài nào hiểu được bí kíp.
Bác nói ngắn gọn hơn, ko cần gợi ý cũng được, gợi ý mất cả hay...
Nhưng em hơi đoán ra ý tưởng của bác, em nói ra một số "tinh hoa" bác có ý định có thể dùng như sau:
1-Về bắt phím: có thể dùng 1 kênh ADC--->16 phím như chơi, hoặc có thể dùng chung 8 chân của LED 7T(--> ko tốn thêm bất cứ một chân nào khác).
2-Về hẹn thời có thê dùng chức năng counter hoặc compare, và phi một giao đông ngoài vào là OK(tốn 1 chân thui nhé).
3-12 LED đơn thì chỉ cần tốn 4 chân là OK hết.
Tài nguyên chân như trên mình có thể thiết kế ít chân hơn là cái chắc.
Về bộ tạo dao đông thì chỉ cần 1-2 con trans là OK.
Thiết kế 2 tốc độ có 2 cách:
Cách 1: sử dụng sleep mode kết hợp sự đánh thức của bộ dao động ngoài-->phát ngắt vào chân counter/compare(tốc độ thấp) và tốc độ cao là tốc độ khi config bit của PIC.
Cách 2: dùng chức năng điều chỉnh lựa chọn bộ chia tần số dao động của PIC(chỉ một số con có thui: ví dụ 16F88/628, 18F4331...)
Ko biết tinh hoa của bạn PTH nằm ở đây cả chưa?
Sao hình nó chạy tùm lum thế không biết lúc viết nhìn đẹp lắm mà
còn Led thì có thể dùng thêm 7447 không như vậy chỉ cần tốn 4 chân thôi còn Watchdong thì có thể dùng mạch trể kết nối bên ngoài khi PIC còn hoạt động thì nó tạo một xung ở chân nào đó để ngăn không cho ngõ ra của mạch này xuống thấp còn khi PIC bị treo thì chân này nó hoặc thấp hoặc cao nên không tác động thì sau một thời gian trễ nó sẽ có ngõ ra ở mức thấp nên tác động vô chân reset của PIC
C
PIN? ---------------| |---------------------tới mạch Reset (mạch trễ) phức
|____/\/\/\______| tạp qá nên ko vẽ.
R
giả sử chân Pic ở mức cao thì tụ sẽ dẩn cho đến khi tụ đầy thì ngưng sau đó chân PIC xuống thấp tụ sẽ xã điện qua điện trở R (~1M) quá trình cứ tiếp tục như vậy nó sẽ giữ cho mạch Reset không hoạt động. Mạch này tui cũng dùng để Reset 8051.
Bái phục, bái phục, tiểu đệ phải nghĩ mất hơn hai tiếng đồng hồ, thế mà đại ca giải được ngay, tuy nhiên đa tốc độ thì chưa OK lắm. Mà 12 LED bằng 4 chân, mong đại ca cho cái schematic.
Em đang tìm hiểu cách xây dựng chương trình điều khiển động cơ Servo Yaskawa bằng máy tính tuy nhiên khi tìm kiếm trên mạng các hướng dẫn thì thường là điều khiển bằng vi điều khiển hoặc điều khiển bằng PLC hay điều khiển động cơ...
Hai lớp dán mặt trước và mặt sau, gọi là film phân cực. Muốn hiểu rõ về nó thì chịu khó search nhé. Ở đây có rất nhiều chó cứ ngửi thấy phân là sủa nhặng, nên không giải thích nhiều....
Mọi người ơi cho em hỏi cái này ạ, hiện tại em đang làm btl về hiển thị giá trị nhiệt độ trên led 7 thanh sử dụng atmega16, code em chạy trên mô phỏng rất oke nhưng khi lắp qua mạch thực thì bị lỗi ở led đầu tiên bị lỗi như thế này...
Nhờ cả nhà tìm giúp mình thông tin IC này với, thấy ghi 943B W58BAL mà mình tìm mấy ngày nay không được, nó được đóng gói dạng TSSOP 8. Cám ơn cả nhà....
Cảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục...
Comment