Kopplung von 2 ATMega per I2CSoft Master und TWI Slave

  • 1
  • 2
  • Seite 2 von 2
mc-electronic
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Sauerland NRW
Beiträge: 372
Dabei seit: 03 / 2008
Betreff:

Re: Kopplung von 2 ATMega per I2CSoft Master und TWI Slave

 · 
Gepostet: 27.03.2012 - 08:53 Uhr  ·  #9
@Rolf:

Na, das nehme ich Ihnen mal nicht ab, daß ich mehr über I2C weiß als Sie :lol:

Leider muß ich das I2CSoft auf der Master-Seite mit dem TWI auf der Slave-Seite kombinieren und kann nicht auf TWInet ausweichen. Und I2C muß ich nehmen, da ich dieses Interface zur Ankoppelung weiterer Module an meinen Datenlogger vorgesehen habe.

Ich habe es ja nun auch in beide Richtungen hinbekommen, wenn auch nur mit fester Blockgröße. Da kann ich mit leben. Blöd ist halt immer die Testerei bis man raus hat, was nun geht, was nicht geht und wie man sich mit einem Workaround behilft.
Ich hatte Byte, Word, Longword und Array getestet, das ging alles. Nur halt String nicht, die einzige Option mit variabler Länge. Da gibt der I2CInp immer ein False zurück.

Wie auch immer, der Handshake funktioniert gut, wenn man es einmal raus hat. Und nächstes Mal sehe ich eine 2. UART am Erweiterungsbus vor..

Gruß, Michael
golf
Benutzer
Avatar
Geschlecht:
Herkunft: Donauwörth
Alter: 72
Beiträge: 266
Dabei seit: 11 / 2009
Betreff:

Re: Kopplung von 2 ATMega per I2CSoft Master und TWI Slave

 · 
Gepostet: 27.03.2012 - 10:24 Uhr  ·  #10
Hallo Michael,
ich nutze die TWI-Master und TWI-Slave und I2C- SChnittstelle in mehreren Projekten.
( Leider gibts die TWI-Slave für die Xmega noch nicht).
Bisher habe ich keine Probleme gehabt. Teilweise nutze ich auch beides in einem AVR.
Soft-I2C als Master zu anderen AVRs ( bis zu 32 genutzt) und TWI-Slave als Empfänger von Kommandos ( z.B. vom USB-Chip CY7C68013).

Hier ein paar kleine Auszüge daraus

-----------Master--------------------------------------------
Import SysTick,FlashWrite,SerPort,watchdog,TWISlave,I2Cport;

if I2COut(K,86)= true then
udelay(5);
I2CInp(K,V);
......

if I2CInp(K,V) = true then
Write(Serout,'V' + ....... // melden an PC

-----------Slave--------------------------------------------------

Import SysTick, TWIslave,SwitchPort1,watchdog;//
TWImode = HandShake;
TWIbuffer = 32, iData;
TWIaddr = 71 ; // zu ändern pro Slave-Platine
//-------------------------------------

if TWIGetRxStat then //Befehl empfangen ?
case TWIGetCMD of
1: TWITxBuffer[0] := EmpfaengerNr; | // Empfänger-Einschub Nr wird gelesen vom Master
7: CopyBlock(@sn,@TWITxBuffer,16); | //String (sn) aus EEprom lesen nach Anforderung
8: CopyBlock(@TWIRxBuffer,@sn,16); | //String (sn) ins EEprom schreiben
endcase;
TWISetRDY(true);
endif;
if TWIgetTxStat then
TWISetRDY(true);
endif;

golf
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Kopplung von 2 ATMega per I2CSoft Master und TWI Slave

 · 
Gepostet: 27.03.2012 - 11:14 Uhr  ·  #11
Hallo Michael,

ich meinte nicht das allgemeine I2C/TWI knowhow, sondern speziell das Slave Teil.

rolf
  • 1
  • 2
  • Seite 2 von 2
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   65   79 · Page-Gen-Time: 0.021132s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI