Pages: [1]   Go Down
Print
Author Topic: เปรียบเทียบA/Dของ 18f8720 กับ 18f252 ให้ทีค๊าบบบ  (Read 13431 times)
0 Members and 6 Guests are viewing this topic.
zhexior
มาใหม่
*
Offline Offline

Posts: 4


« on: August 26, 2011, 06:20:48 PM »

พอดีผมซื้อหนังสือ AdvancePic Microcontroller in C  ของ I-Style มา แล้วอยากรู้เกี่ยวกับการวัดไฟน่ะคับ พอดีในหนังสือมันใช้เบอร์ 18f252 แต่ส่วนตัวผมมีโมดูล 18f8720 อยู่ ก็เลยว่าจะทำดู(ทำในProteus) ตามขั้นตอนทุกอย่าง ของเบอร์ 18f252 ใช้ได้ปรกติ แต่ของเบอร์ 18f8720 ดันไม่ออก Huh ก็เลย งงๆ Undecided A/D ก็ขนาด 10 bit เหมือนกัน แล้วทำไมใช้ไม่ได้ ค้นใน datasheat ก็เลยเจอ ว่ามันใช้คนละความถี่กัน ของ 18f8720 ใช้ 25MHz แต่ของ 18f252 ใช้4MHz  ผมก็เลยลองเปลี่ยนดู แต่ก็ยังไม่ได้เหมือนเดิม Angry รบกวนผู้รู้ช่วยด้วยค๊าบบ  Huh
Logged
MicroX
Global Moderator
Full Member
*****
Offline Offline

Posts: 103


Senior


Email
« Reply #1 on: August 26, 2011, 07:18:01 PM »

การเปลี่ยนเบอร์ MCU นั้นนอกจากจะดูเรื่องขาใช้งานแล้ว ยังต้องดูเรื่อง fuse ด้วยครับ
โดยเฉพาะตัวที่สามรถใช้ PLL ได้จะยุ่งยากเป็นพิเศษทั้ง 18f252 ,18f8720 ก็มีคุณสมบัตินี้ด้วย
คุณลองดูในหนังสือของ I-Style ว่ามีหลักการเซ็ตอย่างไร

Logged
zhexior
มาใหม่
*
Offline Offline

Posts: 4


« Reply #2 on: August 27, 2011, 09:26:39 AM »

ไม่ใช่เทียบซะทีเดียวหรอกคับ คือ ผมแค่อยากรู้วิธีใช้งาน A/D  ของ 18f8720 น่ะคับ ที่เป็นตอนนี้ คือมันไม่ได้รับค่าไรเลยจากคำสั่ง result = Adc_Read(0); เลยน่ะคับ ถ้ายังไงช่วยแนะนำต่อด้วยนะคับ Cry

void main()
{
     unsigned int result;
     unsigned char display[4];
     TRISA=0xFF;
     TRISC=0;
     Lcd_Init(&PORTC);
     Lcd_Cmd(LCD_CLEAR);
     Lcd_Cmd(LCD_CURSOR_OFF);
     while(1)
     {
             Lcd_Cmd(LCD_CLEAR);
             result=Adc_Read(0);
             display[0]=(result/1000)+48;
             display[1]=((result%1000)/100)+48;
             display[2]=(((result%1000)%100)/10)+48;
             display[3]=(((result%1000)%100)%10)+48;
             Lcd_Out(1,1,display);
             delay_ms(500);
     }
}
Logged
MicroX
Global Moderator
Full Member
*****
Offline Offline

Posts: 103


Senior


Email
« Reply #3 on: August 27, 2011, 11:27:38 PM »


หากใช้ได้กับ 18f252 ก็ถือว่าลักษณะของคำสั่งน่าจะถูกต้องแล้วนะครับ ส่วนใช้ไม่ได้กับ 18f8720 นั้นก็น่าจะเป็นที่โครงสร้าง
ส่วนทำงานบน Proteus ไม่ได้ ก็ไม่ได้สรุปว่ามันจะ ต่อใช้งานจริงไม่ได้เสมอไปนะครับ เพราะ Proteus เองก็มีข้อจำกัด
ผมเองก็ไม่ได้ถนัด MikroC ซะด้วย ต้องขอโทษด้วยครับ คงต้องรอท่านอื่นช่วยชี้แนะ
Logged
zhexior
มาใหม่
*
Offline Offline

Posts: 4


« Reply #4 on: August 28, 2011, 03:34:01 AM »

ขอบคุณมากครับ  Cheesy เด่วจะลองพยายามอีกสักหน่อย เผื่อจะเจอวิธี  Angry
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #5 on: August 31, 2011, 02:39:48 PM »

ใช้ คอมไพเลอร์ตัวไหนครับ ผมยกตัวอย่าง CCS นะครับ
1.กำหนด ความละเอียดของ analog หรือยัง   #device adc=10 //ค่าที่อ่านได้10bit
2.กำหนดตัวแปรที่จะเก็บ                             int result; 
3.set port ให้เป็น analog                      setup_adc_port(AN0); //ให้ขา AN0 เป็น analog เท่านั้น
4.ให้อ่านจากช่องไหนหละทีนี้                       set_adc_chanel(0);  //อ่านค่าจาก ช่อง0 ในที่นี่คือ AN0
5.หน่วงเวลาสักนิด                                    delay_us(10);           //เพื่อเตรียมตัว
6.อ่านค่าจากช่อง0                                   result=read_adc();
7.โชว์                                                   printf("read analog=%d",result);

ถ้าต่อช่องอื่น หละ ทำไง ถ้าอ่านสองช่องหละทำไง ตัวเลขที่ lcd ไม่นิ่งอ่านไม่ทันทำไง

ปล. ที่เขียนให้ดูเป็นแค่แนวทางเท่านั้น ไม่รู้พิมพ์ถูกไหม

Logged
XRZ_Mazmello
มาใหม่
*
Offline Offline

Posts: 5


Email
« Reply #6 on: September 02, 2011, 06:47:56 AM »

ผมเพิ่งจะมาใหม่

ขออนุญาต ตอบหน่อยนะครับ

ผมเคยใช้ mikroc กับ 16f877a ในการอ่าน adc ทั้งอนาลอก และดิจิตอล
ผมคิดว่าน่าจะเพิ่ม ตรงที่   ADCON1=0xFD;

เมื่อ0xFD = 11111101
บิท7 เป็นการเลือกการเก็บผลลัพธ์ adc แบบ 10 บิท 1=right justifiled   0=left justified
บิท6 ใช้เลือกความถี่สัญญานนาฬิกาในการแปลง ร่วมกับ adcon0 เช่นความถี่จากคริสตอลหาร4 หาร16 เป็นต้น
บิทที่5-4 ไม่ใช้
บิที่3-0  ใช้ในการเลือกขา AN อินพุต  ยกตัวอย่าง 1101 ขา AN0 AN1 เป็นแบบอนาลอก  ขา AN2 AN3 เป็น vref เพิ่มเป็นแรงดันอ้างอิง
             ขา AN4- AN7 เป็นแบบดิจิตอล (อย่างเช่น DS1820)

หรือเลือก 11110100 
       ขา AN0 AN1 AN3 เป็นอนาลอก ที่เหลือเป็นดิจิตอล vref ใช้อ้างอิงจากแหล่งจ่ายไฟของ pic  เป็นต้น

จากตัวอย่างของคุณ อ่านค่า ADC ที่ขา AN0 เป็นแบบอนาลอก  โดยคิดว่าน่าจะเทียบไฟ vref- + กับไฟเลี้ยงของ pic

ก็ลองเพิ่มบรรทัด  ADCON1=0xF4;  เข้าไปในฟังก์ชั่นเมน ดูนะครับ

ผิดพลาดประการใด รอท่านอึ่นมาชี้แนะครับ....
Logged
gundam
Global Moderator
Hero Member
*****
Offline Offline

Posts: 292



« Reply #7 on: September 02, 2011, 07:52:12 AM »

ผมก็ใช้เป็นแต่ CCS ครับ มีคนใช้ mikroc เป็นมาช่วยตอบ บอร์ดนี้จะได้หลากหลายครับ
ขอบคุณครับ
« Last Edit: September 02, 2011, 08:33:00 AM by gundam » Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #8 on: September 03, 2011, 05:05:35 PM »

ผมเพิ่งจะมาใหม่

ขออนุญาต ตอบหน่อยนะครับ


ไม่ต้องขออนุญาต หรอกครับ

ยินดี และดีใจ ที่ พวกเราจะได้รับความรู้อย่างหลากหลาย จะเสริม จะแทรก จะแย้ง เห็นต่าง หรือ เห็นชอบ ดี ทั้งนั้น ครับ

ผมยัง ไม่เคยลงลึกถึงขนาด config bit ค่าย ccs เขา build in funtion มาให้ใช้งาน ง่ายๆ เลยลำบากนิดหน่อย เวลเจอบางงาน ที่ ฟังก์ชัน ให้มาไม่รองรับพอ  Cry
Logged
zhexior
มาใหม่
*
Offline Offline

Posts: 4


« Reply #9 on: September 11, 2011, 04:38:55 PM »

อ่า ตอนนี้เปลี่ยนเป็น mplab แล้วคับ พอดีมีdemoที่มันเป็นของ8720 แล้วก็ใช้ได้แบบไม่มีปัญหา โปรแกรมลงบอร์ดเสร็จแล้วเหลือแค่เขียนVB มาซับพอร์ต
แต่ผมยังไม่รู้เลยว่าจะเขียนยังไง Huh ขอบคุณที่คนที่ให้คำแนะนำครับ Kiss
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #10 on: September 17, 2011, 09:03:16 AM »

ไ่รู้จะเขียนยังไง คือHuh? Huh Huh Huh

สื่อสารระหว่าง pic กับ computer ได้หรือยังครับ
Logged
Pages: [1]   Go Up
Print
 
Jump to: