Hallo!
Ich und zwei Kollegen sollen ein Board entwerfen das ein LCD-Display
ansteuert.
ST7565R:
Wir verwenden ein 4-line interface. (keine read Funktionen möglich)
Abgeglichen mit den ST7565R.pdf.
Init für das Display:
1 | //turn on the Power and keep /RES pin at L
|
2 | // RES = RB7
|
3 | TRISBbits.TRISB7 = CLR;
|
4 | PORTBbits.RB7 = CLR;
|
5 | //wait for power stabilized
|
6 | wait_500ms();
|
7 | //release state /RES pin to H
|
8 | PORTBbits.RB7 = SET;
|
9 | //wait < 1ms
|
10 | wait_1ms();
|
11 | WriteSPI1(0x40); //LCD_display_start_line_set(0x0);
|
12 | WriteSPI1(0xA0); //LCD_ADC_select(0); //0: normal, 1: reverse
|
13 | WriteSPI1(0xC0); //CD_common_output_mode_select(0);
|
14 | WriteSPI1(0xA6); //LCD_display_direction 0: normal, 1: reverse
|
15 | WriteSPI1(0xA2); //LCD_bias_set(0);
|
16 | WriteSPI1(0x2F); //LCD_power_control_set(0x07); // see command description
|
17 | WriteSPI1(0xF8); //LCD_booster_raito_set(0x02);
|
18 | WriteSPI1(0x00); //x4
|
19 | WriteSPI1(0x27); //LCD_voltage_regular_internal_resistor(0x06); // see ST7565R.pdf page 45
|
20 | WriteSPI1(0x81); //LCD_electric_volume_register_mode_set(0x10); // LCD brightness
|
21 | WriteSPI1(0x10); //mittel
|
22 | WriteSPI1(0xAF); //LCD_displayON_OFF(1);
|
23 |
|
24 | WriteSPI1(0xA4); //LCD_display_all_points
|
SPI init
1 | IFS0bits.SPI1IF = 0;
|
2 | IEC0bits.SPI1IE = 0;
|
3 | SPI1CON1bits.MSTEN = 1; // slave mode, wenn 1 -> Master Mode Enabled
|
4 |
|
5 | SPI1CON1bits.PPRE = 0b0; // primary prescaler -> SPI1CONbits.PPRE = 0x0000,
|
6 | SPI1CON1bits.SPRE = 0b0; // secondary prescaler -> SPI1CONbits.SPRE = 0x0000; -> 79MHz Oszillator /(64*8) ~ 155kHz
|
7 | // gemessen wird mit dem Oszilloskop jedoch 77,5kHz -> liegt immer noch im Tolleranzbereich des Controllers
|
8 |
|
9 | SPI1CON1bits.CKP = 1; // idle state for clock is a low level; active state is a high level
|
10 | SPI1CON1bits.CKE = 0; // output data changes from Idle clock state to active clock state
|
11 | SPI1CON1bits.MODE16 = 0; // 8-bit communication ->0, wenn 1 -> communication is word-wide (16 bits)
|
12 | SPI1CON1bits.DISSCK = 0; // Internal SPI Clock is enabled
|
13 | SPI1CON1bits.DISSDO = 0, // SDO1 wird durch das Modul gesteuert
|
14 | SPI1CON2bits.SPIFSD = 0; // 1 = Frame sync pulse input (slave)
|
15 | SPI1CON2bits.FRMEN = 0; // 0 = Framed SPI support disabled
|
16 |
|
17 | SPI1STATbits.SPITBF = 0; // Data to be transmitted can be written to SPIxBUF by the user software at any time
|
18 | // as long as the SPITBF (SPIxSTST<1>) status bit is clear. The write can occur while
|
19 | // SPIxSR is shifting out the previously written data, allowing continuous transmission.
|
20 |
|
21 | SPI1STATbits.SPIROV = 0; // Clear the SPIROV (SPIxSTAT<6>) status bit.
|
22 | SPI1STATbits.SPIEN = 1; // Configure SPI1 module, Enable SPI module (SPIxSTAT <15>)
|
Problem:
Display leuchtet, reagiert jedoch nicht auf die Init.