Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
13.05.2010, 11:09
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Последовательный вывод данных
Здравствуйте, подскажите пожалуйста. Постараюсь описать проблему.
Используемый чип mega16, пишу в CodeVision. Необходимо вывести последовательную передачу данных
в такой форме, ну например число 1011, соответствовало 10 01 10 10. т.е 1 это 10, а 0 это 01.
Скорость передачи данных 42 кбод. Вывод на PIND.5, а на PIND.6 инверсный.
Пробовал реализовать с помощью цикла, получается "грязный" сигнал.
int a=0b001010;
for (i=0;i‹6;i++)
{PORTD.5=(0x0001 & (a››i));
PORTD.6=~PORTD.5;
delay_us(11);
PORTD.5=~PORTD.5;
PORTD.6=~PORTD.5;
delay_us(11); };
Подскажите как можно реализовать с помощью ШИМ.
|
|
|
|
13.05.2010, 11:23
|
|
Вид на жительство
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
|
Re: Последовательный вывод данных
Сообщение от Mitrar
|
PORTD.5=~PORTD.5;
PORTD.6=~PORTD.5;
delay_us(11);
|
Не очень понял, зачем эти стоки у Вас?
По-моему из логики описания Вашего алгоритма они выбиваются.
__________________
Гидравлика + электроника = POWER
|
|
|
|
13.05.2010, 12:45
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Последовательный вывод данных
Число a=0b001010;
я вывожу 0 как 01, т.е. по порядку 0 а потом ~PORTD.5(инвертирую и получается 01).
|
|
|
|
13.05.2010, 13:54
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: Последовательный вывод данных
Я пишу на gcc так что не пинайте!
Мне кажется что вы хотели где то так, хотя я бы сделал на таймере, да и алгоритм мне не по душе:
int a=0b001010;
unsigned char b=0; //Вспомогательная переменная
for (i=0;i!=8;i++)
{
if ((a››b)&0x80) //Сдвигаем а на 0 в первом проходе, в следующих 1 и накладываем маску 0b10000000
//Если значение истинно записываем 1,0
{
PORTD.5=1;
PORTD.6=0;
}
else //иначе записываем 0,1
{
PORTD.5=0;
PORTD.6=1;
}
delay_us(11);
if (PIND.5)PORTD.5=0; //Если значение истинно записываем 0
else PORTD.5=1; //иначе записываем 1
if (PIND.6)PORTD.6=0;
else PORTD.6=1;
delay_us(11);
b=1;
}
Последний раз редактировалось harchenko_pavel; 13.05.2010 в 14:04.
|
|
|
|
13.05.2010, 14:32
|
|
Прописка
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Re: Последовательный вывод данных
непойму, rs485 протокол пытается реолизовать так для этого функции спецальная есть
|
|
|
|
13.05.2010, 16:53
|
|
Вид на жительство
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
|
Re: Последовательный вывод данных
Сообщение от vvkka
|
не пойму, rs485 протокол пытается реализовать так для этого функции специальная есть
|
Мало того для этого специальный драйвер есть.
С такими приколами по-моему кодировка Манчестер работает...Помню делал что-то подобное, но за 1 и 0 у меня были частоты. 2х-тональная модуляция, чтобы передать через аудиотракт радиостанции...
__________________
Гидравлика + электроника = POWER
|
|
|
|
14.05.2010, 05:15
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Re: Последовательный вывод данных
Фактически это RS485, подскажите какая функция есть для RS485.
|
|
|
|
14.05.2010, 07:37
|
|
Вид на жительство
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
|
Re: Последовательный вывод данных
Сообщение от Mitrar
|
Фактически это RS485, подскажите какая функция есть для RS485.
|
Возьмите спец-микросхему, например ADM4851 (~50...60руб), и не заморачивайтесь. Подключаете ее к UART (RX/TX) + 1 вывод на управление направлением (прием/передача) и все! Дальше все намного проще, программно Вы фактически работать будете с UART.
__________________
Гидравлика + электроника = POWER
|
|
|
|
14.05.2010, 11:40
|
|
Прописка
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Re: Последовательный вывод данных
можно еще из серии MAX485---487 стоит копейки, во во и неморочить людям голову, а програмно без дополнительной схемы реолизовать всеравно несможите
|
|
|
|
14.05.2010, 11:57
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Re: Последовательный вывод данных
Да, вы правы max485 как раз должен подойти. Буду разбираться дальше. Спасибо что ответили.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:49.
|
|