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

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

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

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

Сообщение Meteor »

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

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

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

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

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

Сообщение ValBag »

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

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

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

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

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

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

Gudd-Head
Дык, а куда SPIEN делся?
В понипроге он всегда залочен.
И нафига галок на CKSEL понаставили?
То есть? Для кварца 3-8МГц написано установить CKSEL 3:1. CKSEL0 тоже установил. для задержки при включении 4.1мс... Всё по даташиту.
Вот, тренируйтесь как надо: http://www.engbedded.com/fusecalc/
Спасибо. Обязательно.

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

Сообщение ValBag »

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

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

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

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

Gudd-Head
Вы не установили, а сбросили в "0". Читайте внимательней (а также смотрите сцылку что я дал).
Да блин. Вот это засада... Всё как в поговорке: "поспешишь..."
Ссылку использовал по назначению :) . Оценил. Ещё раз благодарю.

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

Сообщение V2oD2o »

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

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

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

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

Сообщение 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();		         
}

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

Сообщение 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... не спрашивайте даже
Контактная информация:
Родился
Сообщения: 2
Зарегистрирован: Сб дек 11, 2010 12:54:44

Сообщение valera53 »

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

Сообщение valera53 »

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

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

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

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

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

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

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

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

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