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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Попробую с "F", а что он значит?
Тип переменной у меня float.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

f должна быть маленькой. Обозначает зачение типа float.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Не прокатывает, во вложении ошибка компилятора
Вложения
image.jpg
(176.43 КБ) 394 скачивания
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

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

Сообщение c717411 »

У Вас ошибка в форматной строке, о чем компилятор Вам и сообщает - нельзя применять оператор "%" к вещественным числам. Вообще странный способ вывода числа у Вас придуман.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

А как вы предлагаете выводить? Через sprintf()?
Пробую выводить таким способом,выводится нифига не напряжение, а "Voltage = 2f v"

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

sprintf(lcd_buf,"Voltage = %.2f V \r\n",voltage);
puts(lcd_buf);

Как быть?
И кстати вопрос с сравнением напряжения не закрыт... в уарт выводится ошибка о напряжении, не лежащем в пределах. хотя напряжение в этот момент = 6.36 вольт(и по тестеру и измерением ADC МК).

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

if (voltage < 6.3 || voltage > 6.9){printf("ERROR Voltage\r\n");  ok = 1; } 
else { printf("Voltage          OK\r\n"); ok = 0; }
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Сериг писал(а):А как вы предлагаете выводить?


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

printf("Voltage = %4.2f\n", voltage);
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Сериг писал(а):И кстати вопрос с сравнением напряжения не закрыт... в уарт выводится ошибка о напряжении, не лежащем в пределах

ну тут уже надо видеть код - оцифровка, преобразование...
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
sanya123
Открыл глаза
Сообщения: 71
Зарегистрирован: Пн ноя 04, 2013 20:56:24

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

Сообщение sanya123 »

Здраствуйте всем, недавно начал осваивать АВР и Codevision по примерам написал следующее[code]

Так вот все работает и хочу сюда пределать измеритель Амперчасов но никак не могу сообразить как это сделать
ПС кварц что в протеусе он не нужен, это я хотел таймер задействовать чтобы считал с 1с интервалом но чето не вышло.
Вложения
ЛСД.zip
(106.52 КБ) 174 скачивания
Последний раз редактировалось sanya123 Ср фев 26, 2014 13:10:06, всего редактировалось 1 раз.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

В таком коде никто разбираться не будет.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
sanya123
Открыл глаза
Сообщения: 71
Зарегистрирован: Пн ноя 04, 2013 20:56:24

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

Сообщение sanya123 »

Мне разбиратся в нем и не нужно, он рабочий, просто дайте совет как осуществить подсчет амперчасов. Ток у нас есть остается либо задействовать асинхронный таймер чтобы подсчитывал часы либо минуты и их вставить в формулу для вывода на лсд либо ....как проще?
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

unalex писал(а):
Сериг писал(а):А как вы предлагаете выводить?


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

printf("Voltage = %4.2f\n", voltage);

В уарт выводится " Voltage = 2f "
Вот так вот пытаюсь узнать истино ли выражение if (voltage < 6.3 || voltage > 6.9){printf("ERROR Voltage\r\n"); ok = 1; }
else { printf("Voltage OK\r\n"); ok = 0; }
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

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

Сообщение c717411 »

Сериг писал(а):В уарт выводится " Voltage = 2f "

Настройте проект для корректной работы sprintf с float
Вложения
66.jpg
(50.13 КБ) 368 скачиваний
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

подскажите как записывать в память епром показания датчиков. хочу сделать датчик уровня воды, нужно отслеживать положение попловка с помощью поплавка с магнитом и греконов. но есть положения когда поплавок находится между герконами и питание схемы будет отключатся так вот нужно что бы перед выключением устройства положение поплавка записывались в епром. или перезапись шла например 1 раз в 15 мин, для того что бы когда включишь устройство и поплавок окажется между герконами (датчиками) там где магнитное поле не работет то получится что нет сигнала , для этого мне нужно считать записаные показания до этого из епром. с епром не разу не работал , как его надо иницализировать или побьявлять?? и для разных микроконтролеров разные инициализации епром или нет. предполагаю использовать тини 13 или мега 8
Аватара пользователя
Valiullin.Amir
Родился
Сообщения: 5
Зарегистрирован: Ср мар 13, 2013 08:41:58

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

Сообщение Valiullin.Amir »

приветствую коты собираю дивайсину под названием "электропривод крышки багажника" хотелось бы у вас спросить про коллекторный шум зл. двигателя,
а именно как реализовать фичу зашиты двигателя от пере нагрузки как сделано в доводчиках окон стеклоподъёмника.
чувствую что надо копать в сторону коллекторного шума когда щетки двигателя перестают шуметь то авр дает сигнал реле и цепь размыкается
возможно ли это реализовать с помощью авр (tiny2313 или mega8-mega16)

схема дивайсины на данный момент
dev_rev003.jpg
работает если нажать на кнопку то мотор вращаться 2.5 сек потом встает, еще раз нажать вращаться в другую сторону 2.5 сек
(47.59 КБ) 371 скачивание

код программы cvar
Спойлер

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

#include <tiny2313.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{
int sel=0;
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
//#ifdef _OPTIMIZE_SIZE_

PORTA=0x01;
//DDRA=0x01;
PORTD=0x00;
DDRD=0xFF;
//PORTD.0=1;


while (1)
     {
     if(PINA.0==0)
          {
          delay_ms(30);
          if(sel==0)
            {
            PORTD.0=1;
            PORTD.1=0;
            sel=1;
            delay_ms(2000);
            }
          else
            {
            PORTD.0=0;
            PORTD.1=1;
            sel=0;
            delay_ms(2000);
            } 
          }
          else
          {
            PORTD.0=0;
            PORTD.1=0;
          }
     }
}

З.Ы. если нужна была новая тема или написал не туда извините )
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

было бы не плохо к коду пояснения писать.)) а что если кнопку поставить которую будет нажимать крышка при полном открытии или закрытии?? или датчик оптический щелевой. а еще видел где то ставили геркон ,его обматывали проводом получался электро магнит, затем его подключали к мотору кажется и когда тот упирался в преграду то на проводе начинал проходить ток тем самым создавая магнитное поле и гркон замыклся а там можно от геркона управление на мк сделать.
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

коты разъясните пожалуйста , хочу с помощью оптопары считывать импульсы микроконтролером атини 13. фиксировать импульсы буду с помощью внешнего прерывания по ниспадающему уровню. в визарде cvavr содал первоначальный код, написал прогу но вот в авр студио симуляторе заметил то что прерывание не происходит пока не поставиш флаг в GIFR INTF0, на картинке обвел кружком. код для инициализации создан визардом
MCUCR=0x02; // по нисподающему уровню
GIFR=0x40; // а вот тут не чего не плучается , в симуляторе авр студио после прочтения этой строки все равно отсается флаг пустым, в чем проблема
GIMSK=0x40; // включить прерывания от INT0

Спойлер#include <tiny13.h>

unsigned char pr;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
pr++;
}







// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=In
// State5=T State4=0 State3=0 State2=0 State1=0 State0=T
PORTB=0x00;
DDRB=0x1E;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// Interrupt on any change on pins PCINT0-5: Off

MCUCR=0x01;
GIFR=0x40;
GIMSK=0x40;
GIFR |= (1<<6);


// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;
#asm("sei")
while (1)
if (pr==3)
{
PORTB.1=1;
pr=0;
}
if (PORTB.1==1)
{
if (pr==3)
{
PORTB.1=0;
pr=0;
};

};





}

Безымянный.JPG
(40.56 КБ) 249 скачиваний
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

pashaumnov писал(а):GIFR=0x40; // а вот тут не чего не плучается , в симуляторе авр студио после прочтения этой строки все равно отсается флаг пустым, в чем проблема

А с какой радости там что-то должно появиться ?
The flag is cleared when the interrupt routine is executed.
Alternatively, the flag can be cleared by writing a logical
one to it.

В переводе на рабоче-крестьянский, этот флаг СБРАСЫВАЕТСЯ обработчиком прерывания или же именно записью 1 в этот бит GIFR. А УСТАНАВЛИВАЕТСЯ этот флаг асинхронно самим фактом изменения уровня на отслеживаемой пине. Т.е. производя эту манипуляцию при инициализации, мы всего лишь очищаем флаг, чтобы сразу не было ложного прерывания, если каким-то образом он был ранее установлен, и подготавливаем прерывание именно по фактическому изменению уровня.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

GIFR |= (1<<6); - это лишнее (но не мешает).
Чтобы произошло прерывание, нужно поменять уровень с высокого на низкий. При отладке ставите, снимаете соответствующую галочку в PINB?
Еще, переменная pr должна быть volatile.
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

всем спасибо за помощь, я балбес дергал не той ногой((( тыкал порт Б0 а надо было порт Б1.... все вробе бы пока заработало , сегдня буду дальше колдовать над кодом..)))
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Здравствуйте, как в CV при инициализации разместить массив в EEPROM по нужному мне адресу ?

Так же ещё интересует как стереть всю EEPROM ?
Точнее как сделать так что бы файл .eep был забит FF а не
только теми значениями которые используется в программе.

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

:0A0000000102030405060708090BBE
:00000001FF


программатор UABasb программирую через Khazama AVR Programmer.exe
Ответить

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