ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
136666
Techmike (30.10.2008 11:59, просмотров: 1555)
Не получается работать с mt8888. Подключил по схеме из датащита к mega16, на вход подаю сигнал с телефонной линии МГТС, через понижающий трансформатор и последовательно в первичной обмотке кондер 0.47мкф. После подачи питания на кварце частота 3.5мгц с амплитудой 1.8в., т.е. микруха запускается и выдает в течение трех секунд на выходе (D0,D1,D2,D3) значения 1 2 3, задерка перед инициализацией 8888 210мс. НО при подаче сигнала на вход на выходе ничего не меняется, на IRQ всегда лог1. Библиотеку использую иносранца одного: /*------------------------------------------------------------------+ - File Name : cm8888_drv.c - - Module Name : DTMF Detector Driver - - Description : define subroutines for DTMF Detector - - Last Update : 11/07/2005 - 2.1 (PINOUT REVISION) - - 06/07/2005 - 2.0 - - Author : Daniel Widyanto (kunilkuda@yahoo.com) - - Ivan Christian (chris.ivan@gmail.com) - +------------------------------------------------------------------*/ #include "port.h" void init_DTMF(void) { // 1st Init: after power up DDR_DTMF = 0xFF; PORT_DTMF |= _BV(RS0) | _BV(N_RD) | _BV(N_WR); PORT_DTMF &= ~_BV(N_CS); PORT_DTMF &= ~_BV(D3) & ~_BV(D2) & ~_BV(D1) & ~_BV(D0); // 1. Read Status Register PORT_DTMF &= ~_BV(N_RD); asm("nop"::); PORT_DTMF |= _BV(N_RD); asm("nop"::); // 2. Select CRA PORT_DTMF &= ~_BV(N_WR); asm("nop"::); PORT_DTMF |= _BV(N_WR); asm("nop"::); // 3. Write CRA PORT_DTMF &= ~_BV(N_WR); asm("nop"::); PORT_DTMF |= _BV(N_WR); asm("nop"::); // 4. Select CRB PORT_DTMF |= _BV(D3); PORT_DTMF &= ~_BV(N_WR); asm("nop"::); PORT_DTMF |= _BV(N_WR); asm("nop"::); // 5. Write CRB PORT_DTMF &= ~_BV(D3); PORT_DTMF &= ~_BV(N_WR); asm("nop"::); PORT_DTMF |= _BV(N_WR); asm("nop"::); // 6. Read Status Register PORT_DTMF &= ~_BV(N_RD); asm("nop"::); PORT_DTMF |= _BV(N_RD); asm("nop"::); // 2nd Init: set up operating mode // Mode: IRQ enable, DTMF mode, Tone Off // (already set up on 1st Init. Do the change for other mode) } unsigned char read_stat(void){ unsigned char result; DDR_DTMF = 0xF0; PORT_DTMF |= _BV(RS0) | _BV(N_RD) | _BV(N_WR); PORT_DTMF &= ~_BV(N_CS); PORT_DTMF &= ~_BV(N_RD); asm("nop"::); result = (PINC & 0x0F); asm("nop"::); PORT_DTMF |= _BV(N_RD); asm("nop"::); return result; } unsigned char scan_DTMF(void){ unsigned char result; DDR_DTMF=0xF0; PORT_DTMF |= _BV(N_RD) | _BV(N_WR); PORT_DTMF &= ~_BV(N_CS) & ~_BV(RS0); PORT_DTMF &= ~_BV(N_RD); asm("nop"::); result = (PINC & 0x0F); asm("nop"::); PORT_DTMF |= _BV(N_RD); asm("nop"::); switch (result) { case 0x0A : result = '0'; break; case 0x0B : result = '*'; break; case 0x0C : result = '#'; break; default : result += '0'; } return result; }