Guten Tag
Für ein Projekt von mir wollte ich mal ein I2C Testprogramm schreiben.
Leider funktioniert es nicht.
Ich will mit 2 PIC16F876 (Master, Slave) kommunizieren.
Die Programmierung erfolgt in C auf MPLAB mit einem PICKit3.
Programm Master:
main.c:
1 | #include <main.h>
|
2 |
|
3 |
|
4 | int value = 0x01;
|
5 | int din = 0x00;
|
6 |
|
7 | void Bus(void){
|
8 |
|
9 | i2c_start(); //I2C Bus starten
|
10 | i2c_write(0xa0); //Slave Adresse
|
11 | i2c_write(value); //Daten senden
|
12 | i2c_start(); //I2C Bus restarten
|
13 | i2c_write(0xa1); //Slave Adresse
|
14 | din=i2c_read(0); //Daten von Slave lesen
|
15 | i2c_stop(); //I2C Bus stoppen
|
16 |
|
17 | }
|
18 |
|
19 | void main()
|
20 | {
|
21 |
|
22 | while(TRUE)
|
23 | {
|
24 |
|
25 | if(input(PIN_A0)==1)
|
26 | {
|
27 | output_c(0x02);
|
28 | value = 0x01;
|
29 | Bus();
|
30 | }
|
31 | else
|
32 | {
|
33 | output_c(0x01);
|
34 | value=0x00;
|
35 | Bus();
|
36 | }
|
37 |
|
38 | if(din==0x01)
|
39 | {
|
40 | output_c(0x0F);
|
41 | }
|
42 | delay_ms(10);
|
43 | }
|
44 | }
|
main.h:
1 | #include <16F876.h>
|
2 | #device adc=16
|
3 |
|
4 | #FUSES NOWDT //No Watch Dog Timer
|
5 | #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
|
6 | #FUSES PUT //Power Up Timer
|
7 | #FUSES NOBROWNOUT //No brownout reset
|
8 | #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
|
9 |
|
10 | #use delay(clock=8000000)
|
11 |
|
12 | #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3,restart_wdt,force_hw)
|
Als ich mit dem Debugger durch ging blieb er immer bei #use stehen.
Braucht es noch eine Include Datei fürs I2C? Oder liegt der Fehler wo
anders?
Vielen Dank Simon