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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

ARV писал(а):...
в WinAVR даже имеется специальный макрос, делающий битовые установки еще более наглядными:

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

#define _BV(x) (1<<x)


Согласен, но запись a=(1<<n), если можно так выразиться, компиляторонезависимая. :)
Ежик в тумане
Встал на лапы
Сообщения: 80
Зарегистрирован: Ср ноя 28, 2007 09:42:28

Сообщение Ежик в тумане »

подскажите как написать на си....
проверить одновременность выполнения условий
если PINB1==1 и PIND3==1 и PIND5==0 то делаем то то...

ой, вроде разобралась...
написала так:
if ((PINB&(1<<PB1)) &&
(PIND&(1<<PD5)) &&
(PIND&~(1<<PD3))) {
PORTD CLR_B(1);}
Может еще как то можно ?
Аватара пользователя
SarCity
Прорезались зубы
Сообщения: 215
Зарегистрирован: Вт июн 10, 2008 09:17:06
Откуда: г. Саратов
Контактная информация:

Сообщение 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
Вложения
stk200_300.gif
Схема программатора
(19.37 КБ) 477 скачиваний
KDAlex
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 14, 2008 12:00:32

Сообщение KDAlex »

Как можно измерить индуктивность с помощью МК?
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

KDAlex писал(а):Как можно измерить индуктивность с помощью МК?

С помощью одного только МК не получиться - минмальная обвязка нужна.
Принци измерения например, по иднуктивному сопротивлению.
Т. е. нужно сделать генератор синусоидального сигнала определенной частоты и амплитуды, к генератору подключать последоватьельную цепь из измеряемой индуктивности и резистора с известным сопротивлением, измерив амплитуду напряжения на иднуктивности, мы сможем вычислить ее индуктивное сопротивление, а затем, зная частоту нашего сигнала вычислим индуктивность. Соответсвенно в микроконтроллере должны присутствовать АЦП, чтобы с помощью него измерять амплитуду
Есть и другой способ - сделать генератор, частотозадающей цепью которого будет колебательный контур из измеряемой индуктиности и конденсатора известной емкости. Далее, измеряя частоту полученного сигнала и зная емкость конденсатора, можем вычислить индуктивность. Частоту с помощью микроконтроллера измерить не очень сложно, но нужно сначала сделать формирователь импульсов (который из синусоидального, ну или какой там есть, сигнала генератора сделает прямоугольные импульсы той же частоты).
Вот как-то так. Но должен заметить, что это всего-лишь принципы измерения, в реальности все посложнее будет.
FlyGreen
Встал на лапы
Сообщения: 88
Зарегистрирован: Сб ноя 01, 2008 11:50:26

Тини 13

Сообщение FlyGreen »

Товарище, у меня вопрос - помогите чайнегу. Есть ли разница между ATtiny 13A и ATtiny 13V ? Если программа писалась под 13А надо ли что-нибудь менять, что-бы эта программа заработала на 13V ?
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

Насколько я понимаю, 13А – это исправленная версия обычной (глюкавой) Tiny13, а 13V – просто низковольтная версия обычной Tiny13. Соответственно проблемы при взаимозамене очень вероятны.
FlyGreen
Встал на лапы
Сообщения: 88
Зарегистрирован: Сб ноя 01, 2008 11:50:26

хм

Сообщение FlyGreen »

хм...а в чем они выразятЦо ?
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: хм

Сообщение Секретный кот »

FlyGreen писал(а):хм...а в чем они выразятЦо ?

Ну во-первых у этих микрух разные допустимые напряжения питания. Во-вторых, у одной стандартное «вычислительное ядро», а у второй модифицированное. Полной совместимости точно нет. Так что всё только на свой страх и риск.
bdp2101
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Пн окт 13, 2008 00:31:05

Сообщение 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
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

В реальное железо именно так и заносятся.
Проверьте ICR1H == 0х27 ?, ICR1L == 0x26 ?
pirotehnick
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж
Контактная информация:

Сообщение pirotehnick »

Подскажите пожалуйста какие новые модели МК AVR могут асинхронно тактировать свой таймер от частоты в несколько раз превышающую ч. ЦПУ, т.е. где-то 40 МГц.
Как я понял Atmega88 это не то...
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

pirotehnick писал(а):Подскажите пожалуйста какие новые модели МК AVR могут асинхронно тактировать свой таймер от частоты в несколько раз превышающую ч. ЦПУ, т.е. где-то 40 МГц.
Как я понял Atmega88 это не то...

Из "мелких" это тиньки 26 (уже старенькие) или 261 - поновее, также 25, еще 90PWM3b. Из семейства мега - не знаю.
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Сообщение 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 ничего не происходит, ширина импульсов остаётся прежней, равной начальному значению. Прерывание происходит, видно на осциллографе.
Что я неправильно делаю?
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

GRAF писал(а):Начал программирование на C осваивать, не получается управлять ШИМ на 8-й меге.
...
Что я неправильно делаю?

Вроде криминала нет, единственное, попробуйте сначала записать OCR1A, и настройки а затем запустить таймер т. е.

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

TCCR1A= _BV(WGM10) | _BV(WGM11) | _BV(COM1A1);//10 разрядная, неивертирующая ШИМ
DDRB= _BV(PB1) | _BV(PB2);//определяем вывод OC1A как выход

OCR1A=10; //начальное значение ШИМ

TCCR1B= _BV(CS10);//делитель частоты не используется
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Сообщение 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 шалит? :))
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Сообщение GRAF »

Спасибо ARV, обработчик прерывания некорректно вызван. Правильно: ISR(INT0_vect);
Аватара пользователя
NackGuit
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Сб дек 23, 2006 21:20:03
Откуда: г. Иркутск

Сообщение NackGuit »

Здравствуйте.
Вопрос по PIC'ам.
Как в PIC12C509A (8 ногий) все выводы настроить на выход? Чего то я не соображу, там регистром TRIS или как то по другому надо делать???
Никогда не знаешь что может случиться.
Аватара пользователя
maverick5334
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Сб апр 05, 2008 07:59:10
Откуда: Луганск
Контактная информация:

Сообщение maverick5334 »

Как запрограммировать ATiny15 через LPT ?

P.S. Программатор для AVR есть (AVR910 USB), но именно ATiny15 он не шьёт... :(
Аватара пользователя
biDE
Встал на лапы
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

NackGuit писал(а):Как в PIC12C509A (8 ногий) все выводы настроить на выход?...

Да, биты регистра TRIS отвечают за направление: 1=вход, 0=выход. Кроме ноги совмещенной с MCLR - она всегда вход.
Ответить

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