
Hello code for "Switch Science mbed LPC824"
Fork of SwitchSciencembedLPC824_test by
Revision 9:e2333773718f, committed 2014-12-18
- Comitter:
- asagin
- Date:
- Thu Dec 18 03:20:52 2014 +0000
- Parent:
- 8:d01c24c1223c
- Child:
- 10:e508d79a907f
- Commit message:
- Erased comment
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/I2cBusDevice.h Thu Dec 18 03:20:52 2014 +0000 @@ -0,0 +1,58 @@ +/* + * I2C device base class + * + * A base class for all I2C devices. + * This manages the device address and transfers + * + * Copyright (c) 2010 Tedd OKANO + * Released under the MIT License: http://mbed.org/license/mit + * + * revision 1.0 15-Jan-2010 a. 1st release + * revision 1.1 23-Jan-2010 a. The word "MBED_I2cBusDevice" is used instead of _I2cBusDevice_ to avoid symbol conflict + * b. copyright notice added + */ + +#ifndef MBED_I2cBusDevice +#define MBED_I2cBusDevice + +#include "mbed.h" + +class I2cBusDevice { +public: + + I2cBusDevice( I2C *i2c, char dev_address ) { + bus = i2c; + device = dev_address; + } + + ~I2cBusDevice() { + } + + int write( char *data, int length ) { + return ( bus->write( device, data, length) ); + } + + int read( char *data, int length ) { + return ( bus->read( device, data, length) ); + } + + int read( char reg_ptr, char *data, int length ) { + if ( bus->write( device, ®_ptr, 1 ) ) + return ( 1 ); + + if ( bus->read( device, data, length ) ) + return ( 1 ); + + return ( 0 ); + } + +protected: + I2C *bus; + char device; + +private: + static char i2c_error; +} +; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TempSensor_LM75B.h Thu Dec 18 03:20:52 2014 +0000 @@ -0,0 +1,94 @@ +/* + * I2C digital temperature sensor "LM75B" library + * + * LM75B is an I2C based digital temperature sensor + * http://www.nxp.com/pip/LM75B_2.html + * + * This is a library to operate this chip easy. + * + * Copyright (c) 2010 Tedd OKANO + * Released under the MIT License: http://mbed.org/license/mit + * + * revision 1.0 16-Jan-2010 a. 1st release + * revision 1.1 23-Jan-2010 a. class name has been changed from LM75B to TempSensor_LM75B + * b. copyright notice added + */ + +#ifndef MBED_TempSensor_LM75B +#define MBED_TempSensor_LM75B + + +#include "mbed.h" +#include "I2cBusDevice.h" + + +// LM75B IIC address +const char LM75B_base_addr = 0x90; + +// LM75B registers +const char Conf = 0x01; +const char Temp = 0x00; +const char Tos = 0x03; +const char Thyst = 0x02; + + +class TempSensor_LM75B : I2cBusDevice { +public: + + TempSensor_LM75B( I2C *i2c, char dev_address = LM75B_base_addr, char vConf = 0x00, short vTos = 0x5000, short vThyst = 0x4B00 ) : I2cBusDevice( i2c, dev_address ) { + char data[ 3 ]; + + data[ 0 ] = Conf; + data[ 1 ] = vConf; + + if ( write( data, 2 ) ) + ; + + data[ 0 ] = Tos; + data[ 1 ] = (char)(vTos >> 8); + data[ 2 ] = (char)vTos; + + if ( write( data, 3 ) ) + ; + + data[ 0 ] = Thyst; + data[ 1 ] = (char)(vThyst >> 8); + data[ 2 ] = (char)vThyst; + + if ( write( data, 3 ) ) + ; + } + + ~TempSensor_LM75B() { + } + + int temp_short( void ) { + char data[ 2 ]; + + if ( read( Temp, data, 2 ) ) + return ( 1e6 ); + + return ( (((short)data[ 0 ]) << 8 | data[ 1 ]) >> 5 ); + } + + float temp( void ) { + return ( (float)(temp_short()) / 8.0 ); + } + + operator float( void ) { + return( temp() ); + } + +#if 0 + operator short( void ) { + return( temp_short() ); + } +#endif + + + +private: +} +; + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD_SB1602E.h Thu Dec 18 03:20:52 2014 +0000 @@ -0,0 +1,239 @@ +/* + * LCD module "SB1602E" library + * + * SB1602E is an I2C based low voltage text LCD panel (based Sitronix ST7032 chip) + * The module by StrawberryLinux + * http://strawberry-linux.com/catalog/items?code=27002 (Online shop page (Japanese)) + * http://strawberry-linux.com/pub/ST7032i.pdf (datasheet of the chip) + * + * This is a library to operate this module easy. + * + * Copyright (c) 2010 Tedd OKANO + * Released under the MIT License: http://mbed.org/license/mit + * + * revision 1.0 22-Jan-2010 a. 1st release + * revision 1.1 23-Jan-2010 a. class name has been changed from lcd_SB1602E to TextLCD_SB1602E + * b. printf() added + * c. copyright notice added + */ + +#ifndef MBED_TextLCD_SB1602E +#define MBED_TextLCD_SB1602E + +#include <stdarg.h> +#include "mbed.h" +#include "I2cBusDevice.h" + +// SB1602E IIC address + +const char SB1602E_addr = 0x7C; + +// SB1602E initialization command sequence + +#ifdef INIT_VALUE_DATASHEET_ORIGINAL + +const char Comm_FunctionSet_Normal = 0x38; +const char Comm_FunctionSet_Extended = 0x39; +const char Comm_InternalOscFrequency = 0x14; +const char Comm_ContrastSet = 0x78; +const char Comm_PwrIconContrast = 0x5E; +const char Comm_FollowerCtrl = 0x6A; +const char Comm_DisplayOnOff = 0x0C; +const char Comm_ClearDisplay = 0x01; +const char Comm_EntryModeSet = 0x06; + +#else + +const char Comm_FunctionSet_Normal = 0x38; +const char Comm_FunctionSet_Extended = 0x39; +const char Comm_InternalOscFrequency = 0x14; +const char Comm_ContrastSet = 0x70; +const char Comm_PwrIconContrast = 0x5C; +const char Comm_FollowerCtrl = 0x60; +const char Comm_DisplayOnOff = 0x0C; +const char Comm_ClearDisplay = 0x01; +const char Comm_EntryModeSet = 0x04; +const char Comm_ReturnHome = 0x02; + +#endif + +// SB1602E general commands + +const char Comm_SetDDRAMAddress = 0x80; +const char DDRAMAddress_Ofst[] = { 0x00, 0x40 }; + +const char Comm_SetCGRAM = 0x40; + +// SB1602E setting values + +const char default_Contrast = 0x35; + +const char COMMAND = 0x00; +const char DATA = 0x40; + +const char MaxCharsInALine = 0x10; // buffer deoth for one line (no scroll function used) + +const char init_seq0_length = 7; +const char init_seq0[ init_seq0_length ] += { + Comm_FunctionSet_Normal, + Comm_ReturnHome, // This may be required to reset the scroll function + Comm_FunctionSet_Extended, + Comm_InternalOscFrequency, + Comm_ContrastSet | ( default_Contrast & 0xF), + Comm_PwrIconContrast | ((default_Contrast >> 4) & 0x3), + Comm_FollowerCtrl | 0x0A, + +}; +// required 30us interval + +const char init_seq1_length = 3; +const char init_seq1[ init_seq1_length ] += { + Comm_DisplayOnOff, + Comm_ClearDisplay, + Comm_EntryModeSet, +}; +// required 30us, 2ms interval + + +class TextLCD_SB1602E : I2cBusDevice { +public: + + explicit TextLCD_SB1602E( I2C *i2c, char dev_address = SB1602E_addr, char *init_massage = NULL ) : I2cBusDevice( i2c, dev_address ) { + wait( 0.04 ); // interval after hardware reset + + for ( int i = 0; i < init_seq0_length; i++ ) { + lcd_command( init_seq0[ i ] ); + wait( 30e-6 ); + } + + wait( 0.2 ); + + for ( int i = 0; i < init_seq1_length; i++ ) { + lcd_command( init_seq1[ i ] ); + wait( 2e-3 ); + } + + if ( init_massage ) + puts( 0, init_massage ); + + set_CGRAM( 7, '\x1F' ); + + curs[ 0 ] = 0; + curs[ 1 ] = 0; + } + + + ~TextLCD_SB1602E() { + } + + void clear( void ) { + lcd_command( Comm_ClearDisplay ); + wait( 2e-3 ); + curs[ 0 ] = 0; + curs[ 1 ] = 0; + } + + + void put_custom_char( char c_code, const char *cg, char x, char y ) { + for ( int i = 0; i < 5; i++ ) { + set_CGRAM( c_code, cg ); + putcxy( c_code, x, y ); + } + } + + void contrast( char contrast ) { + lcd_command( Comm_FunctionSet_Extended ); + lcd_command( Comm_ContrastSet | (contrast & 0x0f) ); + lcd_command( Comm_PwrIconContrast | ((contrast>>4) & 0x03) ); + lcd_command( Comm_FunctionSet_Normal ); + } + + void set_CGRAM( char char_code, const char* cg ) { + for ( int i = 0; i < 8; i++ ) { + lcd_command( (Comm_SetCGRAM | (char_code << 3) | i) ); + lcd_data( *cg++ ); + } + } + + void set_CGRAM( char char_code, char v ) { + char c[ 8 ]; + + for ( int i = 0; i < 8; i++ ) + c[ i ] = v; + + set_CGRAM( char_code, c ); + } + + void putcxy( char c, char x, char y ) { + if ( (x >= MaxCharsInALine) || (y >= 2) ) + return; + + lcd_command( (Comm_SetDDRAMAddress | DDRAMAddress_Ofst[ y ]) + x ); + lcd_data( c ); + } + + void putc( char line, char c ) { + if ( (c == '\n') || (c == '\r') ) { + clear_lest_of_line( line ); + curs[ line ] = 0; + return; + } + + putcxy( c, curs[ line ]++, line ); + } + + void puts( char line, char *s ) { + while ( char c = *s++ ) + putc( line, c ); + } + + void printf( char line, char *format, ... ) { + char s[ 32 ]; + va_list args; + + va_start( args, format ); + vsnprintf( s, 32, format, args ); + va_end( args ); + + puts( line, s ); + } + +private: + char curs[2]; + + void clear_lest_of_line( char line ) { + for ( int i = curs[ line ]; i < MaxCharsInALine; i++ ) + putcxy( ' ', i, line ); + } + + int lcd_write( char first, char second ) { + char cmd[2]; + + cmd[ 0 ] = first; + cmd[ 1 ] = second; + + return ( write( cmd, 2 ) ); + + } + + int lcd_command( char command ) { + return ( lcd_write( COMMAND, command ) ); + } + + int lcd_data( char data ) { + return ( lcd_write( DATA, data ) ); + } +} +; + +#endif + + + + + + + +
--- a/main.cpp Mon Nov 03 00:48:14 2014 +0000 +++ b/main.cpp Thu Dec 18 03:20:52 2014 +0000 @@ -1,25 +1,37 @@ /** Hello code for "test_LM75B" */ #include "mbed.h" -#include "test_LM75B.h" +#include "TempSensor_LM75B.h" +#include "TextLCD_SB1602E.h" + +#define TEST_LOOP 1 +#define DEFAULT_TIME_INTERVAL 1.0 +#define DEFAULT_TIME_INTERVAL_PUTx 0.2 -test_LM75B temp0( p28, p27 ); +#define CONTRAST_ADJUST_TEST +#define PRINTF_TEST +#define CGRAM_FUNCTION_TEST +#define PUTS_TEST_WITH_ESCAPE +#define PUTS_TEST_WITHOUT_ESCAPE +#define PUTC_TEST -I2C i2c( p28, p27 ); -test_LM75B temp1( i2c ); + +I2C i2c( dp4, dp5 ); // sda, scl +TempSensor_LM75B thermo_sensor_0( &i2c ); +TextLCD_SB1602E lcd( &i2c ); //sda,,scl 液晶 + +/*デバッグ用*/ +//Serial pc( USBTX, USBRX ); // tx, rx int main() { - float t0; - float t1; - - i2c.frequency( 400 * 1000 ); - - while(1) { - t0 = temp0; - t1 = temp1; - printf( "temp = %7.3f, %7.3f\r\n", t0, t1 ); + int i = 0; + /*デバッグ用*/ +// pc.printf("test\r\n"); + while (1) { + pc.printf( " (%d) sensor_0= %4.1f\r\n", i++, (float)thermo_sensor_0 ); + lcd.printf(0,"temp=\n"); + lcd.printf(1,"%4.1f\n",(float)thermo_sensor_0); wait( 1 ); } -}
--- a/test_LM75B.lib Mon Nov 03 00:48:14 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://developer.mbed.org/users/okano/code/test_LM75B/#ab79d1157026