PIC18F I2C Initialisierung

Gast #2106236
Lesenswert?

Hallo,

vorab, sitze schon wochenlang an diesem Problem und habe schon sämtliche 
Foren und Varianten gecheckt und stehe jetzt am Rand meiner Fähigkeiten.

Ich habe einen PIC18F26K22 mit dem ich ein Display (Batron BT HQ 
21605AV-YETF-LED04-I2C-5V) über I2C steuern möchte. Quarz 20MHz.

Ich habe bereits die Register und Bits. manuell beschrieben aber auch 
die Funktionen aus i2c.h verwendet. Auf dem Oszi sind beide Leitungen 
auf 'Dauerhigh'. Verwende auch externe Pull-Ups (10k). Ich bekomm die 
Datenleitung einfach nicht runtergezogen für eine Startcondition. Hier 
seht ihr 2 von vielen Varianten die ich probiert habe:

1
//Libraries:
2
#include <p18f26K22.h>
3
#include <stdlib.h>
4
#include <stdio.h>
5
#include <delays.h>
6
#include <i2c.h>
7
...
8
...
9
...
10
void main()
11
{
12
...
13
...
14
...
15
  //I2C
16
  TRISCbits.TRISC3=1; //SCL Master
17
  TRISCbits.TRISC4=1;  //SDA
18
  OpenI2C(MASTER, SLEW_OFF);   // initialize master mode
19
  SSP1ADD=0x31; //100kHz
20

21
oder 
22

23
  SSP1CON1=0b00101000;   //I2C Enable bit + Master Mode
24
  SSP1CON2bits.ACKDT=0;
25
  SSP1STATbits.SMP=0;
26
  SSP1STATbits.CKE=0;
27
  SSP1ADD=0b00010000;  //400kHz Baud
28

29
...
30
...
31
...
32

33
  IdleI2C();
34
  Delay10TCYx( 50 );  
35
  StartI2C();
36
  Delay10TCYx( 50 );
37
  WriteI2C(0x74);  
38
  Delay10TCYx( 50 );  
39
  StopI2C();  
40

41
oder
42

43

44
    PIR1bits.SSP1IF=0;    //Fertig-Anzeige löschen
45
    SSPCON2bits.SEN=1;    //Bus übernehmen
46
    while(!PIR1bits.SSP1IF);//Warte bis Bus übernommen ist
47
    PIR1bits.SSP1IF=0;    //Zur¸cksetzen
48
    SSP1BUF=0x74;      //Slave adressieren + Write
49
    while(!PIR1bits.SSP1IF);//Warte bis fertig
50
    PIR1bits.SSP1IF=0;    //Zurücksetzen
51
    SSP1BUF=0xAA;      //Datenbyte
52
    while(!PIR1bits.SSP1IF);//Warte bis fertig
53
    PIR1bits.SSP1IF=0;    //Zurücksetzen
54
                while(SSP1CON2bits.ACKSTAT != 1);  //Acknowledge von Slave abwarten
55
    SSP1CON2bits.ACKSTAT=1;        //Zurücksetzen
56
    SSP1CON2bits.PEN=1;    //Bus freigeben
57
    while(!PIR1bits.SSP1IF);//Warte bis fertig
58
    PIR1bits.SSP1IF=0;    //Zurücksetzen
59
...
60
...


Hat jemand vielleicht eine Idee oder einen Code von dem er weiß dass 
dieser funktioniert? Ich wäre sehr dankbar.

lg
Patrick

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren