Hallo, möchte folgende I2C benutzen um meinen RV3029-C2 anzusprechen! bekomme die ganze Zeit 2 Fehler: bit i2c_write(unsigned char output_data) unsigned char i2c_read(bit send_ack) vielleicht kann mir jemand helfen und tips geben wie ich diese wegbekomme. MfG µC-Einsteiger
1 | #define SDA 0x20; //PD5
|
2 | #define SCL 0x40; //PD6
|
3 | |
4 | void delay_time(unsigned char delay); |
5 | |
6 | #define I2CDELAY 6
|
7 | |
8 | void i2c_init(void) |
9 | {
|
10 | PORTD |= SDA; //setzen SDA |
11 | PORTD |= SCL; //setzen SCL |
12 | }
|
13 | |
14 | void i2c_start(void) |
15 | {
|
16 | PORTD &= ~SDA; //rücksetzen SDA |
17 | delay_time(I2CDELAY); |
18 | PORTD &= ~SCL; //rücksetzen SCL |
19 | delay_time(I2CDELAY); |
20 | }
|
21 | |
22 | void i2c_stop(void) |
23 | {
|
24 | PORTD |= SCL;; |
25 | delay_time(I2CDELAY); |
26 | PORTD |= SDA;; |
27 | delay_time(I2CDELAY); |
28 | }
|
29 | |
30 | bit i2c_write(unsigned char output_data) |
31 | {
|
32 | unsigned char index; |
33 | for (index=0; index<8; index++) |
34 | {
|
35 | if (output_data & 0x80) PORTD |= SDA; else PORTD &= ~SDA; |
36 | delay_time(I2CDELAY); |
37 | output_data = output_data << 1; |
38 | PORTD |= SCL; |
39 | delay_time(I2CDELAY); |
40 | PORTD &= ~SCL; |
41 | delay_time(I2CDELAY); |
42 | }
|
43 | PORTD |= SDA; |
44 | delay_time(I2CDELAY); |
45 | PORTD |= SCL; |
46 | delay_time(I2CDELAY); |
47 | |
48 | if (PORTD &= ~SDA) |
49 | {
|
50 | PORTD &= ~SCL; |
51 | delay_time(I2CDELAY); |
52 | return 1; |
53 | }
|
54 | else
|
55 | {
|
56 | PORTD &= ~SCL; |
57 | delay_time(I2CDELAY); |
58 | return 0; |
59 | }
|
60 | }
|
61 | |
62 | unsigned char i2c_read(bit send_ack) |
63 | {
|
64 | unsigned char index, input_data; |
65 | input_data = 0x00; |
66 | PORTD |= SDA; |
67 | delay_time(I2CDELAY); |
68 | for (index=0; index<8; index++) |
69 | {
|
70 | input_data = input_data << 1; |
71 | PORTD |= SCL; |
72 | delay_time(I2CDELAY); |
73 | input_data = input_data | SDA; |
74 | PORTD &= ~SCL; |
75 | delay_time(I2CDELAY); |
76 | }
|
77 | if (send_ack == 1) |
78 | {
|
79 | PORTD &= ~SCL; |
80 | }
|
81 | else
|
82 | {
|
83 | PORTD |=SDA; |
84 | delay_time(I2CDELAY); |
85 | PORTD |=SCL; |
86 | delay_time(I2CDELAY); |
87 | PORTD &= ~SCL; |
88 | delay_time(I2CDELAY); |
89 | PORTD &= ~SDA; |
90 | delay_time(I2CDELAY); |
91 | return (input_data); |
92 | }
|
93 | }
|
94 | |
95 | void delay_time(unsigned char delay) |
96 | {
|
97 | unsigned char i; |
98 | for (i=0; i<delay; i++); |
99 | }
|