Выводы PB0-2 на промикре это SPI.
Так что цифровые выводы придётся сдвинуть как не крути. И сдвинуть их проще на PB4-6.
При этом в коде менять минимум.
А что с УАРТом не так?
В коде про него ни слова нет.
И о порте D тоже.
Если хочешь с UART работать не средствами arduino ide, точнее библиотеки оттуда, то вот это почитай:
https://alex-exe.ru/radio/avr/avr-uart/
Но зачем он тебе?
Включи порт на котором диод на микре и мигай им как принят пакет. Ну чтоб видеть что происходит по началу.
Потом прикручивай уже usb.
В принципе тебе надо всего 3 ноги изменить для промикры. Или одну если обвес ещё из двух микрух не нужен.
И посмотри скорость кварца, а то в коде стоит 16 мегагерц.
При прошивке ардуино иде вообще можно это из кода убрать.
PS. Вот нормальный пример работы с uart.
Стоит заметить что скорость зависит от частоты тактирования проца
Цитата:
define F_CPU 8000000 // Рабочая частота контроллера
#define BAUD 9600L // Скорость обмена данными
#define UBRRL_value (F_CPU/(BAUD*16))-1 //Согластно заданной скорости подсчитываем значение для регистра UBRR
#include <avr/io.h>
#include <util/delay.h>
void init_USART() {
UBRRL = UBRRL_value; //Младшие 8 бит UBRRL_value
UBRRH = UBRRL_value >> 8; //Старшие 8 бит UBRRL_value
UCSRB |=(1<<TXEN); //Бит разрешения передачи
UCSRC |=(1<< URSEL)|(1<< UCSZ0)|(1<< UCSZ1); //Устанавливем формат 8 бит данных
}
void send_UART(char value) {
while(!( UCSRA & (1 << UDRE))); // Ожидаем когда очистится буфер передачи
UDR = value; // Помещаем данные в буфер, начинаем передачу
}
int main(void)
{
init_USART(); //инициализация USART в режиме 9600/8-N-1
send_UART(0x53); //посылаем ASCII код знака 'S'
send_UART(0x2D); //посылаем ASCII код знака '-'
send_UART(0x45); //посылаем ASCII код знака 'E'
while(1)
{
_delay_ms(1000);
}
}
|