mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1820 und ATmega32 Bascom Temp immer =0


Autor: Barracuda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute

Der DS1820 ist nicht parasitär angeschlossen, d.h. GND an Pin1, Port D.6 
an Pin 2 und 5V+ an Pin 3.

Hier mein COde

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 9600


 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , 
Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0
 Config 1wire = Portd.6



Dim Ar(2) As Byte , A As Byte , I As Byte , Temperatur As Integer
Dim Halb As Byte
Cls

Lcd "Temp:"
Do
Waitms 300
1wreset 'reset the device
1wwrite &HCC 'read ROM command
1wwrite &H44
Waitms 200 'read ROM command
1wreset 'reset the device
1wwrite &HCC 'read ROM command
1wwrite &HBE 'read ROM command
For I = 1 To 2
Ar(i) = 1wread() 'place into array
Next

Locate 2 , 1
Temperatur = Ar(1)

If Ar(2) > 0 Then Temperatur = 0 Else Shift Temperatur , Right

Lcd Temperatur ; ".";

Halb = Ar(1) And 1

If Halb = 1 Then Lcd "5" Else Lcd "0"

Lcd " C"
Loop

End

Quelle für den COde: 
http://www.roboternetz.de/phpBB2/viewtopic.php?t=2401

Wieso wird mir als Temperatur immer 0.0 Grad angezeigt? Der Sensor wird 
und wurde übrigens nicht warm!

Liebe Grüsse

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

1. Widerstand von D6 nach plus eingebaut ??
2. die Berechnung sieht irgendwie merkwürdig aus
     Temp = (ar(2) << 7) + (ar(1) >> 1)  ;MSB u. LSB zusammen, Bit0 
entfernen
     if ar(1) and 7 then Temp = Temp or 0x8000  ;wenn negativ - 
Vorzeichen
                                                 anpassen
     if ar(1) and 1 then Temp=Temp+0.5

## mit dem shiften musst du mal nach Bascom umsetzten, da kenne ich mich 
nicht aus !

PS: wenn die Kommandos schon kommentiert sind, dann bitte richtig - und 
nicht alles falsch übernehmen !

Sascha

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso ...

ich weiß ja nich wie das bei Bascom ist, aber ein DIM ar(2) definiert 
ein Feld mit 2 Elementen, und die sind dann eingenlich ar(0) und ar(1) 
!!

Sascha

Autor: Barracuda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also, ich habe einen 4.7k Ohm Widerstand eingelötet und dann einen Wert 
von 0.5 Grad bekommen.

Dann habe ich den MC den ich hatte durch ne falsce fuse-bit einstellung 
geschrottet, n'neuer ist bestellt.

(Wie lautet in AVR-Studio schon wieder die richtige Einstellung für nen 
externen Quarz?)

Ich werde den Code dann anpassen sobald ich den neuen MC hab.

Liebe Grüsse!

PS: Kann die falsche Temperatur auch an der falschen Taktfrequenz 
liegen?

Liebe Grüsse

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Barracuda schrieb:

> PS: Kann die falsche Temperatur auch an der falschen Taktfrequenz
> liegen?

Grundsätzlich ja. Das 1-Wire Protokoll ist zeitabhängig und damit 
abhängig von genauen Warteschleifen für Timeslots etc.. Wenn die 
Taktquelle falsch angegeben ist, klappt die Kommunikation nicht.

1-Wire Tutorial
http://www.maxim-ic.com/products/1-wire/flash/over...

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Barracuda schrieb:
> Dann habe ich den MC den ich hatte durch ne falsce fuse-bit einstellung
> geschrottet, n'neuer ist bestellt.
glaube ich kaum, dann hast du ihm wohl den Takt abgedreht - evl. mal 
einen Takt extern einspeisen
oder SPIEN abgeschaltet - dann nur mit HighVoltage-Prog. noch 
anzusprechen

