Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.01.2011, 20:19  
ua3gdw
Частый гость
 
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
ua3gdw на пути к лучшему
Вопрос Вопрос по FT245R

Для подключения к компьютеру некоторого устройства использую микросхему FT245R. С компьютера передаю 5 байт группами по 1 байту.
Нога RXF микросхемы FT245R подключена к одному из входов порта микроконтроллера. Соответственно "0" на этой ноге запускает прерывание в микроконтроллере.
Вопрос в следующем. "0" на RSX появляется только один раз при поступлении в буфер FT245R первого байта и далее уровень на этой ноге не изменяется пока буфер не прочитан? Или как-то иначе? Вообще может кто детально описать алгоритм чтения данных из буфера FT245R? Даташит читал (как смог по английски) - не помогло. Пытаюсь эти 5 байт сложить в одно число и не получается.
Реклама:
ua3gdw вне форума  
Непрочитано 12.01.2011, 02:01  
akimych
Прописка
 
Регистрация: 02.01.2011
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 32 раз(а) в 28 сообщении(ях)
akimych на пути к лучшему
По умолчанию Re: Вопрос по FT245R

Из этого как-то не совсем понятно
Цитата:
When high, do not read data from the FIFO. When low, there is data available in the FIFO which can be read by strobing RD# low, then high again.
можно подумать, что на RXF# будет 0, пока есть данные в буфере.
Но судя по "FT245R FIFO READ Timing Diagrams" из даташита получается, что RXF# должно переходить в 1 после 0-›1 на RD# минимум на 80нс.
Т.е. получается, что ловим прерывание, ставим 0 на RD#, читаем данные, ставим 1 на RD#, выходим. Сразу получаем следующее прерывание и т.д. Ну это, как вариант.
Может быть лучше читать все 5 байт сразу. Но тут еще надо сделать, чтоб не ловить лишнее прерывание при выходе и т.п. Это уже зависит от конкретного уст-ва, как там правильно этот обрабочик написать.
akimych вне форума  
Непрочитано 12.01.2011, 03:58  
_Serg_
Прописка
 
Регистрация: 05.03.2010
Сообщений: 173
Сказал спасибо: 28
Сказали Спасибо 70 раз(а) в 49 сообщении(ях)
_Serg_ на пути к лучшему
По умолчанию Re: Вопрос по FT245R

вандерфул... такого я на казусе еще не видел...Возможно капча была не зря...
_Serg_ вне форума  
Непрочитано 12.01.2011, 04:08  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Вопрос по FT245R

видать- не помогает и капча... Двойную может сделать?
OlegNZH вне форума  
Непрочитано 12.01.2011, 05:03  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Вопрос по FT245R

Сообщение от akimych Посмотреть сообщение
Но судя по "FT245R FIFO READ Timing Diagrams" из даташита получается, что RXF# должно переходить в 1 после 0-›1 на RD# минимум на 80нс.
Т.е. получается, что ловим прерывание, ставим 0 на RD#, читаем данные, ставим 1 на RD#, выходим. Сразу получаем следующее прерывание и т.д
Я тоже так думаю, что если есть в FIFO непрочитанные данные, RXF# переходит в ноль и остаётся в нуле. Как только очередной байт прочитан, RXF# прыгает в 1, и если есть ещё данные, то через время не более 80нс снова прыгает в ноль. Видимо, это время 80нс необходимо FT245R для внутреннего сдвига данных в FIFO и принятия решения, все ли данные прочитаны.
То есть читаем байты из FIFO пока RXF#=0, надо только делать паузу не меньше 80нс после чтения и последующей проверкой RXF# на ноль. Старт чтения можно делать по прерыванию, в процедуре обработчика прерывания читаем все данные, проверяя RXF# и сбрасывая флаг установки прерывания перед чтением.

Последний раз редактировалось Yurkin2007; 12.01.2011 в 05:25.
Yurkin2007 вне форума  
Непрочитано 12.01.2011, 06:00  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Вопрос по FT245R

