CodeVision AVR в вопросах и ответах
Ставим плюсы: )
- Реклама
Эта тема не помогла? Какой комп, операционка?Сериг писал(а): Забыл сказать у меня stk500v2...
scio me nihil scire...
_______________________
<= Жалобная кнопка в правом нижнем углу... )
_______________________
Виндоус хп,я прошил атмегу она начала потеблять 90 милиампер,удаляю прошивав все нормально...DiGiCat писал(а):Эта тема не помогла? Какой комп, операционка?Сериг писал(а): Забыл сказать у меня stk500v2...
Прошивается в отдельной панельке? Возможно где-то замыкают ноги у атмеги или что-то с железом в её обвязке не так...
p.s. и это уже кагбе к теме CodeVision не имеет никакого...
p.s. и это уже кагбе к теме CodeVision не имеет никакого...
scio me nihil scire...
_______________________
<= Жалобная кнопка в правом нижнем углу... )
_______________________
- Сообщения: 7
- Зарегистрирован: Вт дек 20, 2011 13:33:46
Здравствуйте.
Только вчера начал осваивать avr, до этого писал только для mc51 в keil.
Использовал для битов регистров объявления такого типа:
sfr P0 = 0x80; /* Port 0 */
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
... и т.д.
В хедерах CVAVR есть только адреса основных регистров, а имена битов в качестве define:
sfrb PORTA=0x1b;
#define PORTA0 0 // Port A Data Register bit 0
#define PORTA1 1 // Port A Data Register bit 1
#define PORTA2 2 // Port A Data Register bit 2
т.е. для достута к биту необходимо выполнять маскирование:
PORTA = (1 << PORTA0)|(1 << PORTA2) //установка 0 и 2 бита
Мне кажется, что это ненаглядно, и как я понимаю сдвиг выполняется не при компиляции а в реальном времени.
например, в keil это выглядит P0_0 = 1; //Локанично и читабельно
Регистры avr поддерживают битовую адресацию, значит должен быть способ.
Как можно выкрутиться?
пытался применить в хедере определения sbit, но ничего не вышло.
Только вчера начал осваивать avr, до этого писал только для mc51 в keil.
Использовал для битов регистров объявления такого типа:
sfr P0 = 0x80; /* Port 0 */
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
... и т.д.
В хедерах CVAVR есть только адреса основных регистров, а имена битов в качестве define:
sfrb PORTA=0x1b;
#define PORTA0 0 // Port A Data Register bit 0
#define PORTA1 1 // Port A Data Register bit 1
#define PORTA2 2 // Port A Data Register bit 2
т.е. для достута к биту необходимо выполнять маскирование:
PORTA = (1 << PORTA0)|(1 << PORTA2) //установка 0 и 2 бита
Мне кажется, что это ненаглядно, и как я понимаю сдвиг выполняется не при компиляции а в реальном времени.
например, в keil это выглядит P0_0 = 1; //Локанично и читабельно
Регистры avr поддерживают битовую адресацию, значит должен быть способ.
Как можно выкрутиться?
пытался применить в хедере определения sbit, но ничего не вышло.
- Реклама
а нужно выкручиваться? может, стоит привыкнуть к традиционному для Си способу работы с битами? ведь в Си нет БИТОВЫХ переменных - это все происки "расширений" кейла или еще кого... и напрасно вы переживаете на счет сдвигов в реальном времени - ВСЕ вычисления с КОНСТАНТАМИ делаются на этапе компиляции.kotelectron писал(а):Как можно выкрутиться?
но если желание извратиться у вас пересиливает рассудок, можно использовать стандартный подход - структуры с битовыми полями - будет стандартно и достаточно понятно, но потребует массы "ручной" работы по созданию хидеров ко всем типам МК - производитель как-то не подумал о том, что кто-то захочет вот так вот, нестандартно...
и не во всех случаях битовые поля дают компактный код.
битва с дураками проиграна, победители торжествуют. слава победителям!
Добрый вечер, форумчане, помогите пожалуйста найти ошибку,
контроллер мега8, 4х 7сегментных индикатора, должны выводить число 4 разрядное, на индикаторе при тестировании в протеусе творится нечто не понятное, 2 разряда только выводит
проверьте пожалуйста на ошибку, в дальнейшем планировал сделать вольтметр но пока не разобрался с простым выводом индикации..
заранее спасибо
-прилагаю файлы протеуса и проект CW, в текстовом код вольтметра
контроллер мега8, 4х 7сегментных индикатора, должны выводить число 4 разрядное, на индикаторе при тестировании в протеусе творится нечто не понятное, 2 разряда только выводит
проверьте пожалуйста на ошибку, в дальнейшем планировал сделать вольтметр но пока не разобрался с простым выводом индикации..
заранее спасибо
-прилагаю файлы протеуса и проект CW, в текстовом код вольтметра
- Вложения
-
- sample.rar
- (43.93 КБ) 171 скачивание
kotelectron писал(а):Как можно выкрутиться?
Ващет в кодвижне имеется такой формат
PORTB.2 = 1;
или чтение
SomeVar = PIND.3;
Если делаю большой проект, в котором мне надо по битам работать с портами, обычно делаю обертки для этого дела, имхо так более читабельно, если их нету в наличии, но часто они есть, как например в кодвижне.Мастер Ломастер писал(а):а нужно выкручиваться? может, стоит привыкнуть к традиционному для Си способу работы с битами?
Всем огромное спасибо!схема моя заработала,я счастлив))))ibiza11 писал(а):вообще говоря эти вопросы к CVA не относятся. синтаксис языка отдельно почитать можно.
- Сообщения: 7
- Зарегистрирован: Вт дек 20, 2011 13:33:46
Спасибо, BCluster. Это то что нужно.BCluster писал(а):Ващет в кодвижне имеется такой формат
PORTB.2 = 1;
или чтение
SomeVar = PIND.3;
а что скажет ваш кодвижн на подобное TCCR1B.1 =1? или ADCSRA.5 = 1? правда, понятная запись? сразу ясно, что я хотел этим достичь...BCluster писал(а):kotelectron писал(а):Как можно выкрутиться?
Ващет в кодвижне имеется такой формат
PORTB.2 = 1;
битва с дураками проиграна, победители торжествуют. слава победителям!
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
TCCR1B = (1 << WGM12) | (1 << CS11) | (1 << CS10);
Подобная запись тоже ни о чем не говорит, пока не залезешь в описание на МК
А вот если пользоваться комментариями, то любая запись станет понятной.
Подобная запись тоже ни о чем не говорит, пока не залезешь в описание на МК
А вот если пользоваться комментариями, то любая запись станет понятной.
коментарий должен пояснять алгоритмические нюансы, а не повторять тупо описание оператора Си на русском языке. просто млею, когда вижу такое:BerZerK-ku писал(а):TCCR1B = (1 << WGM12) | (1 << CS11) | (1 << CS10);
Подобная запись тоже ни о чем не говорит, пока не залезешь в описание на МК![]()
А вот если пользоваться комментариями, то любая запись станет понятной.
Код: Выделить всё
d++; // увеличиваем ширину на 1Код: Выделить всё
width++;Код: Выделить всё
shirina++;битва с дураками проиграна, победители торжествуют. слава победителям!
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
я с вами и не спорю. вам и на красный свет можно дорогу переходить - ничего страшного в этом нет. главное, как вам удобно - так ведь? и правила и прочее - для дураков, вроде меня. удачи!BerZerK-ku писал(а):Каждый пишет программу и документирует так, как ему/им удобнее, тем более речь идет о любительских разработках. Избыток комментариев ухудшает читабельность кода, но ничего страшного в этом нет.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Сообщения: 7
- Зарегистрирован: Вт дек 20, 2011 13:33:46
TCCR1B.WGM12 = 1;а что скажет ваш кодвижн на подобное TCCR1B.1 =1? или ADCSRA.5 = 1? правда, понятная запись? сразу ясно, ...
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Подскажите, каким стандартом в работе руководствуетесь вы?Мастер Ломастер писал(а):я с вами и не спорю. вам и на красный свет можно дорогу переходить - ничего страшного в этом нет. главное, как вам удобно - так ведь? и правила и прочее - для дураков, вроде меня. удачи!
кодвижн эту запись понимает?kotelectron писал(а):TCCR1B.WGM12 = 1;
да вам-то зачем? тоже хотите стать дураком? оставайтесь лучше умнымBerZerK-ku писал(а):Подскажите, каким стандартом в работе руководствуетесь вы?
битва с дураками проиграна, победители торжествуют. слава победителям!
+Мастер Ломастер писал(а):тоже хотите стать дураком? оставайтесь лучше умным
Docendo discimus
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Я тут один что-ли? Вы же пытаетесь объяснить людям как правильно писать. Зачем пересказывать своими словами, если есть возможность дать ссылку на стандарт-первоисточник?
А по теме: большая часть людей, которые задают тут вопросы, лишь поверхностно знакомы с С / МК. К чему им навязывать какие-то правила, забивая голову лишней информацией, если на данном этапе обучения от них не будет прока? Тот код, который начинающий пишет неделями, в будущем он переделает за день-другой.Барон Мюнхгаузен писал(а):Спой птичка, не стыдись
Последний раз редактировалось BerZerK-ku Вт дек 27, 2011 11:18:45, всего редактировалось 2 раза.


