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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.