STM32 DS1820

Gast #3189169
Lesenswert?

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:
#3190345
Lesenswert?

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
Lesenswert?

>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
Gast #3191290
Lesenswert?

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
Lesenswert?

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 #3199979
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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.