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: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum