PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : int für I2c - Bus notwendig?



ceekay
31.07.2005, 14:42
hallo bei dem Board "RN Control mega32" belegt der I2c Bus den int 0 Eingang am controller.

ich wüsste gerne wozu das so ist. und ob dies notwendig ist.

vielen dank im voraus,

ceekay

PicNick
31.07.2005, 16:39
Ich kann das dem Schaltplan nicht entnehmen. Bist du sicher ?

ceekay
31.07.2005, 17:50
sorry es ist "int2".

wozu braucht man das?

PicNick
31.07.2005, 19:16
Ah, so, jetzt kenn ich mich aus.
Der Gedanke ist der: Wenn irgend ein I2C-Slave Kummer (oder Daten) hat, und er will nicht warten, bis ihn der Master zufällig mal danach fragt, kann er den INT2 betätigen, und der Master kann darauf reagieren.
Das muß man aber einerseit mit einem JUMPER aufdrehen, und den Interrupt ausporgrammieren.
Sprich: Brauchst du das Feature NICHT, stecke keinen Jumper und vergiß das Ganze einfach.
Für den normal I2C -Betrieb ist das NICHT NOTWENDIG

churchi
31.07.2005, 19:20
Das braucht man nicht unbedingt.
Es ist RN-Standard, dass I2C Slave Boards wenn nötig den Hauptmikrocontroller dazu veranlassen können ihre Anfrage möglichst schnell zu bearbeiten.
Darum der Interrupt.

ups - ein bisschen zu langsam

ceekay
31.07.2005, 19:46
ok denn ist mir das klar. wenn ich den jumper stecke dann kann ich mit einem i2c slave einen interrupt beim master auslösen. der dann dementsrechend reagiert und den slave nach neuen daten abfragt. richtig so?

vielen dank echt klasse forum

gruß ceekay

churchi
31.07.2005, 19:58
ok denn ist mir das klar. wenn ich den jumper stecke dann kann ich mit einem i2c slave einen interrupt beim master auslösen. der dann dementsrechend reagiert und den slave nach neuen daten abfragt. richtig so?


ja

Axi
21.09.2006, 14:26
kann man auch INT0 oder INT1 für den I2C Bus verwenden statt INT2? Hat das irgend welche Nachteile?

mfg Axi

PicNick
21.09.2006, 14:32
@Axi: Nicht, daß ich wüßte. Aber ev. isses einfacher, den Master auch als Slave zu setzen, dann kann die Peripherie senden, wann immer sie glaubt. Und dann brauchst du überhaupt keinen extra-Interrupt.

Axi
21.09.2006, 15:09
ok danke

mfg Axi

hacker
21.09.2006, 17:03
@PicNick

Das hab ich jetzt nicht verstanden, kannst du mir das mal erklären? Danke

PicNick
21.09.2006, 17:09
Es kommt darauf an, welche I2C Peripherie ich habe und welchen Master.

Im Idealfall:
Wenn ich am Master einen Hardware-TWI habe, kann ich ihn ja auch als Slave definieren.
Und dann sendet die Peripherie ganz einfach an den Master, wenn was zu senden ist.

Geht natürlich NICHT bei z.B. den PCF Port-Expandern.

Axi
21.09.2006, 18:00
wenn ich jetzt 2 Mega 32 über I2C verbinde und beide sollen jederzeit Daten senden und empfangen können brauch ich dann einen Master? Brauche ich INT2?

mfg Axi

PicNick
21.09.2006, 18:54
DIe Mega32 sind die Master. Das Ganze heißt in deinem Fall dann "Multimaster"-System.

extra interrupt brauchst du da nicht.

Du kannst Dir da was runterladen.
http://www.oldformation.at/electronic/download/down.htm

Das Demo-Programm, das da "m32slave.bas" heißt, ist das, was du brauchst:
Master UND Slave
Schau mal rein und frag' dann, wenn du nicht zurechtkommst

Axi
21.09.2006, 19:22
..ich bin noch am planen der Platine(n) für die Mega32, bis ich zur Software komm dauerts noch. Aber danke, wenn ich soweit bin werde ich sicher noch viele Fragen haben.

mfg Axi

PicNick
21.09.2006, 19:41
Ok, also nur festhalten: Für Atmega32 etc. mit HW-TWI brauchst du KEINE Int-Leitung vorzusehen.

Ich kenn NUR den PCF-Port-Expander, der theoretisch einen Interrupt auslösen kann, wenn sich beim Input was ändert.
Ich kenn aber keinen, der das verwendet hat.

Oder ???

Roboter n00b
24.09.2006, 13:59
So, ich wollt mich jetzt auch mal am I2C versuchen, bis jetzt leider noch ohne erfolg^^ . Aber vllt könnt ihr mir ja weiterhelfen. Hier mal meine codes:

Master:

$regfile = "m32def.dat"

$crystal = 16000000
$baud = 9600
Config Portc = Output

Enable Interrupts
Enable Int2


On Int2 Int2_isr
Int2_isr:

I2cstart
I2cwbyte 255
Portc = 0
I2cstop

Dim A As Byte
Dim I As Byte
Do ' Hier beginnt die schleife
A = 1 'A = 1 (erste LED)
For I = 63 To 1 Step -1 'Alles was zwischen For und NEXT steht wird so lange wiederholz bis I = 7 ist

Portc = A ' A wird in Portc geladen
Waitms 200
A = A + 1 ' A wird Verdoppelt sodass im nächsten durchgang A =2 ist im übernächsten 4 usw..


Next ' Springt wieder zu For! Wenn I = 7 ist gehts im Programm weiter
Loop ' Spring wieder zu DO, alles beginnt von vorne, A wird wieder auf 1 gesetzt und durchläuft dann wieder die FOR NEXT schleife 7mal..

End
Return

Slave:

$regfile = "m8def.dat"

$crystal = 8000000
$baud = 9600

Dim Val As Byte
Config Portd = Output

Portd.6 = 1
Portd.7 = 1
Wait 5
Portd.2 = 0

I2crbyte Val
If Val = 255 Then
Portd.7 = 0
Wait 1
Else
Portd.7 = 1
End If


Ziel wäre, dass beim Slave nach der I2C kommunikation mit dem Master PD.7 auf 0 Stellt, was er aber bis jetzt nicht macht.

wo liegt der fehler, bzw. was mach ich falsch?

gruss
serge