PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 ATMEGA8 verbinden?



TobiasBlome
08.02.2008, 16:49
Hallo,
ich möchte 2 AT-Mega8 verbinden, um Zahlen auszutauschen.

was ist die einfachste Möglichkeit - wie würdet ihr es machen?

- RS232
- I²C
- ???

vielen Dank schon mal,
Tobias

Pascal
08.02.2008, 17:39
Die einfachste Lösung ist wohl die per RS232, verwenden würde ich persönlich aber I²C. Falls du zu dem Thema mehr wissen willst, kannst du auch mal im Forum suchen, da gibts ne Menge dazu.

TobiasBlome
08.02.2008, 17:41
danke, dann suche ich mal nach RS232

TobiasBlome
08.02.2008, 23:13
Habe mal wegen I²C gesucht und etwas verstehe ich nicht so ganz:

Was ist I²C und was ist TWI? gehört das zusammen? im Wiki sind auch mehere Beiträge jeweils zu TWI oder aber auch zu I²C...

Kann mich da jemand aufklären?

Tobias

Rofo88
08.02.2008, 23:25
I²C wurde von einem Hersteller entwickelt (Phillips) und ist ein Bussystem mit 2 Verbindungen + GnD. TWI ist das Two Wire Interface, was genau das selbe ist wie I²C aber anders heist und damit keine Lizensgebühren verursacht. Also was TWI kann macht auch I²C mit.

TobiasBlome
09.02.2008, 14:12
das heißt also - das ich ich einen Baustein der I²C unterstützt, an einen TWI Bus anschließen kann?

Tobias

Pascal
09.02.2008, 14:15
Ja, das funktioniert. Ist ja auch quasi dasselbe.

TobiasBlome
09.02.2008, 14:26
Vielen Dank - das hat mir doch schon viel weitergeholfen - nun weiß ich doch, wonach ich suchen muss :-)

StevieL
09.02.2008, 15:51
Hallo Tobias,

für den Master kannst du die Bascom-Befehle für I2C nehmen (I2CSend, I2Creceive u. s. w.)

Beispiele für den Slave findest du in der Wiki. Für die Beispiele musst du aber unbedingt die SDA- und SCL-Pins des ATMega nutzen. Und die Pullup-Widerstände nicht vergessen. Ich habe damit schon einige ATMega8 untereinander verbunden. Und die laufen seit Monaten ohne den kleinsten Fehler.

TobiasBlome
09.02.2008, 21:48
Also im Wiki steht es so:



$regfile = "M32def.dat" ' the used chip
$crystal = 16000000 ' frequency used
$baud = 9600

Config Scl = Portb.0 ' Ports fuer IIC-Bus, nicht Standard !
Config Sda = Portb.1
' Config I2cdelay = 10 ' je höher der Wert umso langsamer der Bus

I2cinit

Const Pcf_write = &H40 ' Slaveadresse
Const Pcf_read = &H41

' Startausgabe
Print
Print "I2C-Soft Demo mit PCF 8574"
Print

Do
I2cstart
I2cwbyte Pcf_write
I2cwbyte &HAA
I2cstop

Print Err ' Err = 0 -> kein Fehler !

Waitms 500

I2cstart
I2cwbyte Pcf_write
I2cwbyte &H55
I2cstop

Print Err ' Err = 0 -> kein Fehler !

Waitms 500

Loop

End


Was genau ist die Slaveadresse zum schreiben und lesen?
Const Pcf_write = &H40 ' Slaveadresse
Const Pcf_read = &H41

wofür ist:
I2cwbyte &HAA / I2cwbyte &H55


Sind das Bereiche in die ich etwas schreiben kann, welches dann gesendet wird bzw. ein Bereich in dem das empfangene drinn steht?

Könnte ich da auch eine Variable rein schreiben und versenden?

Tobias

TobiasBlome
09.02.2008, 21:59
Hab dies noch im wiki gefunden:

i2c_init
i2c_start
i2c_sendebyte(slaveid)
i2c_sendebyte(wert1)
i2c_sendebyte(wert2)
i2c_stop

leuchtet mir ein, aber wo steht das in dem Beispiel code, und wo ist die Slav ID oder gibt es keine "Master ID" ? (weil ja im Beispiel ein Master ist)

Tobias

python_rocks
09.02.2008, 22:11
wo steht das in dem Beispiel code
Hallo Tobias!

Das hier kennst du wahrscheinlich schon:
- https://www.roboternetz.de/wissen/index.php/I2C

Das hier vielleicht noch nicht: :-k
- https://www.roboternetz.de/wissen/index.php/TWI_Praxis
- https://www.roboternetz.de/wissen/index.php/TWI

mfg
Gerold
:-)

TobiasBlome
09.02.2008, 22:50
also,
mich hat etwas irritiert, das der befehl nicht "i2c_sendebyte(slaveid) " sondern zb. I2cwbyte und dann die Variable.

Ausserdem hat mich das &H40 irritiert (ich mag kein HEX... was "normales" wäre mir lieber)

ich probier es morgen einfach mal aus

Tobias

Zachso
10.02.2008, 12:16
du solltest eventuell auch über spi nachdenken, das braucht zwar ne leitung mehr, aber eventuell bracushte den I2C-Bus später noch für was anderes.

mfg, Zachso

Pascal
10.02.2008, 12:22
Und SPI kann man für nichts anderes verwenden?! Und an den I²C-Bus kann man leicht mehrere Geräte hängen, wär ja sonst auch kein Bus.
Sorry, aber ich versteh deine Logik nicht ganz.

Zachso
10.02.2008, 12:29
die meisten bausteine die hier im forum besprochen und verwendet werden sind I2C-Steine, darum handhabe ich es so, dass die µC untereinander über SPI verbunden werden und die steinchen über I2C. einen besonderen Nutzen hat das nicht, aber es lässt sich beim Programmiern leichter unterscheiden.

TobiasBlome
12.02.2008, 20:53
Hallo,
da ich erst mal ohne Hardwareänderungen weiter machen möchte nehm ich UART:

Also der 1. µC (Sender) sendet 1 und 0 im wechsel. Der 2. µC (Empfänger) soll die 1/0 empfangen und an den PC senden und an eine LED geben.

Der sender sendet, aber ich kann das Ergebniss vom Empfänger nicht auf dem PC sehen...

wenn ich vom Befehl "Input A Noecho" das Noecho weglasse, kann ich die Zahlen sehen aber die Zahl wird nicht in die Variable A geschrieben...





'Konfiguration µC:
$regfile = "m8def.dat" 'AT-Mega8
$crystal = 3686400 'Quarz: 3.6864 MHz
$baud = 9600

Dim A As Word

Config Pind.0 = Input
Config Pind.3 = Output

Do


Input A Noecho
Print "eingang A: " ; A
Portd.3 = A

Loop[/code]