Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Изучаем программирование PIC контроллеров

Список форумов » Программное обеспечение » Микроконтроллеры На страницу Пред.  1, 2, 3, 4, 5  След.
АвторСообщение
Leo140969
Участник
Сообщения: 343




10-11-2014 08:43

Ryinet, дык видимо прописываются биты защиты в слове конфигурации, в этом случае проверка после программирования не проходит. Либо довольствоваться проверкой ПРИ программировании, либо отключить биты защиты.
Eex
Участник
Сообщения: 1493




10-11-2014 09:35

Ryinet, тут изучали процесс написания программного кода а не заливку кода в контроллер. Открывай новую тему, а лучше пользуйся поиском, тема пустого дампа обмусолена вдоль и поперёк.
Ryinet
Забанен
Забанен
Сообщения: 86




10-11-2014 15:50

улыбка спасиб ребят что откликнулись засада была в битах конфигурациии)разобрался зашил уже пашет) гы-гы
polzovatelbezimeni
Новичок
Сообщения: 2




15-02-2015 04:03

Eex, очень жалко, что тема себя изжила. На мой взгляд очень полезная тема. Не думаю, что сайт посещают одни Гуру. Сам я тоже только начинаю изучать PICи, так что, если что не пинайте сильно. улыбка
Хорошо, что мигалка включается кнопочкой, но неплохо бы было, если бы этой кнопочкой она и выключалась. Я думаю, без прерываний здесь не обойтись или придется писать бесконечные проверки. Да и включать, я думаю, по прерыванию тоже будет правильнее. Тем более, если схема будет работать от батарейки, то находясь в слипе она гораздо дольше проработает. Представляю на Ваш суд, то что мне удалось нацарапать. Схема от Вашей отличается только тем, что светодиод подключен к 7й ноге и на общий. Пытаюсь отладить в протеусе. Но прога ведет себя как-то странно. При первом нажатии на кнопку прерывание не срабатывает и управление передается следующей команде. При повторном нажатии в обработчик таки попадаем, но флаг прерывания с первого раза не сбрасывается и обработчик срабатывает дважды, в результате чего флаг включения не устанавливается и светодиод не загорается.

  LED.rar  1,66 КБ  Скачано: 152 раз(а)

polzovatelbezimeni
Новичок
Сообщения: 2




15-02-2015 15:29

Извиняюсь.
Пара ошибочек в файле. Одну строку (лишнюю) убрал и одну добавил. С этой строкой
Код:
 bcf   GPIO, 0x00
программа работает как я описал выше. А если её убрать, то GPIF вообще не сбрасывается и обработка прерывания зацикливается. недовольство, огорчение

  LED.rar  1,72 КБ  Скачано: 142 раз(а)

Eex
Участник
Сообщения: 1493




15-02-2015 21:11

polzovatelbezimeni писал:
Eex, очень жалко, что тема себя изжила.

Всё в "руках" учеников. Нет учеников - нет темы улыбка. Мне позже писали в личку 2 человека, я их обучал оффлайн, они не захотели публичного обсуждения. Я считаю зря, проекты получились вполне достойные. Один успешно прочитал/ записал микросхему памяти, другой сделал блок управления стиральной машинкой с индикатором и таймером. Так что быть теме или не быть решайте сами.
polzovatelbezimeni писал:
Я думаю, без прерываний здесь не обойтись или придется писать бесконечные проверки.

Вот тут мой общественно-полезный проект. В нём 2 вида USB (коммуникация и USB-UART адаптер), 4 протокола c чипами, 8 современных криптоалгоритмов, загрузчик и куча всего сопутствующего. Так вот, в этом проекте ВООБЩЕ НЕТ прерываний! Нужны ли прерывания в проекте с мигающей лампочкой? Давай попробуем обойтись без них и посмотрим на сколько облегчим проект с мигающей лампочкой улыбка.
polzovatelbezimeni писал:
При первом нажатии на кнопку прерывание не срабатывает и управление передается следующей команде.

