Мелкие вопросы по МК и ПЛИС.
Re: Мелкие вопросы по МК и ПЛИС.
Chip115Опыта у меня у самого мизер, но ваш вопрос тянет на пару курсов института.
KIT
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Chip115, где зависает то?
Обычно заводят сторожевую собаку и натравливают перед опасным участком.
Еще не делают вызовы функций в обработках прерываний, а ставят флаги, по которым переходят на участки кода в основном цикле.
Обычно заводят сторожевую собаку и натравливают перед опасным участком.
Еще не делают вызовы функций в обработках прерываний, а ставят флаги, по которым переходят на участки кода в основном цикле.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Мелкие вопросы по МК и ПЛИС.
вопрос по кварцу к атмеге16. Я так понял что надо как-то прописывать источник синхронизации... Ибо прикол в том что контроллеру пофигу какой я ставлю кварц(или вообще не ставлю). Частота мигания светодиодов(прицепил для проверки проги) остаётся одинаковой... Юарт работает через раз... Подключал нормально. Кварц 7.3728 через 10пФ. Где прописать чтобы МК синхронизировался от кварца? Может там по умолчанию от Р-С генератора...
Успех - императив!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Roman Venom писал(а):Может там по умолчанию от Р-С генератора...
А в даташите что написано? Слышали что-нибудь про "фьюзы"?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Мелкие вопросы по МК и ПЛИС.
Совершенно верно. Обычно МК с завода идет настроенный на внутренний генератор. Выставьте (см. датшит) фьюзы CKSEL3...1, согласно частоте кварца.Roman Venom писал(а):Я так понял что надо как-то прописывать источник синхронизации...
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Мелкие вопросы по МК и ПЛИС.
ValBag&Gudd-Head
Выставил для кварца 7.3728...прошил. Теперь программатор контроллер вообще не определяет
Выставил для кварца 7.3728...прошил. Теперь программатор контроллер вообще не определяет
- Вложения
-
- 1.JPG
- (27.81 КБ) 336 скачиваний
Успех - императив!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Roman Venom писал(а):Выставил для кварца 7.3728...прошил. Теперь программатор контроллер вообще не определяет
Дык, а куда SPIEN делся? И нафига галок на CKSEL понаставили?
Вот, тренируйтесь как надо: http://www.engbedded.com/fusecalc/
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Мелкие вопросы по МК и ПЛИС.
Gudd-Head
В понипроге он всегда залочен.
То есть? Для кварца 3-8МГц написано установить CKSEL 3:1. CKSEL0 тоже установил. для задержки при включении 4.1мс... Всё по даташиту.
Спасибо. Обязательно.
П.С. так что случилось(почему такая бяка)? Контроллер можно выкидывать или что-то можно сделать?
Дык, а куда SPIEN делся?
В понипроге он всегда залочен.
И нафига галок на CKSEL понаставили?
То есть? Для кварца 3-8МГц написано установить CKSEL 3:1. CKSEL0 тоже установил. для задержки при включении 4.1мс... Всё по даташиту.
Вот, тренируйтесь как надо: http://www.engbedded.com/fusecalc/
Спасибо. Обязательно.
П.С. так что случилось(почему такая бяка)? Контроллер можно выкидывать или что-то можно сделать?
Успех - императив!
Re: Мелкие вопросы по МК и ПЛИС.
Так вы наоброт все поставили. На рисунке внизу пояснение: галочка - ноль, без - 1. У вас получился сигнал внешней синхронизации. Подавайте внешний сигнал и перепрошивайте.Roman Venom писал(а):ValBag&Gudd-Head
Выставил для кварца 7.3728...прошил. Теперь программатор контроллер вообще не определяет
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Roman Venom писал(а): То есть? Для кварца 3-8МГц написано установить CKSEL 3:1. CKSEL0 тоже установил.
Вы не установили, а сбросили в "0". Читайте внимательней (а также смотрите сцылку что я дал).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Мелкие вопросы по МК и ПЛИС.
Gudd-Head
Да блин. Вот это засада... Всё как в поговорке: "поспешишь..."
Ссылку использовал по назначению
. Оценил. Ещё раз благодарю.
ValBag
Так и сделал(хорошо что генератор есть). Методом втыка накрутил частоту и оно стёрлось. Спасибо, ваш совет спас жизнь меге16. А то я уже хотел доставать другую
Вы не установили, а сбросили в "0". Читайте внимательней (а также смотрите сцылку что я дал).
Да блин. Вот это засада... Всё как в поговорке: "поспешишь..."
Ссылку использовал по назначению
ValBag
Подавайте внешний сигнал и перепрошивайте.
Так и сделал(хорошо что генератор есть). Методом втыка накрутил частоту и оно стёрлось. Спасибо, ваш совет спас жизнь меге16. А то я уже хотел доставать другую
Успех - императив!
-
V2oD2o
- Встал на лапы
- Сообщения: 90
- Зарегистрирован: Чт дек 09, 2010 12:03:08
- Откуда: Зеленоград
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
уже второй день бьюсь в поисках адекватной литературе по pic16f84, уже даже весь ассемблер выучил.
подскажите что за банк1 и банк2? зачем это вообще и как работает?
подскажите что за банк1 и банк2? зачем это вообще и как работает?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
V2oD2o писал(а):подскажите что за банк1 и банк2? зачем это вообще и как работает?
В ПИКах не шарю, но рискну предположать, что это — две страницы (банка) регистров с одинаковыми номерами. И в регистре состояний есть битик, который указывает, какой банк регистров используется в настоящий момент... Так?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
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: Мелкие вопросы по МК и ПЛИС.
Про флаги.
Как известно, наступление событий (например принят байт по UART) приодит к установки флагов прерываний. Эта процедура стандартная и расписывать ее смысла нет. Так же нет смысла пережевывать почему обработка прерываний должна быть короткой. Но предположим, что существуют события которые требуют достаточно длинной обработки. Рассмотрим такой пример. Нужно формировать обработку сигналов в зависимости от пройденного системного времени. Пусть одно из событий будет требовать обработки в момент t= 1 мс, второе событие момент t=4 мс... N-ое событие в момент времени t= M*dt мс. Решение влоб - настройка таймера на минимальный интервал времени, накопление этого времени и сравнение с наперед заданными значениями в обработке прерываний таймера. Это потребует длительного цикла обработки и идет вразрез с общей концепцией "чем короче, тем лучше!". Тогда можно сделать обходной маневр, назначив один из регистров (на асме) или выделив переменнную (на С) обозвав его\ее Флагом. Таймер опять же настраиваем на минимальный интервал dt. Перед стартом очищаем регистр\переменную Флаг. В обработке прерываний таймера устанавлиаем бит 0 Флага в состояние 1 и выходим. В вечном цикле проводим анализ на факт установки бита 0 Флага. Если он установлен - переходим на участок обработки (вызываем функцию) где:
1) Инкрементируем системное время.
2) Сравниваем системное время с заданными интервалами.
3) Производим формирование команд при совпадении системного времени с заданным отрезком.
4) Перед выходом из функции сбрасываем бит 0 Флага.
Далее по индукции, можно на один региср повесить обработку до 8-ми событий. Причем часть битов Флага может устанавливаться в обработке предыдущих функциях обработки все того же Флага. При необходимости данный метод легко расширяется. Единственно необходимо следить за тем что бы максимальная цепочка функций не превысила интервал системного времени.
Вот как то так и продолжать!
Как известно, наступление событий (например принят байт по 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... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: Мелкие вопросы по МК и ПЛИС.
Всем привет
Re: Мелкие вопросы по МК и ПЛИС.
почитал вопросы/ответы на форуме. Похоже многие успешно собрали термометр по ссылке www.pic16.nm.ru Но у меня проблемма. На индикаторе меняются цыфры 58,3 и 08,3. помогите решить проблемму.
- КРАМ
- Друг Кота
- Сообщения: 25125
- Зарегистрирован: Чт янв 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: Мелкие вопросы по МК и ПЛИС.
КРАМ писал(а):Вам уже ответили, но чуток добавлю.
Ну уж если я правильно сказал (отталкиваясь от архитектуры 8051), то я тоже добавлю. В обработке прерывания может быть удобно просто переключить банк регистров чтобы не сохранять в стэке их состояние, а сохранить только слово состояния процессора
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- КРАМ
- Друг Кота
- Сообщения: 25125
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
В данном случае в обработчике требуется сохранять как минимум ДВЕ переменных. Это аккумулятор и регистр состояния. Аккумулятор принадлежит всем банкам сразу.
В 24-х ПИКах другая архитектура. Там 16 рабочих регистров, поэтому вопрос о защите их содержимого в обработчиках решается через стек.
В 12...18 ПИКах стек не доступен пользователю, поэтому либо его нужно отдельно организовать через косвенную адресацию, либо сохранять контекст в конкретные выделенные регистры.
В 24-х ПИКах другая архитектура. Там 16 рабочих регистров, поэтому вопрос о защите их содержимого в обработчиках решается через стек.
В 12...18 ПИКах стек не доступен пользователю, поэтому либо его нужно отдельно организовать через косвенную адресацию, либо сохранять контекст в конкретные выделенные регистры.