Forum: Mikrocontroller und Digitale Elektronik Edip im I2C-Modus


von thomas (Gast)


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.


1
void init(void);
2
void twistart(int slave_addr);
3
void twisend(int databyte);
4
void twistop(void);
5
void twisendtext(char *text, int size);
6
int  twichecksum(char *text);
7
8
9
int main(void)
10
{
11
12
13
DDRA= 0xff;
14
int slave_addr = 0b11011110;
15
16
char texta[] = "Bdasdd";
17
char textb[] = "D@d";
18
    
19
    init();
20
21
  TWCR = (1<<TWINT)|(1<<TWSTA)| (1<<TWEN);   //send start condition
22
  while (!(TWCR & (1<<TWINT)));
23
24
  TWDR = slave_addr;
25
  TWCR = (1<<TWINT)|(1<<TWEN);  //send start condition
26
  while (!(TWCR & (1<<TWINT)));
27
28
  twisendtext(textb, strlen(textb));
29
  PORTA = TWSR;        //Ausgabe auf LEDS zum "debugggen",zeigt "28" (also ACK transmitted, data received)
30
        twisendtext(textb, strlen(textb));//wird nicht angezeigt!!!
31
        twistop();
32
return 0;
33
34
35
}
36
37
38
39
/////////////////////////////////////////////////
40
//       F U N K T I O N E N 
41
/////////////////////////////////////////////////
42
43
44
45
void init(void)
46
{
47
  TWBR = 42;
48
  TWSR = 0;
49
  
50
}
51
52
void twistart(int slave_addr)
53
{
54
  TWCR = (1<<TWINT)|(1<<TWSTA)| (1<<TWEN);  //send start condition
55
  while (!(TWCR & (1<<TWINT)));
56
  TWDR = slave_addr;
57
  TWCR = (1<<TWINT)|(1<<TWEN);  //send start condition
58
  while (!(TWCR & (1<<TWINT)));
59
}
60
61
void twisend(int databyte)
62
{
63
  TWDR=databyte;
64
  TWCR = (1<<TWINT)| (1<<TWEN);
65
  while (!(TWCR & (1<<TWINT)));
66
67
}
68
69
void twistop(void)
70
{
71
  TWCR=0b10010100;
72
}
73
74
75
76
void twisendtext(char *text, int size)
77
{
78
  twisend(0x12); 
79
  twisend(size);
80
81
int i=0;
82
  for(i=0; i<size;++i)
83
  {
84
    twisend(text[i]);
85
  }
86
  
87
    int checksum = 0;
88
    //checksum = 0x11+size;
89
    int j;
90
    for(j=0; j<size;++j)
91
    {
92
      checksum += text[j];
93
      
94
    }
95
    checksum += 17+size;
96
  
97
  twisend(checksum);
98
99
}

von 21addo12 (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.