Jump to content


  • Content Count

  • Joined

  • Last visited

  1. Hello once again I have problem with Stellaris LM4F120 Launchpad and DHT22 (connected on PB_7). I'm using LCD 5110(3,3v) + DHT22(tested on 5v+ resistor 10kOhm & 3,3v + resistor 10kOhm ) + on I2C BMP085(3,3v), TinyRTC (5v), HD44780 20x4(5v) (all on PD_0 & PD_1) When I'm using only LCD5110 + DHT22 without <Wire.h> liblary included, both are working well: When I'm using LCD5110, DHT22 + all I2C devices with <Wire.h> I get on HD44780: Also TinyRTC gives me a strange dates for example 2050/07/21 When I'm disconnecting DHT22 and running the same code as in case above, I get: So it looks like a problem with running I2C and DHT22 at the same time. -> Fixed changed connection of the I2C devices to module 1. Thanks mic
  2. Ok, Thanks. I will try to find something related to clock in LCD_5110 library (maybe SPI.setClockDivider(...) or similar ). Yesterday I focused on that the DHT22 library when is compiled alone is working properly and with LCD is not. I tested the Serial.print, Serial.println and Serial.write, when only LCD_5110 library was included. Each time there were improper chars send (on any baud rate). So I believe that should be something with the 5110 lib. /// This was a problem with code for LCD_5110 (not library but code in .ino file) when I'll rewrite and got this fully operational I'll upload it on the forum.
  3. Hello Rei Vilo, finally I was able to run my DHT22 on Stellaris Launchpad. But as usual I have some problems. When I'm uploading ported version of Your code DHT22_430_main, I receive: *** DHT22 test starts PUSH2 to end debug bits received 40 debug 2, 19, 1, 10, 2C =? 2C debug checksum ok debug RH% 537 debug oC 272 RH% 53.7 % oC 27.2 *C debug bits received 40 debug 2, 29, 1, F, 3B =? 3B debug checksum ok debug RH% 553 debug oC 271 RH% 55.3 % oC 27.1 *C debug bits received 40 debug 2, 29, 1, F, 3B =? 3B debug checksum ok debug RH% 553 debug oC 271 RH% 55.3 % oC 27.1 *C but when I'm trying to include and run with DHT22 code - LCD_5110.h / LCD_5110.cpp etc. also made by You, on serial port I receive strange characters. For example: ? a Y [ ] ] ] LCD_5110 is working fine - I got everything on the screen what I want. For DHT22 I use same as for DHT11 4,8kOhm resistor between pin 1 and pin 2. Serial is set up: Serial.begin(9600) Energia:0101E0012 Do You know maybe how to fix problem with joining both libraries ? Thanks
  4. Hello, sorry I'm using Stellaris Launchpad LM4F120XL and I'm trying to connect it with DHT11. For connection I use DHTPIN PB_7. Code that I'm running is copied from AdaDHT11.zip from the first post. First problem was that I removed all "case:" from DHT.cpp Now I think I have problem with conversion between data types. Is it correct to use this function in void loop: float h=dht.readHumidity() float t=dht.readTemperature() if (isnan(t) || isnan(h)){ gotoXY(0,0); LCDString("NOK") delay(500); } else { gotoXY(0,5); LCDString("OK"); gotoXY(0,1); sprintf(buffer,"%f",h); // <- is it correct? LCDString(buffer); delay(500); .... On screen I receive string "OK" but for LCDString(buffer) i got nothing. buffer is "char buffer[6];" PS: Now between pin 1 VCC & pin 2 DATA of the DHT11 I'm using resistor 4,8kOhms instead of 10kOhms. PS2: I included only DHT.h from first post & LCD_5110.h (by Rei VILO)
  5. mic

    LM4F120 thermometer

    Thank You for help. Unfortunately at this moment part of code connected with 5110 LCD that I'm using stopped to work. I mean that screen is not updating at all or only one frame of animation is displayed, also actions connected with push buttons are not active Is it possible to bypass this problem ? I'm using modified code from LCD_5110_LMF10.ino by Rei Vilo and code made by Nathan Seidle. In this code push button 1 changes backlight on/off and push button 2 changes from displaing animation to displaying some text Code joined with the code from post above: // // LCD_5110_LM4F120.ino // Sketch // ---------------------------------- // Developed with embedXcode // // Project LCD 5110 // Created by Rei VILO on 28/05/12 // Copyright (c) 2012 http://embeddedcomputing.weebly.com // Licence CC = BY SA NC // ---------------------------------- // Ported to LM4F120 by Bryan Schremp (bajabug@gmail.com) // 11/10/2012 // ---------------------------------- #include "LCD_5110.h" // termometr < #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/sysctl.h" #include "driverlib/adc.h" #include "Energia.h" // termometr < // Option 1: parameters with suggested pins //#define _pinChipSelect PB_2 // CE on board //#define _pinSerialClock PB_4 // CLK on board //#define _pinSerialData PB_0 // DIN on board //#define _pinDataCommand PB_3 // DC on board //#define _pinReset PB_5 //#define _pinBacklight PB_1 //#define _pinPushButton PUSH1 #define PIN_SCE PB_2 #define PIN_RESET PB_5 #define PIN_DC PB_3 #define PIN_SDIN PB_0 #define PIN_SCLK PB_4 //#define _pinChipSelect PB_2 // CE on board //#define _pinSerialClock PB_4 // CLK on board //#define _pinSerialData PB_0 // DIN on board //#define _pinDataCommand PB_3 // DC on board //#define _pinReset PB_5 #define pinBacklight PB_1 #define pinPushButton PUSH1 #define pinPushButtonDrugi PUSH2 //The DC pin tells the LCD if we are sending a command or data #define LCD_COMMAND 0 #define LCD_DATA 1 //You may find a different size screen, but this one is 84 by 48 pixels #define LCD_X 84 #define LCD_Y 48 //This table contains the hex values that represent pixels //for a font that is 5 pixels wide and 8 pixels high static const byte ASCII[][5] = { {0x00, 0x00, 0x00, 0x00, 0x00} // 20 ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 ( ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f / ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c \ ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^ ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ~ ,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f DEL }; //This is the SFE flame in bit form char grafika1[] = { //bitmap code }; char grafika2[] = { //bitmap code }; char grafika3[] = { // bitmap code }; boolean backlight = false; boolean lcdtexttype = true; int buttonState = 0; //termometr > unsigned long ulADC0Value[4]; volatile unsigned long ulTempAvg; volatile unsigned long ulTempValueC; volatile unsigned long ulTempValueF; // termometr < void setup(void) { LCDInit(); //Init the LCD pinMode(pinPushButton, INPUT_PULLUP); pinMode(pinPushButtonDrugi, INPUT_PULLUP); attachInterrupt(pinPushButton, wyswietlacz, FALLING); attachInterrupt(pinPushButtonDrugi, text, FALLING); // termometr > Serial.begin(115200); SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 250 ADCSequenceDisable(ADC0_BASE, 1); ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 3, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); ADCSequenceEnable(ADC0_BASE, 1); // termometr < } void wyswietlacz(){ if (backlight == false) { // turn LED on: digitalWrite(pinBacklight, HIGH); backlight = true; } else { digitalWrite(pinBacklight, LOW); backlight = false; } } void text(){ if (lcdtexttype == false) { lcdtexttype=true; } else { lcdtexttype=false; } } void loop(void) { // termometr > ADCIntClear(ADC0_BASE, 1); ADCProcessorTrigger(ADC0_BASE, 1); while(!ADCIntStatus(ADC0_BASE, 1, false)) { } ADCSequenceDataGet(ADC0_BASE, 1, ulADC0Value); ulTempAvg = (ulADC0Value[0] + ulADC0Value[1] + ulADC0Value[2] + ulADC0Value[3] + 2)/4; ulTempValueC = (1475 - ((2475 * ulTempAvg)) / 4096)/10; ulTempValueF = ((ulTempValueC * 9) + 160) / 5; Serial.println(ulTempValueC); delay(300); //termometr < if (lcdtexttype == true){ LCDClear(); LCDBitmap(grafika1); delay(100); LCDClear(); LCDBitmap(grafika2); delay(100); LCDClear(); LCDBitmap(grafika3); delay(100); LCDClear(); LCDString("TEST !"); delay(1000); } else { LCDClear(); gotoXY(20,0); LCDString("TEST 1"); LCDWrite(LCD_DATA, 0x00); gotoXY(15,2); LCDString("TEST 2"); LCDWrite(LCD_DATA, 0x00); gotoXY(10,4); LCDString("TEST 3"); LCDWrite(LCD_DATA, 0x00); gotoXY(0,5); LCDString(reinterpret_cast<char*>(ulTempValueC)); delay(1000); } } void gotoXY(int x, int y) { LCDWrite(0, 0x80 | x); // Column. LCDWrite(0, 0x40 | y); // Row. ? } //This takes a large array of bits and sends them to the LCD void LCDBitmap(char my_array[]){ for (int index = 0 ; index < (LCD_X * LCD_Y / 8) ; index++) LCDWrite(LCD_DATA, my_array[index]); } //This function takes in a character, looks it up in the font table/array //And writes it to the screen //Each character is 8 bits tall and 5 bits wide. We pad one blank column of //pixels on each side of the character for readability. void LCDCharacter(char character) { LCDWrite(LCD_DATA, 0x00); //Blank vertical line padding for (int index = 0 ; index < 5 ; index++) LCDWrite(LCD_DATA, ASCII[character - 0x20][index]); //0x20 is the ASCII character for Space (' '). The font table starts with this character LCDWrite(LCD_DATA, 0x00); //Blank vertical line padding } //Given a string of characters, one by one is passed to the LCD void LCDString(char *characters) { while (*characters) LCDCharacter(*characters++); } //Clears the LCD by writing zeros to the entire screen void LCDClear(void) { for (int index = 0 ; index < (LCD_X * LCD_Y / 8) ; index++) LCDWrite(LCD_DATA, 0x00); gotoXY(0, 0); //After we clear the display, return to the home position } //This sends the magical commands to the PCD8544 void LCDInit(void) { //Configure control pins pinMode(PIN_SCE, OUTPUT); pinMode(PIN_RESET, OUTPUT); pinMode(PIN_DC, OUTPUT); pinMode(PIN_SDIN, OUTPUT); pinMode(PIN_SCLK, OUTPUT); pinMode(pinBacklight, OUTPUT); //Reset the LCD to a known state digitalWrite(PIN_RESET, LOW); digitalWrite(PIN_RESET, HIGH); LCDWrite(LCD_COMMAND, 0x21); //Tell LCD that extended commands follow LCDWrite(LCD_COMMAND, 0xB0); //Set LCD Vop (Contrast): Try 0xB1(good @ 3.3V) or 0xBF if your display is too dark LCDWrite(LCD_COMMAND, 0x04); //Set Temp coefficent LCDWrite(LCD_COMMAND, 0x14); //LCD bias mode 1:48: Try 0x13 or 0x14 LCDWrite(LCD_COMMAND, 0x20); //We must send 0x20 before modifying the display control mode LCDWrite(LCD_COMMAND, 0x0C); //Set display control, normal mode. 0x0D for inverse } //There are two memory banks in the LCD, data/RAM and commands. This //function sets the DC pin high or low depending, and then sends //the data byte void LCDWrite(byte data_or_command, byte data) { digitalWrite(PIN_DC, data_or_command); //Tell the LCD that we are writing either to data or a command //Send the data digitalWrite(PIN_SCE, LOW); shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data); digitalWrite(PIN_SCE, HIGH); } PS: Sorry for a mess. Please Admin is it possible to move this topic to right place ?
  6. Hello, sorry I'm totally beginner working with Stellaris less than a week so probably those questions will be silly but: I saw a project "Using Stellaris LaunchPad as a Thermometer" I wonder is it possible (and if yes how ?) to port to Energia ? Is there any ready library for DHT11 working with LM4F120 ? I saw this only for MSP430. Thank You Mic