Например TDA7294

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

Текущее время: Пт июл 25, 2025 23:45:32

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


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



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 17 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Последовательний ввод
СообщениеДобавлено: Пн авг 15, 2011 21:34:53 
Прорезались зубы

Карма: 1
Рейтинг сообщений: -15
Зарегистрирован: Пт авг 27, 2010 18:05:09
Сообщений: 209
Рейтинг сообщения: 0
Подскажите как на СЯх для Пика сделат последовательний ввод даних с одной ножки, те считать 8 бит в одну перемену.
П.С. Лутше кусок кода влепите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Пн авг 15, 2011 22:57:55 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Как-то примерно так.
Код:
char var=0, i;
for (i=0;i<8;i++){
var <<= 1;
   if( RB0 ) var |=0x01;
}
Циклично двигаем переменную и, в зависимости от состояния порта (в данном случае это RB0), устанавливаем 0-вой бит в переменной.


Последний раз редактировалось Аlex Пн авг 15, 2011 22:58:47, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Пн авг 15, 2011 22:58:44 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
На прерываниях или в цикле? Подразумеваем, что синхронизация есть?

Если поддерживаются прерывания от ножек, то можно сделать так:

Код:

//код в прерывании от ножки синхронизации

bit_count++;

if (bit_count==8)
{
  //если все приняли - обнуляем счетчик бит и уведомляем основную программу, что готово
  bit_count=0;
  byte_received=byte_temp;
  byte_temp=0;
  status|=BYTE_RECEIVED;
}
else
{
  if ([если на приемной ножке "1"])
    byte_temp|=(1<<bit_count);

  bit_count++;
}



В цикле можно так:

Код:

temp_byte=0;
bit_count=0;

while (bit_count<8)
{
  if ([на ножке синхронизации "1"])
    temp_byte|=(1<<bit_count);

  bit_count++;
}

byte_received=byte_temp;
status|=BYTE_RECEIVED;

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Вт авг 16, 2011 21:15:15 
Прорезались зубы

Карма: 1
Рейтинг сообщений: -15
Зарегистрирован: Пт авг 27, 2010 18:05:09
Сообщений: 209
Рейтинг сообщения: 0
Спасибо взял на заметку конструкцию, но повидиму у вас ХАй ТИЧ, а у меня ССЗ компилятор, что та вроде такова:
Код:
for (i=1;i<=7;++i)
 {
output_high (PIN_A1);
output_low (PIN_A1);
if(!input(PIN_A2))
bit_set (kode,i);
 }

Правда ищо сиро, без защити, но работаю над етим.
без вас ненайшолби инструкцию по работе из битами (но можт найшол но очен долго би искал).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Вт авг 16, 2011 21:24:48 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Поинтересуйтесь протоколом 1Wire. Ему для двухстороннего обмена хватает одной ноги МК.
Поищите либы к нему. :)

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Вт авг 16, 2011 22:00:05 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Спасибо взял на заметку конструкцию, но повидиму у вас ХАй ТИЧ, а у меня ССЗ


Это Вы мне? Я писал, вообще не привязываясь к компилятору.

Цитата:
output_high (PIN_A1);
output_low (PIN_A1);


- плохой стиль, ибо компиляторозависимо. Правильнее

Код:
//set bit
var|=bitmask;
//clear bit
var&=~bitmask;
//test bit
if (var & bitmask)
  ...


это будет работать везде без переделок.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Вт авг 16, 2011 23:06:19 
Прорезались зубы

Карма: 1
Рейтинг сообщений: -15
Зарегистрирован: Пт авг 27, 2010 18:05:09
Сообщений: 209
Рейтинг сообщения: 0
Да я вам. У моево компилятора нету таких операторов в справке от я и сделал вивод что увас другой компилятор. А что чтото не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Ср авг 17, 2011 22:46:49 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
У моево компилятора нету таких операторов в справке


