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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ARV писал(а):в каждой палатке свои неполадки
Это точно :) Ну, что же, обойдемся пока "подсказками" CVAVR, а вообщем, тоже приглядываюсь к WinAVR. Как у него обстоит дело с размером кода, по сравнению с обсуждаемым?
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

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

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ARV, спасибо за ответы. Вам может и ни к чему: вышла новая версия CVAVR 2.04.6. Одно из изменений - улучшение оптимизатора кода.
urg2000
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Пт авг 17, 2007 16:20:16

Сообщение urg2000 »

Помогите разобраться с fuse в CodeVisionAVR куда выставлять галочки чтобы включать внешний или внутренний генератор и на разную частоту в AVR Studio всё понятно поставил галочку на нужный внешний или внутренний генератор и нужную частоту в CodeVisionAVR не понятно.
Изображение
Так выглядит в AVR Studio
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

urg2000 писал(а):Помогите разобраться с fuse в CodeVisionAVR куда выставлять галочки чтобы включать внешний или внутренний генератор и на разную частоту в AVR Studio всё понятно поставил галочку на нужный внешний или внутренний генератор и нужную частоту в CodeVisionAVR не понятно.
Все режимы работы генератора - внутренний, внешний, частотный интервал, выбираются конфигурационными битами SKSEL3...0. В программаторе CodeVisionAVR, их значения нужно выбрать в соответствие с типом МК. В AVR Studio задача облегчена: не нужно "шариться" по datasheet, чтобы найти нужные установки - все они приведены в окне. Требуется только "ткнуть".
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

ValBag писал(а):ARV, спасибо за ответы. Вам может и ни к чему: вышла новая версия CVAVR 2.04.6. Одно из изменений - улучшение оптимизатора кода.
мне оно ни к чему: если есть возможность, я стараюсь использовать легально бесплатные продукты. поэтому ни CVAVR, ни куда более мощный IAR меня не интересуют.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
aleksasm
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср ноя 25, 2009 18:56:55
Откуда: Lithuania

Сообщение aleksasm »

Я для фюзов пользуюсь калькулятором, очень удобно из одной программы в другую переходить.
http://www.engbedded.com/fusecalc/
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

Сообщение Александр 2677 »

Подскажите пожалуйста как в этой строчке
if (!(PINB & (1<<PINB.0)))

настроить на какую ножку МК подать сигнал чтобы задействовать программу. На данный момент срабатывает на ножках PB0 и PB1.

Направте на путь истинный, как сделать чтобы была задействована только например PB3.

Сигнал идёт с кнопки подключенной на землю.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

Александр 2677 писал(а):Подскажите пожалуйста как в этой строчке
if (!(PINB & (1<<PINB.0)))
настроить на какую ножку МК подать сигнал чтобы задействовать программу. На данный момент срабатывает на ножках PB0 и PB1.
Направте на путь истинный, как сделать чтобы была задействована только например PB3. Сигнал идёт с кнопки подключенной на землю.
Вход, на котором кнопка - подтянут?
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

Сообщение Александр 2677 »

Да.
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

Сообщение Александр 2677 »

Да.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

Александр 2677 писал(а):Да.
А не работет в железе, или в AVRStudio ?
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

Сообщение Александр 2677 »

Проверяю на отладочной плате, а прогорамирую в CodeVisionAVR
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

Александр 2677 писал(а):Проверяю на отладочной плате, а прогорамирую в CodeVisionAVR
Скиньте исходник.
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

Сообщение Александр 2677 »

Готов к критике)))




#include <mega8>
#include <delay>

void main(void)
{

DDRB=0x00;
DDRD=0x00;
PORTB=0xFF;
PORTD=0xFF;
DDRC=0xFF;


while (1)
{

PORTC.0 = 1;
PORTC.1 = 0;
PORTC.2 = 1;
PORTC.3 = 0;
if (!(PIND & (1<<PIND.0)))
{

PORTC.0 = 0;
PORTC.1 = 1;
PORTC.2 = 0;
PORTC.3 = 1;
delay_ms(1000);

PORTC.0 = 1;
PORTC.1 = 0;
PORTC.2 = 0;
PORTC.3 = 1;
delay_ms(1000);
}
if (!(PINB & (1<<PINB.0)))
{

PORTC.0 = 0;
PORTC.1 = 1;
PORTC.2 = 0;
PORTC.3 = 1;
delay_ms(1000);

PORTC.0 = 0;
PORTC.1 = 1;
PORTC.2 = 1;
PORTC.3 = 0;
delay_ms(1000);
}
};
}
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

Александр 2677 писал(а):Готов к критике)))
Если писать:
1<<PINB.0
то это предполагает, что поместить (записать) в PINB.0 "1". Так как порт настроен на вход, то можно только считывать. Нужно так:
if (!(PINB & (0x01)))
если разряд "0". Если третий:
if (!(PINB & (0x08))), и т. д.
В PORTC можно сразу присваивать значение, а не писать по разрядам.
#include <mega8>
#include <delay> - нет расширения *.h
P.S. А можно проще:
if (!(PINB.0))
Последний раз редактировалось ValBag Вс мар 07, 2010 11:42:42, всего редактировалось 1 раз.
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

Сообщение Александр 2677 »

Спасибо, заработало :))
danil_
Родился
Сообщения: 1
Зарегистрирован: Вс мар 07, 2010 22:59:45

Сообщение danil_ »

а кто работал с картами MMC и SD в CVAVR? нид хелп :)
я взял простой код из их мануала - стал симулировать, а он не выходит из процедуры disk_status=disk_initialize(0);

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

/* ATmega128 I/O register definitions */ 
#include <mega128>
/* MMC/SD/SD HC card support */
#include <sdcard>
/* delay functions */
#include <delay>

/* the LCD is connected to PORTC outputs */
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
/* include the LCD driver routines */
#include <lcd>

/* Timer1 overflow interrupt frequency [Hz] */
#define T1_OVF_FREQ 100
/* Timer1 clock prescaler value */
#define T1_PRESC 1024L
/* Timer1 initialization value after overflow */
#define T1_INIT (0x10000L-(_MCU_CLOCK_FREQUENCY_/(T1_PRESC*T1_OVF_FREQ)))


/* 100Hz timer interrupt generated by ATmega128 Timer1 overflow */
interrupt [TIM1_OVF] void timer_comp_isr(void)
{
/* re-initialize Timer1 */
TCNT1H=T1_INIT>>8;
TCNT1L=T1_INIT&0xFF;
/* card access low level timing function */
disk_timerproc();

/* the rest of the interrupt service routine */
/* .... */

}

void main(void)
{
unsigned char disk_status;

/* initialize Timer1 overflow interrupts in Mode 0 (Normal) */
TCCR1A=0x00;
/* clkio/1024 */
TCCR1B=(1<<CS12)|(1<<CS10>>8;
TCNT1L=T1_INIT&0xFF;
/* enable Timer1 overflow interrupt */
TIMSK=1<<TOIE1;
/* initialize the LCD, 16 characters/line */
lcd_init(16);
/* globally enable interrupts */
#asm("sei")
/* initialize SPI interface and card driver */
disk_status=disk_initialize(0);
/* clear the LCD */
lcd_clear();
/* display disk initialization result on the LCD */
if (disk_status & STA_NOINIT) lcd_puts("Disk init failed");
else
if (disk_status & STA_NODISK) lcd_puts("Card not present");
else
if (disk_status & STA_PROTECT) lcd_puts("Card write\nprotected");
/* all status flags are 0, disk initialization OK */
else lcd_puts("Init OK");
/* wait 2 seconds */
delay_ms(2000);

/* the rest of the program */
/* .... */

while(1)
{
/* .... */

}
}


во вложении прямое подключение библиотек, не кодвижновых. в этом случае все время ошибка disk init failed
Вложения
SD_MMC.zip
(244.29 КБ) 292 скачивания
Takeru
Родился
Сообщения: 1
Зарегистрирован: Пн мар 08, 2010 18:17:10

Сообщение Takeru »

У меня такой вопросик =))ъ
какими командами в кодевижон заставить мк реагировать на принятые по USARTу данные ??
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

Читаем регистр UDR и реагируем...
Ответить

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