TWInet & TWIMaster/TWISlave XMega

  • 1
  • 2
  • 3
  • Page 2 of 3
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2089
Registered: 03 / 2003
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 11.11.2020 - 12:29  ·  #9
Hi Thomas,

vielen Dank :) .... jetzt muß nur noch mein Display laufen.

Harry
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 70
Posts: 250
Registered: 11 / 2009
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 11.11.2020 - 16:32  ·  #10
Hallo Thomas,
vielen Dank für deinen Beitrag. Ich hab seit ca. 10 Jahren Platinen rumliegen, bei denen der TWI-Slave mit einem ATXmega vorgesehen war und wegen den fehlenden Treibern die bestückten Platinen nicht fertig gestellt werden konnten. Hab die Platine dann neu gemacht mit einem ATmega 1284 drauf, hat dann auch gereicht. Werd mir aber bei Gelegenheit das mit dem ATXmega und Deinem Source ausprobieren.

golf
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 11.11.2020 - 21:24  ·  #11
Quote

Nutzt Du den XMEGA auch als Slave in einem Projekt?

Hallo Thorsten,
ich benutze den Xmega TWI Slave schon länger und in Produkten, die bei Kunden rund um die Uhr laufen. Hab damals viel getestet mit Störungen auf den I2C Leitungen und den Atmel Code etwas verändert. Ist lange her.

@Harry
Mein Code ist für den TWISC.
Wenn du den Code benutzt, dann musst du alle Registernamen, die mit TWICSLAVE beginnen, in TWIESLAVE umbenennen.

@Golf
Hatte das gleiche Problem und mich dann dazu entschieden den steinigen Weg zu gehen. Würde mich freuen, wenn deine 10 Jahre alten Platinen zum Leben erwecken.

Gruß an Alle,

Thomas
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 70
Posts: 250
Registered: 11 / 2009
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 18.11.2020 - 08:28  ·  #12
Hallo Thomas,
das mit Deinem TWI-Slave funktioniert einwandfrei. Ich hab den TWIE genutzt bei meiner alten Platine und TWI-Slave Read und Write funktionieren wie von den ATmegas gewohnt.
Nochmals Danke.

golf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2089
Registered: 03 / 2003
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 19.11.2020 - 19:42  ·  #13
Hallo Thomas, hallo Golf,

