реклама на сайте
подробности

 
 
9 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Программная реализация интерфейса
777777
сообщение Apr 12 2011, 07:24
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(stalknr @ Apr 11 2011, 22:04) *
Последовательный интерфейс. По 1 проводу идут данные, по 2 проводу - синхросигнал (Частота 1,25 МГЦ).
Слово данных состоит из 22 разрядов -> 1...6 - адрес (1-младший бит адреса, 6 - старший бит адреса) + 7...22 - данные (7 - младший, 22 - старший).

А почему бы не использовать для этого SPI? И что с этим словом делать дальше?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 12 2011, 08:46
Сообщение #17


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(nk@ @ Apr 12 2011, 08:20) *
Это если у Вас скорость порта заведомо выше скорости поступления данных, но у нас как раз наоборот(1.25Mbit ! против даже 1Мbit c FT-232). Прийдется организовывать FIFO, и по прерываниям с UART забирать данные, либо полингом смотреть статус UART в основном цикле, а это несколько больше одного out sm.gif

Про конкретную скорость UART пока речи не было. Никто не мешает, например, отдавать байт в UART на каждый второй собранный входной байт. Главное, чтобы успевал уходить.

Цитата
На 20 MHz отправить в UART нереально. Т.е. отправить реально, а принять без ошибок, на 115200 - не выйдет.

На 115200 - прекрасно, ошибка менее двух процентов. И на 230400 тоже.
Цитата
Сейчас у мамок com-порты отвратительные, с подстройкой фазы все очень плохо (особенно "радуют" мамки на nForce - чуть в сторону и приехали). Потери - гарантированы.

Ой, ну да ладно страсти-то какие-то рассказывать, а ? Какие-такие "подстройки фазы" ?
К тому же - ну какие тут 115200 (входные по порядок шустрее), когда и 230400 мало. Значит, никаких аппаратных COM, а только USB.


Go to the top of the page
 
+Quote Post
nk@
сообщение Apr 12 2011, 09:51
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Цитата(rx3apf @ Apr 12 2011, 11:46) *
На 115200 - прекрасно, ошибка менее двух процентов. И на 230400 тоже.

Вы возьмите и посчитайте. 115200 вполне достаточно, если правильно организовать обмен. Вы ветку сперва прочитайте, а потом уже высказывайтесь.
Цитата(rx3apf @ Apr 12 2011, 11:46) *
Ой, ну да ладно страсти-то какие-то рассказывать, а ? Какие-такие "подстройки фазы" ?

Вот благодаря таким знаниям, мы имеем неработающие com-порты.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 12 2011, 09:59
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(nk@ @ Apr 12 2011, 13:51) *
Вы возьмите и посчитайте. 115200 вполне достаточно, если правильно организовать обмен. Вы ветку сперва прочитайте, а потом уже высказывайтесь.

А если достаточно, то и тем более нет никаких поводов для беспокойства. В 9-ms паузу такая посылка не уложится, будучи "размазана" на весь принимаемый поток - вполне.

Цитата
Вот благодаря таким знаниям, мы имеем неработающие com-порты.

Я не знаю, какие там неработающие порты _Вы_ имеете, но больше пока никто не жаловался. Вы занимаетесь натуральным сочинительством на ровном месте.
Go to the top of the page
 
+Quote Post
nk@
сообщение Apr 12 2011, 11:16
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Цитата(rx3apf @ Apr 12 2011, 12:59) *
Я не знаю, какие там неработающие порты _Вы_ имеете, но больше пока никто не жаловался. Вы занимаетесь натуральным сочинительством на ровном месте.

Прошу прощения, за резкие слова, день, мля, тяжеловатый выдался cranky.gif
По теме: Я выше писал про FIFO и параллельную обработку итд итп. Если правильно реализовать, то общего времени приема "пачки" данных + время паузы достаточно, для выпихивания всего блока на 115200. FIFO потребуется не менее размера одной "пачки". Если все реализовать тщательно, то должно получится.

С SPI не получится, тк клок внешний, бит 22, а он байт-ориентированный. Было-б 24 бита - самае оно, но увы.

