"Вопросительные знаки" от Atmega328P 8MHz при подключении по Uart

Здравствуйте.
Имею “голую” 328 атмегу с кварцем 8 МГц.
Заливаю загрузчик MiniCore
image
Далее Скетч - Загрузить через программатор

#include <SoftwareSerial.h>

#define RX 3
#define TX 2
SoftwareSerial DEBUGGING(RX, TX);


void setup() {
  DEBUGGING.begin(9600);
}

void loop() {
  DEBUGGING.println("Start");
  delay(1000);
  DEBUGGING.println(123);
  delay(1000);
}

Пины
#define RX 3
#define TX 2
подключены к TX RX ардуины.
Скорость 9600.
В мониторе порта получаю вопросительные знаки или квадратики, в зависимости от выбранной скорости.
Атмега питается от 3,8 - 4,0 Вольт, Ардуина от USB (земля естественно общая)
Я пробовала разные скорости в скетче, изначально кварц был на 16, заменила на 8.
В чём может быть дело?

С фьюзами беда, поди. Коммандира в пост призывать нужно.

Когда стоял кварц на 16, я заливала загрузчик UNO, тоже самое

Замкнула ресет ардуино на gnd и всё ок…
Мне кажется никогда так не делала и всё работало…А может и делала…Паника отменяется.
Доброй ночи.

Не надо использовать в софтовом сериале пины хардового сериала.

1 лайк

Я сегодня на расхват ?

видимо не хватило питания чтобы перезагрузиться через DTR

Я использовала ардуино нано в качестве uart переходника, чтобы смотреть в мониторе порта что отправляет атмега328, при этом не замкнула ресет на землю у ардуино нано.

понятно, значит раньше притягивали резет

Так ресет то в нормальном состоянии всегда к плюсу притянут. Или что то изменилось? UART переходник от чего к чему? Что вообще он делает в вашей схеме?

Я с помощью ардуино нано смотрела что отправляет атмега328(с другой платы) .

Ну да, поэтому и не работала плата как Usb ttl конвертер, получается.

Спойлер
//#define F_CPU 9600000

#include <avr/io.h>
#include <util/delay.h>
#include <Arduino.h>

#define SOFT_TX_PIN (1<<PB1) // PB1 будет работать как TXD 
#define SOFT_TX_PORT PORTB
#define SOFT_TX_DDR DDRB


int main (void) {
  uart_tx_init ();

  while (1) {
    int sensor = analogRead(A3);
    num_to_str(sensor, 4);
    uart_print("\r\n");
    _delay_ms(100);
  }

}

void uart_tx_init ()
{
  TCCR0A = 1 << WGM01;
  TCCR0B = 1 << CS01;
  SOFT_TX_PORT |= SOFT_TX_PIN;
  SOFT_TX_DDR |= SOFT_TX_PIN;
  OCR0A = 124;
}

// Функция вывода содержимого переменной
void num_to_str(unsigned int value, unsigned char nDigit)
{
  switch (nDigit)
  {
    case 4:
      uart_send_byte((value / 1000) + '0');
    case 3:
      uart_send_byte(((value / 100) % 10) + '0');
    case 2:
      uart_send_byte(((value / 10) % 10) + '0');
    case 1:
      uart_send_byte((value % 10) + '0');
  }
}

void uart_print(char *str)
{
  byte i = 0;
  while (str[i]) {
    uart_send_byte(str[i++]);
  }
}

//bitbanged UART transmit byte
void uart_send_byte (unsigned char data)
{
  unsigned char i;
  TCCR0B = 0;
  TCNT0 = 0;
  TIFR0 |= 1 << OCF0A;
  TCCR0B |= (1 << CS00);
  TIFR0 |= 1 << OCF0A;
  SOFT_TX_PORT &= ~SOFT_TX_PIN;
  while (!(TIFR0 & (1 << OCF0A)));
  TIFR0 |= 1 << OCF0A;
  for (i = 0; i < 8; i++)
  {
    if (data & 1)
      SOFT_TX_PORT |= SOFT_TX_PIN;
    else
      SOFT_TX_PORT &= ~SOFT_TX_PIN;
    data >>= 1;
    while (!(TIFR0 & (1 << OCF0A)));
    TIFR0 |= 1 << OCF0A;
  }
  SOFT_TX_PORT |= SOFT_TX_PIN;
  while (!(TIFR0 & (1 << OCF0A)));
  TIFR0 |= 1 << OCF0A;
}

В протеусе код работает. В реальности получаю ??? в мониторе порта. В чём проблема?

Может надо подключать TX => RX ?

У меня замкнут пин RESET на землю, на схеме указала.
Значит TX ардуино это пин RX usb микросхемы.
Указанный код заработал на скорости 74880 бод

Путём сложных арифметических подсчётов получаем: 74800 / 9600 = ?

Attiny13 от 1.2МГц тактируется?

image

А Записать Загрузчик было?
Вот для того и нужен led blink - что бы визуально наблюдать частоту.

Да. Я сначала записала загрузчик, потом загрузила скетч.