Когда я впервые сталкнулся с опросом кнопки в контроллере, для меня был настоящим откровением тот процесс, который я обнаружил. Казалось что кнопка опрашивается как ей вздумалось, постоянные глюки и ложные срабатывания не давали покоя. Когда я вывел мигание светодиода в код обработки кнопки и подключил к светодиоду осциллограф, оказалось что моя кнопка срабатывала порядка 400 раз за одно нажатие (пока летит контакт) и останавливался этот триггинг в не предсказуемом месте. С тех пор я понял 2 вещи по поводу опроса кнопки:
1. скорость опроса - злейший враг. Кнопки надо опрашивать медленно.
2. опрос кнопок требует специального кода (обработчик кнопок). Без специального кода не возможно правильно опросить переключающую кнопку (как в твоём проекте).
Я уже писал про кнопки, прочитай и сдей выводы. Так же я писал про прерывания, с них не следует начинать изучение контроллера, у вас не будет таких задачь, которые потребуют прерывания.

Комментарии по коду:
-. Построение проекта начинается с постановки задачи, а не задача придумывается иcxодя из кода. То есть если задача требует включить лампочку, то надо её включить. Городить таймеры и прерывания не надо пока этого не потребует задача.
-. хороший код - это работающий код. Код пишется по функциям, а не весь целиком за раз. То есть вначале надо включить лампочку и отладить эту функцию. Потом выключить лампочку и тоже отладить. Потом опросить кнопку и откадить. Потом добавить счётчик и отладить. Потом вызывать ОТЛАЖЕННЫЕ функции как требует задача. В конце ты увидишь что твоя задача не потребовала ни прерываний, ни таймеров и отлично будет всё работать по скольку отлажено всё по отдельности.
-. если ты настаиваешь на своём коде, то во первых добавь медленный обработчик кнопок, во вторых убери SLEEP, в третих пока не вызывай прерывания, вместо них опрашивай кнопки и по кнопкам вызывай требуемые функции. После того как всё отладишь без "заморочек", тогда подключай обратно все прерывания и слипы.
pavel-pervomaysk
Your editor
Сообщения: 7976




16-02-2015 23:27

Пройдет время, все старое прочитается с улыбкой на лице.
gleco1
Новичок
Сообщения: 4




20-02-2015 16:27

Сегодня наткнулся на эту тему. Именно этого мне и не хватало и это то что нужно. Еех! У вас истинно педагогический талант. Было бы здорово если бы Вы сделали бы что-то похожее на AVR123 но на MPASMe. Очень жаль что пропадут Ваши великолепные наработки. Изложите, пожалуйста , в виде книжечки. Ведь я уверен, что в электронном виде это у вас сохраняется. На "умников" не обращайте внимания.
voroncov
Новичок
Сообщения: 11




25-02-2015 21:34

Тема хорошая, жаль все времени нет, пока дошел только до инициализации. Спасибо учителю!
Eex
Участник
Сообщения: 1493




25-02-2015 22:02

Да,вроде хорошая, да вот беда не учится никто улыбка
Leo140969
Участник
Сообщения: 343




28-02-2015 21:00

