พิมพ์หน้านี้ - ขอคำปรึกษาเกี่ยวกับโปรเจคครับ

LSVคลังสมองออนไลน์ "ปีที่21"

ห้องโครงงาน - D.I.Y.- เทคโนโลยี่ => ห้องโครงงาน - D.I.Y.- เทคโนโลยี่ => ข้อความที่เริ่มโดย: temfun ที่ พฤษภาคม 27, 2011, 12:59:53 PM



หัวข้อ: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 27, 2011, 12:59:53 PM
ผมทำโปรเจค "สวิทต์สั่งงานด้วยโทรศัพท์มือถือแบบมีเสียงพูดตอบรับ" วงจรทุกอย่างทำเสร็จแล้วครับได้แก่
1.ชุดถอดรหัสสาญญาณDTMF(MT8870)
2.ชุดบันทึกเสียง (ISD25120)
3.ชุดควบคุมรีเลย์ (TIP31C)
4.ชุดประมวลผล (PIC16F877)
การทำงาน
1.เมื่อมีการโทรเข้าจะมีการรับสายและให้ใส่รหัสผ่าน
2.เลือกรายการที่ต้องการทำ "กด1 เปิดสวิท,กด2ปิดสวิท,กด3เปลี่ยนรหัสผ่าน"
แต่ปัญหาติดตรงเขียนโคดให้ PIC16F877 รับสัญญาณดิจิตอลขนาด 4 บิต จากชุดถอดรหัสสัญญาณครับ เลยอยากขอคำปรึกษาครับว่าจะต้องใช้คำสั่งอะไร :D


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: JUB ที่ พฤษภาคม 27, 2011, 06:17:27 PM
โปรเจคระดับชาติเลยนะเนี๊ย.....
ถ้าใช้ pic ทำแค่รับข้อมูล 4 bit มา toggle port ก็ไม่ยาก
แต่ถ้ามีระบบตอบรับด้วยล่ะก็งานใหญ่....

ผมมีคำถามที่อยากรู้
1.ตอนโทรเข้าเราจะรับสายยังไงมีสัญญานเป็นยังไงใช้วงจรแบบไหน
2.ISD25120 ใช้อะไรควบคุมให้เล่นและหยุด.....

 :)


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 27, 2011, 09:03:18 PM
-ขณะโทรเข้า ที่สายไมโคโฟนของโทรศัพท์จะมีไฟประมาณ2โวลท์ และเมื่อกดปุ่มรับก็จะเท่ากับว่าเอาไฟ2โวลท์นี้ลงกราวน์ โทรศัพท์ก็จะรับสายทันที ผมจึงเอาสายนี้ต่อเข้าที่ PIC16f877 แล้วสั่งให้ไมโครคอนโทลเลอร์ไปติกรีเลย์เพื่อรับสาย
-การควบคุมISD25120 ในการบันทึกเสียงผมบันทึกไว้เป็นแท็กพอเล่นจบก็จะหยุดเองในแท็กนั้น การเลื่อกเล่นเล่นสียงที่บันทึกจะใช้2ปุ่ม ผมจะใช้รีเลย์แทนปุ่มกด โดยมีไมโครคอนโทลเลอร์ควบคุม ครับ แต่ตอนนี้ผมยังคิดไม่ออกว่าจะเขียนโคดยังไงให้รับค่าจากวงจรถอดรหัสได้ ถ้าเป็นคีย์แพดก็พอเดาทางออกครับ ขอคำแนะนำด้วยครับ


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: JUB ที่ พฤษภาคม 27, 2011, 10:55:51 PM
งั้น input ก็ไม่ได้มีแค่ DTMF ซิครับ......
ลอง flow chart มาซิครับเผื่อจะช่วยเขียนช่วยบอกให้.....


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 28, 2011, 12:58:02 AM
ผังการเขียนโปรแกรม


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 28, 2011, 01:11:36 AM
ผมได้กำหนดพอร์ทไว้ดังนี้ครับ
#define sw1 PORTB.F7   //ควบคุมรีเลย์ตัวที่1
#define sw2 PORTB.F6   //ควบคุมรีเลย์ตัวที่2
#define sw3 PORTB.F5   //ควบคุมรีเลย์ตัวที่3
#define sw4 PORTB.F4   //ควบคุมรีเลย์ตัวที่4
#define tel PORTB.F3   //ควบคุมรีเลย์รับโทรศัพท์
#define play PORTB.F2   //ควบคุมรีเลย์เล่นเสียง
#define sel PORTB.F1   //ควบคุมรีเลย์เลือกแทร็กที่จะเล่น
พอร์ท A0-A3 รับค่าเลขฐาน2จากชุดถอดรหัสสัญญาณDTMF
พอร์ท A5 กำหนดไว้ให้ตรวจเช็คการโทรเข้า สภาวะปกติมีลอจิกเป็น 0
ท่านอาจารย์ช่วยแนะนำด้วยนะครับ :D


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: kiano♥ ที่ พฤษภาคม 28, 2011, 08:11:27 AM
http://www.datasheetcatalog.org/datasheets/228/268107_DS.pdf

