-
RawData
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 13
-
Спасибо получено: 0
-
-
|
Использую генератор:
www.raltron.com/products/pdfspecs/clock_co6-co12.pdf
(co12) на 16мгц. Обвязку сделал согласно datasheet'у.
Пробую код:
avr-start.ru/?p=2755
При приёме байта данные могут быть разные:
I received: 11111111 - неправильно
I received: 11110100 - правильно
Причём разные данные передаются в момент подключения на вход rx (в качестве приёмника использую ардуино).
При включении может приниматься как правильное значение 11110100, так и неправильное
11111111.
В чём может быть ошибка.
p.s.Прилагаю код
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от RawData.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
У вас все замечательно работает, "пули" вылетают как из пулемета :)
Это на приемной стороне что-то не так.
Может попробовать "одиночными".
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
RawData
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 13
-
Спасибо получено: 0
-
-
|
umarsohod пишет: У вас все замечательно работает, "пули" вылетают как из пулемета :)
Это на приемной стороне что-то не так.
Может попробовать "одиночными".
Пули вылетают, но разного калибра)
Попробовал вставить делитель частоты, насколько правильно не знаю (файл приложил).
Было 16мгц (на передающей стороне), теперь должно быть 8мгц.
Теперь значения не меняются при подключении/отключении провода на rx(физического),
но должно быть:
00110000,
а получаю:
01111000
Если есть у Вас рабочий код передатчика uart на verilog, скиньте пожалуйста.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от RawData.
|
-
sirares
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 7
-
Спасибо получено: 1
-
-
|
Проверьте еще раз Ваш алгоритм, на вскидку - я не вижу стартового бита, стоповый есть, т.е. на i =0, должен быть сначала бит нулевого уровня, который запускает синхронизацию uart, затем 8 бит данных, затем стоповый бит уровня единицы, здесь даны уровни с учетом того что в м.с преобразователя сигналы инвертируются и смещаются относительно постоянной составляющей т.е. единица -3:-12В, нуль +3:+12В, а в контроллере и плис нуль - "0", единица -"+3..5В"
Вот,
сокращенная версия протокола
А во вложении немного переделанная реализация
soft uart
на Си для контроллера tiny24, но в нем нет аппаратного uart поэтому протокол реализован програмно(что Вы и хотите), Си похож на Verilog.
За код прошу не бить это мой первый опыт на Си. Если посидеть, то на AHDL смогу набросать.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от sirares.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
RawData пишет: Пули вылетают, но разного калибра)
.
Одинакового, я проверял.
Скорость на приемной стороне стоит правильно, 57600?
Что-бы изменить скорость, нужно менять только один коэффициент, который у вас сейчас ==277.
При тактовой 16Мгц/288=57600.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
sirares
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 7
-
Спасибо получено: 1
-
-
|
Прошу прощения, у Вас старт бит в регистре //reg [9:0]data задан и стоп бит тоже, извиняюсь... :(
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
Так и должно быть. Если байты идут непрерывно, то принимающий порт не может правильно определить
старт-бит. Такого не будет только в случае, когда промежутки между байтами больше 10 бит.
Попробуйте передавать что-нибудь без разрывов, например 0000011111. Я думаю, правильно будет всегда.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
RawData
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 13
-
Спасибо получено: 0
-
-
|
umarsohod пишет: Такого не будет только в случае, когда промежутки между байтами больше 10 бит.
Попробуйте передавать что-нибудь без разрывов, например 0000011111. Я думаю, правильно будет всегда.
А как это реализовать на verilog?
umarsohod пишет: Попробуйте передавать что-нибудь без разрывов, например 0000011111. Я думаю, правильно будет всегда.
Проверил даже с разрывами передаёт без ошибок, но Вы понимаете что необходима "правильная" передача любого байта...
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
RawData пишет: А как это реализовать на verilog?
Если не нужна большая производительность, увеличьте длину сдвигового регистра на 10, и добавьте еще 10 стоп-битов ("1").
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.170 секунд