Например TDA7294

Форум РадиоКот • Просмотр темы - Простейшая передача данных на ATtiny13
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб дек 20, 2025 18:39:42

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Ср мар 13, 2013 21:28:15 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 13, 2012 21:42:49
Сообщений: 34
Рейтинг сообщения: 0
Добрый вечер. Вот понадобилось мне реализовать простейшую одностороннюю передачу данных на этих тиньках (в будущем по радиоэфиру). Всё бы хорошо, да вот приёмная часть не работает. Метод передачи простейший, и не думаю что самый лучший. Код в архиве, критикуйте :)


Вложения:
radiocmd.rar [43.51 KiB]
Скачиваний: 350
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Чт мар 14, 2013 00:02:45 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Ха..... точно также 2-мя тиньками, моделировал в протеусе, как-то раньше.....
http://asis-kbr.ru/forum/viewtopic.php?f=11&t=122
Глянь, мож какие мысли пригодятся.....

Изображение

Если что, вот код передатчика
Спойлер
Код:
//#######################################################################################################################
// включаемые файлы
#define F_CPU 9600000
#include <util/delay.h>
#include <avr/io.h>

//дефайны
#define PORT_TRANSMIT PORTB
#define PIN_TRANSMIT (1<<0)

#define PORT_LED PORTB
#define LED_STBY (1<<2)
#define LED_CTRL (1<<4)

#define PORT_KEY PINB
#define PIN_KEY (1<<1)

//прототипы функций
void Transmit (void);

//глобальные переменные
unsigned long TransmitData;

//#######################################################################################################################
//Главная функция
int main (void)
{
    
//инициализация портов
    
DDRB =     (LED_CTRL)|(LED_STBY)|(PIN_TRANSMIT);//линии на вывод
    
PORTB PIN_KEY;                            //подтяжка
    
    // главный цикл
    
while(1)
    {
        if (!(
PORT_KEY PIN_KEY))
        {
            
PORT_LED |= LED_STBY;
            
Transmit ();
            
_delay_ms(500);
            
PORT_LED &= ~LED_STBY;
        }
    }
}

//передача серии 25 бит
void Transmit (void)
{
    
TransmitData=(0b11111111UL<<17)|(0b00000000UL<<9)|(0b01010101UL<<1); //разбил по бпйтам для наглядности

    
for (unsigned char i=0i<25i++)
    {
        if (
TransmitData & (1UL<<(24-i)))
        {
            
//передача бита 1 
            
PORT_TRANSMIT |= PIN_TRANSMIT;
            
_delay_us(450);
            
PORT_TRANSMIT &= ~PIN_TRANSMIT;
            
_delay_us(130);
        }
        else
        {
            
//передача бита 0
            
PORT_TRANSMIT |= PIN_TRANSMIT;
            
_delay_us(160);
            
PORT_TRANSMIT &= ~PIN_TRANSMIT;
            
_delay_us(420);
        }
    }
}
 


Вложения:
pg1.jpg [59.24 KiB]
Скачиваний: 2110
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Чт мар 14, 2013 19:46:24 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 13, 2012 21:42:49
Сообщений: 34
Рейтинг сообщения: 0
Почему частота вызова была выбрана 20кГц?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Чт мар 14, 2013 21:32:55 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Может подойдет:
https://sites.google.com/site/waynehold ... n-attiny10


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Чт мар 14, 2013 23:19:04 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
AndreaZzZ писал(а):
Почему частота вызова была выбрана 20кГц?

Потому что я декодировал сигнал не с помощю внешнего прерывания с линии сигнала, а с помощю анализа линии в прерывании от таймера\счетчика с частотой вызова в 10 раз больше чем частота сигнала (частота декодируемого сигнала ок 2 КHz, соотв-но анализируем линию с частотой 20 KHz).

Кстати благодаря этому, сигнал можно подавать на любую ножку контроллера, а не только на вход внешнего прерывания.....

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Пт мар 15, 2013 10:48:56 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 13, 2012 21:42:49
Сообщений: 34
Рейтинг сообщения: 0
У вас случаем не стоит CLKDIV8? А то я уже горю повторить конструкцию =)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Пт мар 15, 2013 13:07:19 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Частота приемника 9 600 000 Гц, т.е. делитель выключен.
Если включить делитель, боюсь на Си не будет успевать обрабатывать прерывание 20 КГц.....

А в передатчике без разницы, там просто в проекте надо указать действительную частоту 9 600 000 или 1 200 000

Кстати для вас могу упростить программу.
Т.к. я ориентировался на конкретные пульты, то под них и написал, а вообще, если подразумевается передатчик на тиньке (т.е. со своим форматом команд), то можно упростить намного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Пт мар 15, 2013 14:47:08 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Как решена проблема нестабильности частоты? Ведь встроенные RC-генераторы могут давать +-10% при стабильном питании... это в ATTINY45 встроенный генератор калиброван, а у 13-й нет.

Делал что-то подобное, прием на тиньке с частотой 48К работает на 4.8Мгц. формат передачи старт-стоп импульсы и 4 информационных бита обеспечивает терпимость к разности частот до 10% дополнительный алгоритм подстройки частоты по первому импульсу дает еще 10%. При этом держит 4 канала 8-битного программного ШИМ с частотой заполнения те же 48К.