กำหนดให้ PORT-A ต่อกับขา Q1~Q4
แล้วรับสัญญาณตามตารางที่แนบมาด้วย
เช่น...
กด 1 PORT-A จะมีค่าเป็น 0X01
กด * PORT-A จะมีค่าเป็น 0X0B
แล้วค่อยเอาค่าตัวเลขที่รับได้จาก PORT-A มาสั่งงาน
ก็ไม่ได้หรือครับ? หรือว่าลองแล้วแต่ติดปัญหาอย่างอื่น?

ส่วนขา A-5 ที่เอาไว้ตรวจสอบการโทรเข้าก็ให้ใช้พอตอื่นแทน


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 28, 2011, 09:51:24 AM
 TRISB=0;               //กำหนดให้portbเป็นเอาท์พุต
 TRISA.=0xFF;            //กำหนดให้portaเป็นอินพุต
ถ้าผมกำหนดให้ พอร์ทA เป็นอินพุทตามโค๊ดข้างบนแล้ว ผมจะเขียนโค๊ดยังไงให้พอร์ทA เชื่อมต่อกับQ1-Q4ครับ


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 28, 2011, 11:09:28 AM
อาจารย์ทุกท่านช่วยดูโค๊ดตัวนี้ให้หน่อยครับถูกต้องหรือเปล่า

