Forum: Mikrocontroller und Digitale Elektronik Textausgabe mit eDIP128


von Achim S. (achims)


Lesenswert?

Zur Ausgabe eines Textes auf einem eDIP128 nutze ich den folgenden Code:
1
void Graphik_Text_ausgabe(int8_t x1, int8_t y1, char * Text)
2
  {
3
  uint8_t bcc; 
4
    >>  bcc = 0x11 + 0x07 + 0x1b + 'Z' + 'L' + x1 + y1 + strlen(Text);
5
  i2c_start(slave_adresse_1);
6
  i2c_write(0x11);    // DC1 0x11
7
  i2c_write(0x07);    // len   
8
  i2c_write(0x1b);    // ESC   0x1b
9
  i2c_write('Z');      // 
10
  i2c_write('L');      // 
11
  i2c_write(x1);
12
  i2c_write(y1);
13
  i2c_write(* Text);
14
  i2c_write(00);
15
  i2c_write(bcc);
16
  i2c_start(slave_adresse_2);
17
  e = i2c_readAck();
18
  i2c_stop();
19
  }
Als Rückgabe Wert bekomme ich 21 - Fehler.
Mit der Berechnung von bcc stimmt was nicht. Da fehlt was?
Als Text nutze ich das Wort "Test"
kann mal jemand drüber schauen?
achim

von holger (Gast)


Lesenswert?

>    >>  bcc = 0x11 + 0x07 + 0x1b + 'Z' + 'L' + x1 + y1 + strlen(Text);

Das mit dem strlen() war wohl nix. Die Checksumme muss über
alle Buchstaben des Textes gebildet werden.

>  i2c_write(* Text);

Die Funktion gibt sicher nicht den Text aus.
Das musst du Buchstabe für Buchstabe tun.

von Achim S. (achims)


Lesenswert?

Meinst du so was?

for (i=0; i<=strlen(text); i++)
   i2c_write(text[i]);
 i2c_write(bcc);

von Achim S. (achims)


Lesenswert?

Habe es geändert in
1
void Graphik_Text_ausgabe(int8_t x1, int8_t y1, char * Text)
2
  {
3
  uint8_t bcc, i=0; 
4
  bcc = 0x11 + 0x06 + 0x1b + 'Z' + 'L' + x1 + y1 + strlen(Text);
5
  i2c_start(slave_adresse_1);
6
  i2c_write(0x11);    // DC1 0x11
7
  i2c_write(0x06 + strlen(Text));    // len   07 Strich
8
  i2c_write(0x1b);    // ESC   0x1b
9
  i2c_write('Z');      // 
10
  i2c_write('L');      // 
11
  i2c_write(x1);
12
  i2c_write(y1);
13
  
14
  for (i=0;i<=strlen(Text); i++)
15
  i2c_write(Text[i]);
16
  return 0;
17
  
18
  i2c_write(00);
19
  i2c_write(bcc);
20
  i2c_start(slave_adresse_2);
21
  e = i2c_readAck();
22
  i2c_stop();
23
  itoa( e, Buffer, 10 );    // Zeile 1 Zahl 3
24
  lcd_printlc(3,5,Buffer);
25
  }
ist noch ein Fehler drin ???? Kannst du bitte noch mal schauen
achim

von ret (Gast)


Lesenswert?

Was macht denn: return 0; ?

von Achim S. (achims)


Lesenswert?

nach Buch ist das die Rückgabe für das

Achim S. schrieb:
> for (i=0;i<=strlen(Text); i++)

von ret (Gast)


Lesenswert?

>nach Buch ist das die Rückgabe für das
>
>Achim S. schrieb:
> for (i=0;i<=strlen(Text); i++)

Seit wann gibt es eine Rückgabe für eine Schleife, und wozu, und an wen?

von Michael U. (amiga)


Lesenswert?

Hallo,

Achim S. schrieb:
>   for (i=0;i<=strlen(Text); i++)
>   i2c_write(Text[i]);
>   return 0;

nach meinen (bescheidenen) C-Kenntnissen habe ich es mal für mich 
lesbarer geschrieben:

  for (i=0;i<=strlen(Text); i++)
  {
    i2c_write(Text[i]);
  }
  return 0;

Der Rest der Funktion wird so nie ausgeführt.

Oder liege ich hier falsch?

Gruß aus Berlin
Michael

von Achim S. (achims)


Lesenswert?

Hallo Michael
Das return stammt wahrscheinlich aus einer anderen Teil des Programmes. 
Scheinbar hat sich da was eingeschlichen. Bin gerade ändern und testen 
wie es geht. Stelle das Ergebnis rein.
achim

von Achim S. (achims)


Lesenswert?

Mit diesem Cide funktioniert es auch ohne return, hatte sich scheinbar 
eingeschlichen
1
void Graphik_Text_ausgabe(int8_t x1, int8_t y1, char * Text)
2
  {    
3
    int bcc,i;
4
  bcc = 0x11 + 0x06 + 0x1b + 'Z' + 'L' + x1 + y1 + strlen(Text);
5
  for (i=0; i<=strlen(Text); i++)
6
  bcc += Text[i];
7
  i2c_start(slave_adresse_1);
8
  i2c_write(0x11);
9
  i2c_write(0x06 + strlen(Text));
10
  i2c_write(0x1b);
11
  i2c_write('Z');
12
  i2c_write('L');
13
  i2c_write(x1);
14
  i2c_write(y1);
15
16
  for (i=0; i<=strlen(Text); i++)
17
  i2c_write(Text[i]);
18
  i2c_write(bcc);
19
      
20
  i2c_stop();
21
      
22
  //i2c_start(slave_adresse_2);
23
  //e = i2c_readAck();
24
  //i2c_stop();
25
       
26
  //itoa( e, Buffer, 10 );    // Zeile 1 Zahl 3
27
  //lcd_printlc(3,5,Buffer);      
28
  }
Im unteren Teil des Codes steht noch etwas auskommentierten. Hat die 
Aufgabe die Fehlermeldung anzuzeigen. Es kommt auf ein zweites Display 
und zeigt entweder 6 (ok) oder 21 (Fehler) an. Klappt aber noch nicht
achim

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.