При работе от блока питания 5В, тоже происходит сбой скетча?
При питании от ПК тоже…
Я почистил резаком межконтактные промежутки от канифоли и сбои исчезли. Правда порт не определятся всё равно.
Днём опять пошли сбои-поломки скетчей через 20-30 секунд работы , мыл спиртом не помогло
Сейчас гонял минут 20. Всё нормально. Как то странно всё это.
трудно что-то посоветовать, не сталкивался с таким
Вариантов не много
-руки
-питание
-брак
Я бы под лупой изучил цепи сброса и тактирования. Может не пропаяли какую то ножку или элемент…
Посмотрел под линзой, вроде ничего подозрительного. На матрице 8Х32 ещё два раза проверял с питанием от 3,7В аккума - без поломок. Главное, в отличии от ESP32, нет пестрения светодиодов несмотря на 3,3В сигнала.
Какова стратегия использования этой платы? Как адаптировать под сервы, SSD1306 и т.д. Искать библиотеки с поддержкой платы? Все ли библиотеки можно разворачивать внутри папки со скетчем (менять библиотеки не очень хочется в ИДЕ)? Некоторые кроме cpp. и h. ещё кучу файлов имеют. Ай йя яй короче
По моему в ИДЕ как раз проще библиотеки менять. Это если речь о старой ИДЕ 1.х Я их постоянно туда-сюда тасую.
Если хочется хранить библиотеки с проектом, то надо писать в чем-то ином, типа Вижуал Студии или Платформио
Немного не в тему про RP2040, но про библиотеки:
дай думаю побалуюсь с STM32+WS2812+ArduinoIDE, перепробовал несколько библиотек (NeoPixel/FastLED), разные платы, Обновил до кучи VisualStudio + VisualMicro, но так и не запустил на PB0 адресные светодиоды
В итоге потратил времени чуть ли не больше, чем написал ранее на регистрах Timer+DMA этот вывод. Так что зоопарк библиотек так себе удовольствие…
уже адаптировано
#pragma once
#include <Arduino.h>
#include <hardware/pio.h>
// The following values are in us (microseconds).
// Since the defaults can be overwritten in the new attach() member function,
// they were modified from the Arduino AVR defaults to be in the safe range
// of publicly available specifications. While this implies that many 180°
// servos do not operate the full 0° to 180° sweep using these, it also prevents
// unsuspecting damage. For Arduino AVR, the same change is being discussed.
#define DEFAULT_MIN_PULSE_WIDTH 1000 // uncalibrated default, the shortest duty cycle sent to a servo
#define DEFAULT_MAX_PULSE_WIDTH 2000 // uncalibrated default, the longest duty cycle sent to a servo
#define DEFAULT_NEUTRAL_PULSE_WIDTH 1500 // default duty cycle when servo is attached
#define REFRESH_INTERVAL 20000 // classic default period to refresh servos in microseconds
#define MAX_SERVOS 8 // number of PIO state machines available, assuming nobody else is using them
Не заработала:)
В примерах для rp2040
дан такой скетч
/* Sweep
by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
modified 28 May 2015
by Michael C. Miller
modified 8 Nov 2013
by Scott Fitzgerald
http://arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
void setup() {
myservo.attach(2); // attaches the servo on GIO2 to the servo object
}
void loop() {
int pos;
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
Пробовал с Вашей добавкой и без. Подключал к GND, Vout, 2.
Буду искать как подключить к SSD1306.
А чем отличается от подключения к той же уно?
Что искать то?
Не знаю, распиновкой наверное, хочется подключить к выводам 0,1, gnd,3,3В и чтоб заработала от Wire.h.
если есть оный подключить и проверить
Не, не заработало.
//SDA - 0 //SCL - 1 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ
#include <Wire.h>//Подключаю библиотеку протокола I2C.
#include "ris.h"//картинки
//////////////////////////////////////////////////////////////////////
//Предварительно создам функции ввода команд и данных в дисплей.
void oledCommand(int comm) {
Wire.beginTransmission(0x3C);//Начинаем передачу команд устройству с адресом 0x3C.
Wire.write(0x00);//Сообщаем дисплею, что следующее передаваемое значение - команда.
Wire.write(comm);//Передаем команду.
Wire.endTransmission();//Завершаем передачу данных.
}
///////////////////////////////////////////////////////////////////////
void oledData(int data) {
Wire.beginTransmission(0x3C);//Начинаем передачу данных устройству с адресом 0x3C.
Wire.write(0x40);//Сообщаем дисплею, что следующее передаваемое значение - данные, которые необходимо вывести на дисплей.
Wire.write(data);//Передаем данные.
Wire.endTransmission();//Завершаем передачу данных.
}
/////////////////////////////////////////////////////////////////////
void setup() {
bool setSDA(0);
bool setSCL(1);
Wire.begin();
//процесс инициализации частично команды необязательны, т.к. имеют выбранное значение после RESET
oledCommand(0xAE);//выключение дисплея
oledCommand(0xD5);// Частота обновления экрана
oledCommand(0x80);
oledCommand(0xD3);// Смещение изображения на дисплее (Offset)
oledCommand(0x0);
oledCommand(0x40);
oledCommand(0x8D);//включение емкостного умножителя
oledCommand(0x14);
oledCommand(0x20);//настройка адресации
oledCommand(0x00);// 0х00 для горизонтальной, 0х01 для вертикальной, 0х02 для постраничной адресации
oledCommand(0xA1);//отражение по горизонтали, для отображения справа налево необходимо использовать команду 0xA0
oledCommand(0xC8);//отражение по вертикали, 0xC0 для переворота изображения по вертикали.
//Одновременное использование команд 0xC8 и 0xA1 или 0xA0 и 0xC0 позволяет повернуть изображение на 180 градусов.
oledCommand(0xDA);
oledCommand(0x12);
oledCommand(0x81);//установка контрастности дисплея
oledCommand(0xCF);
oledCommand(0xD9);
oledCommand(0xF1);
oledCommand(0xDB); // установка Vcomh(влияет на яркость)
// oledCommand (0x30); // 0x00 - 0,65Vcc; 0x20 - 0,77Vcc; 0x30 - 0,83Vcc
oledCommand(0x40);
oledCommand(0xA4);
oledCommand(0xA6);//инверсия дисплея, 0xA6 для отключения инверсии, 0xA7 для включения инверсии цвета.
oledCommand(0xAF);//включение дисплея
Wire.setClock( 400000L );
}
void loop() {
// сценарий анимации глаз
for (int i = 0; i < 1024; i++){oledData(glaza_A[i]);}delay(500);//ВПРАВО
/*
for (int i = 0; i < 1024; i++){oledData(pgm_read_byte(&glaza_C[i]));}delay(2000);//ЦЕНТР
for (int i = 0; i < 1024; i++){oledData(pgm_read_byte(&glaza_B[i]));}delay(500);//ВЛЕВО
for (int i = 0; i < 1024; i++){oledData(pgm_read_byte(&glaza_C[i]));}delay(2000);//ЦЕНТР
for (int i = 0; i < 1024; i++){oledData(pgm_read_byte(&glaza_D[i]));}delay(500);//ВНИЗ
for (int i = 0; i < 1024; i++){oledData(pgm_read_byte(&glaza_C[i]));}delay(2000);//ЦЕНТР
for (int i = 0; i < 1024; i++){oledData(pgm_read_byte(&glaza_F[i]));}delay(500);//ЗАКРЫТЬ
for (int i = 0; i < 1024; i++){oledData(pgm_read_byte(&glaza_C[i]));}delay(2000);//ЦЕНТР
*/
//
}
Сначала надо i2c shiffer запустить. Вы уверены что на 0 и 1 ногах можно запустить i2c ?
// Wire
#define PIN_WIRE0_SDA (4u)
#define PIN_WIRE0_SCL (5u)
#define PIN_WIRE1_SDA (26u)
#define PIN_WIRE1_SCL (27u)
#define SERIAL_HOWMANY (3u)
#define SPI_HOWMANY (2u)
#define WIRE_HOWMANY (2u)