CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Сообщение dm211 »

Если gets(detchar тоже) засунуть в while(1), то работает только он, никому больше работать не дает, это еще одна проблема вдобавок имеющимся.
Реклама
Родился
Сообщения: 4
Зарегистрирован: Ср сен 02, 2009 22:59:20
Откуда: NN

Сообщение klok »

Большое спасибо ARV за идею со структурами....
Контактная информация:
Реклама
Родился
Сообщения: 4
Зарегистрирован: Ср сен 02, 2009 22:59:20
Откуда: NN

Сообщение klok »

dm211 писал(а):Если gets(detchar тоже) засунуть в while(1), то работает только он, никому больше работать не дает, это еще одна проблема вдобавок имеющимся.
Это вроде обычная функция - просматривает массив и из него формирует строку, задержек то там никаких нет вроде?
Контактная информация:
Родился
Сообщения: 4
Зарегистрирован: Ср сен 02, 2009 22:59:20
Откуда: NN

Сообщение klok »

Другая проблема - в запросах, что сыпятся контроллеру нет символа конца строки, как с этим быть? запросы короткие, 2-3 байта...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
asd
Встал на лапы
Аватара пользователя
Сообщения: 95
Зарегистрирован: Сб янв 20, 2007 22:03:21
Откуда: от верблюда

Сообщение asd »

когда я нажимаю кнопку прошивки МК на экран выводится окно с сообщением AVRProg error getting ID. Я испоьзую программу CodeVisionAVR и программатор AVR910 USB Programmer. В чем может быть проблема.
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

dm211 писал(а):Если gets(detchar тоже) засунуть в while(1), то работает только он, ... это еще одна проблема вдобавок имеющимся.
Не вижу проблемы - достаточно завести флаг приема строки, который необходимо поднимать по приходу символа конца строки и сбрасывать в процедуре чтения строки, тогда в главном цикле вызывать gets() достаточно лишь тогда, когда флаг готовности строки взведен.
klok писал(а):Другая проблема - в запросах, что сыпятся контроллеру нет символа конца строки, как с этим быть? запросы короткие, 2-3 байта...
Если известна длина строки, значит конец строки как-то определяется? Вот по этому признаку и работай. :?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Сообщение *Trigger* »

хочу сделать вот эту схему:
http://radiokot.ru/circuit/digital/home/26/
что нужно для того, что бы создать проект в CodeVision AVR?
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Сообщение dm211 »

Код визард CVAVR нужно для этого использовать.
Друг Кота
Аватара пользователя
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Сообщение *Trigger* »

dm211, это вы мне?
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Встал на лапы
Аватара пользователя
Сообщения: 123
Зарегистрирован: Сб ноя 18, 2006 17:14:15

Сообщение boobonick »

Подскажите,пожалуйста, как можно сделать конкатенацию чисел в си?
Допустим,имеется набор чисел 1,0,1,0,1,1 и нужно сделать из них одно число 101011, можно ли здесь задействовать сдвиг регистров? Можно ли сделать через массивы? И,как лучше все это реализовать?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

*Trigger* писал(а):...что нужно для того, что бы создать проект в CodeVision AVR?
dm211 писал(а):Код визард CVAVR ...
Нет, визард нужен не для создания проекта, а для подготовки шаблона программы с кодом инициализации периферии, проект же создаётся командой "File->New...Project" и настраивается командой "Project->Configure". В любой момент можно подготовить кусок кода с помощью визарда и либо вставить этот код в программу целиком (так вначале и делают), либо использовать лишь нужную часть, например, вызвав в визарде командой "File->Program preview" код, соответствующий тому, что в визарде успели "понатыкать" мышой.
boobonick писал(а):...как можно сделать конкатенацию чисел в си?
Допустим,имеется набор чисел 1,0,1,0,1,1 и нужно сделать из них одно число 101011, ...
Конкатенация - понятие для строк, поэтому приходится догадываться, что это слово означает по отношению к числам, если нужно получить число из набора чисел, которые рассматриваются как цифры в позиционной записи, то и нужно действовать согласно правилам позиционной записи - в чем проблема-то?

Код: Выделить всё

int     iResult,    // результат преобразования
        iBase,      // база (основание) системы счисления
        i;
#define _NDIGS_     8
int     iaDigs[_NDIGS_];

        iBase = 10; // чем черт не шутит? :)))
        for (iResult=0, i=_NDIGS_; i; ){
            iResult *= iBase;
            iResult += iaDigs[--i];
        }
Разумеется, если основание системы счисления окажется степенью основания системы счисления компьютера, то вместо умножений выгоднее применять сдвиги.
Друг Кота
Аватара пользователя
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Сообщение *Trigger* »

Yellow Tiger, спасибо.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Не за что. Только направление обхода массива не забудь поменять, если в конце массива будут младшие разряды, а не старшие, как в этом примере. Если принимать цифры по одной (например, из последовательного канала), то можно еще проще:

Код: Выделить всё

пока (не пришёл символ-разделитель) {
        iResult *= iBase;
        iResult += (очередной_символ-цифра - '0');
}
Друг Кота
Аватара пользователя
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Сообщение *Trigger* »

Yellow Tiger писал(а):Не за что. Только направление обхода массива не забудь поменять, если в конце массива будут младшие разряды, а не старшие, как в этом примере. Если принимать цифры по одной (например, из последовательного канала), то можно еще проще:

Код: Выделить всё

пока (не пришёл символ-разделитель) {
        iResult *= iBase;
        iResult += (очередной_символ-цифра - '0');
}
программист я никакой и не чего не понял.

а что нужно в визарде выставлять?
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

*Trigger* писал(а):программист я никакой и не чего не понял.
Тогда опиши свою задачу поточнее.
*Trigger* писал(а):а что нужно в визарде выставлять?
Тип процессора, тактовую частоту системы, таймеров, АЦПа, конфигурацию входов/выходов, конфигурацию периферийных устройств. Если что-то не используется, то оставить в визарде без имзменений - насколько я помню, там все начальные значения - "выключено" (таймеры, АЦП, UART, ...).
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Пожалуйста помогите решить проблему!
Связал mege8 и ПК через COM порт, с mege8 на ПК передаёт нормально, а с ПК на mege8 в коком-то непонятном виде.
отправляю 0 мне приходит 48
отправляю 1 мне приходит 49
Что это? Как правильно принять данные с ПК на МК?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Mr.Denis писал(а):отправляю 0 мне приходит 48
отправляю 1 мне приходит 49
Все правильно приходит. 0 - это и есть 48, а 1 - это и есть 49, а, скажем, если послать '!', то придет 33. Всё работает! :wink:
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

А как мне это всё преобразовать в нормальный вид?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Можно подумать, нормальным из всех видов является один, независимо от условий задачи...
К тому же, я почти уверен, что преобразовывать ничего не надо и всё уже в правильном виде, только надо это осознать.
Выкладывай начистоту... 8)
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО

Сообщение Synergetik »

Mr.Denis писал(а):А как мне это всё преобразовать в нормальный вид?
Это и есть нормальный вид - так в переменных типа char (и не только в них) хранятся закодированные ASCII-символы. Если нужно вывести символы на консоль, то в функции printf нужно указывать %c. Если же нужно получить значение одноразрядного числа "d", то вычисляем его так: d=c-'0', где "c" - получаемый закодированный символ. В выражении символ '0' автоматически преобразуется в его ASCII-эквивалент, либо можно указать явно: d=c-48.

Хотя с обменом между ПК и МК незнаком, однако кое-что, надеюсь, соображаю в Си.
Контактная информация:
Ответить

Вернуться в «AVR»