Wer hat DS18x20 an MSP430 am laufen?

#1336791
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.
Gast #1337522
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
OP #1337965
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?
#1337986
Lesenswert?

Im einfachsten Fall (ohne Adresse):

1
unsigned char temp;
2
unsigned int nachkomma;
3

4
// Auslesen
5
OW_Read_Temp_DS18B20_s(&temp, &nachkomma);
6

7
// Temp. Messung starten
8
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.
Gast #1337996
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
#1338017
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'
#1338024
Lesenswert?

Wolfgang-G schrieb:

> Wie kommt man zu den angegeben Zeiten?


Im Code ist das ja
1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
/*!
3
 * \brief Wait Funktion
4
 * \param time Wait-Zyklen
5
 */
6
void delay (unsigned int time)
7
{
8
  unsigned int j;
9
  for(j = 0; j < time; j++);
10
}

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren