Страница 175 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 22, 2012 16:13:55
AI_Disable
miharus писал(а):На порту висят светодиоды. Я так понял что при powerdown они должны выключиться.
Ничего подобного. Все регистры (и содержимое ОЗУ) остаются в тех состояниях, в которых были до сна.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 22, 2012 17:38:06
miharus
Аааааа! ну спасибочки)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 22, 2012 18:16:40
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
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 22, 2012 21:09:36
vitalik_1984
ra6fnq писал(а):
1 error(s) - ошибку не расшифровывает...
1 warning(s)
Странно всегда расшифровывал, а у вас нет...
Всегда показывает в окне просмотра проекта открывается так:
View(вид)
->Code Navigator(Дерево проекта)
Нужно обязательно устранить ошибки.
А вообще
точно такой же проект тутеще и часы:)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 22, 2012 21:16:03
ra6fnq
это ошибка линкера - места в 2313 не хватает...

у автора хватало, а у мня не хватает... в 4313 всё отлично... в чём причина? попробовать в какой нибудь старой версии CVavr?
что зацепило - полный код и возможность не копировать а разобраться, что в полтинник уже не так просто...

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 22, 2012 21:47:30
vitalik_1984
ra6fnq писал(а):это ошибка линкера - места в 2313 не хватает...

у автора хватало, а у мня не хватает... в 4313 всё отлично... в чём причина? попробовать в какой нибудь старой версии CVavr?
что зацепило - полный код и возможность не копировать а разобраться, что в полтинник уже не так просто...

у автора хватило места.А что там у вас можете знать только вы.Откройте свойства проекта 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]
Круто в статье такие ошибки.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 23, 2012 14:52:26
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?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 23, 2012 14:54:13
Мастер Ломастер
ну так сразу пропишите в массив свои адреса - и все. поиск не нужен, а все остальное остается без изменений.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 23, 2012 15:01:48
Volgol_555
Проблема вышла в том, что почему то не получается сделать таким образом. Я даже специально romcode выводил на экран, но я не знаю как правильно он записывается в памяти контроллера!
Ведь на экран я вывожу как захочу...А что есть на самом деле, не совсем знаю(
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 23, 2012 15:05:10
Мастер Ломастер
во-первых, ROM-код это 8 байт, а не 7, как у вас.
во-вторых, как он устроен, можно прочитать в даташите на датчик
в-третьих, как в памяти хранятся массивы, можно прочитать в любом букваре по Си
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 23, 2012 19:14:47
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").
Спасибо!!!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 13:29:20
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"?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 13:34:48
pyzhman
Вызвать гетчар пять раз. И желательно в нем самом прописать тайм-аут, который вернет определенный флаг при превышении времени ожидания посылки.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 13:36:24
Volgol_555
Спасибо. Я думал, есть стандартная функция приема целого текста. Ведь отсылаю я через putsf("много символов")
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 13:40:35
pyzhman
Когда мы отправляем, то знаем что и когда и куда отправляем. Когда принимаем, то пес его знает откуда и что и когда приползет.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 13:41:05
Volgol_555
ясно. Спасибо)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 15:35:41
Volgol_555
Всем привет. Есть такой вопросик касательно Си. Вот я округляю значение до десятой части.
tx=int(ceil(tx/10));
Есть ли вариант обойти функции ceil -она ведь возрващает значение float((. К примеру мне нужно округлить 133 до 130
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 15:42:14
Мастер Ломастер
я бы сделал так:
округление до десятков
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 15:49:47
Volgol_555
точно. А мне и в голову не пришло) Вот только интересно: 133/10*10=130 при данном варианте
а если 136 - мне с него надо получить 140! Ведь такой вариант просто уберет дробное значение!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт янв 24, 2012 16:01:10
Мастер Ломастер
Volgol_555 писал(а):точно. А мне и в голову не пришло) Вот только интересно: 133/10*10=130 при данном варианте
а если 136 - мне с него надо получить 140! Ведь такой вариант просто уберет дробное значение!
вы тогда формулируйте почетче, что вам надо. самому слабО додумать, как сделать
математическое окрагление до десятков?