Страница 42 из 628
Добавлено: Ср дек 24, 2008 00:15:58
smac
ARV писал(а):...
в WinAVR даже имеется специальный макрос, делающий битовые установки еще более наглядными:
Согласен, но запись a=(1<<n), если можно так выразиться, компиляторонезависимая.

Добавлено: Чт дек 25, 2008 21:48:01
Ежик в тумане
подскажите как написать на си....
проверить одновременность выполнения условий
если PINB1==1 и PIND3==1 и PIND5==0 то делаем то то...
ой, вроде разобралась...
написала так:
if ((PINB&(1<<PB1)) &&
(PIND&(1<<PD5)) &&
(PIND&~(1<<PD3))) {
PORTD CLR_B(1);}
Может еще как то можно ?
Добавлено: Сб янв 03, 2009 13:32:22
SarCity
Выручайте советом, товарищи коты. Решил я собрать свое первое устройство на AVR (часы 5 цифр), купил мегу8, собрал программатор. При первых попытках результата не было - ошибка 24 (пользовался понипрог 2.05а), но полазив по сайтам скачал версию 2.06f и ура все заработало! Но через несколько часов вспомнил, что мне надо другую версию прошивки, но залить ее укже не получилось

танцы с бубном не помогали и я решил на скорую руку смастерить "5 проводков" но результат отрицательный. У меня предположение, что я фьюзами отключил внутреннее тактирование. Пользовался скриптом, любезно выложенным автором "часов 5 цифр". выкладываю ту часть, где фьюзы выставляются:
Код: Выделить всё
PAUSE "Прошить fuse биты?"
#Fuse High Byte: RSTDISBL WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST 0b11011001
#Fuse Low Byte: BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0 0b11100011
# note that a 1 means programmed. (для понипрог инвертируем)
WRITE-FUSE 0x261C
Добавлено: Сб янв 03, 2009 22:48:52
KDAlex
Как можно измерить индуктивность с помощью МК?
Добавлено: Вс янв 04, 2009 17:53:51
smac
KDAlex писал(а):Как можно измерить индуктивность с помощью МК?
С помощью одного только МК не получиться - минмальная обвязка нужна.
Принци измерения например, по иднуктивному сопротивлению.
Т. е. нужно сделать генератор синусоидального сигнала определенной частоты и амплитуды, к генератору подключать последоватьельную цепь из измеряемой индуктивности и резистора с известным сопротивлением, измерив амплитуду напряжения на иднуктивности, мы сможем вычислить ее индуктивное сопротивление, а затем, зная частоту нашего сигнала вычислим индуктивность. Соответсвенно в микроконтроллере должны присутствовать АЦП, чтобы с помощью него измерять амплитуду
Есть и другой способ - сделать генератор, частотозадающей цепью которого будет колебательный контур из измеряемой индуктиности и конденсатора известной емкости. Далее, измеряя частоту полученного сигнала и зная емкость конденсатора, можем вычислить индуктивность. Частоту с помощью микроконтроллера измерить не очень сложно, но нужно сначала сделать формирователь импульсов (который из синусоидального, ну или какой там есть, сигнала генератора сделает прямоугольные импульсы той же частоты).
Вот как-то так. Но должен заметить, что это всего-лишь принципы измерения, в реальности все посложнее будет.
Тини 13
Добавлено: Ср янв 14, 2009 12:21:07
FlyGreen
Товарище, у меня вопрос - помогите чайнегу. Есть ли разница между ATtiny 13A и ATtiny 13V ? Если программа писалась под 13А надо ли что-нибудь менять, что-бы эта программа заработала на 13V ?
Добавлено: Ср янв 14, 2009 14:07:37
Секретный кот
Насколько я понимаю, 13А – это исправленная версия обычной (глюкавой) Tiny13, а 13V – просто низковольтная версия обычной Tiny13. Соответственно проблемы при взаимозамене очень вероятны.
хм
Добавлено: Ср янв 14, 2009 17:36:08
FlyGreen
хм...а в чем они выразятЦо ?
Re: хм
Добавлено: Ср янв 14, 2009 19:31:56
Секретный кот
FlyGreen писал(а):хм...а в чем они выразятЦо ?
Ну во-первых у этих микрух разные допустимые напряжения питания. Во-вторых, у одной стандартное «вычислительное ядро», а у второй модифицированное. Полной совместимости точно нет. Так что всё только на свой страх и риск.
Добавлено: Ср янв 21, 2009 01:24:30
bdp2101
Подскажите пожалуйста, как в Меге16 занести значения в регистры ICR1A, OCR1A, OCR1B
В начале программы записываю сначала старшую, потом младшую часть а симулятор заносит 0x00ff либо 0xffff
все прерывания и устройства еще не включены
ldi r16,0x04
out icr1h,r16
ldi r16,0xb2
out icr1l,r16
ldi r16,0x04
out ocr1ah,r16
ldi r16,0xb0
out ocr1al,r16
Добавлено: Ср янв 21, 2009 11:34:27
asteroid7
В реальное железо именно так и заносятся.
Проверьте ICR1H == 0х27 ?, ICR1L == 0x26 ?
Добавлено: Чт янв 22, 2009 19:05:27
pirotehnick
Подскажите пожалуйста какие новые модели МК AVR могут асинхронно тактировать свой таймер от частоты в несколько раз превышающую ч. ЦПУ, т.е. где-то 40 МГц.
Как я понял Atmega88 это не то...
Добавлено: Пт янв 23, 2009 00:06:13
smac
pirotehnick писал(а):Подскажите пожалуйста какие новые модели МК AVR могут асинхронно тактировать свой таймер от частоты в несколько раз превышающую ч. ЦПУ, т.е. где-то 40 МГц.
Как я понял Atmega88 это не то...
Из "мелких" это тиньки 26 (уже старенькие) или 261 - поновее, также 25, еще 90PWM3b. Из семейства мега - не знаю.
Добавлено: Вт янв 27, 2009 23:45:17
GRAF
Начал программирование на C осваивать, не получается управлять ШИМ на 8-й меге.
Код:
Код: Выделить всё
# include <avr>
# include <avr>
unsigned int wgm=10;
void ext_int0_isr(void)
{
OCR1A+=wgm;
}
void main (void)
{
GICR=0x40; // разрешаем прервание INT0
MCUCR=0x02;// по ниспадающему сигналу
PORTD=0x04;
TCCR1A= _BV(WGM10) | _BV(WGM11) | _BV(COM1A1);//10 разрядная, неивертирующая ШИМ
TCCR1B= _BV(CS10);//делитель частоты не используется
DDRB= _BV(PB1) | _BV(PB2);//определяем вывод OC1A как выход
OCR1A=10; //начальное значение ШИМ
sei();//общее разрешение прерываний
while(1);
}
Запускаю симуляцию в VMLAB. По прерванию INT0 ничего не происходит, ширина импульсов остаётся прежней, равной начальному значению. Прерывание происходит, видно на осциллографе.
Что я неправильно делаю?
Добавлено: Ср янв 28, 2009 18:11:12
smac
GRAF писал(а):Начал программирование на C осваивать, не получается управлять ШИМ на 8-й меге.
...
Что я неправильно делаю?
Вроде криминала нет, единственное, попробуйте сначала записать OCR1A, и настройки а затем запустить таймер т. е.
Код: Выделить всё
TCCR1A= _BV(WGM10) | _BV(WGM11) | _BV(COM1A1);//10 разрядная, неивертирующая ШИМ
DDRB= _BV(PB1) | _BV(PB2);//определяем вывод OC1A как выход
OCR1A=10; //начальное значение ШИМ
TCCR1B= _BV(CS10);//делитель частоты не используется
Добавлено: Ср янв 28, 2009 18:39:01
GRAF
Хм, не помогает.
Попробовал ещё такой пример, типа того, как в даташите описано:
По прерыванию вызываю другую функцию, которая возвращает в регистр OCR1A +10. Двойная работа. Один хрен-не получается регулировать ширину...
Код: Выделить всё
unsigned int TIM16_WriteOCR1A( unsigned int n )
{
unsigned char sreg;
//unsigned int i; -ошибка в даташите, переназначение переменной
/* Save Global Interrupt Flag */
sreg = SREG;
/* Disable interrupts */
cli();
/* Set TCNT1 to i */
return n;
/* Restore Global Interrupt Flag */
SREG = sreg;
}
void ext_int0_isr()
{
_delay_ms(10);
OCR1A+=TIM16_WriteOCR1A(10);
}
полный код:
Код: Выделить всё
# include <avr>
# include <avr>
# include <avr>
void main (void)
{
GICR=0x40; // разрешаем прервание INT0
MCUCR=0x02;// по ниспадающему сигналу
PORTD=0x04;
TCCR1A= _BV(WGM10) | _BV(WGM11) | _BV(COM1A1);//10 разрядная, неивертирующая ШИМ
DDRB= _BV(PB1) | _BV(PB2);//определяем вывод OC1A как выход
OCR1A=10; //начальное значение ШИМ
TCCR1B= _BV(CS10);//делитель частоты не используется
sei();//общее разрешение прерываний
while(1);
}
unsigned int TIM16_WriteOCR1A( unsigned int n )
{
unsigned char sreg;
//unsigned int i; -ошибка в даташите, переназначение переменной
/* Save Global Interrupt Flag */
sreg = SREG;
/* Disable interrupts */
cli();
/* Set TCNT1 to i */
return n;
/* Restore Global Interrupt Flag */
SREG = sreg;
}
void ext_int0_isr()
{
_delay_ms(10);
OCR1A+=TIM16_WriteOCR1A(10);
}
UPD
Или это уже VMLAB шалит?

Добавлено: Ср янв 28, 2009 22:36:07
GRAF
Спасибо ARV, обработчик прерывания некорректно вызван. Правильно: ISR(INT0_vect);
Добавлено: Пт янв 30, 2009 19:28:40
NackGuit
Здравствуйте.
Вопрос по PIC'ам.
Как в PIC12C509A (8 ногий) все выводы настроить на выход? Чего то я не соображу, там регистром TRIS или как то по другому надо делать???
Добавлено: Пт янв 30, 2009 21:21:57
maverick5334
Как запрограммировать ATiny15 через LPT ?
P.S. Программатор для AVR есть (AVR910 USB), но именно ATiny15 он не шьёт...

Добавлено: Пт янв 30, 2009 21:27:15
biDE
NackGuit писал(а):Как в PIC12C509A (8 ногий) все выводы настроить на выход?...
Да, биты регистра TRIS отвечают за направление: 1=вход, 0=выход. Кроме ноги совмещенной с MCLR - она всегда вход.