Так дело как раз в том, что это (битовые операции) стандарт не компилятора, а самого языка С, потому, естесственно, в справке к компилятору описывать их нет необходимости. И работать это будет везде, потому что это обязаны поддерживать все компиляторы. А вот использовать компиляторо-зависимые конструкции типа output_ххх() - плохой стиль, потому что это будет работать только в одном компиляторе и препятствовать портируемости.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Чт авг 18, 2011 13:44:09 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
То есть, стандартные битовые (атомарные) операции не влияют на портируемость кода.
К этому если ещё добавить условную компиляцию и директивы #define для регистров периферии, то такой код можно даже на ARM портировать почти без изменений.

ЗЫ: Если не прав, поправьте.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Чт авг 18, 2011 20:58:54 
Прорезались зубы

Карма: 1
Рейтинг сообщений: -15
Зарегистрирован: Пт авг 27, 2010 18:05:09
Сообщений: 209
Рейтинг сообщения: 0
А можно какойнибуд хелп по етим операциям для пиков.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Чт авг 18, 2011 21:22:01 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
нет си для пиков, си для авр и си для арм.
Си - он и в африке си, только черный.
Существует отдельный бонус в отдельных компиляторах (хм, уже легче перечислить, где этого бонуса нет :) )
где существует понятие - булевая переменная в принципе и вместо PORTB |=(1<< 3); пишут PORTB.3=1;
Как бы вот
http://electronix.ru/forum/index.php?ac ... t&id=30242
только конкатенация работает не на всех компиляторах, не злоупотребляйте
ага, еще вспомнил
http://www.pic24.ru/doku.php/articles/m ... mic_access
Наслаждайтесь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Пт авг 19, 2011 12:37:01 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
хелп по етим операциям для пиков.


Почитайте про битовые операции в любой книжке по С. Работать они будут и на PIC, и на AVR, и на ARM, и точно так же на x86. Это - стандарт С.

А вот всякие PORTB.3=xxx стухнут при переезде на другой компилятор.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Пт авг 19, 2011 16:06:44 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
YS писал(а):
А вот всякие PORTB.3=xxx стухнут при переезде на другой компилятор.

Полностью согласен. Когда я выбирал себе компилятор, то я этот CV AVR сразу же отбросил и остался на WinAVR.
Мне сразу не понравилось это:
Код:
PORTA.2 = 0;

Уж лучше так:
Код:
//C
PORTA&=~(1<<PA2);
//Аналог на АСМе
cbi PORTA, 2

А условия по приёму с пина - вообще красота. :)
Код:
//C
if ((PINA & (1<<PA2)) == 1){...}
//Аналог на АСМе
sbis PINA, 2

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Пт авг 19, 2011 16:30:28 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
var|=bitmask;
y |= (1<<x)
Это будет работать на всех компиляторах, в том числе и на CV

PORTB.3=1;
Это костыль для начинающих и им самим решать, использовать его или нет.

OFFTOP ON
Библиотеки в разных компиляторах разные. И если нужна 100% портируемость, тогда пишите сами все библиотеки. Тогда и не будет проблем при переезде с компилятора на компилятор.
Вспомните так же про прерывания и их объявление. В разных компиляторах разное. и т.д.

Дебаты какой компилятор лучше никогда ни к чему не приводят. Каждый работает на том, на чем нравится/привык.

Если тема про лучший код или полную контролируемость, нужно и асм вспомнить.

На каждом углу кричат Windows must die, а на линуксе редко кого из кричащих увидишь :)))
OFFTOP OFF


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Пт авг 19, 2011 16:41:05 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Я вообще стараюсь от языков высокого уровня держаться подальше.
Большая часть проектов у меня на ассемблере. :) На Си у меня только те проекты, которые сложно реализовать на АСМе за короткий срок. :)

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Пт авг 19, 2011 18:04:32 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Дебаты какой компилятор лучше никогда ни к чему не приводят.


Дыг мы не об этом вовсе. :) Мы о том, что фичи всех компиляторов хороши, но стандарт С лучше. :)

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Последовательний ввод
СообщениеДобавлено: Сб авг 20, 2011 09:57:30 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
+1


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 17 ] 

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


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

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


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

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


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