PDA

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



techboy
01.04.2005, 18:30
Also ich habe einen Atmega32 und einen Atmega8
Jetzt will ich das wenn zum beispiel bei meine Atmega8 portb.0=1 ist das er dann dieses Signal weiter über I2C zum Atmega32 sendet....der Atmega32 löst darauf dann ein Unterprogramm aus...
Nun weiß ich nicht wie ich das im programm schreiben soll...
Könnte mir einer von euch einen Codeschnipsel geben wo das oder so was ähnliches oben ist?

vish
01.04.2005, 18:38
Hallo Attila!

Ich nehme an, dass du einen Master und einen Slave haben willst.
Wenn du das in Bascom realisieren willst müsstest du dir die I2C Slave Lib für Bascom kaufen (4,95€).
Einfacher wäre es, wenn du einfach zwei RS232 Schnittstellen softwareseitig baust und die beiden µC darüber kommunizieren lässt. (Ist in Bascom ja verdammt einfach)

Grüße,
Jonas

techboy
01.04.2005, 18:42
Ok mit RS232 könnte ich das auch realisieren!! Kannst du mir einen Codeschnippsel dafür geben????
Ich kann im notfall auch C programmieren also kann ich C schnippsel auch gebrauchen!!!!!

vish
01.04.2005, 19:12
Es reicht glaube ich, wenn du dir diese beiden Befehle merkst:



Open "COMD.6:2400,8,N,1,inverted" For Output As #1 ' PD6 ist TXD
Open "COMD.7:2400,8,N,1,inverted" For Output As #2 ' PD7 ist RXD


Lies dir am besten in der Bascom Hilfe die Bedeutung der einzelnen Paramter durch, dann haut das schon hin, denke ich.

Grüße,
Jonas

techboy
07.04.2005, 17:52
Und wie kann ich mit dem code z.B. ,,sensor 1 is on" oder als byte I mit RS232 an einen anderen Controller senden und wie kann ich das im anderen Empfangen z.b. wenn der I empfängt portd.3=1 ist???

vish
08.04.2005, 14:42
Hallo!

Wie wär's mit IF - Schleifen?


If I = 255 Then ' I ist &b11111111
portd.3 = 1 ' Portd.3 ist High
End If

Vielleicht hilfts dir ja weiter!

Grüße,
Jonas

techboy
23.04.2005, 09:18
JA das hilft mir weiter!!!
Kann ich die RS232 Schnittstelle auch nebenbei mit dem Max232 nutzen???
Brauch ich da zwischen den RS232 Pins den Max232 oder kann ich die beiden Controller gleich an die pins ranhauen und geht das auch wenn ich mehrere controller an eine rs232 leitung ranhau???

vish
23.04.2005, 13:55
Hallo!

Zwei Mikrocontroller kannst du wunderbar ohne alles verbinden. Du solltest nur auf ein gemeinsames GND achten.
Mehrere Controller an eine Leitung geht, soweit ich weiß, nicht.

Grüße,
Jonas

techboy
23.04.2005, 14:53
Warum nicht?? Wenn ich für jeden controller einen anderes signal nehme dann sollte es theoretisch gehen...Ich meine wenn ich einen kontroller für ein bestimmtes signal programmiere das die anderen dann ignorieren...

m.artmann
23.04.2005, 15:21
Hallo Attila,

Du kannst die Controller einfach so verbinden, die jeweiligen RXD und TXD Leitungen natürlich kreuzen.

Da mir bald die I/O Leitungen meines Mega32 ausgehen, werde ich sowas ähnliches auch machen müssen.
Ich habe mir das so vorgestellt:
Der Slave wartet i.d.R. an der RS232 auf ein oder mehrere bestimmte Zeichen.
Erkennt er diese frägt der Slave seine ganzen Eingänge der Reihe nach ab, auch eventuelle A/D Wandler.
Die ganzen I/O Bits und A/D Werte setzt er dann zu einem Datenpacket zusammen und schick dies dem Master.
Damit der Master nicht wärend der ganzen Abfrage zum Warten verdonnert wird verbinde ich noch einen I/O Pin
des Slaves mit einen Interrupteigang des Masters.

D.h. wenn der Slave mit seiner I/O Abfrage fertig ist löst er beim Master einen Interupt aus.
Der Master kann dann die Daten empfangen und dann die A/D Werte und einzelnen Bits weiter auswerten.
Eventuell wird der Slave noch eine Prüfsumme aus den ganzen A/D Werten und I/O Bits errechnen und
an das Datenpacket hängen.
Der Master überprüft diese Summe mit den übertragenen Bytes und fordert die Daten nochmals an falls die Prüfsumme nicht stimmt.

Sollte nun ein kritisches Ereigniss an einem Slave I/O Pin auftreten,
(z.B. ein Bodenkontakt meldet das vor dem Roboter ein Abgrund/Treppe ist)
dann kann der Slave auch jederzeit ohne Anforderung des Masters einen Interupt auslösen
und den Master auf die Gefahr hinweisen.

Das ganze Übertragungsprotokoll, d.h. die Reihenfolge der I/O Bits, ob z.B. die A/D Werte als 10Bit Wert
oder bei einem angeschlossenem Sharp Sensor gleich als Entfernung in cm, oder was für Deinen Roboter
dann ein kritisches Ereigniss ist mußt Du natürlich erstmal festlegen.

Gruß
m.artmann

Xeus
25.04.2005, 14:20
mit so einem software seitigen uart ist es aber auch möglich mit einem pc zu kommunizieren , ntürlich mit max232 oder?

gruß
xeus

teslanikola
25.04.2005, 16:23
ACH Eine gekreutzte Leitung für mehrere RS232 Slaves geht ned??

Dann guckst du mal da:

Xeus
26.04.2005, 04:18
Kann mir nicht vordtellen, dass das funktioniert, kann es sein das du es mit I²C verwecheselst?Was machst du denn wenn zwei gleichzeitig senden wollen???
gruß

xeus

teslanikola
26.04.2005, 12:28
So einfach lossenden tun die Slaves ja nicht, sondern sind so programmiert ( ÄHNLICH EINES I²C ),dass wenn sie ihre addresse mit Write/read anweisung empfangen, dann sendet der slave einen Wert, sonst hält es die klappe.

techboy
26.04.2005, 17:38
Dann muss man die Controller halt so programmieren dass sie warten bis die RS232 leitung frei ist.....
Gibt es Controller mit 2 Rs232 Schnittstellen????

teslanikola
26.04.2005, 17:58
Man kann einem AVR so viele Rs232 programmieren wie er beine hat.
Hardwareseitig hat ein AVR max eine.

techboy
26.04.2005, 18:02
Also könnt ich theoretisch 16 RS232 leitungen ranbauen > bei einem Atmega16/32 oder????
Was meinst du mit hardwareseiteig???
Halt wie viele kontroller kann ich mit einzelnen Leitungen an 2*16 Pins anschließen???

Hellmut
26.04.2005, 18:37
Hallo Techboy

Ich denke für deine ursprüngliche Absicht gibt es eine sehr gute Quelle alle Informationen zu entnehmen, die Test-Programme die RobotikHardware.de zu seinen Karten kostenlos von seiner Webseite herunter geladen werden können.

teslanikola
26.04.2005, 19:07
Man kann RS232 softwaremäßig lösen ( Code tippen der RS232 Emuliert )
oder den Hardware RS232 ( vorteil löuft unabhängig vom programm und kann wenn nötig gelesen werden )