PIC с нуля
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Нашел, все равно не понимаю, вот сейчас при прошивке показывает вот это
Судя по даташиту
конфигурация 001, отвечает за это 0,1 и 4 биты. Откуда она там вообще взялась то? Как ее задать явно не понятно, работать начинает только если в программе задать OSCF = 4000 или еще какое то подобное число. Что это такое вообще и почему оно не 0 и 1 как в даташите сказано?
В программе у меня вот как
#include <pic.h>
__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);
#define knopka RB4
#define diod RA0
void podgot (void) {
TRISA = 0b00000000;
TRISB = 0b00010000;
CMCON = 0x07;
PORTA = 0;
PORTB = 0;
nRBPU = 0;
OSCF = 1000;
}
void main (void) {
podgot ();
while (1) {
diod = 1;
_delay (5000);
diod = 0;
_delay (5000);
}
}
Почему то еще на строку __CONFIG поругивается сама среда, но скомпилировать дает.
Судя по даташиту
конфигурация 001, отвечает за это 0,1 и 4 биты. Откуда она там вообще взялась то? Как ее задать явно не понятно, работать начинает только если в программе задать OSCF = 4000 или еще какое то подобное число. Что это такое вообще и почему оно не 0 и 1 как в даташите сказано?
В программе у меня вот как
#include <pic.h>
__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);
#define knopka RB4
#define diod RA0
void podgot (void) {
TRISA = 0b00000000;
TRISB = 0b00010000;
CMCON = 0x07;
PORTA = 0;
PORTB = 0;
nRBPU = 0;
OSCF = 1000;
}
void main (void) {
podgot ();
while (1) {
diod = 1;
_delay (5000);
diod = 0;
_delay (5000);
}
}
Почему то еще на строку __CONFIG поругивается сама среда, но скомпилировать дает.
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Попробовал поставить сейчас 0, работает так же как и с 4000, если ставить 1, то горит постоянно, не мигая.
Задал 1 при этом увеличив задержку до 50000, замигало, но быстро. Получается у меня где то как то не задана переменная, отвечающая за формирование задержек, связь с частотой. Как ее задать?
И остается открытым вопрос, как же задавать в программе настройку на внешнюю или внутреннюю частоту.
---
Кажется разобрался, это задание INTIO в конфиге.
Это получается при переходе на другой пик это все поновой, и переменные уже другие?
---
Остался вопрос, где настраивается _delay на частоту
Задал 1 при этом увеличив задержку до 50000, замигало, но быстро. Получается у меня где то как то не задана переменная, отвечающая за формирование задержек, связь с частотой. Как ее задать?
И остается открытым вопрос, как же задавать в программе настройку на внешнюю или внутреннюю частоту.
---
Кажется разобрался, это задание INTIO в конфиге.
Это получается при переходе на другой пик это все поновой, и переменные уже другие?
---
Остался вопрос, где настраивается _delay на частоту
Re: PIC с нуля
Обычно в свойствах проекта. Иногда в исходнике явно указывается частота такта.
ВСЕГДА - Смотрите примеры к вашему компилятору, инструменту!
Возможно даже руководство прочитаете
ВСЕГДА - Смотрите примеры к вашему компилятору, инструменту!
Возможно даже руководство прочитаете

Будете проходить мимо- проходите!
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: PIC с нуля
Kotto писал(а):Кажется разобрался, это задание INTIO в конфиге.
Это получается при переходе на другой пик это все поновой, и переменные уже другие?
Здесь вам дали пример задания конфигурации.
Эти слова конфигурации обычно не отличаются от чипа к чипу, но меняется их состав. В таких простых МК их всего 4-5, в навороченных же их описание в коде может целую страницу занять.
Еще загляните в раздел 4.2.2.6 мануала. Там увидите выбор частоты в случае задания внутреннего генератора в конфиге.
Почему у вас работает так, а не иначе, я не знаю, с Си я мало знаком.
Уроки Си есть на самом сайте Майкрочипа, на английском.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Вроде бы в 16f628 разобрался.
Можно позволю себе наглый вопрос, как теперь это перевести на пик16ф72? В нем нет встроенного источника тактов, кварц паяется на 10 и 11 ноги судя по даташиту, если я верно перевел.
Как по даташиту понять как писать конфиг? Где искать эти биты? Не силен в английском. Я написал так
#include <xc.h>
//#pragma config MCLRE=OFF
#pragma config CP=ON
#pragma config CPD=OFF
#pragma config BOREN=ON
#pragma config WDTE=OFF
//#pragma config LVP=OFF
#pragma config PWRTE=ON
#pragma config FOSC=XT
#define knopka RB4
#define diod RA0
void podgot (void) {
TRISA = 0b00000000;
TRISB = 0b00010000;
// CMCON = 0x07;
PORTA = 0;
PORTB = 0;
nRBPU = 0;
// OSCF = 1;
}
void main (void) {
podgot ();
while (1) {
diod = 1;
_delay (50000);
diod = 0;
_delay (50000);
}
}
вышла фигня, откуда то вылез Code Protect и ничего не работает. Я совсем уже замучался, не помню чтобы с авр были такие проблемы
---
Хотя бы просто ткните носом в страницы даташита, кто добрый
Можно позволю себе наглый вопрос, как теперь это перевести на пик16ф72? В нем нет встроенного источника тактов, кварц паяется на 10 и 11 ноги судя по даташиту, если я верно перевел.
Как по даташиту понять как писать конфиг? Где искать эти биты? Не силен в английском. Я написал так
#include <xc.h>
//#pragma config MCLRE=OFF
#pragma config CP=ON
#pragma config CPD=OFF
#pragma config BOREN=ON
#pragma config WDTE=OFF
//#pragma config LVP=OFF
#pragma config PWRTE=ON
#pragma config FOSC=XT
#define knopka RB4
#define diod RA0
void podgot (void) {
TRISA = 0b00000000;
TRISB = 0b00010000;
// CMCON = 0x07;
PORTA = 0;
PORTB = 0;
nRBPU = 0;
// OSCF = 1;
}
void main (void) {
podgot ();
while (1) {
diod = 1;
_delay (50000);
diod = 0;
_delay (50000);
}
}
вышла фигня, откуда то вылез Code Protect и ничего не работает. Я совсем уже замучался, не помню чтобы с авр были такие проблемы
---
Хотя бы просто ткните носом в страницы даташита, кто добрый
Re: PIC с нуля
откуда то вылез Code Protect
отсюда вылез
#pragma config CP=ON
не помню чтобы с авр были такие проблемы
проблем подобных АВР в ПИКах вообще не существует
- КРАМ
- Друг Кота
- Сообщения: 25117
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: PIC с нуля
Kotto писал(а):Я написал так
#include <xc.h>
//#pragma config MCLRE=OFF
#pragma config CP=ON
#pragma config CPD=OFF
#pragma config BOREN=ON
#pragma config WDTE=OFF
//#pragma config LVP=OFF
#pragma config PWRTE=ON
#pragma config FOSC=XT
#define knopka RB4
#define diod RA0
вышла фигня, откуда то вылез Code Protect и ничего не работает. Я совсем уже замучался
Действительно, а откуда он вылез?
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Все равно хочу с пиками разобраться ) Просто с авр все прошло как то гладко, мигалку написал за день, относительно долго понимал фьюзы. Кодевизион на все контролеры как то единый код создает, ни о чем таком не думаешь.
Так и не разберусь как сопоставить даташит и конфиг, как сделать для PIC16F72 то же самое. Правильно ли ли я кварц припаял на ноги 10 и 11?
Так и не разберусь как сопоставить даташит и конфиг, как сделать для PIC16F72 то же самое. Правильно ли ли я кварц припаял на ноги 10 и 11?
- КРАМ
- Друг Кота
- Сообщения: 25117
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: PIC с нуля
В даташите есть раздел Спешиал фичерс. Вот в нем и смотрите Конфиг.
В даташите есть и про кварц. Главное не ленится...
ЗЫ. кстати, конфиг в пиках - это и есть фьюзы. Только в пиках не бывает плохих комбинаций. При любом раскладе можно перешить.
И да, при прошивке кварц НЕ НУЖЕН. Прошивка тактируется самим программатором.
В даташите есть и про кварц. Главное не ленится...
ЗЫ. кстати, конфиг в пиках - это и есть фьюзы. Только в пиках не бывает плохих комбинаций. При любом раскладе можно перешить.
И да, при прошивке кварц НЕ НУЖЕН. Прошивка тактируется самим программатором.
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Да в этом удобство пиков над авр. Вы не подумайте что я ленив или хочу чтобы за меня все сделали, я гуглю без перерыва, ковыряю даташит постоянно. Я и не студент, изучаю для себя исключительно. Но вот что то идет не так, с ужасным скрипом. Не хотят пики со мной дружить 
Сейчас проблема, я просто не вижу общего у пик16ф628 и пик16ф72, у тех же авр биты cksel везде одинаковые, посмотрел по калькулятору как их задать и готово
Сейчас проблема, я просто не вижу общего у пик16ф628 и пик16ф72, у тех же авр биты cksel везде одинаковые, посмотрел по калькулятору как их задать и готово
Последний раз редактировалось AlekseyEnergo Вс апр 13, 2014 15:45:14, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!
Причина: Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!
- КРАМ
- Друг Кота
- Сообщения: 25117
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: PIC с нуля
Я Вам открою один маленький секрет. Даташиты на одно семейство ПИКов писаны ПОД КОПИРКУ. Достаточно найти один на русском: http://www.microchip.ru/files/d-sheets- ... 16f62x.pdf
И английский становится вполне понятным...
http://www.microchip.ru/cdrom/ww1.micro ... 39597b.pdf
ЗЫ. Переводы тут: http://www.microchip.ru/lit/?mid=1x0
Как можно сделать единые конфиги у контроллеров С РАЗНОЙ ФУНКЦИОНАЛЬНОСТЬЮ?
Это ПЕРИФЕРИЯ одинакова.
И английский становится вполне понятным...
http://www.microchip.ru/cdrom/ww1.micro ... 39597b.pdf
ЗЫ. Переводы тут: http://www.microchip.ru/lit/?mid=1x0
Kotto писал(а):Сейчас проблема, я просто не вижу общего у пик16ф628 и пик16ф72...
Как можно сделать единые конфиги у контроллеров С РАЗНОЙ ФУНКЦИОНАЛЬНОСТЬЮ?
Это ПЕРИФЕРИЯ одинакова.
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: PIC с нуля
Не хотят пики со мной дружить
А зачем они вам сдались? Я понимаю, если бы вы 24-е мучали - там есть кое-что интересное, но 16-ю серию...
Помните, в АВР есть PIN и есть PORT? В PORT пишем и помним что записали, а из PIN только читаем. А что есть в старших Пиках? А вот что:
• при записи в регистр PORTx данные записываются в защелку порта;
• при записи в регистр LATx данные записываются в защелку порта;
• при чтении регистра PORTx данные читаются с вывода порта;
• при чтении регистра LATx данные читаются с защелки порта.
Зачем нужно действие "при записи в регистр PORTx данные записываются в защелку порта;"? Оно нарушает логичность операций. И кто-то мне говорил, что не всегда срабатывает такая запись (от модели зависит что ли?) - но это я не проверял.
Что-то ещё мне в них не нравилось, как и в кортексах, но уже и не помню... хотя, вот список ошибок вот не нравится.
Ну а из приятных вещей, так это большая частота с PLL, прерывания по изменению состояния входов (CN), переназначаемые функции выходов (что так и не попробовал, но идея интересная), много периферии.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Да на выбросе нашей лаборатории электроники как то углядел несколько пиков, лежали лежали, а недавно думаю почему бы и не попробовать, удачно собрал программатор, с первого раза завелся, пик16ф72 вроде пишут совсем доисторический, в нем нет внутреннего источника тактов, нет флеш памяти вроде бы. Даташит для него только на английском. Разве знание низшего семейства не поможет освоить быстро и легко семейство выше?
Просто я сужу по АВР, у них cksel везде одни и те же, просто выставляются по разному, хотя я знаком не со столь многими авр, только тини13, 2313, мега8, 48, 88, 168 в их дип и смд исполнении и все.
КРАМ писал(а):Я Вам открою один маленький секрет. Даташиты на одно семейство ПИКов писаны ПОД КОПИРКУ. Достаточно найти один на русском: http://www.microchip.ru/files/d-sheets- ... 16f62x.pdf
И английский становится вполне понятным...
http://www.microchip.ru/cdrom/ww1.micro ... 39597b.pdf
ЗЫ. Переводы тут: http://www.microchip.ru/lit/?mid=1x0Kotto писал(а):Сейчас проблема, я просто не вижу общего у пик16ф628 и пик16ф72...
Как можно сделать единые конфиги у контроллеров С РАЗНОЙ ФУНКЦИОНАЛЬНОСТЬЮ?
Это ПЕРИФЕРИЯ одинакова.
Просто я сужу по АВР, у них cksel везде одни и те же, просто выставляются по разному, хотя я знаком не со столь многими авр, только тини13, 2313, мега8, 48, 88, 168 в их дип и смд исполнении и все.
Последний раз редактировалось AlekseyEnergo Вс апр 13, 2014 15:46:19, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал.
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: PIC с нуля
Разве знание низшего семейства не поможет освоить быстро и легко семейство выше?
Ну в чём-то, несомненно, поможет. Но быстро и легко вряд ли. И что вы называете "освоить"? Разобраться со всей периферией и тьмой её настроек (видели, сколько в кортексах настроек подтяжек в портах?
Просто я сужу по АВР
У них иная логика. Вот у PIC взять тот же TRIS единичка - порт на вход. А у AVR наоборот.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Ну под освоить я понимаю минимальные навыки, хотя бы научиться работать с датчиком ds18b20 и временем, уметь сделать вольтметр, причем не залить уже готовые кем то написанные, а уметь написать их самому. На авр я это могу, разобраться более менее с ацп, считать время, сделать динамическую индикацию ну и так по мелочи.
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Ну под освоить я понимаю минимальные навыки, хотя бы научиться работать с датчиком ds18b20 и временем, уметь сделать вольтметр, причем не залить уже готовые кем то написанные, а уметь написать их самому. На авр я это могу, разобраться более менее с ацп, считать время, сделать динамическую индикацию ну и так по мелочи.
#pragma config FOSC=XT
где вообще посмотреть эти параметры к конкретному МК, что и к чему приравнивать, я хоть убейте не вижу в даташите слова FOSC, точнее вижу, но не понимаю как его задавать?
Я так понял у всех МК пиков есть этот FOSC, и задавать его надо в двоичном формате?
например, для pic16f628 FOSC = 0b101, типа того?
#pragma config FOSC=INTOSCIO
а вот эта INTOSCIO это просто константа, которая означает 0b101??? Я все заголовочники уже перерыл связанные с ф628 и ф72, поиск по слову FOSC в них ничего не дал.
---
А то я скоро молотком по этому пику ударю
#pragma config FOSC=XT
где вообще посмотреть эти параметры к конкретному МК, что и к чему приравнивать, я хоть убейте не вижу в даташите слова FOSC, точнее вижу, но не понимаю как его задавать?
Я так понял у всех МК пиков есть этот FOSC, и задавать его надо в двоичном формате?
например, для pic16f628 FOSC = 0b101, типа того?
#pragma config FOSC=INTOSCIO
а вот эта INTOSCIO это просто константа, которая означает 0b101??? Я все заголовочники уже перерыл связанные с ф628 и ф72, поиск по слову FOSC в них ничего не дал.
---
А то я скоро молотком по этому пику ударю
Последний раз редактировалось AlekseyEnergo Вс апр 13, 2014 15:48:38, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал.
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: PIC с нуля
Ну, например, так может выглядеть строчка конфигурации:
#pragma config OSC=HS, FCMEN=ON, WDT=OFF, IESO=ON, XINST=OFF, LVP=OFF
Тут OSC=HS задаёт режим работы генератора.
#pragma config OSC=HS, FCMEN=ON, WDT=OFF, IESO=ON, XINST=OFF, LVP=OFF
Тут OSC=HS задаёт режим работы генератора.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Не компилируется, а вот это
#include <pic16f72.h>
#include <xc.h>
//#pragma config MCLRE=OFF
//#pragma config CP=ON
//#pragma config CPD=OFF
#pragma config BOREN=ON
#pragma config WDTE=OFF
//#pragma config LVP=OFF
#pragma config PWRTE=ON
#pragma config FOSC=HS
#define knopka RB4
#define diod RA0
void podgot (void) {
TRISA = 0b00000000;
TRISB = 0b00010000;
// CMCON = 0x07;
PORTA = 0;
PORTB = 0;
nRBPU = 0;
// OSCF = 1;
}
void main (void) {
podgot ();
while (1) {
diod = 1;
//_delay (50000);
//diod = 0;
//_delay (50000);
}
}
компилируется но на 72м отказывается работать совсем. Что тут не так? В железе все норм, взял семпл мигалки на PCWHD, скомпилировал, залил, мигает. Но там синтаксис какой то левый, по нему так и не понял как настроить. А может вообще программа не годная эта для 72го?
#include <pic16f72.h>
#include <xc.h>
//#pragma config MCLRE=OFF
//#pragma config CP=ON
//#pragma config CPD=OFF
#pragma config BOREN=ON
#pragma config WDTE=OFF
//#pragma config LVP=OFF
#pragma config PWRTE=ON
#pragma config FOSC=HS
#define knopka RB4
#define diod RA0
void podgot (void) {
TRISA = 0b00000000;
TRISB = 0b00010000;
// CMCON = 0x07;
PORTA = 0;
PORTB = 0;
nRBPU = 0;
// OSCF = 1;
}
void main (void) {
podgot ();
while (1) {
diod = 1;
//_delay (50000);
//diod = 0;
//_delay (50000);
}
}
компилируется но на 72м отказывается работать совсем. Что тут не так? В железе все норм, взял семпл мигалки на PCWHD, скомпилировал, залил, мигает. Но там синтаксис какой то левый, по нему так и не понял как настроить. А может вообще программа не годная эта для 72го?
Re: PIC с нуля
#define diod RA0
По включению RA0 имеет аналоговую функцию...
См. регистр ADCON1 ...
По включению RA0 имеет аналоговую функцию...
См. регистр ADCON1 ...
"Я не даю готовых решений, я заставляю думать!"(С)
- Kotto
- Опытный кот
- Сообщения: 795
- Зарегистрирован: Чт ноя 08, 2012 22:28:05
- Откуда: Ижевск
- Контактная информация:
Re: PIC с нуля
Нашел такой, судя по даташиту чтобы RA0 стал цифровым нужно его биты записать единицами, присвоил
ADCON1 = 0b111;
в функции podgot, ничего не изменилось. Страница 56 даташита, все правильно?
ADCON1 = 0b111;
в функции podgot, ничего не изменилось. Страница 56 даташита, все правильно?