<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=J-g-s</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=J-g-s"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/J-g-s"/>
		<updated>2026-04-11T14:52:37Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_Verzweigungen&amp;diff=25083</id>
		<title>Diskussion:Bascom Verzweigungen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_Verzweigungen&amp;diff=25083"/>
				<updated>2014-07-31T10:24:45Z</updated>
		
		<summary type="html">&lt;p&gt;J-g-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo PicNic&lt;br /&gt;
&lt;br /&gt;
Toll das Du was reingeschrieben hast :-)&lt;br /&gt;
--[[Benutzer:Roberto|Roberto]] 00:36, 18. Jan 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
Funktion abc As Byte&lt;br /&gt;
A=abc()&lt;br /&gt;
&lt;br /&gt;
Was bringt eine Funktion für einen Vorteil gegenüber einem Gosub ?? --[[Benutzer:J-g-s|J-g-s]] ([[Benutzer Diskussion:J-g-s|Diskussion]]) 12:24, 31. Jul 2014 (CEST)&lt;/div&gt;</summary>
		<author><name>J-g-s</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_und_LCD%27s&amp;diff=25053</id>
		<title>Diskussion:Bascom und LCD's</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_und_LCD%27s&amp;diff=25053"/>
				<updated>2014-07-21T13:39:35Z</updated>
		
		<summary type="html">&lt;p&gt;J-g-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Irgendwie fehlt mir die Ansteuerung über I2C. Das ist doch glaub ich auch möglich. Kann das eventuell mal jemand ergänzen - ich kenne mich damit nicht aus.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Über i2c lassen sich nur wenige ganz spezielle LCD´s steuern. Das dürfte je nach Display auch etwas anders aussehen. Alternativ gibt es auch ne Schaltung die aus einem herkömlichen Display ein [[I2C]] LCD macht, siehe z.B. [[RN-KeyLCD]] &lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Frank|Frank]] 10:04, 12. Jul 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
http://rn-wissen.de/wiki/index.php/LCD-Modul_am_AVR#Ansteuerung_.C3.BCber_I.C2.B2C&lt;br /&gt;
--[[Benutzer:J-g-s|J-g-s]] ([[Benutzer Diskussion:J-g-s|Diskussion]]) 15:38, 21. Jul 2014 (CEST) &lt;br /&gt;
&lt;br /&gt;
== Bild über &amp;quot;Stromversorgung&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Die Grafik auf der gezeigt wird, wie die Kontrastspannung richtig an das LCD angeschlossen wird, ist von www.sprut.de. Siehe dazu: http://www.sprut.de/electronic/lcd/index.htm&lt;br /&gt;
Mir fehlt ein Quellennachweis im Artikel; um sich keinen Ärger einzuhandeln würde ich das unbedingt noch ergänzen (und zusätzlich den Ersteller der Grafik um Erlaubnis fragen).&lt;br /&gt;
--[[Benutzer:Thomas E.|Thomas E.]] 19:25, 18. Sep 2012 (CEST)&lt;/div&gt;</summary>
		<author><name>J-g-s</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_und_LCD%27s&amp;diff=25052</id>
		<title>Diskussion:Bascom und LCD's</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_und_LCD%27s&amp;diff=25052"/>
				<updated>2014-07-21T13:38:04Z</updated>
		
		<summary type="html">&lt;p&gt;J-g-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Irgendwie fehlt mir die Ansteuerung über I2C. Das ist doch glaub ich auch möglich. Kann das eventuell mal jemand ergänzen - ich kenne mich damit nicht aus.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Über i2c lassen sich nur wenige ganz spezielle LCD´s steuern. Das dürfte je nach Display auch etwas anders aussehen. Alternativ gibt es auch ne Schaltung die aus einem herkömlichen Display ein [[I2C]] LCD macht, siehe z.B. [[RN-KeyLCD]] &lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Frank|Frank]] 10:04, 12. Jul 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
In der EBucht gibt es haufenweise I2C-LCD-Adapter, meist ist ein simpler I2C-8_Bit-parallel-Wandler drin. Da man ja noch Enable, Datenrichtung und so braucht, ist das Display dann im 4-Bit-Modus angeschlossen.&lt;br /&gt;
--[[Benutzer:J-g-s|J-g-s]] ([[Benutzer Diskussion:J-g-s|Diskussion]]) 15:38, 21. Jul 2014 (CEST) &lt;br /&gt;
&lt;br /&gt;
== Bild über &amp;quot;Stromversorgung&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Die Grafik auf der gezeigt wird, wie die Kontrastspannung richtig an das LCD angeschlossen wird, ist von www.sprut.de. Siehe dazu: http://www.sprut.de/electronic/lcd/index.htm&lt;br /&gt;
Mir fehlt ein Quellennachweis im Artikel; um sich keinen Ärger einzuhandeln würde ich das unbedingt noch ergänzen (und zusätzlich den Ersteller der Grafik um Erlaubnis fragen).&lt;br /&gt;
--[[Benutzer:Thomas E.|Thomas E.]] 19:25, 18. Sep 2012 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Oled-Displays ==&lt;br /&gt;
Es gibt Oled-Displays, die wie LCD-Displays angeschlossen und angesprochen werden.&lt;br /&gt;
Vorteil: hoher Kontrast, kein Poti erforderlich, keine Hintergrundbeleuchtung, für 3Volt und für 5Volt geeignet&lt;br /&gt;
Nachteil: Stromverbrauch bis zu 50mA&lt;br /&gt;
--[[Benutzer:J-g-s|J-g-s]] ([[Benutzer Diskussion:J-g-s|Diskussion]]) 15:38, 21. Jul 2014 (CEST)&lt;/div&gt;</summary>
		<author><name>J-g-s</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom_und_1-Wire&amp;diff=25040</id>
		<title>Bascom und 1-Wire</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom_und_1-Wire&amp;diff=25040"/>
				<updated>2014-07-19T18:22:03Z</updated>
		
		<summary type="html">&lt;p&gt;J-g-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Artikel folgen einige Programmbeispiele, in denen gezeigt wird, wie Bascom über den 1-Wire-Bus kommuniziert.&lt;br /&gt;
&lt;br /&gt;
1-Wire (Eindraht) ist eine serielle Schnittstelle, die mit nur einer Datenleitung auskommt, die gleichzeitig auch noch als Stromversorgung genutzt werden kann.&lt;br /&gt;
Aufgrund der Einfachheit kann diese Schnittstelle leicht in Software auf einem Mikrocontroller nachgebildet werden.&lt;br /&gt;
&lt;br /&gt;
In Bascom sind [[Bascom#1WIRE_Bus|Befehle]] für die 1-Wire-Kommunikation enthalten, sodass der Programmierer sich nicht um das Protokoll und das Timing der Übertragung kümmern muss.&lt;br /&gt;
&lt;br /&gt;
Es gibt 1-Wire-Geräte mit verschiedenen Funktionen, in der Roboterwelt dürfte einer der bekanntesten der Temperatursensor DS18S20 (bzw. DS18B20) sein, deswegen wird dieser in den Beispielen verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Die Beschaltung rund um den DS18B20 sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:1Wire-DS1820.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ablauf der Kommunikation ==&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation mit dem 1-Wire-Gerät muss immer diesen Ablauf haben:&lt;br /&gt;
&lt;br /&gt;
* Initialisierung&lt;br /&gt;
* &amp;quot;ROM Function&amp;quot; Befehl&lt;br /&gt;
* &amp;quot;Memory Function&amp;quot; Befehl&lt;br /&gt;
* Übertragung/Daten&lt;br /&gt;
&lt;br /&gt;
Aus diesem Ablauf ergeben sich die beiden folgenden Programmabläufe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommunikation mit nur einem Gerät ==&lt;br /&gt;
&lt;br /&gt;
Wenn sich nur ein einziges Gerät am Bus befindet kann man diese kurze Version der Kommunikation verwenden. Ein ROM-Befehl ist dabei nicht notwendig und kann übersprungen werden, dies muss aber dem Gerät mitgeteilt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 {{vbcomment|Minimalprogramm für Temperaturmessung}}&lt;br /&gt;
 Config 1wire = Portc.7 &lt;br /&gt;
 &lt;br /&gt;
 Dim Sep(9) As Byte&lt;br /&gt;
 &lt;br /&gt;
 1wreset                                         {{vbcomment|Initialisierung}}&lt;br /&gt;
 1wwrite &amp;amp;HCC                                    {{vbcomment|überspringe ROM-Befehl}}&lt;br /&gt;
 1wwrite &amp;amp;H44                                    {{vbcomment|Temperaturmessung anstoßen}}&lt;br /&gt;
 &lt;br /&gt;
 Waitms 500                                      {{vbcomment|warten bis Messung fertig}}&lt;br /&gt;
 &lt;br /&gt;
 1wreset                                         {{vbcomment|Initialisierung}}&lt;br /&gt;
 1wwrite &amp;amp;HCC                                    {{vbcomment|überspringe ROM-Befehl}}&lt;br /&gt;
 1wwrite &amp;amp;HBE                                    {{vbcomment|Temperatur auslesen}}&lt;br /&gt;
 Sep(1) = 1wread(9)                               {{vbcomment|Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9)}}&lt;br /&gt;
 &lt;br /&gt;
 Wait 1&lt;br /&gt;
&lt;br /&gt;
Im Array Sep() stehen die Daten des Gerätes die dann Anhand des Datenblattes ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommunikation mit mehreren Geräten ==&lt;br /&gt;
&lt;br /&gt;
Wenn sich mehrere Geräte am 1-Wire-Bus befinden, müssen diese jeweils Adressiert werden um mit dem gewünschten Gerät in Kontakt zu treten. Zum Adressieren wird die Seriennummer verwendet, die in jedem 1-Wire-Gerät eindeutig vorhanden ist. Um an diese Seriennummer zu kommen gibt es zwei Strategien.&lt;br /&gt;
&lt;br /&gt;
Entweder man liest bei allen Geräten vorher einzeln diese Nr. aus, um diese in das eigentliche Programm einzutragen (kürzer), oder man sucht beim Programmstart jedesmal nach vorhandenen Ger&amp;amp;auml;ten (flexibler).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SerienNr einzeln auslesen ===&lt;br /&gt;
&lt;br /&gt;
 Config 1wire = Portc.7&lt;br /&gt;
 &lt;br /&gt;
 Dim Ar(8) As Byte&lt;br /&gt;
 &lt;br /&gt;
 1wreset&lt;br /&gt;
 1wwrite &amp;amp;H33                                        {{vbcomment|ROM-Befehl zum lesen der SerienNr}}&lt;br /&gt;
 Ar(1) = 1wread(8)                                   {{vbcomment|8 Bytes lesen, beschreibt Ar(1) bis Ar(8)}}&lt;br /&gt;
 &lt;br /&gt;
 For I = 1 To 8&lt;br /&gt;
     Print Hex(ar(i));                               {{vbcomment|Ausgeben}}&lt;br /&gt;
     Print &amp;quot; &amp;quot;;&lt;br /&gt;
 Next&lt;br /&gt;
 &lt;br /&gt;
 Print&lt;br /&gt;
 &lt;br /&gt;
 Wait 1&lt;br /&gt;
&lt;br /&gt;
Im Array Ar() befindet sich somit die SerienNr des Gerätes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SerienNr aller Geräte ===&lt;br /&gt;
&lt;br /&gt;
 $regfile = &amp;quot;M32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
 $baud = 38400&lt;br /&gt;
 &lt;br /&gt;
 Config 1wire = Portc.7&lt;br /&gt;
 &lt;br /&gt;
 Dim Ar(8) As Byte                                   {{vbcomment|Array für SerienNr.}}&lt;br /&gt;
 Dim I As Byte&lt;br /&gt;
 Dim W As Word&lt;br /&gt;
 &lt;br /&gt;
 Sound Portd.7 , 400 , 450                           {{vbcomment|BEEP bei RN-Control}}&lt;br /&gt;
 &lt;br /&gt;
 Print&lt;br /&gt;
 Print &amp;quot;1-Wire&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Wait 1&lt;br /&gt;
 &lt;br /&gt;
 Ar(1) = 1wsearchfirst()                            {{vbcomment|8 Bytes lesen, beschreibt Ar(1) bis Ar(8)}}&lt;br /&gt;
 &lt;br /&gt;
 {{vbcomment|gibts überhaupt ein Ger&amp;amp;auml;t}}&lt;br /&gt;
 If Err = 0 Then&lt;br /&gt;
 &lt;br /&gt;
     Do&lt;br /&gt;
         {{vbcomment|Ausgabe der SerienNr.}}&lt;br /&gt;
         For I = 1 To 8&lt;br /&gt;
             Print Hex(ar(i));&lt;br /&gt;
             Print &amp;quot; &amp;quot;;&lt;br /&gt;
         Next&lt;br /&gt;
         Print&lt;br /&gt;
 &lt;br /&gt;
         {{vbcomment|Nach weiterem Ger&amp;amp;auml;t suchen}}&lt;br /&gt;
         Ar(1) = 1wsearchnext()                   {{vbcomment| Seriennummer vom &amp;amp;auml;chste Sensor, beschreibt Ar(1) bis Ar(8)}}&lt;br /&gt;
 &lt;br /&gt;
     Loop Until Err = 1                       {{vbcomment|solange bis sich kein weiteres Ger&amp;amp;auml;t mehr meldet.}}&lt;br /&gt;
 &lt;br /&gt;
 End If&lt;br /&gt;
 &lt;br /&gt;
 Print &amp;quot;Fertig&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 W = 1wirecount()                                {{vbcomment|Anzahl der gefundenen Ger&amp;amp;auml;te z&amp;amp;auml;hlen}}&lt;br /&gt;
 &lt;br /&gt;
 Print &amp;quot;Anzahl &amp;quot;;&lt;br /&gt;
 Print W&lt;br /&gt;
 &lt;br /&gt;
 Do&lt;br /&gt;
 Loop&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Am ersten Byte der SerienNr (Family-Code) ist zu erkennen um welches Ger&amp;amp;auml;t es sich handelt, beim DS18B20 ist es die &amp;amp;amp;H28, beim DS18S20 die &amp;amp;amp;H10. Da beide unterschiedliche Formate beim Temperaturwert haben, kann die Berechnung anhand des Family-Code angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bestimmtes Gerät ansprechen ===&lt;br /&gt;
&lt;br /&gt;
Um bei mehreren vorhandenen Ger&amp;amp;auml;ten ein bestimmtes anzusprechen muss es mit der SerienNr adressiert werden.&lt;br /&gt;
&lt;br /&gt;
 Do&lt;br /&gt;
     1wverify Ar(1)                                 {{vbcomment|Ger&amp;amp;auml;t mit der SerienNr. aus Ar() auswählen}}&lt;br /&gt;
     {{vbcomment|Gerät vorhanden}}&lt;br /&gt;
     If Err = 0 Then&lt;br /&gt;
 &lt;br /&gt;
         1wwrite &amp;amp;H44                               {{vbcomment|Temperaturmessung anstoßen}}&lt;br /&gt;
 &lt;br /&gt;
         Waitms 500                                 {{vbcomment|warten bis Messung fertig}}&lt;br /&gt;
 &lt;br /&gt;
         1wverify Ar(1)                             {{vbcomment|Ger&amp;amp;auml;t mit der SerienNr. aus Ar(1)...Ar(8) auswählen}}&lt;br /&gt;
         1wwrite &amp;amp;HBE                               {{vbcomment|Temperatur auslesen}}&lt;br /&gt;
         Sep(1) = 1wread(9)                          {{vbcomment|Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9)}}&lt;br /&gt;
 &lt;br /&gt;
         For I = 1 To 9&lt;br /&gt;
             Print Hex(sep(i));&lt;br /&gt;
         Next&lt;br /&gt;
         Print&lt;br /&gt;
 &lt;br /&gt;
         {{vbcomment|Nur für die Temperatur wichtige Daten ausgeben}}&lt;br /&gt;
         Print Hex(sep(2));&lt;br /&gt;
         Print Hex(sep(1))&lt;br /&gt;
         {{vbcomment| High und Low-Byte, nach Datenblatt zusammen setzen und berechnen...}}&lt;br /&gt;
     Else&lt;br /&gt;
         Print &amp;quot;Fehler&amp;quot;&lt;br /&gt;
     End If&lt;br /&gt;
 &lt;br /&gt;
     Wait 1&lt;br /&gt;
 &lt;br /&gt;
 Loop&lt;br /&gt;
&lt;br /&gt;
Die SerienNr. des gew&amp;amp;uuml;nschten Ger&amp;amp;auml;tes muss im Array Ar() stehen, bevor es mit &amp;lt;tt&amp;gt;1wverify&amp;lt;/tt&amp;gt; gesucht wird, dies ist auch gleichzeitig der ROM-Befehl, diesem kann der Memory-Befehl folgen, und anschlie&amp;amp;szlig;end die Daten übertragen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prüfsumme ==&lt;br /&gt;
&lt;br /&gt;
Da wegen der einen Datenleitung durchaus mit St&amp;amp;ouml;rungen zu rechnen ist, wird jeder &amp;amp;Uuml;bertragung ein Pr&amp;amp;uuml;fbyte angehängt, mit dem sich die Korrektheit der Daten überpr&amp;amp;uuml;fen lässt.&lt;br /&gt;
&lt;br /&gt;
 Config 1wire = Portc.7&lt;br /&gt;
 &lt;br /&gt;
 Dim Ar(8) As Byte                                   {{vbcomment|Array für SerienNr}}&lt;br /&gt;
 Dim I As Byte&lt;br /&gt;
 &lt;br /&gt;
 1wreset&lt;br /&gt;
 If Err = 0 Then&lt;br /&gt;
     1wwrite &amp;amp;H33                                    {{vbcomment|ROM-Befehl zum lesen der SerienNr.}}&lt;br /&gt;
     Ar(1) = 1wread(8)                               {{vbcomment|8 Bytes lesen}}&lt;br /&gt;
 &lt;br /&gt;
     For I = 1 To 8&lt;br /&gt;
         Print Hex(ar(i));                           {{vbcomment|Ausgabe der SerienNr.}}&lt;br /&gt;
         Print &amp;quot; &amp;quot;;&lt;br /&gt;
     Next&lt;br /&gt;
     Print&lt;br /&gt;
 &lt;br /&gt;
     Print Hex(crc8(ar(1) , 7) )                     {{vbcomment|Pr&amp;amp;uuml;fsumme ausgeben}}&lt;br /&gt;
 &lt;br /&gt;
     If Ar(8) = Crc8(ar(1) , 7) Then                 {{vbcomment|Pr&amp;amp;uuml;fsumme vergleichen}}&lt;br /&gt;
         Print &amp;quot;Daten OK&amp;quot;&lt;br /&gt;
     Else&lt;br /&gt;
         Print &amp;quot;Fehler&amp;quot;&lt;br /&gt;
     End If&lt;br /&gt;
 &lt;br /&gt;
 End If&lt;br /&gt;
&lt;br /&gt;
Wenn das letzte Byte der Übertragung und die berechnete Pr&amp;amp;uuml;fsumme aus den Bytes 1-7 übereinstimmt, war die &amp;amp;Uuml;bertragung erfolgreich, und die Daten k&amp;amp;ouml;nnen weiterverarbeitet werden.&lt;br /&gt;
Beim auslesen der Temperatur werden 9 Bytes &amp;amp;uuml;bertragen, deshalb m&amp;amp;uuml;ssen zum berechnen der Pr&amp;amp;uuml;fsumme Byte 1-8 einbezogen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parasitäre Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Da bei der Schaltung von oben eigentlich drei Leitungen ben&amp;amp;ouml;tigt werden, statt der einen wie man vermuten k&amp;amp;ouml;nnte, ist es mit der folgenden Schaltung immerhin m&amp;amp;ouml;glich die Anzahl auf zwei Leitungen zu reduzieren.&lt;br /&gt;
&lt;br /&gt;
[[Bild:1Wire-DS1820_parasit.png]]&lt;br /&gt;
&lt;br /&gt;
Es ist aber Abh&amp;amp;auml;ngig vom Ger&amp;amp;auml;t und den Umgebungsbedingungen ob es sich immer so l&amp;amp;ouml;sen l&amp;amp;auml;sst. Ein Blick ins Datenblatt hilft da weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom]]&lt;br /&gt;
* [[Bascom#1WIRE_Bus|1-Wire Bascom-Befehle]]&lt;br /&gt;
* [[Avr]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.maxim-ic.com/quick_view2.cfm?qv_pk=2812] - Datenblatt zu DS18B20&lt;br /&gt;
* [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2815] - Datenblatt zu DS18S20&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Linux 80|Linux 80]] 03:16, 23. Aug 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Abkürzung]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Kommunikation]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom]]&lt;/div&gt;</summary>
		<author><name>J-g-s</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom_und_1-Wire&amp;diff=25037</id>
		<title>Bascom und 1-Wire</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom_und_1-Wire&amp;diff=25037"/>
				<updated>2014-07-19T18:10:26Z</updated>
		
		<summary type="html">&lt;p&gt;J-g-s: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Artikel folgen einige Programmbeispiele, in denen gezeigt wird, wie Bascom über den 1-Wire-Bus kommuniziert.&lt;br /&gt;
