Ok. Danke![]()
Ok. Danke![]()
So weit ich weiß (=gelesen hatte), muss man diejenigen Bits, die man als Eingang haben will, zuvor auf H setzen, damit sie -weil OpenCollector- auch hochohmig sind. H-Pegel auf L-Ausgang macht sich nicht so gut!
Das stimmt wohlH-Pegel auf L-Ausgang macht sich nicht so gut!
So, ich habe jetzt mal mit dem 24C16 weitergemacht. Dieser hat gleich funktioniert. Doch habe ich noch ein paar Fragen (Verständnis) :
Ist das richtig, dass beim 24C16 Typ die Adressenanschlüsse nicht intern beschaltet sind, sodass ich nur eine Adresse habe und auch nicht ändern kann (so stand es irgendwo)??
Wie ist der 24C16 genau aufgebaut ?? Damit meine ich wie viele Datenstellen und was passt in jede Stelle ?? Kann ich in eine Stelle auch ein Wort schreiben oder nur eine gewisse länge von Zahlen/Bits ??
Das ist das Programm :
Wieso muss ich bei der For B = 1 To 10 Schleife erst einmal den I2C Bus öffnenCode:$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 $hwstack = 200 $swstack = 200 $framesize = 400 Config Portd.7 = Output 'TWI konfigurieren Config Sda = Portc.1 Config Scl = Portc.0 Config Twi = 100000 Dim X As Byte Dim A As Byte Dim B As Byte Dim Lesen As Byte Sound Portd.7 , 400 , 450 Sound Portd.7 , 400 , 250 Sound Portd.7 , 400 , 450 Wait 1 Do '---- schreibe in EEprom ---- For A = 1 To 10 Incr X '1 bis Überlauf zählen I2cstart 'Start I2C I2cwbyte &HA0 'Sende Slave Adresse I2cwbyte A 'Sende Speicheradresse I2cwbyte X 'Sende Wert I2cstop 'Stop I2C Waitms 10 'warte 10ms Print "ins EEprom = " ; X ; " " ' Ausgabe der geschriebenen Werte Waitms 500 Next A '--- lesen vom EEprom ---- For B = 1 To 10 I2cstart 'Start I2C I2cwbyte &HA0 'sende Slave Adresse I2cwbyte B 'sende Speicheradresse I2cstart 'Start I2C I2cwbyte &HA1 'sende Slave Adresse +1 für Lesen I2crbyte Lesen , Nack 'lese Adresse vom EEprom I2cstop 'Stop I2C Print "Lese EEprom= " ; Lesen ; " " 'Ausgabe der EEprom Werte Waitms 500 Next B Loop End
Dann das schreiben : (was bedeutet das dann ??)
I2cstart 'Start I2C
I2cwbyte &HA0 'sende Slave Adresse
I2cwbyte B
Und dann den Bus nicht schließen, aber noch mal öffnen ??:
I2cstart 'Start I2C
I2cwbyte &HA1 'sende Slave Adresse +1 für Lesen
I2crbyte Lesen , Nack 'lese Adresse vom EEprom
I2cstop
Und noch eine Frage : Wie kann man das mit den Adressen herausfinden ?? Wie funktioniert das mit dieser Hex Zahl oder der Bin Darstellung ??
Ich hoffe ihr könnt mir meine ganzen Fragen beantworten ..... Denn wie immer freue ich mich über Antworten sehr
Der Einsteiger
Hey,
ja das 24C16 hat keine Adresspins -> ergo nur eine Adresse möglich!
Das 24C16 ist ein 8Bit EEPROM, sprich jede Speicherzeille ist 8Bit breit...ein Integer würde also zwei Zellen benötigen.
Stell dir das EEPROM wie eine Tabelle mit 2000 Zeilen vor, wovon jede Zeile 8 Spalten hat
Das Programm schreibt bei der ersten Schleife 10 Werte in 10 Zellen (Schleife mit der Variable A) und ließt diese dann aus (Schleife mit der Variable B).
I2Cstart erzeugt eine Startbedingung um eine Kommunikation einzuleiten. Dadurch wird jedes Device am Bus "aufgeweckt" und horcht auf den Master.
Dann sendet I2Cwbyte die Adresse um ein(!) einzelnes IC anzusprechen. Und danach wird die Registeradresse (in deinem Fall die Adresse der Speicherzelle) gesendet.
Das zweite I2cstart erzeugt eine NEUE Startbedingung (kannst glaube ich auch repeat oder so verwenden...ka wie der Befehl heißt).
Die genaue Kommunikation siehst du hier (Seite 16 u. 18 ):
http://www.farnell.com/datasheets/1700034.pdf
Auf Seite 18 steht "Random Access Read"...das ist dein Fall und dann siehst du, dass das IC nach der Adresse eine zweite Startbedingung haben will.
Die Adresse steht im Datenblatt (bei dem EEPROM auf S. 13)...da du keine Adresspins hast, sind diese automatisch 0.
Deine Adresse wäre also 1010 (der feste Teil für alle EEPROMs der Reihe) + drei Adresspins die bei dir 0 sind, da nicht vorhanden + das RW Bit.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Vielen Dank für deine Antwort Kampi. Das hat mir echt geholfen es zu verstehen. Doch eine Frage fehlte noch :
Das verstehe ich ja noch :Wie funktioniert das mit dieser Hex Zahl oder der Bin Darstellung ??
Aber ich weiß nicht wie ich jetzt auf den Hex wert (in diesem Fall auf &HA0 komme)Deine Adresse wäre also 1010 (der feste Teil für alle EEPROMs der Reihe) + drei Adresspins die bei dir 0 sind, da nicht vorhanden + das RW Bit.
ich hoffe die Frage kannst du mir auch noch beantworten![]()
Für faule Leute:
http://www.arndt-bruenner.de/mathe/s...lensysteme.htm
Ansonsten normale Binär-Hex Umwandlung
Deine Adresse ist zum schrieben:
1010 0000
Du fängst von links an:
1010 = 10 (1*(2^3) + 0*(2^2) + 1*(2^1) + 0*(2^0)) aber 10 ist im Hexsystem = A
Und bei "0000" machst du es genau so![]()
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Ok, danke, aber da fällt mir gleich noch eine Frage zum PCF ein :
Programm für Eingänge:
Warum erhalte ich da nur 255 und wenn ich einen Taste drücke 127 ? Wie mache ich das richtig ? Was ist dieses Nack (das habe ich in der Bascom Hilfe nicht gefunden) ?Code:$regfile = "m32def.dat" $crystal = 16000000 $hwstack = 200 $swstack = 200 $framesize = 400 Config Portd.7 = Output 'TWI konfigurieren Config Sda = Portc.1 Config Scl = Portc.0 Config Twi = 100000 'TWI Frequenz 'Adresse des PCF Const Pcf8574w = &H40 Const Pcf8574r = &H41 Dim Meinevariable As Byte Sound Portd.7 , 400 , 450 Sound Portd.7 , 400 , 250 Sound Portd.7 , 400 , 450 Wait 1 'I²C initialisieren I2cinit Sound Portd.7 , 400 , 450 Do I2cstart I2cwbyte Pcf8574r I2crbyte MeineVariable, Nack I2cstop Print Meinevariable Print Waitms 500 Loop End
Lesezeichen