Ansteurerung des MT8880C DTMF-Transceivers

M

Marcel Peters

Guest
Hallo.
Mein Line-Interface funktioniert mittlerweile prima. Das Einzige was leider
(noch) nicht klappt ist das Ansteuern des MT8880C. Dieser funktioniert
einwandfrei, da ich mit einem Multimeter am Early Steering-Pin auch
nachmessen kann, dass DTMF-Töne erkannt werden.
Auch wenn ich in dem Chip die Steuer-Register beschreibe "scheint" alles zu
klappt. Danach kann ich mit meinem PIC nämlich den IRQ-Pin auslesen, und
diesen auch per Auslesen des Status-Registers zurücksetzen.
Das einzige was jetzt noch nicht funktioniert ist das Auslesen der Daten,
die vom MT8880C kommen. Vielleicht mache ich da irgendwas grob falsch mit
dem Timing, aber am besten schaut mal einer von euch eben drüber. (Ich
weiß...ich bin nicht in sci.informatik, aber dort gibts kein Topic zu dem
Chip, und hier erscheinen mir die Leute doch recht firm.)

int mt8880_rxd()
{
int result;
set_tris_b(63); (u.a. die pins b0-b3 als eingang schalten (dort hängt der
Datenbus des MT8880C)
output_high(mt8880_phi2); (phi2 habe ich im Moment zum Testen auf CS
gelötet, daher der inverse Pegel)
output_high(mt8880_rw);
output_low(mt8880_rs0);
delay_cycles(3);
output_low(mt8880_phi2);
result=(input_b() && 15);
output_high(mt8880_phi2);
return(result);
}

Und im Main-Teil von dem Programm habe ich den B-Port folgendermaßen
eingestellt:

port_b_pullups(true);
output_b(0);


Mein Problem ist jetzt, das ich immer 1 als Ergebniss der Funktion bekomme.
Am MT8880 kanns nicht liegen, da ich auch wenn ich das Status-Register
auslesen 1 als Ergebniss bekomme.
An der Verbindung PIC <--> MT8880 liegts auch nicht. Die habe ich mehrmals
durchgemessen.


Was läuft da bloß schief?


mfg
 
Das Einzige was leider (noch) nicht klappt ist das Ansteuern des MT8880C.
Was läuft da bloß schief ?
Das IC hat eine wenig einleuchtende Schnittstelle.
An die Details kann ich mich nichtmehr erinnern aber ca.:
Steuerung erfolgt über das 8 Bit (?) Register CR dessen
beide Nibble auf derselben Adresse liegen.
* Zugriff nur auf CRA mit Bit b3 RSEL = 0
* oder sequentieller Zugriff auf CRA und CRB.
Dann bei Zugriff auf CRA Bit b3 RSEL = 1.
Danach Zugriff auf CRB.
Es gibt auch noch andere Gründe warum ich das IC niemehr
verwenden würde. Aber die gehirntote Schnittstelle ist
sicherlich einer.

MfG JRD
 
Die etwas krumme Ansteuerung des 7bit Config-Registers (in je 4bit geteilt,
wobei man im ersten Nibble einstellen kann wo der nächste Schreibzugriff
hingehen soll) ist ja nicht das Problem. Das Problem liegt darin begraben,
das ich dem Chip keine Daten entlocken kann.

mfg

"Rafael Deliano" <Rafael_Deliano@t-online.de> schrieb im Newsbeitrag
news:3FC644AE.97A03668@t-online.de...
Das Einzige was leider (noch) nicht klappt ist das Ansteuern des
MT8880C.
Was läuft da bloß schief ?
Das IC hat eine wenig einleuchtende Schnittstelle.
An die Details kann ich mich nichtmehr erinnern aber ca.:
Steuerung erfolgt über das 8 Bit (?) Register CR dessen
beide Nibble auf derselben Adresse liegen.
* Zugriff nur auf CRA mit Bit b3 RSEL = 0
* oder sequentieller Zugriff auf CRA und CRB.
Dann bei Zugriff auf CRA Bit b3 RSEL = 1.
Danach Zugriff auf CRB.
Es gibt auch noch andere Gründe warum ich das IC niemehr
verwenden würde. Aber die gehirntote Schnittstelle ist
sicherlich einer.

MfG JRD
 
Das Problem liegt darin begraben, das ich dem Chip keine Daten
entlocken kann.
Mein Kommentar hierzu: Listings in der Programmiersprache C
sind nur bedingt hilfreich, da man nie weiß, was der Compiler
daraus macht. Mit Assemblerprogramm testen.
Timing bei Ansteuerung über Ports unkrititsch, da das IC ehedem
am Bus eines Prozessors laufen sollte.

MfG JRD
 

Welcome to EDABoard.com

Sponsor

Back
Top