www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik eDIPTFT43 I2C Problem


Autor: Matthias Maier (matthi-ulm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benutze das Display eDIPTFT43 und hab das Problme das ich über den I2C 
Bus nicht auf Das Display zutreffen kann.
Unten seht ihr meinen Code, dieser sollte eigentlich funktionieren, aber 
das Display wird trotzdem nicht gelöscht :-(

Kann mir jemand sagen was ich da falsch gemacht habe !?
#include <LPC21xx.H> 
#include <stdarg.h>

void I2CISR (void)  __irq ;
//I2C interrupt           
void I2CTransferByte(unsigned Addr,unsigned Data);      //Background call to start master send and receive byte transfers

unsigned I2CAdresse;
unsigned I2CData;


int main(void)
{

VICVectCntl1 = 0x00000029;          //select a priority slot for a given interrupt
VICVectAddr1 = (unsigned)I2CISR;      //pass the address of the IRQ into the VIC slot
VICIntEnable = 0x00000200;          //enable interrupt

PINSEL0     = 0x50;             //Switch GPIO to I2C pins


  // Initial I2C Data Rate = 100KHz(VPB=29.4912MHz)
  // I2C Data Rate = 29.4912MHz / 294
  //               = 100.31KHz
I2SCLH = 0x00000093;                    // Clock High = 147
I2SCLL = 0x00000093;                    // Clock Low  = 147



 while(1)
 {
  //Display löschen
  I2CTransferByte(0xDE,0x11);  //DC1
  I2CTransferByte(0xDE,0x03);  //lengh
  I2CTransferByte(0xDE,0x1B);  //ESC
  I2CTransferByte(0xDE,0x44);  //D
  I2CTransferByte(0xDE,0x4C);   //L
  I2CTransferByte(0xDE,0x11 + 0x03 + 0x1B+ 'D' + 'L');     
 }
}


void I2CTransferByte(unsigned Addr,unsigned Data)
{
 I2CAdresse = Addr; //Place address and data in Globals to be used by
 //the interrupt
 I2CData = Data;
 I2CONCLR = 0x0000006C; //Clear all I2C settings
 I2CONSET = 0x00000040; //Enable the I2C interface
 I2CONSET = 0x00000020; //Start condition
}


void I2CISR (void) __irq          //I2C interrupt routine
{

switch (I2STAT)                //Read result code and switch to next action
{
// Start and Send byte conditions

case ( 0x08):                //Start bit
I2CONCLR   = 0x20;              //Clear start bit
I2DAT     = I2CAdresse;           //Send address and write bit
break;

case (0x18):                //Slave address+W, ACK
I2DAT     = I2CData;            //Write Mem,ory start address to tx register
break;                

case (0x20):                //Salve address +W, Not ACK
I2DAT     = I2CAdresse;           //Resend address and write bi
break;

case (0x28):
I2CONSET = 0x10;               //Stop condition
break;

case (0x30)  :                //Data sent, NOT Ack
I2DAT     = I2CData;            //Write data to tx register
break;


//Receive byte conditions

case (0x40) :                //Slave Address +R, ACK
I2CONSET   = 0x04;              //Enable ACK for data byte
break;

case (0x48) :                //Slave Address +R, Not Ack
I2CONSET   = 0x20;              //Resend Start condition
break;

case (0x50) :                //Data Received, ACK 

I2CONSET   = 0x10;              //Stop condition
                                //Signal end of I2C activity              

break;

case (0x58):                //Data Received, Not Ack
I2CONSET   = 0x20;              // Resend Start condition
break;

default :
break;

}

I2CONCLR   = 0x08;              //Clear I2C interrupt flag
VICVectAddr = 0x00000000;          //Clear interrupt in 

}

Autor: Doktor Gnadenlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuallererst würde ich schauen, ob das Display das I2C-Telegramm mit 
einem ACK bestätigt. Bekanntlich muss das Bit 9 von Slave (also dem 
Display) auf Low gezogen werden. Soweit ich weiß, können die Displays 
von EA mit zwei I2C-Adressen konfiguriert werden.

Sollte das hinhauen, passt wohl der Telegramminhalt nicht. Meines 
Wissens benötigen die EA-Displays eine CRC am Ende jedes Telegramms. Da 
gibt es viele Möglichkeiten, wo sich Fehler einschleichen können.

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Checksumme wird es nicht funktionieren....
Ich verwende zwar die RS232 Schnittstelle bei diesem Display, aber die 
Checksumme braucht es ja trotzdem.
rtfm ;-)

Autor: Matthias Maier (matthi-ulm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ok danke mal für die Antworten.
Also ich bekomm ein ACK vom Display.
Und zu der Checksumme, ganz am schluss schicke ich doch die Checksumme 
!?
I2CTransferByte(0xDE,0x11 + 0x03 + 0x1B+ 'D' + 'L'); 

oder was stimmt daran nicht !?

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt hatte ich übersehen... sorry
Mal eine andere Frage ist in Deinem Fall ein "unsigned" ein "unsigned 
char"

Autor: Matthias Maier (matthi-ulm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm nein ich hab nur ein unsigned und kein "unsigned char" muss es dein 
ein "unsigned char" sein !?

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja ein unsigned char hat 8 bit... was hat dein Datentyp unsigned? 16, 
32 ??
probiers mal aus dann siehst Du ja ob es was bringt oder gib mal die 
Checksumme auf der RS232 aus, dann weißt Du ob sie stimmt.

Autor: Matthias -Meier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Als nachtrag:


Mein Fehler war das ich zwischen dem Senden keine Pausen gemacht habe. 
Jetzt geht soweit alles.

Trotzdem Danke für eure Hilfe

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.