Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2
  • 3

ТЕМА: Внешний кварц

Внешний кварц 7 года 7 мес. назад #7001

  • RawData
  • 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.

Внешний кварц 7 года 7 мес. назад #7003

У вас все замечательно работает, "пули" вылетают как из пулемета :)
Это на приемной стороне что-то не так.
Может попробовать "одиночными".

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

Внешний кварц 7 года 7 мес. назад #7006

  • RawData
  • RawData аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 13
  • Спасибо получено: 0

umarsohod пишет: У вас все замечательно работает, "пули" вылетают как из пулемета :)
Это на приемной стороне что-то не так.
Может попробовать "одиночными".

Пули вылетают, но разного калибра)
Попробовал вставить делитель частоты, насколько правильно не знаю (файл приложил).
Было 16мгц (на передающей стороне), теперь должно быть 8мгц.
Теперь значения не меняются при подключении/отключении провода на rx(физического),
но должно быть:
00110000,
а получаю:
01111000
Если есть у Вас рабочий код передатчика uart на verilog, скиньте пожалуйста.
Вложения:

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

Последнее редактирование: от RawData.

Внешний кварц 7 года 7 мес. назад #7013

Проверьте еще раз Ваш алгоритм, на вскидку - я не вижу стартового бита, стоповый есть, т.е. на i =0, должен быть сначала бит нулевого уровня, который запускает синхронизацию uart, затем 8 бит данных, затем стоповый бит уровня единицы, здесь даны уровни с учетом того что в м.с преобразователя сигналы инвертируются и смещаются относительно постоянной составляющей т.е. единица -3:-12В, нуль +3:+12В, а в контроллере и плис нуль - "0", единица -"+3..5В"
Вот, сокращенная версия протокола
А во вложении немного переделанная реализация soft uart на Си для контроллера tiny24, но в нем нет аппаратного uart поэтому протокол реализован програмно(что Вы и хотите), Си похож на Verilog.
За код прошу не бить это мой первый опыт на Си. Если посидеть, то на AHDL смогу набросать.
Вложения:
Спасибо сказали: RawData

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

Последнее редактирование: от sirares.

Внешний кварц 7 года 7 мес. назад #7014

RawData пишет: Пули вылетают, но разного калибра)
.

Одинакового, я проверял.
Скорость на приемной стороне стоит правильно, 57600?
Что-бы изменить скорость, нужно менять только один коэффициент, который у вас сейчас ==277.
При тактовой 16Мгц/288=57600.
Спасибо сказали: RawData

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

Внешний кварц 7 года 7 мес. назад #7015

  • RawData
  • RawData аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 13
  • Спасибо получено: 0
Вот видео
Вложения:

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

Внешний кварц 7 года 7 мес. назад #7016

Прошу прощения, у Вас старт бит в регистре //reg [9:0]data задан и стоп бит тоже, извиняюсь... :(

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

Внешний кварц 7 года 7 мес. назад #7017

Так и должно быть. Если байты идут непрерывно, то принимающий порт не может правильно определить
старт-бит. Такого не будет только в случае, когда промежутки между байтами больше 10 бит.
Попробуйте передавать что-нибудь без разрывов, например 0000011111. Я думаю, правильно будет всегда.

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

Внешний кварц 7 года 7 мес. назад #7023

  • RawData
  • RawData аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 13
  • Спасибо получено: 0

umarsohod пишет: Такого не будет только в случае, когда промежутки между байтами больше 10 бит.
Попробуйте передавать что-нибудь без разрывов, например 0000011111. Я думаю, правильно будет всегда.

А как это реализовать на verilog?

umarsohod пишет: Попробуйте передавать что-нибудь без разрывов, например 0000011111. Я думаю, правильно будет всегда.

Проверил даже с разрывами передаёт без ошибок, но Вы понимаете что необходима "правильная" передача любого байта...

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

Внешний кварц 7 года 6 мес. назад #7024

RawData пишет: А как это реализовать на verilog?

Если не нужна большая производительность, увеличьте длину сдвигового регистра на 10, и добавьте еще 10 стоп-битов ("1").
Спасибо сказали: RawData

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

  • Страница:
  • 1
  • 2
  • 3
Время создания страницы: 0.170 секунд
Работает на Kunena форум