Сообщение от ua3gdw Посмотреть сообщение
С компьютера передаю 5 байт группами по 1 байту.
Как пишет производитель микросхем FTDI, по USB данные передаются пакетами, размер пакета 64 байта, из них 2 байта - служебные, 62 байта - собственно данные. Если в USB порт на компьютере записан только 1 байт, то система ждёт время тайм-аут 1мс, и по истечении этого времени передаёт практически пустой пакет с одним байтом данных. На приёмной стороне по приходу пакета нога RXF# прыгает в ноль, после чтения одного байта RXF# перейдёт в единичку и там и останется.
Если Вы успеваете записать 5 байтов в USB порт на компе за время меньшее, чем тайм-аут между записями байтов, то все Ваши байты улетят в одном пакете. По приходу данные сохранятся в FIFO, нога RXF# будет прыгать в ноль соотвественно 5 раз: первый раз по приходу пакета, потом ещё 4 раза после чтения байтов.

Последний раз редактировалось Yurkin2007; 12.01.2011 в 06:07.
Yurkin2007 вне форума  
Непрочитано 12.01.2011, 13:56  
ua3gdw
Частый гость
 
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
ua3gdw на пути к лучшему
По умолчанию Re: Вопрос по FT245R

Сообщение от Yurkin2007 Посмотреть сообщение
На приёмной стороне по приходу пакета нога RXF# прыгает в ноль, после чтения одного байта RXF# перейдёт в единичку и там и останется.
С одним байтом так и работает. Сегодня проверил.

Сообщение от Yurkin2007 Посмотреть сообщение
По приходу данные сохранятся в FIFO, нога RXF# будет прыгать в ноль соотвественно 5 раз: первый раз по приходу пакета, потом ещё 4 раза после чтения байтов.
Т.е каждый байт как бы стробируется нулём на RXF#?
ua3gdw вне форума  
Непрочитано 12.01.2011, 15:55  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Вопрос по FT245R

Стробируется - неудачное слово. Предположим, Вы послали 5 байтов на устройство, но ни одного байта в Вашем устройстве пока не прочитали. Ждёте, там, чего-то, типа, заняты ... Потом глянули: Ба !, а RXF# нога-то в нуле ! Данные какие-то пришли .. Хорошо, прочитали байт из FT245R. Снова проверили ногу. А она опять в нуле ! Прочитали второй байт .. И так далее, пока нога RXF# не успокоится в единичке ...
Yurkin2007 вне форума  
Непрочитано 12.01.2011, 19:10  
ua3gdw
Частый гость
 
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
ua3gdw на пути к лучшему
По умолчанию Re: Вопрос по FT245R

Ага, спасибо! Пока в буфере есть данные RXF# в нуле. Сегодня поэксперементировал. Послал в МК 5 байт. Далее по "0" на RXF# в цикле пока RXF# = 0 все их прочитал.
Ещё вопрос. Как мне четыре байта из пяти принятых поместить в одну переменную размером в 32Бит? Не часто пишу на С и не силён в сдвигах и логических операциях.
В программе на компьютере переменную на байты раскладываю так:

Код:
procedure TafMainForm.RsButton1Click(Sender: TObject);
var
  dwData: DWORD;
 begin
  { Код команды. }
  FT_Out_Buffer[0] := 1;

  dwData := StrToIntDef(Edit1.Text, 0);
  FT_Out_Buffer[0] := dwData;

  { Четыре байта данных. }
  FT_Out_Buffer[1] := dwData;
  FT_Out_Buffer[2] := dwData shr 8;
  FT_Out_Buffer[3] := dwData shr 16;
  FT_Out_Buffer[4] := dwData shr 24;

  { Размер буфера 5 байт. }
  Write_USB_Device_Buffer(5);
end;
ua3gdw вне форума  
Непрочитано 12.01.2011, 20:52  
ua3gdw
Частый гость
 
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
ua3gdw на пути к лучшему
По умолчанию Re: Вопрос по FT245R

Делаю вот так:

unsigned long data;

...
data = (usb_data[3] ‹‹ 24) | (usb_data[2] ‹‹ 16) | (usb_data[1] ‹‹ 8 ) | usb_data[0];

Компилятор HI-TECH выдаёт предупреждение о смещении в лишнии 16 Бит.
Микроконтроллер PIC16F72.
ua3gdw вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интересный вопрос - два усилителя к одной нагрузке eCAH Аудиотехника 45 14.10.2010 01:23
Вопрос по блоку питания... El-Shang Источники питания и свет 13 19.11.2009 17:35
Вопрос По Tas5414a (Входной модуль) C-r-o-w Аудиотехника 0 08.11.2009 18:11
Вопрос про удаленное управление питанием ResolveR Автоматика и аппаратура связи 8 02.09.2008 08:57


Часовой пояс GMT +4, время: 05:10.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot