Pages: [1]   Go Down
Print
Author Topic: รบกวนช่วยดู code ให้หน่อยครับ  (Read 13313 times)
0 Members and 1 Guest are viewing this topic.
deanalysi
Guest
« on: October 06, 2009, 08:02:03 PM »

คือว่าผมลองพยายามเขียน code ccsc
คือว่าต้องการรับ analog input ที่ขา ANO ในช่วง 0-5 V
และ output ออกมาเป็น 2 เท่าของแรงดัน analog ที่ ขา B(digital output) ครับ
ตัวอย่างเช่น รับอนาลอก(AN0)มา 3 V คูณ 2 ได้ 6 แล้วขา B(digital output)จะมีค่าออกมาเป็น 0000 01108 ครับ

และนี่เป็น code ที่ผมลองเขียน

#USE delay(clock=20000000)
#USE fast_io(b)
void main()
{
 int16 Value;
     setup_adc_ports(AN0);                                        // Asign Analog pin
     setup_adc(ADC_CLOCK_INTERNAL);                                     
     SET_TRIS_B( 0xFF );
  While (1)
  {
                   set_adc_channel(0);                           
                   delay_us(1);                                     
                   Value = read_adc();                           
                   B = Value*2
  }
}

คือว่า มันไม่สำเร็จครับ
อยากให้พี่ๆผู้รู้ช่วยแนะนำหน่อยครับ
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #1 on: October 07, 2009, 04:33:59 PM »

ผมว่า คุณน่าจะเข้าใจอะไรผิดไป หน่อย นะครับ ในส่วยของ output ที่ต้องการส่งออก
analog input ผมก็ยังไม่ซึ่งเท่าไหร่ แต่ค่าที่มันเก็บ จะเป็น ช่วง ก็คือ 0-5v จะเก็บค่าความละเอียด(ขึ้นอยู่กับ timer ที่ใช้) เช่น 0-255 ก็คือ ถ้ามีค่า 255 ค่านี้คือ แรงดัน 5 v   ค่า127 ก็คือ 2.5 v ค่า0 ก็คือ 0 v ประมาณนี้

ซึ่งจะนำไป *2 เลย มันก็จะได้เป็น เช่น 255 *2 เท่ากับ 510
จะส่งออก พอร์ต B ยังไงหรือ ส่งแบบ ยก พอร์ต เอา output ไปโชว์ หรือไปทำอะไร หรอครับ

ถ้ายังไง ผมว่า เอาค่าที่อ่านได้ ไปโชว์ ทาง RS-232 หรือ LCD ก่อนดีไหมครับ เราได้รู้ ค่าที่ ได้ มีลักษณะ แบบไหน ยังไง

ผิดพลาดยังไง ขอ อภัยด้วยครับ
Logged
deanalysi
Guest
« Reply #2 on: October 07, 2009, 06:16:51 PM »

ขอบคุณ คุณ s_engine มากครับ
ก็คือว่าจุดประสงค์ผมคือ ส่งค่าแรงดันไปแสดงผมในโปรแกรม labviewครับ
แต่ว่าก็อยากเริ่มจากพื้นฐานก่อนเลยครับ(พอดีผมยังมือใหม่อยู่ครับ)
เลยต้องวัดค่า ADC ให้ออกมาเป็น เลขฐาน 2 ให้ออกก่อนครับ แล้วจึงทำขั้นตอนต่อไป
แต่ ผมก็ไม่ค่อยเข้าใจ code เลยอยากให้พี่ๆแนะนำหน่อยครับ


Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #3 on: October 07, 2009, 11:07:23 PM »

ผมไม่รู้เรื่อง labview เลย เอาเป็น ว่าเคยเขียน PIC ไหม แล้ว โค้ด ติดปัญหา ตรงไหนหรอ
ค่าที่จะส่งให้ labview ต้องการในลักษณะไหน labview เป็น โปรแกรม บน PC ใช่ไหมครับ แล้วการสื่อสาร ระหว่าง PIC กับ labview ใช้การสื่อสารแบบไหน(อันนี้ผมไม่รู้จริงๆ) เช่น RS-232 อะไรประมาณนี้

หลักๆคือ ให้ PIC รับค่า ADC มา แล้วส่งต่อให้ labview
ผมไม่เคยศึกษา labview อยากใช้ ช่วยบอกหน่อย ว่าการรับค่าเป็นการรับลักษณะไหน
ค่าที่ได้จะเอาไปใช้ยังไง

แล้วค่าแรงดันที่ต้องการ นี่คือ แค่ 0-5v ใช่ไหมครับ
ลองดูนะ ติดอะไรก็ถามละกัน ตอบได้ก็จะตอบ ผมก็มือใหม่เหมือนกัน
Logged
deanalysi
Guest
« Reply #4 on: October 08, 2009, 11:16:43 AM »

ผมลองปรับปรุง code ดูแล้วครับ
เป็นดังนี้

