<?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=Bratwurst</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=Bratwurst"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Bratwurst"/>
		<updated>2026-04-11T20:44:25Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom_und_I2C_EEprom&amp;diff=7355</id>
		<title>Bascom und I2C EEprom</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom_und_I2C_EEprom&amp;diff=7355"/>
				<updated>2006-05-15T14:10:28Z</updated>
		
		<summary type="html">&lt;p&gt;Bratwurst: /* Beispiel für EEprom 24C16 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ansteuern vom I2C EEproms mit Bascom ==&lt;br /&gt;
&lt;br /&gt;
Der Artikel demonstriert wie man EEPROM Speicherbausteine unter Bascom über den [[I2C]]-Bus anspricht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Struktur: ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'---- schreiben ins EEprom ----------------------------------------&lt;br /&gt;
I2cstart                                   'Start I2C&lt;br /&gt;
I2cwbyte Slave Adresse&lt;br /&gt;
I2cwbyte Speicheradresse&lt;br /&gt;
I2cwbyte Wert&lt;br /&gt;
I2cstop                                    'Stop I2C&lt;br /&gt;
Waitms 10                                  'warte 10ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'--- lesen vom EEprom --------------------------------------------&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte Slave Adresse  &lt;br /&gt;
I2cwbyte Speicheradresse&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte Slave Adresse +1 für schreiben&lt;br /&gt;
I2crbyte lese Wert&lt;br /&gt;
I2cstop                                     'Stop I2C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für EEprom 24C16 ===&lt;br /&gt;
Zum besseren Verständnis werden hier die I2C Befehle untereinander geschrieben.&lt;br /&gt;
In einem grösserem Programm könnte man aber auch eine Sub-Routine deklarieren, die dann den Schreib/Lesevorgang abwickelt.&lt;br /&gt;
&lt;br /&gt;
(Eine Sub-Routine braucht aber ca. um die 30Byte pro Aufruf mehr an Speicher, als ein Gosub aufruf. Ich persöhnlich bleibe deshalb doch lieber bei den Gosub's.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel :'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'============I2C EEprom schreiben/lesen ==================================&lt;br /&gt;
&lt;br /&gt;
 ' =========== Für 24C16 EEprom =====================&lt;br /&gt;
 ' 8MHz Quarz&lt;br /&gt;
 ' LCD auf Port B ,&lt;br /&gt;
 '&lt;br /&gt;
$regfile = &amp;quot;m8def.dat&amp;quot;&lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
&lt;br /&gt;
'---Config für LCD -----------------&lt;br /&gt;
Config Lcd = 40 * 2&lt;br /&gt;
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5&lt;br /&gt;
Config Lcdbus = 4&lt;br /&gt;
Config Lcdmode = Port&lt;br /&gt;
Cursor On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'SDA und SCL definieren&lt;br /&gt;
Config Sda = Portd.5                                         &lt;br /&gt;
Config Scl = Portd.7                                        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dim X As Byte&lt;br /&gt;
Dim A As Byte&lt;br /&gt;
Dim B As Byte&lt;br /&gt;
Dim Lesen As Byte&lt;br /&gt;
&lt;br /&gt;
CLS&lt;br /&gt;
Do&lt;br /&gt;
'---- schreibe in EEprom ----&lt;br /&gt;
For A = 1 To 10&lt;br /&gt;
Incr X                                    '1 bis Überlauf zählen&lt;br /&gt;
&lt;br /&gt;
I2cstart                                  'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                             'Sende Slave Adresse&lt;br /&gt;
I2cwbyte A                                'Sende Speicheradresse&lt;br /&gt;
I2cwbyte X                                'Sende Wert&lt;br /&gt;
I2cstop                                   'Stop I2C&lt;br /&gt;
Waitms 10                                 'warte 10ms&lt;br /&gt;
&lt;br /&gt;
Locate 1 , 1&lt;br /&gt;
Lcd &amp;quot;ins EEprom = &amp;quot; ; X ; &amp;quot;  &amp;quot;  ' Ausgabe der geschriebenen Werte am LCD&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'--- lesen vom EEprom ----&lt;br /&gt;
For B = 1 To 10&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                               'sende Slave Adresse  &lt;br /&gt;
I2cwbyte B                                  'sende Speicheradresse&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA1                               'sende Slave Adresse +1 für lesen&lt;br /&gt;
I2crbyte Lesen , Nack                       'lese Adresse vom EEprom&lt;br /&gt;
I2cstop                                     'Stop I2C&lt;br /&gt;
&lt;br /&gt;
Locate 2 , 1&lt;br /&gt;
Lcd &amp;quot;Lese  EEprom= &amp;quot; ; Lesen ; &amp;quot;  &amp;quot;                         'Ausgabe der EEprom Werte&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next B&lt;br /&gt;
&lt;br /&gt;
Loop&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schleife A schreibt den Wert 1-10 in die Speicherstelle 1-10 &amp;lt;br&amp;gt;&lt;br /&gt;
Schleife B liest Speicherstelle 1-10 wieder aus und zeigt dies auch am LCD an.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für EEprom 24C256 ===&lt;br /&gt;
&lt;br /&gt;
EEprom  24C128, 24C256 haben im Gegensatz zu den 24C16'er einen Adressraum von zwei Byte. (Weil grösserer Speicherbereich im EEprom vorhanden ist)&lt;br /&gt;
Darum muss man den Adressberreich in High und Low Adressbereich trennen.&lt;br /&gt;
(Zuerst High-Adressberreich schreiben und dann Low-Adressbereich) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel: ''' &amp;lt;br&amp;gt;&lt;br /&gt;
Wie Beispiel oben, nur mit erweiterten Adressbereich.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'============I2C EEprom schreiben/lesen ==================================&lt;br /&gt;
&lt;br /&gt;
 ' =========== Für 24C256 EEprom =====================&lt;br /&gt;
 ' 8MHz Quarz&lt;br /&gt;
 ' LCD auf Port B ,&lt;br /&gt;
 '&lt;br /&gt;
$regfile = &amp;quot;m8def.dat&amp;quot;&lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
&lt;br /&gt;
'---Config für LCD -----------------&lt;br /&gt;
Config Lcd = 40 * 2&lt;br /&gt;
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5&lt;br /&gt;
Config Lcdbus = 4&lt;br /&gt;
Config Lcdmode = Port&lt;br /&gt;
Cursor On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'SDA und SCL definieren&lt;br /&gt;
Config Sda = Portd.5                                         &lt;br /&gt;
Config Scl = Portd.7                                        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dim X As Byte&lt;br /&gt;
Dim A As Byte&lt;br /&gt;
Dim B As Byte&lt;br /&gt;
Dim Lesen As Byte&lt;br /&gt;
CLS&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
'---- schreibe in EEprom ----&lt;br /&gt;
For A = 1 To 10&lt;br /&gt;
Incr X                                    '1 bis Überlauf zählen&lt;br /&gt;
&lt;br /&gt;
I2cstart                                  'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                             'Sende Slave Adresse&lt;br /&gt;
I2cwbyte 1                                'Sende Speicheradresse High&lt;br /&gt;
I2cwbyte A                                'Sende Speicheradresse LOw&lt;br /&gt;
I2cwbyte X                                'Sende Wert&lt;br /&gt;
I2cstop                                   'Stop I2C&lt;br /&gt;
Waitms 10                                 'warte 10ms&lt;br /&gt;
&lt;br /&gt;
Locate 1 , 1&lt;br /&gt;
Lcd &amp;quot;ins EEprom = &amp;quot; ; X ; &amp;quot;  &amp;quot;  ' Ausgabe der geschriebenen Werte am LCD&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'--- lesen vom EEprom ----&lt;br /&gt;
For B = 1 To 10&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                               'sende Slave Adresse  &lt;br /&gt;
I2cwbyte 1                                  'sende Speicheradresse High&lt;br /&gt;
I2cwbyte B                                  'sende Speicheradresse Low&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA1                               'sende Slave Adresse +1 für schreiben&lt;br /&gt;
I2crbyte Lesen , Nack                       'lese Adresse vom EEprom&lt;br /&gt;
I2cstop                                     'Stop I2C&lt;br /&gt;
&lt;br /&gt;
Locate 2 , 1&lt;br /&gt;
Lcd &amp;quot;Lese  EEprom= &amp;quot; ; Lesen ; &amp;quot;  &amp;quot;                         'Ausgabe der EEprom Werte&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next B&lt;br /&gt;
&lt;br /&gt;
Loop&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High/Low Adressbereich mit Overlay leicht ansprechen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'============I2C EEprom lesen/schreiben ==================================&lt;br /&gt;
&lt;br /&gt;
 '===========Für 24C256 EEprom=====================&lt;br /&gt;
 ' 8MHz Quarz&lt;br /&gt;
 ' LCD auf Port B ,&lt;br /&gt;
&lt;br /&gt;
$regfile = &amp;quot;m8def.dat&amp;quot;&lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
&lt;br /&gt;
'---Config für LCD -----------------&lt;br /&gt;
Config Lcd = 40 * 2&lt;br /&gt;
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5&lt;br /&gt;
Config Lcdbus = 4&lt;br /&gt;
Config Lcdmode = Port&lt;br /&gt;
Cursor On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Config Sda = Portd.5                                        ' I2C-Port festlegen&lt;br /&gt;
Config Scl = Portd.7                                        ' I2C-Port festlegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dim X As Byte&lt;br /&gt;
Dim A As Word&lt;br /&gt;
Dim B As Word&lt;br /&gt;
Dim Schreiben As Byte&lt;br /&gt;
Dim Lesen As Byte&lt;br /&gt;
&lt;br /&gt;
Dim Adresse As Word At $160                      'Die Adresse als Word-Variable&lt;br /&gt;
Dim Low_adresse As Byte At $160 Overlay          'Zeiger auf das erste Byte&lt;br /&gt;
Dim High_adresse As Byte At $161 Overlay         'Zeiger auf das zweite Byte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'===================Hauptprogramm===============================================&lt;br /&gt;
Do&lt;br /&gt;
&lt;br /&gt;
'----schreiben----&lt;br /&gt;
For Adresse = 250 To 260                          'Adresse geht über die Byte-Grenze&lt;br /&gt;
Incr X                                            '1 bis Überlauf&lt;br /&gt;
&lt;br /&gt;
I2cstart                                          'Start&lt;br /&gt;
I2cwbyte &amp;amp;HA0                                     'Sende Slavadresse&lt;br /&gt;
I2cwbyte High_adresse                             'Sende Speicheradresse High&lt;br /&gt;
I2cwbyte Low_adresse                              'Sende Speicheradresse  LOW&lt;br /&gt;
I2cwbyte X                                        'Sende Wert&lt;br /&gt;
I2cstop                                           'stop&lt;br /&gt;
Waitms 10&lt;br /&gt;
&lt;br /&gt;
Locate 1 , 1&lt;br /&gt;
Lcd &amp;quot;-&amp;gt;Adres.=&amp;quot; ; Adresse ; &amp;quot;Wert=&amp;quot; ; X ; &amp;quot;  &amp;quot;    'Anzeige vom schreiben&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next Adresse&lt;br /&gt;
&lt;br /&gt;
'---lesen----&lt;br /&gt;
For Adresse = 250 To 260&lt;br /&gt;
I2cstart                                      'Start&lt;br /&gt;
I2cwbyte &amp;amp;HA0                                 'Sende Slavadresse +1 für Schreiben&lt;br /&gt;
I2cwbyte High_adresse                         'Sende Speicheradresse High&lt;br /&gt;
I2cwbyte Low_adresse                          'Sende Speicheradresse Low&lt;br /&gt;
&lt;br /&gt;
I2cstart                                      'Start&lt;br /&gt;
I2cwbyte &amp;amp;HA1                                 'Sende Slavadresse +1 für Lesen&lt;br /&gt;
I2crbyte Lesen , Nack                         'Lese Adresse vom EEprom&lt;br /&gt;
I2cstop                                       'Stop&lt;br /&gt;
&lt;br /&gt;
Locate 2 , 1&lt;br /&gt;
Lcd &amp;quot;&amp;lt;-Adres.=&amp;quot; ; Adresse ; &amp;quot;Wert=&amp;quot; ; Lesen ; &amp;quot;  &amp;quot;    'Anzeige vom lesen&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next Adresse&lt;br /&gt;
&lt;br /&gt;
Loop&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Sache mit dem Overlay : ===&lt;br /&gt;
&lt;br /&gt;
 Dim Adresse As Word At $160      &lt;br /&gt;
&lt;br /&gt;
Hier definiere ich die Variable für die Adresse vom I2C-EEprom als Word-Variable. Die Variable soll ab Adresse $160 im Ram vom AVR abgelegt werden. Die Word-Variable hat einen Berreich von zwei Byte und braucht daher den Berreich von $160 - $161&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit:                &lt;br /&gt;
 Dim Low_adresse As Byte At $160 Overlay          &lt;br /&gt;
 Dim High_adresse As Byte At $161 Overlay &lt;br /&gt;
weise ich der neuen (Pseudo) Variablen &amp;quot;Low_adresse&amp;quot; einen Zeiger auf die Speicherstelle $160 und &amp;quot;High_adresse&amp;quot;  einen Zeiger auf $161 zu.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Low_adresse&amp;quot; und &amp;quot;High_Adresse&amp;quot; sind also keine Variablen, sondern nur jeweils ein &amp;quot;Zeiger&amp;quot; auf diesen Speicherberreich der Variable: &amp;quot;Adresse&amp;quot; !&lt;br /&gt;
&lt;br /&gt;
Mit diesen zwei Zeigern habe ich automatisch jetzt meine Low und High Adressen für das I2C-EEprom.&lt;br /&gt;
&lt;br /&gt;
Ich kann diese zwei Zeiger jetzt ganz normal, wie Variablen, im Programm verwenden. :-)&lt;br /&gt;
&lt;br /&gt;
==Autor==&lt;br /&gt;
*  [[Benutzer:Roberto|Roberto]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Avr]]&lt;br /&gt;
* [[Bascom]]&lt;br /&gt;
* [[EEPROM]]&lt;br /&gt;
* [[I2C]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=12086&amp;amp;highlight=eeprom Roboternetz-Thread]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=15433&amp;amp;highlight=eeprom Roboternetz-Thread]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=10945&amp;amp;highlight=eeprom Roboternetz-Thread]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=15661 Roboternetz-Thread]&lt;br /&gt;
* http://www.eseo.de/i2c.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom]]&lt;/div&gt;</summary>
		<author><name>Bratwurst</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom_und_I2C_EEprom&amp;diff=7354</id>
		<title>Bascom und I2C EEprom</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom_und_I2C_EEprom&amp;diff=7354"/>
				<updated>2006-05-15T14:07:35Z</updated>
		
		<summary type="html">&lt;p&gt;Bratwurst: /* High/Low Adressbereich mit Overlay leicht ansprechen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ansteuern vom I2C EEproms mit Bascom ==&lt;br /&gt;
&lt;br /&gt;
Der Artikel demonstriert wie man EEPROM Speicherbausteine unter Bascom über den [[I2C]]-Bus anspricht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Struktur: ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'---- schreiben ins EEprom ----------------------------------------&lt;br /&gt;
I2cstart                                   'Start I2C&lt;br /&gt;
I2cwbyte Slave Adresse&lt;br /&gt;
I2cwbyte Speicheradresse&lt;br /&gt;
I2cwbyte Wert&lt;br /&gt;
I2cstop                                    'Stop I2C&lt;br /&gt;
Waitms 10                                  'warte 10ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'--- lesen vom EEprom --------------------------------------------&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte Slave Adresse  &lt;br /&gt;
I2cwbyte Speicheradresse&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte Slave Adresse +1 für schreiben&lt;br /&gt;
I2crbyte lese Wert&lt;br /&gt;
I2cstop                                     'Stop I2C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für EEprom 24C16 ===&lt;br /&gt;
Zum besseren Verständnis werden hier die I2C Befehle untereinander geschrieben.&lt;br /&gt;
In einem grösserem Programm könnte man aber auch eine Sub-Routine deklarieren, die dann den Schreib/Lesevorgang abwickelt.&lt;br /&gt;
&lt;br /&gt;
(Eine Sub-Routine braucht aber ca. um die 30Byte pro Aufruf mehr an Speicher, als ein Gosub aufruf. Ich persöhnlich bleibe deshalb doch lieber bei den Gosub's.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel :'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'============I2C EEprom schreiben/lesen ==================================&lt;br /&gt;
&lt;br /&gt;
 ' =========== Für 24C16 EEprom =====================&lt;br /&gt;
 ' 8MHz Quarz&lt;br /&gt;
 ' LCD auf Port B ,&lt;br /&gt;
 '&lt;br /&gt;
$regfile = &amp;quot;m8def.dat&amp;quot;&lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
&lt;br /&gt;
'---Config für LCD -----------------&lt;br /&gt;
Config Lcd = 40 * 2&lt;br /&gt;
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5&lt;br /&gt;
Config Lcdbus = 4&lt;br /&gt;
Config Lcdmode = Port&lt;br /&gt;
Cursor On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'SDA und SCL definieren&lt;br /&gt;
Config Sda = Portd.5                                         &lt;br /&gt;
Config Scl = Portd.7                                        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dim X As Byte&lt;br /&gt;
Dim A As Byte&lt;br /&gt;
Dim B As Byte&lt;br /&gt;
Dim Lesen As Byte&lt;br /&gt;
&lt;br /&gt;
CLS&lt;br /&gt;
Do&lt;br /&gt;
'---- schreibe in EEprom ----&lt;br /&gt;
For A = 1 To 10&lt;br /&gt;
Incr X                                    '1 bis Überlauf zählen&lt;br /&gt;
&lt;br /&gt;
I2cstart                                  'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                             'Sende Slave Adresse&lt;br /&gt;
I2cwbyte A                                'Sende Speicheradresse&lt;br /&gt;
I2cwbyte X                                'Sende Wert&lt;br /&gt;
I2cstop                                   'Stop I2C&lt;br /&gt;
Waitms 10                                 'warte 10ms&lt;br /&gt;
&lt;br /&gt;
Locate 1 , 1&lt;br /&gt;
Lcd &amp;quot;ins EEprom = &amp;quot; ; X ; &amp;quot;  &amp;quot;  ' Ausgabe der geschriebenen Werte am LCD&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'--- lesen vom EEprom ----&lt;br /&gt;
For B = 1 To 10&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                               'sende Slave Adresse  &lt;br /&gt;
I2cwbyte B                                  'sende Speicheradresse&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA1                               'sende Slave Adresse +1 für schreiben&lt;br /&gt;
I2crbyte Lesen , Nack                       'lese Adresse vom EEprom&lt;br /&gt;
I2cstop                                     'Stop I2C&lt;br /&gt;
&lt;br /&gt;
Locate 2 , 1&lt;br /&gt;
Lcd &amp;quot;Lese  EEprom= &amp;quot; ; Lesen ; &amp;quot;  &amp;quot;                         'Ausgabe der EEprom Werte&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next B&lt;br /&gt;
&lt;br /&gt;
Loop&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schleife A schreibt den Wert 1-10 in die Speicherstelle 1-10 &amp;lt;br&amp;gt;&lt;br /&gt;
Schleife B liest Speicherstelle 1-10 wieder aus und zeigt dies auch am LCD an.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für EEprom 24C256 ===&lt;br /&gt;
&lt;br /&gt;
EEprom  24C128, 24C256 haben im Gegensatz zu den 24C16'er einen Adressraum von zwei Byte. (Weil grösserer Speicherbereich im EEprom vorhanden ist)&lt;br /&gt;
Darum muss man den Adressberreich in High und Low Adressbereich trennen.&lt;br /&gt;
(Zuerst High-Adressberreich schreiben und dann Low-Adressbereich) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel: ''' &amp;lt;br&amp;gt;&lt;br /&gt;
Wie Beispiel oben, nur mit erweiterten Adressbereich.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'============I2C EEprom schreiben/lesen ==================================&lt;br /&gt;
&lt;br /&gt;
 ' =========== Für 24C256 EEprom =====================&lt;br /&gt;
 ' 8MHz Quarz&lt;br /&gt;
 ' LCD auf Port B ,&lt;br /&gt;
 '&lt;br /&gt;
$regfile = &amp;quot;m8def.dat&amp;quot;&lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
&lt;br /&gt;
'---Config für LCD -----------------&lt;br /&gt;
Config Lcd = 40 * 2&lt;br /&gt;
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5&lt;br /&gt;
Config Lcdbus = 4&lt;br /&gt;
Config Lcdmode = Port&lt;br /&gt;
Cursor On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'SDA und SCL definieren&lt;br /&gt;
Config Sda = Portd.5                                         &lt;br /&gt;
Config Scl = Portd.7                                        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dim X As Byte&lt;br /&gt;
Dim A As Byte&lt;br /&gt;
Dim B As Byte&lt;br /&gt;
Dim Lesen As Byte&lt;br /&gt;
CLS&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
'---- schreibe in EEprom ----&lt;br /&gt;
For A = 1 To 10&lt;br /&gt;
Incr X                                    '1 bis Überlauf zählen&lt;br /&gt;
&lt;br /&gt;
I2cstart                                  'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                             'Sende Slave Adresse&lt;br /&gt;
I2cwbyte 1                                'Sende Speicheradresse High&lt;br /&gt;
I2cwbyte A                                'Sende Speicheradresse LOw&lt;br /&gt;
I2cwbyte X                                'Sende Wert&lt;br /&gt;
I2cstop                                   'Stop I2C&lt;br /&gt;
Waitms 10                                 'warte 10ms&lt;br /&gt;
&lt;br /&gt;
Locate 1 , 1&lt;br /&gt;
Lcd &amp;quot;ins EEprom = &amp;quot; ; X ; &amp;quot;  &amp;quot;  ' Ausgabe der geschriebenen Werte am LCD&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'--- lesen vom EEprom ----&lt;br /&gt;
For B = 1 To 10&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA0                               'sende Slave Adresse  &lt;br /&gt;
I2cwbyte 1                                  'sende Speicheradresse High&lt;br /&gt;
I2cwbyte B                                  'sende Speicheradresse Low&lt;br /&gt;
&lt;br /&gt;
I2cstart                                    'Start I2C&lt;br /&gt;
I2cwbyte &amp;amp;HA1                               'sende Slave Adresse +1 für schreiben&lt;br /&gt;
I2crbyte Lesen , Nack                       'lese Adresse vom EEprom&lt;br /&gt;
I2cstop                                     'Stop I2C&lt;br /&gt;
&lt;br /&gt;
Locate 2 , 1&lt;br /&gt;
Lcd &amp;quot;Lese  EEprom= &amp;quot; ; Lesen ; &amp;quot;  &amp;quot;                         'Ausgabe der EEprom Werte&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next B&lt;br /&gt;
&lt;br /&gt;
Loop&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High/Low Adressbereich mit Overlay leicht ansprechen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'============I2C EEprom lesen/schreiben ==================================&lt;br /&gt;
&lt;br /&gt;
 '===========Für 24C256 EEprom=====================&lt;br /&gt;
 ' 8MHz Quarz&lt;br /&gt;
 ' LCD auf Port B ,&lt;br /&gt;
&lt;br /&gt;
$regfile = &amp;quot;m8def.dat&amp;quot;&lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
&lt;br /&gt;
'---Config für LCD -----------------&lt;br /&gt;
Config Lcd = 40 * 2&lt;br /&gt;
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5&lt;br /&gt;
Config Lcdbus = 4&lt;br /&gt;
Config Lcdmode = Port&lt;br /&gt;
Cursor On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Config Sda = Portd.5                                        ' I2C-Port festlegen&lt;br /&gt;
Config Scl = Portd.7                                        ' I2C-Port festlegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dim X As Byte&lt;br /&gt;
Dim A As Word&lt;br /&gt;
Dim B As Word&lt;br /&gt;
Dim Schreiben As Byte&lt;br /&gt;
Dim Lesen As Byte&lt;br /&gt;
&lt;br /&gt;
Dim Adresse As Word At $160                      'Die Adresse als Word-Variable&lt;br /&gt;
Dim Low_adresse As Byte At $160 Overlay          'Zeiger auf das erste Byte&lt;br /&gt;
Dim High_adresse As Byte At $161 Overlay         'Zeiger auf das zweite Byte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'===================Hauptprogramm===============================================&lt;br /&gt;
Do&lt;br /&gt;
&lt;br /&gt;
'----schreiben----&lt;br /&gt;
For Adresse = 250 To 260                          'Adresse geht über die Byte-Grenze&lt;br /&gt;
Incr X                                            '1 bis Überlauf&lt;br /&gt;
&lt;br /&gt;
I2cstart                                          'Start&lt;br /&gt;
I2cwbyte &amp;amp;HA0                                     'Sende Slavadresse&lt;br /&gt;
I2cwbyte High_adresse                             'Sende Speicheradresse High&lt;br /&gt;
I2cwbyte Low_adresse                              'Sende Speicheradresse  LOW&lt;br /&gt;
I2cwbyte X                                        'Sende Wert&lt;br /&gt;
I2cstop                                           'stop&lt;br /&gt;
Waitms 10&lt;br /&gt;
&lt;br /&gt;
Locate 1 , 1&lt;br /&gt;
Lcd &amp;quot;-&amp;gt;Adres.=&amp;quot; ; Adresse ; &amp;quot;Wert=&amp;quot; ; X ; &amp;quot;  &amp;quot;    'Anzeige vom schreiben&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next Adresse&lt;br /&gt;
&lt;br /&gt;
'---lesen----&lt;br /&gt;
For Adresse = 250 To 260&lt;br /&gt;
I2cstart                                      'Start&lt;br /&gt;
I2cwbyte &amp;amp;HA0                                 'Sende Slavadresse +1 für Schreiben&lt;br /&gt;
I2cwbyte High_adresse                         'Sende Speicheradresse High&lt;br /&gt;
I2cwbyte Low_adresse                          'Sende Speicheradresse Low&lt;br /&gt;
&lt;br /&gt;
I2cstart                                      'Start&lt;br /&gt;
I2cwbyte &amp;amp;HA1                                 'Sende Slavadresse +1 für Lesen&lt;br /&gt;
I2crbyte Lesen , Nack                         'Lese Adresse vom EEprom&lt;br /&gt;
I2cstop                                       'Stop&lt;br /&gt;
&lt;br /&gt;
Locate 2 , 1&lt;br /&gt;
Lcd &amp;quot;&amp;lt;-Adres.=&amp;quot; ; Adresse ; &amp;quot;Wert=&amp;quot; ; Lesen ; &amp;quot;  &amp;quot;    'Anzeige vom lesen&lt;br /&gt;
Waitms 500&lt;br /&gt;
Next Adresse&lt;br /&gt;
&lt;br /&gt;
Loop&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Sache mit dem Overlay : ===&lt;br /&gt;
&lt;br /&gt;
 Dim Adresse As Word At $160      &lt;br /&gt;
&lt;br /&gt;
Hier definiere ich die Variable für die Adresse vom I2C-EEprom als Word-Variable. Die Variable soll ab Adresse $160 im Ram vom AVR abgelegt werden. Die Word-Variable hat einen Berreich von zwei Byte und braucht daher den Berreich von $160 - $161&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit:                &lt;br /&gt;
 Dim Low_adresse As Byte At $160 Overlay          &lt;br /&gt;
 Dim High_adresse As Byte At $161 Overlay &lt;br /&gt;
weise ich der neuen (Pseudo) Variablen &amp;quot;Low_adresse&amp;quot; einen Zeiger auf die Speicherstelle $160 und &amp;quot;High_adresse&amp;quot;  einen Zeiger auf $161 zu.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Low_adresse&amp;quot; und &amp;quot;High_Adresse&amp;quot; sind also keine Variablen, sondern nur jeweils ein &amp;quot;Zeiger&amp;quot; auf diesen Speicherberreich der Variable: &amp;quot;Adresse&amp;quot; !&lt;br /&gt;
&lt;br /&gt;
Mit diesen zwei Zeigern habe ich automatisch jetzt meine Low und High Adressen für das I2C-EEprom.&lt;br /&gt;
&lt;br /&gt;
Ich kann diese zwei Zeiger jetzt ganz normal, wie Variablen, im Programm verwenden. :-)&lt;br /&gt;
&lt;br /&gt;
==Autor==&lt;br /&gt;
*  [[Benutzer:Roberto|Roberto]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Avr]]&lt;br /&gt;
* [[Bascom]]&lt;br /&gt;
* [[EEPROM]]&lt;br /&gt;
* [[I2C]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=12086&amp;amp;highlight=eeprom Roboternetz-Thread]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=15433&amp;amp;highlight=eeprom Roboternetz-Thread]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=10945&amp;amp;highlight=eeprom Roboternetz-Thread]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=15661 Roboternetz-Thread]&lt;br /&gt;
* http://www.eseo.de/i2c.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom]]&lt;/div&gt;</summary>
		<author><name>Bratwurst</name></author>	</entry>

	</feed>