Moin! Ich habe einen AT90CAN128 und ein EA eDIP240 und möchte das Display gerne über I2C ansprechen. Da ich keien Lust habe, jedes mal den ganzen Wust zu schreiben, wollte ich mir ein Unterprogramm zum senden des Textes schrieben. Leider mache ich irgendwo bei der Übergabe noch einen Fehler! Leider sehe ich ihn aber nicht! Wenn im Unterprogramm versucht wird, die Länge des String zu ermitteln, kommt immer 0 bei raus. Edit: Als Compiler verwende ich den AVR GCC in der aktuellen Version. Könnt ihr mir helfen? Hier der Code:
1 | #include <avr/pgmspace.h> |
2 | #include "string.h" |
3 | #include <avr/io.h> |
4 | #include <stdint.h> |
5 | #include <i2cmaster/twimaster.c> |
6 | |
7 | #define DC1 0x17
|
8 | #define DC2 0x12
|
9 | #define ESC 0x1B
|
10 | #define ACK 0x06
|
11 | #define NAK 0x15
|
12 | #define NUL 0x00
|
13 | |
14 | void text_send(int xpos, int ypos, char *text); |
15 | |
16 | int main(void) |
17 | {
|
18 | char str3[] = "Hallo Welt!"; |
19 | |
20 | text_send(0,20, str3); |
21 | return 0; |
22 | }
|
23 | |
24 | |
25 | void text_send(int xpos, int ypos, char *text) |
26 | {
|
27 | int len, bcc, i; |
28 | len = strlen(text); |
29 | for (i = 0; i == len; i++) |
30 | {
|
31 | bcc += text[i]; |
32 | }
|
33 | bcc += DC2 + ESC + len + 1 + 'Z' + 'L' + xpos + ypos; |
34 | bcc %= 0x100; |
35 | i2c_start(0x10); |
36 | i2c_write(DC2); |
37 | i2c_write(len + 1); |
38 | i2c_write('Z'); |
39 | i2c_write('L'); |
40 | i2c_write(xpos); |
41 | i2c_write(ypos); |
42 | for (i=0; i == strlen(text); i++) |
43 | i2c_write(text[i]); |
44 | i2c_write(NUL); |
45 | i2c_write(bcc); |
46 | }
|