Памятка для повторного использования.

1. ATTiny13A и вывод информации через UART

Данный микроконтроллер весьма полезен при решении небольших и не сложных задач, имеет небольшой объем оперативной памяти. Но не хватает вывода информации для отладки. Поэтому в сети было найдено решение, программный UART.

[https://github.com/bayrepo/embedded_avr/blob/master/attiny13a/uart_program/main.c](исходный код)

В программе рассчет на F_CPU=9600000, скорость передачи информации 9600. Передающая ножка PB4.

Внимание - используется Timer0!

Пример собран c источников: https://habr.com/ru/post/250995/ и http://we.easyelectronics.ru/AVR/uart-programmnyy-na-atiny13a.html.

2. ATTiny45 и i2C slave программный

Второй интересный пример. Реализации I2C slave на ATTiny45, вначале хотел этот же код для ATTiny13A но там не хватило памяти. Для подключения в своей программе достаточно включить в проект файлы: https://github.com/bayrepo/embedded_avr/blob/master/attiny45/i2c_slave/TWI.c и https://github.com/bayrepo/embedded_avr/blob/master/attiny45/i2c_slave/TWI.h

В TWI.h настроить:

/*! \brief Definition of pin used as SDA. */
#define SDA PB2

/*! \brief Definition of pin used as SCL. */
#define SCL PB0

/*! \brief Definition of 7 bit slave address. */
#define SLAVE_ADDRESS 0x12

И в main функции сделать:

int main(void)
{
    sei();   //!< Enable global interrupts.
    twi_slave_init();
    twi_slave_enable();
    while (1)
    {
        _delay_ms(100);
    }
}

Ссылка на main.c файл пример https://github.com/bayrepo/embedded_avr/blob/master/attiny45/i2c_slave/main.c

Частота F_CPU=8000000.

Используются прерывания, поэтому sei обязательно:

/*! \brief Interrupt service routine for negative egde on SDA
 */
ISR(INT0_vect) {
  volatile unsigned char retval;

  if(TWSR == I2C_IDLE)
  {
    GetStartCondition();
  }

  //!Call the TWi state machine
  TWI_state_machine();
  CLEAR_TWI_INTERRUPT_FLAG();
  ENABLE_TWI_INTERRUPT();

}

Таймеры не используются.

Пример прошивки для ATMega8, где собраны UART прием, I2C master

Монитор данных по I2C и UART для вывода на экран. Используется для отображения промежуточной и отладочной информации от микроконтроллеров. Прошивка пердусматривает: 1) прием по UART 9600 2) прием по шине I2C 3) вывод информации на дисплей mt-12864j

В исходниках есть проект для KiCad 5, схема и разводка. Разводка выполнена во FreeRoute с минимальным числом переходных отверстий на два слоя. На один к сожалению не влезло. Вот как выглядит результирующий девайс с прошивкой.

Момент моделирования и отладки:

Дисплей со списком подключенных устройств

Вывод переменных от выбранного устройства

Экран вывода данных по UART

В собранном виде: собранная схема

Добавить комментарий

Следующая запись Предыдущая запись