PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   dsPIC - Bộ điều khiển tín hiệu số 16-bit (http://www.picvietnam.com/forum/forumdisplay.php?f=29)
-   -   Một lỗi cực kỳ khó hiểu. Giống như ảo thuật vậy. (http://www.picvietnam.com/forum/showthread.php?t=7472)

chestnut 01-12-2010 10:57 AM

Một lỗi cực kỳ khó hiểu. Giống như ảo thuật vậy.
 
Mình sử dụng chip dspic33FJ16GS502 sài dao động nội ở maximum là 40Mips.
Kích I/O cho 1 con LED với mức 0 là sáng, 1 là tắt.
Mọi chuyện có vẻ đơn giản nhưng có 1 lỗi như sau: Lúc mình để tay gần board (k đụng chạm về vật lý, gần khoảng 10cm) thì LED sáng, còn lấy tay ra xa một tí thì LED tắt. Board mình đặt trên một miếng cách điện. Sau đó mình mới dùng ossiloscope đo thử thì lúc để tay xa thì kích mức 0 ~ 1V, mức 1 ~ 2V. Lúc tay lại gần thì 0~0V, 1~3.3V.
Mình đã thử với tất cả các I/O khác đều bị. Và mình hàn 1 board khác thì lỗi trên vẫn xảy ra.
Mình nghĩ có thể do lỗi của layout làm nhiễu gì đó chăng?

Bạn nào đã gặp lỗi này thì tư vấn giúp mình nhé?

ak47 01-12-2010 12:59 PM

Trích:

Nguyên văn bởi chestnut (Post 40494)
Mình sử dụng chip dspic33FJ16GS502 sài dao động nội ở maximum là 40Mips.
Kích I/O cho 1 con LED với mức 0 là sáng, 1 là tắt.
Mọi chuyện có vẻ đơn giản nhưng có 1 lỗi như sau: Lúc mình để tay gần board (k đụng chạm về vật lý, gần khoảng 10cm) thì LED sáng, còn lấy tay ra xa một tí thì LED tắt. Board mình đặt trên một miếng cách điện. Sau đó mình mới dùng ossiloscope đo thử thì lúc để tay xa thì kích mức 0 ~ 1V, mức 1 ~ 2V. Lúc tay lại gần thì 0~0V, 1~3.3V.
Mình đã thử với tất cả các I/O khác đều bị. Và mình hàn 1 board khác thì lỗi trên vẫn xảy ra.
Mình nghĩ có thể do lỗi của layout làm nhiễu gì đó chăng?

Bạn nào đã gặp lỗi này thì tư vấn giúp mình nhé?

hì!
Cái này cũng hay vậy ta! Có lẽ là layout có vấn đề rồi. bạn xem lại phần đất với nguồn xem sao nhé! Nếu mình đoán không nhầm thì chạm vào mạch sẽ sáng led nhất!

chestnut 01-12-2010 01:08 PM

Trích:

Nguyên văn bởi ak47 (Post 40498)
hì!
Cái này cũng hay vậy ta! Có lẽ là layout có vấn đề rồi. bạn xem lại phần đất với nguồn xem sao nhé! Nếu mình đoán không nhầm thì chạm vào mạch sẽ sáng led nhất!

Mình đã kiểm tra phần cứng kỹ lắm rồi, problem này xảy ra trên con dspic chứ k phải về power, power mình sài linear regular + ắc quy nên k vấn đề gì. Giờ có lẽ mình đã biết nguyên nhân gì, nhưng tối về test mới dám chắc. Nguyên nhân trong con dspic.

ak47 01-12-2010 03:04 PM

Trích:

Nguyên văn bởi chestnut (Post 40500)
Mình đã kiểm tra phần cứng kỹ lắm rồi, problem này xảy ra trên con dspic chứ k phải về power, power mình sài linear regular + ắc quy nên k vấn đề gì. Giờ có lẽ mình đã biết nguyên nhân gì, nhưng tối về test mới dám chắc. Nguyên nhân trong con dspic.

Mình chưa đọc dòng GS này nên cũng không chắc lắm.Lần trước mình làm dspic30 thì do layout kém! Cái board của microchip cũng gặp phải tình trạng gần giống như thế! Nhưng chỉ nhiễu ở mấy con led thôi.Không hoàn toàn "ảo thuật" như của bạn!
Có gì pót len mình tham khảo nhé!
Chúc thành công

LeDuc 01-12-2010 03:49 PM

Trích:

Nguyên văn bởi chestnut (Post 40494)
Mình sử dụng chip dspic33FJ16GS502 sài dao động nội ở maximum là 40Mips.
Kích I/O cho 1 con LED với mức 0 là sáng, 1 là tắt.
Mọi chuyện có vẻ đơn giản nhưng có 1 lỗi như sau: Lúc mình để tay gần board (k đụng chạm về vật lý, gần khoảng 10cm) thì LED sáng, còn lấy tay ra xa một tí thì LED tắt. Board mình đặt trên một miếng cách điện. Sau đó mình mới dùng ossiloscope đo thử thì lúc để tay xa thì kích mức 0 ~ 1V, mức 1 ~ 2V. Lúc tay lại gần thì 0~0V, 1~3.3V.
Mình đã thử với tất cả các I/O khác đều bị. Và mình hàn 1 board khác thì lỗi trên vẫn xảy ra.
Mình nghĩ có thể do lỗi của layout làm nhiễu gì đó chăng?

Bạn nào đã gặp lỗi này thì tư vấn giúp mình nhé?

Cái đó có thể là do bạn config thiếu. Nên tắt chức năng analog của các chân rồi hãy setup nó là I/O .

chestnut 01-12-2010 05:42 PM

Trích:

Nguyên văn bởi LeDuc (Post 40503)
Cái đó có thể là do bạn config thiếu. Nên tắt chức năng analog của các chân rồi hãy setup nó là I/O .

Hiện tại mình chưa test dc liền. Nhưng theo mình, chức năng analog chỉ ảnh hưởng ngõ input thôi chứ nhỉ? Mặc dù biết rằng mặc định của mấy thằng này là pin analog. Nhưng đây cũng là một điểm mình đã nghĩ tới. Tối nay test thử và ý kiến rồi mới biết được.

chestnut 01-12-2010 09:21 PM

_FOSCSEL(FNOSC_FRC);
// Enable clock switching and configure
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF);

int main()
{
// Configure PLL prescaler, PLL postscaler, and PLL divisor
PLLFBD = 41; // M = 43
CLKDIVbits.PLLPRE=0; // N1 = 2
CLKDIVbits.PLLPOST=0; // N2 = 2
// Initiate clock switch to internal FRC with PLL (NOSC = 0b001)
__builtin_write_OSCCONH(0x01);
__builtin_write_OSCCONL(0x01);
// Wait for clock switch to occur
while (OSCCONbits.COSC != 0b001);
// Wait for PLL to lock
while(OSCCONbits.LOCK!=1) {};

init_gpio();
//RTDM_Start();
RLED = LED_ON;
GLED = LED_OFF;
while(1)
{
//RTDM_ProcessMsgs();
}

return 0;
}

Code rất đơn giản như vầy, nhưng vẫn bị problem đó.

LeDuc 02-12-2010 11:53 AM

Trích:

Nguyên văn bởi chestnut (Post 40514)
init_gpio();

Cái đoạn code đó đâu ???
Bạn ở đâu ? nếu tiện thì có thể đem mạch qua bên mình test thử ? Bên này cũng có nhiều board sử dụng con 33gs va 33mc .

chestnut 02-12-2010 04:02 PM

Trích:

Nguyên văn bởi LeDuc (Post 40525)
Cái đoạn code đó đâu ???
Bạn ở đâu ? nếu tiện thì có thể đem mạch qua bên mình test thử ? Bên này cũng có nhiều board sử dụng con 33gs va 33mc .

Như mình đã nói, chức năng ADC của một pin chỉ anh hưởng tới GPIO ở chế độ input thôi, còn chế độ output thì không vấn đề gì. Mình đã test rồi mà.

Còn vấn đề ở trên bị vì một nguyên nhân là do phần cứng, mình hàn thiếu con trở kéo nguồn của MCLR. Mặc dù hơi tốn time mới phát hiện ra nó, nhưng cũng hay vì biết thêm một lỗi mới, và giúp cộng đồng mai mốt gặp lỗi này mà còn biết đường debug . :D

ak47 04-12-2010 10:44 AM

Trích:

Nguyên văn bởi chestnut (Post 40532)
Như mình đã nói, chức năng ADC của một pin chỉ anh hưởng tới GPIO ở chế độ input thôi, còn chế độ output thì không vấn đề gì. Mình đã test rồi mà.

Còn vấn đề ở trên bị vì một nguyên nhân là do phần cứng, mình hàn thiếu con trở kéo nguồn của MCLR. Mặc dù hơi tốn time mới phát hiện ra nó, nhưng cũng hay vì biết thêm một lỗi mới, và giúp cộng đồng mai mốt gặp lỗi này mà còn biết đường debug . :D

Hay nhỉ !Mình tưởng không kéo trở chân MCRL thì không làm được gì chứ nhỉ.trước mình quên không kéo trở cho con 33MC thì code thế nào cũng chịu ! Khó hiểu thật.


Múi giờ GMT. Hiện tại là 01:03 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam