ATmega8: возможна ли передача шестнадцатеричного кода?
-
Vasilih007
- Родился
- Сообщения: 3
- Зарегистрирован: Сб май 21, 2011 06:07:40
ATmega8: возможна ли передача шестнадцатеричного кода?
Здравствуйте. Во время написания кода возникла проблема:
Необходимо отправить и принять 16-ричный сигнал.
С атмеги выходит сигнал, приходит на сервопривод (для его управления требуется такой код), обратно приходят данные к атмеге.
Вопрос:
Может ли atmega (вообще любая) отправлять такие сигналы с одного вывода? и принимать на другом?
P.S.: если да. то можно хотя бы команду написать )
Необходимо отправить и принять 16-ричный сигнал.
С атмеги выходит сигнал, приходит на сервопривод (для его управления требуется такой код), обратно приходят данные к атмеге.
Вопрос:
Может ли atmega (вообще любая) отправлять такие сигналы с одного вывода? и принимать на другом?
P.S.: если да. то можно хотя бы команду написать )
- Реклама
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
Складывая байты в слова можно достичь любой разрядности
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
mega может все.
Команды зависят от вашего железа.
Команды зависят от вашего железа.
Docendo discimus
-
Vasilih007
- Родился
- Сообщения: 3
- Зарегистрирован: Сб май 21, 2011 06:07:40
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
Это я понимаю, но как их передать (принять)?Vov123 писал(а):Складывая байты в слова можно достичь любой разрядности
К примеру, команда PORTD=0xff. Передаёт на выводы PD0...7 единицу.pyzh_man писал(а):mega может все.
Команды зависят от вашего железа.
А есть похожая команда, но только на один порт и в hex-коде?
p.s.: использую CodeVisionAVR
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
Ну так и передавайте-по очереди,удобно будет по 8 бит.
- Реклама
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
2 Vasilih007 хотите получить нормальный ответ - научитесь правильно задавать вопрос.
- 16-ричный и 16-ти разрядный не одно и тоже. Сколько линий используется для передачи/приема? какой протокол и т.д. ..... ,а иначе это "ни о чем" ....Vasilih007 писал(а):Необходимо отправить и принять 16-ричный сигнал.
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
Вот вечная эта путаница...
Предположим, приняли мы сигнал : Неважно, как мы зафиксировали начало и конец, знаем только, что байт шел младшим битом вперед. Собрались 10 мудрецов и заспорили насчет принятого байта :
- Это десятичное число 114
- Нет, это 16-ричное число 72
- Нет, это 2 пикселя - один светлосерый, другой темносерый
и т.д.
Кто прав ? Правы все, и не прав никто - принята просто комбинация бит, а как ее интерпретировать - это уже как условились на приемном и передающем конце линии. И не бывает ни десятичного, ни 16-ричного, ни 8-ричного байта - бывает только представление
для человека на бумаге байта, существующего в виде комбинации высокого и низкого уровня.
Возвращаясь к исходному вопросу : что нужно? Передать байт? Так надо просто задвинуть его в регистр передатчика и запустить передачу. Такой метод передачи байта реализован в версии RTU протокола MODBUS. В том же протоколе есть и другой метод - ASCII, когда байт разбивается на 2 тетрады ( ниббла ), каждый из которых кодируется одним из 16 возможных СИМВОЛОВ - элементов 16-ричного представления этого ниббла - 0...9,A...F . В этом случае передаваемая последовательность состоит из символов ограниченного набора, что позволяет ввести для синхронизации не входящий в этот
набор символы, например, стартовый ':'. Можно дополнительно вести контроль правильности прохождения пакета - наличие в последовательности отличного от 0...9,A...F символа свидетельствует об ошибке приема, что не избавляет от необходимости более "сильных" контрольных мер, например, контрольной суммы.
Я прошу прощения у профи за эту банальщину, но так уж часто встречаются вопросы типа : а как передать 16-ричный байт? А как бы он случаем не оказался 8-ричным ? - что пора это уже в FAQ вмонтировать.
Поэтому автору нужно определиться : если он собирается стыковаться с уже готовым устройством, то нужно соблюдать протокол этого устройства, сообразуясь с мануалкой. Если и то, и это еще в проекте - надо, исходя из требований максимального быстродействия и минимальной вероятности пропуска ошибки выбрать нужный код.
На абстрактно поставленный вопрос - полуконкректно составленный ответ.
Но судя по тому, что автор не знает о существовании волшебного слова UART ( или SPI ), ему это пока не по силам. Ну, напишете за него код, а сервопривод - штука серьезная, оторвет кому бошку - кто в ответе ? Совет банальный, но единственно возможный - для серьезных задач пригласите профи.
Предположим, приняли мы сигнал : Неважно, как мы зафиксировали начало и конец, знаем только, что байт шел младшим битом вперед. Собрались 10 мудрецов и заспорили насчет принятого байта :
- Это десятичное число 114
- Нет, это 16-ричное число 72
- Нет, это 2 пикселя - один светлосерый, другой темносерый
и т.д.
Кто прав ? Правы все, и не прав никто - принята просто комбинация бит, а как ее интерпретировать - это уже как условились на приемном и передающем конце линии. И не бывает ни десятичного, ни 16-ричного, ни 8-ричного байта - бывает только представление
для человека на бумаге байта, существующего в виде комбинации высокого и низкого уровня.
Возвращаясь к исходному вопросу : что нужно? Передать байт? Так надо просто задвинуть его в регистр передатчика и запустить передачу. Такой метод передачи байта реализован в версии RTU протокола MODBUS. В том же протоколе есть и другой метод - ASCII, когда байт разбивается на 2 тетрады ( ниббла ), каждый из которых кодируется одним из 16 возможных СИМВОЛОВ - элементов 16-ричного представления этого ниббла - 0...9,A...F . В этом случае передаваемая последовательность состоит из символов ограниченного набора, что позволяет ввести для синхронизации не входящий в этот
набор символы, например, стартовый ':'. Можно дополнительно вести контроль правильности прохождения пакета - наличие в последовательности отличного от 0...9,A...F символа свидетельствует об ошибке приема, что не избавляет от необходимости более "сильных" контрольных мер, например, контрольной суммы.
Я прошу прощения у профи за эту банальщину, но так уж часто встречаются вопросы типа : а как передать 16-ричный байт? А как бы он случаем не оказался 8-ричным ? - что пора это уже в FAQ вмонтировать.
Поэтому автору нужно определиться : если он собирается стыковаться с уже готовым устройством, то нужно соблюдать протокол этого устройства, сообразуясь с мануалкой. Если и то, и это еще в проекте - надо, исходя из требований максимального быстродействия и минимальной вероятности пропуска ошибки выбрать нужный код.
На абстрактно поставленный вопрос - полуконкректно составленный ответ.
Но судя по тому, что автор не знает о существовании волшебного слова UART ( или SPI ), ему это пока не по силам. Ну, напишете за него код, а сервопривод - штука серьезная, оторвет кому бошку - кто в ответе ? Совет банальный, но единственно возможный - для серьезных задач пригласите профи.
-
Vasilih007
- Родился
- Сообщения: 3
- Зарегистрирован: Сб май 21, 2011 06:07:40
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
Jack_A, спасибо! вроде немного понял, а полуконкретный ответ получился вполне конкретным )
Re: ATmega8: возможна ли передача шестнадцатеричного кода?
Да пожалуйста - я уж думал, что был немного резковат, человек обидится. Нет - и слава богу. Если задача еще актуальна, нужно сформулировать ее поконкретней и читать даташиты, особо налегая на UART (USART). Если с инглиш напряг, поможет книжка Евстифеева.Vasilih007 писал(а):Jack_A, спасибо! вроде немного понял, а полуконкретный ответ получился вполне конкретным )


