www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Edip im I2C-Modus


Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wir haben ein Problem mit dem eDip 240-7TP von EA.
Wir senden einen Text zum eDip (über i2c, s.u.) mit einem Atmega32.
Der erste gesendete Text wird übertragen, der zweite nicht mehr.
Erst nach zwei Sekunden kann der neue Text übertragen werden.
Wenn wir den Mikrocontroller OHNE einen Text zu senden neu starten, gibt 
das eDip den Text trotzdem noch einmal aus.
Es scheint also noch etwas im "Buffer" des eDip zu liegen.
Das "ACK" aus dem TWSR-Register wird auch nach dem nicht angezeigten 
zweiten Text korrekt vom Display gesendet.

Kann uns jemand helfen???
Wir haben auch schon alle vorgefertigten Bibliotheken probiert, die 
kriegen wir nicht zum laufen (wegen fehlender include-Files usw.).
Danke im Voraus.


Hier ist das Programm.


void init(void);
void twistart(int slave_addr);
void twisend(int databyte);
void twistop(void);
void twisendtext(char *text, int size);
int  twichecksum(char *text);


int main(void)
{


DDRA= 0xff;
int slave_addr = 0b11011110;

char texta[] = "Bdasdd";
char textb[] = "D@d";
    
    init();

  TWCR = (1<<TWINT)|(1<<TWSTA)| (1<<TWEN);   //send start condition
  while (!(TWCR & (1<<TWINT)));

  TWDR = slave_addr;
  TWCR = (1<<TWINT)|(1<<TWEN);  //send start condition
  while (!(TWCR & (1<<TWINT)));

  twisendtext(textb, strlen(textb));
  PORTA = TWSR;        //Ausgabe auf LEDS zum "debugggen",zeigt "28" (also ACK transmitted, data received)
        twisendtext(textb, strlen(textb));//wird nicht angezeigt!!!
        twistop();
return 0;


}



/////////////////////////////////////////////////
//       F U N K T I O N E N 
/////////////////////////////////////////////////



void init(void)
{
  TWBR = 42;
  TWSR = 0;
  
}

void twistart(int slave_addr)
{
  TWCR = (1<<TWINT)|(1<<TWSTA)| (1<<TWEN);  //send start condition
  while (!(TWCR & (1<<TWINT)));
  TWDR = slave_addr;
  TWCR = (1<<TWINT)|(1<<TWEN);  //send start condition
  while (!(TWCR & (1<<TWINT)));
}

void twisend(int databyte)
{
  TWDR=databyte;
  TWCR = (1<<TWINT)| (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));

}

void twistop(void)
{
  TWCR=0b10010100;
}



void twisendtext(char *text, int size)
{
  twisend(0x12); 
  twisend(size);

int i=0;
  for(i=0; i<size;++i)
  {
    twisend(text[i]);
  }
  
    int checksum = 0;
    //checksum = 0x11+size;
    int j;
    for(j=0; j<size;++j)
    {
      checksum += text[j];
      
    }
    checksum += 17+size;
  
  twisend(checksum);

}

Autor: 21addo12 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab da mal ne nebensächliche frage hast du eine include datei für 
den edip?

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.