эту плату без антенны подключать нельзя, чип сожжёшь...
да ну, телевизор без антенны не сгорает же
ua6em пишет:
если поделишься кодом,
Чтобы не загромождать ветку расписал подробно в исходном сообщении #248
присоединюсь к словам WDRAKULA...
Приятель, мастер спорта на УКВ кстати, попросил роутер недорогой, из наличия был только Длинк с вайфаем с наружными антеннами, через неделю привозит, говорит не работает и греется, где антенны говорю...а мы их не ставили...сразу выкинули...
Матерился я долго но внутри себя )))
Свои балалайки значит без антенны включать нельзя, сразу сгорают, а заводские можно?
"Умом Россию не понять"
вот честно - ему верю, а тебе нет. Ибо ты неоднократно показал. что даже в том, в чем ты разбираешься - путаник ты большой.
По сути спорить не буду, мои познания в радио даже не нулевые, а отрицательные. Но думаю, что сам чип (в смысле микроконтроллер) у меня пока не сгорел, ибо на команды отвечает.
==> Time to write 64KB in 1b chunks = 1428 milliseconds = 45.89 KB/s
Reading 64K file in 1-byte chunks
==> Time to read 64KB in 1b chunks = 223 milliseconds = 293.88 KB/s
done
Загрузил бибилиотеку ADAFRUIT ST7735, взял тестовый скеч, контроллер добавлять не стал, поправил пины на avr и ОНА ПРОСТО РАБОТАЕТ!!!
Есть предположение. что большинство библиотек будут работать из коробки...
Плату в аддоне выбираю GENERIC RP2040 (параметры ставлю по плате)
Спрошу еще раз! в Linux из IDE у кого-то работает загрузка в RP2040???
UBUNTU22 ежели что
Произошла ошибка при загрузке скетча
/home/user/snap/arduino/70/.arduino15/packages/rp2040/tools/pqt-openocd/1.4.0-c-0196c06/bin/openocd: error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory
error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory
во всяком случае он же черным по русски пишет - не загружена библиотека HID - думаю надо переустановить драйвера и/или запустить.
на одном под 1.8.9 одолел, на другом под 1.8.19 делал ручками символические ссылки, модули к ядру добавлял после, надо попробовать переустановить аддон)))
Влад все верно обьяснил, меня что-то заклинило на длине периода. А если считать число импульсов, то код элементарный. Вспоминаю, что весной я сам выкладывал тут в какой-то ветке ссылку на библиотеку частотомерадо 8 Мгц на обычной уно с точностью в сотню герц.
я давно возле Айти с 1976 года, право имею оценить ...взгляд сталевара со стороны...
PS есть такая профессия - критик )))
PPS а камень действительно очень хорош, но параметры искусственно сильно занижены, внутри он значительно получше, надо бы у Юрия Панчула поинтересоваться, он в теме по этим ядрам
PPPS частотомер без внешнего обвеса с 20 ppm это уже более чем индикатор, а к примеру частотомер, на основе фазового детектора с диапазоном до 150 мегагерц использующий в качестве одного из сигналов PWM?
Недаром и такой успех, 2 миллиона продаж за столь короткое время
/**************************************************************************
This is a library for several Adafruit displays based on ST77* drivers.
Works with the Adafruit 1.8" TFT Breakout w/SD card
----> http://www.adafruit.com/products/358
The 1.8" TFT shield
----> https://www.adafruit.com/product/802
The 1.44" TFT breakout
----> https://www.adafruit.com/product/2088
The 1.14" TFT breakout
----> https://www.adafruit.com/product/4383
The 1.3" TFT breakout
----> https://www.adafruit.com/product/4313
The 1.54" TFT breakout
----> https://www.adafruit.com/product/3787
The 1.69" TFT breakout
----> https://www.adafruit.com/product/5206
The 2.0" TFT breakout
----> https://www.adafruit.com/product/4311
as well as Adafruit raw 1.8" TFT display
----> http://www.adafruit.com/products/618
Check out the links above for our tutorials and wiring diagrams.
These displays use SPI to communicate, 4 or 5 pins are required to
interface (RST is optional).
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.
MIT license, all text above must be included in any redistribution
**************************************************************************/
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
#define SPI01
#if defined(SPI01)
#define TFT_CS 13 //
#define TFT_RST 14 //
#define TFT_DC 15 //
#define TFT_MOSI 11 //
#define TFT_SCLK 10 //
#else
#define TFT_CS 5 //
#define TFT_RST 6 //
#define TFT_DC 7 //
#define TFT_MOSI 3 //
#define TFT_SCLK 2 //
#endif
/*
"""
// для RP2040 SPI1
#define TFT_CS GP13 - CS
#define TFT_RST GP14 - RESET
#define TFT_DC GP15 - A0
#define TFT_SCK GP10 - SCK
#define TFT_SDA GP11 - SDA (MOSI, TX)
#define TFT_LED Vout
#define TFT_VCC 3V3 - 3V3
#define TFT_GND GND - GND
// для RP2040 SPI1
#define TFT_CS GP5 - CS
#define TFT_RST GP6 - RESET
#define TFT_DC GP7 - A0
#define TFT_SCK GP2 - SCK
#define TFT_SDA GP3 - SDA (MOSI, TX)
#define TFT_LED Vout
#define TFT_VCC 3V3 - 3V3
#define TFT_GND GND - GND
"""
*/
// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
// SCLK = pin 13. This is the fastest mode of operation and is required if
// using the breakout board's microSD card.
// For 1.44" and 1.8" TFT with ST7735 use:
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// For 1.14", 1.3", 1.54", 1.69", and 2.0" TFT with ST7789:
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
// OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
// tradeoff being that performance is not as fast as hardware SPI above.
//#define TFT_MOSI 11 // Data out
//#define TFT_SCLK 13 // Clock out
// For ST7735-based displays, we will use this call
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
// OR for the ST7789-based displays, we will use this call
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
float p = 3.1415926;
void setup(void) {
Serial.begin(115200);
Serial.print(F("Hello! ST77xx TFT Test"));
pinMode(29, OUTPUT);
digitalWrite(29,HIGH);
// Use this initializer if using a 1.8" TFT screen:
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
tft.setRotation(1);
tft.setSPISpeed(50000000);
// OR use this initializer if using a 1.8" TFT screen with offset such as WaveShare:
// tft.initR(INITR_INITR_BLACKTAB); // Init ST7735S chip, green tab
// OR use this initializer (uncomment) if using a 1.44" TFT:
//tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab
// OR use this initializer (uncomment) if using a 0.96" 160x80 TFT:
//tft.initR(INITR_MINI160x80); // Init ST7735S mini display
// OR use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
//tft.init(240, 240); // Init ST7789 240x240
// OR use this initializer (uncomment) if using a 1.69" 280x240 TFT:
//tft.init(240, 280); // Init ST7789 280x240
// OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
//tft.init(240, 320); // Init ST7789 320x240
// OR use this initializer (uncomment) if using a 1.14" 240x135 TFT:
//tft.init(135, 240); // Init ST7789 240x135
// OR use this initializer (uncomment) if using a 1.47" 172x320 TFT:
//tft.init(172, 320); // Init ST7789 172x320
// SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here
// Note that speed allowable depends on chip and quality of wiring, if you go too fast, you
// may end up with a black screen some times, or all the time.
//tft.setSPISpeed(40000000);
Serial.println(F("Initialized"));
uint16_t time = millis();
tft.fillScreen(ST77XX_BLACK);
time = millis() - time;
Serial.println(time, DEC);
Serial.println("done");
delay(1000);
}// ******* END SETUP *******
void loop() {
tft.invertDisplay(true);
delay(500);
tft.invertDisplay(false);
delay(500);
// tft print function!
tftPrintTest();
delay(4000);
// a single pixel
tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
delay(500);
// line draw test
testlines(ST77XX_YELLOW);
delay(500);
// optimized lines
testfastlines(ST77XX_RED, ST77XX_BLUE);
delay(500);
testdrawrects(ST77XX_GREEN);
delay(500);
testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
delay(500);
tft.fillScreen(ST77XX_BLACK);
testfillcircles(10, ST77XX_BLUE);
testdrawcircles(10, ST77XX_WHITE);
delay(500);
testroundrects();
delay(500);
testtriangles();
delay(500);
tft.setRotation(0);
mediabuttons();
tft.setRotation(1);
delay(500);
Serial.println("done");
delay(1000);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.setTextColor(ST77XX_WHITE);
tft.print("Sketch has been running for:");
tft.setTextColor(ST77XX_MAGENTA);
tft.print(millis() / 1000);
tft.setTextColor(ST77XX_WHITE);
tft.print(" seconds.");
delay(3000);
}
// ************** END LOOP **************
void testlines(uint16_t color) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, 0, x, tft.height()-1, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, 0, tft.width()-1, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, 0, 0, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, tft.height()-1, x, 0, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
delay(0);
}
}
void testdrawtext(char *text, uint16_t color) {
tft.setCursor(0, 0);
tft.setTextColor(color);
tft.setTextWrap(true);
tft.print(text);
}
void testfastlines(uint16_t color1, uint16_t color2) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t y=0; y < tft.height(); y+=5) {
tft.drawFastHLine(0, y, tft.width(), color1);
}
for (int16_t x=0; x < tft.width(); x+=5) {
tft.drawFastVLine(x, 0, tft.height(), color2);
}
}
void testdrawrects(uint16_t color) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
}
}
void testfillrects(uint16_t color1, uint16_t color2) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=tft.width()-1; x > 6; x-=6) {
tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
}
}
void testfillcircles(uint8_t radius, uint16_t color) {
for (int16_t x=radius; x < tft.width(); x+=radius*2) {
for (int16_t y=radius; y < tft.height(); y+=radius*2) {
tft.fillCircle(x, y, radius, color);
}
}
}
void testdrawcircles(uint8_t radius, uint16_t color) {
for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
tft.drawCircle(x, y, radius, color);
}
}
}
void testtriangles() {
tft.fillScreen(ST77XX_BLACK);
uint16_t color = 0xF800;
int t;
int w = tft.width()/2;
int x = tft.height()-1;
int y = 0;
int z = tft.width();
for(t = 0 ; t <= 15; t++) {
tft.drawTriangle(w, y, y, x, z, x, color);
x-=4;
y+=4;
z-=4;
color+=100;
}
}
void testroundrects() {
tft.fillScreen(ST77XX_BLACK);
uint16_t color = 100;
int i;
int t;
for(t = 0 ; t <= 4; t+=1) {
int x = 0;
int y = 0;
int w = tft.width()-2;
int h = tft.height()-2;
for(i = 0 ; i <= 16; i+=1) {
tft.drawRoundRect(x, y, w, h, 5, color);
x+=2;
y+=3;
w-=4;
h-=6;
color+=1100;
}
color+=100;
}
}
void tftPrintTest() {
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.println("Hello World!");
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(3);
tft.println("Hello World!");
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(4);
tft.print(1234.567);
delay(1500);
tft.setCursor(0, 0);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(0);
tft.println("Hello World!");
tft.setTextSize(1);
tft.setTextColor(ST77XX_GREEN);
tft.print(p, 6);
tft.println(" Want pi?");
tft.println(" ");
tft.print(8675309, HEX); // print 8,675,309 out in HEX!
tft.println(" Print HEX!");
tft.println(" ");
tft.setTextColor(ST77XX_WHITE);
tft.println("Sketch has been");
tft.println("running for: ");
tft.setTextColor(ST77XX_MAGENTA);
tft.print(millis() / 1000);
tft.setTextColor(ST77XX_WHITE);
tft.print(" seconds.");
}
void mediabuttons() {
// play
tft.fillScreen(ST77XX_BLACK);
tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
delay(500);
// pause
tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
delay(500);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
delay(50);
// pause color
tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}
DS18B20 и ST7735 (набросок)
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
#define SPI01
#if defined(SPI01) // для RP2040 SPI1
#define TFT_CS 13 // GP13 - CS
#define TFT_RST 14 // GP14 - RESET
#define TFT_DC 15 // GP15 - A0
#define TFT_MOSI 11 // GP11 - SDA (MOSI, TX)
#define TFT_SCLK 10 // GP10 - SCK
#else // для RP2040 SPI0
#define TFT_CS 5 // GP5 - CS
#define TFT_RST 6 // GP6 - RESET
#define TFT_DC 7 // GP7 - A0
#define TFT_MOSI 3 // GP3 - SDA (MOSI, TX)
#define TFT_SCLK 2 // GP2 - SCK
#endif
// For ST7735-based displays, we will use this call
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
// DS18B20
#include <OneWire.h>
#define Pin_VccDS 20 // DS18B20 - VDD (+3.3V) R 4.7k -[]-
#define Pin_SigDS 21 // DS18B20 - Data R 4.7k ----
OneWire ds(Pin_SigDS);
byte addr[8]; // = {0x28, 0xEC, 0xF0, 0xD5, 0x04, 0x00, 0x00, 0xF2};
volatile float temperature;
uint32_t timing;
uint32_t t1;
uint32_t t2;
void getTemperature()
{
int16_t temp;
t1 = micros();
ds.reset();
ds.select(addr);
ds.write(0xBE); // Считывание значения с датчика
temp = (ds.read() | ds.read() << 8); // Принимаем два байта температуры
temperature = (float)temp / 16.0; // round((float)temp / 16.0);
ds.reset();
ds.write(0xCC); // Обращение ко всем датчикам
ds.write(0x44); // Команда на конвертацию
t2 = micros();
}
void setup(void) {
Serial.begin(115200);
Serial.print(F("Hello! ST77xx TFT Test"));
// TFT LED
pinMode(29, OUTPUT);
digitalWrite(29, HIGH); // Led ON
// Use this initializer if using a 1.8" TFT screen:
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
tft.setRotation(1);
tft.setSPISpeed(50000000);
Serial.println(F("Initialized"));
uint32_t times = millis();
times = millis() - times;
Serial.println(times, DEC);
Serial.println("done");
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.print("Temp = ");
// DS18B20
pinMode(Pin_VccDS, OUTPUT);
digitalWrite(Pin_VccDS, HIGH); // DS_VCC ON
label:
ds.reset(); // сброс шины
ds.search(addr); // определение адреса датчика
if (OneWire::crc8(addr, 7) != addr[7])
{ //проверка массива адреса на срц
Serial.println F("CRC ADRESS DS18B20 is not valid!");
goto label;
}
ds.reset(); // сброс шины
ds.select(addr); // выставить адрес
ds.write(0x4E); // разрешение записать конфиг
ds.write(0x7F); // Th контроль температуры макс 128грд
ds.write(0xFF); // Tl контроль температуры мин -128грд
ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение
ds.write(0x7F); // точность 0,5гр = 1F; 0,25гр = 3F; 0,125гр = 5F; 0,0625гр = 7F;
// запросим температуру, считывать будем по таймеру
ds.reset();
ds.write(0xCC); // Обращение ко всем датчикам
ds.write(0x44); // Команда на конвертацию
timing = millis();
}// ******* END SETUP *******
void loop() {
if (millis() - timing > 1000)
{
timing = millis();
getTemperature();
Serial.print(" Temperature = ");
Serial.print(temperature, 3);
tft.setCursor(78, 30);
tft.setTextSize(2);
tft.setCursor(78, 30);
tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK);
tft.print(temperature, 1);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.fillCircle(134, 30, 2, ST77XX_WHITE);
tft.setCursor(138, 30);
//tft.print("°C");
tft.print("C");
}
}
Частотомер, ппм...это пустые слова для меня. Я в реальной жизни ни к ИТ ни к электронике отношения не имею.
Ну сделаю я частотомер на 150мгц - а нахрена он мне?
Аддон от Earle Philhower что-то не нахожу как добраться к RTC?
разобрался, второй вопрос, в часах RTC дата уже была выставлена, в Питоне, при переходе под IDE дата сбросилась на 1970 год, это нормально? Что именно затрагивает RTC и в какой момент?
Появилась в продаже Rasberry PI PICO W на алиэкспрессе, дешевле 1300 не нашёл (с бесплатной доставкой), а стоит ли эта плата этого, тем более что AP+STA она не умеет и число подключений к AP всего 4-ре клиента?
У этого продавца плата без W стоит от 600+. Так что 1300 это оверпрайс. Подождём менее жадных.
я тут подумал, что для большинства применений памяти в 4 метра за глаза, закажу с пяток и таких...
PS за 170 рублей то...
Пока вижу, что если не лезть в дебри, а чисто средствами ардуино IDE всё работает из коробки...
Да, PWM средствами ардуино только до 1 мегагерца...
я тоже, часики через какое-то время сбрасываются если модуль не под питанием
цитата с arduino.cc
This RP2040-based RTC, using ISR for callback function, has no battery backup. Time will be lost when powered down. Examples show how to use NTP-client to update RTC on every start-up.
непонятно, зачем такой RTC ? Если есть возможность получить время по NTP после рестарта - то и RTC никакой не нужен
учитывая потребление в спящем режиме < 2мА то какое нибудь устройство от аккумулятора, периодически просыпающееся, можно замутить.
ЗЫ. Только почитать надо работает ли RTC в sleep mode....
учитывая потребление в спящем режиме < 2мА то какое нибудь устройство от аккумулятора, периодически просыпающееся, можно замутить.
ЗЫ. Только почитать надо работает ли RTC в sleep mode....
пока не окончен роман вопрос остаётся открытым modify или modified )))
ЗЫ языками особо не владею
Зато вчера поймал комбинационную от двух WIFI девайсов аж на 2.52 одно TL-WAS5110G другое UR-354AN4G стоит выключить любой из девайсов помеха пропадает, то-есть сертификация чистой воды фикция и стрижка бабла, всё куплено в официальном магазине...
пока не окончен роман вопрос остаётся открытым modify или modified )))
ЗЫ языками особо не владею
Зато вчера поймал комбинационную от двух WIFI девайсов аж на 2.52 одно TL-WAS5110G другое UR-354AN4G стоит выключить любой из девайсов помеха пропадает, то-есть сертификация чистой воды фикция и стрижка бабла, всё куплено в официальном магазине...
в роутерах стоит настройка страны использования и во многих ее можно менять, что не мешает сертификации. Очень помогает в густо забитых эфиром многоквартирных домах.
в роутерах стоит настройка страны использования и во многих ее можно менять, что не мешает сертификации. Очень помогает в густо забитых эфиром многоквартирных домах.
Меня сейчас другое интересует, можно ли в NRF24 выставить частоту ниже 2400, тогда можно сделать сканер с более широким диапазоном
не так уж ее и много.... на обычный блинк уходит 50Кб из 250 -ти :)
Есть ощущение, что они туда PVM запихали :-)
это не ощущение, это правда жизни...
import machine
import utime
import array, time
from machine import Pin
import rp2
from rp2 import PIO, StateMachine, asm_pio
# LED引脚
led_onboard = machine.Pin(25, machine.Pin.OUT)
# Configure the number of WS2812 LEDs.
NUM_LEDS = 10
@asm_pio(sideset_init=PIO.OUT_LOW, out_shiftdir=PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
# Create the StateMachine with the ws2812 program, outputting on Pin(23).ws2812引脚
sm = StateMachine(0, ws2812, freq=8000000, sideset_base=Pin(23))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
time.sleep_ms(200)
print("red")
for j in range(0, 20):
for i in range(NUM_LEDS):
ar[i] = j<<8
sm.put(ar,8)
time.sleep_ms(50)
print("green")
for j in range(0, 20):
for i in range(NUM_LEDS):
ar[i] = j<<16
sm.put(ar,8)
time.sleep_ms(50)
print("blue")
for j in range(0, 100):
for i in range(NUM_LEDS):
ar[i] = j
sm.put(ar,8)
time.sleep_ms(5)
print("white")
for j in range(0, 100):
for i in range(NUM_LEDS):
ar[i] = j<<16 + j<<8 + j
sm.put(ar,8)
time.sleep_ms(100)
# while True:
led_onboard.value(1)
utime.sleep(.3)
led_onboard.value(0)
utime.sleep(.3)
Нет, если применять ее только с setTextColor - еще туда сюда. А если для каждого пикселя цветного изображения, то 3 деления на пиксель - не многовато ли?
Чем стандартный подход не устраивает?
И еще: вопросы работы с цветным экраном имеют вполне своеобразную специфику, притом, специфика эта не зависит от используемого контроллера. Не лучше ли для таких вопросов завести отдельную тему?
Т.е. какое отношение вообще имеет кодировка цвета к контроллеру RPi?
Ну и касательно специфики контроллера: коль скоро мы используем достаточно мощный контроллер, не следует ли подумать об использовании 18-разрядного цвета, который поддерживается большинством цветных экранов, вместо 16-разрядного?
поясните, особо копать интернет времени между укладкой кафеля и дописыванием скетча сканера не было, нашел, как кодируется цвет у Adafruit_GFX (а я использую эту библиотеку), решил в лоб, видимо есть более изящное решение...
PS можно написать в одну строку, только код сожрёт памяти на 100 байт больше...
несколько изменил китайский блинк в составе поставляемого модуля )))
import machine
import utime
import array, time
from machine import Pin
import rp2
from rp2 import PIO, StateMachine, asm_pio
# LED引脚
led_onboard = machine.Pin(25, machine.Pin.OUT)
# Configure the number of WS2812 LEDs.
NUM_LEDS = 10
@asm_pio(sideset_init=PIO.OUT_LOW, out_shiftdir=PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
# Create the StateMachine with the ws2812 program, outputting on Pin(23).ws2812引脚
sm = StateMachine(0, ws2812, freq=8000000, sideset_base=Pin(23))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
time.sleep_ms(200)
print("red")
for j in range(0, 20):
for i in range(NUM_LEDS):
ar[i] = j<<8
sm.put(ar,8)
time.sleep_ms(50)
print("green")
for j in range(0, 20):
for i in range(NUM_LEDS):
ar[i] = j<<16
sm.put(ar,8)
time.sleep_ms(50)
print("blue")
for j in range(0, 100):
for i in range(NUM_LEDS):
ar[i] = j
sm.put(ar,8)
time.sleep_ms(5)
print("white")
for j in range(0, 100):
for i in range(NUM_LEDS):
ar[i] = j<<0 + j<<1 + j<<0
sm.put(ar,8)
time.sleep_ms(100)
# while True:
led_onboard.value(1)
utime.sleep(.3)
led_onboard.value(0)
utime.sleep(.3)
поясните, особо копать интернет времени между укладкой кафеля и дописыванием скетча сканера не было, нашел, как кодируется цвет у Adafruit_GFX (а я использую эту библиотеку), решил в лоб, видимо есть более изящное решение...
PS можно написать в одну строку, только код сожрёт памяти на 100 байт больше...
Байт в байт, что ещё раз доказывает, что компиляторы пишут умные люди )))
PS на досуге подвигаю шашечки, посмотреть как в этом случае логичекое И работает, благодарю
Разобрался, Хитро однако! Буду знать...мне простительно, я не настоящий сталевар )))
вопрос больше не про Pico, а про Си. Пытаюсь перевести весь код на C++ рельсы, все подравнял, почти все модули компилируются норм, осталась одна ошибка
In file included from C:\RP2040\pico-sdk\src\common\pico_binary_info\include/pico/binary_info.h:28,
from C:\RP2040\pico-examples\sockmodem\w5500pico.cpp:7:
C:\RP2040\pico-examples\sockmodem\w5500pico.cpp: In function 'void initSPIw5500()':
C:\RP2040\pico-sdk\src\common\pico_binary_info\include/pico/binary_info/code.h:94:5: error: narrowing conversion of '-1939523574' from 'int' to 'uint32_t' {aka 'long unsigned int'} [-Wnarrowing]
94 | }
| ^
C:\RP2040\pico-sdk\src\common\pico_binary_info\include/pico/binary_info/code.h:35:44: note: in definition of macro 'bi_decl'
35 | #define bi_decl(_decl) __bi_mark_enclosure _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.keep.", __used);
| ^~~~~
C:\RP2040\pico-sdk\src\common\pico_binary_info\include/pico/binary_info/code.h:134:54: note: in expansion of macro '__bi_encoded_pins_with_func'
134 | #define bi_4pins_with_func(p0, p1, p2, p3, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI
| ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p2) << 17) | ((p3) << 22) | ((p3) << 27))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\RP2040\pico-examples\sockmodem\w5500pico.cpp:240:17: note: in expansion of macro 'bi_4pins_with_func'
240 | bi_decl(bi_4pins_with_func(PICO_DEFAULT_SPI_RX_PIN, PICO_DEFAULT_SPI_TX_PIN, PICO_DEFAULT_SPI_SCK_PIN, PICO_DEFAULT_SPI_CSN_PIN, GPIO_FUNC_SPI));
-вот описание макроса
/**
* Declare some binary information that will be included if the contain source file/line is compiled into the binary
* \ingroup pico_binary_info
*/
#define bi_decl(_decl) __bi_mark_enclosure _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.keep.", __used);
На плате ESP32-WROOM-32U как-то совсем плохо.... не находит ничего.
видимо антенны совсем пло... да ее вовсе нет! :)
ну ты оригинал, эту плату без антенны подключать нельзя, чип сожжёшь...
если поделишься кодом, могу собрать на аналогичной плате макетик и показать. что у меня...
Микротик находит порядка 90 сетей )))
эту плату без антенны подключать нельзя, чип сожжёшь...
да ну, телевизор без антенны не сгорает же
если поделишься кодом,
Чтобы не загромождать ветку расписал подробно в исходном сообщении #248
эту плату без антенны подключать нельзя, чип сожжёшь...
да ну, телевизор без антенны не сгорает же
если поделишься кодом,
Чтобы не загромождать ветку расписал подробно в исходном сообщении #248
присоединюсь к словам WDRAKULA...
Приятель, мастер спорта на УКВ кстати, попросил роутер недорогой, из наличия был только Длинк с вайфаем с наружными антеннами, через неделю привозит, говорит не работает и греется, где антенны говорю...а мы их не ставили...сразу выкинули...
Матерился я долго но внутри себя )))
Свои балалайки значит без антенны включать нельзя, сразу сгорают, а заводские можно?
"Умом Россию не понять"
присоединюсь к словам WDRAKULA...
вот честно - ему верю, а тебе нет. Ибо ты неоднократно показал. что даже в том, в чем ты разбираешься - путаник ты большой.
По сути спорить не буду, мои познания в радио даже не нулевые, а отрицательные. Но думаю, что сам чип (в смысле микроконтроллер) у меня пока не сгорел, ибо на команды отвечает.
вот это не поможет?
https://github.com/khoih-prog/EthernetWebServer
вот это не поможет?
https://github.com/khoih-prog/EthernetWebServer
да не....я с регистрами и вообще с w5500 давно достаточно работаю, сложного ниче нет. А вот DNS работать не хочет
ioLibrary_Driver/Internet/DNS at master · Wiznet/ioLibrary_Driver · GitHub
то ли я че то не догоняю, то ли лыжи (библиотека) не едут. Ошибка на парсинге ответа от DNS сервера.
Update: починил.
HTTP Client Pico RP2040 на втором ядре с иcпользованием библиотек Wiznet W5500
-
-
понеслась))
RP2040-Zero
скорость -чтения записи на LittleFS
==> Time to write 64KB in 1b chunks = 1428 milliseconds = 45.89 KB/s
Reading 64K file in 1-byte chunks
==> Time to read 64KB in 1b chunks = 223 milliseconds = 293.88 KB/s
done
Загрузил бибилиотеку ADAFRUIT ST7735, взял тестовый скеч, контроллер добавлять не стал, поправил пины на avr и ОНА ПРОСТО РАБОТАЕТ!!!
Есть предположение. что большинство библиотек будут работать из коробки...
Плату в аддоне выбираю GENERIC RP2040 (параметры ставлю по плате)
Спрошу еще раз! в Linux из IDE у кого-то работает загрузка в RP2040???
UBUNTU22 ежели что
Произошла ошибка при загрузке скетча
/home/user/snap/arduino/70/.arduino15/packages/rp2040/tools/pqt-openocd/1.4.0-c-0196c06/bin/openocd: error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory
error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory
во всяком случае он же черным по русски пишет - не загружена библиотека HID - думаю надо переустановить драйвера и/или запустить.
error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory
во всяком случае он же черным по русски пишет - не загружена библиотека HID - думаю надо переустановить драйвера и/или запустить.
на одном под 1.8.9 одолел, на другом под 1.8.19 делал ручками символические ссылки, модули к ядру добавлял после, надо попробовать переустановить аддон)))
Аддон от Earle Philhower. лежит тут. Инструкция по установке в описании.
к сожалению инструкция не рассматривает установку аддона в системе работающей под LINUX (в частности UBUNTU)
До установки аддона надо установить недостающие модуля ядра:
1. sudo apt update
2. sudo apt install libhidapi-hidraw0
Далее по обычной схеме
Смотрю образец скетча для TFT, вижу - #if defined(ARDUINO_FEATHER_ESP32)...
А как плата Generic RP2040 определена? Сходу не нашёл
По частотомеру, наивно полагал, что я один тут Д'Артаньян, идею частотомера не выдавал
оказывается всё давно придумано до нас )))
Влад все верно обьяснил, меня что-то заклинило на длине периода. А если считать число импульсов, то код элементарный. Вспоминаю, что весной я сам выкладывал тут в какой-то ветке ссылку на библиотеку частотомерадо 8 Мгц на обычной уно с точностью в сотню герц.
на нано у меня реализовано в генераторе для катушки Мишина, почитал, что люди делают на расбери пико, это просто космос, мы тут все в песочнице )))
мы тут все в песочнице )))
пиши про себя :)
мы тут все в песочнице )))
пиши про себя :)
я давно возле Айти с 1976 года, право имею оценить ...взгляд сталевара со стороны...
PS есть такая профессия - критик )))
PPS а камень действительно очень хорош, но параметры искусственно сильно занижены, внутри он значительно получше, надо бы у Юрия Панчула поинтересоваться, он в теме по этим ядрам
PPPS частотомер без внешнего обвеса с 20 ppm это уже более чем индикатор, а к примеру частотомер, на основе фазового детектора с диапазоном до 150 мегагерц использующий в качестве одного из сигналов PWM?
Недаром и такой успех, 2 миллиона продаж за столь короткое время
ST7735 проверить, SPI0 или SPI1:
DS18B20 и ST7735 (набросок)
Частотомер, ппм...это пустые слова для меня. Я в реальной жизни ни к ИТ ни к электронике отношения не имею.
Ну сделаю я частотомер на 150мгц - а нахрена он мне?
Аддон от Earle Philhower что-то не нахожу как добраться к RTC?разобрался, второй вопрос, в часах RTC дата уже была выставлена, в Питоне, при переходе под IDE дата сбросилась на 1970 год, это нормально? Что именно затрагивает RTC и в какой момент?
Появилась в продаже Rasberry PI PICO W на алиэкспрессе, дешевле 1300 не нашёл (с бесплатной доставкой), а стоит ли эта плата этого, тем более что AP+STA она не умеет и число подключений к AP всего 4-ре клиента?
У этого продавца плата без W стоит от 600+. Так что 1300 это оверпрайс. Подождём менее жадных.
У этого продавца плата без W стоит от 600+. Так что 1300 это оверпрайс. Подождём менее жадных.
я тут подумал, что для большинства применений памяти в 4 метра за глаза, закажу с пяток и таких...
PS за 170 рублей то...
Пока вижу, что если не лезть в дебри, а чисто средствами ардуино IDE всё работает из коробки...
Да, PWM средствами ардуино только до 1 мегагерца...
Появилась в продаже Rasberry PI PICO W на алиэкспрессе, дешевле 1300 не нашёл (с бесплатной доставкой), а стоит ли эта плата этого
ты можешь получить ровно то же самое, причем даже с тем же софтом - если возьмешь к Пике за 170р внешний ЕСП32 за 250
Да, PWM средствами ардуино только до 1 мегагерца...
PWM средствами СДК это всего несколько строк. Вот, к примеру, ШИМ на 2 МГц со скважностью 50%
только разрешение такого ШИМ получается всего 64
PS код на скорую руку, могут быть опечатки. Однако выдрано из реального проекта, где этот код работает
Update: - поправил код, а то в первый раз не все скопировал
нашел с вайфаем с доставкой за 800 рублей
нашел с вайфаем с доставкой за 800 рублей
Там с WiFi за ~1600 руб. Смотри внимательнее
WEB сервер
-
-
RTC проверил, через полдня после отключения часики идут нормально, что там за батарейка такая???
нашлись пины куда батарейку цеплять?
я в даташите не нашел :(
RTC проверил, через полдня после отключения часики идут нормально, что там за батарейка такая???
нашлись пины куда батарейку цеплять?
я в даташите не нашел :(
я тоже, часики через какое-то время сбрасываются если модуль не под питанием
я тоже, часики через какое-то время сбрасываются если модуль не под питанием
цитата с arduino.cc
This RP2040-based RTC, using ISR for callback function, has no battery backup. Time will be lost when powered down. Examples show how to use NTP-client to update RTC on every start-up.
непонятно, зачем такой RTC ? Если есть возможность получить время по NTP после рестарта - то и RTC никакой не нужен
непонятно, зачем такой RTC ?
учитывая потребление в спящем режиме < 2мА то какое нибудь устройство от аккумулятора, периодически просыпающееся, можно замутить.
ЗЫ. Только почитать надо работает ли RTC в sleep mode....
непонятно, зачем такой RTC ?
учитывая потребление в спящем режиме < 2мА то какое нибудь устройство от аккумулятора, периодически просыпающееся, можно замутить.
ЗЫ. Только почитать надо работает ли RTC в sleep mode....
к примеру анализатор спектра )))
Modyfi
забавно :))
Старею однако )))
Modified
пока не окончен роман вопрос остаётся открытым modify или modified )))
ЗЫ языками особо не владею
Зато вчера поймал комбинационную от двух WIFI девайсов аж на 2.52 одно TL-WAS5110G другое UR-354AN4G стоит выключить любой из девайсов помеха пропадает, то-есть сертификация чистой воды фикция и стрижка бабла, всё куплено в официальном магазине...
пока не окончен роман вопрос остаётся открытым modify или modified )))
ЗЫ языками особо не владею
Зато вчера поймал комбинационную от двух WIFI девайсов аж на 2.52 одно TL-WAS5110G другое UR-354AN4G стоит выключить любой из девайсов помеха пропадает, то-есть сертификация чистой воды фикция и стрижка бабла, всё куплено в официальном магазине...
в роутерах стоит настройка страны использования и во многих ее можно менять, что не мешает сертификации. Очень помогает в густо забитых эфиром многоквартирных домах.
в роутерах стоит настройка страны использования и во многих ее можно менять, что не мешает сертификации. Очень помогает в густо забитых эфиром многоквартирных домах.
Меня сейчас другое интересует, можно ли в NRF24 выставить частоту ниже 2400, тогда можно сделать сканер с более широким диапазоном
WEB сервер
А вот использовать LAN8720 без разгона процессора по видимому не получится...
WEB сервер
А вот использовать LAN8720 без разгона процессора по видимому не получится...
а зачем такие скорости на МК?
это не ощущение, это правда жизни...
Для библиотеки Adafruit_GFX есть правленный форк для чипа RP2040...
Описание кодировки цвета и не только доступно тут
Онлайн подбор цвета можно сделать тут
Фунция перевода в нужный нам формат может быть такой:
Применение:
Для библиотеки Adafruit_GFX есть правленный форк для чипа RP2040...
Описание кодировки цвета и не только доступно тут
Онлайн подбор цвета можно сделать тут
Фунция перевода в нужный нам формат может быть такой:
Применение:
Нет, если применять ее только с setTextColor - еще туда сюда. А если для каждого пикселя цветного изображения, то 3 деления на пиксель - не многовато ли?
Чем стандартный подход не устраивает?
И еще: вопросы работы с цветным экраном имеют вполне своеобразную специфику, притом, специфика эта не зависит от используемого контроллера. Не лучше ли для таких вопросов завести отдельную тему?
Т.е. какое отношение вообще имеет кодировка цвета к контроллеру RPi?
Ну и касательно специфики контроллера: коль скоро мы используем достаточно мощный контроллер, не следует ли подумать об использовании 18-разрядного цвета, который поддерживается большинством цветных экранов, вместо 16-разрядного?
Немножечко странная функция перевода.
поясните, особо копать интернет времени между укладкой кафеля и дописыванием скетча сканера не было, нашел, как кодируется цвет у Adafruit_GFX (а я использую эту библиотеку), решил в лоб, видимо есть более изящное решение...
PS можно написать в одну строку, только код сожрёт памяти на 100 байт больше...
несколько изменил китайский блинк в составе поставляемого модуля )))
Немножечко странная функция перевода.
поясните, особо копать интернет времени между укладкой кафеля и дописыванием скетча сканера не было, нашел, как кодируется цвет у Adafruit_GFX (а я использую эту библиотеку), решил в лоб, видимо есть более изящное решение...
PS можно написать в одну строку, только код сожрёт памяти на 100 байт больше...
Байт в байт, что ещё раз доказывает, что компиляторы пишут умные люди )))
PS на досуге подвигаю шашечки, посмотреть как в этом случае логичекое И работает, благодарю
Разобрался, Хитро однако! Буду знать...мне простительно, я не настоящий сталевар )))
вопрос больше не про Pico, а про Си. Пытаюсь перевести весь код на C++ рельсы, все подравнял, почти все модули компилируются норм, осталась одна ошибка
-строка
-ошибка
-вот описание макроса
-вот весь код из SDK
не могу понять откуда компилятор берет -1939523574
или как вариант откомпилировать эту строку в Си без плюсов, но не могу найти что завернуть в условие