Fehler in OneWire_Read() Kategorie: IDE (von ThomasK - 21.08.2012 21:04) | ||
| ||
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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum