Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
90S2313+Считыватель

 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
pavel
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 29.05.2007
Сообщения: 8

СообщениеДобавлено: 29 Май 2007, 17:59    Заголовок сообщения: 90S2313+Считыватель Ответить с цитатой

Нужно считать с считывателя 26 бит и запихнуть их в контролер
вот сам считыватель http://www.perco.ru/rus/documents/RP_11.zip.
Не могу разобраться как последовательно их принять, я так думаю что надо считывать по 8 бит, или я ошибаюсь.
Пхните в нужном напрвлении. Вопрос Вопрос
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 30 Май 2007, 8:13    Заголовок сообщения: Ответить с цитатой

Для начала неплохо бы определится с железной частью ... как по мне, то удобно организовать прерывание по приему битов данных.
Как вариант ...
Код:

 
 --0----*-------> PORT
        |
       --
       /\
       --
        |
 --1----*-------> INT0
 

посередине - диод Улыбка
Что имеем ... при передаче единицы линия "1" уходит в ноль ... на линии INT0 получаем отрицательный фронт - на линии PORT имеем единицу.
При передаче нуля линия "0" вместе с PORT уходит в ноль и за собой тянут INT0 ... получаем отрицательный фронт на INT0 и ноль на PORT
Таким макаром ... настраиваем прерывание на отриц. фронт. При возникновении прерывания смотрим на линию PORT ... на ней значение принимаемого бита.

Только подумайте ... верно ли полярность диода стоит?

Дальше разберетесь? Если нет, то опишите свой уровкень познаний в программировании/контроллерах/электронике.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
pavel
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 29.05.2007
Сообщения: 8

СообщениеДобавлено: 30 Май 2007, 10:07    Заголовок сообщения: Ответить с цитатой

Диод в схеме стоит правильно.
Познание в электронике есть, 10 лет работы в этом напрвлении, а вот програмирование конетролеров только недавно начал, так что неочень.
Мое мнение такое что нужно считывать побитно и писать в масив в ОЗУ, может я и ошибаюсь, но програмно не могу сообразить как это сделать
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 30 Май 2007, 12:29    Заголовок сообщения: Ответить с цитатой

Значит не ошибся я с диодом (у меня наоброт программирование >> электроники)

Дальше можно сотворить так: Кстати! А на чем и в чем пишете? АСМ или C ? (если АСМ, то помочь кодом не смогу - только идеями - времени нет на АСМе писать)

отводим три байта в памяти для данных.
При возникновении прерывания состояние PORT записываем в младший бит первого байта
И сдвигаем данные влево ... так постепенно наши данные заползут на свои места.
Кстати ... нужно не забывать также передвигать страший бит одного байта в младший бит следующего байта

Но это в общем виде ... нужно еще подумать над обработкой первого и последнего бита четности
(такой изврат сотворили ... сразу и не напишу как быстро и красиво сделать)

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
pavel
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 29.05.2007
Сообщения: 8

СообщениеДобавлено: 30 Май 2007, 12:37    Заголовок сообщения: Ответить с цитатой

Пробую на АСМЕ, на чем проще вкосить на АСМЕ или на Си, я понимаю - сколько человек, столько и мнений, раньше пробывал писать проги на дельфи, коечто даже получалось.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 30 Май 2007, 13:19    Заголовок сообщения: Ответить с цитатой

ВО! Придумал о битах четности!
Общая идея ... берем переменную ... Б_ЧЕТ ("буфер четности") Если приняли единичку - будем плюсовать в нее единичку.
Младший бит переменной указывает ее НЕ четность (младший бит равен единице - число не четное)
Теперь по принятии 13 бит (1 четности и 12 данных) можно смотреть Б_ЧЕТ -- он и укажет нам с ошибками ли мы приняли данные

первоначально Б_ЧЕТ = 0 (чет, кстати Радостный )
Первый бит (номер 1) - добавляет до четности, значит сумма бита четности и битов данных (2-13) должна дать ноль в мл. разряде (четное число)
Cледовательно если там (Б_ЧЕТ & 0x01 ) будет 1 - значит ошибка!

Последний бит (номер 26) - наоброт добавляет до нечетности ... тоесть всё наоборот 1 - нет ошибки ... для того, чтобы было как и в первом случае нужно после принятия 13 бита в Б_ЧЕТ записать 1 ... тогда ... мы принимаем 12 бит данных, контрольный 26-й бит добавляет до нечетности и плюс наша единичка получаем чет ... получаем условие такое же как и в первом случае (1 - есть ошибка)

Теперь нужно подумать как это в цикл запихнуть красиво ... примерно так:
Переменная К_ВО - к-во принятых бит (0-еще ничего не принято)

