Skocz do zawartości

Pomocna odpowiedź

Napisano

Witam,
jestem początkujący i mam problem. chciałbym podłączyć do Wemos D1 mini pro LCD Nokia 5110 oraz czujnik bme680. Jak podłączę oddzielnie to działa, jak razem to nie działa LCD ani bme680. Bme 680 działa tylko po I2C.

Oba mają działać po I2c. Przeczytałem, że muszę podać adresy urządzeń w funkcji Wire i podnieś rezystorami 4,7 napięcie Sda i SCl do 5V. Wemos działa na 3.3V. Czy to dobra droga?

Proszę o pomoc w rozwiązaniu tego problemu. Dziękuję.

Gość es2

Droga dobra,
Poczytaj o I2C i adresowaniu peryferii.

Następnie poczytaj o nieudolnych bibliotekach I2C dla Arduino. Pobaw się nimi i na ich podstawie napisz swoje. Arduino to DEMO, pokazuje, że można ale sensowne wykorzystanie jest dyskusyjne. Właśnie pisze własna bibliotekę dla ESP8266 do SSD1306 bo ta ogólnie dostępna nadaje się tylko jako demo.

Kolejna sprawa, chcesz aby pomóc a kod programu jest TopSecret. Jak więc mam ci pomóc? Zgadywać co tam namalowałeś?

Kod to jedno, spier.... biblioteki to inna sprawa. Dołączaj kod bibliotek, bo tam często kryją się błędy.

Witam,
przesyłam kod:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_PCD8544.h"
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME680 bme; // I2C

// ESP8266 Hardware SPI:
// pin 14 D5 SCK -  LCD serial clock (SCLK) 5
// pin 13 D7 MOSI - LCD DIN 4
// pin 12 D6 MISO - Data/Command select (D/C) 3
// pin 5 D1 - LCD chip select (CS) 2
// pin 4 D2 - LCD reset (RST) 1
Adafruit_PCD8544 display = Adafruit_PCD8544(12, 5, 4);

void setup()   {
 Serial.begin(9600);
 while (!Serial){Serial.println("NOT OK");};
 Serial.println(F("BME680 test"));
 if (!bme.begin()) {
   Serial.println("Could not find a valid BME680 sensor, check wiring!");
  }
 display.begin();
 display.setContrast(60);
 display.clearDisplay();

 display.setTextSize(1);
 display.setTextColor(BLACK);
 display.setCursor(0,0);

 while (!Serial);
 Serial.println(F("test BME680"));

 if (!bme.begin()) {
   Serial.println("Nie znaleziono czujnika BME680!");
   while (1);
 }
 bme.setTemperatureOversampling(BME680_OS_8X);
}

void loop() {
 display.clearDisplay();
 display.print("Temp=");
 display.print(bme.temperature);
 display.println("*C");
 display.display();
 delay(2000);
}
Gość es2

Kod jest a kod bibliotek o którym pisałem gdzie?

Program jest, jak sie domyślam, ten co nie działa. Co w nim nie działa? Jakie są komunikaty w serial monitorze?

Pokaż też kody, które działają.

Gość es2

Informacje z kolego trzeba wyciągać jak od ucznia podczas sprawdzania zakresu wiedzy. Kody bibliotek są a gdzie

Program jest, jak sie domyślam, ten co nie działa. Co w nim nie działa? Jakie są komunikaty w serial monitorze?

Pokaż też kody, które działają.

w załącznikach (w tych 2 plikach które poprzednio dołączyłem) są następujące pliki Adafruit_bme680.cpp, Adafruit_bme680.h, Adafruit_pcd8544.cpp, Adafruit_pcd8544.h, bme680.c, bme680.h, bme680_defs.h

Gość es2

Nadal nie wiem jakie sa objawy niedziałania. Czy tak ciężko to napisać?

W bibliotece dla LCD

