Страница 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 (нам ведь флаг прерывания надо сбросить

) — там два бита (у 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, и седьмой SREG. Но все равно когда в последующем, в другом месте программы, включаю прерывание INT2
то происходит еще одна обработка прерывания.
Что еще где нужно выключить или обнулить???
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 07, 2010 19:35:18
Gudd-Head
O-LED писал(а):Что еще где нужно выключить или обнулить???
Млин, я же написал, что не прерывание надо запрещать (в GICR), а флаг прерывания сбрасывать (в GIFR)!!!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 07, 2010 21:27:49
O-LED
ЗАРАБОТАЛО!!!
Большущее спасибо

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 светодиод и хотел им плавно поморгать, но он просто загорается и все...подскажите может ошибка в коде ?
Код: Выделить всё
#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 );
правильнее )
Спасибо ! Заработало !)) Понял где ошибка
