#define F_CPU (4800000uL / 1)

#include <stdint.h>
#include <util/delay.h>
#include <avr/io.h>
#include <avr/pgmspace.h>

int main();
void setup();

void delay_ms(uint8_t ms);


//////////////////////////////////////////////////////////////////////////////
// I2C
//////////////////////////////////////////////////////////////////////////////
#define i2c_delay() asm volatile("nop \n nop \n")

// set SCL/SDA
inline void i2c_scl_0(){ DDRB |= (1<<PB1); }
inline void i2c_scl_1(){ DDRB &= ~(1<<PB1); }
inline void i2c_sda_0(){ DDRB |= (1<<PB0); }
inline void i2c_sda_1(){ DDRB &= ~(1<<PB0); }

void i2c_start();
void i2c_stop();
void i2c_wr_u8(uint8_t b);

#define OLED_128X32
#define OLED_SH1106
#define OLED_ADDR  0x78
#define OLED_SHIFT 0
#define OLED_WIDTH 128  // SSD1306 width
//#define OLED_WIDTH 132  // SH1106 width
#define OLED_CONTR 0xEF // contrast
void oled_init();
void oled_clr();
void oled_goto(uint8_t x, uint8_t y);
void oled_c(uint8_t c);


//////////////////////////////////////////////////////////////////////////////
// ADC
//////////////////////////////////////////////////////////////////////////////
#define ADC_DELAY 100   // update period, ms
#define ADC_REF   5000  // ADC reference (VCC), mV
#define ADC_CHNS  4     // number of ADC channels
#define ADC_AVG_BITS 4
#define ADC_AVG   (1 << ADC_AVG_BITS) // ADC averaging counts
struct adc_struct{
	uint8_t cnt,chn;//, p[ADC_CHNS];
	uint16_t raw[ADC_CHNS],cur[ADC_CHNS];//, u[ADC_CHNS];
}adc;

