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

Re: OneWire DS18S20 Programmierung Kategorie: Sonstige Hardware (von WernerF - 30.01.2010 17:43)
Als Antwort auf Re: OneWire DS18S20 Programmierung von Joerg - 27.01.2010 9:25
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> Hallo,
>
> > 1)    Wird durch den Aufruf  OneWire_Read() jeweils automatisch das nächste Byte aus dem
> >        64-Bit-Rom des Sensors gelesen?
>
> Ja
>
> > 4)   Bei der Ausgabe der Hex-Bytes des ROM bzw. Scratchpads mit dem â??Msg_WriteHexâ??
> >        -Befehl werden doppelt soviele Bytes in Hex dargestellt.  Je echtes Byte ein
> >        â??00â??-Byte davor . Der Befehl hat lt. Beschreibung eine 16-Bit-Auflösung.
> >        Nun die Frage: Kann man die Ausgabe des â??Dummy-Bytesâ?? irgendwie umgehen ??
> >        Vielleicht durch einen anderen Befehl oder Ã?bergabe eines 2-Byte-Wortes ?
> >        AuÃ?erdem scheint man immer ein weiteres â??Endeâ??-Byte beim Lesen mitzubekommen
> >        (siehe auch die erste Frage ), denn ich lese immer eins mehr als die Anzahl der
> >        beschriebenen Bytes
>
> Ich mache die Ausgabe wie folgt:
>
> char text[40];
>
>
> Str_Printf(text,"Rom Code = %02x %02x %02x %02x %02x %02x",rom_code[6],
>                  rom_code[5],rom_code[4],rom_code[3],rom_code[2],rom_code[1]);
>
> Msg_WriteText(text);
>
>
>
> Grü�e Jörg
>
>
Danke Jörg für Deine schnelle Hilfe,
ich habe es ausprobiert und es hat dann auch funktioniert (unter C) , unter Basic habe ich es zuerst
probiert, da für mein Testprogramm ein BASIC-Programm als Vorlage diente. Dort hatte ich aber
Probleme beim Str_printf Befehl mit mehr als 1 Zeile Parameter. Das ging bei mir nicht, aber unter
CompactC lief alles einwandfrei.

Die anderen Fragen, die ich noch hatte , bin ich dabei selbst zu beantworten:
a) schreiben ins scratchpad (Alarm-Temperaturen):

    OneWire_Reset(PortA7);    // PortA.7
    OneWire_Write(Skip_ROM);  // ROM überspringen
    OneWire_Write(Write_Scratchpad);
    OneWire_Write(T_high);
    OneWire_Write(T_low);

beim auslesen bekomme ich dann wieder diese T_high-  und T_low-Werte
wobei diese Werte zB so definiert sein können:
  int T_high
  int T_low

 T_high = 39    ( 39 °C)   mit hexbyte -Darstellung  0x27, beim Auslesen
 T_low  =  3     (  3°C)     mit hexbyte -Darstellung  0x03, beim Auslesen


b) kopieren dieser Alarm-Temperaturen vom Scratchpad ins EEPROM des Sensors:

    OneWire_Reset(IK_PortA7);                  // PortA.7
    OneWire_Write(BK_Skip_ROM);           // ROM überspringen
    OneWire_Write(BK_Copy_Scratchpad); // Scratchpad Thigh und Tlow kopieren nach EEPROM

wenn der Sensor an Spannung angelegt wird, werden diese beiden Alarm-Temperaturen aus
 dem Sensor_EEPROM ins scratchpad immer automatisch kopiert (siehe dazu auch das Datenblatt
des Sensors DS18S20) . Wenn man nichts mit den Alarmwerten macht, kann man die beiden Bytes
ja auch für etwas anderes verwenden und im EEPROM bleiben sie dann für "immer" erhalten.

c) die anderen OneWire-Befehle bin ich nun noch am ausprobieren und werde weiterberichten !!!!


    Antwort schreiben


Antworten: