Hallo ihr Lieben,

ich bin langsam ziemlich ratlos.. Ich bin derzeit dabei an meinem PIC18F458 (später dann auch am PIC18F4685)
über I2C mit meinem EAeDip320-8-Display zu kommunizieren.. Leider bisher ohne Erfolg :(
Hierfür nutze ich MPLAB in Verbindung mit dem CCS-Compiler.

Bin für alle Ratschläge dankbar

zur besseren Info hier die Datenblätter:
PIC18F458: http://ww1.microchip.com/downloads/e...doc/41159d.pdf
I2C ab Seite 154; I2C-Master ab Seite 169
Display: http://www.lcd-module.com/deu/pdf/grafik/edip320-8.pdf
I2C ab Seite 7; Befehlssatz ab Seite 14

Zum einen habe ich folgende Verkabelungen angebracht:
Display GND (PIN1) - Stromversorgung GND
Display VDD (PIN2) - Stromversorgung +5V
Display GND (PIN1) - GND Pic-Board
Display I2CMODE (PIN12) - Display GND
Display SCL (PIN15) - Pic SCL (C3)
Display SDA (PIN14) - Pic SDA (C4)
Pic SCL über Pullup 12k - Pic-Board Stromversorgung 5V
Pic SDA über Pullup 12k - Pic-Board Stromversorgung 5V

Könnte sein, dass hier auch noch was fehlt oder falsch ist..

Mein Testcode ist der folgende:

Code:
#include "18F458.h"

#FUSES H4, NOWDT //H4 für möglichst hohe Geschwindigkeit am IRQ-Eingang
#use I2C(Master, SDA=PIN_C4, SCL = PIN_C3, FAST, FORCE_HW)

#int_SSP
SSP_isr()
{	
	//Zum Test noch leer interrupt flag bit von Compiler rückgesetzt
}

void main()
{

	enable_interrupts(global);
	enable_interrupts(INT_SSP);

	set_tris_d(0x00); //Ausgang für LEDs
	set_tris_c(0b00011000); //SDA und SCL als INPUT laut Datenblatt
	output_d(0xFF); //Alle LEDs erst aus (AUS = 1, AN = 0)

	while(1)
	{
		//Übertragen des Befehls zum Invertieren des kompletten Displays
		
		i2c_start();
		output_bit(PIN_D0,~input(PIN_D0));
		
		i2c_write(0b11011110);	//senden der slave-Adresse mit 0 für write
		output_bit(PIN_C2, ~PIR2[3]);
		output_bit(PIN_D1,~input(PIN_D1));

		i2c_write(0x11);	//Hex-Code für '#' übertragen
		output_bit(PIN_D2,~input(PIN_D2));

		i2c_write(0x02);	//Länge der Datenbytes
		output_bit(PIN_D3,~input(PIN_D3));

		i2c_write(0x44);	//Hex-Code für 'D'
		output_bit(PIN_D4,~input(PIN_D4));

		i2c_write(0x49);	//Hex-Code für 'I'
		output_bit(PIN_D5,~input(PIN_D5));
	
		i2c_write(0xA0);	//Prüfsumme 
		output_bit(PIN_D6,~input(PIN_D6));

		i2c_stop();
		output_bit(PIN_D7,~input(PIN_D7));
	}
}
Die LEDs sind zum nachvollziehen im Durchlauf, wobei ich leider feststellen muss, dass der PIC schon während des ersten Write-Befehls aussteigt..
Die while-Schleife sollte dafür sein, dass ich den Vorgang wiederholt am Oszi verfolgen kann,
nur tut sich da auch noch nicht wirklich was.. :(

Wie gesagt ich bin mittlerweile richtig ratlos, aber meinen Funden an Beispielen hab ich bisher immer entnommen,
dass das #use I2C mit den Optionen und i2c_start, write, stop eigentlich ausreichen müsste..

Wäre echt super wenn ihr mich unterstützen könntet sowohl in Sachen Display als auch I2C-Programmieren..