Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение O-LED »

Meteor писал(а):Скорее всего причина в том, что по фронтам устаналивается флаг события. Его надо тоже очистить перед разрешением прерывания. (подробнее см. даташит)

вроде ставлю по спаду -"Falling Edge". к тому же INT2 не работает по перепаду, только по фронту или по спаду импульса. А как очистить флаг прерывания?
Gudd-Head писал(а):
Meteor писал(а):Скорее всего причина в том, что по фронтам устаналивается флаг события. Его надо тоже очистить перед разрешением прерывания. (подробнее см. даташит)

Так и есть. У восьмой меги флаг сбрасывается записью лог. "1".
У меня мега16. куда нужно записать единицу чтоб сбросить флаг? С английским даташитом я не разберусь.
KIT
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Meteor »

Вам же уже сказали
флаг сбрасывается записью лог. "1"

Делается это с битами регистра GICR.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

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

Meteor писал(а):Делается это с битами регистра GICR.

Я бы сказал, в регистре GIFR (нам ведь флаг прерывания надо сбросить :wink: ) — там два бита (у 8-ой Меги) INTF0 INTF1 — флаг прерывания 0 и 1 соответственно :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Back-loz
Родился
Сообщения: 17
Зарегистрирован: Чт июл 16, 2009 11:51:34

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Back-loz »

Народ у меня вопрос поповоду модуля TWI в AVR микроконтроллерах. Вопрос такой какой код статуса устанавливается в регистре TWSR если состояние Старт былоо сформированно неправильно ну например потеря приоритета вовремя формирования состояния СТАРТ??
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение O-LED »

Meteor, Gudd-Head
в даташите указано что разрешать\запрещать прерывание INT2 нужно с помощью 5 бита регистра GICR.
я в самом начале обработчика прерывания пишу

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

GICR&=0xdf;
SREG&=0x7f;

т.е. обнуляю пятый бит GICR, и седьмой SREG. Но все равно когда в последующем, в другом месте программы, включаю прерывание INT2

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

GICR|=0x20;
то происходит еще одна обработка прерывания.
Что еще где нужно выключить или обнулить???
KIT
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

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

O-LED писал(а):Что еще где нужно выключить или обнулить???

Млин, я же написал, что не прерывание надо запрещать (в GICR), а флаг прерывания сбрасывать (в GIFR)!!!
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение O-LED »

ЗАРАБОТАЛО!!!
Большущее спасибо :beer:
KIT
Аватара пользователя
pitbullko
Встал на лапы
Сообщения: 84
Зарегистрирован: Пн фев 22, 2010 00:09:50
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение pitbullko »

Может подскажите - на АТмега48 в СМД корпусе 6,5,4,3 ножки обозначены как Vcc, GND, Vcc, GND это для удобства сделали чтобы можно было подключить или 6,3 или 5,4. или же все таки нужно каждую GND заземлить и на каждую Vcc подать питание?
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Arlleex »

Да, каждую заземлить и запитать.
Это делается для равномерного нагрева кристалла МК.
Не умеешь - не берись, но не взявшись не научишься...
Count_enable
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср дек 02, 2009 12:06:46

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Count_enable »

Более чем уверен, кто-то с этим уже сталкивался. Есть атмега128, надо прочитать все 8 каналов АЦП. Раз в 100 мс по прерыванию запускается процедурка:

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

void ADC_getdata()
{
    for(uint8_t i=0; i<8;i++)
    {
        ADMUX |= ( i & 0x0f);
          ADCSRA |= (1<<ADEN)|(1<<ADSC);
           while ((ADCSRA & 0x10)==0);
       [b] _delay_ms(1);             // dirty hack[/b]
           ADCSRA|=0x10;
        ADC_data[i]=ADCH;
        ADMUX &= ~( i & 0x0f);
        }
}

ADC в free-running mode.
проблема в том, что delay нежелателен, а без него почему-то 2 раза подряд считывается значение 0-го канала ЦАП. Как это сделат правильно малой кровью? Главная прога большая, с несколькими прерываниями, и запускать еще одно не хочется.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

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

Count_enable писал(а):ADC в free-running mode.

Всегда думал, что free-running mode для одного канала.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Count_enable
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср дек 02, 2009 12:06:46

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Count_enable »

То есть надо ставить в single measurement mode и каждый раз enable/disable ADC?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

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

Count_enable писал(а):То есть надо ставить в single measurement mode и каждый раз enable/disable ADC?

Ну да. Вы же всё равно переключаете каналы АЦП. Заодно и стартовым флажком махайте :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Count_enable
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср дек 02, 2009 12:06:46

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Count_enable »

Спасибо большое!
Civil
Встал на лапы
Сообщения: 138
Зарегистрирован: Вс май 16, 2010 01:13:39

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Civil »

Когда-то видел но потерял схему подключения кнопки и светодиода на один вывод (для экономии).
Не подскажете схему и код?
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

Что-то немогу разобраться с ШИМ на 2313, как тест подключил к PB2 светодиод и хотел им плавно поморгать, но он просто загорается и все...подскажите может ошибка в коде ? :roll:

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

#include <avr/io.h>

void pause (unsigned int a)
{   unsigned int i;
   for (i=a;i>0;i--);
}

void init_pwm (void)
{
   TCCR0A=0x80;
   TCCR0B=0x03;
 
   OCR0A=0x00;
}

int main(void)
{ unsigned char i;

   DDRB=0x04;
   init_pwm();

   while (1)
   {
      for (i=0;i<255;i++)
      {
         OCR0A++;
         pause(1000);
      }

      for (i=0;i<255;i++)
      {
         OCR0A--;
         pause(1000);
      }
   }
  return 1;
}
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение asteroid7 »

Wereww, Вы не тронули в регистрах таймера ни один бит WGMхх, отвечающий за ШИМ. Необходимо задать режим работы - "Waveform Generation Mode". Или хотите чтобы дали готовое решение инициализации?
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

asteroid7 писал(а):Wereww, Вы не тронули в регистрах таймера ни один бит WGMхх, отвечающий за ШИМ. Необходимо задать режим работы - "Waveform Generation Mode". Или хотите чтобы дали готовое решение инициализации?


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

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

void init_pwm (void)
{
   TCCR0A= (1<<COM0A0)|(1<<WGM10);
   TCCR0B= (1<<CS10);
 
   OCR0A=0x00;
}
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение asteroid7 »

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

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

   TCCR0A= (1<<COM0A0)|(1<<WGM10);
   TCCR0B= (1<<CS10);

PWM Phase Correct для светодиода самое то!

только

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

TCCR0A= ( 1 << COM0A1 ) | ( 0 << COM0A0 ) | ( 1 << WGM10 );
правильнее )
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

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

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

   TCCR0A= (1<<COM0A0)|(1<<WGM10);
   TCCR0B= (1<<CS10);

PWM Phase Correct для светодиода самое то!

только

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

TCCR0A= ( 1 << COM0A1 ) | ( 0 << COM0A0 ) | ( 1 << WGM10 );
правильнее )


Спасибо ! Заработало !)) Понял где ошибка :))
Ответить

Вернуться в «Разные вопросы по МК»