Страница 286 из 421

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

Добавлено: Ср ноя 20, 2013 09:40:22
a_skr
unsigned char times;
times=printf("%d:%d:%d" ,hours, minutes, seconds);
Что возвращает printf? Правильно, кол-во выведенных символов. В ЕЕ попадет просто число (от 5 до 8, в зависимости от времени). Хотите в ЕЕ записать строку? Что-то вроде этого:

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

char str[9];
sprintf(str, "%02d:%02d:%02d", hr, min, sec);
for(i=0; i<8; i++) writeData(str[i]);

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

Добавлено: Ср ноя 20, 2013 09:52:08
kotriks
a_skr писал(а):
unsigned char times;
times=printf("%d:%d:%d" ,hours, minutes, seconds);
Что возвращает printf? Правильно, кол-во выведенных символов. В ЕЕ попадет просто число (от 5 до 8, в зависимости от времени). Хотите в ЕЕ записать строку? Что-то вроде этого:

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

char str[9];
sprintf(str, "%02d:%02d:%02d", hr, min, sec);
for(i=0; i<8; i++) writeData(str[i]);
спасибо огромное!! так и думал надо str заюзать но чёто всё мимо бани ходил.
Alex тоже спасибо что откликнулись.

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

Добавлено: Пт ноя 22, 2013 20:53:05
Mr.Ricko
Помогите разобраться с проблемой, тк функция delay_us () не работает с перменными, я решил исправить ситуёвину циклом, прошил контроллер, но че-то ничего не работает....

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

#include <mega8.h>  //библиотека микрухи
#include <delay.h> //библиотека задержки
#include <io.h> //библиотека ввода/вывода
void main(void)
{
int x,u;
x=1;
u=10;
DDRC=0b00111100; //2,3,4,5 и  порты C сконфигурировавны на выход
DDRD=0b00000011; //1 и 2 порты D - выход

while (1)
{
while (u<100)
{
   PORTC.5=1; //включаем 5 ножку порта С
   for (x=1; x<=u; x++)
   {
   delay_us(5); // ждем 5 мкс   
   }
   x=1;
   PORTC.5=0; //выключаем 5 ножку 
   delay_us(25); //ждем 5 мкс
   u=u+5;  
};
};
};
на конфигурацию портов внимания не обращайте, мне так проще с ними работать)

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

Добавлено: Пт ноя 22, 2013 21:19:18
Аlex
ничего не работает....
А что должно "работать" ?

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

Добавлено: Пт ноя 22, 2013 21:31:55
Mr.Ricko
на ногу повесил светодиод
Изображение
ну вот фото для наглядности...на видео нет смысла снимать тк яркость не меняется вообще

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

Добавлено: Пт ноя 22, 2013 21:40:02
Аlex
А что Вы хотели увидеть на микросекундных задержках ? :roll:

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

Добавлено: Пт ноя 22, 2013 21:44:08
Mr.Ricko
как бэ программа написана так, чтобы с помощью этих задержек изменять яркость(жалкое подобие ШИМ), ну по крайней мере мне кажется что прога так написана, вопрос в том, что яркость не меняется, как и картина на осцике, значит программа выполняется не так как я хочу)

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

Добавлено: Пт ноя 22, 2013 21:49:51
Аlex
Ну вот с этого и нужно было начинать свой пост, дабы избавить нас от гадания и доп. вопросов :)
У Вас переменная u доходит до 100 и программа тупо зацикливается без всяких действий.

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

Добавлено: Пт ноя 22, 2013 23:39:45
Mr.Ricko
типа того?

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

#include <mega8.h>  //библиотека микрухи
#include <delay.h> //библиотека задержки
#include <io.h> //библиотека ввода/вывода
void main(void)
{
int x,u;
x=1;
u=10;
DDRC=0b00111100; //2,3,4,5 и  порты C сконфигурировавны на выход
DDRD=0b00000011; //1 и 2 порты D - выход

while (1)
{
while (u<100)
{
   PORTC.5=1; //включаем 5 ножку порта С
   for (x=1; x<=u; x++)
   {
   delay_us(5); // ждем 5 мкс   
   }
   x=1;
   PORTC.5=0; //выключаем 5 ножку 
   delay_us(25); //ждем 5 мкс
   u=u+5;  
};
u=10;
};
};

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