Недавно руки дошли до испытания LCD индикатора + PIC16F84. Компилятор использую МикроСи Про 6.50, скачанный с оф. сайта и вылеченный. Примеры из хелпера прекрасно работают:
char txt1[] = "mikroElektronika";
Lcd_Out(4,2,txt1);
Но вывести 4 строки сразу не удалось, не хватило ОЗУ, т.к. символьные переменные txt1 - txt4 представляют собой массивы размерностью [количество букв + символ нуля]. Хорошо, если ОЗУ достаточно, а если нет? Чтобы разместить массивы в программной памяти, их объявляют так:
const char txt1[] = "mikroElektronika";
при этом ОЗУ действительно экономится, но массив в программе не может быть модифицирован, и самое неприятное, функция "Lcd_Out(4,2,txt1)" ругается на аргумент "txt1" (тип должен быть "char", а не "const char". Я решил эту проблему объявлением дополнительного массива в ОЗУ, полагаю, это не лучший способ, но всё заработало.
const char txt1[] = "mikroElektronika";
const char txt2[] = "EasyPIC6";
char txt_RAM [20] ;
void array_RAM ( const char txt[]); // прототип

.......................................................................

Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
array_RAM (txt1);
Lcd_Out(1,2,txt_RAM ); // Write text in first row

Delay_ms(1000);

array_RAM (txt2);
Lcd_Out(3,2,txt_RAM);

............................................................................

void array_RAM ( const char txt[])
{
i = 0;
while ( i < 20 )
{
txt_RAM [i] = txt[i] ;
if ( txt[i] == 0 ) break;
i++;
}
}
Функция "array_RAM" копирует массив из памяти программ в ОЗУ перед выводом строки в индикатор.
Может, кто-нибудь подскажет более удобный способ? Указатели я так и не освоил
Eex
Участник
Сообщения: 1493




01-03-2015 00:06

Leo140969, Как-то всё сумбурно, даже не понятно на какой вопрос ответить.
Leo140969 писал:
Может, кто-нибудь подскажет более удобный способ?

Мы тут проходили ассемблер, на С переходить не планировали. Собственно тебе тоже надо бы начать с ассемблера, иначе дальше чем использование чужих примеров продвинешься не скоро.
В твоей ситуации надо найти в библиотеках языка функцию вывода строк из программной памяти. Аналог функции Lcd_Out(), но из ROM, типа Lcd_Out_ROM(). Копай help на библиотечные функции. Эту проблему должен решать поставщик среды программирования и предоставить тебе готовое решение. В противном случае придётся самому писать функцию вывода из ROM на LCD.
Также почитай как работает стек (си-щный, не хардварный) и как он прописывает константы в оперативку при инициализации процессора, поймёшь почему памяти не хватило.

Лично мой совет таков:
не следует вообще выбирать старые контроллеры, они дорогие и в них вечно чего-то не хватает. Видимо у тебя просто был такой контроллер и ты его используешь, но если ты купишь контроллер за доллар, то в него поместится всё о чём можно мечтать и не придётся мудохаться с оперативкой.
pavel-pervomaysk
Your editor
Сообщения: 7976




01-03-2015 10:16

Сначала надо освоить регистры, логические операции, идеально, когда кто-то тебе сможет объяснить как переводить числа с одного формата в другой.
У меня по началу возникали вопросы по всем командам...
Leo140969
Участник
Сообщения: 343




01-03-2015 10:34

Eex, я начинал именно с ассемблера, но после перехода на Си обратной дороги уже нет. Контроллер-то я потом воткнул 819, у него ОЗУ хватает, просто мне принципиально важно было проблему решить. Функции вывода из ROM нет, а вот мысль написать её самому почему-то не пришла мне в голову, спасибо. Кстати, в названии темы нет упоминания, что здесь собираются только любители ассемблера.
Eex
Участник
Сообщения: 1493




01-03-2015 19:28

Leo140969 писал:
Eex, я начинал именно с ассемблера

нет, это не считается. Ассемблер нужен не для мазохизма , а для понимания внутренних процессов.
Рано ты с ассемблера ушёл. Надо на нём сделать пару серьёзных проектов.
Leo140969 писал:
но после перехода на Си обратной дороги уже нет.

Как только тебе попадётся более менее серьёзный проект, ты поймёшь что ассемблер просто необходим в контроллерах. Придётся писать целые функции на ассемблере. Всё что критично по времени исполнения, по времени реакции на события, всё придётся писать на ассемблере. К примеру проверка цифровой подписи на С выполняется 10 секунд (при 16 мипс), а тот же код на ассемблере за 100 мс. Разница переходит все границы. В контроллерах гораздо более эффективно работает комбинация С и ассемблера. Второй пример - попробуй написать свою функцию по передаче строки из ROM на С. Удивлюсь если у тебя получится.
Leo140969 писал:
Функции вывода из ROM нет,

Я в этом весьма сомневаюсь. Если её действительно нет, то скорее переходи на другой компилятор.
Leo140969 писал:
Кстати, в названии темы нет упоминания, что здесь собираются только любители ассемблера.

В названии сказано что мы учимся программировать, то есть делаем то что говорит учитель и в установленном порядке. Ответами на праздные вопросы занимается хелп и гугл улыбка.
pavel-pervomaysk
Your editor
Сообщения: 7976




01-03-2015 19:46

Eex писал:
К примеру проверка цифровой подписи на С выполняется 10 секунд (при 16 мипс), а тот же код на ассемблере за 100 мс

мда...
pcb432
Участник
Сообщения: 243




06-03-2015 09:02

Leo140969 "Компилятор использую МикроСи Про 6.40, скачанный с оф. сайта и вылеченный."
Средством не поделитесь?
Konstantin_18
Участник
Сообщения: 3234




06-03-2015 23:37

Eex, Вы серьезно недооцениваете современные СИ компиляторы.
Hi - Tech генерировал очень не плохой код.
При анализе ассемблерного листинга который он произвел , за неделю - две удавалось соптимизировать
5 - 10 байт на килобайте кода. И то в основном на переключении страниц.
Eex
Участник
Сообщения: 1493




07-03-2015 00:07

Konstantin_18, Вы думаете чем он (код) там занимается 10 секунд? Всю память процессора можно выполнить за 10 милисекунд - основное время тратится в циклах! Теперь представьте сколько циклов прошло за 10 секунд и умножте это количество на 7 исправленных комманд в теле цикла.
А компиляторы я оцениваю только современные, другими не пользуюсь. Код коду разница. Я не знаю кто пытался в вашем случае оптимизировать код после компилятора (уровень анализирующего) и не знаю какие исходные данные на С компилировались. К примеру логический код выходит из компилятора весьма оптимальный (к примеру int i =0; i+=14; i^=28;). Такой код будет выглядеть в ассемблере точно так же как и на С - оптимизировать не получится абсолютно ничего и на мегабайте такого кода. "Грязный" код начинается при работе со структурами, косвенными адресациями, с типами переменных, которые превышают разрядность процессора и прочие манипуляции разбросанных данных. Хотите обсудить оптимизацию и её приёмы, я не прочь, будет интересно посмотреть на килобайт кода, в котором можно оптимизировать только 7 байт за неделю улыбка, простите, за две недели улыбка

ПС. Оптимизацию компилятора в своём посте я не рассматривал и не говорил что МикроСи Про что-то плохо оптимизировал, я говорил лишь что библиотеки компилятора обязаны предоставить функции работы с константами из ROM, если они этого не предоставили, то библиотеки имеют серёзные проблемы с поддержкой.
Konstantin_18
Участник
Сообщения: 3234




08-03-2015 16:22

Eex, Оптимизация проводилась по длине кода, а занимались т.к. заказчик отказался покупать "больший" процессор.
А не влазило около 50 байт всего....
Насчет возникновения "грязного" кода - полностью с вами согласен. Можно так изначально писать на Си что оптимизировать будет некуда.
Например:
"
#asm

#endasm
"
подшучивать, дразнить улыбка

Библиотеки тоже редко когда бываю оптимальными, скорее - наоборот.
А для меня, пожалуй, Си - это простой способ получения ассемблерного текста. улыбка

Добавлено 08-03-2015 15:30

Leo140969 изначально хочет невыполнимого:
константы чтобы размещались в ROM и чтобы они были изменяемыми
Цитата:
при этом ОЗУ действительно экономится, но массив в программе не может быть модифицирован

А для этого
Eex писал:
библиотеки компилятора обязаны предоставить функции работы с константами из ROM

ИМХО библиотеки не требуются, необходимо просто детально разобраться с каждой конкретной реализацией компилятора.
Много лет применял подобное в Hi-Tech C, недавно пришлось разбираться с GCC для Atmega ...
Eex
Участник
Сообщения: 1493




08-03-2015 19:25

Konstantin_18 писал:
заказчик отказался покупать "больший" процессор.

Куда мир катится?! Сегодня заказчик указывает инженеру какой процессор выбрать, а завтра начнут яйца учить курицу улыбка. Однажды у меня так было что заказчик попытался мне сказать какой я должен выбрать процессор. Я ответил что в таком случае плата за проект поднимится в два раза - заказчик извинился и быстро успокоился улыбка.
Konstantin_18
Участник
Сообщения: 3234




10-03-2015 22:14

Eex, Подобное, увы, хорошо когда много заказчиков и один исполнитель.
У нас к сож. ровно наоборот.
недовольство, огорчение
Eex
Участник
Сообщения: 1493




10-03-2015 22:59

Konstantin_18, У нас (территориально) заказчиков вообще нет, да и с исполнителями не густо. Заказы приходят из разных стран по интернету, так что у нас с вами одни и теже заказчики улыбка. Пустой трёп не по теме....
Сникерсни
Новичок
Сообщения: 23




19-03-2015 23:04

Тема живая, это радует. Я уже сделал простенький проект). Кстати по поводу кнопок Eex, вы могли бы дать пример как вы это делаете? Медленный опрос я так понимаю это долгие паузы
(порядка нескольких мс) между опросом ?

Добавлено 19-03-2015 23:09

Я делал так:
cyc1 btfsc PortA,1 ; пров.нажатия
goto wait ; нажатия нет,то выход
metka2 btfss PortA,1 ; нажатие есть 0 на RA1
goto metka2 ; ждём отжатия 1 на RA1
............................... ; вход в пп.

Добавлено 19-03-2015 23:12

В основном цикле программы я делал такой опрос.
Eex
Участник
Сообщения: 1493




20-03-2015 19:34

Сникерсни, В прицепе файл, который мы делали с моим учеником год назад. В конце файла, самая последняя функция - обработчик кнопок. Он достаточно сложный к пониманию, но это самый стабильный обработчик из всех, которые когда-либо пробовал. Скорость опроса зависит от интервалами между вызывами функции, но он способен работать также на большИх скоростях (без фанатизма). Я писал комментарии, так что читайте. Видимо это не самый последний релиз нашего проекта т.к. в обработчик мы ещё добавляли обработку долгого нажатия с регулировкой времени удержания. Если понравится, то пиши, попробую найти последнюю версию, она круче по функционалу, но ещё более сложная к пониманию.

  taimer.txt  8,57 КБ  Скачано: 177 раз(а)

sdn_m
Новичок
Сообщения: 1




29-06-2015 20:03

