Em đang làm đề tài về bật tắt rơle từ xa thông qua mạng điện thoại pstn,nghĩa là khi em gọi vào số điện thoại nhà em (ví dụ 058857698),sau khoảng 40s nếu không có ai nhấc máy thì mạch sẽ giả tín hiệu nhấc máy để tổng đài thông thoại,sau đó mạch sẽ phát tiếng "bíp bíp" để báo cho em nhập mật mã(ví dụ 123),nếu mật mã đúng thì mạch sẽ phát lại tiếng "bíp bíp" để báo là đã chuyển sang thao tác bật rơle,sau đó mạch tự động bật rơle và "giả gác máy" để tổng đài ngắt kết nối.Nếu mật mã sai thì mạch giả tín hiệu gác máy và em phải thao tác lại từ đầu .Em định dùng con giải mã dtmf 8888 và vi xử lý 8051.Cho em hỏi là con ic 8888 có cần phải lập trình cho nó không ạ,hay là mình chỉ gắn đúng sơ đồ phần cứng và lập trình cho 8051 là được ạ?Còn về "giả nhấc máy" và "giả gác máy" thì phải kết nối với line điện thoại như thế nào ạ hay là phải có mạch riêng?Xin các anh chỉ giúp em với ạ!
Thông báo
Collapse
No announcement yet.
Giao tiếp 8051 và giải mã dtmf 8888 !
Collapse
X
-
Mình được biết qua rằng mt8888 hay mt8880 thì khá rắc rối về cái vụ giao tiếp giữa MCU và Nó .
Kiểu như giao tiếp LCD và MCU phải khởi tạo
Nếu chỉ receive thì bạn dùng mt8870 dễ hơn không phải khởi tạo ráp là chạy luôn
Reference :
Last edited by rstAkaiIto; 21-11-2009, 17:57.
-
[Document - VI]
http://www.scribd.com/doc/6542563/MT8888-8051 Cái này là một doc cũ ngày xưa mình làm theo nhưng vẫn chưa được
Có thể sai ở đâu đó
[Datasheet]
http://www.datasheetarchive.com/pdf-...DSA-395516.pdf
Ngày xưa dốt tiếng anh không dịch được giờ thử đọc lại datasheet
A software reset must be included at beginning of all program to initialize the control register after power up . The initialization procedure should be implemend 100ms after power up ( gõ lại mỏi tay quá T_T )
Có lẽ dịch là : Để bắt đầu sử dụng thì đầu tiên phải khởi tạo các thanh ghi . Các thủ tục khởi tạo phải sau khi IC có điện 100ms.
1 - Đọc trạng thái thanh ghi :
- Chân RS0 = 1;
- Chân WR = 1;
- Chân RD = 0;
2 - Ghi vào thanh ghi :
- Chân RS0 = 1;
- Chân WR = 0;
- Chân RD = 1;
- Chân b0-b1-b2-b3 = 0 ; ( 4 chân cho về 0 hết )
3 - Ghi phát nữa
- Chân RS0 = 1;
- Chân WR = 0;
- Chân RD = 1;
- Chân b0-b1-b2-b3 = 0 ; ( 4 chân cho về 0 hết )
4 - Ghi phát nữa
- Chân RS0 = 1;
- Chân WR = 0;
- Chân RD = 1;
- Chân b0-b1-b2 = 0 ; ( 4 chân cho về 0 hết ) b3 cho lên 1
5 - Ghi phát nữa
- Chân RS0 = 1;
- Chân WR = 0;
- Chân RD = 1;
- Chân b0-b1-b2-b3 = 0 ; ( 4 chân cho về 0 hết )
6 - Đọc trạng thái
- Chân RS0 = 1;
- Chân WR = 1;
- Chân RD = 0;
====================
Truyền DTMF tones 50ms (đột ngột)/50ms . dừng và thu tín hiệu DTMF
Action 1 # Ghi vào thanh ghi A ( Chế độ tone out , DTMF , IRQ , Chọn thanh ghi B )
- RS0 = 1
- WR = 0
- RD = 1
- B0 = 1
- B1 = 0
- B2 = 1
- B3 = 1
Action 2 # Ghi vào thanh ghi B chế độ burst ( Thấy dịch là nổ tung , chớp nhoáng )
- RS0 = 1
- WR = 0
- RD = 1
- B0 = 0
- B1 = 0
- B2 = 0
- B3 = 0
Action 3 # Ghi vào thanh ghi dữ liệu số ký tự ( Số để send ) . cái ví dụ này là số 7
- RS0 = 0
- WR = 0
- RD = 1
- B0 = 1
- B1 = 1
- B2 = 1
- B3 = 0
Action 4 # Đợi đến khi ngắt hoặc chờ thanh ghi trạng thái
Action 5 # Đọc thanh ghi trạng thái
- RS0 = 0
- WR = 1
- RD = 0
Action 6 # Chọn
Nếu như bit 1 được bật , Tx sẵn sàng cho phím tone tiếp theo . phun tiếp phím 5 lên đường dây điện thoại
- RS0 = 0
- WR = 0
- RD = 1
- B0 = 1
- B1 = 0
- B2 = 1
- B3 = 0
Nếu bit 2 được bật , có tín hiệu DTMF thu về ( Sướng , làm cốc cafe đã ) , đọc tín hiệu từ thanh ghi nhận được :
- RS0 = 0
- WR = 1
- RD = 0
{Nếu cả hai bit được bật ( tham
# Mấy chân này cho thằng vi xử lí đọc
- B0 = z
- B1 = z
- B2 = z
- B3 = z
}
) Đọc tín hiệu thu được
Đọc dữ liệu phát
- RS0 = 0
- WR = 1
- RD = 0
{
# Mấy chân này cho thằng vi xử lí đọc
- B0 = z
- B1 = z
- B2 = z
- B3 = z
}
rồi bắn tiếp phát nữa ( Ví dụ số 5 )
- RS0 = 0
- WR = 0
- RD = 1
- B0 = 1
- B1 = 0
- B2 = 1
- B3 = 0
==========================
Chốt lại vẫn chưa làm được , trong diễn đàn có ai làm thành công cái này chưa ?Last edited by rstAkaiIto; 22-11-2009, 14:27.
Comment
-
Nguyên văn bởi girl_me_chip Xem bài viếthíc,cái đề tài của em vừa phát vừa thu dtmf nên bắt buộc phải dùng 8888 rồi.Không biết cái mạch điều khiển relay để giả nhấc máy và giả gác máy như thế nào ạ,kết nối với 8051 ra sao và còn lập trình khởi tạo cho 8888 như thế nào ạ ?
[Update]
Chán quá , cafe tí đã
Comment
-
[code] @ Của một lão nào đó bên tàu khựa
OSCCON = $60 ' Set up internal oscillator
CS var portb.4 'Enable or disable MT8888 tied to ground
RD var portb.5 'Read Microprocessor input
WR var portb.6 'Write Microprocessor input
RS var portb.7 'Register Select
TRISB = %00000000 'Set portb to output
portb = %11000000
portb = %10100000
portb = %10100000
portb = %10101000
portb = %10100000
portb = %11000000
pause 10
Send_DTMF:
portb = %10101101 'Set up Control Register A
pause 1 'Wait 1 millisecond
portb = %10100000 'Set up Control Register B
pause 1 'Wait 1 millisecond
portb = %01100000 'Set WR, RD high CS and RS0 and rest of portb low
pause 1 'Wait 1 millisecond
portb = %00000110 'Send digit = 6
pause 10 'wait 10 milliseconds
low WR 'Take portb pin 6 low
pause 10 'wait 10 milliseconds
high WR 'take portb pin 6 high
Goto Send_DTMF 'loop forever
End
[Code] bằng attini (Lỗi : Quay sai số)
[Code Url ] http://dientuvietnam.net/forums/showthread.php?t=8411
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.24.6 Professional
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com
Project :
Version :
Date : 10/30/2007
Author : F4CG
Company : F4CG
Comments:
Chip type : ATtiny2313
Clock frequency : 8.000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
************************************************** ***/
#include <tiny2313.h>
#include <delay.h>
#define RS0 PORTD.3
#define N_WR PORTD.2
#define N_RD PORTD.5
#define PORT_DTMF PORTB
#define DDR_DTMF DDRB
// Standard Input/Output functions
#include <stdio.h>
void MT8888_Init(void);
void Setup_DTMF(void);
void Transmit(char num);
void MT8888_Init()
{
DDR_DTMF=0x0f;
PORT_DTMF=0x0f;
//1.doc thanh ghi trang thai
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_RD=0;
delay_us(1);
N_RD=1;
//2.ghi thanh ghi dieu khien
PORT_DTMF=0x00;
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_WR=0;
delay_us(1);
N_WR=1;
//3.ghi thanh ghi dieu khien
PORT_DTMF=0x00;
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_WR=0;
delay_us(1);
N_WR=1;
//4.ghi thanh ghi dieu khien
PORT_DTMF=0x08;
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_WR=0;
delay_us(1);
N_WR=1;
//5.ghi thanh ghi dieu khien
PORT_DTMF=0x00;
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_WR=0;
delay_us(1);
N_WR=1;
//6.doc thanh ghi trang thai
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_RD=0;
delay_us(1);
N_RD=1;
}
void Setup_DTMF()
{
//1.ghi thanh ghi dieu khien A(tone out,DTMF,IRQ,chon thanh ghi B)
PORT_DTMF=0x0D;
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_WR=0;
delay_us(1);
N_WR=1;
//2.ghi thanh ghi dieu khien B(burst mode)
PORT_DTMF=0;
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_WR=0;
delay_us(1);
N_WR=1;
}
void Transmit(char num)
{
char result;
//1.ghi du lieu len thanh ghi phat
DDR_DTMF=0x0f;
delay_us(10);
PORT_DTMF=num;
RS0=0;
N_WR=1;
N_RD=1;
delay_us(1);
N_WR=0;
delay_us(1);
N_WR=1;
result=0;
DDR_DTMF=0x00;
//delay_ms(120);
while(result!=2)
{
//doc thanh ghi trang thai
RS0=1;
N_WR=1;
N_RD=1;
delay_us(1);
N_RD=0;
result=(PINB & 0x02);
delay_us(1);
N_RD=1;
};
//delay_ms(1000);
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x0F;
// Port D initialization
// Func6=In Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In
// State6=T State5=0 State4=0 State3=0 State2=T State1=T State0=T
PORTD=0xff;
DDRD=0xff;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
MT8888_Init();
delay_ms(120);
Setup_DTMF();
delay_ms(10);
while (1)
{
// Place your code here
Transmit(0x0a);
Transmit(0x09);
Transmit(0x01);
Transmit(0x04);
Transmit(0x06);
Transmit(0x03);
Transmit(0x06);
Transmit(0x05);
Transmit(0x06);
Transmit(0x08);
delay_ms(20000);
};
}
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Tiếng Anh cho người Việtbởi vi van phamNhững lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).
Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 21:31 -
-
Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )bởi bqvietThiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.Hôm qua, 17:22
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.
Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 11:52 -
-
Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )bởi vi van phamUống rượu 1 mình, thấy trang này nhớ lại cách đây vài chục năm hàn thiếc với inox cực kỳ khó, phải dùng acid Hcl tác dụng lên kẻm Zn để có Zncl2 làm thuốc trợ hàn, lúc đó làm gì có acid Hcl và thuốc trợ hàn?
Cái khó bó cái...19-02-2025, 23:05 -
Trả lời cho Tiếng Anh cho người Việtbởi nhathung1101Nếu chú tâm thì học tiếng Việt cũng đủ rồi, thừa sức làm việc rồi.
Học tiếng Anh cũng chỉ phụ trợ để đọc thêm tài liệu, hướng dẫn.
Nhưng có hiểu điều đó không mới là vấn đề. Khi mà học ngoại ngữ để đi đạp xích lô đón khách???...-
Channel: Tâm tình dân kỹ thuật
19-02-2025, 21:27 -
-
bởi xenopus123Cần hỗ trợ mạch đồng hồ vạn niên 89c52 ds1302 ds18b20 dùng 16 led 7 đoạn
-
Channel: Hỗ trợ học tập
19-02-2025, 21:24 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nhathung1101Nhìn kỹ hàng đi cu. Chứ ra đường cứ thấy đàn bà rồi bảo:
- Tôi cũng có vợ như thế....
Đảm bảo cu nát người luôn....-
Channel: Điện tử dành cho người mới bắt đầu
19-02-2025, 21:04 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi matnetgia99Ồ, cái này mình cũng có nè, có ai mua không, đồ cũ dùng từ năm 2008, hư 1 2 giai gì đấy bỏ xó hơn năm nay...
-
Channel: Điện tử dành cho người mới bắt đầu
17-02-2025, 14:40 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80À, sản phẩm họ thiết kế ra, họ yêu cầu mình chứng minh là sau chỉnh sửa thì 1 là gỡ jump cắm lại không hư mạch, 2 là gỡ jump thì 220Vdc vẫn dùng được led áp thấp 20V mà không hư led như mình báo, nên họ hiểu rõ mà....
-
Channel: Điện tử công suất
17-02-2025, 06:08 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Tôi biết và tôi biết.
Sẽ bắt đầu với cái Sồn La, rồi mấy mạch nguồn vớ vỉn.... Rồi sẽ đèn led...
Cuộc đời là những chuyến xe, nên sẽ có:
Xe đạp điện, xe máy điện, xe ô tô điện, xe cấp cứu điện, xe tang điện.
Rồi xem.-
Channel: Điện tử công suất
17-02-2025, 01:38 -
Comment