/*********************************************************************
This is a library for our Monochrome Nokia 5110 LCD Displays

 Pick one up today in the adafruit shop!
 ------> http://www.adafruit.com/products/338

These displays use SPI to communicate, 4 or 5 pins are required to  
interface

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.  
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
#ifndef _ADAFRUIT_PCD8544_H
#define _ADAFRUIT_PCD8544_H

#if defined(ARDUINO) && ARDUINO >= 100
 #include "Arduino.h"
#else
 #include "WProgram.h"
 #include "pins_arduino.h"
#endif

#include <SPI.h>

#ifdef __SAM3X8E__
 typedef volatile RwReg PortReg;
 typedef uint32_t PortMask;
#else
 typedef volatile uint8_t PortReg;
 typedef uint8_t PortMask;
#endif


#define BLACK 1
#define WHITE 0

#define LCDWIDTH 84
#define LCDHEIGHT 48

#define PCD8544_POWERDOWN 0x04
#define PCD8544_ENTRYMODE 0x02
#define PCD8544_EXTENDEDINSTRUCTION 0x01

#define PCD8544_DISPLAYBLANK 0x0
#define PCD8544_DISPLAYNORMAL 0x4
#define PCD8544_DISPLAYALLON 0x1
#define PCD8544_DISPLAYINVERTED 0x5

// H = 0
#define PCD8544_FUNCTIONSET 0x20
#define PCD8544_DISPLAYCONTROL 0x08
#define PCD8544_SETYADDR 0x40
#define PCD8544_SETXADDR 0x80

// H = 1
#define PCD8544_SETTEMP 0x04
#define PCD8544_SETBIAS 0x10
#define PCD8544_SETVOP 0x80

// Default to max SPI clock speed for PCD8544 of 4 mhz (16mhz / 4) for normal Arduinos.
// This can be modified to change the clock speed if necessary (like for supporting other hardware).
#define PCD8544_SPI_CLOCK_DIV SPI_CLOCK_DIV4

class Adafruit_PCD8544 : public Adafruit_GFX {
public:
 // Software SPI with explicit CS pin.
 Adafruit_PCD8544(int8_t SCLK, int8_t DIN, int8_t DC, int8_t CS, int8_t RST);
 // Software SPI with CS tied to ground.  Saves a pin but other pins can't be shared with other hardware.
 Adafruit_PCD8544(int8_t SCLK, int8_t DIN, int8_t DC, int8_t RST);
 // Hardware SPI based on hardware controlled SCK (SCLK) and MOSI (DIN) pins. CS is still controlled by any IO pin.
 // NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins!
 Adafruit_PCD8544(int8_t DC, int8_t CS, int8_t RST);

 void begin(uint8_t contrast = 40, uint8_t bias = 0x04);

 void command(uint8_t c);
 void data(uint8_t c);

 void setContrast(uint8_t val);
 void clearDisplay(void);
 void display();

 void drawPixel(int16_t x, int16_t y, uint16_t color);
 uint8_t getPixel(int8_t x, int8_t y);

private:
 int8_t _din, _sclk, _dc, _rst, _cs;
 volatile PortReg  *mosiport, *clkport;
 PortMask mosipinmask, clkpinmask;

 void spiWrite(uint8_t c);
 bool isHardwareSPI();
};

#endif

Nigdzie nie ma mowy o I2C. Jak ma więc działać po I2C?

Jak więc wyświetlacz działał?

Jak podłączę oddzielnie to działa, jak razem to nie działa LCD ani bme680

Narysuj schemat jak to podłączasz gdy działa jak gdy nie.

jak wgram program przykładowy do Nokii - pcdtest.ino to działa - wyświetlana są przykładowe dane,
jak podepnę pod d1 id2 czujnik bme680 to przestaje wyświetlać, a czujnik wg dokumentacji ma być podpięty pod d1 i d2, które te piny są wykorzystywane przez ekran Nokii,

Gość es2

Prosiłem o schemat połączeń ale go nie widzę. Pewny jesteś, że LCD od Noki jest podłączony po I2C?

Wemos D1 mini pro: Nokia LCD pin:

D5 Clk 5

D7 DIN 4

D6 DC 3

D1 CE 2

D2 Rst 1

3.3V Vcc 6

3.3V Blk 7

Gnd Gnd 8

w kodzie:

Adafruit_PCD8544 display = Adafruit_PCD8544(12, 5, 4);

Wemos D1 mini pro: BME680:

D1 D1

D2 D2

GND GND

3.3V 3.3V

[ Dodano: 14-05-2018, 16:39 ]

LCD podłączony jest do SPI. Moja pomyłka.

Wemos D1 mini pro: Nokia LCD pin:

D5 Clk 5

D7 DIN 4

D6 DC 3

D1 CE 2

D2 Rst 1

3.3V Vcc 6

3.3V Blk 7

Gnd Gnd 8

w kodzie:

Adafruit_PCD8544 display = Adafruit_PCD8544(12, 5, 4);

Wemos D1 mini pro: BME680:

D1 D1

D2 D2

GND GND

3.3V 3.3V

Gość es2

Widać wyraźnie, że LCD komunikuje sie po SPI a nie I2C. Widać tez konflikt linii D1 i D2.

podłączyłem Lcd Nokii wg opisu link i jak tylko podłączam Bme680 przez d1 i d2 to nie działa. Może to wina tego że zasilam Lcd i czujnik z Usb Wemos-a. Może podłączyć zasilanie Lcd oddzielnie?

Gość es2
podłączyłem Lcd Nokii wg opisu link

Czyli przez SPI. Z pierwszego postu wnioskuję że przez I2C.

jestem początkujący i mam problem. chciałbym podłączyć do Wemos D1 mini pro LCD Nokia 5110 oraz czujnik bme680. Jak podłączę oddzielnie to działa, jak razem to nie działa LCD ani bme680

Co do wypowiedzi:

i jak tylko podłączam Bme680 przez d1 i d2 to nie działa. Może to wina tego że zasilam Lcd i czujnik z Usb Wemos-a. Może podłączyć zasilanie Lcd oddzielnie?

Przeczytaj jeszcze raz moja poprzednia wypowiedź. Napisałem wyraźnie gdzie leży problem.

Zastanów sie też nad tym

Oba mają działać po I2c.

Sprawdź jaki sterownik ma wyświetlacz od Noki. Nie napisałeś nawet od jakiej Noki. Nie dałeś fotki modułu, bo pewnie używasz modułu wyświetlacza a nie samego LCD. Jeśli to jest ten najpopularniejszy na portalach aukcyjnych jak"Aledrogo" to nie da sie go bezpośrednio podłączyć do I2C.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...