Изучаю PIC

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
KIVi
Встал на лапы
Сообщения: 126
Зарегистрирован: Вс янв 27, 2013 19:02:19

Изучаю PIC

Сообщение KIVi »

Решил таки изучить 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? Или только под винду?
Реклама
E71

Re: Изучаю PIC

Сообщение E71 »

Сперва собрать или купить программатор PICkit2 из соседней ветки. Лучше собрать - тогда появится опыт сборки устройств под USB. Хотя вопрос с прошивкой встроенного в него проца останется :dont_know:


Советую по программаторам для старта глянуть на страничку:

http://members.aon.at/electronics/pic/picpgm/index.html

там и софт и схемы простейших.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25296
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Изучаю PIC

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

KIVi писал(а):Есть какой-нибудь софт для PIC на Linux? Или только под винду?
В "греции" все есть: http://www.microchip.com/pagehandler/en ... ly/mplabx/
И вообще: http://www.microchip.com/
KIVi
Встал на лапы
Сообщения: 126
Зарегистрирован: Вс янв 27, 2013 19:02:19

Re: Изучаю PIC

Сообщение KIVi »

Вообще, я хотел в итоге сделать на PIC нечто вроде универсального переходника.
То есть вывести интерфейсы SPI, UART, I2C (может ещё что-то), а также 1-2 входа АЦП (чтобы можно было использовать в качестве простейшего осциллографа или логического анализатора).
И разработать такую прошивку, чтобы ПК мог получать и передавать данные по ним.
Разумеется, через такую штуку и программировать можно было бы (ну AVR можно легко прошить по SPI, через что прошивается PIC пока не знаю).

Пока проектирую печатную плату. Какие ножки МК (пока не особо разобрался в обозначениях) мне стоит вывести на штырьки? Интересуют всякие интерфейсы и АЦП.
Реклама
Эиком - электронные компоненты и радиодетали
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Изучаю PIC

Сообщение otest »

ну AVR можно легко прошить по SPI, через что прошивается PIC пока не знаю.
А мне кажется что вы плаваете в вопросах АВР, поэтому не можете разобраться в PIC.
Реклама
KIVi
Встал на лапы
Сообщения: 126
Зарегистрирован: Вс янв 27, 2013 19:02:19

Re: Изучаю PIC

Сообщение KIVi »

Если у нас имеется переходник на 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-устройство будет мне полезно.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25296
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Изучаю PIC

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

Если Вы хотите серьезно заниматься МК, то нужно иметь ДЕБАГГЕР, а не примитивный программатор.
PICKit2 или PICkit3 - отличный выбор.
KIVi
Встал на лапы
Сообщения: 126
Зарегистрирован: Вс янв 27, 2013 19:02:19

Re: Изучаю PIC

Сообщение KIVi »

Я ничего не имею против PICKit, но в нём самом есть контроллер, который надо прошить (я же буду сам собирать его). И вот для этого мне пригодится этот простой COM-программатор.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25296
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Изучаю PIC

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

KIVi писал(а):я же буду сам собирать его
ЗАЧЕМ?
Лучше потратьте это время с пользой и напишите свой собственный код.
1400 рублей не слишком большие деньги на инструмент...
Хороший инструмент...
KIVi
Встал на лапы
Сообщения: 126
Зарегистрирован: Вс янв 27, 2013 19:02:19

Re: Изучаю PIC

Сообщение KIVi »

Написал свою первую программу для PIC:

Код: Выделить всё

#include "pic16/pic18f2550.h"
#include "pic16/delay.h"

void main(void) {
	TRISA = ~(1 << 4);
	for (;;) {
		PORTA ^= 1 << 4;
		delay1mtcy(24 / 2); // 24Mhz
	}
}
Компилятор sdcc. Команда компиляции:

Код: Выделить всё

sdcc -L/usr/share/sdcc/non-free/lib/pic16 -I/usr/share/sdcc/non-free/include/ -mpic16 -p18f2550 main.c
Создаю в Proteus проект. Добавляю контроллер PIC18F2550, для которого задаю частоту 24 МГц, отключаю watchdog timer и указываю в качестве прошивки полученный hex-файл. Ножку MCLR притягиваю к плюсу питания, ножку RA4 подключаю к светодиоду. Запускаю симуляцию... и ничего не работает - светодиод не мигает.
Вложения
main.hex
(1.13 КБ) 579 скачиваний
main.asm
(5.15 КБ) 568 скачиваний
76.png
(42.93 КБ) 646 скачиваний
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25296
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Изучаю PIC

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

ANSEL=0
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Изучаю PIC

Сообщение HHIMERA »

В данном случае ANSEL не при делах.

Код: Выделить всё

TRISA &= ~(1 << 4);
CMCON = 07H

"Я не даю готовых решений, я заставляю думать!"(С)
KIVi
Встал на лапы
Сообщения: 126
Зарегистрирован: Вс янв 27, 2013 19:02:19

Re: Изучаю PIC

Сообщение KIVi »

Код: Выделить всё

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. Мигать светодиодом путём изменения направления порта тоже не получилось.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Изучаю PIC

Сообщение HHIMERA »

Измените
PORTA ^= 1 << 4;

на
LATA ^= 1 << 4;

хотя и так работать должно... разбиритесь лучше с
#include "pic16/pic18f2550.h"
#include "pic16/delay.h"

и
delay1mtcy(24 / 2); // 24Mhz
"Я не даю готовых решений, я заставляю думать!"(С)
KIVi
Встал на лапы
Сообщения: 126
Зарегистрирован: Вс янв 27, 2013 19:02:19

Re: Изучаю PIC

Сообщение KIVi »

Скачал и поставил MPLAB. Может, официальный компилятор будет лучше работать. Создал проект с таким кодом:

Код: Выделить всё

#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)
Они же подойдут, чтобы тактировать МК от кварца на 24 МГц и использовать USB?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Изучаю PIC

Сообщение urry »

нет
для работы контроллера необходима частота 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
Не страдайте ерундой, скачайте USB Framework и его разбирайте .
http://www.microchip.com/stellent/idcpl ... odeId=2896

И, наконец, RA4 ошибочно понимается протеусом как выход с открытым коллектором. Выберите другую ногу.
Ответить

Вернуться в «PIC»