#define sw1 PORTB.F7   //ควบคุมรีเลย์ตัวที่1
#define sw2 PORTB.F6   //ควบคุมรีเลย์ตัวที่2
#define sw3 PORTB.F5   //ควบคุมรีเลย์ตัวที่3
#define sw4 PORTB.F4   //ควบคุมรีเลย์ตัวที่4
#define tel PORTB.F3   //ควบคุมรีเลย์รับโทรศัพท์
#define play PORTB.F2   //ควบคุมรีเลย์เล่นเสียง
#define sel PORTB.F1   //ควบคุมรีเลย์เลือกแทร็กที่จะเล่น
#define sen PORTD.F0   //senแทนPORTD.1 ทำหน้าที่คอยเช็คการโทรเข้า
void main()
{
     unsigned char password[]={1,2,3,4};   //ตั้งค่ารหัสผ่านเก็บไว้ในตัวแปร password
     unsigned char input[4];         //สร้างตัวแปลเก็บค่ารหัสผ่าน
     unsigned int  kp,i;         //สร้างตัวแปร index
     TRISB=0;               //กำหนดให้portbเป็นเอาท์พุต
     TRISA=0xFF;            //กำหนดให้portaเป็นอินพุต
     TRISD=0xFF;            //กำหนดให้portdเป็นอินพุต
     play=0;               //เคลียสถานะการเล่นเสียง
     sel=0;               //เคลียสถานะการเลือกช่องเสียง
     if(sen==0)               //ถ้าsenมีลอจิกเป็น0
     {
   Play=1;               //ให้playมีลอจิกเป็น1
   delay_ms(50);            //หน่วงเวลา50ms
   play=0;               //ให้ยสฟัมีลอจิกเป็น0
     }
     for(i=0;i<4;i++)            //ให้มีการวนลูปนี้4รอบ
     {
      while(!PORTA_scan());         //วนลูปรอการกดปุ่ม
      kp=PORTA_scan();         //สแกนค่าที่ได้จากการกด
      input=PORTA[kp];         //แปลงค่าที่ได้จากPORTAเก็บไว้ที่ตัวแปรindex
      while(key_scan());         //วนลูปรอการปล่อยปุ่ม
      }
      if(input[0]==password[0]&&input[1]==password[1]   //ถ้าค่าตัวเลขรหัสผ่านในตัวแปร input
     &&input[2]==password[2]&&input[3]==password[3])   //และpasswordตรงกัน(รหัสผ่านถูกต้อง)


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: JUB ที่ พฤษภาคม 28, 2011, 12:10:19 PM
ตอนเล่นเสียงระบบตอบรับจะรู้ได้อย่างไรว่าเล่น track ไหนถูกต้องหรือไม่.....
ถ้าเกิดกรณีที่ต้องเล่นซ้ำเล่นวนเล่นแบบเลือก track ทดสอบแล้วหรือยัง...
ถ้ามีการกด key สวนไปในขณะที่ระบบตอบรับทำงานอยู่ จะเกิดข้อผิดพลาดหรือไม่

ที่สำคัญคือต้องแม่นในเรื่อง algorithm เป็นอย่างมาก flow chart ที่เขียนมา
ไม่สามารถแก้ไขข้อผิดพลาดดังกล่าวได้ แต่ทำงานได้หากเงื่อนไขเป็นตามที่กล่าวมา

แบ่งงานครับแยกออกมาทีละส่วนอย่ามองโดยรวม ไม่งั้นงงตาย....
เริ่มจากรับสายแล้วกด password สั่ง relay ให้ได้ก่อน.... ระบบตอบรับไว้ใส่ทีหลัง....

...  :)


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 28, 2011, 12:44:34 PM
ครับผมจะทำตามที่ท่านแนะนำก่อนครับ ขอบคุณครับ


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 28, 2011, 02:53:35 PM
ตอนนี้ยังเขียนโค๊ดให้PORTA รับค่าจากชุดถอดรหัสไม่ถูกครับช่วยแนะนำทีครับ คอมพลายไม่ผ่านครับ ในการอ่านค่าจาก PORTA ใช้จะใช้คำสั่งไหนครับ


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: JUB ที่ พฤษภาคม 28, 2011, 04:40:27 PM
ผมไม่ได้ดูถูกนะ ถ้าแค่นี้ยังทำไม่ได้ step ต่อไปลำบากกว่านี้เยอะครับ....
คงต้องลองไปศึกษาภาษา C ใหม่ล่ะครับ งานนี้.....

ยังไงก็สู้ๆนะ มันไม่เหนือความพยายามเราหรอก....  :)


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 28, 2011, 06:01:25 PM
ขอบคุณครับ ผมไม่รู้จะใช้คำสั่งตัวไหนจริงๆครับ เคยทำแต่อ่านค่าจาก keypad ครับ
ท่านสนใจรับเขียนโค๊ดโปรเจคนี้ไหมครับ หรือว่ามีใครรับเขียนบ้างครับ เพราะมันเป็นงานด่วนครับใกล้กำหนดส่งแล้ว :D


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: nantawut ที่ พฤษภาคม 28, 2011, 07:12:42 PM
ลองไปหาห้องอื่นที่มีคนเล่นเยอะๆสิ อาจช่วยได้
ทำเองเถอะ จ้างทำไม่ได้ความรู้ ไม่ภูมิใจด้วย


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: JUB ที่ พฤษภาคม 28, 2011, 08:22:52 PM
ผมไม่ได้รับครับ แต่ที่นี่รับ

อ้างถึง
********************************************************
รับทำโปรเจค นักศึกษา ปริญญาตรี, ปวช., ปวส.
ไฟฟ้า คอนโทรล อิเล็กทรอนิกส์ สื่อสาร
- รับเขียนโปรแกรม ควบคุม คอนโทรลเลอร์ PIC, MCS, AVR, Zigbee, etc.
เช่น ควบคุมมอเตอร์, เชื่อมต่อ และ ควมคุมเอลซีดี(LCD), คีย์บอร์ด, GSM module
- สอนเขียนโปรแกรม ภาษาซี (C programming), Visual Basic, C++
- รับออกแบบวงจร ออกแบบแผ่นปริ้น(PCB) อิเล็กทรอนิกส์
- รับปรึกษาโปรเจค นักศึกษา ปริญญาตรี, ปวช., ปวส.

ติดต่อได้ที่
สมชาย เทพแพง
087-785-1077
e-mail address : detecter_chy@yahoo.com
หรือ somch_th@hotmail.com
***********************************************************
หรือที่นี่....

http://www.allelecpro.com/product.detail_453703_th_2118556




หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ พฤษภาคม 29, 2011, 11:36:30 AM
ผมไม่ถอยอยู่แล้วครับต้องทำให้ได้ แต่ใกล้ถึงกำหนดส่งงานแล้วครับมีเวลาคิดไม่นานด้วยครับ โค๊ดทั้งหมดผมติดอยู่ที่จุดเดียวครับคือกำหนดให้มีการอ่านค่าจากPORTAที่เชื่อมต่ออยู่กับวงจรถอดรหัสซึ่งส่งข้อมูลออกมานี่หละครับ


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ มิถุนายน 02, 2011, 12:06:11 AM
กลับมาขอคำแนะนำอีกครับ ผมพยายามเขียนโค๊ดออกมาแล้วรับค่าพอเข้าโหมด sw_on: กด1 sw1ทำงาน แต่พอกด2 sw2ทำงาน sw1หยุดทำงานทันทีครับ แต่สิ่งที่ผมต้องการคือถ้ากดเลขใดให้swตำแหน่งนั้นทำงานส่วนตำแหน่งอื่นยังคงสถานะเดิมครับ โค๊ดที่ผมทดลองตอนนี้ครับ
    sw_on:
        {
        while(!portb==1);            //วนลูปรอการกด(ให้portbคอยเช็คการกดปุ่ม)
        if(portd==0x1)sw1=1;     //ถ้ากด1sw1ทำงาน
        if(portd==0x2)sw2=1;
        if(portd==0x3)sw3=1;
        if(portd==0x4)sw4=1;
        if(portd==0x0b)goto RETURN;
        goto sw_on;
        }
จะต้องแก้ไขจุดไหนบ้างครับ :D


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ มิถุนายน 02, 2011, 04:47:45 AM
ตอนนี้ทุกอย่างไปได้ดีแต่ยังติดตรงที่ตอนโทรเข้าครับ กระโดดไปรับไม่ได้ติดที่คำสั่งให้วนลูปรอการกดปุ่ม  cry2!!


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: kiano♥ ที่ มิถุนายน 02, 2011, 10:05:18 AM
ถ้าผมแก้ปัญหาผมจะทำดังนี้

1. กดสวิทช์อื่น แต่สถานะสวิทช์เดิมยังคงค้าสถานะไว้ ต้องกำหนดตัวแปรมาเพื่อเก็บค่าของสวิทช์นั้นๆ
2. ออกจาก LOOP ผมใช้คำสั่ง goto ถ้าคำสั่ง goto ไม่มีในภาษาซี ก็ให้แทรกเป็น ASM เลย ง่ายดี อยากให้โดดไปไหนก็สั่งมันได้เลย


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: JUB ที่ มิถุนายน 02, 2011, 10:58:15 PM
ตอนนี้ทุกอย่างไปได้ดีแต่ยังติดตรงที่ตอนโทรเข้าครับ กระโดดไปรับไม่ได้ติดที่คำสั่งให้วนลูปรอการกดปุ่ม  cry2!!

ต้องแม่นในเรื่อง algorithm ครับ... มองงานให้ขาดและแบ่งเป็น step  :)


หัวข้อ: Re: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
เริ่มหัวข้อโดย: temfun ที่ มิถุนายน 03, 2011, 05:24:02 PM
pic16f877 สามารถโปรแกรมได้กี่ครั้งครับ หลังจากทำเสร็จแล้วทดลองหลายรอบไม่มีปัญหาพอมาแก้โค๊ดเปลี่ยนรหัสใหม่ นำไปลงบอร์ดกลับแสดงสถานะว่ารหัสไม่ถูกต้อง
นำโค๊ดมาจำลองการทำงานในโปรแกรมก็ไม่มีปัญหาอะไร เป็นไปได้ไหมครับว่าpic16f877โปรแกรมหลายครั้งแล้วมีปัญญหาครับ