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
1 | #include <18F4520.h>
|
2 | #device ICD=TRUE
|
3 | #device adc=16
|
4 |
|
5 | #FUSES NOWDT //No Watch Dog Timer
|
6 | #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
|
7 | #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
|
8 | #FUSES NOBROWNOUT //No brownout reset
|
9 | #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
|
10 | #FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
|
main.c
1 | #include <main.h>
|
2 | #define LCD_RST PIN_C2
|
3 | #define LCD_SCL PIN_C3
|
4 | #define LCD_SDA PIN_C4
|
5 | #define LCD_ADDRESS_W 0x78
|
6 | #define LCD_ADDRESS_R 0x79
|
7 | int8 ack_status = 3;
|
8 |
|
9 | #use delay(clock=20000000)
|
10 | #use i2c(MASTER,FAST,SDA=LCD_SDA,SCL=LCD_SCL)
|
11 |
|
12 | //Initialisierungssequenz
|
13 | void init_io(){
|
14 | output_low(LCD_RST);
|
15 | delay_ms(500);
|
16 | output_high(LCD_RST);
|
17 | }
|
18 |
|
19 |
|
20 | void main(){
|
21 | init_io();
|
22 | i2c_start();
|
23 | ack_status = i2c_write(LCD_ADDRESS_W);
|
24 | i2c_stop();
|
25 | }
|