По качеству портов. У меня есть проект, где через com в устройство нужно загрузить firmware порядка 3.5МБ. Там протокольчик дуплексный вопрос-ответ, не я делал.
Так вот у меня, на 2-х компах (чипсет nVidia), это получается через раз. Причина - в этих самых 1-2% отличия скорости (кварц 4МГц). Когда идет обмен с паузами - все хорошо, а вот дуплекс на большом объеме им не под силу. Единственный комп, в котором стоит Intel-овская мама, работает без проблем. Вот такая вечная молодость.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 12 2011, 11:34
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(nk@ @ Apr 12 2011, 14:16) *
Когда идет обмен с паузами - все хорошо, а вот дуплекс на большом объеме им не под силу.


Не сочтите за издевательство, но все-таки осмелюсь спросить, включено-ли у вас управление потоком ? Хотя-бы XON/XOFF ? Описанного вами эффекта лично я не видел никогда. Думаю, что он едва ли возможен, поскольку при получении каждого нового байта (!) приемник пересинхронизируется ...

Сообщение отредактировал kovigor - Apr 12 2011, 11:34
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 12 2011, 11:56
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(nk@ @ Apr 12 2011, 15:16) *
С SPI не получится, тк клок внешний, бит 22, а он байт-ориентированный. Было-б 24 бита - самае оно, но увы.

Это почему? А Вы в Sram разве не байтами будете писать?! И разве SPI не может работать как slave? А уж передовать тем более


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 12 2011, 12:05
Сообщение #23


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(nk@ @ Apr 12 2011, 08:51) *
115200 вполне достаточно, если правильно организовать обмен. Вот благодаря таким знаниям, мы имеем неработающие com-порты

115200 недостаточно, немного не хватает.

Цитата(nk@ @ Apr 12 2011, 10:16) *
С SPI не получится, тк клок внешний, бит 22, а он байт-ориентированный. Было-б 24 бита - самае оно, но увы

Не придумывайте, и с аппаратным SPI , и программно получится принимать на скорости 1.25 Мбод.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 12 2011, 15:13
Сообщение #24


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(nk@ @ Apr 12 2011, 15:16) *
Так вот у меня, на 2-х компах (чипсет nVidia), это получается через раз. Причина - в этих самых 1-2% отличия скорости (кварц 4МГц). Когда идет обмен с паузами - все хорошо, а вот дуплекс на большом объеме им не под силу. Единственный комп, в котором стоит Intel-овская мама, работает без проблем. Вот такая вечная молодость.

Это, простите, ошибка в ДНК. Самая что ни на есть натуральная. Чтобы рассуждать о "качестве" портов и связи этого "качества" с чипсетом, надо иметь хоть минимальные представления о устройстве этих портов (с этим у Вас совсем плохо). А в данном случае у меня лично никаких сомнений, что имела место банальнейшая потеря данных при отсутствии управления потоком. Дуплекс тут вообще не при чем (прием и передача функционально разные части), а вот косвенно влияет (из-за влияния на загрузку процессора при обработке прерываний).
Я-то думал, что Вы нас порадуете какими-то откровениями на предмет PLL и тактировки MIO-чипа, а тут такая банальщина. "У меня не работает, значит и у других не работает". Но Вы первый додумались до влияния чипсета, с чем и поздравляю wink.gif

Цитата(ILYAUL @ Apr 12 2011, 15:56) *
Это почему? А Вы в Sram разве не байтами будете писать?! И разве SPI не может работать как slave? А уж передовать тем более

Изначально разговор был про программную реализацию. SPI slave тоже можно, благо что приемник имеет двойную буферизацию. Байтовую синхронизацию, правда, придется обеспечивать ручками. И границы слов тоже. Но чтобы быстренько все это дело скушать и куда-то отдать - вполне, и 22 бита вместо 24 тут нисколько не помеха. Накладные расходы на сборку-отправку резко сокращаются. А синхронизацией пускай PC занимается. Я так понимаю, что речь о каком-то сниффере протокола, и задача засосать в PC этот самый входной поток. Вариантов реализации по крайней мере два-три...

Сообщение отредактировал rx3apf - Apr 12 2011, 15:13
Go to the top of the page
 
+Quote Post
stalknr
сообщение Apr 12 2011, 15:27
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 19-01-08
Пользователь №: 34 241



Здравствуйте товарищи!!!!
Докладываю голосом!
Длительность 1 разряда = 0,800 мкс
Длительность слова = 22р*0,800мкс=17,6 мкс
Пауза между словами в пачке =11.2 мкс
Количество слов в пачке 33
Длина пачки ==33сл*17.6+32паузы*11.2=580.8мкс+358,6мкс=939,2мкс ну короче 940мкс (по осциллографу)