sorry aber ich blicks nicht :(. Könntet ihr mich mal über die Nutzung aufklären? Hab alles auf TWIE geändert, Buffer in der Unit auf 32 Byte. Ich vermute mal, daß das Array im Main auch so groß sein muß? Aber wo sind die Daten, die der Master gesendet hat und wo die, die er abholen kann?
Ich steh irgendwie aufm Schlauch.Ich vergleiche es im Hinterkopf wohl mit dem Master/Slave vom AVRCo. Wie kann ich ganz einfach feststellen, ob die Daten vom Master vollständig da sind, er also fertig ist?

Gruss
Harry
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 19.11.2020 - 21:23  ·  #14
Hallo Harry,

Sende und Empfangspuffer sind in der Unit wie folgt angelegt.
Code

  twis_receivedData : array[0..TWIS_RECEIVE_BUFFER_SIZE-1] of byte;
  twis_txData : array[0..TWIS_SEND_BUFFER_SIZE-1] of byte;


Im Array twis_receivedData stehen die vom Master gesendeten Daten und
im twis_txData stehen die Daten, die der Master beim Slave abholt.

In der "main.pas" ist ein kleiner Fehler. Die Applikation muss die Antwort ins Array twis_txData schreiben. Unten eine korrigierte App.


Empfangen:
Der Empfang wird mit der Funktion TWISdrv_StartReceive gestartet.
Die Applikation muss dann die Funktion TWISdrv_rxComplete pollen bis der Rückgabewert größer 0 ist. Ein Rückgabewert größer Null bedeutet, dass das Slave Daten vom Master empfangen hat und der Empfang weiterer Daten gestoppt ist. Jetzt hat die Applikation Zeit, die Daten aus dem Array twis_receivedData zu verarbeiten. Anschließend muss die Applikation den Empfang wieder mit der Funktion TWISdrv_StartReceive in Gang setzten.

Senden:
Das Slave schreibt die Daten in das Array twis_txData und ruft dann die Funktion TWISdrv_Transmit auf.
Die Applikation kann mit der Funktion TWISdrv_TxComplete durch Pollen festzustellen, ob die Daten abgeholt wurden. Ich benutze diese Funktion in meiner Firmware allerdings nicht.

Viel Erfolg!

Code

program gateway;

Device = xmega128A1U, VCC = 3.3;

Define_Fuses
    Override_Fuses;
    progFuses = true;
    FuseBits1 = [WDPER0, WDPER1, WDPER2];  // watchdog = 2s
    FuseBits4 = [WDLOCK];
    FuseBits5  = [BODLEVEL1, BODLEVEL2, BODACT0]; // 2.8V

Import;

Define
    OSCtype        = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1, faildet;
    StackSize      = 256, iData;
    FrameSize      = 256, iData;


{$DEFINE TWIS_BUFSIZE_128} // rx buffer size for twi
uses xTwiSlaveC;

Implementation
{$IDATA}

const
    TWI_ADDR : byte = $33;

{-------------------------------------------------------------------------------
ControlInterface
-------------------------------------------------------------------------------}
procedure ControlInterface;
var
    rxCount : byte;
    response_size : byte;
begin
    rxCount := TWISdrv_rxComplete();
    if rxCount > 0 then
        // Note: TWI receiver is stopped now, master will receive NACKS until
        //       TWISdrv_StartReceive is called
        twis_txData[0] := twis_receivedData[0];
        response_size := 1; // response command only
        if (response_size > 0) then
            TWISdrv_Transmit(response_size);
        endif;
        TWISdrv_StartReceive(); // enable receiving
    endif;
end;

{-------------------------------------------------------------------------------
Main Program
-------------------------------------------------------------------------------}
begin
    EnableInts($87);
    TWISdrv_Init(TWI_ADDR, nil);
    TWISdrv_StartReceive(); // first start of I2C Slave receiver
    loop
        asm: WDR; // reset watchdog which is enabled by fuses
        ControlInterface;
    endloop;
end.
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 70
Posts: 250
Registered: 11 / 2009
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 20.11.2020 - 05:29  ·  #15
Hallo Harry,
bei meiner alten Platine ist der TWI-Master ein USB2-Chip CY7C68013 (mein Delphi-Programm auf dem PC) und der TWI-Slave ein ATXmega auf der SDR-Platine.
Zur Verdeutlichung des TWI-Ablaufs einige Zeilen aus dem Prog.
//Ausgeklammert auch die Avrco Teile mit TWIRxBuffer,TWITxBuffer

case twi_response[0] of // ist das Commandbyte, ist auch in twis_receivedData[0]

1: SendSpi1; // AD6636 programmieren ( Register mit 8 Bit )
| //von PC gesendet wird CMD,Ad6636-Adresse,Anzahl:1,Inhalt(Byte)

4: SendSpi4; // AD6636 programmieren ( Register mit 32 Bit )
// if TWIRxBuffer[0] = $70 then
// CopyBlock(@TWIRxBuffer[2],@NCOmomentanFRQ[6],4); endif; // $70 : 112 Reg Freq
if twis_receivedData[1] = $70 then
CopyBlock(@twis_receivedData[2],@NCOmomentanFRQ[6],4); endif;
|

100: //TWITxBuffer[0]:= filterwerte[1]; // an 1. Pos ist die Anzahl der Filter abgelegt
twis_txData[0]:= filterwerte[1]; // an 1. Pos ist die Anzahl der Filter abgelegt
TWISdrv_Transmit(1); // !
|


221: //CopyBlock(@RFBand1,@TWITxBuffer,12); // RFBand1 lesen aus EEprom
CopyBlock(@RFBand1,@twis_txData,12); //
TWISdrv_Transmit(12); // !
|
222: //CopyBlock(@RFBand2,@TWITxBuffer,12); // RFBand2 lesen
CopyBlock(@RFBand2,@twis_txData,12); //
TWISdrv_Transmit(12); //!
|

Gruß
golf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2089
Registered: 03 / 2003
Subject:

Re: TWInet & TWIMaster/TWISlave XMega

 · 
Posted: 20.11.2020 - 10:23  ·  #16
Hallo ihr beiden und vielen Dank. Ich werde das am Wochenende mal testen. :)

Was mir nicht so ganz klar ist: Woher weiß der Slave, daß der Master mit der Übertragung fertig ist? Im AVRCo gab es im Slave ein Statusbyte, das je nach Zustand einen bestimmten Wert hatte. So z.B. für fertig oder Fehler.
Und woher weiß der Master, daß der Slave mit seiner Arbeit (das was er mit den übertragenen Daten angestellt hat) fertig ist?

Meine Anwendung sieht (bisher und ich hoffe es bleibt so) nur vor, daß der Master zum Slave Daten sendet (max. 30 Byte) und der Slave was damit anstellt. Der Master muß nichts vom Slave lesen. Natürlich sollte er feststellen können, daß der Slave noch beschäftigt ist.

Gruss
Harry
  • 1
  • 2
  • 3
  • Page 2 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.030204s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI