ds18b20 -bits und bytes

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Fachleute !

    Mein Projekt sieht folgendermaßen aus:
    Basis ist ein Raspberry Pi. Ich messe die Temperatur mittels ds18b20. Dieser Wert wird mit einer voreingestellten Temperatur verglichen und bei einem Wert <= ein Relais geschaltet.
    Da ich bisher nur über geringe Programmierkenntnisse verfüge, habe ich das ganze zuerst per Shell Script verwirklicht. Läuft fehlerfrei. Nun habe ich in der zweiten Ausbaustufe das ganze per C++ programmiert. Läuft TOP.

    Nun meine Frage zur dritten Ausbaustufe.
    Da ich zum Messen der Temperatur die Datei unter dem Pfad

    /sys/devices/w1_bus_master1

    auslesen muss. Dies finde ich als c++ Prgramm ziemlich bescheiden. Ich würde gerne die entsprechenden bits und bytes direkt auslesen. Für den Ardunio habe ich einiges an entsprechenden Informationen gefunden.
    z.B.

    Ardunio - ds18b20

    oder hier

    Dies sollte doch auch mittels Raspberry möglich sein? Könnt ihr mir etwas helfen? Bzw. gibt es sicherlich bereits solche Programme, die ich als Vorlage verwenden könnte.... oder ?

    Wie gesagt, C++ Neuling ...

    Einmal editiert, zuletzt von Dr.Dish (31. August 2015 um 10:05)

  • Ja danke, in diese Richtung soll es laufen. Also low Level Programmierung. Mal schauen ob ich da durchsteigen kann. Schade das es in diesem Bereich so wenig in deutscher Sprache gibt,

  • Prinzipiell würde es helfen wenn du erstmal einen Arduino in Assembler programmieren würdest. Danach hast du ein gutes Verständnis von dem was beim Pi abgeht.
    Das ganze nennt sich 'Memory Mapped I/O' - grob gesagt ist ein Teil der Speicheradressen (z.B. 0x10000000 - 0xFFFFFFFF) normaler Speicher, und ein anderer Teil (0x00000000 - 0x10000000) beinhaltet sowohl I/O als auch Konfigurationsregister.
    Wenn der GPIO PORT A nun auf der Adresse 0x1000 liegt, dann schreibt man einfach eine 1 dahin und schon kommt Strom raus. Ganz so einfach ist es natürlich nicht weil man je nachdem immer 8 Bits oder 32 Bits auf einmal schreiben muss - aber oft nur eines setzen will.
    Da kommt dann Bitshifting und AND/OR zum Einsatz.

    In Linux gibt es ein extra Device (welches beim Pi mit root-Rechten verwendet werden darf) dass sich /dev/mem nennt. Dieses Device ist der komplette Speicher des PIs, sowohl Memory, als auch Memory Mapped I/O.
    Eigentlich darf ein sog. User-Mode Prozess den tatsächlichen Speicher garnicht sehen - dass darf nur der Kernel, aber beim Raspberry Pi darf man sowas :)

    Den Link zur C-Programmierung den ich dir geschickt habe der erklärt dir nun eigentlich wo genau die Adressen sind die du verwenden musst. Das lesen oder schreiben von /dev/mem im C ist da eher noch die Kleinigkeit. Das rausfischen der Adressen und Konfigurationsregister aus dem Datenblatt ist komplizierter, deshalb mein Tipp evtl. mal einen kleinen Arduino mit Assembler zu foltern :)

    Thomas

    PS: Ein Raspberry Pi ist wegen seiner Aufteilung in Kernel und Usermode eher nicht so wirklich geeignet zur 'Low Level Programmierung'. In dem moment wo du ein bestimmtes Timing haben willst (diesen Pin 1 Microsekunde HIGH, dann wieder LOW) kann es da Probleme geben.

  • Hallo zusammen,

    wenn man sich die Mühe macht, einen Blick ins Datenblatt des DS18B20 zu werfen, so wird man früher oder später auf eine Tabelle stoßen, die einen Überblick verschafft, wie lange die Konvertierung einer physikalischen Größe in eine Dezimalzahl dauert. Bei den voreingestellten 12 Bit sind dies 750 ms - bei den minimal möglichen 9 Bit sind dies immerhin noch knapp 100 ms.

    Unabhängig davon, ob man den Aufwand betreibt, über Low-Level-Programmierung an diese Zahlen heranzukommen, an diesen intern bedingten Umwandlungszeiten kommt man nicht vorbei.

    Ein weiterführender Link.

    Wenn der TE kurzfristigere Temperatursprünge erfassen möchte, dann geht das eben nicht mit dem DS18B20.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (1. September 2015 um 09:13)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!