Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 Microcontroller miteinander verbinden
So ich bins mal wieder mit einer Fragte.
Also wie schon in der Überschrift, möchte ich 2 AVR miteinander verbinden. Das hat den Grund, weil der Master AVR (ein Atmega 1280) für meine Anforderungen immernoch zu wenige Timer hat. Alle HW-PWM Ports sind belegt und dafür entsprechend auch die Timer und die restlichen Timer werden für RC5 und DCF77 benötigt. Ein Timer wäre dann noch frei, wenn ich die 3 PWM Ports auf einen anderen Controller lege.
Also soll noch ein Atmega 8 rangehängt werden, der dann ebenfalls noch einmal 3 PWM Ausgänge ansteuert und im Hauptprogramm ein RGB Fadingprogramm läuft. Ich möchte aber über das Display und die Steuertasten, welche am Atmega 1280 hängen das ganze Steuern. Deswegen beide verbinden.
Habe ein wenig gegoogelt nur nichts passendes gefunden. Was ist denn besser UART oder I2C oder irgendetwas anderes?
Und wie Sende und Empfange ich befehle? Hat da jemand gute Tutorials oder kann mir das Erklären? Also z.B. ich möchte die Farbe Rot (ein PWM Ausgang) dimmen. Dazu stelle ich über Tasten und mithilfe des Displays am Master AVR z.B. Wert 100 ein. Das soll dann gesendet werden und der Slave soll dann diesen Wert umsetzten.
021aet04
20.02.2011, 21:48
Wie stark sind die Leds? Es gibt auch fertige Ledtreiber (z.B. den PCA9532 für 16 Leds). Hier habe ich etwas gefunden (mit Mega8 angesteuert durch I2C) http://www.schatenseite.de/i2c-dimmer.html
Diese 2 Varianten werden mit I2C angesteuert. Es gibt versch. Busse. Einige oft verwendete Busse sind I2C, SPI, UART. UART würde ich nicht verwenden, da du eventuell später über RS232 Schnitstelle (bzw USB mit USB/UART Wandler) die Einstellungen vom PC vorgeben kannst. Ich würde dir I2C, SPI oder über längere Distanzen RS485 empfehlen.
MfG Hannes
Also ich möchte schon einen 2 ten µC verwenden. Also Master µC wäre ein Atmega 1280 und der Slave IC dann ein Atmega 8.
Im Atmega 8 soll dann ein RGB Fadingprogramm ablaufen und die einzelnen Farben (rot, Grün, Blau) sollen an diesen Angeschlossen werden.
Gesteuert soll dann das Ganze vom Atmega 1280 aus, weil da die Steuertasten vorhanden sind und das Display mit Menü etc.
Also du empfiehlst I2C. (UART sind am Atmega 1280 aber 3 Stück vorhanden) (Will natürlich auch Daten vom PC per RS232 an den Atmega 1280 schicken, das weiß ich aber schon wie das funktioniert) Die Controller würden dann auf einer Platine sein. Also kurzer Übertragungsweg. Wie Sende und Empfange ich befehle mit I2C? Wie ist da überhaupt die Verdrahtung?
PS: Die Leds ziehen um die 5 A. Diese werden von einem Mosfet getrieben, welcher an den µC angeschlossen ist.
Hallo,
I²C kommt mit 2 Leitungen aus: SDA und SCL, diese brauchen jeweils noch einen Pullup-Widerstand; GND muss sowieso durchverbunden werden.
Hier kannst du dich über den I²C-Bus informieren: I²C in RN-Wissen (http://rn-wissen.de/index.php/I2C)
Mit welcher Programmiersprache programmierst du? In C++ gibt es bereits fertige Bibliotheken zum einbinden (z.B. von Peter Fleury, kannst mal googeln), das nimmt einem viel Arbeit ab. (Ich hab mir die Funktionen dennoch selber geschrieben, man lernt viel dazu).
Grüße,
Bernhard
Ich programmiere in Bascom.
Wie groß sollten die Pullup Widerstände sein? 10k nehme ich mal an.
Dieses beispiel wird ja genannt:
i2c_init
i2c_start
i2c_sendebyte(slaveid)
i2c_sendebyte(wert1)
i2c_sendebyte(wert2)
i2c_stop
Das hinter dem sendbyte in Klammer stehende Wert ist die Anweisung, welche sich dann am 2 ten µC auslesen lässt oder? Nur dazu finde ich kein Beispiel, wei dass dan ausgelesen wird im 2 ten µC. Erklärt mir das bitte. Slaveid ist dann doch bestimmt dazu da, um den µC zu Adressieren. Wie stelle ich das im 2 ten µC ein, welche Adresse der denn nun hat?
Grüße
021aet04
21.02.2011, 18:46
Wie du deinen Mega initialisieren musst weiß ich nicht, da ich nicht in Bascom sondern in C programmiere. Einen Mega habe ich aber noch nie als Slave gehabt.
Im Datenblatt befindet sich der I2C ab Seite 163. Du brauchst den Slave Receiver Mode (S184). Wenn du Daten zurücksenden willst brauchst du auch noch den Slave Transmitter Mode (anschließend zum Receiver Mode).
Wie du die Daten initialisieren musst, musst du selbst herausfinden. Eventuell kann man auch in Bascom teilweiße C Programmteile einbinden.
Falls du das Datenblatt vom Mega8 noch nicht hast http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf
Vom Master musst du die Werte so wie du schon geschrieben hast senden.
Der Ablauf ist:
I2C Start
I2C Senden (Slaveadresse des Mega 8 )
I2C Senden (Register 1 => z.B. Auswahl welche Led)
I2C Senden (Register 2 => z.B. Fader Startwert)
I2C Senden (Register 3 => z.B. Fader Stoppwert)
I2C Senden (Register 4 => z.B. Fader Geschwindigkeit)
I2C Stopp
Du kannst es aber auch aufteilen, dass du nur die Led auswählst und z.B. den Fader Startwert sendest und danach das Stoppsignal (I2C Stopp)
MfG Hannes
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.