Зеленые - входы АЦП. И не я эту тему поднял.
Меня интересует подключение РВ10-11, а то что волны пошли - я не виноват!!!
и что? Вы на основании цвета сделали вывод, что он толерантны к 5в?
про толерантность - вы, не юлите
Если вас интересует, как поднять на этих пинах вторую шину I2c - смотрите комментарии в примере i2c_scanner.ino, там все расписано:
/* Example pinmap for Bluepill I2Cs (by Testato)
I2C-1 standard pins: PB7(sda) PB6(scl)
Use it by "Wire" without pin declaration
Wire.begin();
I2C-1 alternative pins: PB9(sda) PB8(scl)
Remap the first I2C before call begin()
Wire.setSDA(PB9);
Wire.setSCL(PB8);
Wire.begin();
I2C-2: PB11(sda) PB10(scl)
Remap the second I2C before call begin()
Wire.setSDA(PB11);
Wire.setSCL(PB10);
Wire.begin();
If you want to use the two I2Cs simultaneously, create a new instance for the second I2C
TwoWire Wire2(PB11,PB10);
Wire2.begin();
*/
Спасибо огромное, наконец-то мелькнул свет в туннеле… Т.е. программка частотомера будет выглядеть примерно так:
//что-то про дисплей
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
Wire.setSDA(PB11);
Wire.setSCL(PB10);
boolean lst_sig, osc_st ;
uint32_t counter = 0, fintime, currenttime = 0;
const int sig_pin=12, osc_pin=2;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup(){
Wire.begin();
lcd.init();
lcd.backlight();
pinMode(sig_pin, INPUT) ;
// pinMode(osc_pin, OUTPUT) ;
}
void loop(){
counter = 0 ;
lst_sig=digitalRead(sig_pin) ; fintime = millis()+1000 ;
if ((fintime+1) < millis()) {delay(1100) ; goto start ;}
while (millis()<fintime) {
// osc_st=!osc_st ; digitalWrite(osc_pin,osc_st) ;
if (digitalRead(sig_pin)!=lst_sig) {counter++ ; //lst_sig=!lst_sig ;
}
lcd.setCursor(0, 0);
lcd.print("frequency=");
lcd.print(counter/2);
delay(2000) ;
}
//это я синим светодиодом и осциллографом пробовал возможности lgt8 как частотомера, но чем хороша Ардуино - минимальной привязкой к железу.
Завтра почитаю ссылку повнимательней.
@ЛИУС-2 , неужели Вы не заметили, что вставленный Вами код выглядит совсем не так, как вставленный другими участниками форума?
Исправляйтесь. Иначе окажется, что фейс-контроль на форум Вы не прошли.
И, кстати, программка должна выглядеть несколько иначе. Но указать, где именно, я затрудняюсь, т.к. в Вашем коде нет номеров строк.
Не хочу устраивать срач, но напоследок еще раз отмечу: выходы I2C-2 только толерантные, но не ШИМ и не АЦП, если картинка не врёт!
И предлагаю больше не касаться того, что не касается I2C-2.
Но вроде бы этот вопрос прояснился…
Спасибо за участие!
Пардон, забыл про ```
Про АЦП никто и не говорит, а вот ШИМ на них можно настроить. Для контроллеров STM32 характерно, что одну и ту же функциональность можно приписать разным пинам. Это называется pin remaping.
Вот например, то что I2c-1 можно поднять и на PB6 PB7, и на PB8 PB9 - это как раз пример ремаппинга. Точно также и ШИМ часто можно “сдвинуть” на другие пины.
Ок, замечание по теме - ваш код в #24 неверный, я думаю он даже компилироваться не будет
абсолютно с Вами согласен, я аппаратный ШИМ и не использовал
///...
++pila ; //ШИМ инкремент (байт) ....for...
digitalWrite(cur_out,((signal>pila) ? HIGH : LOW)) ; // как-то так, и всех делов...
Причем сразу на дюжину ног в цикле,
но меня интересовала оптимизация.
2 выходных дня по 3 часа потратил впустую на поиски в интернете, пока добрые и умные люди на Форуме не подсказали…
Я уж не знаю, оптимизация или нет, но пишется короче:
digitalWrite(cur_out, signal > ++pila) ; // как-то так, и всех делов...
Я писал вчера как черновик, сегодня подправил, пустил на компиляцию - и был разочарован:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
void setup(){
// Wire.setSDA(PB11); когда комментируем предложенные
// Wire.setSCL(PB10); строки, компилятор
//предупреждает о возможной несовместимости, но
//срабатывает.
Wire.begin();
lcd.init();
lcd.backlight();
//...
}
ПРЕДУПРЕЖДЕНИЕ: библиотека LiquidCrystal_I2C должна запускаться на архитектурах avr и может быть несовместима с вашей платой на архитектуре STM32F1.
Скетч использует 16948 байт (25%) памяти устройства. Всего доступно 65536 байт.
Глобальные переменные используют 2192 байт (10%) динамической памяти, оставляя 18288 байт для локальных переменных. Максимум: 20480 байт.
а когда они являются частью скетча, имеем
Несколько библиотек найдено для “Wire.h”
Используется: C:\Users\Aleksey\AppData\Local\Arduino15\packages\stm32duino\hardware\STM32F1\2022.9.26\libraries\Wire
Не используется: C:\Users\Aleksey\AppData\Local\Arduino15\packages\stm32duino\hardware\STM32F1\2022.9.26\libraries\WireSlave
exit status 1
‘class TwoWire’ has no member named ‘setSDA’
(Причём содержимое папок разное и даты 19 и 20 года, в то время как Арду на этот комп я ставил в конце 23-го.)
И откуда появился ‘class TwoWire’ ?
Все особенности аддона stm32 описаны в wiki. Про i2c здесь API · stm32duino/Arduino_Core_STM32 Wiki · GitHub
Он всегда там был. Это класс, к которому относится объект Wire.
А насчет ошибок - у вас какой пакет поддержки Стм32 установлен - от Stm или аддон Кларка?
И вообще, рановато видно, вам лезть в использование второй шины i2c, если вы сами не догадались открыть исходный текст библиотеки Wire, и посмотреть откуда там взялся этот класс.
Я конечно прошу пардону, но именно поэтому я и обратился за помощью к знатокам. А Ардуино я устанавливал по инструкции с одного из сайтов - отвечал ОК! И что она мне напихала - ХЗ! Вот уж что совершенно точно - так что с моими знаниями проще в китайской грамоте разобраться. Но не моя вина, что советы профессионалов годятся псу под хвост.
Auf Wiedersehen!
b707, я восхищаюсь вашим терпением.
Есть только один сайт GitHub - stm32duino/Arduino_Core_STM32: STM32 core support for Arduino
Остальные вторичны.
Вы только так кредиты не берите, а то ведь потом не расплатитесь.
Да мне-то чо, это ж ему дальше с этим жить, не мне