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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Проверил в Proteus`е таким кодом:

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

#include <tiny2313.h>
void main(void)
{
   DDRB|=0b111111;
   PORTB.0=1;
   PORTB.1=PORTB.0;
   PORTB.2=PINB.0;
   PORTB.3=0;
   PORTB.4=PORTB.3;
   PORTB.5=PINB.3;
}

В итоге:
На PORTB0,1,2 единицы, а на PORTB3,4,5 - нули. Значит, все были правы. Читать можно откуда угодно, если нужные биты настроены на выход (как в нашем случае)
ARV писал(а):и в последнем, и в двух предпоследних макросы написаны с ошибками - не смотрите на такие примеры

Спасибо, забыл совсем. Исправил.
Последний раз редактировалось *Trigger* Вт апр 01, 2014 22:16:46, всего редактировалось 1 раз.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

*Trigger* писал(а):Значит, все были правы. Читать можно откуда угодно, если нужные биты настроены на выход (как в нашем случае)
читать можно откуда угодно, как и писать, причем не взирая на настройки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Насчёт "не взирая на настройки" выше a_skr привёл пример, когда нельзя.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

*Trigger* писал(а):Насчёт "не взирая на настройки" выше a_skr привёл пример, когда нельзя.

можно всегда. нужно - по необходимости :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

С этим согласен. :))) Другой вопрос - что мы получим.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

*Trigger* писал(а):Другой вопрос - что мы получим.
иногда - весьма интересное: вывод 1 в порт PINx приводит к инвертированию уровня на пине PORTx, вывод 0 не меняет состояние пина. это, например, верно для многих AVR последнего поколения...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Где-то читал об этом, но сам никогда не использовал. Проще и понятнее написать в несколько действий (считать - инвертировать - записать), пригодится, наверное, только там, где памяти не хватает.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

*Trigger* писал(а): пригодится, наверное, только там, где памяти не хватает.
пригождается чаще там, где надо программно генерировать частоту в широком диапазоне - считать приходится каждый такт
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ARV писал(а):и в последнем, и в двух предпоследних макросы написаны с ошибками - не смотрите на такие примеры :) чтобы ошибок не было, надо "аргумент" макроса заключать в круглые скобки в "теле" макроса. см. пример знаменитого макроса:
#define _BV(x) (1 << (x))

странно :roll:
но когда я пишу так
#define TurnOff_Nixie (PORTB=0x0A;PORTD&= ~(1<<4 | 1<<3))
то эклипс ругается
а когда так
#define TurnOff_Nixie PORTB=0x0A;PORTD&= ~(1<<4 | 1<<3)
то нет
Tell Me The Truth
Аватара пользователя
ua1arn
Встал на лапы
Сообщения: 81
Зарегистрирован: Вт май 08, 2012 23:15:45
Откуда: Санкт - Петербург

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

Сообщение ua1arn »

макрос ( что-то ; что-то ещё) не применить. Сделайте так ( что-то , что-то ещё)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

спасибо
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

FreshMan писал(а):когда я пишу так
#define TurnOff_Nixie (PORTB=0x0A;PORTD&= ~(1<<4 | 1<<3))
то эклипс ругается
правильно: скобка воспринимается, как начало "параметров" макроса. кроме вашего второго варианта можно так:
#define TurnOff_Nixie() (PORTB=0x0A;PORTD&= ~(1<<4 | 1<<3))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ua1arn
Встал на лапы
Сообщения: 81
Зарегистрирован: Вт май 08, 2012 23:15:45
Откуда: Санкт - Петербург

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

Сообщение ua1arn »

Да, позднее время Про макрос-функцию забыл. Для макросов (с параметрами или без) есть хорошее правило оформления:

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

   #define spi_select(target, spimode) \
      do { prog_select(target); hardware_spi_connect(SPIC_SPEEDFAST, (spimode)); } while (0)   // начало выдачи информации по SPI
   #define spi_select2(target, spimode, speedcode) \
      do { prog_select(target); hardware_spi_connect((speedcode), (spimode)); } while (0)   // начало выдачи информации по SPI
   #define spi_unselect(target) \
      do { hardware_spi_disconnect(); prog_unselect(target); } while (0)   // заверщение выдачи информации по SPI  - поднять чипселект
   #define spi_complete(target) \
      ((void) (target), hardware_spi_complete())      // ожидание выдачи последнего байта в последовательности


По последнему примеру - что в выражении делает semicolon (точка с запятой)? Компилер при использовании будет ругаться. А вообще? окончательный вариант такой:

#define TurnOff_Nixie() do { PORTB = 0x0A; PORTD &= ~ (1U << 4 | 1U << 3); } while (0)
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Доброе субботнее утро! Иkи обед :D
Помогите, пожалуйста, понять логику внешних прерываний ATmega, по восходящему фронту.

Суть вопроса такова: нога даёт прерывание, когда "чувствует" восходящий фронт. Но следующее прерывание будет дано только при появлении восходящего фронта после возвращения в изначальное состояние, которое было до первого прерывания? Или же Второе прерывание по восходящему фронту будет дано сразу же, как только первый восходящий фронт перейдёт в постоянную величину и после этого появится новый?

Я приложил некую иллюстрацию для наглядности вопроса.

Изображение

Как мне кажется, истиным является второй вариант. Или подводные камни? :dont_know:
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25131
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

Вход прерывания является ЦИФРОВЫМ, то есть поддерживает только ДВА логических уровня. Прерывание генерируется при изменении этого уровня.
Например.
При питании МК +5 вольт уровнем логической единицы на входе будет напряжение в диапазоне примерно 4...5 вольт. Уровнем логического нуля - 0...1 вольт. Все остальные значения входного напряжения являются неопределенными.
Схема формирования сигнала прерывания должна обеспечивать гарантированные уровни логических 0 и 1.
Таким образом, нижняя эпюра НЕРАБОТОСПОСОБНА.
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Таким образом отличие прерывания по восходящему фронту от прерывания по ЛОГ 1 заключается в том, что прерывание по возрастающему фронту срабатывает 1 раз при переходе в ЛОГ 1 и не будет повторно взводить флаг, пока не вернтся в ЛОГ 0 и потом обратно в ЛОГ 1, а при прерывании по ЛОГ 1 флаг будет подниматься постоянно, пока на ножке присутствует ЛОГ 1? Так правильно?
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25131
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

Прерывание по восходящему фронту в понимании ЦИФРОВЫХ УРОВНЕЙ - это и есть прерывание по изменению с 0 на 1.
Никаких других вариантов и нет.
Если Вам нужно анализировать СКОРОСТЬ изменения АНАЛОГОВОГО сигнала (на Ваших эпюрах именно это показано), то нужно вначале продифференцировать сигнал с помощью ФВЧ (например простейшей RC цепью), затем отнормировать его в логические уровни с помощью компаратора и лишь затем подать на вход прерываний. А проще воспользоваться встроенным в МК компаратором и активировать прерывание по изменению его выходного сигнала...
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Да, да, я вас понял, на тему цифровых уровней.Но судя по всему так и есть: прерывание по 0 или 1 - поднимают флаги непрерывно, пока 0 или 1 на жоке. А прерывания по фронтам поднимаю флаг однократно. Следующее прерывание по фронту возможно только при изменении уровня на противоположный и обратно. Спасибо :)
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Замечу, у AVR mega нет прерывания по уровню 1. Да и в других 90S, 90USB, TINY не замечал.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25131
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

Прерывания по изменению состояния пинов порта в общем и есть прерывание по УРОВНЮ, потому что оно взводится как результат сравнения состояния пина и защелки последнего из прочитанных состояний пина (порта).
То есть пока пин не будет прочитан флаг прерывания опустить не возможно...
А вот входы внешних прерываний реагируют только на активные фронты...
Ответить

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