DS18b20 gibt falsche Temperatur zurück

OP #4068623
Lesenswert?
• ▲
▼
Hallo, bei meinem Temp sensor kommen utopische werte heraus mal -1668.00 
usw

die Dateien Befinden sich im Anhang (code)


das LCD funktioniert.


danke für die Hilfe (:
Angehängte Dateien:
Gast #4068665
Lesenswert?
• ▲
▼
Benjamin Liebold schrieb:
> Genug gefunden aber ich wollte es selbst Probieren und daraus
> lernen es
> bringt mir nichts einen Fertigen code zu haben aber mein Wissensstand
> immer noch bei 0,1 ist

Der fertige Code bietet dir aber die Gelegenheit zu sehen
wie man es richtig macht und mit deinem zu vergleichen.
Soll das jetzt jemand für DICH machen?
#4068927
Lesenswert?
• ▲
▼
Versuche mal:
1
void ow_write_bit(uint8_t bit)
2
{
3

4
  OW_LOW();
5
  OW_OUTPUT();
6
  _delay_us(1);
7
  if(bit) OW_INPUT();
8
  _delay_us(60);
9
  OW_INPUT();
10
  _delay_us(1); // <-- Gönne ihm die Pause
11
}
1
uint8_t ow_read_bit(void){
2
  uint8_t bit=0;
3
  OW_LOW();
4
  OW_OUTPUT();
5
  _delay_us(1);
6
  OW_INPUT();
7
  _delay_us(8); // <-- kleiner
8
  if(onewire_PIN&(1<<onewire_DQ)) bit=1;
9
  _delay_us(51);  // <-- Angepasst
10
  return bit;
11
}
Gast #4068985
Lesenswert?
• ▲
▼
Benjamin Liebold schrieb:
> Genug gefunden aber ich wollte es selbst Probieren und daraus lernen es
> bringt mir nichts einen Fertigen code zu haben aber mein Wissensstand
> immer noch bei 0,1 ist

Mit einer lauffähigen Version kannst du den Fehler aber wesentlich 
leichter eingrenzen. So hast du nur eine Black Box aus Sensor und 
Software, von der du nur weißt, dass etwas falsches raus kommt.

Mit einer funktionsfähigen Software kannst du die Box zerlegen in
 - Sensorkommunikation
 - Rohdaten
 - Temperaturberechnung
 - Ausgabe

und zwischen den Blöcken Daten/Timing/Zwischenergebnissse abgreifen. 
Diese kannst du mit deinem Programm vergleichen und daraus einen 
Anhaltspunkt gewinnen, wo bei dir etwas schief läuft.

Alleine "utopische werte heraus mal -1668.00 usw" liefert wenig 
Einblicke. Zumindest die binären Rohdaten aus den beiden 
Temperaturregistern sollten halbwegs stabil sein und die solltest du 
hier auch verraten.
OP #4069204
Lesenswert?
• ▲
▼
Hab mir das scratchpad[0] bis [8] ausgeben lassen in der wert hat 255 
also stimmt irgendetwas mit dem auslesen nicht. ist vielleicht sogar der 
sensor kaputt?
ein 4,7k pullup ist vorhanden.

das ausgeben des Scatchpads passiert so

char Buffer1[20];
for (i=0; i<9; i++)
  {
    itoa( scratchpad[i] , Buffer1, 10 );
    lcd_string( Buffer1 );
  }

PS: Prozessor Atmega 16 16MHz extern quartz   Fuses sind angehengt.
Angehängte Dateien:
#4069589
Lesenswert?
• ▲
▼
1
uint8_t w1_reset()
2
{
3
  uint8_t err = 3;
4

5
  W1 = 0;
6
  W1_oe = 1;
7
  _delay_us( 480 );
8
  W1_oe = 0;
9
  for( uint8_t i = 480 / 20; i; i-- ){
10
    _delay_us( 20 );
11
    if( W1_in == 0 )                    // presence detect
12
      err &= 2;
13
  }
14
  if( W1_in )                           // no short circuit
15
    err &= 1;
16
  return err;                           // 0 = successful
17
                                        // 1 = not present
18
                                        // 2 = short circuit
19
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren