Gast
#55254
Hallo. Ich möchte mit meinem PIC16f876A den MT8880C-DTMF-Decoder ( http://assets.zarlink.com/DS/zarlink_MT8880C_APR_03.pdf ) auslesen, d.h. ich will die empfangenen Töne zuerstmal versuchsweiße auf die rs232-schnittstelle zu meinm PC übertragen. RS232 funktioniert. MT8880C funktioniert (Dadurch, das ESt auf High geht wenn ich Tastentöne sende weiß ich das er diese korrekt dekodiert) In den DTMF-Decoder schreiben kann ich scheinbar auch korrekt, denn nachdem ich die Config-Register von dem Ding beschrieben habe kann ich auf den (nun aktivierten) IRQ-Pin reagieren. Das Problem besteht darin, das ich als Ergebniss meines Lesevorganges am MT8880C nur 1 zurückbekomme. Scheinbar stelle ich die I/O-Pins des PIC icht korrekt ein. Den Pin, der z.b. für die Ruferkennung als Eingagn geschaltet ist funktioniert. Darauf kann ich auch reagieren. Allerdings ist diese Leitung auch unidirektional. Nur WIE muss ich die I/o-Pins richtig einstellen? Oder hab ich mich da arg mit dem Timing verhauen? Hier mal ein Code-Schnipsel wie ich das bisher mache: //mt8880c datenleitungen (bidi) #define mt8880_d3 PIN_B3 #define mt8880_d2 PIN_B2 #define mt8880_d1 PIN_B1 #define mt8880_d0 PIN_B0 //mt8880c steuereingänge (register-select u.ä.) #define mt8880_rw PIN_A0 #define mt8880_rs0 PIN_A1 #define mt8880_phi2 PIN_A2 //mt8880c irq-ausgang (funktioniert auch) #define mt8880_irq PIN_B4 //die funktion um aus dem MT8880C zu lesen int mt8880_rxd() { int result; set_tris_b(63); output_low(mt8880_phi2); output_high(mt8880_rw); output_low(mt8880_rs0); delay_cycles(3); output_high(mt8880_phi2); result=(input_b() && 15); output_low(mt8880_phi2); return(result); } //haupt-funktion (nur das portsetup....) void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_counters(RTCC_INTERNAL,RTCC_DIV_2); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a(0); set_tris_b(48); set_tris_c(128); port_b_pullups(15); output_b(0); .... } Ich hoffe mir kann hier jemand helfen. MfG