Программный serial.

Veter753

✩✩✩✩✩✩✩
8 Окт 2024
45
1
Attiny44.
Аппаратного Uart-а нет.
Нужно использовать програмный.
В ядре
имеется встроенная библиотека , которая выводит в Serial данные с тиньки.
TX с Attiny44 идёт на Nano-RXю
Пробовал любые сочетания скоростей в скетче и в мониторе порта, а ткаже все доступные частоты прошивки тиньки от 1 мГц, до 8 Мгц.
Всегда или почти всегда пмонитор порта печатает квадраты.
Светодиод RX ардуины моргает, что означает о поступлении каких то данных, но монитор печатает квадратики и больше ничего.

Может есть какой то алгоритм для синхронизации скоростей отправки и приёма данных. Тыкался долго с разными скоростями. Результата нет вообще. И нет даже какого то продвижения кудато. Просто либо есть квадратики, либо их нет.
Код для проверки serial:
void setup() {
}

void loop() {
Serial.begin(9600);
Serial.println("Hello there");
}
 

bort707

★★★★★★✩
21 Сен 2020
3,295
958
Подключить логический анализатор и он покажет, если там данные Сериал и на какой скорости
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
746
182
void setup() { } void loop() { Serial.begin(9600); Serial.println("Hello there"); }
Если это весь ваш код, а не какой-то кусочек откуда-то выдранный, то не удивительно что не работает. Обычно с программным serial'ом делают по другому
C++:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(пин Rx, пин Тх);
void Setup ()
{
mySerial.begin(Скорость);
mySerial.println("Hello, world?");
}
void loop()
{

}
 

Veter753

✩✩✩✩✩✩✩
8 Окт 2024
45
1
Обычно с программным serial'ом делают по другому
Да, но это как раз необычный случай

Вот что пишет по этому разработчик ядра на своем ресурсе в Гитхабе конкретно для тиньки44:

Поддержка UART (последовательного)
Аппаратного UART нет. При использовании внутреннего генератора может потребоваться его калибровка, чтобы приблизить скорость к требуемой для связи по UART. В ядро встроен программный последовательный порт Serial, который использует выводы аналогового компаратора для прерывания аналогового компаратора, чтобы избежать конфликтов с библиотеками и приложениями, требующими PCINT. TX — это AIN0, RX — AIN1. Несмотря на то, что он называется Serial, он всё же является программной реализацией, поэтому нельзя отправлять и принимать данные одновременно. Можно использовать библиотеку SoftwareSerial; если она используется одновременно со встроенным программным последовательным портом, то только один из них может отправлять или принимать данные одновременно (если вам нужно использовать оба порта одновременно или отправлять и принимать данные одновременно, необходимо использовать устройство с аппаратным UART). Хотя не следует стремиться к очень высокой скорости передачи данных через программный последовательный порт, существует также минимальная скорость передачи данных.

Хотя TX по умолчанию равен AIN0,


То есть мы видим что в ядре реализован свой Serial и отдельно поддерживается стандартный Softserial.

Образец кода взял из ответов на вопросы из обсуждения в подтверждение того, что речь именно про Serial begin ..., а не SoftSerial begin...

Serial в отличие от Softseriala адаптирован к тиньке и жрет в разы меньше ресурсов. Потому и выбор пал на него пока. И даже с Softserialom будут теже вопросы по синхронизации скоростей.
 
Изменено:

Veter753

✩✩✩✩✩✩✩
8 Окт 2024
45
1
Подключить логический анализатор
Я имел ввиду это:
"При использовании внутреннего генератора может потребоваться его калибровка, чтобы приблизить скорость к требуемой для связи по UART. "

Как калибровать внутренний генератор?
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
746
182
По моему вы тянете быка на баню
реализован свой Serial
Как бы вы не хотели, но это и есть программный последовательный порт.
Можно использовать библиотеку SoftwareSerial
Почему-то вы упорно отказываетесь от этого совета.
 

Veter753

✩✩✩✩✩✩✩
8 Окт 2024
45
1
По моему вы тянете быка на баню

Как бы вы не хотели, но это и есть программный последовательный порт.
Он программный, но синтаксис именно тот который в моем коде. А тот, который предложили вы это второй программный сериал. Стандартный.
То есть в ядре используется два программных сериала.
Один стандартный для всех. Другой адаптированный, который я пытаюсь использовать.
 

Bruzzer

★★★★✩✩✩
23 Май 2020
694
214
Как калибровать внутренний генератор?
Написано в даташите. "OSCCAL – Oscillator Calibration Register"
Прежде чем калибровать, желательно проверить, что это требуется. Т.е измерить текущую частоту. Или осциллогафом если есть. Или секундомером измерив длинный delay()
 
  • Лойс +1
Реакции: Veter753

Veter753

✩✩✩✩✩✩✩
8 Окт 2024
45
1
сначала даташит
Чудным образом все заработало на скорости 4800. Прошивал на 1 МГц с указанием при прошивке (tx only). Мне такой режим и нужен.
Может это и сыграло роль.
Всем кто ответил в теме спасибо.
 

Veter753

✩✩✩✩✩✩✩
8 Окт 2024
45
1
написано, что при 1 МГц 9600 будет работать "может быть".
Там много чего написано. Не работает ничего кроме одного режима, который описал выше.
1 мгц, ТХ онли, 4800 скорость.
Может чип какой то кривой, может еще что то.
 

Veter753

✩✩✩✩✩✩✩
8 Окт 2024
45
1
Ваш код, что ещё можно проверять.
И какой смысл проверять код, компилируя его нановским ядром, когда я компилирую ядром attinycore для мк attiny44?
У вас serial будет аппаратный. У меня при том же синтаксисе будет программный.
То есть один и тот же код, а результат будет совсем другим.
 
Изменено: