Irinka
26.Июль.2023 18:17:54
1
Здравствуйте.
Имею “голую” 328 атмегу с кварцем 8 МГц.
Заливаю загрузчик MiniCore
Далее Скетч - Загрузить через программатор
#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.
В чём может быть дело?
С фьюзами беда, поди. Коммандира в пост призывать нужно.
Irinka
26.Июль.2023 18:23:05
3
Когда стоял кварц на 16, я заливала загрузчик UNO, тоже самое
Irinka
26.Июль.2023 18:49:19
4
Замкнула ресет ардуино на gnd и всё ок…
Мне кажется никогда так не делала и всё работало…А может и делала…Паника отменяется.
Доброй ночи.
SAB
26.Июль.2023 19:16:17
5
Не надо использовать в софтовом сериале пины хардового сериала.
1 лайк
ua6em
27.Июль.2023 10:44:32
7
видимо не хватило питания чтобы перезагрузиться через DTR
Irinka
28.Июль.2023 15:03:25
8
Я использовала ардуино нано в качестве uart переходника, чтобы смотреть в мониторе порта что отправляет атмега328, при этом не замкнула ресет на землю у ардуино нано.
ua6em
28.Июль.2023 15:08:46
9
понятно, значит раньше притягивали резет
SAB
28.Июль.2023 16:14:27
10
Так ресет то в нормальном состоянии всегда к плюсу притянут. Или что то изменилось? UART переходник от чего к чему? Что вообще он делает в вашей схеме?
Irinka
28.Июль.2023 17:56:23
11
Я с помощью ардуино нано смотрела что отправляет атмега328(с другой платы) .
Irinka
28.Июль.2023 17:59:11
12
Ну да, поэтому и не работала плата как Usb ttl конвертер, получается.
Irinka
08.Август.2023 09:28:47
13
Спойлер
//#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;
}
В протеусе код работает. В реальности получаю ??? в мониторе порта. В чём проблема?
Irinka:
В чём проблема?
Может надо подключать TX => RX ?
Irinka
08.Август.2023 09:56:37
15
У меня замкнут пин RESET на землю, на схеме указала.
Значит TX ардуино это пин RX usb микросхемы.
Указанный код заработал на скорости 74880 бод
Green
08.Август.2023 10:11:29
16
Путём сложных арифметических подсчётов получаем: 74800 / 9600 = ?
BOOM
08.Август.2023 11:28:36
17
Attiny13 от 1.2МГц тактируется?
Green
08.Август.2023 16:19:48
19
А Записать Загрузчик было?
Вот для того и нужен led blink - что бы визуально наблюдать частоту.
Irinka
08.Август.2023 16:43:57
20
Да. Я сначала записала загрузчик, потом загрузила скетч.