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 (:
:
Bearbeitet durch User
Benjamin Liebold schrieb: > Hallo, bei meinem Temp sensor kommen utopische werte heraus mal -1668.00 > usw Die utopischen Werte kommen wohl eher aus deiner Implementierung des Umrechnungsalgorithmus. Es gibt genug funktionsfähige Programme für DS18B20. Hast du damit mal probiert?
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
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?
Nein so war das nicht gemeint könntest du mir ein Link geben? der möglichst gut kommtentiert ist?
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 | }
|
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.
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.
:
Bearbeitet durch User
wie meinst du das das er mir etwas zurück liefert? Macht er ja schon bei erfolg eine 1 ansonsten eine logisch 0 das problem ist ich bekomm nichts aus dem kerlchen raus egal was ich versuche...
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 | }
|
Hallo, aufn display Gibt er mir jetzt 3 aus also passiert eigentlich das in der Vfor-schleife und unten die aberfrage nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.