Далее сам протокол для МАСТЕРА ...ПАУЗА 6*1,28мс \ПАЧКА ПЕРДАЧИ\ пауза 300мкс \ПАЧКА ПРИЕМА\ ПАУЗА 6*1,28мс \ПАЧКА ПЕРДАЧИ\ пауза 300мкс \ПАЧКА ПРИЕМА\ ПАУЗА 6*1,28мс....
В пачке передачи на СЛАВЕ передаются слова с адресами с 0 по 32 + информация
В пачке приема на СЛАВ идут адреса с 33 по 63, 33, 34 для синхронизации СЛАЙВА , а по другой паре проводов (D и С) поступают данные от СЛАЙВА
для слайва ...ПАУЗА 6*1,28мс \ПАЧКА ПРИЕМА\ пауза 300мкс \ПАЧКА ПЕРЕДАЧИ\ ПАУЗА 6*1,28мс \ПАЧКА ПЕРДАЧИ\ пауза 300мкс \ПАЧКА ПРИЕМА\ ПАУЗА 6*1,28мс....

ЦЕЛЬ УСТРОЙСТВА
надо сделать СЛАЙВ и МАСТЕР на 2 контроллерах.
Складывать информацию надо в SRAM МК и потом ее оттуда передавать по UARTу в ПК, ну и наоборот от ПК по UARTу в SRAM по МК
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 12 2011, 17:32
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(rx3apf @ Apr 11 2011, 23:02) *
Ну что-то типа:
b7_0:
sbis port,synch
rjmp b7_0
ori acc1,$80
b7_1:
sbic port,synch
rjmp b7_1
b6_0:
sbis port,synch
rjmp b6_0
ori acc1,$40
b6_1:
sbic port,synch
rjmp b6_1
.....

Ни че не понял! кроме ORI нет ниче!? т.е. всегда будет 0xFF?
Или я ни че не понял или надо вот так:
Код
  ldi acc1,0
b7_0:
sbis port,synch
rjmp b7_0
sbic port,bit_IN
ori acc1,$80
b7_1:
sbic port,synch
rjmp b7_1


А если частота проца 20MHz что в 16 раз больше сихро то мне кажется можно цикл и не разворачивать. 16 тактов должно хватить.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 12 2011, 17:45
Сообщение #27


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(zombi @ Apr 12 2011, 21:32) *
Или я ни че не понял или надо вот так:
ldi acc1,0

Начальное обнуление необходимо, это как бы самоочевидно...

Цитата
А если частота проца 20MHz что в 16 раз больше сихро то мне кажется можно цикл и не разворачивать. 16 тактов должно хватить.

Двигать маску, проверять счетчик цикла, переход в цикле... Может быть и хватит, но смысла в этом практического нет, все и так на грани, а будет еще хуже. Зачем ? Ради спортивного интереса съэкономить память кода ?
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 12 2011, 17:54
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(rx3apf @ Apr 12 2011, 21:45) *
Начальное обнуление необходимо, это как бы самоочевидно...

А что, кроме начального обнуления других изменений нет?

А если всетаки цикл понадобиться то может быть вот так:
Кстати начальное обнуление вообще не нужно
Код
    ldi  count,8
cc0:sbic port,synch
    rjmp cc0
    lsl  acc1
cc1:sbis port,synch
    rjmp cc1
    sbic port,bit_IN
    ori  acc1,$01
    dec     count
    brne cc0
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 12 2011, 17:57
Сообщение #29


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(zombi @ Apr 12 2011, 21:54) *
А что, кроме начального обнуления других изменений нет?

А, ну да, это я как-то невнимательно писал, синхра синхрой, но и входной бит проверить не мешает wink.gif

Сообщение отредактировал rx3apf - Apr 12 2011, 17:58
Go to the top of the page
 
+Quote Post
stells
сообщение Apr 12 2011, 18:10
Сообщение #30


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(zombi @ Apr 12 2011, 21:54) *
Кстати начальное обнуление вообще не нужно
Код
    ldi  count,8
cc0:sbic port,synch
    rjmp cc0
    lsl  acc1
cc1:sbis port,synch
    rjmp cc1
    sbic port,bit_IN
    ori  acc1,$01
    dec     count
    brne cc0

кстати, этот Ваш кусочек кода в худшем случае на 20 тактов
Go to the top of the page
 
+Quote Post

9 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01543 секунд с 7
ELECTRONIX ©2004-2016