Antworten

Der Beitrag verursachte die folgenden Fehler, die behoben werden müssen:
Achtung: In diesem Thema wurde seit 120 Tagen nichts mehr geschrieben.
Wenn Sie nicht absolut sicher sind, dass Sie hier antworten möchten, starten Sie ein neues Thema.
Einschränkungen: 8 pro Beitrag (8 verbleibend), maximale Gesamtgröße 8,79 MB, maximale Individualgröße 1 MB
Entfernen Sie den Haken der Dateianhänge, die gelöscht werden sollen
Klicken Sie hier oder ziehen Sie Dateien hierher, um sie anzuhängen.
Anhänge und andere Optionen
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Zusammenfassung

Autor Peter
 - 08.12.2022, 13:09:42 CET
Werde mir mal die Zeiten anschaun. Ist ja nicht der erste den ich verbaue und
nur bei dem gibt es Probleme. Werde mal die Übertragung zum Sensor mit loggen und
schauen ob ich da was sehe.
Benutze ja die eigenen Librarys die im Compiler drin sind für das 1-Wire Protokoll. Und damit gbt
es eigentlich keine Probleme und auch keine Zeitprobleme. Ich glaube nicht das es ein Timeing problem
ist aber werde es auch überprüfen.
Autor pic18
 - 07.12.2022, 12:54:08 CET
Ich meine wenn es nur zeitweise Aussetzer sind, das es ein Timing Problem ist. Die Delay - Funktion war die von Microchip? ich kann mich erinnern, das ich da früher Probleme hatte. Außerdem müssen auch Taktzyklen zum Ein- und Ausspringen der Funktion dazugezählt werden, was je nach Taktfrequenz auch eine entsprechende Zeit in Anspruch nimmt. 
Ich kann ja heute Abend mal eine Unterprogramme hochladen.
Autor picass
 - 07.12.2022, 10:14:32 CET
Wackelkontakt = kalte Lötstelle
Die müsste vorwiegend im Bereich der Zuleitung des Datensignals liegen.
Was sagt denn ein Oszillogramm des Datensignals? Dessen Amplitude könnte ggf. in einem kritschen Grenzbereich liegen.
Grüße, picass
Autor Peter
 - 06.12.2022, 14:49:09 CET
Wenn da irgendo eine Verbindung fehlt dann müsste doch
der Fehler ständig da sein. Ist aber nur ab und zu da.
Hört sich nach einem Wackelkontakt an. Da hab ich ja was
zu suchen um den Fehler zu finden. Ich glaube am schnellsten geht
es wenn ich die Platine neu mache und schauen ob der Fehler weg
ist.
Danke dir zuerst einmal für den Tip. Werde berichten was draus wurde.

Peter
Autor pic18
 - 05.12.2022, 21:03:48 CET
Die Fühlerabfrage läuft seit über eine Woche ununterbrochen fehlerfrei. Ich frage alle paar Sekunden die Temperaturwerte ab und gebe sie auf LCD-Anzeige und über Internetabfrage aus. Der Temperaturwert von 85°C wird angezeigt bei einer fehlende Spannungsversorgung (VDD) bzw fehlenden Pull-up Widerstand. Die -0,5°C zeigen eine fehlende Masseverbindung oder Datenverbindung beim DS18S20 (mit 0,5°C Auflösung)
ds18b20.png
Autor Peter
 - 25.11.2022, 19:52:16 CET
Welche Zeiten meinst du ?
Hier mal der Code zum einlesen der Temperatur:

Ow_Reset(PORTC, 0)                   ' Onewire reset signal
      Ow_Write(PORTC, 0, 0xCC)             ' Issue command SKIP_ROM
      Ow_Write(PORTC, 0, 0x44)             ' Issue command CONVERT_T
      Delay_ms(750)

      Ow_Reset(PORTC, 0)
      Ow_Write(PORTC, 0, 0xCC)             ' Issue command SKIP_ROM
      Ow_Write(PORTC, 0, 0xBE)             ' Issue command READ_SCRATCHPAD

      temp =  Ow_Read(PORTC, 0)
      temp = (Ow_Read(PORTC, 0) << 8) + temp

      Display_Temperature(temp)

Das ist eigentlich alles. Unter Display_Temperature(temp) wird nur der Wert
in Grad umgewandelt. Kann man eigentlich nicht viel falsch machen.
Autor pic18
 - 25.11.2022, 18:42:41 CET
Vielen Dank, ich glaube ich habe den Fehler gefunden. Ich hatte einen Pointer-Fehler. In case ds18b20Conv hatte ich ow_sn(0) aufgerufen, und in ow_sn( ) eine Verzweigung auf Skip_Rom (ausgeklammert), was wohl falsch war.

char sn_liste[sn_max][8];
void ow_sn(char* sn1)
{
    ow_reset();

    //if (!*sn1) write_byte(Skip_Rom);
    //else
    {
        write_byte(Match_Rom);
        writeln_ow(sn1);
    }
}

            case ds18b20Conv:    //Temperatur einlesen vorbereiten
                    //ow_sn(0); //FALSCH mit (0) sollte ..write_byte(Skip_Rom) ausgeführt werden
                    ow_reset(); //NEU
                    write_byte(Skip_Rom);//NEU
@Peter, ich bin immer noch der Meinung dass das Timing nicht zu 100% passt. Ich kann dir gerne meine Zeiten schicken.
Autor Peter
 - 24.11.2022, 17:44:37 CET
Ja das wird meistens gesagt das es am Timing liegt. Habe
aber alle Interupts wärend der Auslesung des DS abgeschaltet.
Ändert sich aber nichts. Nein lasse mir nicht die Ser.Nr. anzeigen.
Wofür auch, bei einem brauche ich die nicht. Klar Code kannst du immer
hochladen, dann können wir da mal drüber schauen. Ist immer besser wenn man
ein Problem hat, das man den Code hochläd.
Da ich alle 10min die Temperatur abfrage und das 24Std/7Tage lang, kommt
das am Tag etwar 1-2 mal vor. Manchmal erst nach mehreren Tagen.
Wenn es ein Timming problem wäre dann müsste es öfter auftreten.
Autor pic18
 - 24.11.2022, 17:02:45 CET
bin noch auf Arbeit, -0,5°C klingt nach Timing Problem. Evtl. rufst Du einen Interrupt während des Lesens auf? Kannst du dir auch noch gleichzeitig die Serial-Nr. anzeigen lassen?
Wenn Du magst, dann schicke ich Dir meinen Programm-Code hoch.