Hallo!
Ich baue seit einiger Zeit an einer kleinen Kiste die irgendwann mal das
CLIP-Signal meiner Telefonanlage auswerten soll.
Ich benutze dazu einen ATMega16 mit dem CMX602B (hier im Forum gefunden
bei suche nach "clip") und ein Dot-Matrix-Display.
Das Display läuft auch schon wunderbar. Nun stehe ich seit längerem vor
einem Problem:
Der CMX hat ein internes 8-Bit Schieberegister. Wenn das voll ist, wird
eine Leitung auf 0 gezogen und man kann die Bits seriell (durch Takt
anlegen) rausbekommen. Ist ja einfach dachte ich. Als ich das
ausprobiert habe, bekamm ich
1. viel zu wenig Zeichen (ich rechne mit ca. 50, es kamen aber nur 10
oder so...) und
2. waren diese nicht lesbar. (Das Signal sollte mit einigen "U"s
anfangen (10101010) und dann kommt nach ein paar steuerzeichen die
Telefonnummer im ascii-code.)
Das habe ich dann erstmal auf fehler die ich beim programmieren gemacht
habe geschoben. Um zu testen, ob überhaupt gescheite Daten ankommen,
habe ich das interne register ausgeschaltet und die datenleitung (ist
dann eine serielle 1200 baud Übertragung 1 Stoppbit, keine Parität) auf
das UART des ATMegas gelegt. (zusätzlich noch über MAX232 auf den PC)
Auf dem PC war alles super. Ich konnte die Steuerzeichen im Hexeditor
alle wunderbar lesen und auch die tel-nr wurde einwandfrei übertragen.
Aber am ATMega kommt wieder nur müll an.
Ich habe mir dann ein Oszilloskop geliehen um mal das Signal anzusehen.
Die Pegel liegen sauber bei 0/5V. Das einzige was mir aufgefallen ist,
ist das die Bit-Zeit (kein plan ob man das so nennt :) Halt die Zeit,
die ein Bit stabil anliegt) relativ stark schwankt (ca im Bereich 740µs
bis 860µs, sollte eiggentlich auf 833µs sein) aber im Mittel, z.b. über
10 Bit betrachtet nurnoch wenig Abweichung (8.32ms) vorhanden ist. Nun
meine Frage:
Reagiert der ATMega so empfindlich auf schwankngen, oder bin ich einfach
nur unfähig zu Programmieren? ;)
Hier der interressante Teil aus meinem Programm (enthalten, aber
auskommentiert ist auch noch der Teil mit dem manuellen Austakten)
Timer0 macht ein bisschen PWM für die Hintergrundbeleuchtung des
Displays (hab natürlich beim layouten verpennt die PWM-Engine des ATMega
zu benutzen :)
Hallo nochmal.
Mir ist noch was aufegefallen. Ich habe mein Programm so modifiziert,
das die FrameErrors und Data OverRun Errors gezählt werden. Dabei ist
mir aufgefallen, das es zu ein paar Data OverRun Errors kommt. Aber nur
so 1-2 während der übertragung der Daten. Wie kann es überhaupt zu so
einem Fehler kommen, wenn das URD direkt im Interrupt gelesen wird? So
schnell kann doch noch kein neues Byte angekommen sein, oder?
Ich hoffe mir ist noch zu Helfen ;)
Matthias
Hi!
Danke Für deine Antwort :)
Aber die Definition von MYUBBR steht doch so wie ich sie hab im
Datenblatt (S. 151 im C-Example)
Und das stimmt auch mit der Formel UBBR=(Fosc/(16*BAUD))-1 (weiter oben
im Datenblatt) überein, wenn mich meine Mathe-Kenntnisse jetzt nicht im
Stich lassen. Oder habe ich da was Falsch verstanden?
Matthias