Добавлено: Пт ноя 22, 2013 23:52:32
Аlex
Типа :)
А почему не сделать просто цикл от 10 до 100 с шагом 5 ? Зачем усложнять всякими while-ами и путать себя ?

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

Добавлено: Сб ноя 23, 2013 01:34:58
Mr.Ricko
поэтому и не сделал, с миллисекундами слишком заметно мерцание, на микросекундах же получается очень даже красиво.

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

Добавлено: Сб ноя 23, 2013 19:26:24
pashaumnov
помогите пожалуйста с режимом сна в тини 13. не как не разберусь , что же надо делать. и даташит прочитал и кучу всяких примеров пересмотрел, но они как правило на асамблее, на си не видел да к тому же еще в cvavr. понял что нужно разрешить сон а что нужно писать не знаю.(( нужен сон глубокий (повер довн) на sm1 (1) sm0 (0), пробуждение от внешнего прерывания только мне надо не 0 будить а 1цей. алгоритм работы устройства такой
// смотрим состояние pinb.3 если 0 то не чего не делаем и уходим в сон
// если 1 то пробуждаемся и запускаем таеймер на 20 секунд. на portb.4 подаем 1
// если в течении 20 секунд на pinb.3 состояние не изменилось и там до сих пор 1 то накидываем еще 20 сек
// если изменилось то завершаем работу и уходим в сон.
ну не как не пойму что нужно писать что бы разрешить сон. вот моя программа с кусками из других примеров для сна но компилироватьт не хочет выдает ошубку в строке void main void((
Спойлер#include <tiny13.h>
#include <sleep.h>
unsigned int counter;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{
if(++counter > 10) PORTB.4= 0; // если истекли 20 сек

}
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(PINB.3)
{
sleep_disable();
}
else
{
sleep_enable();
}
// 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=In Func2=Out Func1=Out Func0=Out
// State5=T State4=0 State3=T State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x17;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9,375 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

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

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

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// Global enable interrupts
#asm("sei")
#asm("sleep")

while (1)
{
if(PINB.3) // если вход == 1
{
counter= 0; // сбрасываем счетчик
PORTB.4= 1; // устанавливаем порт в "1"
}
};


}
}

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

Добавлено: Вс ноя 24, 2013 18:00:18
Amstron
У меня контроллер мега 168, работает на частоте 16 Мгц.
За одну секунду АЦП опрашивается примерно 1200 раз.
Проблема такая: не измеряется температура (датчик цифровой DS18b20) из за частого опрашивания АЦП.
Если закоментировать измерения АЦП, то температура измеряется.

Я думаю проблему можно решить так: запретить прерывания по окончанию преобразования АЦП. Как это сделать?

Второй вариант: не мерить АЦП в момент измерения температуры. Как это сделать?

Подскажите свои варианты! Заранее огромное спасибо!

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

Добавлено: Вс ноя 24, 2013 20:37:31
Аlex
Amstron, у Вас проблема с работой с DS18(B)20, а для этого есть отдельная тема, почитайте её и, если не найдёте ответа, задайте там.
CVAVR тут совсем не причём - тут обсуждается конкретный компилятор, и проблемы, связанные конкретно с ним.
К стати, это касается и остальных пользователей, особенно, оставивших 2 предыдущих перед Вами сообщения.

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

Добавлено: Вс ноя 24, 2013 23:19:58
vitalik_1984
pashaumnov писал(а):помогите пожалуйста с режимом сна в тини 13. не как не разберусь , что же надо делать. и даташит прочитал и кучу всяких примеров пересмотрел, но они как правило на асамблее, на си не видел да к тому же еще в cvavr. понял что нужно разрешить сон а что нужно писать не знаю.(( нужен сон глубокий (повер довн) на sm1 (1) sm0 (0), пробуждение от внешнего прерывания только мне надо не 0 будить а 1цей. алгоритм работы устройства такой
// смотрим состояние pinb.3 если 0 то не чего не делаем и уходим в сон
// если 1 то пробуждаемся и запускаем таеймер на 20 секунд. на portb.4 подаем 1
// если в течении 20 секунд на pinb.3 состояние не изменилось и там до сих пор 1 то накидываем еще 20 сек
// если изменилось то завершаем работу и уходим в сон.
ну не как не пойму что нужно писать что бы разрешить сон. вот моя программа с кусками из других примеров для сна но компилироватьт не хочет выдает ошубку в строке void main void((
Вот засунул в автоматический анализатор ошибок и получил ответ:

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

#include <tiny13.h>
#include <sleep.h>
unsigned int counter;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{//Open TIM0_OVF
      if(++counter > 10) PORTB.4= 0; // если истекли 20 сек
}//Close TIM0_OVF

interrupt [EXT_INT0] void ext_int0_isr(void) 
{// Open EXT_INT0
      if(PINB.3) 
         {//open if
         sleep_disable();
         }//close if
      else
         {//oper else
         sleep_enable(); 
         }//close else
//were the closing parenthesis '}' EXT_INT0 goes?
// Declare your global variables here         
PS И пользуйтесь отступами уровня, они иногда помогают найти такие ошибки :wink:
Amstron писал(а):За одну секунду АЦП опрашивается примерно 1200 раз.
А оно вам надо? Может проще запуск преобразования сделать после считывания с датчика?
И тем более еще неизвестно как вы там этот ацп опрашиваете :roll: если value=read_adc(x); То в топку ваш код вместе с программистом, который написал эту функцию :facepalm:

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

Добавлено: Пн ноя 25, 2013 14:10:30
pashaumnov
vitalik_1984 писал(а):Вот засунул в автоматический анализатор ошибок и получил ответ:
а что за программка такая?? можно название , очень полезная штуковина.))
по поводу мк буду разбираться по строчно.
для того что бы разрешить sleep в тини 13 нужно в 5ом регистре MСUCR прописать 1 для режима (pwr down) в регистрах sm0 поставить 1 а в регистре sm1 поставить 0
вопрос как это оформить в MCUCR нужно добавить sm0 и sm1 тогда буде выглядеть так MCUCR=0x10 правильно???
или как то надо по другому
второе , прерывание сна будет происходить при подаче на INT0 логического ноля. а если мне нужно делать прерывание 1цей??? и возможно ли это ??
Bit 5 - SE: Sleep Enable - Разрешение режима Sleep
Установленный в 1 бит SE разрешает перевод MCU в режим sleep по команде SLEEP.ИЛИ ЖЕ ТАК НАДО ??? MCUCR=0x20
ИЛИ ТАК MCUCR|=(1<<5)
ИЛИ ТАК MCUCR |= (1<<SE)|(1<<SM1)|(0<<SM0);И можно мне подробную расшифровку последней строчки.??MCUCR потом идет побитовое или и сдвиг se без изменения остальных битов , так??
можно ли было это записать по другому MCUCR = (SE=1);(SM1=1);(SM0=0);

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

Добавлено: Пн ноя 25, 2013 23:00:21
Amstron
Подскажите как настроить конфигурацию проекта, если использованно много глобальных переменных.

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

Добавлено: Вт ноя 26, 2013 01:18:17
edds
Может не в тему, или уже было это, вы меня извините, весь вечер еб..сь ....проект в CVAVR 2.05.0 отлаживаю AVR Studio 4.19 ... почему конструкции типа flag&=~(1<7); ,ADCSRA|=(1<6) ; не работают . Работают flag&=0b01111111;, ADCSRA|=0b01000000 ; ??? Работает PORTB|=1<num_digit ;.....

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

Добавлено: Вт ноя 26, 2013 01:58:01
pashaumnov
edds писал(а): почему конструкции типа flag&=~(1<7); ,ADCSRA|=(1<6) ; не работают . Работают flag&=0b01111111;, ADCSRA|=0b01000000 ; ??? Работает PORTB|=1<num_digit ;.....
попробуйте так flag&=~(1<<7); ,ADCSRA|=(1<<6) ;

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

Добавлено: Вт ноя 26, 2013 02:39:55
edds
пол часа назад нашёл.... так и есть, как пишешь, теперь переменную не хочет увеличивать, flag...
while (( flag&0b00111111)<32) {

//// flag |=(1<<7);
flag |=0b10000000;
flag++;
// while (0!=( flag&(1<<7))) { };
while ( flag&&0b10000000) { };
}

в отладчике не работает и всё, переменная обьявлена как volatile char flag=0 ; ...