Gibt es einen vorgesehenen Pin am Atmega 8515 für den Anschluss des Temperatursensor DS18S20 ?
Temperatursensor DS18S20 & Atmega 8515
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.
Hinweis kann nach Kenntnisnahme deaktiviert werden!
-
-
Den Pin kannst du frei wählen, Der muss dann im Code angegeben werden (Config 1Wire...)
-
Jop Danke, dann liegt der Fehler wohl wo anders
Beim Atmega 8 hat das Programm und der Sensor einwandfrei funktioniert.
Könnte es an der unterschiedlichen Taktfrequenz der Mikrocontroller liegen, aufgrund Datenauslese des Sensors? -
Der tatsächliche Takt muss zwingend zur Angabe von $crystal passen. Sind deine fuses auch so gesetzt, dass das zusammen passt?
Mach doch mal ein Sekundenblinken mit einem wait 1 und toggle led. Dann fällt es auf, wenn der tatsächliche Takt nicht der $crystal-Angabe entspricht. Wait 1 richtet sich nämlich auch nach $crystal.Raum für Notizen
-----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------- -
Tatsache Wait 1 entspricht 10 Sekunden. Also muss man die Fuse Bits anpassen ? Wie ganau funktioniert das ?
-
Vielleicht zeigst du mal deinen Code?
Damit wir sehen, was du Codeseitig eingestellt hast.
Bitte Angabe nicht vergessen, was du als Taktquelle verwendest (Int. Oszillator, Quarz...)
Dann wäre es hilfreich, wenn du die eingestellten Fusebits aufzeigen kannst.
Die kannst du mit dem Programmer auslesen/anzeigen. -
$regfile = "8515def.dat"
$crystal = 16000000
Config 1wire = Portb.0
Config Portd = Output
Config Portc = Output
Config Portb.1 = Output
Config Portb.2 = Output
Dim Ds1820 As Integer
Dim Halb As Byte
Dim My_integer_var As Integer
Dim Dezimal As Integer
Dim 10stelle As Long
Dim Mal10variable As Long
Dim 1stelle As Long
Do
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 500
1wreset
1wwrite &HCC
1wwrite &HBE
Ds1820 = 1wread(9)
1wreset
Dezimal = Ds1820 / 2
10stelle = Dezimal / 10
Mal10variable = 10stelle * 10
1stelle = Dezimal - Mal10variable
If 10stelle = 0 Then
Portb.1 = 1 ' 10 -stelle 7 -segment
Portd = &B11000000
Else
Portb.1 = 0
End If
If 10stelle = 1 Then
Portb.1 = 1
Portd = &B11111001
Else
Portb.1 = 0
End If
If 10stelle = 2 Then
Portb.1 = 1
Portd = &B10100100
Else
Portb.1 = 0
End If
If 10stelle = 3 Then
Portb.1 = 1
Portd = &B10110000
Else
Portb.1 = 0
End If
If 10stelle = 4 Then
Portb.1 = 1
Portd = &B10011001
Else
Portb.1 = 0
End If
If 10stelle = 5 Then
Portb.1 = 1
Portd = &B10010010
Else
Portb.1 = 0
End If
If 10stelle = 6 Then
Portb.1 = 1
Portd = &B10000010
Else
Portb.1 = 0
End If
If 10stelle = 7 Then
Portb.1 = 1
Portd = &B11111000
Else
Portb.1 = 0
End If
If 10stelle = 8 Then
Portb.1 = 1
Portd = &B10000000
Else
Portb.1 = 0
End If
If 10stelle = 9 Then
Portb.1 = 1
Portd = &B10010000
Else
Portb.1 = 0
End If
If 1stelle = 0 Then
Portb.2 = 1 ' 1 -stelle 7 -segment
Portc = &B11000000
Else
Portb.2 = 0
End If
If 1stelle = 1 Then
Portb.2 = 1
Portc = &B11111001
Else
Portb.2 = 0
End If
If 1stelle = 2 Then
Portb.2 = 1
Portc = &B10100100
Else
Portb.2 = 0
End If
If 1stelle = 3 Then
Portb.2 = 1
Portc = &B10110000
Else
Portb.2 = 0
End If
If 1stelle = 4 Then
Portb.2 = 1
Portc = &B10011001
Else
Portb.2 = 0
End If
If 1stelle = 5 Then
Portb.2 = 1
Portc = &B10010010
Else
Portb.2 = 0
End If
If 1stelle = 6 Then
Portb.2 = 1
Portc = &B10000010
Else
Portb.2 = 0
End If
If 1stelle = 7 Then
Portb.2 = 1
Portc = &B11111000
Else
Portb.2 = 0
End If
If 1stelle = 8 Then
Portb.2 = 1
Portc = &B10000000
Else
Portb.2 = 0
End If
If 1stelle = 9 Then
Portb.2 = 1
Portc = &B10010000
Else
Portb.2 = 0
End If
Loop
End -
So wie dein Code aussieht, müsstest du einen externen Quarz angeschlossen haben. Korrekt?
In den Fuses musst du ext. Crstal einstellen.
Dazu müsste man mal die Oprionen sehen, welche zur Auswahl stehen.
Welchen Programmer hast du? -
Fuse Bits :
-
Die Liste LowFuse ist unvollständig.
Was steht da weiter unten? -
Taktquelle : Interner Oszillator
-
ich verwende den internen Oszillator. Die Frage externer Quarz wegen den den 16Mhz ?
Programmer : DIAMEX-AVR : file:///C:/Users/J_A_M_O_N/AppData/Local/Microsoft/Windows/INetCache/IE/2AZ8NGMD/ISP-Stick-Anleitung.pdf -
Nach den Fusebits ist 1MHz intern eingestellt.
Lasse mal die Fisebits unverändert und ändere im Code $Crystal=1000000
Dann sollte es eigentlich gehen. -
Low Fuse :
-
Hinweis:
Mit $Crystal änderst du nicht den Takt von Controller, sondern dort ist einzustellen, mit welchem Takt der Controller läuft.
Der Compiler braucht die Info, damit ein Wait 1 auch eine Sekunde dauert.
Das Timing wird hiermit gemacht. Timing ist auch beim 1Wire wichtig, da die Schnittstelle Softwareseitig gemacht wird. -
Klingt logisch, ich bin davon ausgegangen der Atmega 8515 kann intern 16Mhz. Anscheinend nur mit externen quarz mit 16 MHz?
Der Befehl Wait 1 entspricht jetzt auch einer Sekunde. -
Dann passt es schon mal vom Takt. Dann sollte es gehen.
Vorausgesetzt du hast nicht noch weitere Fehler im Code.
Ich würde dir aber empfehlen vor der $Crystal-Angabe oder gleich danach die Angaben $HWStack, $SWStack und $Framesize festzulegen. -
Achso … gut zu wissen.
-
Möglicherweise wäre für 1wire ein schnellerer Takt sicherer. Da 1wire ja ein asynchroner Bus ist, müssen die Zeiten bei der Übertragung genau eingehalten werden. Das geht mit höherer Taktfrequenz genauer. Ich würde auf intern 8Mhz gehen und natürlich auch $crystal=8000000 schreiben.
Was die Angabe der stacks betrifft, schau mal hier avrhelp.mcselec.com/newbie_problems.htmRaum für Notizen
-----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------- -
Wenn du ohne bootloader arbeitest, dann würde ich die Option 'boot reset vector enabled' verwenden. (high fuse)Raum für Notizen
-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------