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

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

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

Сообщение AI_Disable »

miharus писал(а):На порту висят светодиоды. Я так понял что при powerdown они должны выключиться.

Ничего подобного. Все регистры (и содержимое ОЗУ) остаются в тех состояниях, в которых были до сна.
Аватара пользователя
miharus
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Пт фев 18, 2011 12:04:23

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

Сообщение miharus »

Аааааа! ну спасибочки)
ra6fnq
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт июл 22, 2010 12:35:01

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

Сообщение ra6fnq »

есть на коте проект термометра на МК http://radiokot.ru/lab/controller/18/
есть CodeVisionAVR V2.05.0 писать не умею, хотел просто изменить назначение ножек, однако говорит, что непоместится в тиньку! - проект не изменял (для начала)

Chip: ATtiny2313
Clock frequency: 8,000000 MHz
Memory model: Tiny
Optimize for: Size
(s)printf features: long, width
(s)scanf features: int, width
Promote 'char' to 'int': No
'char' is unsigned: Yes
global 'const' stored in FLASH: No
8 bit enums: Yes
Enhanced core instructions: Yes
Automatic register allocation: Yes
Smart register allocation: Yes

Build: 435
7829 line(s) compiled
1 error(s) - ошибку не расшифровывает...
1 warning(s)

Bit variables size: 0 byte(s)

Data Stack area: 0x60 to 0x7F
Data Stack size: 32 byte(s)
Estimated Data Stack usage: 27 byte(s)

RAM Global variables area: 0x80 to 0xDB
RAM Global variables size: 92 byte(s)

Hardware Stack area: 0xDC to 0xDF
Hardware Stack size: 4 byte(s)

Heap size: 0 byte(s)

EEPROM usage: 0 byte(s), 0,0% of EEPROM
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

ra6fnq писал(а):1 error(s) - ошибку не расшифровывает...
1 warning(s)


Странно всегда расшифровывал, а у вас нет...
Всегда показывает в окне просмотра проекта открывается так: View(вид)->Code Navigator(Дерево проекта)
Нужно обязательно устранить ошибки.
А вообще точно такой же проект тутеще и часы:)
В поисках истины человек развивается.
ra6fnq
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт июл 22, 2010 12:35:01

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

Сообщение ra6fnq »

это ошибка линкера - места в 2313 не хватает... :shock: у автора хватало, а у мня не хватает... в 4313 всё отлично... в чём причина? попробовать в какой нибудь старой версии CVavr?
что зацепило - полный код и возможность не копировать а разобраться, что в полтинник уже не так просто... :dont_know:
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

ra6fnq писал(а):это ошибка линкера - места в 2313 не хватает... :shock: у автора хватало, а у мня не хватает... в 4313 всё отлично... в чём причина? попробовать в какой нибудь старой версии CVavr?
что зацепило - полный код и возможность не копировать а разобраться, что в полтинник уже не так просто... :dont_know:

у автора хватило места.А что там у вас можете знать только вы.Откройте свойства проекта Project->Configure

там на вкладке C Compile в списке Optimizaiton level выберите maximal

А еще в строке ошибка, может поэтому не получается?:)
вот правильный код

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

 if (devices == 0) {
        str[0] = 'E';    //Выводим сообщение об ошибке.
        str[1] = 'r';
        str[2] = 'r';
        str[3] = '';
        while (1){
            //Ходим по кругу.
       };

Обновление
А еще ошибка линкера это потому, что массив для цифр неправильно продекларирован
вот как нужно:
flash unsigned char digit_ar[17]

Круто в статье такие ошибки.
В поисках истины человек развивается.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Всем привет. Возможно вопрос уже поднимался!...Есть 2 датчика температуры DS18B20. У них у каждого свой ром-код. CodeVision предлагает такой вариант обращения:
ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes);
в итоге чтение каждого датчика происходит так:
temp1=ds18b20_temperature(&ds18b20_rom_codes[0][0]);
temp2=ds18b20_temperature(&ds18b20_rom_codes[1][0]);
Т.е. по сути он каждый ром код записал в массив. Как мне обойти это вариант, зная ром-коды каждого из датчика и обращаться по типу - с учетом того что ром код 10 С5 С3 20 00 00 00:
temp1=ds18b20_temperature(10 С5 С3 20 00 00 00);
Т.е. я хочу, чтобы контроллер не проводил опрос всего и запись кодов каждого, а сразу же по данным кодам находил датчик и делал именно его опрос. Как сделать такую процедуру в CodeVision?
Самое гениальное - всегда самое простое
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

