[MEGA2560] KS108+ Voice+Splash "far" (#3534)
+little option (not defined) to reduce encoder resolution
This commit is contained in:
@@ -251,6 +251,10 @@ void lcdInit();
|
||||
|
||||
void lcdRefresh();
|
||||
|
||||
#if defined(LCD_KS108)
|
||||
void lcdRefreshSide();
|
||||
#endif
|
||||
|
||||
#if defined(LCD_ST7920)
|
||||
uint8_t lcdRefresh_ST7920(uint8_t full);
|
||||
#define IS_LCD_REFRESH_ALLOWED() (0==lcdstate)
|
||||
|
||||
@@ -52,7 +52,7 @@ void drawSplash()
|
||||
{
|
||||
lcdClear();
|
||||
#if defined(PCBMEGA2560) && !defined(SIMU)
|
||||
lcd_imgfar(0, 0, pgm_get_far_address(splash_lbm), 0, 0); // use progmem "far" for splash working with all other options enabled
|
||||
lcd_imgfar(0, 0, (GET_FAR_ADDRESS(splashdata)+4), 0, 0); // use progmem "far" for splash working with all other options enabled
|
||||
#else
|
||||
lcd_img(0, 0, splash_lbm, 0, 0);
|
||||
#endif
|
||||
|
||||
@@ -138,7 +138,9 @@ void perMain()
|
||||
drawStatusLine();
|
||||
}
|
||||
|
||||
#if defined(LCD_ST7920)
|
||||
#if defined(LCD_KS108)
|
||||
lcdRefreshSide();
|
||||
#elif defined(LCD_ST7920)
|
||||
lcdstate = lcdRefresh_ST7920(0);
|
||||
#else
|
||||
lcdRefresh();
|
||||
|
||||
@@ -65,8 +65,13 @@ void lcdSetRefVolt(uint8_t val)
|
||||
{
|
||||
}
|
||||
|
||||
void lcdRefreshSide(display_t * p)
|
||||
void lcdRefreshSide()
|
||||
{
|
||||
static uint8_t change = 0; // toggle left or right lcd writing
|
||||
uint8_t *p;
|
||||
if (change == 0){ CS2_off; CS1_on; p = displayBuf; change = 1;} // Right
|
||||
else{ CS1_off; CS2_on; p = displayBuf + 64; change = 0;} // Left
|
||||
|
||||
for (uint8_t page=0; page < 8; page++) {
|
||||
lcdSendCtl(DISPLAY_SET_COLUMN); // Column addr 0
|
||||
lcdSendCtl( page | DISPLAY_SET_PAGE); //Page addr
|
||||
@@ -82,13 +87,6 @@ void lcdRefreshSide(display_t * p)
|
||||
|
||||
void lcdRefresh()
|
||||
{
|
||||
// Right
|
||||
CS1_on;
|
||||
lcdRefreshSide(displayBuf);
|
||||
CS1_off;
|
||||
|
||||
// Left
|
||||
CS2_on;
|
||||
lcdRefreshSide(displayBuf + 64);
|
||||
CS2_off;
|
||||
lcdRefreshSide();
|
||||
lcdRefreshSide();
|
||||
}
|
||||
|
||||
@@ -25,16 +25,16 @@ inline void boardInit()
|
||||
{
|
||||
// Set up I/O port data directions and initial states (unused pin setting : input, pull-up on)
|
||||
DDRA = 0b11111111; PORTA = 0b00000000; // LCD data
|
||||
DDRB = 0b01110111; PORTB = 0b00101111; // 7:SOMOBusy, 6:PPM_OUT, 5:SimCTRL, 4:Buzzer, SDCARD[3:MISO 2:MOSI 1:SCK 0:CS]
|
||||
DDRB = 0b01110111; PORTB = 0b00101111; // 7:WTV20SDBusy, 6:PPM_OUT, 5:SimCTRL, 4:Buzzer, SDCARD[3:MISO 2:MOSI 1:SCK 0:CS]
|
||||
DDRC = 0b11111100; PORTC = 0b00000011; // 7-3:LCD, 2:BackLight, 1:ID2_SW, 0:ID1_SW
|
||||
DDRD = 0b00000000; PORTD = 0b11111100; // 7:AilDR_SW, 6:N/A, 5:N/A, 4:N/A, 3:RENC2_B, 2:RENC2_A, 1:I2C_SDA, 0:I2C_SCL
|
||||
DDRE = 0b00001010; PORTE = 0b01110100; // 7:PPM_IN, 6:N/A, 5:RENC1_B, 4:RENC1_A, 3:SOMOData, 2:N/A, 1:TELEM_TX, 0:TELEM_RX
|
||||
DDRE = 0b00001010; PORTE = 0b01110100; // 7:PPM_IN, 6:N/A, 5:RENC1_B, 4:RENC1_A, 3:WTV20SDData, 2:N/A, 1:TELEM_TX, 0:TELEM_RX
|
||||
DDRF = 0b00000000; PORTF = 0b11111111; // 7-0:Trim switch inputs
|
||||
DDRG = 0b00100000; PORTG = 0b11011111; // 7:N/A, 6:N/A, 5:SOMOClock, 4:N/A, 3:N/A, 2:TCut_SW, 1:Gear_SW, 0: RudDr_SW
|
||||
DDRG = 0b00100000; PORTG = 0b11011111; // 7:N/A, 6:N/A, 5:WTV20SDClock, 4:N/A, 3:N/A, 2:TCut_SW, 1:Gear_SW, 0: RudDr_SW
|
||||
#if defined(DEBUG)
|
||||
DDRH = 0b01011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:SOMOReset, 0:Haptic
|
||||
DDRH = 0b01011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:WTV20SDReset, 0:Haptic
|
||||
#else
|
||||
DDRH = 0b00011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:SOMOReset, 0:Haptic
|
||||
DDRH = 0b00011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:WTV20SDReset, 0:Haptic
|
||||
#endif
|
||||
DDRJ = 0b00000000; PORTJ = 0b11111111; // 7:N/A, 6:N/A, 5:N/A, 4:N/A, 3:N/A, 2:N/A, 1:RENC2_push, 0:RENC1_push
|
||||
DDRK = 0b00000000; PORTK = 0b00000000; // Analogic input (no pull-ups)
|
||||
@@ -57,7 +57,7 @@ inline void boardInit()
|
||||
#endif
|
||||
|
||||
#if defined(VOICE)
|
||||
// SOMO set-up, with TIMER5
|
||||
// WTV20SD set-up, with TIMER5
|
||||
OCR5A = 0x1F4; //2ms
|
||||
TCCR5B = (1 << WGM52) | (0b011 << CS50); // CTC OCR5A
|
||||
TIMSK5 |= (1<<OCIE5A); // Start the interrupt so the unit reset can occur
|
||||
@@ -197,24 +197,40 @@ void readKeysAndTrims()
|
||||
ISR(INT4_vect) // Arduino2560 IO02 (portE pin4)
|
||||
{
|
||||
uint8_t input = (PINE & 0x30);
|
||||
#if defined (ROTENC_DIV2)// Rotenc resolution/2
|
||||
if (input == 0) incRotaryEncoder(0, -1);
|
||||
#else
|
||||
if (input == 0 || input == 0x30) incRotaryEncoder(0, -1);
|
||||
#endif
|
||||
}
|
||||
|
||||
ISR(INT5_vect) // Arduino2560 IO03 (portE pin5)
|
||||
{
|
||||
uint8_t input = (PINE & 0x30);
|
||||
#if defined (ROTENC_DIV2)// Rotenc resolution/2
|
||||
if (input == 0) incRotaryEncoder(0, +1);
|
||||
#else
|
||||
if (input == 0 || input == 0x30) incRotaryEncoder(0, +1);
|
||||
#endif
|
||||
}
|
||||
|
||||
ISR(INT2_vect) // Arduino2560 IO19 (portD pin2)
|
||||
{
|
||||
uint8_t input = (PIND & 0x0C);
|
||||
#if defined (ROTENC_DIV2)// Rotenc resolution/2
|
||||
if (input == 0) incRotaryEncoder(1, -1);
|
||||
#else
|
||||
if (input == 0 || input == 0x0C) incRotaryEncoder(1, -1);
|
||||
#endif
|
||||
}
|
||||
|
||||
ISR(INT3_vect) // Arduino2560 IO18 (portD pin3)
|
||||
{
|
||||
uint8_t input = (PIND & 0x0C);
|
||||
#if defined (ROTENC_DIV2)// Rotenc resolution/2
|
||||
if (input == 0) incRotaryEncoder(1, +1);
|
||||
#else
|
||||
if (input == 0 || input == 0x0C) incRotaryEncoder(1, +1);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
|
||||
#include "../common_avr/board_avr.h"
|
||||
|
||||
|
||||
//Mods for futur use ? Beta tester love it
|
||||
//#define ROTENC_DIV2 // rotenc resolution/2
|
||||
|
||||
// Keys
|
||||
#define KEYS_GPIO_REG_MENU pinl
|
||||
#define KEYS_GPIO_PIN_MENU (1<<4)
|
||||
@@ -95,21 +99,21 @@ void sdPoll10ms(void);
|
||||
|
||||
// Servitudes driver
|
||||
#define INP_E_PPM_IN 7 //not used (reserved)
|
||||
#define INP_B_14DBUSY 7 //somo14d, not used (reserved)
|
||||
#define INP_B_WTV_BUSY 7 //WTV20SD, not used (reserved)
|
||||
#define OUT_B_PPM 6
|
||||
#define OUT_B_SIM_CTL 5
|
||||
#define OUT_B_BUZZER 4
|
||||
#define INP_D_I2C_SCL 1
|
||||
#define INP_D_I2C_SDA 0
|
||||
#define OUT_E_14DDATA 3 //somo14d
|
||||
#define OUT_E_WTV_DATA 3 //WTV20SD
|
||||
#define INP_E_TELEM_RX 1
|
||||
#define OUT_E_TELEM_TX 0
|
||||
#define OUT_G_14DCLK 5 //somo14d
|
||||
#define OUT_G_WTV_CLK 5 //WTV20SD
|
||||
#define INP_H_RF_Activated 6
|
||||
#define INP_H_DSC_Activated 5 //not used, reserved for pwrCheck()
|
||||
#define INP_H_Hold_Power 4 //not used, reserved for pwrCheck()
|
||||
#define OUT_H_Speaker 3
|
||||
#define OUT_H_14DRESET 1 //somo14d
|
||||
#define OUT_H_WTV_RESET 1 //WTV20SD
|
||||
#define OUT_H_HAPTIC 0
|
||||
|
||||
// Rotary encoders driver
|
||||
@@ -127,7 +131,7 @@ void sdPoll10ms(void);
|
||||
#define PORTA_LCD_DAT PORTA
|
||||
#define PORTC_LCD_CTRL PORTC
|
||||
#if defined(LCD_KS108) // (For KS108 LCd only) MEGA R/W pin always at 0 state in Opentx then
|
||||
#define OUT_C_LCD_CS2 6 //Use this pin to control second KS108
|
||||
#define OUT_C_LCD_CS2 6 // Use this pin to control second KS108
|
||||
#else // And connect LCD R/W pin to ground via a 1k resistor
|
||||
#define OUT_C_LCD_RnW 6
|
||||
#endif
|
||||
@@ -168,12 +172,12 @@ void pwrOff();
|
||||
|
||||
// Voice driver
|
||||
#if defined(VOICE)
|
||||
#define WTV20SD_Clock_on PORTG |= (1<<OUT_G_14DCLK)
|
||||
#define WTV20SD_Clock_off PORTG &= ~(1<<OUT_G_14DCLK)
|
||||
#define WTV20SD_Data_on PORTE |= (1<<OUT_E_14DDATA)
|
||||
#define WTV20SD_Data_off PORTE &= ~(1<<OUT_E_14DDATA)
|
||||
#define WTV20SD_Reset_on PORTH |= (1<<OUT_H_14DRESET)
|
||||
#define WTV20SD_Reset_off PORTH &= ~(1<<OUT_H_14DRESET)
|
||||
#define WTV20SD_Clock_on PORTG |= (1<<OUT_G_WTV_CLK)
|
||||
#define WTV20SD_Clock_off PORTG &= ~(1<<OUT_G_WTV_CLK)
|
||||
#define WTV20SD_Data_on PORTE |= (1<<OUT_E_WTV_DATA)
|
||||
#define WTV20SD_Data_off PORTE &= ~(1<<OUT_E_WTV_DATA)
|
||||
#define WTV20SD_Reset_on PORTH |= (1<<OUT_H_WTV_RESET)
|
||||
#define WTV20SD_Reset_off PORTH &= ~(1<<OUT_H_WTV_RESET)
|
||||
#define WTV20SD_BUSY (PINB & 0x80)
|
||||
#define WTV20SD_CLK (PING & 0x20)
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user