CodeVision AVR в вопросах и ответах
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Попробую с "F", а что он значит?
Тип переменной у меня float.
Тип переменной у меня float.
Re: CodeVision AVR в вопросах и ответах
f должна быть маленькой. Обозначает зачение типа float.
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Не прокатывает, во вложении ошибка компилятора
- Вложения
-
- image.jpg
- (176.43 КБ) 394 скачивания
Re: CodeVision AVR в вопросах и ответах
У Вас ошибка в форматной строке, о чем компилятор Вам и сообщает - нельзя применять оператор "%" к вещественным числам. Вообще странный способ вывода числа у Вас придуман.
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
А как вы предлагаете выводить? Через sprintf()?
Пробую выводить таким способом,выводится нифига не напряжение, а "Voltage = 2f v"
Как быть?
И кстати вопрос с сравнением напряжения не закрыт... в уарт выводится ошибка о напряжении, не лежащем в пределах. хотя напряжение в этот момент = 6.36 вольт(и по тестеру и измерением ADC МК).
Пробую выводить таким способом,выводится нифига не напряжение, а "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 в вопросах и ответах
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Сериг писал(а):И кстати вопрос с сравнением напряжения не закрыт... в уарт выводится ошибка о напряжении, не лежащем в пределах
ну тут уже надо видеть код - оцифровка, преобразование...
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: CodeVision AVR в вопросах и ответах
Здраствуйте всем, недавно начал осваивать АВР и Codevision по примерам написал следующее[code]
Так вот все работает и хочу сюда пределать измеритель Амперчасов но никак не могу сообразить как это сделать
ПС кварц что в протеусе он не нужен, это я хотел таймер задействовать чтобы считал с 1с интервалом но чето не вышло.
Так вот все работает и хочу сюда пределать измеритель Амперчасов но никак не могу сообразить как это сделать
ПС кварц что в протеусе он не нужен, это я хотел таймер задействовать чтобы считал с 1с интервалом но чето не вышло.
- Вложения
-
- ЛСД.zip
- (106.52 КБ) 174 скачивания
Последний раз редактировалось sanya123 Ср фев 26, 2014 13:10:06, всего редактировалось 1 раз.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
В таком коде никто разбираться не будет.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: CodeVision AVR в вопросах и ответах
Мне разбиратся в нем и не нужно, он рабочий, просто дайте совет как осуществить подсчет амперчасов. Ток у нас есть остается либо задействовать асинхронный таймер чтобы подсчитывал часы либо минуты и их вставить в формулу для вывода на лсд либо ....как проще?
- Сериг
- Это не хвост, это антенна
- Сообщения: 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; }
Re: CodeVision AVR в вопросах и ответах
Сериг писал(а):В уарт выводится " Voltage = 2f "
Настройте проект для корректной работы sprintf с float
- Вложения
-
- 66.jpg
- (50.13 КБ) 368 скачиваний
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
подскажите как записывать в память епром показания датчиков. хочу сделать датчик уровня воды, нужно отслеживать положение попловка с помощью поплавка с магнитом и греконов. но есть положения когда поплавок находится между герконами и питание схемы будет отключатся так вот нужно что бы перед выключением устройства положение поплавка записывались в епром. или перезапись шла например 1 раз в 15 мин, для того что бы когда включишь устройство и поплавок окажется между герконами (датчиками) там где магнитное поле не работет то получится что нет сигнала , для этого мне нужно считать записаные показания до этого из епром. с епром не разу не работал , как его надо иницализировать или побьявлять?? и для разных микроконтролеров разные инициализации епром или нет. предполагаю использовать тини 13 или мега 8
- Valiullin.Amir
- Родился
- Сообщения: 5
- Зарегистрирован: Ср мар 13, 2013 08:41:58
Re: CodeVision AVR в вопросах и ответах
приветствую коты собираю дивайсину под названием "электропривод крышки багажника" хотелось бы у вас спросить про коллекторный шум зл. двигателя,
а именно как реализовать фичу зашиты двигателя от пере нагрузки как сделано в доводчиках окон стеклоподъёмника.
чувствую что надо копать в сторону коллекторного шума когда щетки двигателя перестают шуметь то авр дает сигнал реле и цепь размыкается
возможно ли это реализовать с помощью авр (tiny2313 или mega8-mega16)
схема дивайсины на данный момент
код программы cvar
З.Ы. если нужна была новая тема или написал не туда извините )
а именно как реализовать фичу зашиты двигателя от пере нагрузки как сделано в доводчиках окон стеклоподъёмника.
чувствую что надо копать в сторону коллекторного шума когда щетки двигателя перестают шуметь то авр дает сигнал реле и цепь размыкается
возможно ли это реализовать с помощью авр (tiny2313 или mega8-mega16)
схема дивайсины на данный момент
код программы 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
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
коты разъясните пожалуйста , хочу с помощью оптопары считывать импульсы микроконтролером атини 13. фиксировать импульсы буду с помощью внешнего прерывания по ниспадающему уровню. в визарде cvavr содал первоначальный код, написал прогу но вот в авр студио симуляторе заметил то что прерывание не происходит пока не поставиш флаг в GIFR INTF0, на картинке обвел кружком. код для инициализации создан визардом
MCUCR=0x02; // по нисподающему уровню
GIFR=0x40; // а вот тут не чего не плучается , в симуляторе авр студио после прочтения этой строки все равно отсается флаг пустым, в чем проблема
GIMSK=0x40; // включить прерывания от INT0
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;
};
};
}
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;
};
};
}
Re: CodeVision AVR в вопросах и ответах
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. А УСТАНАВЛИВАЕТСЯ этот флаг асинхронно самим фактом изменения уровня на отслеживаемой пине. Т.е. производя эту манипуляцию при инициализации, мы всего лишь очищаем флаг, чтобы сразу не было ложного прерывания, если каким-то образом он был ранее установлен, и подготавливаем прерывание именно по фактическому изменению уровня.
Re: CodeVision AVR в вопросах и ответах
GIFR |= (1<<6); - это лишнее (но не мешает).
Чтобы произошло прерывание, нужно поменять уровень с высокого на низкий. При отладке ставите, снимаете соответствующую галочку в PINB?
Еще, переменная pr должна быть volatile.
Чтобы произошло прерывание, нужно поменять уровень с высокого на низкий. При отладке ставите, снимаете соответствующую галочку в PINB?
Еще, переменная pr должна быть volatile.
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
всем спасибо за помощь, я балбес дергал не той ногой((( тыкал порт Б0 а надо было порт Б1.... все вробе бы пока заработало , сегдня буду дальше колдовать над кодом..)))
Re: CodeVision AVR в вопросах и ответах
Здравствуйте, как в CV при инициализации разместить массив в EEPROM по нужному мне адресу ?
Так же ещё интересует как стереть всю EEPROM ?
Точнее как сделать так что бы файл .eep был забит FF а не
только теми значениями которые используется в программе.
программатор UABasb программирую через Khazama AVR Programmer.exe
Так же ещё интересует как стереть всю EEPROM ?
Точнее как сделать так что бы файл .eep был забит FF а не
только теми значениями которые используется в программе.
Код: Выделить всё
:0A0000000102030405060708090BBE
:00000001FFпрограмматор UABasb программирую через Khazama AVR Programmer.exe