OLED PB10 PB11 - zak - 20-04-2022
Dzień Dobry
Próbuje zmienić ten kod aby działał na pinach PB10 /PB11, jak do tej pory nie wyszło, może ktoś wie, jak to zrobić.
Na razie działa na PB6 / PB7.
STM32F103
Kod: #include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
#define ANALOG_IN_PIN PA6
//////
TwoWire Wire2(PB11, PB10);
///////
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
float in_voltage = 0.0;
void setup()
{
///////////////////////////
Wire2.begin();
Wire2.setClock(400000);
///////////////////////////
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
for (;;); // Don't proceed, loop forever
}
display.clearDisplay();
}
void loop() {
in_voltage = analogRead(ANALOG_IN_PIN) * 3.3 / 805.0;
display.setCursor(0, 0); //oled display
display.setTextSize(4);
display.setTextColor(WHITE);
display.print(in_voltage, 2);
display.println("V");
display.display();
delay(500);
display.clearDisplay();
}
RE: OLED PB10 PB11 - kaczakat - 20-04-2022
No to i tak sukces, miałem bibliotekę od Adafruit i nie odpaliłem na niej STM32, wziąłem jakąś inną, która była opisana jako dedykowana dla STM32.
Jak walczyłeś z biblioteką dla LCD to odpalenie na drugim I2C trzeba było zdefiniować w bibliotece ekranu. To że w programie uruchamiasz 2 linię I2C to nie informuje jeszcze biblioteki Oled, że ten ekran ma działać na tym I2C. Trzeba sprawdzić co jest w bibliotece.
Może to ma powiązać jedno z drugim:
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
czyli &Wire2,
RE: OLED PB10 PB11 - zak - 20-04-2022
zmieniłem
Kod: ///////
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire2, OLED_RESET);
float in_voltage = 0.0;
////////
Czarny ekran i LED PC13 mruga.
RE: OLED PB10 PB11 - kaczakat - 20-04-2022
Nie używam tej biblioteki, ani nie wiem jakiej wersji Ty używasz. Zerknąłem do jakiejś wersji którą mam na dysku i w niej są odwołania bezpośrednio do wire, np. w zależności od wersji Arduino wire.send czy wire.write. Więc nie jest tak do końca modułowa, że można podać w argumentach wire2 i będzie śmigać, zostaje znowu ręczna rzeźba i dostosowanie tej biblioteki pod wire2 tak jak tej biblioteki z LCD.
RE: OLED PB10 PB11 - zak - 20-04-2022
Oto mój Wire.h, może trzeba tu coś zmienić?
Kod PHP: /****************************************************************************** * The MIT License * * Copyright (c) 2010 LeafLabs LLC. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. *****************************************************************************/
/** * @file TwoWire.cpp * @author Trystan Jones <crenn6977@gmail.com> * @brief Wire library, uses the hardware I2C available in the Maple to * interact with I2C slave devices. */
/* * Library created by crenn to use the new WireBase system and allow Arduino * users easy interaction with the I2C Hardware in a familiar method. */
#include "Wire.h"
uint8 TwoWire::process(uint8 stop) { int8 res = i2c_master_xfer(sel_hard, &itc_msg, 1, 0); if (res == I2C_ERROR_PROTOCOL) { if (sel_hard->error_flags & I2C_SR1_AF) { /* NACK */ res = (sel_hard->error_flags & I2C_SR1_ADDR ? ENACKADDR : ENACKTRNS); } else if (sel_hard->error_flags & I2C_SR1_OVR) { /* Over/Underrun */ res = EDATA; } else { /* Bus or Arbitration error */ res = EOTHER; } i2c_disable(sel_hard); i2c_master_enable(sel_hard, dev_flags); } return res; }
uint8 TwoWire::process(){ return process(true); }
// TODO: Add in Error Handling if devsel is out of range for other Maples TwoWire::TwoWire(uint8 dev_sel, uint8 flags) { if (dev_sel == 1) { sel_hard = I2C1; } else if (dev_sel == 2) { sel_hard = I2C2; } else { ASSERT(1); } dev_flags = flags; }
TwoWire::~TwoWire() { i2c_disable(sel_hard); sel_hard = 0; }
void TwoWire::begin(uint8 self_addr) { i2c_master_enable(sel_hard, dev_flags); }
void TwoWire::end() { i2c_disable(sel_hard); sel_hard = 0; }
void TwoWire::setClock(uint32_t frequencyHz) { switch(frequencyHz) { case 400000: dev_flags |= I2C_FAST_MODE;// set FAST_MODE bit break; case 100000: default: dev_flags &= ~I2C_FAST_MODE;// clear FAST_MODE bit break; } if (sel_hard->regs->CR1 & I2C_CR1_PE){ i2c_disable(sel_hard); i2c_master_enable(sel_hard, dev_flags); } }
TwoWire Wire(1);
RE: OLED PB10 PB11 - kaczakat - 20-04-2022
ZAK, przecież tu https://forum.arduinopolska.pl/watek-lcd-problem?page=2 miałeś analogiczny problem, to i rozwiązanie jest takie samo. Nie grzebiesz w WIRE skoro dla poprzedniej biblioteki jest OK, tylko w tej nowej bibliotece, z którą działać nie chce. Tak jak tam możesz przemapować wire2 z wire. Chyba że masz już inny core. Tu jeszcze jest opcja podania argumentu &wire przy tworzeniu obiektu.
Niestety testów nie zrobię, bo mam przy sobie tylko tylko jedną płytkę ESP32 w plecaku. Ale dopóki chcesz używać 1 ekranu na jednym I2c to temat już raz rozwiązałeś, gimnastyka się zacznie gdy będziesz chciał dwa ekrany jednocześnie na różnych I2C.
RE: OLED PB10 PB11 - zak - 20-04-2022
To było w starym komputerze, przeszłem na MAC a tu nie działa.
RE: OLED PB10 PB11 - kaczakat - 20-04-2022
Nie wydaje mi się, by mac miał tu jakieś inne rozwiązanie w zakresie wkopiowania bibioteki do katalogu projektu i wpisania ścieżki dostępu w nagłówkach projektu. Ale nie mam jak tego sprawdzić.
|