PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC18F458/PIC18f4685 I2C Master zu EAeDIP320-8 Touchdisplay



Ramona1805
28.04.2010, 15:47
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/en/devicedoc/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:


#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..

Ramona1805
04.05.2010, 07:16
Gibts denn hier wirklich niemanden der mir helfen kann?
Ich komm einfach nicht mehr weiter :(

PICture
04.05.2010, 07:39
Hallo Ramona1805!

Ich würde dir sehr gerne helfen, wenn ich aber ein Programm in c sehe, dann bin ich blind, weil ich die Sprache gar nicht kenne... :(

Wenn du einigemasen english beherrschts probier mal in USA http://forum.microchip.com , wo Spezialisten aus aller Welt gibt und mir wurde dort am Anfang schnell geholfen...

Vieeel Erfolg! :)

MfG

Ramona1805
06.05.2010, 15:29
Hi nochmal,

es ist zwar schade, dass mir hier keiner helfen konnte.. aber ich habe in einem anderen Forum ausreichend Hilfe und Unterstützung gefunden =)

Falls jemand das gleiche Problem wie ich haben sollte, möchte ich hier mal den Link zu meiner Lösung posten.. Ich hoffe es ist oke auch wenn er auf ein anderes Forum verweist..

http://www.ccsinfo.com/forum/viewtopic.php?p=132009#132009

Falls das hier nicht erlaubt oder gewünscht ist, ist es oke wenn der Eintrag wieder gelöscht wird, dann würde ich notfalls die Antworten händisch posten.

Liebe Grüße
Ramona

PICture
06.05.2010, 15:39
Hallo Ramona1805!

Keine Angst, jeder darf sich Hilfe überall holen ...

Dass du die Lösung für andere bereitstellst, finde ich toll. :)

MfG