Archiv verlassen und diese Seite im Standarddesign anzeigen : int für I2c - Bus notwendig?
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
Ich kann das dem Schaltplan nicht entnehmen. Bist du sicher ?
sorry es ist "int2".
wozu braucht man das?
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
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
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
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
kann man auch INT0 oder INT1 für den I2C Bus verwenden statt INT2? Hat das irgend welche Nachteile?
mfg Axi
@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.
@PicNick
Das hab ich jetzt nicht verstanden, kannst du mir das mal erklären? Danke
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.
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
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
..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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.