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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

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

Сообщение O-LED »

Chip115Опыта у меня у самого мизер, но ваш вопрос тянет на пару курсов института.
KIT
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

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

Сообщение Meteor »

Chip115, где зависает то?
Обычно заводят сторожевую собаку и натравливают перед опасным участком.
Еще не делают вызовы функций в обработках прерываний, а ставят флаги, по которым переходят на участки кода в основном цикле.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

вопрос по кварцу к атмеге16. Я так понял что надо как-то прописывать источник синхронизации... Ибо прикол в том что контроллеру пофигу какой я ставлю кварц(или вообще не ставлю). Частота мигания светодиодов(прицепил для проверки проги) остаётся одинаковой... Юарт работает через раз... Подключал нормально. Кварц 7.3728 через 10пФ. Где прописать чтобы МК синхронизировался от кварца? Может там по умолчанию от Р-С генератора...
Успех - императив!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Roman Venom писал(а):Может там по умолчанию от Р-С генератора...

А в даташите что написано? Слышали что-нибудь про "фьюзы"?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

Roman Venom писал(а):Я так понял что надо как-то прописывать источник синхронизации...
Совершенно верно. Обычно МК с завода идет настроенный на внутренний генератор. Выставьте (см. датшит) фьюзы CKSEL3...1, согласно частоте кварца.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

ValBag&Gudd-Head
Выставил для кварца 7.3728...прошил. Теперь программатор контроллер вообще не определяет :o
Вложения
1.JPG
(27.81 КБ) 336 скачиваний
Успех - императив!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Roman Venom писал(а):Выставил для кварца 7.3728...прошил. Теперь программатор контроллер вообще не определяет :o

Дык, а куда SPIEN делся? И нафига галок на CKSEL понаставили?
Вот, тренируйтесь как надо: http://www.engbedded.com/fusecalc/
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

Gudd-Head
Дык, а куда SPIEN делся?

В понипроге он всегда залочен.

И нафига галок на CKSEL понаставили?

То есть? Для кварца 3-8МГц написано установить CKSEL 3:1. CKSEL0 тоже установил. для задержки при включении 4.1мс... Всё по даташиту.

Вот, тренируйтесь как надо: http://www.engbedded.com/fusecalc/

Спасибо. Обязательно.

П.С. так что случилось(почему такая бяка)? Контроллер можно выкидывать или что-то можно сделать?
Успех - императив!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

Roman Venom писал(а):ValBag&Gudd-Head
Выставил для кварца 7.3728...прошил. Теперь программатор контроллер вообще не определяет :o
Так вы наоброт все поставили. На рисунке внизу пояснение: галочка - ноль, без - 1. У вас получился сигнал внешней синхронизации. Подавайте внешний сигнал и перепрошивайте.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Roman Venom писал(а): То есть? Для кварца 3-8МГц написано установить CKSEL 3:1. CKSEL0 тоже установил.

Вы не установили, а сбросили в "0". Читайте внимательней (а также смотрите сцылку что я дал).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

Gudd-Head
Вы не установили, а сбросили в "0". Читайте внимательней (а также смотрите сцылку что я дал).

Да блин. Вот это засада... Всё как в поговорке: "поспешишь..."
Ссылку использовал по назначению :) . Оценил. Ещё раз благодарю.

ValBag
Подавайте внешний сигнал и перепрошивайте.

Так и сделал(хорошо что генератор есть). Методом втыка накрутил частоту и оно стёрлось. Спасибо, ваш совет спас жизнь меге16. А то я уже хотел доставать другую :)))
Успех - императив!
V2oD2o
Встал на лапы
Сообщения: 90
Зарегистрирован: Чт дек 09, 2010 12:03:08
Откуда: Зеленоград
Контактная информация:

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

Сообщение V2oD2o »

уже второй день бьюсь в поисках адекватной литературе по pic16f84, уже даже весь ассемблер выучил.

подскажите что за банк1 и банк2? зачем это вообще и как работает?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

V2oD2o писал(а):подскажите что за банк1 и банк2? зачем это вообще и как работает?

В ПИКах не шарю, но рискну предположать, что это — две страницы (банка) регистров с одинаковыми номерами. И в регистре состояний есть битик, который указывает, какой банк регистров используется в настоящий момент... Так?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

Meteor писал(а):Chip115, где зависает то?
Обычно заводят сторожевую собаку и натравливают перед опасным участком.
Еще не делают вызовы функций в обработках прерываний, а ставят флаги, по которым переходят на участки кода в основном цикле.

Да пока не где. Просто задачу надо реализовать на мк. И зависание может привести к выходу из строя чего либо. вот и интересуюсь о том как избежать этих ситуаций. можете про флаги подробнее рассказать? И У меня в основном цикле идет только опрос клавиатуры.
Вот кусок кода:

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

void main (void)
{

   unsigned int delay_count;           // Used to implement a delay
   bit duty_direction = 0;             // 0 = Decrease; 1 = Increase
   PORT_Init ();                       // Initialize crossbar and GPIO
   OSCILLATOR_Init ();                 // Initialize oscillator
   PCA0_Init ();                       // Initialize PCA0
   PCA0MD &= ~0x40;                    // WDTE = 0 (clear watchdog timer
                                       // enable)
   
   while ((OSCICN & 0x40 ) == 0);      // Wait until stable

   Timer0_Init (freq[nfreq]);                     // Initialize the Timer0
   

   EA = 1;                             // Enable global interrupts
   CLR_LED
   
 
   while (1)
   {
      Scan();
         
   }; 

}
     

По таймеру идет прерываение. Вот подпрограмма обработки прерывания:

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

void Timer0_ISR (void) interrupt 1
{
   Start_M1();               
}


ничего критичного?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

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

Сообщение Meteor »

Про флаги.
Как известно, наступление событий (например принят байт по UART) приодит к установки флагов прерываний. Эта процедура стандартная и расписывать ее смысла нет. Так же нет смысла пережевывать почему обработка прерываний должна быть короткой. Но предположим, что существуют события которые требуют достаточно длинной обработки. Рассмотрим такой пример. Нужно формировать обработку сигналов в зависимости от пройденного системного времени. Пусть одно из событий будет требовать обработки в момент t= 1 мс, второе событие момент t=4 мс... N-ое событие в момент времени t= M*dt мс. Решение влоб - настройка таймера на минимальный интервал времени, накопление этого времени и сравнение с наперед заданными значениями в обработке прерываний таймера. Это потребует длительного цикла обработки и идет вразрез с общей концепцией "чем короче, тем лучше!". Тогда можно сделать обходной маневр, назначив один из регистров (на асме) или выделив переменнную (на С) обозвав его\ее Флагом. Таймер опять же настраиваем на минимальный интервал dt. Перед стартом очищаем регистр\переменную Флаг. В обработке прерываний таймера устанавлиаем бит 0 Флага в состояние 1 и выходим. В вечном цикле проводим анализ на факт установки бита 0 Флага. Если он установлен - переходим на участок обработки (вызываем функцию) где:
1) Инкрементируем системное время.
2) Сравниваем системное время с заданными интервалами.
3) Производим формирование команд при совпадении системного времени с заданным отрезком.
4) Перед выходом из функции сбрасываем бит 0 Флага.
Далее по индукции, можно на один региср повесить обработку до 8-ми событий. Причем часть битов Флага может устанавливаться в обработке предыдущих функциях обработки все того же Флага. При необходимости данный метод легко расширяется. Единственно необходимо следить за тем что бы максимальная цепочка функций не превысила интервал системного времени.
Вот как то так и продолжать!
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
valera53
Родился
Сообщения: 2
Зарегистрирован: Сб дек 11, 2010 12:54:44

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

Сообщение valera53 »

Всем привет
valera53
Родился
Сообщения: 2
Зарегистрирован: Сб дек 11, 2010 12:54:44

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

Сообщение valera53 »

почитал вопросы/ответы на форуме. Похоже многие успешно собрали термометр по ссылке www.pic16.nm.ru Но у меня проблемма. На индикаторе меняются цыфры 58,3 и 08,3. помогите решить проблемму.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25124
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

V2oD2o писал(а):уже второй день бьюсь в поисках адекватной литературе по pic16f84, уже даже весь ассемблер выучил.

подскажите что за банк1 и банк2? зачем это вообще и как работает?

Вам уже ответили, но чуток добавлю.
Разделение на банки ОЗУ потребовалось по простой причине - недостаточная разрядность команды. При 14-разрядах командного слова в программной памяти полный 9-разрядный адрес регистра в ОЗУ просто не помещается в одну команду.
Команда состоит из двух полей - кода операции и адресного поля операнда. На адресное поле операнда оставлено только 7 разрядов. Таким образом пришлось восьмой и девятый разряд разместить в слове состояния процессора. Это биты RP0 и RP1. Причем последний бит используется только в контроллерах, где 4 банка памяти.
Несколько неудобно, но нестрашно. Если задача требует гладкого поля памяти ОЗУ, то стоит применять 18-ые ПИКи. Там слово команды 16-разрядное и система адресации ОЗУ несколько другая (хотя и совместимая снизу вверх - код 12...16 ПИКов в 18 будет исполнен, ессно в АСМ записи).
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

КРАМ писал(а):Вам уже ответили, но чуток добавлю.

Ну уж если я правильно сказал (отталкиваясь от архитектуры 8051), то я тоже добавлю. В обработке прерывания может быть удобно просто переключить банк регистров чтобы не сохранять в стэке их состояние, а сохранить только слово состояния процессора :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25124
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

В данном случае в обработчике требуется сохранять как минимум ДВЕ переменных. Это аккумулятор и регистр состояния. Аккумулятор принадлежит всем банкам сразу.
В 24-х ПИКах другая архитектура. Там 16 рабочих регистров, поэтому вопрос о защите их содержимого в обработчиках решается через стек.
В 12...18 ПИКах стек не доступен пользователю, поэтому либо его нужно отдельно организовать через косвенную адресацию, либо сохранять контекст в конкретные выделенные регистры.
Ответить

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