Eex, вы бы лучше взяли и написали самоучитель по PIC. С разбором языков ASM и С. Поскольку такой литературы, на русском языке, почти нет. (Те, что есть - просто пересказы справочников на 90%)
Кроме, например, корабельникова. Но у корабельникова так же свои недостатки в оформлении программ и там нет С, однако написано весьма живо и доходчиво.
Leo140969
Участник
Сообщения: 343




30-06-2015 18:06

sdn_m,
http://www.labkit.ru/html/C_for_PIC
Eex
Участник
Сообщения: 1493




01-07-2015 19:55

sdn_m, На книжку нет времени, да и читателей не так много, судя по активности в теме.
Peotr-1
Новичок
Сообщения: 6




26-08-2016 16:53

Задался целью вытащить 4 МГц из PIC10F200, а как не знаю. Ну хотя бы 2 МГц. Говорят надо рисовать программу вывода, и то только 1мгц выйдет. Может быть кто подскажет как.
Прецизионный внутренний генератор 4МГц с точностью ±1%; а время исполнения инструкции 1мкс ( а это 1МГц). А я где-то читал что частота тактирования вдвое меньше частоты генератора, поэтому и решил что можно вытащить 2 МГц.
Eex
Участник
Сообщения: 1493




26-08-2016 17:41

Peotr-1, Не, не выйдет. Вдвое меньше, это у старших семейств, а у этого в 4 раза меньше. Придётся перепланировать на другой контроллер.
Peotr-1
Новичок
Сообщения: 6




26-08-2016 22:23

Ну хотя бы 1мгц. главное размер PIC10F200. Пробую сам написать, но мало знаю. могу куски копировать из других исходников. вот примерно так.
list p=10F200 ; list directive to define processor
#include <p10F200.inc> ; processor specific variable definitions
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF
а дальше типа
start
nop
goto start
Добавлено 26-08-2016 22:24

и на какой то ножке (или на всех будет моргать 1мгц. но не идет.
Eex
Участник
Сообщения: 1493




26-08-2016 22:40

Peotr-1 писал:
Задался целью вытащить 4 МГц из PIC10F200, а как не знаю. Ну хотя бы 2 МГц.

а, собственно, в чём задача-то? Надо правильно понимать, что 1 МГц, это не частота достигнутая на какой-то ноге, а частота следования инструкций программного кода. Частота же, это два полупериода, не так ли? То есть если надо достичь частоты переключения на каком-то выводе, то:
bsf GPIO, 0 + bcf GPIO, 0 = 1 mks

То есть две команды переключаясь выдают один период, а каждая команда исполняется за 1 мкс.
Собственно задача какова? Код должен что-то делать ещё или просто быстро мигать лампочкой? Даже если он просто будет мигать лампочкой, то есть ещё пара команд, которая организует зацикливание кода, верно? Может надо запускать PWM для реализации задачи?
Список форумов » Программное обеспечение » Микроконтроллеры » Изучаем программирование PIC контроллеров На страницу Пред.  1, 2, 3, 4, 5  След.
Перейти:  
Текущий раздел » Программное обеспечение » Микроконтроллеры (Микроконтроллеры - AVR-ы, PIC-и и другие)


Похожая информация:
  • Программирование
  • программирование USB
  • программирование ADUC812BS
  • Программирование DSP-микроконтроллеров
  • Программирование GAL16V8







  • Электроника
    Прошивки и схемы на телевизоры, мониторы, dvd, телефоны. Schematic, Service Manual (mode), eeprom dumps Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы поиск и продажа электронных компонентов, магазины, datasheet, pdf, размещение в интернете рекламы на сайтах электронной тематики
    Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!