Forum: Mikrocontroller und Digitale Elektronik I2C Problem PIC16F876


von Simon (Gast)


Lesenswert?

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

von Chris B. (dekatz)


Lesenswert?

Simon schrieb:
>
> Braucht es noch eine Include Datei fürs I2C? Oder liegt der Fehler wo
> anders?
>
> Vielen Dank Simon

Nun, das müsste eigentlich in der Compilerbeschreibung oder bei der 
Beschreibung der "i2c"-Lib ersichtlich sein. Was ist das überhaupt für 
Compiler?

von Simon (Gast)


Lesenswert?

Chris B. schrieb:
> Was ist das überhaupt für
> Compiler?

Den CCS Compiler

von Chris B. (dekatz)


Lesenswert?

Mit dem CCS habe ich leider keine Erfahrung.
Schon mal im CCS-Forum nachgeforscht?
http://www.google.at/#fp=df8fb2183e1c540a&q=ccs+i2c+example

von Simon (Gast)


Lesenswert?

Vielen Dank
Ich habe den Fehler gefunden.

Man muss am Anfang zusätzlich zu den Befehlen input_x(); und output_x();
die Ein und Ausgänge mit set_tris_x(); definieren.

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.