From 1fc729f8cef48afb2c83ea96bf42d75e23c4226b Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Thu, 20 May 2021 21:04:26 +0200 Subject: [PATCH] delete old files --- adc.c | 65 -------- adc.h | 12 -- buffer.c | 42 ------ buffer.h | 16 -- i2c.c | 34 ++--- i2c.h | 42 +++--- i2cmaster.h | 178 ---------------------- lcd.c | 162 ++++++++++---------- lcd.h | 14 +- lcdpcf8574.c | 479 ----------------------------------------------------------- lcdpcf8574.h | 223 ---------------------------- pcf8574.c | 161 -------------------- pcf8574.h | 39 ----- pid.c | 34 ----- pid.h | 14 -- twimaster.c | 202 ------------------------- 16 files changed, 126 insertions(+), 1591 deletions(-) delete mode 100644 adc.c delete mode 100644 adc.h delete mode 100644 buffer.c delete mode 100644 buffer.h delete mode 100644 i2cmaster.h delete mode 100644 lcdpcf8574.c delete mode 100644 lcdpcf8574.h delete mode 100644 pcf8574.c delete mode 100644 pcf8574.h delete mode 100644 pid.c delete mode 100644 pid.h delete mode 100644 twimaster.c diff --git a/adc.c b/adc.c deleted file mode 100644 index db0c476..0000000 --- a/adc.c +++ /dev/null @@ -1,65 +0,0 @@ -#include -#include - -#include "adc.h" -#include "buffer.h" - -volatile buffer_t adc_buf[4]; -volatile float adc_avrg[4]; - - -void initADC() -{ - ADMUX = 1 << REFS0 | 0 << REFS1; //Select external Vref - - //ADC Status Register A - ADCSRA = 1 << ADEN //Enable ADC - | 1 << ADIE //Enable ISR after conversion complete - //| 1< - -#include "buffer.h" - -void insert_to_buffer(uint16_t val, volatile buffer_t* buf){ - ATOMIC_BLOCK(ATOMIC_FORCEON){ - buf->position++; - if(buf->position == BUFFER_SIZE) - buf->position = 0; - buf->values[buf->position] = val; - } -} - -float get_buffer_mean(volatile buffer_t* buf){ - - ///* discard lowest and highest value */ - //uint16_t low=0xFFFF; - //uint16_t high=0; - //uint16_t index_l = 0; - //uint16_t index_h = 0; - //for(uint16_t i=0; ivalues[i] < low){ - // low=buf->values[i]; - // index_l = i; - // } - // if(buf->values[i] > high){ - // high=buf->values[i]; - // index_h = i; - // } - //} - - - uint32_t sum = 0; - for(uint16_t i=0; ivalues[i]; - } - - uint16_t res = sum/(BUFFER_SIZE/*-2*/); - return res; -} diff --git a/buffer.h b/buffer.h deleted file mode 100644 index d2e4399..0000000 --- a/buffer.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _BUFFER_H_ -#define _BUFFER_H_ - -#include - -#define BUFFER_SIZE 200 - -typedef struct { - uint16_t values[BUFFER_SIZE]; - uint16_t position; -} buffer_t; - -void insert_to_buffer(uint16_t val, volatile buffer_t* buf); -float get_buffer_mean(volatile buffer_t* buf); - -#endif//_BUFFER_H_ diff --git a/i2c.c b/i2c.c index b484b73..2e758b2 100644 --- a/i2c.c +++ b/i2c.c @@ -1,9 +1,9 @@ -/* - * i2c.c - * - * Created: 20.01.2018 12:50:54 - * Author: Ulrich - */ +/* + * i2c.c + * + * Created: 20.01.2018 12:50:54 + * Author: Ulrich + */ #include "i2c.h" @@ -41,17 +41,17 @@ uint8_t i2c_byte (uint8_t byte){ if((timeout++) > 1000) return 1; } return 0; -} - -//*************************************************************************************** -uint8_t i2c_readNak(void) -{ - uint16_t timeout = 0; - TWCR = (1< 1000) return 0; - } - return TWDR; +} + +//*************************************************************************************** +uint8_t i2c_readNak(void) +{ + uint16_t timeout = 0; + TWCR = (1< 1000) return 0; + } + return TWDR; } //*************************************************************************************** diff --git a/i2c.h b/i2c.h index 5ee4a34..9776d83 100644 --- a/i2c.h +++ b/i2c.h @@ -1,26 +1,26 @@ -/* - * i2c.h - * - * Created: 20.01.2018 12:51:11 - * Author: Ulrich - */ - -#ifndef I2C_H_ - #define I2C_H_ - - #include - #include - +/* + * i2c.h + * + * Created: 20.01.2018 12:51:11 + * Author: Ulrich + */ + +#ifndef I2C_H_ + #define I2C_H_ + + #include + #include + //I2C #define SDA_PIN PC4 //PIN am Atmel #define SCL_PIN PC5 //PIN am Atmel #define I2C_PORT PORTC //PORT am Atmel - #define SCL_CLOCK 100000UL - - void i2c_init(void); - uint8_t i2c_start (uint8_t); - uint8_t i2c_byte (uint8_t); - uint8_t i2c_readNak(void); - void i2c_stop (void); - + #define SCL_CLOCK 100000UL + + void i2c_init(void); + uint8_t i2c_start (uint8_t); + uint8_t i2c_byte (uint8_t); + uint8_t i2c_readNak(void); + void i2c_stop (void); + #endif /* I2C_H_ */ \ No newline at end of file diff --git a/i2cmaster.h b/i2cmaster.h deleted file mode 100644 index 7c39cef..0000000 --- a/i2cmaster.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef _I2CMASTER_H -#define _I2CMASTER_H -/************************************************************************* -* Title: C include file for the I2C master interface -* (i2cmaster.S or twimaster.c) -* Author: Peter Fleury -* File: $Id: i2cmaster.h,v 1.12 2015/09/16 09:27:58 peter Exp $ -* Software: AVR-GCC 4.x -* Target: any AVR device -* Usage: see Doxygen manual -**************************************************************************/ - -/** - @file - @defgroup pfleury_ic2master I2C Master library - @code #include @endcode - - @brief I2C (TWI) Master Software Library - - Basic routines for communicating with I2C slave devices. This single master - implementation is limited to one bus master on the I2C bus. - - This I2c library is implemented as a compact assembler software implementation of the I2C protocol - which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). - Since the API for these two implementations is exactly the same, an application can be linked either against the - software I2C implementation or the hardware I2C implementation. - - Use 4.7k pull-up resistor on the SDA and SCL pin. - - Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module - i2cmaster.S to your target when using the software I2C implementation ! - - Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion. - - @note - The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted - to GNU assembler and AVR-GCC C call interface. - Replaced the incorrect quarter period delays found in AVR300 with - half period delays. - - @author Peter Fleury pfleury@gmx.ch http://tinyurl.com/peterfleury - @copyright (C) 2015 Peter Fleury, GNU General Public License Version 3 - - @par API Usage Example - The following code shows typical usage of this library, see example test_i2cmaster.c - - @code - - #include - - - #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet - - int main(void) - { - unsigned char ret; - - i2c_init(); // initialize I2C library - - // write 0x75 to EEPROM address 5 (Byte Write) - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - i2c_write(0x05); // write address = 5 - i2c_write(0x75); // write value 0x75 to EEPROM - i2c_stop(); // set stop conditon = release bus - - - // read previously written value back from EEPROM address 5 - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - - i2c_write(0x05); // write address = 5 - i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode - - ret = i2c_readNak(); // read one byte from EEPROM - i2c_stop(); - - for(;;); - } - @endcode - -*/ - - -/**@{*/ - -#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 -#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" -#endif - -#include - -/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_READ 1 - -/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_WRITE 0 - - -/** - @brief initialize the I2C master interace. Need to be called only once - @return none - */ -extern void i2c_init(void); - - -/** - @brief Terminates the data transfer and releases the I2C bus - @return none - */ -extern void i2c_stop(void); - - -/** - @brief Issues a start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_start(unsigned char addr); - - -/** - @brief Issues a repeated start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_rep_start(unsigned char addr); - - -/** - @brief Issues a start condition and sends address and transfer direction - - If device is busy, use ack polling to wait until device ready - @param addr address and transfer direction of I2C device - @return none - */ -extern void i2c_start_wait(unsigned char addr); - - -/** - @brief Send one byte to I2C device - @param data byte to be transfered - @retval 0 write successful - @retval 1 write failed - */ -extern unsigned char i2c_write(unsigned char data); - - -/** - @brief read one byte from the I2C device, request more data from device - @return byte read from I2C device - */ -extern unsigned char i2c_readAck(void); - -/** - @brief read one byte from the I2C device, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_readNak(void); - -/** - @brief read one byte from the I2C device - - Implemented as a macro, which calls either @ref i2c_readAck or @ref i2c_readNak - - @param ack 1 send ack, request more data from device
- 0 send nak, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_read(unsigned char ack); -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); - - - -/**@}*/ -#endif diff --git a/lcd.c b/lcd.c index 15d2f49..c0b3728 100644 --- a/lcd.c +++ b/lcd.c @@ -1,8 +1,8 @@ -/* - * lcd.c - * - * Created: 20.01.2018 12:51:11 - * Author: Ulrich +/* + * lcd.c + * + * Created: 20.01.2018 12:51:11 + * Author: Ulrich */ #include "lcd.h" @@ -108,80 +108,80 @@ void lcd_print_str(char *str) { } } -//*************************************************************************************** -void lcd_write_P (const char *Buffer,...) -{ - va_list ap; - va_start (ap, Buffer); - - int format_flag; - char str_buffer[10]; - char str_null_buffer[10]; - char move = 0; - char Base = 0; - int tmp = 0; - char by; - char *ptr; - - //Ausgabe der Zeichen - for(;;){ - by = pgm_read_byte(Buffer++); - if(by==0) break; // end of format string - - if (by == '%'){ - by = pgm_read_byte(Buffer++); - if (isdigit(by)>0){ - str_null_buffer[0] = by; - str_null_buffer[1] = '\0'; - move = atoi(str_null_buffer); - by = pgm_read_byte(Buffer++); - } - - switch (by){ - case 's': - ptr = va_arg(ap,char *); - while(*ptr) { lcd_write_char(*ptr++); } - break; - case 'b': - Base = 2; - goto ConversionLoop; - case 'c': - //Int to char - format_flag = va_arg(ap,int); - lcd_write_char (format_flag++); - break; - case 'i': - Base = 10; - goto ConversionLoop; - case 'o': - Base = 8; - goto ConversionLoop; - case 'x': - Base = 16; - //**************************** - ConversionLoop: - //**************************** - itoa(va_arg(ap,int),str_buffer,Base); - int b=0; - while (str_buffer[b++] != 0){}; - b--; - if (b0){ + str_null_buffer[0] = by; + str_null_buffer[1] = '\0'; + move = atoi(str_null_buffer); + by = pgm_read_byte(Buffer++); + } + + switch (by){ + case 's': + ptr = va_arg(ap,char *); + while(*ptr) { lcd_write_char(*ptr++); } + break; + case 'b': + Base = 2; + goto ConversionLoop; + case 'c': + //Int to char + format_flag = va_arg(ap,int); + lcd_write_char (format_flag++); + break; + case 'i': + Base = 10; + goto ConversionLoop; + case 'o': + Base = 8; + goto ConversionLoop; + case 'x': + Base = 16; + //**************************** + ConversionLoop: + //**************************** + itoa(va_arg(ap,int),str_buffer,Base); + int b=0; + while (str_buffer[b++] != 0){}; + b--; + if (b #include #include - #include - #include + #include + #include #include #include #include diff --git a/lcdpcf8574.c b/lcdpcf8574.c deleted file mode 100644 index 70073c1..0000000 --- a/lcdpcf8574.c +++ /dev/null @@ -1,479 +0,0 @@ -/* -lcdpcf8574 lib 0x03 - -copyright (c) Davide Gironi, 2013 - -Released under GPLv3. -Please refer to LICENSE file for licensing information. -*/ - -#include -#include -#include - -#include "pcf8574.h" -#include "lcdpcf8574.h" - -#define lcd_e_delay() __asm__ __volatile__( "rjmp 1f\n 1:" ); -#define lcd_e_toggle() toggle_e() - -#if LCD_LINES==1 -#define LCD_FUNCTION_DEFAULT LCD_FUNCTION_4BIT_1LINE -#else -#define LCD_FUNCTION_DEFAULT LCD_FUNCTION_4BIT_2LINES -#endif - -volatile uint8_t dataport = 0; - -/* -** function prototypes -*/ -static void toggle_e(void); - -/* -** local functions -*/ - - - -/************************************************************************* - delay loop for small accurate delays: 16-bit counter, 4 cycles/loop -*************************************************************************/ -static inline void _delayFourCycles(unsigned int __count) -{ - if ( __count == 0 ) - __asm__ __volatile__( "rjmp 1f\n 1:" ); // 2 cycles - else - __asm__ __volatile__ ( - "1: sbiw %0,1" "\n\t" - "brne 1b" // 4 cycles/loop - : "=w" (__count) - : "0" (__count) - ); -} - - -/************************************************************************* -delay for a minimum of microseconds -the number of loops is calculated at compile-time from MCU clock frequency -*************************************************************************/ -#define delay(us) _delayFourCycles( ( ( 1*(F_CPU/4000) )*us)/1000 ) - - -/* toggle Enable Pin to initiate write */ -static void toggle_e(void) -{ - pcf8574_setoutputpinhigh(LCD_PCF8574_DEVICEID, LCD_E_PIN); - lcd_e_delay(); - pcf8574_setoutputpinlow(LCD_PCF8574_DEVICEID, LCD_E_PIN); -} - - -/************************************************************************* -Low-level function to write byte to LCD controller -Input: data byte to write to LCD - rs 1: write data - 0: write instruction -Returns: none -*************************************************************************/ -static void lcd_write(uint8_t data,uint8_t rs) -{ - if (rs) /* write data (RS=1, RW=0) */ - dataport |= _BV(LCD_RS_PIN); - else /* write instruction (RS=0, RW=0) */ - dataport &= ~_BV(LCD_RS_PIN); - dataport &= ~_BV(LCD_RW_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - - /* output high nibble first */ - dataport &= ~_BV(LCD_DATA3_PIN); - dataport &= ~_BV(LCD_DATA2_PIN); - dataport &= ~_BV(LCD_DATA1_PIN); - dataport &= ~_BV(LCD_DATA0_PIN); - if(data & 0x80) dataport |= _BV(LCD_DATA3_PIN); - if(data & 0x40) dataport |= _BV(LCD_DATA2_PIN); - if(data & 0x20) dataport |= _BV(LCD_DATA1_PIN); - if(data & 0x10) dataport |= _BV(LCD_DATA0_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - lcd_e_toggle(); - - /* output low nibble */ - dataport &= ~_BV(LCD_DATA3_PIN); - dataport &= ~_BV(LCD_DATA2_PIN); - dataport &= ~_BV(LCD_DATA1_PIN); - dataport &= ~_BV(LCD_DATA0_PIN); - if(data & 0x08) dataport |= _BV(LCD_DATA3_PIN); - if(data & 0x04) dataport |= _BV(LCD_DATA2_PIN); - if(data & 0x02) dataport |= _BV(LCD_DATA1_PIN); - if(data & 0x01) dataport |= _BV(LCD_DATA0_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - lcd_e_toggle(); - - /* all data pins high (inactive) */ - dataport |= _BV(LCD_DATA0_PIN); - dataport |= _BV(LCD_DATA1_PIN); - dataport |= _BV(LCD_DATA2_PIN); - dataport |= _BV(LCD_DATA3_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); -} - - -/************************************************************************* -Low-level function to read byte from LCD controller -Input: rs 1: read data - 0: read busy flag / address counter -Returns: byte read from LCD controller -*************************************************************************/ -static uint8_t lcd_read(uint8_t rs) -{ - uint8_t data; - - if (rs) /* write data (RS=1, RW=0) */ - dataport |= _BV(LCD_RS_PIN); - else /* write instruction (RS=0, RW=0) */ - dataport &= ~_BV(LCD_RS_PIN); - dataport |= _BV(LCD_RW_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - - /* read high nibble first */ - pcf8574_setoutputpinhigh(LCD_PCF8574_DEVICEID, LCD_E_PIN); - lcd_e_delay(); - data = 0; - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA0_PIN)) data |= 0x10; - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA1_PIN)) data |= 0x20; - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA2_PIN)) data |= 0x40; - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA3_PIN)) data |= 0x80; - pcf8574_setoutputpinlow(LCD_PCF8574_DEVICEID, LCD_E_PIN); - - /* Enable 500ns low */ - lcd_e_delay(); - - /* read low nibble */ - pcf8574_setoutputpinhigh(LCD_PCF8574_DEVICEID, LCD_E_PIN); - lcd_e_delay(); - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA0_PIN)) data |= 0x01; - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA1_PIN)) data |= 0x02; - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA2_PIN)) data |= 0x04; - if(!pcf8574_getinputpin(LCD_PCF8574_DEVICEID, LCD_DATA3_PIN)) data |= 0x08; - pcf8574_setoutputpinlow(LCD_PCF8574_DEVICEID, LCD_E_PIN); - - return data; -} - - -/************************************************************************* -loops while lcd is busy, returns address counter -*************************************************************************/ -static uint8_t lcd_waitbusy(void) -{ - register uint8_t c; - - /* wait until busy flag is cleared */ - while ( (c=lcd_read(0)) & (1<= LCD_START_LINE2) && (pos < LCD_START_LINE4) ) - addressCounter = LCD_START_LINE3; - else if ( (pos >= LCD_START_LINE3) && (pos < LCD_START_LINE2) ) - addressCounter = LCD_START_LINE4; - else - addressCounter = LCD_START_LINE1; -#endif - lcd_command((1< 7) { - return 1; - } - lcd_command((1 << LCD_CGRAM) + charnum * 8); // set CGRAM address charnum * 8 byte - for (; j < 8; j++) { - lcd_putc (*(p + j)); // write 8 byte data (one character) to CGRAM - } - return (0); -} - - -/************************************************************************* -Set cursor to specified position -Input: x horizontal position (0: left most position) - y vertical position (0: first line) -Returns: none -*************************************************************************/ -void lcd_gotoxy(uint8_t x, uint8_t y) -{ -#if LCD_LINES==1 - lcd_command((1<>4; - dataport |= _BV(LCD_DATA0_PIN); // _BV(LCD_FUNCTION_8BIT)>>4; - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - - lcd_e_toggle(); - delay(4992); /* delay, busy flag can't be checked here */ - - /* repeat last command */ - lcd_e_toggle(); - delay(64); /* delay, busy flag can't be checked here */ - - /* repeat last command a third time */ - lcd_e_toggle(); - delay(64); /* delay, busy flag can't be checked here */ - - /* now configure for 4bit mode */ - dataport &= ~_BV(LCD_DATA0_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - lcd_e_toggle(); - delay(64); /* some displays need this additional delay */ - - /* from now the LCD only accepts 4 bit I/O, we can use lcd_command() */ - - lcd_command(LCD_FUNCTION_DEFAULT); /* function set: display lines */ - - lcd_command(LCD_DISP_OFF); /* display off */ - lcd_clrscr(); /* display clear */ - lcd_command(LCD_MODE_DEFAULT); /* set entry mode */ - lcd_command(dispAttr); /* display/cursor control */ - -}/* lcd_init */ diff --git a/lcdpcf8574.h b/lcdpcf8574.h deleted file mode 100644 index 192fbdd..0000000 --- a/lcdpcf8574.h +++ /dev/null @@ -1,223 +0,0 @@ -/* -lcdpcf8574 lib 0x03 - -copyright (c) Davide Gironi, 2013 - -Released under GPLv3. -Please refer to LICENSE file for licensing information. - -References: - + based on lcd library by Peter Fleury - http://jump.to/fleury - + CGRAM functions by Péter Papp -*/ - - -#ifndef LCD_H -#define LCD_H - -#include -#include - -#define LCD_PCF8574_INIT 1 //init pcf8574 - -#define LCD_PCF8574_DEVICEID 0 //device id, addr = pcf8574 base addr + LCD_PCF8574_DEVICEID - - -/** - * @name Definitions for Display Size - * Change these definitions to adapt setting to your display - */ -#define LCD_LINES 2 /**< number of visible lines of the display */ -#define LCD_DISP_LENGTH 16 /**< visibles characters per line of the display */ -#define LCD_LINE_LENGTH 0x40 /**< internal line length of the display */ -#define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */ -#define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */ -#define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */ -#define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */ -#define LCD_WRAP_LINES 1 /**< 0: no wrap, 1: wrap at end of visibile line */ - - - -#define LCD_DATA0_PIN 4 /**< pin for 4bit data bit 0 */ -#define LCD_DATA1_PIN 5 /**< pin for 4bit data bit 1 */ -#define LCD_DATA2_PIN 6 /**< pin for 4bit data bit 2 */ -#define LCD_DATA3_PIN 7 /**< pin for 4bit data bit 3 */ -#define LCD_RS_PIN 0 /**< pin for RS line */ -#define LCD_RW_PIN 1 /**< pin for RW line */ -#define LCD_E_PIN 2 /**< pin for Enable line */ -#define LCD_LED_PIN 3 /**< pin for Led */ - - -/** - * @name Definitions for LCD command instructions - * The constants define the various LCD controller instructions which can be passed to the - * function lcd_command(), see HD44780 data sheet for a complete description. - */ - -/* instruction register bit positions, see HD44780U data sheet */ -#define LCD_CLR 0 /* DB0: clear display */ -#define LCD_HOME 1 /* DB1: return to home position */ -#define LCD_ENTRY_MODE 2 /* DB2: set entry mode */ -#define LCD_ENTRY_INC 1 /* DB1: 1=increment, 0=decrement */ -#define LCD_ENTRY_SHIFT 0 /* DB2: 1=display shift on */ -#define LCD_ON 3 /* DB3: turn lcd/cursor on */ -#define LCD_ON_DISPLAY 2 /* DB2: turn display on */ -#define LCD_ON_CURSOR 1 /* DB1: turn cursor on */ -#define LCD_ON_BLINK 0 /* DB0: blinking cursor ? */ -#define LCD_MOVE 4 /* DB4: move cursor/display */ -#define LCD_MOVE_DISP 3 /* DB3: move display (0-> cursor) ? */ -#define LCD_MOVE_RIGHT 2 /* DB2: move right (0-> left) ? */ -#define LCD_FUNCTION 5 /* DB5: function set */ -#define LCD_FUNCTION_8BIT 4 /* DB4: set 8BIT mode (0->4BIT mode) */ -#define LCD_FUNCTION_2LINES 3 /* DB3: two lines (0->one line) */ -#define LCD_FUNCTION_10DOTS 2 /* DB2: 5x10 font (0->5x7 font) */ -#define LCD_CGRAM 6 /* DB6: set CG RAM address */ -#define LCD_DDRAM 7 /* DB7: set DD RAM address */ -#define LCD_BUSY 7 /* DB7: LCD is busy */ - -/* set entry mode: display shift on/off, dec/inc cursor move direction */ -#define LCD_ENTRY_DEC 0x04 /* display shift off, dec cursor move dir */ -#define LCD_ENTRY_DEC_SHIFT 0x05 /* display shift on, dec cursor move dir */ -#define LCD_ENTRY_INC_ 0x06 /* display shift off, inc cursor move dir */ -#define LCD_ENTRY_INC_SHIFT 0x07 /* display shift on, inc cursor move dir */ - -/* display on/off, cursor on/off, blinking char at cursor position */ -#define LCD_DISP_OFF 0x08 /* display off */ -#define LCD_DISP_ON 0x0C /* display on, cursor off */ -#define LCD_DISP_ON_BLINK 0x0D /* display on, cursor off, blink char */ -#define LCD_DISP_ON_CURSOR 0x0E /* display on, cursor on */ -#define LCD_DISP_ON_CURSOR_BLINK 0x0F /* display on, cursor on, blink char */ - -/* move cursor/shift display */ -#define LCD_MOVE_CURSOR_LEFT 0x10 /* move cursor left (decrement) */ -#define LCD_MOVE_CURSOR_RIGHT 0x14 /* move cursor right (increment) */ -#define LCD_MOVE_DISP_LEFT 0x18 /* shift display left */ -#define LCD_MOVE_DISP_RIGHT 0x1C /* shift display right */ - -/* function set: set interface data length and number of display lines */ -#define LCD_FUNCTION_4BIT_1LINE 0x20 /* 4-bit interface, single line, 5x7 dots */ -#define LCD_FUNCTION_4BIT_2LINES 0x28 /* 4-bit interface, dual line, 5x7 dots */ -#define LCD_FUNCTION_8BIT_1LINE 0x30 /* 8-bit interface, single line, 5x7 dots */ -#define LCD_FUNCTION_8BIT_2LINES 0x38 /* 8-bit interface, dual line, 5x7 dots */ - - -#define LCD_MODE_DEFAULT ((1< -#include -#include - -#include "pcf8574.h" - -//path to i2c fleury lib -#include PCF8574_I2CFLEURYPATH - -/* - * initialize - */ -void pcf8574_init() { - #if PCF8574_I2CINIT == 1 - //init i2c - i2c_init(); - _delay_us(10); - #endif - - //reset the pin status - uint8_t i = 0; - for(i=0; i= 0 && deviceid < PCF8574_MAXDEVICES)) { - data = pcf8574_pinstatus[deviceid]; - } - return data; -} - -/* - * get output pin status - */ -int8_t pcf8574_getoutputpin(uint8_t deviceid, uint8_t pin) { - int8_t data = -1; - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { - data = pcf8574_pinstatus[deviceid]; - data = (data >> pin) & 0b00000001; - } - return data; -} - -/* - * set output pins - */ -int8_t pcf8574_setoutput(uint8_t deviceid, uint8_t data) { - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES)) { - pcf8574_pinstatus[deviceid] = data; - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); - i2c_write(data); - i2c_stop(); - return 0; - } - return -1; -} - -/* - * set output pins, replace actual status of a device from pinstart for pinlength with data - */ -int8_t pcf8574_setoutputpins(uint8_t deviceid, uint8_t pinstart, uint8_t pinlength, int8_t data) { - //example: - //actual data is 0b01101110 - //want to change --- - //pinstart 4 - //data 101 (pinlength 3) - //result 0b01110110 - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pinstart - pinlength + 1 >= 0 && pinstart - pinlength + 1 >= 0 && pinstart < PCF8574_MAXPINS && pinstart > 0 && pinlength > 0)) { - uint8_t b = 0; - b = pcf8574_pinstatus[deviceid]; - uint8_t mask = ((1 << pinlength) - 1) << (pinstart - pinlength + 1); - data <<= (pinstart - pinlength + 1); - data &= mask; - b &= ~(mask); - b |= data; - pcf8574_pinstatus[deviceid] = b; - //update device - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); - i2c_write(b); - i2c_stop(); - return 0; - } - return -1; -} - -/* - * set output pin - */ -int8_t pcf8574_setoutputpin(uint8_t deviceid, uint8_t pin, uint8_t data) { - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { - uint8_t b = 0; - b = pcf8574_pinstatus[deviceid]; - b = (data != 0) ? (b | (1 << pin)) : (b & ~(1 << pin)); - pcf8574_pinstatus[deviceid] = b; - //update device - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); - i2c_write(b); - i2c_stop(); - return 0; - } - return -1; -} - -/* - * set output pin high - */ -int8_t pcf8574_setoutputpinhigh(uint8_t deviceid, uint8_t pin) { - return pcf8574_setoutputpin(deviceid, pin, 1); -} - -/* - * set output pin low - */ -int8_t pcf8574_setoutputpinlow(uint8_t deviceid, uint8_t pin) { - return pcf8574_setoutputpin(deviceid, pin, 0); -} - - -/* - * get input data - */ -int8_t pcf8574_getinput(uint8_t deviceid) { - int8_t data = -1; - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES)) { - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_READ); - data = ~i2c_readNak(); - i2c_stop(); - } - return data; -} - -/* - * get input pin (up or low) - */ -int8_t pcf8574_getinputpin(uint8_t deviceid, uint8_t pin) { - int8_t data = -1; - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { - data = pcf8574_getinput(deviceid); - if(data != -1) { - data = (data >> pin) & 0b00000001; - } - } - return data; -} - diff --git a/pcf8574.h b/pcf8574.h deleted file mode 100644 index 6b47478..0000000 --- a/pcf8574.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -pcf8574 lib 0x02 - -copyright (c) Davide Gironi, 2012 - -Released under GPLv3. -Please refer to LICENSE file for licensing information. -*/ - - -#ifndef PCF8574_H_ -#define PCF8574_H_ - -#define PCF8574_ADDRBASE (0x20) //device base address - -#define PCF8574_I2CINIT 1 //init i2c - -#define PCF8574_MAXDEVICES 1 //max devices, depends on address (3 bit) -#define PCF8574_MAXPINS 8 //max pin per device - -//settings -#define PCF8574_I2CFLEURYPATH "i2cmaster.h" //define the path to i2c fleury lib - -//pin status -volatile uint8_t pcf8574_pinstatus[PCF8574_MAXDEVICES]; - - -//functions -void pcf8574_init(); -extern int8_t pcf8574_getoutput(uint8_t deviceid); -extern int8_t pcf8574_getoutputpin(uint8_t deviceid, uint8_t pin); -extern int8_t pcf8574_setoutput(uint8_t deviceid, uint8_t data); -extern int8_t pcf8574_setoutputpins(uint8_t deviceid, uint8_t pinstart, uint8_t pinlength, int8_t data); -extern int8_t pcf8574_setoutputpin(uint8_t deviceid, uint8_t pin, uint8_t data); -extern int8_t pcf8574_setoutputpinhigh(uint8_t deviceid, uint8_t pin); -extern int8_t pcf8574_setoutputpinlow(uint8_t deviceid, uint8_t pin); -extern int8_t pcf8574_getinput(uint8_t deviceid); -extern int8_t pcf8574_getinputpin(uint8_t deviceid, uint8_t pin); -#endif diff --git a/pid.c b/pid.c deleted file mode 100644 index 76a161d..0000000 --- a/pid.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include "pid.h" - -float pid_step(volatile struct pid* controller, float dt, float error) { - //TODO convert to integer; floats cause trouble ... - - // Calculate p term - float p = error * controller->kP; - - // Calculate i term - ATOMIC_BLOCK(ATOMIC_FORCEON){ - controller->integral += error * dt * controller->kI; - if(controller->integral > 80) - controller->integral = 80; - if(controller->integral < -80) - controller->integral = -80; - } - - // Calculate d term, taking care to not divide by zero - float d = dt == 0 ? 0 : ((error - controller->lastError) / dt) * controller->kD; - controller->lastError = error; - - return p + controller->integral + d; -} - -void init_pid(volatile struct pid* controller, float p, float i, float d){ - *controller = (struct pid){ - .kP = p, - .kI = i, - .kD = d, - .lastError = 0, - .integral = 0 - }; -} diff --git a/pid.h b/pid.h deleted file mode 100644 index d7e0580..0000000 --- a/pid.h +++ /dev/null @@ -1,14 +0,0 @@ -struct pid{ - // Controller gains - float kP; - float kI; - float kD; - - // State variables - float lastError; - float integral; -}; - -float pid_step(volatile struct pid* controller, float dt, float error); -void init_pid(volatile struct pid* controller, float p, float i, float d); - diff --git a/twimaster.c b/twimaster.c deleted file mode 100644 index aff4751..0000000 --- a/twimaster.c +++ /dev/null @@ -1,202 +0,0 @@ -/************************************************************************* -* Title: I2C master library using hardware TWI interface -* Author: Peter Fleury http://jump.to/fleury -* File: $Id: twimaster.c,v 1.4 2015/01/17 12:16:05 peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 -* Target: any AVR device with hardware TWI -* Usage: API compatible with I2C Software Library i2cmaster.h -**************************************************************************/ -#include -#include - -#include "i2cmaster.h" - - -/* define CPU frequency in hz here if not defined in Makefile */ -#ifndef F_CPU -#define F_CPU 4000000UL -#endif - -/* I2C clock in Hz */ -#define SCL_CLOCK 100000L - - -/************************************************************************* - Initialization of the I2C bus interface. Need to be called only once -*************************************************************************/ -void i2c_init(void) -{ - /* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */ - - TWSR = (1< 10 for stable operation */ - -}/* i2c_init */ - - -/************************************************************************* - Issues a start condition and sends address and transfer direction. - return 0 = device accessible, 1= failed to access device -*************************************************************************/ -unsigned char i2c_start(unsigned char address) -{ - uint8_t twst; - - // send START condition - TWCR = (1<