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

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

Сообщение dm211 »

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

Сообщение klok »

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

Сообщение klok »

dm211 писал(а):Если gets(detchar тоже) засунуть в while(1), то работает только он, никому больше работать не дает, это еще одна проблема вдобавок имеющимся.


Это вроде обычная функция - просматривает массив и из него формирует строку, задержек то там никаких нет вроде?
klok
Родился
Сообщения: 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. В чем может быть проблема.
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

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

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

klok писал(а):Другая проблема - в запросах, что сыпятся контроллеру нет символа конца строки, как с этим быть? запросы короткие, 2-3 байта...
Если известна длина строки, значит конец строки как-то определяется? Вот по этому признаку и работай. :?
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 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 и подобные.
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Сообщение dm211 »

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

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

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

Сообщение boobonick »

Подскажите,пожалуйста, как можно сделать конкатенацию чисел в си?
Допустим,имеется набор чисел 1,0,1,0,1,1 и нужно сделать из них одно число 101011, можно ли здесь задействовать сдвиг регистров? Можно ли сделать через массивы? И,как лучше все это реализовать?
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 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];
        }

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

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

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

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

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

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

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

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

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

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

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


программист я никакой и не чего не понял.

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

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

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

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

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

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

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

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

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

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

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

Сообщение Synergetik »

Mr.Denis писал(а):А как мне это всё преобразовать в нормальный вид?

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

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

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