Forum: Mikrocontroller und Digitale Elektronik TI CCS v9: Treiber für DS1820


von Sven Scholz (Gast)


Lesenswert?

Hallo Gemeinde,

hat jemand evtl. auf Anhieb einen Treiber für den populären DS18B20 
Temperatursensor zur Hand für den MSP430?
Sprich: Code, der das benötigte 1-Wire Protokoll umsetzt und 
entsprechend einen konfigurierbaren Pin in den richtigen Timings zappeln 
lässt?

Das Ganze müsste unter dem Code Composer Studio (v9) noch kompilierbar 
sein.

Ich werde voraussichtlichen den DQ-Pin vom Ds1820 an Pin 2.3 meines 
MSP430G2553 hängen.

Versucht habe ich den Quellcode unter
https://sourceforge.net/projects/msp430-ds18b20/

Der Treiber ist allerdings sehr knapp gehalten und hat erstmal nicht 
funktioniert. Zudem fehlt offenbar die CRC-Berechnung.

Vielen Dank erstmal bis hierhin.

VG!

von chris (Gast)


Lesenswert?

mal unter der Rubrik Projekte & Code hier geschaut ?
Beitrag "DS1820, DS18B20 in C"

von Sven Scholz (Gast)


Lesenswert?

Danke für den Hinweis.

Ich finde allerdings hauptsächlich Beispiele, bei denen der DS1820 erst 
auf dem Bus gesucht wird...

Da ich nur einen DS1820 verwende, würde ich diesen gerne per Skip 
Rom-Command ansprechen, also direkt ohne Adresse.
1
owReset();                // Check device presence
2
owWriteByte(0xcc);        // Skip ROM
3
owWriteByte(0x44);        // Convert Temperature
4
usdelay(1000);
5
owReset();                // Check device presence
6
owWriteByte(0xcc);        // Skip ROM
7
owWriteByte(0xbe);        // Read Scratchpad
8
9
for (i=0; i<8; i++) 
10
{        // writes byte, one bit at a time
11
    scratchpad[i]= owReadByte();
12
}

Reset Pulse und die Presence Antwort vom DS1820 konnte ich am Oszi 
sehen.
Auch das Senden von 0xCC und 0x44 habe ich beobachtet.
Allerdings wird später nur lauter 0xFF gelesen...

Ich betreibe den DS1820 an P2.3 mit einem 3,9kOhm Widerstand.
Die Read-Time Slots sind meiner Meinung nach auch korrekt.
Dennoch bleibt irgendwie die DQ-Leitung auf High, sodass nur '1' gelesen 
werden.

Somit die FRage:
Hat schon mal jemand einen DS18B20 erfolgreich mit dem SkipRom-Command 
ausgelesen?

Herzlichen Dank!!

von neuer PIC Freund (Gast)


Lesenswert?

>Hat schon mal jemand einen DS18B20 erfolgreich mit dem SkipRom-Command 
ausgelesen?

Ja. PAP wie bei dir, mit Ausnahme von

>usdelay(1000);

Ist das 1 ms Wartezeit? Wenn ja, dann zu wenig. Auf Delaybasis 
mindestens 750 ms warten.

von Sven Scholz (Gast)


Lesenswert?

Also ich bin ein Stück weiter...
Der DS1820 antwortet korrekt (überprüft mit dem Logicanalyzer) doch 
leider scheint der MSP430 den DQ Pin falsch einzulesen bzw. zu langsam 
zu samplen.

Bei einem DCO Clock von 8Mhz funktioniert mein Code sogar, allerdings 
nicht mit meiner default-Einstellung von 1Mhz.
Woran könnte das liegen?
Ich muss ja bei bei meiner readBit() Funktion den Pin von Ausgang zu 
Eingang schalten...
Könnte das bei 1Mhz zu lange dauern?
Zudem baue ich ja die einzelnen Bits zu einem Byte zusammen mit Shiften 
etc. vllt zerstört mir das auch das Timing...

von Frank K. (fchk)


Lesenswert?

Hast Du einen UART frei? Wenn ja, dann lies Dir das hier durch:

https://www.maximintegrated.com/en/design/technical-documents/tutorials/2/214.html

https://github.com/dword1511/onewire-over-uart

Der Trick besteht darin, das gesamte Timing über die Hardware des UART 
zu definieren. Damit ist es dann völlig egal, wie schnell der Prozessor 
ist.

fchk

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
Noch kein Account? Hier anmelden.