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

Re: Fehler in OneWire_Read() Kategorie: IDE (von PeterS - 23.08.2012 14:20)
Als Antwort auf Fehler in OneWire_Read() 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

Ich habe den Fehler gefunden, wird in der nächsten Version behoben.

Gruss Peter


    Antwort schreiben


Antworten: