mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wer hat DS18x20 an MSP430 am laufen?


Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich will einen DS18S20 temp. sensor via 1-Wire an einen MSP430 
anschließen.
Gibt es jemanden, der 1-Wire mit nem MSP schon realisiert hat?


Danke für Antwort

nebenbei: MSP430 und Manchaster?

Autor: Tobias Korrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne mit einem MSP430 nicht aber über I2C mit einem TMS320F28335

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab 1-Wire gemacht, spreche da die DS2482 EEPROMS an, klappt 
bestens. leider darf ich dir den Quelltext nicht geben, war halt auf 
Arbeit. Ist aber nicht sonderlich schwer. Ich hab mir eine Delay-Routine 
geschrieben, mit mit Timer-Ticks arbeitet, so bekommt man die Zeiten 
vernünftig hin.

Manchester musst du schon selbst kodieren, die Hardware USART kann das 
nicht.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab schon mal ein DS18B20 mit MSP gemacht. Quelltext müsste ich erst 
suchen.
Aber wie Christian schon geschrieben hat, ist es nicht sonderlich 
schwer. DS18B20 an MSP430F149 war damals mein Einstieg in die µC 
Programmierung :)

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn wir vom gleichen Schaltkreis reden, dann ist der DS2482 ein 
Brückenschaltkreis von I²C auf 1-wire und kein EEPROM.
Vorteilhaft finde ich den Einsatz des DS2482 zur Anbindung eines 
DS18B20, weil man die 1 wire Verbindung nicht programmieren muss, da das 
gesamte Zeitregime vom DS2482 erzeugt wird.
Trotzdem würde mich der Quellcode von Jörg interessieren, da dadurch 
dann der zusätzliche IS DS2482 entfallen könnte.
MfG

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oha, da hab ich die Nummern durcheinander geworfen. Diese Brücke war in 
einem anderen Projekt (aber auch am MSP430). Den DS2431 haben wir direkt 
am MSP430 betrieben. Das ist ja alles keine Hexerei, das hat man auch 
ohne Quelltext Vorlage in 2 Stunden zusammen.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Source-Code für DS18B20 an MSP430.

Die Rückgabe der Temperatur ist etwas "eigenwillig". Müsste man sich 
anpassen wenn einem das nicht passt. War damals für eine Applikation bei 
der das Format so günstig war.

Autor: Jörg S. (joerg-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und die h-Datei..


Edit:
Mir ist aufgefallen das einige Kommentare der Parameter in der C-Datei 
nicht stimmen, ich hoffe das ist zu verschmerzen :)

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erst mal für die Antworten.

@Jörg:
gibt es auch ein main-Programm, was die Routinen aufruft? (um mal zu 
verdeutlichen, wie solch eine Abfrage der Temperatur in Gang gesetzt 
wird.)


ps: der code ist für einen ds18b20 wenn ich einen ds18s20 nehmen will, 
geht das auch ohne große Anpassung oder?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im einfachsten Fall (ohne Adresse):

unsigned char temp;
unsigned int nachkomma;

// Auslesen
OW_Read_Temp_DS18B20_s(&temp, &nachkomma);

// Temp. Messung starten
OW_Convert_Temp_all_DS18B20()


>ps: der code ist für einen ds18b20 wenn ich einen ds18s20 nehmen will,
>geht das auch ohne große Anpassung oder?
Ich kenn den Unterschied nicht. Aber großartig werden die sich wohl 
nicht unterscheiden.

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg
Danke für den Quelltext
Als  nicht allzu stark bewanderter „Programmierer“ noch einige Fragen 
dazu:

Wie schon in meinem vorigen Beitrag angedeutet, bereitet mir die exakte 
Erzeugung von Zeitabständen (delay) Probleme.
Was bedeutet
/* Delay (SMCLK @ 4MHz) */    // diese Zeile habe ich verstanden
#define DELAY_500_US         500u
#define DELAY_75_US           70u
#define DELAY_60_US           58u
#define DELAY_15_US           5u
#define DELAY_SHORT           1u

Wie kommt man zu den angegeben Zeiten?
was bedeutet 1u, 5u,

Bei Schleifen, wie z. B.
void  delay  (unsigned int time);
muss ich dann immer den Oszi nehmen, um die Impulslänge zu bestimmen. 
Deshalb wäre ich mal an einer programmiertechnischen Lösung 
interessiert.

MfG

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang-G schrieb:

> /* Delay (SMCLK @ 4MHz) */    // diese Zeile habe ich verstanden
> #define DELAY_500_US         500u
> #define DELAY_75_US           70u
> #define DELAY_60_US           58u
> #define DELAY_15_US           5u
> #define DELAY_SHORT           1u
>
> was bedeutet 1u, 5u,

Das u bedeutet einfach nur 'unsigned'

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang-G schrieb:

> Wie kommt man zu den angegeben Zeiten?


Im Code ist das ja
///////////////////////////////////////////////////////////////////////////////////////////////////
/*!
 * \brief Wait Funktion
 * \param time Wait-Zyklen
 */
void delay (unsigned int time)
{
  unsigned int j;
  for(j = 0; j < time; j++);
}

Er wird sich das entweder so wie du mit dem Oszi ausgemessen haben oder 
aber er hat sich den Assembleroutput des Compilers angesehen, Taktzyklen 
gezählt und die Zahlenwerte bei 4Mhz festgelegt.

Wobei: Jeder halbwegs gute Compiler wird in dieser Schleife den Sinn 
vermissen und seiner obersten Pflicht nachkommen: "Aus einem gegebenen 
Quelltext das Maximum an Laufzeit herauszuholen" und die Schleife 
einfach wegoptimieren, da sie ausser Laufzeit verbrutzeln nichts 
Sinnvolles macht. Das genau das, Laufzeit verbrutzeln, der eigentliche 
Sinn der Sache ist, erkennen Optimizer nicht.

Tja und dann kommt das nächste Problem: Selbst wenn der Optimizer die 
Schleife drinnen lässt (zb weil er ausgeschaltet ist), hast du keine 
Gewähr, dass der Compiler in der nächsten Compiler-Release die Schleife 
exakt gleich umsetzt. Derartige Warteschleifen gehen daher nur dann 
zuverlässig, wenn man exakt den gleichen Compiler in exakt der gleichen 
Version mit den exakt gleichen Aufrufparamtern hat wie der Autor.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.