Это точноARV писал(а):в каждой палатке свои неполадки
CodeVision AVR в вопросах и ответах
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
я не сравнивал размер кода, т.к. мало действительно универсальных исходников, которые без корректировки можно скомпилировать и на том и на другом, а ковыряться ради теста вручную самому править - лень. тем более что с CVAVR я вообще не работаю по религиозным причинам.
меня во всяком случае пока устраивает.
меня во всяком случае пока устраивает.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Все режимы работы генератора - внутренний, внешний, частотный интервал, выбираются конфигурационными битами SKSEL3...0. В программаторе CodeVisionAVR, их значения нужно выбрать в соответствие с типом МК. В AVR Studio задача облегчена: не нужно "шариться" по datasheet, чтобы найти нужные установки - все они приведены в окне. Требуется только "ткнуть".urg2000 писал(а):Помогите разобраться с fuse в CodeVisionAVR куда выставлять галочки чтобы включать внешний или внутренний генератор и на разную частоту в AVR Studio всё понятно поставил галочку на нужный внешний или внутренний генератор и нужную частоту в CodeVisionAVR не понятно.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
мне оно ни к чему: если есть возможность, я стараюсь использовать легально бесплатные продукты. поэтому ни CVAVR, ни куда более мощный IAR меня не интересуют.ValBag писал(а):ARV, спасибо за ответы. Вам может и ни к чему: вышла новая версия CVAVR 2.04.6. Одно из изменений - улучшение оптимизатора кода.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- aleksasm
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср ноя 25, 2009 18:56:55
- Откуда: Lithuania
Я для фюзов пользуюсь калькулятором, очень удобно из одной программы в другую переходить.
http://www.engbedded.com/fusecalc/
http://www.engbedded.com/fusecalc/
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
Подскажите пожалуйста как в этой строчке
if (!(PINB & (1<<PINB.0)))
настроить на какую ножку МК подать сигнал чтобы задействовать программу. На данный момент срабатывает на ножках PB0 и PB1.
Направте на путь истинный, как сделать чтобы была задействована только например PB3.
Сигнал идёт с кнопки подключенной на землю.
if (!(PINB & (1<<PINB.0)))
настроить на какую ножку МК подать сигнал чтобы задействовать программу. На данный момент срабатывает на ножках PB0 и PB1.
Направте на путь истинный, как сделать чтобы была задействована только например PB3.
Сигнал идёт с кнопки подключенной на землю.
Вход, на котором кнопка - подтянут?Александр 2677 писал(а):Подскажите пожалуйста как в этой строчке
if (!(PINB & (1<<PINB.0)))
настроить на какую ножку МК подать сигнал чтобы задействовать программу. На данный момент срабатывает на ножках PB0 и PB1.
Направте на путь истинный, как сделать чтобы была задействована только например PB3. Сигнал идёт с кнопки подключенной на землю.
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
Готов к критике)))
#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);
}
};
}
#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);
}
};
}
Если писать:Александр 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
а кто работал с картами MMC и SD в CVAVR? нид хелп
я взял простой код из их мануала - стал симулировать, а он не выходит из процедуры disk_status=disk_initialize(0);
во вложении прямое подключение библиотек, не кодвижновых. в этом случае все время ошибка disk init failed
я взял простой код из их мануала - стал симулировать, а он не выходит из процедуры 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 скачивания
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:




