ขอคำปรึกษาเกี่ยวกับโปรเจคครับ
LSVคลังสมองออนไลน์ "ปีที่14"
พฤศจิกายน 30, 2024, 01:37:14 pm *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
 
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ  (อ่าน 15876 ครั้ง)
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« เมื่อ: พฤษภาคม 27, 2011, 12:59:53 pm »

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


บันทึกการเข้า

JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #1 เมื่อ: พฤษภาคม 27, 2011, 06:17:27 pm »

โปรเจคระดับชาติเลยนะเนี๊ย.....
ถ้าใช้ pic ทำแค่รับข้อมูล 4 bit มา toggle port ก็ไม่ยาก
แต่ถ้ามีระบบตอบรับด้วยล่ะก็งานใหญ่....

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

 Smiley
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #2 เมื่อ: พฤษภาคม 27, 2011, 09:03:18 pm »

-ขณะโทรเข้า ที่สายไมโคโฟนของโทรศัพท์จะมีไฟประมาณ2โวลท์ และเมื่อกดปุ่มรับก็จะเท่ากับว่าเอาไฟ2โวลท์นี้ลงกราวน์ โทรศัพท์ก็จะรับสายทันที ผมจึงเอาสายนี้ต่อเข้าที่ PIC16f877 แล้วสั่งให้ไมโครคอนโทลเลอร์ไปติกรีเลย์เพื่อรับสาย
-การควบคุมISD25120 ในการบันทึกเสียงผมบันทึกไว้เป็นแท็กพอเล่นจบก็จะหยุดเองในแท็กนั้น การเลื่อกเล่นเล่นสียงที่บันทึกจะใช้2ปุ่ม ผมจะใช้รีเลย์แทนปุ่มกด โดยมีไมโครคอนโทลเลอร์ควบคุม ครับ แต่ตอนนี้ผมยังคิดไม่ออกว่าจะเขียนโคดยังไงให้รับค่าจากวงจรถอดรหัสได้ ถ้าเป็นคีย์แพดก็พอเดาทางออกครับ ขอคำแนะนำด้วยครับ
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #3 เมื่อ: พฤษภาคม 27, 2011, 10:55:51 pm »

งั้น input ก็ไม่ได้มีแค่ DTMF ซิครับ......
ลอง flow chart มาซิครับเผื่อจะช่วยเขียนช่วยบอกให้.....
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #4 เมื่อ: พฤษภาคม 28, 2011, 12:58:02 am »

ผังการเขียนโปรแกรม
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #5 เมื่อ: พฤษภาคม 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
ท่านอาจารย์ช่วยแนะนำด้วยนะครับ Cheesy
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #6 เมื่อ: พฤษภาคม 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 ที่เอาไว้ตรวจสอบการโทรเข้าก็ให้ใช้พอตอื่นแทน
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #7 เมื่อ: พฤษภาคม 28, 2011, 09:51:24 am »

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

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #8 เมื่อ: พฤษภาคม 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ตรงกัน(รหัสผ่านถูกต้อง)
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #9 เมื่อ: พฤษภาคม 28, 2011, 12:10:19 pm »

ตอนเล่นเสียงระบบตอบรับจะรู้ได้อย่างไรว่าเล่น track ไหนถูกต้องหรือไม่.....
ถ้าเกิดกรณีที่ต้องเล่นซ้ำเล่นวนเล่นแบบเลือก track ทดสอบแล้วหรือยัง...
ถ้ามีการกด key สวนไปในขณะที่ระบบตอบรับทำงานอยู่ จะเกิดข้อผิดพลาดหรือไม่

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

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

...  Smiley
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #10 เมื่อ: พฤษภาคม 28, 2011, 12:44:34 pm »

ครับผมจะทำตามที่ท่านแนะนำก่อนครับ ขอบคุณครับ
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #11 เมื่อ: พฤษภาคม 28, 2011, 02:53:35 pm »

ตอนนี้ยังเขียนโค๊ดให้PORTA รับค่าจากชุดถอดรหัสไม่ถูกครับช่วยแนะนำทีครับ คอมพลายไม่ผ่านครับ ในการอ่านค่าจาก PORTA ใช้จะใช้คำสั่งไหนครับ
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #12 เมื่อ: พฤษภาคม 28, 2011, 04:40:27 pm »

ผมไม่ได้ดูถูกนะ ถ้าแค่นี้ยังทำไม่ได้ step ต่อไปลำบากกว่านี้เยอะครับ....
คงต้องลองไปศึกษาภาษา C ใหม่ล่ะครับ งานนี้.....

ยังไงก็สู้ๆนะ มันไม่เหนือความพยายามเราหรอก....  Smiley
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #13 เมื่อ: พฤษภาคม 28, 2011, 06:01:25 pm »

ขอบคุณครับ ผมไม่รู้จะใช้คำสั่งตัวไหนจริงๆครับ เคยทำแต่อ่านค่าจาก keypad ครับ
ท่านสนใจรับเขียนโค๊ดโปรเจคนี้ไหมครับ หรือว่ามีใครรับเขียนบ้างครับ เพราะมันเป็นงานด่วนครับใกล้กำหนดส่งแล้ว Cheesy
บันทึกการเข้า
nantawut
Full Member
member
**

คะแนน36
ออฟไลน์ ออฟไลน์

กระทู้: 508


« ตอบ #14 เมื่อ: พฤษภาคม 28, 2011, 07:12:42 pm »

ลองไปหาห้องอื่นที่มีคนเล่นเยอะๆสิ อาจช่วยได้
ทำเองเถอะ จ้างทำไม่ได้ความรู้ ไม่ภูมิใจด้วย
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #15 เมื่อ: พฤษภาคม 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


บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #16 เมื่อ: พฤษภาคม 29, 2011, 11:36:30 am »

ผมไม่ถอยอยู่แล้วครับต้องทำให้ได้ แต่ใกล้ถึงกำหนดส่งงานแล้วครับมีเวลาคิดไม่นานด้วยครับ โค๊ดทั้งหมดผมติดอยู่ที่จุดเดียวครับคือกำหนดให้มีการอ่านค่าจากPORTAที่เชื่อมต่ออยู่กับวงจรถอดรหัสซึ่งส่งข้อมูลออกมานี่หละครับ
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #17 เมื่อ: มิถุนายน 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;
        }
จะต้องแก้ไขจุดไหนบ้างครับ Cheesy
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #18 เมื่อ: มิถุนายน 02, 2011, 04:47:45 am »

ตอนนี้ทุกอย่างไปได้ดีแต่ยังติดตรงที่ตอนโทรเข้าครับ กระโดดไปรับไม่ได้ติดที่คำสั่งให้วนลูปรอการกดปุ่ม  cry2!!
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #19 เมื่อ: มิถุนายน 02, 2011, 10:05:18 am »

ถ้าผมแก้ปัญหาผมจะทำดังนี้

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

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #20 เมื่อ: มิถุนายน 02, 2011, 10:58:15 pm »

ตอนนี้ทุกอย่างไปได้ดีแต่ยังติดตรงที่ตอนโทรเข้าครับ กระโดดไปรับไม่ได้ติดที่คำสั่งให้วนลูปรอการกดปุ่ม  cry2!!

ต้องแม่นในเรื่อง algorithm ครับ... มองงานให้ขาดและแบ่งเป็น step  Smiley
บันทึกการเข้า
temfun
member
*

คะแนน5
ออฟไลน์ ออฟไลน์

กระทู้: 226



อีเมล์
« ตอบ #21 เมื่อ: มิถุนายน 03, 2011, 05:24:02 pm »

pic16f877 สามารถโปรแกรมได้กี่ครั้งครับ หลังจากทำเสร็จแล้วทดลองหลายรอบไม่มีปัญหาพอมาแก้โค๊ดเปลี่ยนรหัสใหม่ นำไปลงบอร์ดกลับแสดงสถานะว่ารหัสไม่ถูกต้อง
นำโค๊ดมาจำลองการทำงานในโปรแกรมก็ไม่มีปัญหาอะไร เป็นไปได้ไหมครับว่าpic16f877โปรแกรมหลายครั้งแล้วมีปัญญหาครับ
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2006, Lewis Media

lsv2555Please follow the new website at https://www.pohchae.com

Valid CSS!