Если мастер был бы стабилизирован кварцем, можно было бы еще реализовать долговременную подстройку коррекции частоты RC-генератора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Пт мар 15, 2013 15:44:02 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 13, 2012 21:42:49
Сообщений: 34
Рейтинг сообщения: 0
shads писал(а):
если подразумевается передатчик на тиньке (т.е. со своим форматом команд), то можно упростить намного

Намного на сколько, а точнее как? Да, передатчик самодельный.
Alexeyslav писал(а):
это в ATTINY45 встроенный генератор калиброван, а у 13-й нет

Посмотрите тех. документацию: http://www.atmel.com/Images/doc8126.pdf
Алгоритм подстройки частоты по первому импульсу? Можно поподробнее?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Пт мар 15, 2013 16:55:33 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Alexeyslav писал(а):
Как решена проблема нестабильности частоты? Ведь встроенные RC-генераторы могут давать +-10% при стабильном питании... это в ATTINY45 встроенный генератор калиброван, а у 13-й нет.
Если говорить о USART то да, там стабильность важна, малейшее расхождение - и последние биты в байте, съезжают на соседние тайм слоты.
Но в радиопередаче никогда не применяют USART, там всегда используется кодирование с синхронизацией каждого бита. (Единственное, вроде есть радиомодули с передачей в эфир USART-а, но я с ними дела не имел). А так - возьмите например любой радиобрелок, там используется либо частотное либо фазовое кодирование (манчестер). Да взять те же ИК пульты - тоже применяется либо частотное либо фазовое кодирование.....

Итак, раз мы синхронизируем каждый бит, то совершенно четко можно определить в радиосигнале, где бит начался, а где он закончился. Если кодирование подобно такому как на картинке, то значение бита определяем по соотношению длительностей положительной полуволны и отрицательной. Остается только обозначить программе допустимые пределы длительности бита.
Изображение

Например: бит передается в течение 1ms. Тогда можно на приемной стороне, разрешить обрабатывать биты с длительностью от 0,5 до 1,5 ms. Что соответствует разбросу частот +/- 50%. Все что выходит за эти рамки будет считаться ошибкой.
Т.е. даже если передатчик уводит сигнал на 10%, и еще приемник тоже добавляет свои 10%, то это в итоге - всего 20% ухода частоты..... а у нас допустимо до 50%..... Вот вам и решение проблемы нестабильности частоты. )))))


Вложения:
sh1.jpg [7.3 KiB]
Скачиваний: 2136
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Сб мар 16, 2013 00:04:51 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Это хорошо когда нет помех...
И надо еще успевать обрабатывать данные(измерять длительность, сравнивать с эталоном) в промежутках между приемом отдельных бит. Иногда на это нет времени.

Цитата:
Алгоритм подстройки частоты по первому импульсу? Можно поподробнее?

Перед передачей пакета данных передается импульс с известной длительностью, приемник измеряет её и в зависимости от результатов табличным методом корректирует частоту с которой принимаются данные. Одновременно этот импульс является сигналом к началу приема данных.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Сб мар 16, 2013 07:57:10 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Alexeyslav писал(а):
Это хорошо когда нет помех...
Ну.... если есть помехи, то с ними справляется только двусторонняя радиосистема.
Я много раз сталкивался, когда фирменные радиосистемы не работают, пока не подойдеш в упор к приемнику (из за помех)..... Так что тут никуда не дется. Какой бы принцип кодирования не был, помехи мешают приемнику. Тут надо либо расстояние сокращать, либо мощность передатчика увеличивать, либо частоту менять на более чистую.
(У меня несколько раз были случаи, что на 433МГц не устойчиво работали радиосистемы, приходилось менять на комплекты, работающие на 800МГц)

Alexeyslav писал(а):
Перед передачей пакета данных передается импульс с известной длительностью, приемник измеряет её и в зависимости от результатов табличным методом корректирует частоту с которой принимаются данные. Одновременно этот импульс является сигналом к началу приема данных.
А если вместо этого импульса помеха похожая проскочит? Или например перед импульсом проскочила помеха, и добавила длины первому импульсу.... Как в таких случаях действует программа?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейшая передача данных на ATtiny13
СообщениеДобавлено: Сб мар 16, 2013 12:18:17 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Очень мала вероятность такой помехи. Если она приплюсуется и изменит длительность на +-20% - импульс забракуется и дальнейшие данные будут приниматься на одной из крайних скоростей(если отклонение будет слишком большое - скорости не совпадут и данные будут искажены). При коротких вариациях длительности ничего плохого не будет. Синхронизация каждые 4 бита дает устойчивость к 10% изменения скорости(+-5%)
Этот алгоритм призван подстроить скорость приема так что мы попадаем как можно ближе к центру в тот самый интервал +-5% скорости. Можно не реагировать на одиночные отклонения скорости а вести статистику по последним 8 измерениям(учитывая успешность приема) и брать среднюю скорость.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y