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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.