I2CPort und SerPortXy bei xMega

  • 1
  • 2
  • Seite 1 von 2
tramike
 
Avatar
 
Betreff:

I2CPort und SerPortXy bei xMega

 · 
Gepostet: 03.05.2012 - 22:11 Uhr  ·  #1
Hallo allerseits,

wenn ich versuche, bei einem xMega das I2CPort und die SerPortXy auf demselben I/O-Port (aber natürlich nicht auf denselben Pins) zu nutzen, dann stört das I2CPort die Pins der SerPortXy.

Code

Program I2CTest;
  Device = XMega256A3U, VCC=3.3;
Define_Fuses
  NoteBook   = B;
  COMport    = USB;
  LockBits0  = [];
  FuseBits0  = [];
  FuseBits1  = [];
  FuseBits2  = [];
Import SysTick, FlashWrite, WatchDog, Heap, XMegaSupport, I2CPort,
SerPortE0, SerPortF0, SerPortC0, SerPortC1, SerPortD0, ADC_A;

From System Import Float, Processes, Tasks, Pipes, PIDs;
From SysTick Import SystemTime16;

Define
  OSCtype        = extXTAL=16000000, PLLmul=8, prescA=1, prescB=2, prescC=1;  
  StackSize      = $0800, iData;
  FrameSize      = $0800, iData;
  SysTick        = 10;                {msec}
  
  I2CPort        = PortC;
  I2Cdat         = 0;
  I2Cclk         = 1;

  SerPortC0      = 57600, Stop1, timeout;
  RxBufferC0     = 250, iData;
  TxBufferC0     = 250, iData;
  
Implementation

{$IDATA}
Const
  I2CAddrIOExp: byte = $27;

Var
  I2CVal: Byte;

Begin

  // IO-Expander Prog     
  I2COut(I2CAddrIOExp,$00,$F7);
  
  Loop
    If I2Cstat(I2CAddrIOExp) Then
      I2COut(I2CAddrIOExp,$00);
      I2CInp(I2CAddrIOExp,I2CVal);
       WriteLn(SerOutC0, 'I2C Dir: '+ByteToHex(I2CVal));
      I2COut(I2CAddrIOExp,$06);
      I2CInp(I2CAddrIOExp,I2CVal);
       WriteLn(SerOutC0, 'I2C Pullups: '+ByteToHex(I2CVal));
      I2COut(I2CAddrIOExp,$09);
      I2CInp(I2CAddrIOExp,I2CVal);
       WriteLn(SerOutC0, 'I2C In: '+ByteToHex(I2CVal));
    Else
      WriteLn(SerOutC0,'I2C Not OK');
    EndIf;
    Sleep(Self, 50);
  Endloop;
End I2CTest;


Das Program sendet bei den I2Cxxx-Befehlen Müll auf die seriellen Leitungen.
Hardwaremässig sieht es fast so aus, wie wenn eine Lötbrucke zwischen dem I2C und SerPort Pin besteht. Aber das ist klar nicht der Fall. Es muss softwareseitig bei der Port-Ansteuerung in den I2C-Prozeduren ein Fehler sein.

...oder ich versuche etwas, das ohnehin nicht zulässig ist?

Hat jemand Erfahung mit der Nutzung von I2C und SerPort auf demselben I/O-Port eines xMegas?

Danke und Gruss,
Mike
Merlin
Administrator
Avatar
Geschlecht:
Alter: 26
Beiträge: 1477
Dabei seit: 03 / 2005
Betreff:

Re: I2CPort und SerPortXy bei xMega

 · 
Gepostet: 04.05.2012 - 10:06 Uhr  ·  #2
I have seen something similar in ATMega's where an ESD damaged chip had adjacent port pins shorted out. Don't know if this is relevant.
tramike
 
Avatar
 
Betreff:

Re: I2CPort und SerPortXy bei xMega

 · 
Gepostet: 05.05.2012 - 16:11 Uhr  ·  #3
Thank you for the hint, but it is rather unlikely, for the following reasons:
- the serial port does not influence the I2C, just the I2C disturbes the serial ports.
- the whole batch of 50 xMegas must have been affected. This would be possible, but is unlikely.
- if I manipulate the pins of the I2C directly, they don't affect the serial lines.

Thank you for any hint,
Mike
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: I2CPort und SerPortXy bei xMega

 · 
Gepostet: 06.05.2012 - 15:59 Uhr  ·  #4
Hallo Mike,

ich muss das untersuchen.
Aber Sie sollten ein funktionierendes Programm zur Verfügung stellen das das Problem aufzeigt.
Das obige Programm lässt sich wegen vielen Define Problemen nicht compilieren! :sick:

rolf
tramike
 
Avatar
 
Betreff:

Re: I2CPort und SerPortXy bei xMega

 · 
Gepostet: 07.05.2012 - 20:21 Uhr  ·  #5
Hallo Rolf,

sorry, ich hatte den Compiler nicht dabei, als ich den Post schrieb. (...Ferien...)
Dafür jetzt eine noch weiter reduzierte Variante, welche das Problem dokumentiert:

Code

Program I2CTest;
Device = XMega256A3U, VCC=3.3;

Import SysTick, Heap, XMegaSupport, I2CPort, SerPortC0;

From System Import Float, Processes, Tasks, Pipes;

Define
  OSCtype        = extXTAL=16000000, PLLmul=8, prescA=1, prescB=2, prescC=1;

  StackSize      = $0800, iData;
  FrameSize      = $0800, iData;
  SysTick        = 10;                {msec}


  I2CPort        = PortC;
  I2Cdat         = 0;
  I2Cclk         = 1;

  SerPortC0      = 57600, Stop1, timeout;
  RxBufferC0     = 250, iData;
  TxBufferC0     = 250, iData;

  Heap           = iData;
  Scheduler      = 10, 10, iData;
  TaskStack      = $0020, iData;
  TaskFrame      = $0010;
  
Implementation
{$IDATA}
Const
  I2CAddrIOExp: byte = $27;
Begin
  Start_Processes($87);
  Loop
    WriteLn(SerOutC0, 'Test!!');
    I2COut(I2CAddrIOExp,$00);
  Endloop;
End I2CTest.


Resultat auf der SerC0: Abwechselnd "Test!!" und Müll.

Danke und Gruss,
Mike
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: I2CPort und SerPortXy bei xMega

 · 
Gepostet: 10.05.2012 - 15:23 Uhr  ·  #6
Hallo Mike,
Zitat geschrieben von tramike

Resultat auf der SerC0: Abwechselnd "Test!!" und Müll.

Danke und Gruss,
Mike


So ein Problem habe ich Heute auch mit einem XMEGA256A3, ich benutze genau wie Du
"WriteLn(SerOutC0, '............')", "I2COut(......)" usw.

Ich habe immer am Ende der WriteLN SerOut Schrott stehen :(

@rolf: Gibt es da schon eine Lösung?

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

Re: I2CPort und SerPortXy bei xMega

 · 
Gepostet: 10.05.2012 - 20:12 Uhr  ·  #7
@all,
leider hat mich eine ziemliche Grippe erwischt. Ich komme erst die nächsten Tage dazu. :lupe:

rolf
tramike
 
Avatar
 
Betreff:

Re: I2CPort und SerPortXy bei xMega

 · 
Gepostet: 11.05.2012 - 13:45 Uhr  ·  #8
@Thorsten: danke, bin froh um Deinen Beitrag!
@Rolf: Ich wünsche Dir von Herzen gute Besserung!

Gruss,
Mike
  • 1
  • 2
  • Seite 1 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   136   150 · Page-Gen-Time: 0.03008s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI