Hallo, ich möchte mit einem PIC18F25J10 einen 24LC64 ansprechen und habe folgende zwei Routinen geschrieben - aber es funktioniert nicht (ich verwende den MCC18). Der Lesevorgang sollte über Random Read funktionieren. Die Funktionen eeprom_WriteByte und eeprom_ReadByte rufe ich in meiner Hauptroutine hintereinander auf. Kann mir jemand einen Tipp geben, was ich falsch mache - bzw. wo finde ich entsprechende Source-Code-Beispiele? Vielen Dank thomas
1 | #include <p18f25j10.h> |
2 | #include <i2c.h> |
3 | |
4 | #include <controller.h> |
5 | |
6 | void eeprom_WriteByte (void) |
7 | {
|
8 | OpenI2C(MASTER, SLEW_ON);// Initialize I2C module |
9 | SSPADD = 12; |
10 | |
11 | IdleI2C(); |
12 | StartI2C(); |
13 | |
14 | IdleI2C(); |
15 | WriteI2C(0xA0); // control byte |
16 | AckI2C(); |
17 | |
18 | IdleI2C(); |
19 | WriteI2C(0x00); // reg address |
20 | AckI2C(); |
21 | |
22 | IdleI2C(); |
23 | WriteI2C(0x00); // reg address |
24 | AckI2C(); |
25 | |
26 | IdleI2C(); |
27 | WriteI2C('A'); |
28 | AckI2C(); |
29 | |
30 | IdleI2C(); |
31 | WriteI2C('B'); |
32 | AckI2C(); |
33 | |
34 | StopI2C(); |
35 | |
36 | CloseI2C(); |
37 | |
38 | |
39 | }
|
40 | |
41 | |
42 | unsigned char eeprom_ReadByte (void) |
43 | {
|
44 | unsigned char ret_value; |
45 | |
46 | OpenI2C(MASTER, SLEW_ON);// Initialize I2C module |
47 | SSPADD = 12; |
48 | |
49 | IdleI2C(); |
50 | StartI2C(); |
51 | |
52 | IdleI2C(); |
53 | WriteI2C(0xA0); // control byte |
54 | AckI2C(); |
55 | |
56 | IdleI2C(); |
57 | WriteI2C(0x00); // reg address |
58 | AckI2C(); |
59 | |
60 | IdleI2C(); |
61 | WriteI2C(0x00); // reg address |
62 | AckI2C(); |
63 | |
64 | IdleI2C(); |
65 | StartI2C(); |
66 | AckI2C(); |
67 | |
68 | IdleI2C(); |
69 | WriteI2C(0xA1); // control byte |
70 | AckI2C(); |
71 | |
72 | IdleI2C(); |
73 | ret_value = ReadI2C(); |
74 | |
75 | StopI2C(); |
76 | |
77 | CloseI2C(); |
78 | |
79 | return ret_value; |
80 | |
81 | }
|