Памятка для повторного использования.
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 с минимальным числом переходных отверстий на два слоя. На один к сожалению не влезло. Вот как выглядит результирующий девайс с прошивкой.
Момент моделирования и отладки:
В собранном виде: