|
|
  |
Передача данных в ATtiny13 |
|
|
|
May 14 2007, 02:40
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Программирование в IAR. Так как в ATtiny13 ни каких аппаратных интерфейсов нет, то приходится делать всё самому. Делаю трех проводную связь (наверное, можно более оптимально сделать, но пока так). ……………………………….. #include <ioavr.h> #include <inavr.h>
unsigned int Byte = 0; extern unsigned int ByteEx = 0; struct { unsigned Bt1 : 1; unsigned Bt2 : 1; unsigned Bt3 : 1; unsigned Bt4 : 1; };
void main( void ) { Bt1 = 1; Bt2 = 1; Bt3 = 0; Bt4 = 1;
DDRB = 0x03; // 00 0011 PORTB = 0x3C; // 11 1100 __enable_interrupt();
while (1) { if (PINB_Bit2 == 0) { if (Bt4) { Byte = 0; Nbit = 0; Bt4 = 0; } if (PINB_Bit4 == 0 && Nbit < 8) { if (Bt2) { PORTB_Bit1 = 1;
// if (PINB_Bit3) Byte = 127;//|= (1 << Nbit);
Nbit++; } Bt2 = 0; } else { PORTB_Bit1 = 0; Bt2 = 1; } if (Nbit == 8) Bt3 = 1; } else { if (Bt3) { // ByteEx = Byte; Bt4 = 1; } Bt3 = 0; } } } ………………………………..
Пин 2 это Chip Select, пин 4 – Data Clock, пин 3 – данные. Если передаю большие значения, больше 40 – 50 (точно границу не отлавливал), то всё принимается нормально, если меньше, то идут сбои в тактировании битов, периодические объединения битов (виден четкий период). Пин 1 специально ввёл для теста. Также для теста закомментировал проверку бита данных (if (PINB_Bit3)) и установку константы в переменную данных. С константой ситуация не изменилась. Переменные объявлял и как unsigned int, и как unsigned char. Два дня бьюсь, не могу понять, в чём дело. Помогите разобраться.
|
|
|
|
|
May 15 2007, 06:50
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
А вы родные APP Notes http://www.atmel.com/dyn/products/app_note...p?family_id=607смотрели там например есть AVR274: Single-wire Software UART (14 pages, revision A, updated 03/07) This application note describes a software implementation of a single wire UART. The protocol supports half duplex communication between two devices. The only requirement is an I/O port supporting external interrupt and a timer compare interrupt. AVR305: Half Duplex Compact Software UART (9 pages, revision C, updated 09/05) This Application Note describes how to implement a polled software UART capable of handling speeds up to 614,400 bps on an AT90S1200. AVR320: Software SPI Master и т.д.
|
|
|
|
|
May 16 2007, 08:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008

|
Человеку надо принимать данные, т.е. нужен слейв, а слейвы программно труднее делать чем мастеры.
2Oleg_IT у вас тут не 3х проводной интерфейс, а 2х проводной Chip select не в счет. Я делал программный 3х проводной интерфейс, аналог 3-wire применяемый в еепром AT93C56, там сигналы clk, data_in, data_out делал и мастер и слейв, на слейве заводил сигнал clk на внешнее прерывание и по прерыванию считывал данные с data_in и передавал на data_out. скорость правда не большая у меня, примерно 7кбит/сек, но у меня применено 5-кратное считывание данных, для защиты от помех, если этого не делать то можно скорость увеличить.
--------------------
|
|
|
|
|
May 17 2007, 00:29
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(GDI @ May 16 2007, 16:34)  Человеку надо принимать данные, т.е. нужен слейв, а слейвы программно труднее делать чем мастеры.
2Oleg_IT у вас тут не 3х проводной интерфейс, а 2х проводной Chip select не в счет. Я делал программный 3х проводной интерфейс, аналог 3-wire применяемый в еепром AT93C56, там сигналы clk, data_in, data_out делал и мастер и слейв, на слейве заводил сигнал clk на внешнее прерывание и по прерыванию считывал данные с data_in и передавал на data_out. скорость правда не большая у меня, примерно 7кбит/сек, но у меня применено 5-кратное считывание данных, для защиты от помех, если этого не делать то можно скорость увеличить. Спасибо за подсказку. Общий смысл понятен. Неясность по поводу помех. У вас длинная линия? Откуда помехи? У меня всё на одной плате, расстояние между МК не более 3 см., думаю помех не будет.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|