#include <18F4550.h>
#device ADC=10
#fuses  HS,NOLVP,NOWDT,NOPROTECT
#use    delay (clock = 20000000)    // Crytal = 20MHz
#use    fast_io(A)
#use    fast_io(B)
//#byte byte_high = 0x1E   // ADRESH
//#byte byte_low  = 0x9E   // ADRESL
int16 ADC1,ADC2;
void main()
{
   //-------------------------------------------------
   set_tris_a(0B11111111);    // 1111 1111    Porta is input
   set_tris_b(0B00000000);    // 0000 0000    Portb is Output
   
   setup_port_a(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   //-------------------------------------------------
   while (TRUE){
         
      set_adc_channel(0);
      delay_ms(100);
      ADC1 = Read_ADC();
      output_b(ADC1);
   }
}

แล้วผมก็ติด LED ให้ RB0-7
เมื่อจ่ายแรงดัน 5v เข้าที่ ขา RA0 ที่เป็น analog ปรากฏว่า RA 3และ RA 4 สว่าง
เมื่อจ่ายแรงดัน 1-4v เข้าที่ ขา RA0 ที่เป็น analog ปรากฏว่า RA 3และ RA 4 กระพริบไปมาสลับกันสองหลอด
ผมเลยงงเลย
จริงๆ 5 V RA0-7 ต้องสว่างทุกหลอดไม่ใช่เหรอครับ
Logged
deanalysi
Guest
« Reply #5 on: October 08, 2009, 01:12:54 PM »

code ข้างบนวัด ADC ได้แล้วครับ ขอบคุณ
คุณ s_engine มากครับ
แต่ก็ยังเหลือ ส่งข้อมูลผ่านเข้าไปใน โปรแกรม Lab View ด้วย USB ครับ
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #6 on: October 08, 2009, 10:17:24 PM »

USB เลยหรอ
แต่ 877 มันไม่มีโมดูล USB แต่มันก็สามารถทำได้ โดยการต่อ FT245 
http://electronics-diy.com/electronic_schematic.php?id=804
ลองดูนะ เขาใช้877 ต่อ usb
แต่ pic ที่มี usb ภายในก็มีหลายเบอร์ เช่น 18F4550 18F2550
ถ้าอยากหาอ่านละก็ เวป inex.co.th เขามี e-book ให้โหลด เป็นหนังสือเกี่ยวกับสื่อสารผ่าน usb
หรือจะเอาตัวอย่างจากเซมิ
http://www.thaimicrotron.com/webboard2/index.php?topic=167.msg465#msg465
Logged
deanalysi
Guest
« Reply #7 on: October 09, 2009, 12:39:20 PM »

คือผมสามารถเชื่อมต่อกับ USB ได้แล้วครับ
ตามกระทู้นี้ http://www.thaimicrotron.com/webboard2/index.php?topic=193.0

ต้องขอบคุณ คุณ s_engine ที่มาช่วยมาตอบข้อสงสัยในกระทู้ก่อน พอดีผมนายไปนานเพิ่งสอบเสร็จเองครับ

คืออยากจะรบกวนถามหน่อยครับว่า
1 .พอจะมีตัวอย่างอะไรก็ได้ใหมครับที่ว่าสามารถส่งข้อมูล จาก pic ไปใน computer ผ่าน USB (เช่น RS232 สามารถส่งข้อมูลเข้าไปใน HyperTerminal ได้แต่ USB ส่งข้อมูลเข้าไปแสดงใน HyperTerminal ไม่ได้ อันนี้ผมเข้าใจถูกป่าวครับ)
ครับคือผมอยากจะทดลองครับว่า PIC ส่งผ่านค่าเข้าไปใน computer ได้จริงหรือเปล่า

2. สมมุติให้ ขาRA0-7 ของ 18F4550 เป็น output ต่อ LED ไว้ แล้วผมกด ปุ่มใดปุ่มหนึ่งใน keybord แล้วสั่งให้ output ที่เป็น LED ติด
ได้หรือไม่โดยที่ PIC กับ computer เชื่อต่อกันด้วย USB
    ถ้าเกิดได้ผมพอจะหาตัวอย่าง code(ccsc) ได้จากใหนครับ
Logged
s_engine
Sr. Member
****
Offline Offline

Posts: 187


« Reply #8 on: October 10, 2009, 09:20:36 AM »

มันเป็นอะไรที่ ปวดหัวพอ สมควร กับ USB
ข้อ 1 ก่อน น่าจะไม่มีครับ การที่จะลอง ก็ต้องลองกับซอฟแวร์ ที่เขียนขึ้นเอง หรือเอาของชาวบ้านมาลอง แล้วก็เปลี่ยนโน้น นี้ไปเรื่อยๆ
ข้อ 2 เขียนมาผิดนึดนึงนะครับ ขาRA มันมีแค่ 5 แต่ผมเข้าใจคำถาม คือให้แสดง led ทั้งพอร์ต คือ 8 ดวง
เคยเขียนโปรแกรมพวก VB C# อะไรพวกนี้ไหม ของ เซมิ มีตัวอย่างทั้ง โค้ด ccs และโปรแกรม C#
จาก ลิ้งค์ที่ให้ไปครั้งก่อน ลองอ่านโค้ดเขาดู จับจุดให้ได้ สุดท้าย ที่มันติดต่อกันได้ ก็แค่คำสั่ง
usb_put_packet(1, dataout, 5, USB_DTS_TOGGLE);    //ส่งดาต้า
usb_get_packet(1, datain, 64);                                     // รับดาต้า
2 คำสั่ง ที่ใช้ส่งข้อมูลที่ต้องการ
ให้ pic ต่อ led 8 ดวง แล้วโปรแกรมเรา เราก็ สร้างปุ่ม 8 ปุ่ม แทน led แต่ละดวง เม้าท์คลิกจากปุ่มที่สร้าง
led ที่ pic ก็จะสว่าง

อย่างที่บอก มันปวดหัวมาก เช็คก็ยาก ไม่รุ้ ส่วนไหน ที่ทำงานผิดพลาด แต่ถ้าเริ่ม สั่ง led ติดดับได้แล้ว ก็สบายละครับ
Logged
Pages: [1]   Go Up
Print
 
Jump to: