หัวข้อ: ขอคำปรึกษาเกี่ยวกับโปรเจคครับ เริ่มหัวข้อโดย: 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โปรแกรมหลายครั้งแล้วมีปัญญหาครับ |