Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Fehler in OneWire_Read() Kategorie: IDE (von ThomasK - 21.08.2012 21:04)
Ich nutze:
C-Control Pro Mega128
Hallo,

Die OneWire_Read-Funktion hat einen Fehler: bei als Eingang konfigurierten
Pins am gleichen Port wird der Pullup-Widerstand "zufällig" ein- und
ausgeschaltet.

Die Ursache: zum Ermitteln der Werte fĂĽr "Output High" und "Output Low"
wird das PIN-Register des Ports gelesen und später in das PORT-Register
geschrieben.

Ist nun der Pegel an einem anderen Eingangspin High, so wird eine 1 in das
entsprechende PORT-Bit geschrieben und damit der Pullup aktiviert.

Ist der Pegel an einem Eingangspin Low, so wird eine 0 in das entsprechnde
PORT-Bit geschrieben und damit der Pullup abgeschaltet.

Oder am Problem am Beispiel des Beitrags DCF und OneWire_Read() zu zeigen:


PortF.0 ist als Eingang fĂĽr DCF77 mit Pullup konfiguriert. (Externes
Modul mit Openkollektor-Ausgang).

Auf PortF.1 wird ein OneWire_Read() durchgefĂĽhrt.

Ist nun am Anfang von OneWire_Read() der Eingang PortF.0 auf Low (was
nach Tastverhältnis von DCF77 zu mehr als 80% der Zeit so ist), dann
schaltet der OneWire_Read() den Pullup von PortF.0 ab.

Damit ist aber kein Empfang des DCF77-Signals mehr möglich.

Die DCF_INIT() schaltet den Pullup wieder ein - der Empfang funktioniert wieder!

Somit lässt sich das geschilderte Problem eindeutig erklären.

Thomas


    Antwort schreiben


Antworten:

Re: Fehler in OneWire_Read() (von PeterS - 23.08.2012 14:20)