Страница 118 из 628

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

Добавлено: Чт окт 07, 2010 11:25:53
O-LED
Meteor писал(а):Скорее всего причина в том, что по фронтам устаналивается флаг события. Его надо тоже очистить перед разрешением прерывания. (подробнее см. даташит)
вроде ставлю по спаду -"Falling Edge". к тому же INT2 не работает по перепаду, только по фронту или по спаду импульса. А как очистить флаг прерывания?
Gudd-Head писал(а):
Meteor писал(а):Скорее всего причина в том, что по фронтам устаналивается флаг события. Его надо тоже очистить перед разрешением прерывания. (подробнее см. даташит)
Так и есть. У восьмой меги флаг сбрасывается записью лог. "1".
У меня мега16. куда нужно записать единицу чтоб сбросить флаг? С английским даташитом я не разберусь.

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

Добавлено: Чт окт 07, 2010 11:30:07
Meteor
Вам же уже сказали
флаг сбрасывается записью лог. "1"
Делается это с битами регистра GICR.

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

Добавлено: Чт окт 07, 2010 11:43:43
Gudd-Head
Meteor писал(а):Делается это с битами регистра GICR.
Я бы сказал, в регистре GIFR (нам ведь флаг прерывания надо сбросить :wink: ) — там два бита (у 8-ой Меги) INTF0 INTF1 — флаг прерывания 0 и 1 соответственно :)

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

Добавлено: Чт окт 07, 2010 13:06:28
Back-loz
Народ у меня вопрос поповоду модуля TWI в AVR микроконтроллерах. Вопрос такой какой код статуса устанавливается в регистре TWSR если состояние Старт былоо сформированно неправильно ну например потеря приоритета вовремя формирования состояния СТАРТ??

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

Добавлено: Чт окт 07, 2010 19:02:25
O-LED
Meteor, Gudd-Head
в даташите указано что разрешать\запрещать прерывание INT2 нужно с помощью 5 бита регистра GICR.
я в самом начале обработчика прерывания пишу

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

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

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

GICR|=0x20;
то происходит еще одна обработка прерывания.
Что еще где нужно выключить или обнулить???

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

Добавлено: Чт окт 07, 2010 19:35:18
Gudd-Head
O-LED писал(а):Что еще где нужно выключить или обнулить???
Млин, я же написал, что не прерывание надо запрещать (в GICR), а флаг прерывания сбрасывать (в GIFR)!!!

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

Добавлено: Чт окт 07, 2010 21:27:49
O-LED
ЗАРАБОТАЛО!!!
Большущее спасибо :beer:

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

Добавлено: Чт окт 07, 2010 22:49:00
pitbullko
Может подскажите - на АТмега48 в СМД корпусе 6,5,4,3 ножки обозначены как Vcc, GND, Vcc, GND это для удобства сделали чтобы можно было подключить или 6,3 или 5,4. или же все таки нужно каждую GND заземлить и на каждую Vcc подать питание?

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

Добавлено: Чт окт 07, 2010 23:37:32
Arlleex
Да, каждую заземлить и запитать.
Это делается для равномерного нагрева кристалла МК.

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

Добавлено: Пт окт 08, 2010 11:18:02
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-го канала ЦАП. Как это сделат правильно малой кровью? Главная прога большая, с несколькими прерываниями, и запускать еще одно не хочется.

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

Добавлено: Пт окт 08, 2010 11:30:02
Gudd-Head
Count_enable писал(а):ADC в free-running mode.
Всегда думал, что free-running mode для одного канала.

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

Добавлено: Пт окт 08, 2010 11:35:19
Count_enable
То есть надо ставить в single measurement mode и каждый раз enable/disable ADC?

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

Добавлено: Пт окт 08, 2010 11:44:17
Gudd-Head
Count_enable писал(а):То есть надо ставить в single measurement mode и каждый раз enable/disable ADC?
Ну да. Вы же всё равно переключаете каналы АЦП. Заодно и стартовым флажком махайте :)

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

Добавлено: Пт окт 08, 2010 11:50:31
Count_enable
Спасибо большое!

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

Добавлено: Сб окт 09, 2010 18:28:13
Civil
Когда-то видел но потерял схему подключения кнопки и светодиода на один вывод (для экономии).
Не подскажете схему и код?

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

Добавлено: Вт окт 12, 2010 18:01:45
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;
}

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

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

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

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

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

void init_pwm (void)
{
	TCCR0A= (1<<COM0A0)|(1<<WGM10);
	TCCR0B= (1<<CS10); 
 
	OCR0A=0x00; 
}

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

Добавлено: Вт окт 12, 2010 19:41:52
asteroid7
Wereww писал(а): хмм...хотелось бы и готовый с пояснениями - но я так понимаю он должен выглядеть так ?

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

	TCCR0A= (1<<COM0A0)|(1<<WGM10);
	TCCR0B= (1<<CS10); 
PWM Phase Correct для светодиода самое то!

только

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

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

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

Добавлено: Вт окт 12, 2010 20:06:08
Wereww
asteroid7 писал(а):
Wereww писал(а): хмм...хотелось бы и готовый с пояснениями - но я так понимаю он должен выглядеть так ?

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

	TCCR0A= (1<<COM0A0)|(1<<WGM10);
	TCCR0B= (1<<CS10); 
PWM Phase Correct для светодиода самое то!

только

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

TCCR0A= ( 1 << COM0A1 ) | ( 0 << COM0A0 ) | ( 1 << WGM10 );
правильнее )
Спасибо ! Заработало !)) Понял где ошибка :))