www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18 & Batron LCD


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jul R. (nador)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo zusammen,

Bin noch relativer Mikrocontroller-Neuling, und habe mich jetzt mit dem 
PIC18LF4520 beschäftigt. Soweit habe ich bis jetzt auch alles 
hinbekommen, meine Aufgabe ist es aber jetzt ein Batron LCD (BT96040AV1) 
per I2C anzusteuern.

Die Pins für SDA und SCL wurden mit den entsprechenden Pins am µC 
verbunden und mit einem Pullup(2,2k) auf Versorgungsspannung gezogen, 
der Reset-Anschluss wurde ebenfalls verbunden, sowie natürlich Masse und 
Versorgung.

Controller und Display werden beide an 3V Spannung betrieben.

Programmiert wird das ganze in C (CCS C-Compiler).

Problem ist nun dass sich einfach garnichts tut. Habe mich bei der 
Initialisierung bzw. dem Vorgehen an Referenzcode aus dem Inet gehalten,
mir würde es schon reichen ein ACK vom Display zu kommen um dann selber 
weiterprobieren zu können.

Verbindungen habe ich alle mehrfach geprüft, die Größe der 
Pullup-Widerstände habe ich auch schon variiert.

Wäre sehr nett, wenn ihr mal einen Blick auf meine Code werfen könntet 
oder ein paar Tipps geben, was ich noch überprüfen  könnte (mir würde 
auch ein Tipp reichen, wo ich mich weiter informieren kann).

Vielen Dank schonmal für eure Hilfe

main.h
#include <18F4520.h>
#device ICD=TRUE
#device adc=16

#FUSES NOWDT                   //No Watch Dog Timer
#FUSES WDT128                  //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                      //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOBROWNOUT              //No brownout reset
#FUSES NOLVP                   //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                 //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

main.c
#include <main.h>
#define LCD_RST PIN_C2
#define LCD_SCL PIN_C3
#define LCD_SDA PIN_C4
#define LCD_ADDRESS_W 0x78
#define LCD_ADDRESS_R 0x79
int8 ack_status = 3;

#use delay(clock=20000000)
#use i2c(MASTER,FAST,SDA=LCD_SDA,SCL=LCD_SCL)

//Initialisierungssequenz
void init_io(){
      output_low(LCD_RST);   
      delay_ms(500);
      output_high(LCD_RST);   
}


void main(){
   init_io();
   i2c_start();
   ack_status =  i2c_write(LCD_ADDRESS_W);
   i2c_stop();     
}

Autor: Jul R. (nador)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
push
Habe die Hardware nochmal komplett neu aufgebaut, um einen 
Verdrahtungsfehler siche ausschließen zu können, Problem ist aber 
weiterhin das Selbe.

Würde mich über jede Hilfe freuen.

Gruß

Autor: Mick M. (highlow)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bislang geht es bei dir ja nur um die Frage ob überhaupt eine 
Kommunikation zwischen Master und Slave statt findet (ACK Bit).

Hierfür ist dein Code ausreichend und sollte (muss) auch funktionieren.

Wenn es schon wie deinem Fall an dieser Hürde scheitert, bleibt dir nix 
anderes übrig als mit einem Oszilloskop die Kommunikation zu überprüfen.

Autor: Jul R. (nador)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
@highlow

Okay, danke dir, habe ich jetzt so langsam fast schon befürchtet.
Muss ich wohl schauen dass ich irgendwo ein Oszi auftreiben kann...

Autor: Jul R. (nador)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo zusammen,

habe das ganze jetzt mit Hilfe des Bus Pirate getestetet (Ack ok) und 
anschließend nochmals mit dem PIC aufgebaut, die Kommunikation 
funktioniert.
Soweit die gute Nachricht ;)
Habe mich jetzt bei der Initialisierung an das Datenblatt und auch an 
einem anderen Thread orientiert.
Bekomme zwar ACKs, aber leider keinerlei Anzeige; die eingestellte LCD 
Spannung (~13V) kann ich messen.

Kann mir jemand sagen, ob sich in meinem Code ein Fehler eingetan hat?
Habe ich vielleicht irgendwas übersehen?

Vielen Dank schonmal, wie immer würde ich mich über jede hilfe freuen :)

Gruß Nador

#include <main.h>
#define LCD_RST PIN_B3
#define LCD_SCL PIN_C3
#define LCD_SDA PIN_C4
#define LCD_ADDRESS 0x7E

int ack_status;
#use delay(clock=20000000)
#use i2c(MASTER,FAST,SDA=LCD_SDA,SCL=LCD_SCL)

void command (unsigned int8 command) {
i2c_write(0x80);   // 0b10000000
i2c_write(command);
}

void setFunction (unsigned int8 page, unsigned int8 cmd) {
command(0x20+page); // 0b00100000 page selector, power down management
command(cmd);
}

void init_io() {
output_low(LCD_RST);   
delay_ms(100);
output_high(LCD_RST); 
}

void main(){
   init_io();
   i2c_start();
   ack_status =  i2c_write(LCD_ADDRESS);
   setFunction(1,0x12);      // Bias Ratio = 4
   setFunction(0,0x05);      // set VLCD
   setFunction(0,0x17);      // Charge pump automatic
   setFunction(0,0x0C);      // normal LCD mode
   setFunction(1,0x01);      // checkerboard
   i2c_stop(); 
     
   output_high(PIN_B0);   
   delay_ms(10);
   output_low(PIN_B0);      
} 

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
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.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net