> (Wie lautet in AVR-Studio schon wieder die richtige Einstellung für nen
> externen Quarz?)
für 14MHz ->ext. Crystal/Resonator  high Freq.


Sascha

Autor: Barracuda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm sascha, leidr deinen Eintrag zu spät gesehen, neue schon bezahlt und 
alte schon aufgeschnitten in der hoffnung was sehen zu können - naja, 
hab auch schon für blödere sachen geld ausgegeben;p

>>für 14MHz ->ext. Crystal/Resonator  high Freq.

da hab ich aber verschiedenene auswahlmöglichkeiten...

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Barracuda,

ich hatte neulich das gleiche Problem, mit 2 verschiedenen Sensoren.
Grund war bei mir letztlich das die sensoren kaputt waren (hatte ich 
schon mal dauerhalft benutzt). neuer Sensor hat geholfen. Vielleicht hat 
er tatsaechlich einen klitsch weg...

bye uwe

Autor: Barracuda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, konnte das Problem lösen, das Problem lag an der quarz-sache.

Alles richtig eingestellt, hier oben ists nun 22.5 Grad Celsius warm:D

hier nochmals der funktionierende Code für alle andern;)

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 9600


 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , 
Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0
 Config 1wire = Portd.6



Dim Ar(2) As Byte , A As Byte , I As Byte , Temperatur As Integer
Dim Halb As Byte
Cls

Lcd "Temp:"
Do
Waitms 300
1wreset                                                     'reset the 
device
1wwrite &HCC                                                'read ROM 
command
1wwrite &H44
Waitms 200                                                  'read ROM 
command
1wreset                                                     'reset the 
device
1wwrite &HCC                                                'read ROM 
command
1wwrite &HBE                                                'read ROM 
command
For I = 1 To 2
Ar(i) = 1wread()                                            'place into 
array
Next

Locate 2 , 1
Temperatur = Ar(1)

If Ar(2) > 0 Then Temperatur = 0 Else Shift Temperatur , Right

Lcd Temperatur ; ".";

Halb = Ar(1) And 1

If Halb = 1 Then Lcd "5" Else Lcd "0"

Lcd " C"
Loop

End

Autor: wimmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
danke für die DArstellung des funktionierenden Codes.

Ich habe versucht mein DS mit diesem Code zu steuern.
Es klappt nicht!

Erst nachdem ich die Zeile

$baud = 9600

gelöscht habe, hat es fiunktioniert.

Woran liegt es?
Was ist überhaupt die Bedeutung dieser Zeile.
Kann es sie einfach löschen ohne Wirkung?

Kann eine Anfängerfrage sein, bitte sei nicht böse;) , denn ich bin 
einer!

Grüße

Wimmer

Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe bereits an anderen Stellen hier gelesen, das es bei $baud=9600 
zu div. Randerscheinungen kommen soll. Woran es liegt, habe ich bisher 
nicht weiter untersucht.
Für Anfänger immer schön, wenn so was wie $baud=9600 alles mögliche 
macht, und man sich nicht kümmern muß, das die RS232 funktioniert. Wenn 
man tiefer einsteigt, beißt sich manchmal was, so wie in diesem Fall.
Viele Grüße Herbert

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat aus der Bascom-Hilfe:
The baud rate is selectable from the Compiler Settings. It is stored in 
a configuration file. The $BAUD directive overrides the setting from the 
Compiler Settings.

Damit kann man zum Beispiel die Baudrate während der Programmausführung
verändern. Das Einstellen und Errechnen der Baudrate braucht auch
Zeit und deswegen vermute ich, daß die Wait_Befehle in dem Programm
nicht mehr stimmen und der Temperaturfühler dann nicht richtig
gelesen wird. Wenn man nichts seriell übertragen will, braucht man
auch diese Kompilerdirektive ($Baud) nicht einzutragen und handelt sich
dadurch keinen Ärger ein.

MfG Paul

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.