STM32 DS1820

Gast #3189169
Guten Tag,

Ich versuche nun schon eine Weile den DS18B20 am STM32F103 zum Laufen zu
bringen jdoch ohne erfolg.

Angeschlossen ist der DS18B20 an PortC.0 mit externen Pullup 4,7K wie im
Datenblatt vom DS18B20 beschrieben.

Leider bekomme ich als Ausgabe nur null.

Vielleicht kann mir einer weiterhelfen
mfg

1
int main(void)
2
{
3
#ifdef DEBUG
4
  debug();
5
#endif
6
//Einausgabe Buffer für Strings
7
 char read_write_buffer[50];
8

9
 unsigned long Show_Data;
10
 
11
 Initialize_DS18B20();
12
 
13
  while(1)
14
  {
15
    Show_Data = Get_Temperature();
16
    
17
    sprintf( read_write_buffer, "%+d ", Show_Data );
18
    DrawString(23,127,read_write_buffer);  
19
    
20
    Temperature_Convert();
21
  }
22

23
}
Angehängte Dateien:
Gast #3189862
Gebhard Raich schrieb:
> Weiters dürfen keine Interrupt's laufen, die wieder eine unbestimmte
> Verzögerungszeit einbringen. So ein Eindrahtsensor ist die letzte
> Sch....
>
> Grüsse

Ja wenn ich die Interrupts sperre dann kann ich ja die Delay Zeit ja 
nich mit nen Timer
machen oder Irre ich mich da
Gast #3189883
>Ja wenn ich die Interrupts sperre dann kann ich ja die Delay Zeit ja
>nich mit nen Timer
>machen oder Irre ich mich da

Timer kann man auch ohne Interrupt betreiben.
#3190345
Gebhard Raich schrieb:
> So ein Eindrahtsensor ist die letzte
> Sch....

So kann man die eigenen schlechten Programmierfähigkeiten auf den Punkt 
bringen.

Die Sensoren sind sehr leicht zu programmieren. Dreh den Spieß einfach 
um, gib dem Timerinterrupt für das Bittiming die höchste Priorität, dann 
stören andere Interrupts nicht.
Etwas schwieriger ist es wirklich nur bei den AVRs, da die keine 
Priorität zuweisen können. 60µs Interruptsperre sind aber oft auch kein 
Problem.
(Firma: Raich Gerätebau & Entwicklung) #3190454
>So kann man die eigenen schlechten Programmierfähigkeiten auf den Punkt
>bringen.
Kann ich so nicht unwidersprochen stehen lassen. Ein peripheres Gerät, 
bei dem ich alle Interrupts (bis auf ev. Timer)abdrehen muß, um ihn 
anzusprechen ist definitiv eine Krücke. Einziger Vorteil ist ein Draht 
weniger.

Grüsse
#3190626
Sorry, meine Formulierung ist etwas zu krass ausgefallen, nehme ich 
hiermit zurück.

Für einfache MC-Anwendungen ist der DS1820 gut zu gebrauchen.

Aber heutzutage geht ja nichts mehr ohne OS, GUI, Webinterface, da kann 
die Integration in der Tat haarig werden.
Gast #3191290
Speziell für den stm32f103 hab ich mal spaßen halber im I-Net nach einem 
Beispiel gesucht
Aber nix gefunden.
Das mit der Delay Geschichte würd ich lieber übern Timer machen.
Der stm hat ja genug
Gast #3191607
So per Timer die Delay Zeiten.
Leider kommt bei mir  nur 00.0 Auf die Anzeige.

Vielleicht hat einer von ihnen noch eine Idee was ich hier verkehrt 
mache
mfg
1
int main(void)
2
{
3
#ifdef DEBUG
4
  debug();
5
#endif
6
//Einausgabe Buffer für Strings
7
 char read_write_buffer[50];
8

9

10
 
11
  while(1)
12
  {
13
//__disable_irq();
14

15
    DS18B20_Convert();
16
   
17
    DS18B20_Read();
18
  
19
    DrawString(23,127,read_write_buffer,&Arial_10x15,Orange,BLACK);        
20

21
//__enable_irq();     
22

23
    
24
  }
25

26
}
Angehängte Dateien:
Gast #3193025
Peter Dannegger schrieb:
> Den 1-Wire darf man niemals auf 1 setzen!
Meinten sie in der init_1820
SET_OP_1WIRE ();

> Außer für parasite Power.
> Er wird initial 0 gesetzt und fürderhin nur Direktion umgeschaltet.
>
> Der Lesestart-Puls (0) sollte >=1µs sein, lesen dann nach 5..10µs.
Gast #3199979
Peter Dannegger schrieb:
> Hast Du mal Deine Delayfunktion überprüft, ob sie stimmt?
>
Das Timing müsste so passen mit dem Timer

> Ohne Sensor müssen alle Bytes 0xFF gelesen werden, auch bei falschem
> Timing.
> Bzw. bei Kurzschluß 0x00.
>

Aloso ohne Sensor wandert die Anzeige mal 64 ,dann 128 ,dann 32.

Mit Sensor wanderts auch ab un an mal 0 mal 2048
Angehängte Dateien:
Gast #3201301
So als Ausgabe bekomme ich 4095.0 wenn der Sensor angeschlossen ist.

Bei nicht angeschlossenen Sonsor der gleiche Wert.

Entferne ich den Pullup erhalte ich 0.0

Vielleicht könnt mir noch einer Weiterhelfen.
#3201333
ARMIN schrieb:
> Mit Sensor wanderts auch ab un an mal 0 mal 2048

ARMIN schrieb:
> So als Ausgabe bekomme ich 4095.0 wenn der Sensor angeschlossen ist.

Du mußt also offensichtlich was geändert haben.
Aber niemand kann hellsehen, was.

Nun schreibe einen Test auf den Presence-Puls.

ARMIN schrieb:
> Das Timing müsste so passen mit dem Timer

"Müßte" zählt nicht, überprüfe es für alle gewünschten Delays.
Moderator Persönliche Seite #5448383
Louis schrieb:
> Für meine Projektarbeit.

Ist der Sinn einer Projektarbeit nicht, den Code selbst zu entwickeln 
statt abzukupfern? Also schreibe ihn doch!

Ich mache den 4 Jahre alten Thread jetzt zu, bevor noch einer 
versehentlich auf die uralten Beiträge antwortet.

Wenn Du Fragen zu Deinem eigenen STM32-Code hast, solltest Du diese 
besser in einem neu erstellten Thread stellen.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.