PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AT90S2313 und I2C Bus



Finor
20.04.2005, 16:11
Hallo Leute,

bin neu hier im Forum, habe aber schon langjährige Erfahrungen mit Elektronik (analog und digital, auch große Projekte).

Zum Einstieg in die Microcontroller-Programmierung plane ich ein Testboard für den AT90S2313 aufzubauen. Habe mich schon im Forum und an anderen Stellen im Internet umgesehen und bin soweit im Bilde.
Da ich mich perspektifisch auch mit dem I2C-Bus beschäftigen möchte, besteht nun das Problem, wie dieser mit dem AT90S2313 realisiert werden kann. Von Haus aus hat dieser Controller keinen I2C-Port.

Gibt es spezielle Pins, die für diese Funktionalität besonders geeignet sind oder kann prinzipiell jeder Pin eines Ports dafür benutzt werden, die Signale für SDA und SCL zu generieren?

Sind die Pull-up-Widerstände für SDA und SCL generell vorzusehen oder können diese ggf. entfallen?

Hat schon jemand Erfahrung (Links?), wie der I2C-Bus in Assembler programmiert wird (z.B. Abfrage der Ports eines PCF8574, Auslesen Daten von einem 24C02, LCD-Display, etc.)?

Vielen Dank für Eure Hilfe!

Finor

voidpointer
20.04.2005, 16:48
Hallo Finor,

man kann im Prinzip jeden freien IO-Pin für die SDA- und SCL-Signale verwenden. Allerdings musst Du Dich dann um die Umsetzung des I2C-Protokolls selbst kümmern. Es ist m.E. besser, wenn Du einen Controller verwendest, der I2C (TWI) hardwareseitig unterstützt. Dies macht dann zwar immer noch Programmieraufwand, aber der Controller hat dann die Chance, während der Datenübertragung andere Dinge tun zu können, z.B. Timer auszuwerten.

Die Pullups sind Pflicht, weil Teil der Spezifikation.

Habe neulich mit einem DS1621 (Temperatursensor) gespielt. Hatte dafür auch schon ein Assembler-Programm gefunden, das ohne Hardwareunterstützung auskommt. Habe leider die Quelle nicht zur Hand, aber im Bereich mikrocontroller.net sollte sich was finden lassen.

Gruß, Achim.

teslanikola
20.04.2005, 20:39
So schwer ist das Schreiben auch nicht ( Software I²C ):

$regfile = "2313def.dat" .
$crystal = 10000000
Config Portb = Output
$sim
Config Sda = Portd.5
Config Scl = Portd.6
Config I2cdelay = 10

Dim Adres As Byte
Dim Value As Byte
Dim Rc As Word
Dim Rch As Byte
Dim Rcl As Byte
Dim Er As Byte
Dim Pos As Word

Declare Sub Write_eeprom(byval Adres As Word , Byval Value As Byte )


Const Addressw = &HA0 ' Addresse WRITE


'Deine Codes






'--------------------------- I²C Schreiben-----------------------------------

Sub Write_eeprom(byval Adres As Word , Byval Value As Byte )
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cwbyte Value
I2cstop
End Sub

Pascal
20.04.2005, 20:50
So schwer ist das Schreiben auch nicht ( Software I²C ):

für den Master hast du wohl recht, aber einen I²C-Slave in Software nachzubilden ist um einiges anspruchsvoller

hoesslin
24.04.2005, 17:44
Moin,

I2C Slave für den 2313 :

http://www.mcselec.com/i2cslave.htm

Finor
24.04.2005, 18:12
Hallo Alle,

vielen Dank für die prompte Hilfe!


Finor

RonnySV
08.05.2005, 06:11
Moin,

I2C Slave für den 2313 :

http://www.mcselec.com/i2cslave.htm


Hallo zusammen,
wenn ich das da im Link richtig sehe, ist es so, dass die da einen Teil des Codes zeigen und den Rest muß man dann für 4,95 euro erwerben?

Ich bin nämlich auch auf der Suche nach einen I2C-slave üb. AVR.
Eigentlich tun's die PCF8574 / ...A auch, aber da kommt man nur auf max. 16 adressen und damit auf 128 I/O pins.
Für den Anfang würde es ja auch FAST für meine Modelleisenbahn reichen. Aber so richtig weit komm ich damit nicht wirklich.

pebisoft
08.05.2005, 08:56
dieser code für bascom, der gegen entgeld angeboten wird ist fehlerbehaftet und läuft nicht einwandfrei. aber irgendwo hier im forum wurde schon mal so etwas realisiert. ich weiss nur nicht mehr wo. hatte mich vor 2 monaten mit dem thema befasst. bin dann aber auf winavr-c umgestiegen. in winavr-c gibt es eine teillösung für dein problem.
mfg pebisoft

RonnySV
12.05.2005, 15:45
](*,) Auch nicht schlecht. Verkaufe Datenschrott für 4,95 lol.

Naja ich hab mich mal hier gesucht und auch in anderen Foren.
So wie's aussieht gibt’s keine vernünftige Lösung, den 2313 als Slave anzusteuern.
Aber das ist für mich nicht ganz so schlimm. Ich steuere ja über die COM und da mache ich einfach noch einen Bus auf der COM2 auf. Da hätte ich schon mal 256 IO Ports.

Man könnte ja sogar mit den Bus an der COM2 zwischen verschiedenen Busse an der COM1 switchen. Vielleicht mit Relais??? :-b
Wow, dann hat man ganz viele IO Ports.