Страница 427 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 07:02:49
Alexeyslav
Задержку забыл
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 08:12:41
a_skr
можно чуток красивее:
Код: Выделить всё
void main(void)
{
DDRD = 1;
PORTC = (1<<4); // внутренняя подтяжка (можно не использовать внешнюю)
while(1)
{
while(PINC & (1<<4)) ; // ждем нажатия (появления нуля)
PORTD ^= 1; // переключаем выход
_delay_ms(100); // от дребезга
while((PINC&(1<<4)) == 0) ; // ждем отпускания (появления единицы)
_delay_ms(100); // от дребезга
}
}
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 11:21:45
Мikа
Вопрос с инициализацией стэка ATmega32.
Код: Выделить всё
.def R16=Temp1
-//-//-
ldi Temp1, RamEnd ;Инициализация стека
out SPL, Temp1
Компилятор пишет ошибку
Operand(s) out of range in 'ldi r16,0x85f'
0x85f = 1000 0101 1111
Надо полтора байта, то есть два регистра. Только что-то не догоню, как это сделать

SPL и SPH. Но как это правильно записать?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 11:25:07
Gudd-Head
ldi tmp, high(RAMEND); Set Stack Pointer to top of RAM
out SPH, tmp;
ldi r16, low(RAMEND);
out SPL, tmp;
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 11:27:57
Vov123
Пиши вот так
Код: Выделить всё
.def temp = r16
ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,temp
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 11:37:07
Мikа
Gudd-Head писал(а):ldi tmp, high(RAMEND); Set Stack Pointer to top of RAM
out SPH, tmp;
ldi r16, low(RAMEND);
out SPL, tmp;
Это я для самоконтроля распишу, а вы скажите, пожалуйста, так ли я понял или нет.
RamEnd = 0x85f = 1000 0101 1111
1000 0101 1111 = [0000 1000] [0101 1111] - [High] [Low] соответственно.
ldi tmp, high(RAMEND) Загрузка в tmp 0000 1000
out SPH, tmp Загрузка 0000 1000 в Stack Pointer High
ldi tmp, low(RAMEND) Загрузка в tmp 0101 1111
out SPL, tmp Загрузка 0000 1000 в Stack Pointer High
Vov123, так и написал, только High и Low не менял местами. Это принципиально?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 11:38:06
ibiza11
все правильно.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 12:49:49
Лютик
Добрый!
Такая вот проблема: настраиваю ШИМ на меге16ой:
Код: Выделить всё
SETBIT(DDRD,4);//на выход
SETBIT(DDRD,5);//на выход
TCCR1A=0xA1;//
TCCR1B=0x0A;//MODE 5 - FAST PWM 8 BIT
управляю ШИМом "OCR1AL=xxx".
Все работает, за исключением OCR1AL=0. В данном случае светодиод не гаснет полностью, а при подключении движка он гудит(через Н-мост). В чем может быть дело?
п.с. посмотрел на осцилографе при загрузке 0 все равно есть какая-то скважность, почему так?
после инициализации, то есть вроде все должно быть 0, все равно на выходе чтото есть =(
ответ
http://www.radiokot.ru/forum/viewtopic.php?f=20&t=30098
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 13:52:54
Мikа
парни, щас пытаюсь сделать прерывание на ATmega32, сначала хотел сделать по изменению сигнала на ножке INT0, потом по RESET.
Но нифига не получается.
Код: Выделить всё
ldi Temp1, 0b10000000 ;Глобальное разрешение прерываний
out SREG, Temp1
А дальше, чтобы, допустим, использовать прерывание по RESET, что надо сделать?
Я попробовал сделать так, как в статьях про бегущий огонек, но ниче не выходит.
Какие ещё настройки надо сделатЬ, чтобы изменение потенциала на RESET вызывало прерывание?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 13:55:50
Gudd-Head
Мikа писал(а):чтобы изменение потенциала на RESET вызывало прерывание?
Жжоте, товарищ

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 13:56:28
Мikа
А как надо было это правильно сказать?

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 14:00:37
Лютик
не знаю как в 32, но в остальных по ножке ресет Вы сможете вызвать перезагрузку контроллера, что ни есть прерывание. может я конечно, чего то не знаю, но ранее такого не встречал
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 14:04:55
Мikа
Наверное не так понял эту
статью. Тогда такой же вопрос, но относительно прерывания INT_0.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 14:05:07
ibiza11
Мikа писал(а):использовать прерывание по RESET, что надо сделать?
это "прерывание" вызывается автоматически, его не надо настраивать))) PC (Program Counter) устанавливается на адрес = 0 в памяти программ и программа начинается сначала)) по-человечески это называется сброс микроконтроллера)
выберите другой источник прерывания)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 14:11:07
Мikа
Выбрал, выбрал

INT_0. Как я понял, из 44 страницы даташита и статьи про прерывания, 2 $002 INT0
External Interrupt Request 0 означает прерывание, по изменению сигнала на ножке INT0. Правильно? Соответственно по этой же схемке

можно сделать на ногу INT0? Но что там надо прописать в программе кроме SREGa (а надо ли в нём что-то писать?) и sei. Ну и, естесственно, установки метки int_0: на обработчик прерывания.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 14:14:41
Gudd-Head
Мikа писал(а):Но что там надо прописать в программе кроме SREGa (а надо ли в нём что-то писать?) и sei.
Там ещё выбирается по фронту/спаду/уровню будет прерывание. А вообще, почитайте ДШ и/или Евстифеева, погоняйте код в Студии прежде чем лезть на форум со своими вопросами.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 14:22:00
Мikа
Ну я, как бы гоняю код в студии и в контроллере. Читаю и мануал и статьи на эту тему. А зачем тогда форум, если не лезть на него со своими вопросами? Фронт\спад уровня, это изначальное 1 или 0 в регистре данной ножки? То есть в DDRx ставим 0 - делаем входом, а потом в PORTx ставим 1 или 0 в зависимости от того, на что хотим реагировать?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср апр 17, 2013 14:31:27
ibiza11
Мikа, при всей терпимости к новичкам, я Вам советую почитать перевод даташита на какой-нибудь контроллер. Не надо переводить самостоятельно. В сети все есть. На первой странице гугла найдете то, что Вам нужно. Почему на форуме должны переписывать то, что уже написано в
открытом доступе.
Все же Ваш вопрос относится к основам и это следует изучать самостоятельно!
Вот когда появятся конкретные вопросы по реализации, милости просим.
Например: не получается то-то и то-то, пытался так.... так..... так..... и даже так.... поиграл в проктолога-стоматолога..... не получается! Вот код: .... . Вот схема: .... Вот условия возникновения глюка....
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт апр 18, 2013 09:15:14
Мikа
ДОброе утро, коты. Плз, с ходу не бейте, делаю как сказали, читаю, ищу, вникаю. Есть маленький вопросик относительно регистра
SREG. По даташиту бит номер 7, с названием I отвечает за глобальное включение и выключение прерываний. - Всё ясно.
Но после прочтения описания регистра
Спойлер
The Global Interrupt Enable bit must be set for the interrupts to be enabled. The individual
interrupt enable control is then performed in separate control registers. If the Global
Interrupt Enable Register is cleared, none of the interrupts are enabled independent of
the individual interrupt enable settings. The I-bit is cleared by hardware after an interrupt
has occurred, and is set by the RETI instruction to enable subsequent interrupts. The Ibit
can also be set and cleared by the application with the SEI and CLI instructions, as
described in the instruction set reference.
есть два вопроса.
1). При вызывании прерывания, бит 7 "чистится" аппаратно. Т.е. во время обработки этого прерывания, другое прерывание уже сработать не сможет?
2). Команда RETI устанавливает бит 7, для возможности обработки последующих прерываний. - Это, вроде, понятно.
3). Бит 7 можно устанавливать и чистить командами SEI и CLI.
То есть
Будет эквивалентно SEI.
Следовательно, последовательно эти 2 команды использовать не надо, достаточно одной?
Аналогично при очистке бита.
И последний вопрос, относительно
as described in the instruction set reference. в последнем предложении под спойлером. Я перевёл это на русский, но что это значит я не понял.
P.S. Очень надеюсь, что не вызову негатива, типа я лентяй, подайте мне всё на блюдичке.

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт апр 18, 2013 09:23:40
Леонид Иванович
Мikа писал(а):Следовательно, последовательно эти 2 команды использовать не надо, достаточно одной?
Да, достачточно одной команды SEI или CLI.
Аналогично при очистке бита.
Мikа писал(а):as described in the instruction set reference. Я перевёл это на русский, но что это значит я не понял.
"как описано в руководстве по системе команд".