Изучаю PIC
Изучаю PIC
Решил таки изучить PIC. Уже имел некоторый опыт работы с AVR раньше, поэтому думаю будет проще. Программировать собираюсь на Си, а не Ассемблере.
Хочу собрать USB-устройство, поэтому выбрал контроллер PIC2550, потому что у него и USB-интерфейс есть, и памяти для программ много.
Тактировать собираюсь от кварца 24 МГц.
Итак, насколько я понимаю сейчас минимальную схему:
1) Подключить питание МК к питанию USB 5В
2) Ножку сброса притянуть к питанию через 10 кОм.
3) Ножку VBUS подключить к конденсатору 100 нФ.
4) На питание 5В повесить конденсаторы 100 нФ и 4.7 мкФ.
5) D+ и D- USB подключить к МК
6) Кварц подключить к сооветствующим ногам МК и к земле через конденсаторы 18 пФ
Потом добавлять в схему светодиоды и т. п. уже по желанию, тут разберусь как-нибудь сам.
Всё правильно? А как прошивать контроллер? С бутлоадером можно через USB, но бутлоадер то надо прошивать обычным программатором, вероятно, в первый раз. У меня есть программатор usbtiny, так что если прошивка производится по интерфейсу SPI (этот программатор позволяет посылать произвольные команды по SPI), то можно как-нибудь через него попробовать, наверное.
Есть какой-нибудь софт для PIC на Linux? Или только под винду?
Хочу собрать USB-устройство, поэтому выбрал контроллер PIC2550, потому что у него и USB-интерфейс есть, и памяти для программ много.
Тактировать собираюсь от кварца 24 МГц.
Итак, насколько я понимаю сейчас минимальную схему:
1) Подключить питание МК к питанию USB 5В
2) Ножку сброса притянуть к питанию через 10 кОм.
3) Ножку VBUS подключить к конденсатору 100 нФ.
4) На питание 5В повесить конденсаторы 100 нФ и 4.7 мкФ.
5) D+ и D- USB подключить к МК
6) Кварц подключить к сооветствующим ногам МК и к земле через конденсаторы 18 пФ
Потом добавлять в схему светодиоды и т. п. уже по желанию, тут разберусь как-нибудь сам.
Всё правильно? А как прошивать контроллер? С бутлоадером можно через USB, но бутлоадер то надо прошивать обычным программатором, вероятно, в первый раз. У меня есть программатор usbtiny, так что если прошивка производится по интерфейсу SPI (этот программатор позволяет посылать произвольные команды по SPI), то можно как-нибудь через него попробовать, наверное.
Есть какой-нибудь софт для PIC на Linux? Или только под винду?
- Реклама
-
E71
Re: Изучаю PIC
Сперва собрать или купить программатор PICkit2 из соседней ветки. Лучше собрать - тогда появится опыт сборки устройств под USB. Хотя вопрос с прошивкой встроенного в него проца останется
Советую по программаторам для старта глянуть на страничку:
http://members.aon.at/electronics/pic/picpgm/index.html
там и софт и схемы простейших.
Советую по программаторам для старта глянуть на страничку:
http://members.aon.at/electronics/pic/picpgm/index.html
там и софт и схемы простейших.
- КРАМ
- Друг Кота
- Сообщения: 25296
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Изучаю PIC
В "греции" все есть: http://www.microchip.com/pagehandler/en ... ly/mplabx/KIVi писал(а):Есть какой-нибудь софт для PIC на Linux? Или только под винду?
И вообще: http://www.microchip.com/
Re: Изучаю PIC
Вообще, я хотел в итоге сделать на PIC нечто вроде универсального переходника.
То есть вывести интерфейсы SPI, UART, I2C (может ещё что-то), а также 1-2 входа АЦП (чтобы можно было использовать в качестве простейшего осциллографа или логического анализатора).
И разработать такую прошивку, чтобы ПК мог получать и передавать данные по ним.
Разумеется, через такую штуку и программировать можно было бы (ну AVR можно легко прошить по SPI, через что прошивается PIC пока не знаю).
Пока проектирую печатную плату. Какие ножки МК (пока не особо разобрался в обозначениях) мне стоит вывести на штырьки? Интересуют всякие интерфейсы и АЦП.
То есть вывести интерфейсы SPI, UART, I2C (может ещё что-то), а также 1-2 входа АЦП (чтобы можно было использовать в качестве простейшего осциллографа или логического анализатора).
И разработать такую прошивку, чтобы ПК мог получать и передавать данные по ним.
Разумеется, через такую штуку и программировать можно было бы (ну AVR можно легко прошить по SPI, через что прошивается PIC пока не знаю).
Пока проектирую печатную плату. Какие ножки МК (пока не особо разобрался в обозначениях) мне стоит вывести на штырьки? Интересуют всякие интерфейсы и АЦП.
Re: Изучаю PIC
А мне кажется что вы плаваете в вопросах АВР, поэтому не можете разобраться в PIC.ну AVR можно легко прошить по SPI, через что прошивается PIC пока не знаю.
- Реклама
Re: Изучаю PIC
Если у нас имеется переходник на SPI, то мы можем прошивать AVR (просто четвёртый провод надо подключать не к SS, а к RESET). Да, я знаю, что есть ещё параллельное программирование, но для внутрисхемного достаточно обычного SPI.
UPD: Думаю собрать вот такой COM-программатор: http://www.kosmodrom.com.ua/razrabotka/picjdm.php У меня есть дома старый компьютер с COM-портом на материнке и WinXP. С его помощью залью USB-бутлоадер, а потом уже смогу прошивать с ноута.
UPD2: Разобрался вроде с ножками. Выведу на штырьки:
MCLR, PGD, PGC, PGM - для подключения COM-программатора и прошивки самого контроллера
RB1 (SCK, SCL), RB0 (SDI, SDA), RC7 (RX, SDO), RC6 (TX) - I2C, UART, SPI
RA0, RA1 - два АЦП
Думаю, такое USB-устройство будет мне полезно.
UPD: Думаю собрать вот такой COM-программатор: http://www.kosmodrom.com.ua/razrabotka/picjdm.php У меня есть дома старый компьютер с COM-портом на материнке и WinXP. С его помощью залью USB-бутлоадер, а потом уже смогу прошивать с ноута.
UPD2: Разобрался вроде с ножками. Выведу на штырьки:
MCLR, PGD, PGC, PGM - для подключения COM-программатора и прошивки самого контроллера
RB1 (SCK, SCL), RB0 (SDI, SDA), RC7 (RX, SDO), RC6 (TX) - I2C, UART, SPI
RA0, RA1 - два АЦП
Думаю, такое USB-устройство будет мне полезно.
- КРАМ
- Друг Кота
- Сообщения: 25296
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Изучаю PIC
Если Вы хотите серьезно заниматься МК, то нужно иметь ДЕБАГГЕР, а не примитивный программатор.
PICKit2 или PICkit3 - отличный выбор.
PICKit2 или PICkit3 - отличный выбор.
Re: Изучаю PIC
Я ничего не имею против PICKit, но в нём самом есть контроллер, который надо прошить (я же буду сам собирать его). И вот для этого мне пригодится этот простой COM-программатор.
- КРАМ
- Друг Кота
- Сообщения: 25296
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Изучаю PIC
ЗАЧЕМ?KIVi писал(а):я же буду сам собирать его
Лучше потратьте это время с пользой и напишите свой собственный код.
1400 рублей не слишком большие деньги на инструмент...
Хороший инструмент...
Re: Изучаю PIC
Написал свою первую программу для PIC:
Компилятор sdcc. Команда компиляции:
Создаю в Proteus проект. Добавляю контроллер PIC18F2550, для которого задаю частоту 24 МГц, отключаю watchdog timer и указываю в качестве прошивки полученный hex-файл. Ножку MCLR притягиваю к плюсу питания, ножку RA4 подключаю к светодиоду. Запускаю симуляцию... и ничего не работает - светодиод не мигает.
Код: Выделить всё
#include "pic16/pic18f2550.h"
#include "pic16/delay.h"
void main(void) {
TRISA = ~(1 << 4);
for (;;) {
PORTA ^= 1 << 4;
delay1mtcy(24 / 2); // 24Mhz
}
}
Код: Выделить всё
sdcc -L/usr/share/sdcc/non-free/lib/pic16 -I/usr/share/sdcc/non-free/include/ -mpic16 -p18f2550 main.c
- КРАМ
- Друг Кота
- Сообщения: 25296
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Изучаю PIC
ANSEL=0
Re: Изучаю PIC
В данном случае ANSEL не при делах.
Код: Выделить всё
TRISA &= ~(1 << 4);
CMCON = 07H
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Изучаю PIC
Код: Выделить всё
main.c:5: error 20: Undefined identifier 'ANSEL'
Код: Выделить всё
#include "pic16/pic18f2550.h"
#include "pic16/delay.h"
void main(void) {
TRISA &= ~(1 << 4);
CMCON = 0x07;
for (;;) {
PORTA ^= 1 << 4;
delay1mtcy(24 / 2); // 24Mhz
}
}
UPD: Изменение режима работы пинов видно. Которые на вход серые, которые на выход синие (логический ноль) и изменяется в зависимости от значения TRISx.
UPD2: Но только до первого delay. Мигать светодиодом путём изменения направления порта тоже не получилось.
Re: Изучаю PIC
Измените
PORTA ^= 1 << 4;
на
LATA ^= 1 << 4;
хотя и так работать должно... разбиритесь лучше с
#include "pic16/pic18f2550.h"
#include "pic16/delay.h"
и
delay1mtcy(24 / 2); // 24Mhz
PORTA ^= 1 << 4;
на
LATA ^= 1 << 4;
хотя и так работать должно... разбиритесь лучше с
#include "pic16/pic18f2550.h"
#include "pic16/delay.h"
и
delay1mtcy(24 / 2); // 24Mhz
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Изучаю PIC
Скачал и поставил MPLAB. Может, официальный компилятор будет лучше работать. Создал проект с таким кодом:
Скомпилировал, результат тот же.
Ладно, может на реальном железе будет лучше, а это особенности работы Proteus в Wine или я просто не умею его готовить. В отладчике встроенном в MPLAB программа работает верно.
Теперь хотелось бы разобраться с настройками МК. У AVR есть фьюзы, с помощью которых я могу выбрать тактовый генератор (а также включить/выключить некоторые модули вроде watchdog). У PIC, как я понимаю, тоже они есть. И для работы USB стандартные значения не подойдут. Где почитать про них и конкретно про их задание в MPLAB?
UPD: Вроде разобрался. Установил вот такие фьюзы биты конфигурации:
Они же подойдут, чтобы тактировать МК от кварца на 24 МГц и использовать USB?
Код: Выделить всё
#include <p18f2550.h>
#include <delays.h>
#define FREQ 24000000
void delay(unsigned int t) {
while (t) {
Delay1KTCYx(FREQ / 1000 / 1000);
t--;
}
}
void main() {
CMCON = 0x07;
TRISA = ~(1 << 4);
while (1) {
LATA ^= (1 << 4);
delay(500);
}
}
Ладно, может на реальном железе будет лучше, а это особенности работы Proteus в Wine или я просто не умею его готовить. В отладчике встроенном в MPLAB программа работает верно.
Теперь хотелось бы разобраться с настройками МК. У AVR есть фьюзы, с помощью которых я могу выбрать тактовый генератор (а также включить/выключить некоторые модули вроде watchdog). У PIC, как я понимаю, тоже они есть. И для работы USB стандартные значения не подойдут. Где почитать про них и конкретно про их задание в MPLAB?
UPD: Вроде разобрался. Установил вот такие фьюзы биты конфигурации:
Код: Выделить всё
// CONFIG1L
#pragma config PLLDIV = 6 // PLL Prescaler Selection bits (Divide by 6 (24 MHz oscillator input))
#pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
#pragma config USBDIV = 1 // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes directly from the primary oscillator block with no postscale)
// CONFIG1H
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator (HS))
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
// CONFIG2L
#pragma config PWRT = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOR = ON // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
#pragma config BORV = 3 // Brown-out Reset Voltage bits (Minimum setting)
#pragma config VREGEN = ON // USB Voltage Regulator Enable bit (USB voltage regulator enabled)
// CONFIG2H
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
#pragma config WDTPS = 32768 // Watchdog Timer Postscale Select bits (1:32768)
// CONFIG3H
#pragma config CCP2MX = ON // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = OFF // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
#pragma config LPT1OSC = OFF // Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
#pragma config MCLRE = ON // MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)
// CONFIG4L
#pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = ON // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
#pragma config XINST = OFF // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
// CONFIG5L
#pragma config CP0 = OFF // Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
#pragma config CP1 = OFF // Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
#pragma config CP2 = OFF // Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
#pragma config CP3 = OFF // Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)
// CONFIG5H
#pragma config CPB = OFF // Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
#pragma config CPD = OFF // Data EEPROM Code Protection bit (Data EEPROM is not code-protected)
// CONFIG6L
#pragma config WRT0 = OFF // Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
#pragma config WRT1 = OFF // Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
#pragma config WRT2 = OFF // Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
#pragma config WRT3 = OFF // Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)
// CONFIG6H
#pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF // Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
#pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM is not write-protected)
// CONFIG7L
#pragma config EBTR0 = OFF // Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF // Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF // Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF // Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)
// CONFIG7H
#pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Изучаю PIC
нет
для работы контроллера необходима частота 48 мег, для блока юсб -96, т.е
сначала тактовая делится до 4 мег, затем умножается на 12, затем еще раз на 2 для 96 на юсб, здесь неправильно
#pragma config FOSC = HS - умножения на 12 не происходит
USBDIV = 1 - умножения 48 на 2 для блока юсб не происходит
правильно
Не страдайте ерундой, скачайте USB Framework и его разбирайте .
http://www.microchip.com/stellent/idcpl ... odeId=2896
И, наконец, RA4 ошибочно понимается протеусом как выход с открытым коллектором. Выберите другую ногу.
для работы контроллера необходима частота 48 мег, для блока юсб -96, т.е
сначала тактовая делится до 4 мег, затем умножается на 12, затем еще раз на 2 для 96 на юсб, здесь неправильно
#pragma config FOSC = HS - умножения на 12 не происходит
USBDIV = 1 - умножения 48 на 2 для блока юсб не происходит
правильно
Код: Выделить всё
#pragma config PLLDIV = 6 // (24 MHz crystal )
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = ON
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = ON //USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 256
#pragma config MCLRE = OFF
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config WRTD = OFF
#pragma config XINST = OFF // Extended Instruction Set
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
http://www.microchip.com/stellent/idcpl ... odeId=2896
И, наконец, RA4 ошибочно понимается протеусом как выход с открытым коллектором. Выберите другую ногу.


