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
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
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
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 :-)
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
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
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.
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]
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.