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!
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!!
>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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.