ну так сразу пропишите в массив свои адреса - и все. поиск не нужен, а все остальное остается без изменений.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Проблема вышла в том, что почему то не получается сделать таким образом. Я даже специально romcode выводил на экран, но я не знаю как правильно он записывается в памяти контроллера!
Ведь на экран я вывожу как захочу...А что есть на самом деле, не совсем знаю(
Самое гениальное - всегда самое простое
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

во-первых, ROM-код это 8 байт, а не 7, как у вас.
во-вторых, как он устроен, можно прочитать в даташите на датчик
в-третьих, как в памяти хранятся массивы, можно прочитать в любом букваре по Си
битва с дураками проиграна, победители торжествуют. слава победителям!
John-RADIST
Открыл глаза
Сообщения: 44
Зарегистрирован: Чт дек 15, 2011 19:04:24

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

Сообщение John-RADIST »

Доброго времени суток! Извините что вклиниваюсь!!! Нужна немножко помощь.
Фрагмент исходника:
interrupt [ADC_INT] void adc_isr(void){
result=ADCW*5-ADCW/10; //умножаем чтобы получить мВ и немного учитываем погрешности
sprintf(lcd_buffer,"Vlazhnost=%4umV",result);// записываем в буфер вторые 2 параметра
lcd_clear(); // очищаем жки
lcd_puts(lcd_buffer); // теперь выводим в него
delay_us(100);
if (knoka1_pressed==0) ADCSRA=0b11011111;

Здесь все понятно...Дальше другой фрагмент исходника со свичем:
while (1)
{
if(knoka1_pressed)
{
knoka1_pressed= 0;

switch(punkt_menu)
{
case 1:
lcd_gotoxy(1,0);
lcd_putsf("Punkt1");//печатаем
ADCSRA=0b11011111;

break;
case 2:
lcd_gotoxy(1,0);
lcd_putsf("Punkt2");//печатаем

break;
case 3:
lcd_gotoxy(1,0);
lcd_putsf("Punkt3");//печатаем

break;
default:
// punkt_menu= 1;
break;
}
}
Это фрагменты 2-х исходников. Подскажите как подредактировать текст программы, чтобы выбирая один из case-ов, второй строчкой на LCD выводились один из ("Punkt").

Спасибо!!!
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Скажите пожалуйста - вот инициализация USART в CodeVision:
#ifndef RXB8
#define RXB8 1
#endif

#ifndef TXB8
#define TXB8 0
#endif

#ifndef UPE
#define UPE 2
#endif

#ifndef DOR
#define DOR 3
#endif

#ifndef FE
#define FE 4
#endif

#ifndef UDRE
#define UDRE 5
#endif

#ifndef RXC
#define RXC 7
#endif

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 100
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

для того, чтобы принять символ нужно написать getchar(); Но как мне принять целое слово "Hello"?
Самое гениальное - всегда самое простое
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Вызвать гетчар пять раз. И желательно в нем самом прописать тайм-аут, который вернет определенный флаг при превышении времени ожидания посылки.
Docendo discimus
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Спасибо. Я думал, есть стандартная функция приема целого текста. Ведь отсылаю я через putsf("много символов")
Самое гениальное - всегда самое простое
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Когда мы отправляем, то знаем что и когда и куда отправляем. Когда принимаем, то пес его знает откуда и что и когда приползет.
Docendo discimus
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

ясно. Спасибо)
Самое гениальное - всегда самое простое
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Всем привет. Есть такой вопросик касательно Си. Вот я округляю значение до десятой части.
tx=int(ceil(tx/10));
Есть ли вариант обойти функции ceil -она ведь возрващает значение float((. К примеру мне нужно округлить 133 до 130
Самое гениальное - всегда самое простое
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

я бы сделал так:

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

(tx/10) * 10;
округление до десятков
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

точно. А мне и в голову не пришло) Вот только интересно: 133/10*10=130 при данном варианте
а если 136 - мне с него надо получить 140! Ведь такой вариант просто уберет дробное значение!
Самое гениальное - всегда самое простое
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

Volgol_555 писал(а):точно. А мне и в голову не пришло) Вот только интересно: 133/10*10=130 при данном варианте
а если 136 - мне с него надо получить 140! Ведь такой вариант просто уберет дробное значение!
вы тогда формулируйте почетче, что вам надо. самому слабО додумать, как сделать математическое окрагление до десятков?

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

((tx + 5) / 10) * 10
битва с дураками проиграна, победители торжествуют. слава победителям!
Ответить

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