Например TDA7294

Форум РадиоКот :: Просмотр темы - CodeVision AVR в вопросах и ответах
Форум РадиоКот
https://radiokot.ru/forum/

CodeVision AVR в вопросах и ответах
https://radiokot.ru/forum/viewtopic.php?f=57&t=5560
Страница 388 из 414

Автор:  jeka79 [ Пт апр 21, 2017 15:09:03 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

Аlex писал(а):
Такую фигню :
даже самый глупый компилятор должен вырезать не глядя.

я для примера написал, что с bit результат при компиляции меньше, при чем при объявлении переменных в bit код не растет совсем.

Автор:  mixon46 [ Вт апр 25, 2017 21:19:56 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

всем привет. написал я такой код но не идет обнуление переменной se. (переменная se глобальная)

interrupt [TIM1_COMPA] void sec (void) //вызов прерывания по совпадению счетного таймера
{
se++;
if (se==43199)
{se=0;};
if (PIND.6==0)
{delay_ms (10);
se=se+600;
};
PORTB.0=~PORTB.0;
}


не правильно что ли?

Автор:  ARV [ Вт апр 25, 2017 21:25:06 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

когда уже начинающие научатся приводить свой код целиком, чтобы не приходилось задавать наводящие вопросы? вопрос риторический отвечать не надо. и я не буду отвечать на ваш вопрос.

Автор:  mixon46 [ Вт апр 25, 2017 21:27:42 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

не хочу полностью. будете смотреть мой бред. и выговаривать потом :))
что я не правильно сделал. точку с запятой не правильно поставил?

вот и занимайся программированием. пока сам не сделаешь фиг кто подскажет

Автор:  Jack_A [ Вт апр 25, 2017 22:42:53 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

ARV, не такой уж он начинающий...
Я для МК на Си не пишу, но в глаза бросается: в одном месте se инкрементируется, в другом - увеличивается на 600, а поскольку проверка строго на равенство, то может перескочить это значение и дальше крутиться до посинения. И se, надеюсь, объявлена не однобайтовой переменной ? Еще сишники говорят - volatile помогает в подобном случае, им виднее.
Чем мог...

Автор:  WiseLord [ Ср апр 26, 2017 06:32:15 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

mixon46: Проделайте простые вычисления - с какой частотой вызывается таймер, далее, каков интервал времени между двумя прерываниями и, наконец, влезает ли 10мс задержка в этот интервал.

Это я к тому, что задержки в прерывании недопустимы вообще.

Ну и да, тип se неизвестен. Возможно, 43199 вообще невозможное значение.

P.S. И я упорно не понимаю желание людей писать код без форматирования. Словно сочинение какое-то. Ведь так нереально ошибки искать, когда даже логика кода глазами не видна. Когда, всего лишь добавление нескольких отступов делают всё гораздо читабельнее и понятнее.
Код:
interrupt [TIM1_COMPA] void sec(void)
{
    se++;
    if (se == 43199)
        se = 0;
    if (PIND.6 == 0) {
        delay_ms (10);
        se = se + 600;
    }
    PORTB.0 = ~PORTB.0;
}

Автор:  mixon46 [ Ср апр 26, 2017 10:24:46 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

Jack_A вы несомненно правы. Я прибавлял значение по 600 и поэтому произошел перескок. Дело было не в том почему переменная не обнулилась. Она бы обнулилась если бы значение было ровно 42199 но я же его перескочил. И соответственно это и привело к непоняткам. Я знаю что делать дальше. Спасибо ))

Автор:  Jack_A [ Ср апр 26, 2017 10:26:42 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

Ну дык оно ж ... :)


----------
Ставим плюсы :shock:

Автор:  mixon46 [ Ср апр 26, 2017 11:57:46 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

я бы поставил + только почему то не ставится. глюк какой что ли

Автор:  barsik_32rus [ Чт май 04, 2017 17:24:58 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

Ребят хелп,укажите на ошибку пожалуйста. Если даже в пустой программе включить Ацп и прерывания то начинает на постоянку работать порт B0,в чем проблема?
Спойлер#include <mega328p.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x40
unsigned char buttonclick=0;
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}


// Функция прерывания
interrupt [EXT_INT0] void ext_int0_isr(void)
{
buttonclick++;
}















void main(void)
{


// Настройка частоты
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

//АЦП
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;

// Конфигурация входов/выходов

PORTB=0x00;
DDRB=0x07;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0xE0;


// Инициализация прерывания
EICRA=0x00;
EIMSK=0x01;
EIFR=0x01;
PCICR=0x00;

#asm("sei")


while (1)
{
}
}

Автор:  mixon46 [ Чт май 04, 2017 21:49:03 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

скажите. вот у меня есть переменная. она равна 0. но при каждом прерывании если есть на ножке порта положительное напряжение прибавляется по 1. мне нужно сделать так что бы в другую переменную в зависимости от числа в той переменной к которой прибавляется единица прибавлялось разное число. так например если

от 1 до 5 то прибавим 1
от 6 до 10 то прибавим 5
от 11 до 15 то прибавим 10

задача получается примерно такой


unsigned int a=0;
unsigned int b=0;


interrupt [_____] void sec (void)
{if (PORTB.0==0)
{a++;}
else
{a=0;};


if (a>=1&&a<=5) \\если а в диапазоне от 1 до 5 то прибавим к b 1
{b=b+1;}
if (a>=6&&a<=10)
{b=b+5;}
if (a>=11&&a<=15)
{b=b+10;}
if (a>15)
{b=b+10;} \\если больше 15 то прибавим к b так же 10




правильно ли я написал?

Автор:  Аlex [ Пт май 05, 2017 07:37:03 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

mixon46 писал(а):
правильно ли я написал?
Если работает, значит правильно.

Автор:  ARV [ Пт май 05, 2017 09:05:02 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

но можно и чуть украсить :) если использовать else:
Код:
int d = 0;

if ((a>=1) && (a<=5)) d = 1;
else if ((a>=6) && (a<=10)) d = 5;
else if (a>=11) d = 10;

b += d;

Автор:  WiseLord [ Пт май 05, 2017 09:48:57 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

или так:
Код:
if (a > 10)
  b += 10;
else if (a > 5)
  b += 5;
else if (a > 0)
  b++;

Автор:  roman.com [ Пт май 05, 2017 11:45:08 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

mixon46 писал(а):
при каждом прерывании если есть на ножке порта положительное напряжение прибавляется по 1.

interrupt [_____] void sec (void)
{if (PORTB.0==1) // на ножке порта положительное напряжение
{a++;}
else
{a=0;};

Автор:  ARV [ Пт май 05, 2017 11:49:00 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

roman.com писал(а):
на ножке порта положительное напряжение
вы имели ввиду, что надо PINB.0? это да, проглядел

Автор:  COKPOWEHEU [ Пт май 05, 2017 16:46:32 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

Фигурные скобки расставлены "своеобразно". Стоит сделать по-человечески, чтобы отражали структуру программы.
Переменные, используемые и в прерываниях, и в основном цикле стоит объявить как volatile.

Автор:  mixon46 [ Вс май 07, 2017 20:52:42 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

как много всяких вариантов предложили. я их просмотрел и даже не представляю какой выбрать :)

на ножке когда 0 тогда + (я сам не правильно написал) обычно же ножку порта через кнопку к минусу питания

Автор:  bc2 [ Сб май 13, 2017 01:01:20 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

Здравствуйте, только начал изучать работу с atmega8 и CodeVision AVR
подскажите пожалуйста как реализовать вот такое.
на ногу 23 подаю например 1HZ а на 24 ноге нужно на выходе получить 1HZ * 2 то есть получается 2. Как реализовать умножение?

Изображение

Автор:  WiseLord [ Сб май 13, 2017 07:34:17 ]
Заголовок сообщения:  Re: CodeVision AVR в вопросах и ответах

Имхо, напрямую - никак. Если частоты невелики, можно фронты входного сигнала по прерыванию детектировать, измерять время и выдавать импульсы вдвое меньшей частоты на другом выводе.

Страница 388 из 414 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/