mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Controller testen


Autor: Peter M. (whitsha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nachdem ich in EDK ein I2C Controller erstellt habe, wollte ich 
ausprobieren ob dieser auch Daten senden kann.
Dazu habe ich 2 Pins von diesem Controller als extern gemacht (SDA und 
SCL) und folgendes C-Programm geschrieben.


#include "xparameters.h"
#include "xiic_l.h"

/* xparameters */

#define IIC_BASE_ADDRESS    XPAR_IIC_0_BASEADDR

#define Slave_Address  0x00

/************************** Function Prototypes 
******************************/

int DatenSenden(Xuint32 Basis,Xuint8  Slave, Xuint8 *Daten);

/************************** Variable Definitions 
*****************************/

int main(void)
{
//  Xuint8 GesDat=5; /* Xuint8 entspricht unsigned char*/
    Xuint8 Daten = 9;


    /*
     * Run the example, specify the Base Address that is generated in
     * xparameters.h
     */
    DatenSenden(IIC_BASE_ADDRESS, Slave_Address, &Daten);



    return 0;
}

/*Funktion selber zum Datensenden*/

int DatenSenden(Xuint32 Basis, Xuint8  Slave, Xuint8 *Daten)
{
    int ByteCount;

    xil_printf("Zuerst %d\t", ByteCount);


    ByteCount = XIic_Send(Basis, Slave, Daten, 1, XIIC_STOP);

    xil_printf("ByteCount %d\t", ByteCount);

    return ByteCount;


}


Als Ergebnis auf Hyperterminal bekomme ich 0. D.h. der Controller hat 
nicht gesendet.

als Slaveadrese habe ich 0x00. Kann man mit so einer Methode überprüfen 
ob der Controller sendet oder nicht?

Gruß, Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> #define Slave_Address  0x00

Du mußt Dir zuerst mal die I2C Spezifikation durchlesen, damit Du 
überhaupt weißt, was Du tust.

0x00 ist ein General Call.


> int DatenSenden(Xuint32 Basis,Xuint8  Slave, Xuint8 *Daten);

Da fehlt aber noch die Länge der Daten. Der Master muß doch wissen, 
wieviel Bytes er senden soll.


> Als Ergebnis auf Hyperterminal bekomme ich 0. D.h. der Controller hat
> nicht gesendet.

Vollkommen klar.
An SDA/SCL muß je ein Pullup und ein Slave, der auf die gesendeten 
Adresse+Daten ACK sendet.

Ohne Verständnis des I2C gehts nunmal nicht.


Was ist ein EDK?


Peter

Autor: Peter M. (whitsha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I2C Spezifikation habe ich schon durchgelesen und soweit verstanden.

> Da fehlt aber noch die Länge der Daten. Der Master muß doch wissen,
> wieviel Bytes er senden soll.

Die Funktion, die fürs senden zuständig ist ist ja weiter unten und da 
ist auch als 4 Parameter eine 1, d.h. ein Byte senden.

ByteCount = XIic_Send(Basis, Slave, Daten, 1, XIIC_STOP);


> Vollkommen klar.
> An SDA/SCL muß je ein Pullup und ein Slave, der auf die gesendeten
> Adresse+Daten ACK sendet.

die externen Pins habe ich mit internen Pullups versehen.

meine Frage ist es jetzt ob man ohne ein Slave an die Pins anzuschlißen, 
sehen kann ob der Master sendet bzw. mit Logic Analyzer die 
Startbedingung vom Master sehen. Ich wollte zuerst sehen ob das 
C-Programm und die Hardware funktioniert und erst dann den Slave 
anschließen.

> Was ist ein EDK?
EDK (Embedded Development Kit) ist ein Tool mit dem ich den 
Microcontroller als embedded System erstelle und im FPGA von Xilinx 
implementiere.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> meine Frage ist es jetzt ob man ohne ein Slave an die Pins anzuschlißen,
> sehen kann ob der Master sendet bzw. mit Logic Analyzer die
> Startbedingung vom Master sehen.

Mit Pullups solltest Du das START, das Adreßbyte, das NACK und das STOP 
sehen.
Und die Senderoutine sollte einen Fehlercode zurückgeben, daß die 
Adresse mit NACK beantwortet wurde.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.