Rasberry PI PICO (RP2040) продолжение темы

При работе от блока питания 5В, тоже происходит сбой скетча?

При питании от ПК тоже…
Я почистил резаком межконтактные промежутки от канифоли и сбои исчезли. Правда порт не определятся всё равно.

Днём опять пошли сбои-поломки скетчей через 20-30 секунд работы , мыл спиртом не помогло :slight_smile:
Сейчас гонял минут 20. Всё нормально. Как то странно всё это.

трудно что-то посоветовать, не сталкивался с таким

Вариантов не много :crazy_face:
-руки
-питание
-брак

Я бы под лупой изучил цепи сброса и тактирования. Может не пропаяли какую то ножку или элемент…

Посмотрел под линзой, вроде ничего подозрительного. На матрице 8Х32 ещё два раза проверял с питанием от 3,7В аккума - без поломок. Главное, в отличии от ESP32, нет пестрения светодиодов несмотря на 3,3В сигнала.
Какова стратегия использования этой платы? Как адаптировать под сервы, SSD1306 и т.д. Искать библиотеки с поддержкой платы? Все ли библиотеки можно разворачивать внутри папки со скетчем (менять библиотеки не очень хочется в ИДЕ)? Некоторые кроме cpp. и h. ещё кучу файлов имеют. Ай йя яй короче :slight_smile:

По моему в ИДЕ как раз проще библиотеки менять. Это если речь о старой ИДЕ 1.х Я их постоянно туда-сюда тасую.
Если хочется хранить библиотеки с проектом, то надо писать в чем-то ином, типа Вижуал Студии или Платформио

Немного не в тему про RP2040, но про библиотеки:
дай думаю побалуюсь с STM32+WS2812+ArduinoIDE, перепробовал несколько библиотек (NeoPixel/FastLED), разные платы, Обновил до кучи VisualStudio + VisualMicro, но так и не запустил на PB0 адресные светодиоды :frowning:
В итоге потратил времени чуть ли не больше, чем написал ранее на регистрах Timer+DMA этот вывод. Так что зоопарк библиотек так себе удовольствие…

1 лайк

уже адаптировано

#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.

:slight_smile: Буду искать как подключить к SSD1306.

А чем отличается от подключения к той же уно?
Что искать то?

Не знаю, распиновкой наверное, хочется подключить к выводам 0,1, gnd,3,3В и чтоб заработала от Wire.h.

если есть оный подключить и проверить

Wire (I2C Master and Slave) — Arduino-Pico 3.1.0 documentation

Не, не заработало.

//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)

Совершенно не уверен. По картинке ориентируюсь.