Код:

   В ПРЕРЫВАНИИ

    ЕСЛИ К_ВО == 13
      ТО НАЧАЛО //приняли первую половину данных
         если проверка чет/нечет не прошла,
            то поднять флаг ошибки
         Б_ЧЕТ = 1
      КОНЕЦ

    ЕСЛИ К_ВО == 0
      ТО НАЧАЛО //начало приема посылки
         Б_ЧЕТ = 0       
         К_ВО = 1
         сбросить флаг ошибки
      КОНЕЦ //к-во == 0
   ИНАЧЕ ЕСЛИ К_ВО == 26 //принимаем последний бит - проверка чет/нечет и окончательная обработка данных!
     НАЧАЛО
       проверка чет/нечет ... если ое проверки прошли (флаг ошибки опущен), то данные готовы - можно выдавать в основную программу, иначе поднимаем флаг "приняты кривые данные"
      К_ВО = 0 // типа "готовы к приему следующих данных"
     КОНЕЦ
   ИНАЧЕ НАЧАЛО //здесь мы окажемся, если принимаем биты  2-25
      принять бит с линии, запихнуть его в младший бит младшего байта данных и сдвинуть все три байта влево 
   КОНЕЦ
     
    К_ВО +1
 


Но данный алгоритм пока не решает проблему "десинхронизации пакетов" ... если мы случайно потеряем часть пакета, то потом будет разрыв пакетов: приняли одного пакета половину .. он закончился. а мы ждем даные .. идет второй пакет .. мы принимаем его часть и видам, что принят весь пакет, хотя на самом деле это только часть другого пакета ... типа такого... для избежания этого введем таймаут на длительность приепма пакета... счас посчитаем ...
У нас передача одного бита занимает 1.1 мс (0.1 импульс+1 промежуток между импульсами)
Длительность пакета - 1.1*26 = 28,6 мс
Задержка между пакетами не менее 200 мс

Другими словами ... если от начала пакета прошло более 50 (с запасом) мс и пакет полностью не принят - значит у нас проблемы.

Для обработки таких ошибок добавляем алгоритм:
При принятии первого бита (К_ВО == 0) , запускаем таймер на 50 мс.
При принятии последнего бита (К_ВО == 26) останавливаем таймер.

Код:

 В прерывании таймера пишем
  К_ВО == 0
  ОШИБКА == 1


Что мы имеем:
допустим при приеме у нас пропадет 5 бит -- будто и не было его.
Начинаем принимать данные (запускаем таймер) ... принимаем первые 12 - у нас, возможно, ошибка чет-нечет вылезет
принимаем последний бит .. и ждем еще один ... но его то нет! проходит 50 мс и К_ВО в таймере сбрасывается в ноль .... тоесть мы "как бы ничего и не принимали " - кривой пакет отвалился.

Допустим, что из-за помех у нас проскочили "лишние" биты
Начинаем прием (запускаем таймер) ... принимаем как обычно данные ... ловим и "лишние импульсы" ... из-а них по "окончанию пакета" проверка четности даст ошибку (пакет отваливается) ... мы типа приняли пакет уже ... но биты настоящего пакета продолжаю идти ... мы начинаем принимать следующий пакет (остаток настоящего), но в нем будет маловато бит - получаем первый случай .. ."как бы ничего и не принимали" Радостный

Вот ... ох и написал ... Радостный

_________________
AndryG


Последний раз редактировалось: AndryG (30 Май 2007, 13:30), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 30 Май 2007, 13:26    Заголовок сообщения: Ответить с цитатой

pavel писал(а):
пробывал писать проги на дельфи, коечто даже получалось.


Я бы Вам советовал на С ... не даром систему команд разрабатывали "под Язык Высокого Уровня"
Возьмите компилятор CVAVR. В сети немеряно лежит и с кряками и т.д.

Если с электроникой 10 лет возитесь, то, думаю, что Вам не стоит доказывать, что сперва нужно алгоритм заиметь, а потом садится за написание кода ... одно дело кусочки программки насобирать (считывание, индикация. протокол обмена и т.д.) .. а вот всё вместе без четкого алгоритма не собрать толком.

Поищите в сети "Автоматное программирование" "Программирование с явным выделением состояний" "конечные автоматы" -- это одна из методик построения алгоритма ПО -- не говорю, что стоит всё копировать ... но саму идею метода полезно попользовать.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
pavel
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 29.05.2007
Сообщения: 8

СообщениеДобавлено: 30 Май 2007, 13:36    Заголовок сообщения: Ответить с цитатой

Большое спасибо, за разьяснение, буду пробовать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.546s (PHP: 91% - SQL: 9%) - SQL запросов: 12 - GZIP enabled - Debug on