CodeVision AVR в вопросах и ответах
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Discrim, скопируйте сообщения компилятора после сборки проекта и вставьте сюда.
Ставим плюсы: )
Re: CodeVision AVR в вопросах и ответах
ibiza11 писал(а):Discrim, скопируйте сообщения компилятора после сборки проекта и вставьте сюда.
Спойлер
Build configuration: ReleaseChip: ATmega16
Clock frequency: 7,370000 MHz
Program type: Application
Memory model: Small
Optimize for: Size
(s)printf features: float, width, precision
(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 function parameters passing: Yes
Automatic register allocation: Yes
Smart register allocation: Yes
Build: 221
13141 line(s) compiled
No errors
1 warning(s)
Bit variables size: 0 byte(s)
Data Stack area: 0x60 to 0x15F
Data Stack size: 256 byte(s)
Estimated Data Stack usage: 1 byte(s)
RAM Global variables area: 0x160 to 0x167
RAM Global variables size: 8 byte(s)
Hardware Stack area: 0x168 to 0x45F
Hardware Stack size: 760 byte(s)
Heap size: 0 byte(s)
EEPROM usage: 0 byte(s), 0,0% of EEPROM
Program size: 364 words (728 bytes), 4,4% of FLASH
0 words (0 bytes), 0,0% reduced by Code Compression
Re: CodeVision AVR в вопросах и ответах
Discrim В папке Release не смотрел hex файл? Там есть опция - что это Debug или Release , соответсвенно hex в нужную папку генерится
Re: CodeVision AVR в вопросах и ответах
Уважаемые коты подскажите пожалуйста пишу программу которая считывает показания с датчиков по запросу через Usart 'a01e'прием по прерыванию организован, должна ответить 'OK'для проверки, но когда отвечает считывать показания с датчиков она прекращает в чем ошибка
//мое
if (data=='e') //если получен символ е
{adr[i++]='\0'; //к строке адреса добавитьсимвол конец строки
read_adr=0;//запрет чтения адреса
i=0;//обнулить счетчик адреса
rx_adr=atoi(adr);
if(rx_adr==adr_devase)
{puts("OK");
rx_adr=0;
putchar(0x0d);
puts(adr);
putchar(0x0d);
//itoa( T_sred,buf);
//puts(buf);
//putchar(0x0d);
}//если получен адрес
}//перевод строки в число
if(read_adr==1){adr[i++]= data;}//если чтение адреса разрешено читаем адрес в строку
if(data=='a'){read_adr=1;}//если получен символ "а" разрешить чтение адреса
//мое дописанно в обработчике прерывания генератора кода
а вот так считываю датчики
{
w1_init();
devices=w1_search( DS1820_SEARCH_ROM_CMD, RomCode ); //поиск датчиков на линии 1-wire
ageyn_1:temp= ds1820_temperature_10( &RomCode[0][0]);
if(temp==-9999)goto ageyn_1;
temp1=temp/80;
itoa( temp1,buf);
puts(buf);
putchar(0x0d);
ageyn_2:temp= ds1820_temperature_10( &RomCode[1][0]);
if(temp==-9999)goto ageyn_2;
temp2=temp/80;
itoa( temp2,buf);
puts(buf);
putchar(0x0d);
ageyn_3:temp= ds1820_temperature_10( &RomCode[2][0]);
if(temp==-9999)goto ageyn_3;
temp3=temp/80;
itoa( temp3,buf);
puts(buf);
putchar(0x0d);
T_sred=(( temp1+ temp2+ temp3)/3);
itoa( T_sred,buf);
puts(buf);
putchar(0x0d);
}//конец бесконечного цикла
Спойлер
//распознование адреса//мое
if (data=='e') //если получен символ е
{adr[i++]='\0'; //к строке адреса добавитьсимвол конец строки
read_adr=0;//запрет чтения адреса
i=0;//обнулить счетчик адреса
rx_adr=atoi(adr);
if(rx_adr==adr_devase)
{puts("OK");
rx_adr=0;
putchar(0x0d);
puts(adr);
putchar(0x0d);
//itoa( T_sred,buf);
//puts(buf);
//putchar(0x0d);
}//если получен адрес
}//перевод строки в число
if(read_adr==1){adr[i++]= data;}//если чтение адреса разрешено читаем адрес в строку
if(data=='a'){read_adr=1;}//если получен символ "а" разрешить чтение адреса
//мое
а вот так считываю датчики
Спойлер
while (1){
w1_init();
devices=w1_search( DS1820_SEARCH_ROM_CMD, RomCode ); //поиск датчиков на линии 1-wire
ageyn_1:temp= ds1820_temperature_10( &RomCode[0][0]);
if(temp==-9999)goto ageyn_1;
temp1=temp/80;
itoa( temp1,buf);
puts(buf);
putchar(0x0d);
ageyn_2:temp= ds1820_temperature_10( &RomCode[1][0]);
if(temp==-9999)goto ageyn_2;
temp2=temp/80;
itoa( temp2,buf);
puts(buf);
putchar(0x0d);
ageyn_3:temp= ds1820_temperature_10( &RomCode[2][0]);
if(temp==-9999)goto ageyn_3;
temp3=temp/80;
itoa( temp3,buf);
puts(buf);
putchar(0x0d);
T_sred=(( temp1+ temp2+ temp3)/3);
itoa( T_sred,buf);
puts(buf);
putchar(0x0d);
}//конец бесконечного цикла
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 писал(а):Так для однократного повторения эти операции одинаковы.
Я имел ввиду что между скобками вместо плюса надо порязрядное ИЛИ (если я правильно понял, нужно перевести из двоично-десятичной в двоичную). Еще настораживает что индекс массива начинается с еденицы, а не с нуля.
«И всё-таки она вертится!»
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
ребята подскажите пожалуйста, вопрос наверное глупый но как мне подключить в место переменного резистора аккумулятор литиионный, что бы схема индицировала его разряд?? схему прилагаю. если подключаю к ацп плюс а минус к минусу то при уменьшении вольт яркость всех светодиодов уменьшается а нужно что бы гасли поэтапно программа написана на 4в макс и 2.5 миним
с переменным резистором все работает и в протеусе и в железе . без него нет.
с переменным резистором все работает и в протеусе и в железе . без него нет.
Re: CodeVision AVR в вопросах и ответах
Доброго всем времени суток!
Решил вспомнить программирование, в итоге потратил пол дня впустую...
Ситуация такая, для оживления микроконтроллера и проверки монтажа решил для начала написать простую программу. Мигаем светодиодом:
МК Atmega32A. Светодиод загорается и... всё... такое ощущение что виснет на задержке.
Потратил пол дня, пока не решил попробовать старую мегу. То есть без буквы "А".
Воткнул на туже плату, прошил (только в проекте сменил на atmega32 без буквы "А"), тот же код и... мигает...
Далее попытки разные с разными хедерами и 32L и 32 и 32A... Короче не хочет и всё...
Таймер отдельно пробовал, работал нормально, регистры внешние заполняет нормально, отсюда вывод что работает без delay_ms, а как его воткну в код, на нём виснет...
В чём может быть проблема? В CVAvr что то нужно сделать ещё для "А"? Или может брак?
Решил вспомнить программирование, в итоге потратил пол дня впустую...
Ситуация такая, для оживления микроконтроллера и проверки монтажа решил для начала написать простую программу. Мигаем светодиодом:
Код: Выделить всё
#include <mega32a.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x40;
while (1)
{
PORTD.6 = 0b1;
delay_ms(1000);
PORTD.6 = 0b0;
delay_ms(1000);
}
}МК Atmega32A. Светодиод загорается и... всё... такое ощущение что виснет на задержке.
Потратил пол дня, пока не решил попробовать старую мегу. То есть без буквы "А".
Воткнул на туже плату, прошил (только в проекте сменил на atmega32 без буквы "А"), тот же код и... мигает...
Далее попытки разные с разными хедерами и 32L и 32 и 32A... Короче не хочет и всё...
Таймер отдельно пробовал, работал нормально, регистры внешние заполняет нормально, отсюда вывод что работает без delay_ms, а как его воткну в код, на нём виснет...
В чём может быть проблема? В CVAvr что то нужно сделать ещё для "А"? Или может брак?
Глупый не задает вопросы. Глупый и так все знает.
- Panda_Y2K
- Грызет канифоль
- Сообщения: 258
- Зарегистрирован: Пт сен 23, 2011 06:44:41
- Откуда: ЮФО
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Порт которым мигаешь настроен на вход.
PORTD = 0b1 ----> 0b00000001
а нужно 0b01000000
или 0x40;
PORTD = 0x40;
PORTD = 0b1 ----> 0b00000001
а нужно 0b01000000
или 0x40;
PORTD = 0x40;
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Re: CodeVision AVR в вопросах и ответах
Panda_Y2K писал(а):...
Да нет, всё правильно у меня. Я шлю не просто в порт D, а в порт D.6...
Проблема именно либо в самом контроллере, либо CVAVR для контроллера с буквой "А" работает неправильно или что-то не настроено...
Глупый не задает вопросы. Глупый и так все знает.
Re: CodeVision AVR в вопросах и ответах
Попробуйте сделать задержку еа аппаратном таймере, либо сделайте программно счётчик, а по нему таймер. Так же можно попробовать в протеусе прогнать (если там есть такой МК).
Re: CodeVision AVR в вопросах и ответах
Доброго времени суток!
Начинаю изучать CVAVR и Протеус.
Вот, собс-но хотел "поковырять"
http://radioparty.ru/index.php/componen ... n2-ds18b20
Скомпилить не удалось.
Пишет ошибка.
Предполагаю файл ( единственный на моём компе ) interrupt.h не той редакции?
Если да, то где взять другой? Самому писать?
Начинаю изучать CVAVR и Протеус.
Вот, собс-но хотел "поковырять"
http://radioparty.ru/index.php/componen ... n2-ds18b20
Скомпилить не удалось.
Пишет ошибка.
Предполагаю файл ( единственный на моём компе ) interrupt.h не той редакции?
Если да, то где взять другой? Самому писать?
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
вместо ISR надо interaupt, прога похоже написана в компиляторе вин авр.
да и если я не ошибаюсь в #include тоже не правильно описано.
да и если я не ошибаюсь в #include тоже не правильно описано.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: CodeVision AVR в вопросах и ответах
Для отсчета временных задержек используем стандартную функцию WINAVR util/delay.h
видно что исходник для WinAVR - для Codevision придется переделать.
Re: CodeVision AVR в вопросах и ответах
Спасибо!
Качну winavr.
Проще будет.
Качну winavr.
Проще будет.
Re: CodeVision AVR в вопросах и ответах
Подскажите пожалуйста новичку - есть где то готовые прошивки( мне нужно для защиты от перенапряжений сети). Нашел на форуме Кота интересные схемы, только эта ветка брошена еще в 2009 г. Писал в личку участникам форума которые писали что собирали но обратной связи к сожалению нету. Возможно единственный выход учится самому. Еще интересует где можно скачать CODEVISION AVR c паролями?
- Panda_Y2K
- Грызет канифоль
- Сообщения: 258
- Зарегистрирован: Пт сен 23, 2011 06:44:41
- Откуда: ЮФО
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Проблема именно либо в самом контроллере, либо CVAVR для контроллера с буквой "А" работает неправильно или что-то не настроено...
попробуй действительно с хидером для 32й без букв
вот так
i = 30000;
while(i) i--;
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Re: CodeVision AVR в вопросах и ответах
Panda_Y2K писал(а):...
Пробовал разными, всё равно виснет. Задержку то можно реализовать по другому, но заново писать ту же i2c.lib как то не охота... С ней тоже виснет...
Прихожу к выводу что всё таки МК бракованный... Старый, который без "А", работает нормально...
Глупый не задает вопросы. Глупый и так все знает.
Re: CodeVision AVR в вопросах и ответах
Подскажите, есть ли в CVAVR аналог баскомовской функции Shiftout и pulseout? Которые последовательно на ножку порта выводят побитно байт?
Суть в управлении внешним сдвиговым регистром. i2c функции не подходят, ибо уже используются на других ногах.
Есть какие то "красивые" решения? В том плане чтобы не было затратно для МК и в плане скорости и в плане размера кода?
Суть в управлении внешним сдвиговым регистром. i2c функции не подходят, ибо уже используются на других ногах.
Есть какие то "красивые" решения? В том плане чтобы не было затратно для МК и в плане скорости и в плане размера кода?
Глупый не задает вопросы. Глупый и так все знает.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: CodeVision AVR в вопросах и ответах
отсюда http://avru.cwx.ru/uchebnik/avr_and_reg ... hc164.html
Код: Выделить всё
void hc164_wr(unsigned char dig){ //подпрограмма вывода данных в регистр
unsigned char a;
for(a=0; a<8; a++){ //цикл для вывода 8 бит данных из массива
PORTB.0 = buf[dig] & 1<<a; //выводим в линию DATA текущий бит
PORTB.1=0; //опускаем линию CLK в лог.0
PORTB.1=1; //поднимаем линию CLK в лог.1
}
}
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
вообще народ обленилсяAndTer писал(а):Которые последовательно на ножку порта выводят побитно байт?