&lt;br /&gt;
1-Wire (Eindraht) ist eine serielle Schnittstelle, die mit nur einer Datenleitung auskommt, die gleichzeitig auch noch als Stromversorgung genutzt werden kann.&lt;br /&gt;
Aufgrund der Einfachheit kann diese Schnittstelle leicht in Software auf einem Mikrocontroller nachgebildet werden.&lt;br /&gt;
&lt;br /&gt;
In Bascom sind [[Bascom#1WIRE_Bus|Befehle]] für die 1-Wire-Kommunikation enthalten, sodass der Programmierer sich nicht um das Protokoll und das Timing der Übertragung kümmern muss.&lt;br /&gt;
&lt;br /&gt;
Es gibt 1-Wire-Geräte mit verschiedenen Funktionen, in der Roboterwelt dürfte einer der bekanntesten der Temperatursensor DS18S20 (bzw. DS18B20) sein, deswegen wird dieser in den Beispielen verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Die Beschaltung rund um den DS18B20 sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:1Wire-DS1820.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ablauf der Kommunikation ==&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation mit dem 1-Wire-Gerät muss immer diesen Ablauf haben:&lt;br /&gt;
&lt;br /&gt;
* Initialisierung&lt;br /&gt;
* &amp;quot;ROM Function&amp;quot; Befehl&lt;br /&gt;
* &amp;quot;Memory Function&amp;quot; Befehl&lt;br /&gt;
* Übertragung/Daten&lt;br /&gt;
&lt;br /&gt;
Aus diesem Ablauf ergeben sich die beiden folgenden Programmabläufe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommunikation mit nur einem Gerät ==&lt;br /&gt;
&lt;br /&gt;
Wenn sich nur ein einziges Gerät am Bus befindet kann man diese kurze Version der Kommunikation verwenden. Ein ROM-Befehl ist dabei nicht notwendig und kann übersprungen werden, dies muss aber dem Gerät mitgeteilt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 {{vbcomment|Minimalprogramm für Temperaturmessung}}&lt;br /&gt;
 Config 1wire = Portc.7 &lt;br /&gt;
 &lt;br /&gt;
 Dim Sep(9) As Byte&lt;br /&gt;
 &lt;br /&gt;
 1wreset                                         {{vbcomment|Initialisierung}}&lt;br /&gt;
 1wwrite &amp;amp;HCC                                    {{vbcomment|überspringe ROM-Befehl}}&lt;br /&gt;
 1wwrite &amp;amp;H44                                    {{vbcomment|Temperaturmessung anstoßen}}&lt;br /&gt;
 &lt;br /&gt;
 Waitms 500                                      {{vbcomment|warten bis Messung fertig}}&lt;br /&gt;
 &lt;br /&gt;
 1wreset                                         {{vbcomment|Initialisierung}}&lt;br /&gt;
 1wwrite &amp;amp;HCC                                    {{vbcomment|überspringe ROM-Befehl}}&lt;br /&gt;
 1wwrite &amp;amp;HBE                                    {{vbcomment|Temperatur auslesen}}&lt;br /&gt;
 Sep(1) = 1wread(9)                               {{vbcomment|Daten in ein Array lesen}}&lt;br /&gt;
 &lt;br /&gt;
 Wait 1&lt;br /&gt;
&lt;br /&gt;
Im Array Sep() stehen die Daten des Gerätes die dann Anhand des Datenblattes ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommunikation mit mehreren Geräten ==&lt;br /&gt;
&lt;br /&gt;
Wenn sich mehrere Geräte am 1-Wire-Bus befinden, müssen diese jeweils Adressiert werden um mit dem gewünschten Gerät in Kontakt zu treten. Zum Adressieren wird die Seriennummer verwendet, die in jedem 1-Wire-Gerät eindeutig vorhanden ist. Um an diese Seriennummer zu kommen gibt es zwei Strategien.&lt;br /&gt;
&lt;br /&gt;
Entweder man liest bei allen Geräten vorher einzeln diese Nr. aus, um diese in das eigentliche Programm einzutragen (kürzer), oder man sucht beim Programmstart jedesmal nach vorhandenen Ger&amp;amp;auml;ten (flexibler).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SerienNr einzeln auslesen ===&lt;br /&gt;
&lt;br /&gt;
 Config 1wire = Portc.7&lt;br /&gt;
 &lt;br /&gt;
 Dim Ar(8) As Byte&lt;br /&gt;
 &lt;br /&gt;
 1wreset&lt;br /&gt;
 1wwrite &amp;amp;H33                                        {{vbcomment|ROM-Befehl zum lesen der SerienNr}}&lt;br /&gt;
 Ar(1) = 1wread(8)                                   {{vbcomment|8 Bytes lesen}}&lt;br /&gt;
 &lt;br /&gt;
 For I = 1 To 8&lt;br /&gt;
     Print Hex(ar(i));                               {{vbcomment|Ausgeben}}&lt;br /&gt;
     Print &amp;quot; &amp;quot;;&lt;br /&gt;
 Next&lt;br /&gt;
 &lt;br /&gt;
 Print&lt;br /&gt;
 &lt;br /&gt;
 Wait 1&lt;br /&gt;
&lt;br /&gt;
Im Array Ar() befindet sich somit die SerienNr des Gerätes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SerienNr aller Geräte ===&lt;br /&gt;
&lt;br /&gt;
 $regfile = &amp;quot;M32def.dat&amp;quot;&lt;br /&gt;
 $crystal = 16000000&lt;br /&gt;
 $baud = 38400&lt;br /&gt;
 &lt;br /&gt;
 Config 1wire = Portc.7&lt;br /&gt;
 &lt;br /&gt;
 Dim Ar(8) As Byte                                   {{vbcomment|Array für SerienNr.}}&lt;br /&gt;
 Dim I As Byte&lt;br /&gt;
 Dim W As Word&lt;br /&gt;
 &lt;br /&gt;
 Sound Portd.7 , 400 , 450                           {{vbcomment|BEEP bei RN-Control}}&lt;br /&gt;
 &lt;br /&gt;
 Print&lt;br /&gt;
 Print &amp;quot;1-Wire&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Wait 1&lt;br /&gt;
 &lt;br /&gt;
 Ar(1) = 1wsearchfirst()&lt;br /&gt;
 &lt;br /&gt;
 {{vbcomment|gibts überhaupt ein Ger&amp;amp;auml;t}}&lt;br /&gt;
 If Err = 0 Then&lt;br /&gt;
 &lt;br /&gt;
     Do&lt;br /&gt;
         {{vbcomment|Ausgabe der SerienNr.}}&lt;br /&gt;
         For I = 1 To 8&lt;br /&gt;
             Print Hex(ar(i));&lt;br /&gt;
             Print &amp;quot; &amp;quot;;&lt;br /&gt;
         Next&lt;br /&gt;
         Print&lt;br /&gt;
 &lt;br /&gt;
         {{vbcomment|Nach weiterem Ger&amp;amp;auml;t suchen}}&lt;br /&gt;
         Ar(1) = 1wsearchnext()&lt;br /&gt;
 &lt;br /&gt;
     Loop Until Err = 1                       {{vbcomment|solange bis sich kein weiteres Ger&amp;amp;auml;t mehr meldet.}}&lt;br /&gt;
 &lt;br /&gt;
 End If&lt;br /&gt;
 &lt;br /&gt;
 Print &amp;quot;Fertig&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 W = 1wirecount()                                {{vbcomment|Anzahl der gefundenen Ger&amp;amp;auml;te z&amp;amp;auml;hlen}}&lt;br /&gt;
 &lt;br /&gt;
 Print &amp;quot;Anzahl &amp;quot;;&lt;br /&gt;
 Print W&lt;br /&gt;
 &lt;br /&gt;
 Do&lt;br /&gt;
 Loop&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Am ersten Byte der SerienNr (Family-Code) ist zu erkennen um welches Ger&amp;amp;auml;t es sich handelt, beim DS18B20 ist es die &amp;amp;amp;H28, beim DS18S20 die &amp;amp;amp;H10. Da beide unterschiedliche Formate beim Temperaturwert haben, kann die Berechnung anhand des Family-Code angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bestimmtes Gerät ansprechen ===&lt;br /&gt;
&lt;br /&gt;
Um bei mehreren vorhandenen Ger&amp;amp;auml;ten ein bestimmtes anzusprechen muss es mit der SerienNr adressiert werden.&lt;br /&gt;
&lt;br /&gt;
 Do&lt;br /&gt;
     1wverify Ar(1)                                 {{vbcomment|Ger&amp;amp;auml;t mit der SerienNr. aus Ar() auswählen}}&lt;br /&gt;
     {{vbcomment|Gerät vorhanden}}&lt;br /&gt;
     If Err = 0 Then&lt;br /&gt;
 &lt;br /&gt;
         1wwrite &amp;amp;H44                               {{vbcomment|Temperaturmessung anstoßen}}&lt;br /&gt;
 &lt;br /&gt;
         Waitms 500                                 {{vbcomment|warten bis Messung fertig}}&lt;br /&gt;
 &lt;br /&gt;
         1wverify Ar(1)                             {{vbcomment|Ger&amp;amp;auml;t mit der SerienNr. aus Ar() auswählen}}&lt;br /&gt;
         1wwrite &amp;amp;HBE                               {{vbcomment|Temperatur auslesen}}&lt;br /&gt;
         Sep(1) = 1wread(9)                          {{vbcomment|Daten in ein Array lesen, beschreibt Sep(1), Sep(2), bis Sep(9)}}&lt;br /&gt;
 &lt;br /&gt;
         For I = 1 To 9&lt;br /&gt;
             Print Hex(sep(i));&lt;br /&gt;
         Next&lt;br /&gt;
         Print&lt;br /&gt;
 &lt;br /&gt;
         {{vbcomment|Nur für die Temperatur wichtige Daten ausgeben}}&lt;br /&gt;
         Print Hex(sep(2));&lt;br /&gt;
         Print Hex(sep(1))&lt;br /&gt;
 &lt;br /&gt;
     Else&lt;br /&gt;
         Print &amp;quot;Fehler&amp;quot;&lt;br /&gt;
     End If&lt;br /&gt;
 &lt;br /&gt;
     Wait 1&lt;br /&gt;
 &lt;br /&gt;
 Loop&lt;br /&gt;
&lt;br /&gt;
Die SerienNr. des gew&amp;amp;uuml;nschten Ger&amp;amp;auml;tes muss im Array Ar() stehen, bevor es mit &amp;lt;tt&amp;gt;1wverify&amp;lt;/tt&amp;gt; gesucht wird, dies ist auch gleichzeitig der ROM-Befehl, diesem kann der Memory-Befehl folgen, und anschlie&amp;amp;szlig;end die Daten übertragen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prüfsumme ==&lt;br /&gt;
&lt;br /&gt;
Da wegen der einen Datenleitung durchaus mit St&amp;amp;ouml;rungen zu rechnen ist, wird jeder &amp;amp;Uuml;bertragung ein Pr&amp;amp;uuml;fbyte angehängt, mit dem sich die Korrektheit der Daten überpr&amp;amp;uuml;fen lässt.&lt;br /&gt;
&lt;br /&gt;
 Config 1wire = Portc.7&lt;br /&gt;
 &lt;br /&gt;
 Dim Ar(8) As Byte                                   {{vbcomment|Array für SerienNr}}&lt;br /&gt;
 Dim I As Byte&lt;br /&gt;
 &lt;br /&gt;
 1wreset&lt;br /&gt;
 If Err = 0 Then&lt;br /&gt;
     1wwrite &amp;amp;H33                                    {{vbcomment|ROM-Befehl zum lesen der SerienNr.}}&lt;br /&gt;
     Ar(1) = 1wread(8)                               {{vbcomment|8 Bytes lesen}}&lt;br /&gt;
 &lt;br /&gt;
     For I = 1 To 8&lt;br /&gt;
         Print Hex(ar(i));                           {{vbcomment|Ausgabe der SerienNr.}}&lt;br /&gt;
         Print &amp;quot; &amp;quot;;&lt;br /&gt;
     Next&lt;br /&gt;
     Print&lt;br /&gt;
 &lt;br /&gt;
     Print Hex(crc8(ar(1) , 7) )                     {{vbcomment|Pr&amp;amp;uuml;fsumme ausgeben}}&lt;br /&gt;
 &lt;br /&gt;
     If Ar(8) = Crc8(ar(1) , 7) Then                 {{vbcomment|Pr&amp;amp;uuml;fsumme vergleichen}}&lt;br /&gt;
         Print &amp;quot;Daten OK&amp;quot;&lt;br /&gt;
     Else&lt;br /&gt;
         Print &amp;quot;Fehler&amp;quot;&lt;br /&gt;
     End If&lt;br /&gt;
 &lt;br /&gt;
 End If&lt;br /&gt;
&lt;br /&gt;
Wenn das letzte Byte der Übertragung und die berechnete Pr&amp;amp;uuml;fsumme aus den Bytes 1-7 übereinstimmt, war die &amp;amp;Uuml;bertragung erfolgreich, und die Daten k&amp;amp;ouml;nnen weiterverarbeitet werden.&lt;br /&gt;
Beim auslesen der Temperatur werden 9 Bytes &amp;amp;uuml;bertragen, deshalb m&amp;amp;uuml;ssen zum berechnen der Pr&amp;amp;uuml;fsumme Byte 1-8 einbezogen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parasitäre Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Da bei der Schaltung von oben eigentlich drei Leitungen ben&amp;amp;ouml;tigt werden, statt der einen wie man vermuten k&amp;amp;ouml;nnte, ist es mit der folgenden Schaltung immerhin m&amp;amp;ouml;glich die Anzahl auf zwei Leitungen zu reduzieren.&lt;br /&gt;
&lt;br /&gt;
[[Bild:1Wire-DS1820_parasit.png]]&lt;br /&gt;
&lt;br /&gt;
Es ist aber Abh&amp;amp;auml;ngig vom Ger&amp;amp;auml;t und den Umgebungsbedingungen ob es sich immer so l&amp;amp;ouml;sen l&amp;amp;auml;sst. Ein Blick ins Datenblatt hilft da weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Bascom]]&lt;br /&gt;
* [[Bascom#1WIRE_Bus|1-Wire Bascom-Befehle]]&lt;br /&gt;
* [[Avr]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.maxim-ic.com/quick_view2.cfm?qv_pk=2812] - Datenblatt zu DS18B20&lt;br /&gt;
* [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2815] - Datenblatt zu DS18S20&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Linux 80|Linux 80]] 03:16, 23. Aug 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Abkürzung]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Kommunikation]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom]]&lt;/div&gt;</summary>
		<author><name>J-g-s</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_und_1-Wire&amp;diff=25036</id>
		<title>Diskussion:Bascom und 1-Wire</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Bascom_und_1-Wire&amp;diff=25036"/>
				<updated>2014-07-19T18:05:02Z</updated>
		
		<summary type="html">&lt;p&gt;J-g-s: Variable SP() ändern&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bascom 2.077 mag die Variable DIM Sp(9) as Byte nicht mehr,&lt;br /&gt;
ist schon durch Bascom selbst in Gebrauch.&lt;br /&gt;
&lt;br /&gt;
DIM SP(9) as Byte    Fehler&lt;br /&gt;
Sp(1) = 1wread(9)    Fehler &lt;br /&gt;
Print Hex(sp(2));    Fehler&lt;br /&gt;
Print Hex(sp(1))     Fehler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schlage vor die Variable in den Beispielen &amp;quot;Bestimmtes Gerät ansprechen&amp;quot; umzubenennen&lt;br /&gt;
in Sep(9) oder was anderes.&lt;br /&gt;
&lt;br /&gt;
DIM Sep(9) as Byte     OK&lt;br /&gt;
&lt;br /&gt;
Sep(1) = 1wread(9)    OK &lt;br /&gt;
Print Hex(sep(2));    OK&lt;br /&gt;
Print Hex(sep(1))     OK&lt;/div&gt;</summary>
		<author><name>J-g-s</name></author>	</entry>

	</feed>