Плата центрального недопроцессора nedoCPU-32

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

SergeV
Junior
Posts: 7
Joined: 18 May 2012 11:54
Location: 12.201.5.10

Post by SergeV »

Shaos wrote:не думаю что имеет смысл - зачем делаться конкурентом ChipKit-у :)
моё творчество - это "анти-ардуино" ;)
Совсем не конкурент:
а) chipKIT не использует DIP-корпуса, а в этом главная фишка
б) там порт USB сделан через FT232, но напрямую проще

Вполне себе ниша. Платы будут разлетаться, как пирожки с лотка.
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SergeV wrote:
Shaos wrote:не думаю что имеет смысл - зачем делаться конкурентом ChipKit-у :)
моё творчество - это "анти-ардуино" ;)
Совсем не конкурент:
а) chipKIT не использует DIP-корпуса, а в этом главная фишка
б) там порт USB сделан через FT232, но напрямую проще

Вполне себе ниша. Платы будут разлетаться, как пирожки с лотка.
вариант с USB отъедает больше ног - т.е. будет меньше I/O которых и так не сильно много...

P.S. вроде бы один покупатель хотел попробовать сделать nedoCPU-32 совместимым с ChipKit - чем закончилось незнаю...
Я тут за главного - если что шлите мыло на me собака shaos точка net
SergeV
Junior
Posts: 7
Joined: 18 May 2012 11:54
Location: 12.201.5.10

Post by SergeV »

Получил плату, собрал, вставил в breadboard - очень удобно.
На каждый из сигналов посадил светодиод, запустил простейший тест. Обнаружилось, что сигналы C5, C6, C7 не работают. Верхние концы резисторов R16, R17, R18 никуда не подключены. Или их надо внешними проводами подпаивать?
--Спасибо,
Сергей
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SergeV wrote:Получил плату, собрал, вставил в breadboard - очень удобно.
На каждый из сигналов посадил светодиод, запустил простейший тест. Обнаружилось, что сигналы C5, C6, C7 не работают. Верхние концы резисторов R16, R17, R18 никуда не подключены. Или их надо внешними проводами подпаивать?
--Спасибо,
Сергей
Да нет - всё подключено - см. внимательно на топологию платки
Я тестировал канал C целиком - всё работало:
Image

P.S. А какой чипы Вы подключили? USB-шный?
Я тут за главного - если что шлите мыло на me собака shaos точка net
SergeV
Junior
Posts: 7
Joined: 18 May 2012 11:54
Location: 12.201.5.10

Post by SergeV »

Shaos wrote:Да нет - всё подключено - см. внимательно на топологию платки

P.S. А какой чипы Вы подключили? USB-шный?
Прошу прощения - моя ошибка. Каким-то образом шина питания на breadboard оказалась не сплошной. Три крайних светодиода оказались оторванными. Теперь все сигналы работают.

Вот здесь есть видео "бегущего огонька": http://www.youtube.com/watch?v=93s3zv9zizI
Тут исходные тексты: http://code.google.com/p/vak-opensource ... nedocpu-32

Сейчас я поставил mx150f128b (без USB). Я купил каждой твари по паре, для экспериментов: 110f016b, 120f032b, 150f128b, 210f016b, 220f032b, 250f128b. Часто не жалко отдать четыре ножки для USB, зато можно делать штуки с управлением от компьютера. Пока что не удаётся использовать f016b - не получается прошить их через pic32prog. Возможно, не хватает внутренней RAM для programming executive.

Есть вопрос про танталовый конденсатор на 20-й ножке (Vcap). У Вас в плате он отсутствует, но по документации вроде бы обязательный элемент.
--Спасибо,
Сергей
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SergeV wrote:
Shaos wrote:Да нет - всё подключено - см. внимательно на топологию платки

P.S. А какой чипы Вы подключили? USB-шный?
Прошу прощения - моя ошибка. Каким-то образом шина питания на breadboard оказалась не сплошной. Три крайних светодиода оказались оторванными. Теперь все сигналы работают.
Да у больших бредборд есть такая фишка - несплошные линии питания...
SergeV wrote: Вот здесь есть видео "бегущего огонька": http://www.youtube.com/watch?v=93s3zv9zizI
Тут исходные тексты: http://code.google.com/p/vak-opensource ... nedocpu-32
Интересно получилось - вставлю прямо сюда:


Code: Select all

/*
 * Include processor definitions.
 */
#include "pic32mx.h"

/*
 * Chip configuration.
 */
PIC32_DEVCFG (
    DEVCFG0_DEBUG_DISABLED,     /* ICE debugger disabled */

    DEVCFG1_FNOSC_FRCPLL |      /* Fast RC oscillator with PLL */
    DEVCFG1_POSCMOD_DISABLE |   /* Primary oscillator disabled */
    DEVCFG1_FPBDIV_1 |          /* Peripheral bus clock = SYSCLK/1 */
    DEVCFG1_OSCIOFNC_OFF |      /* CLKO output disable */
    DEVCFG1_FCKM_DISABLE |      /* Fail-safe clock monitor disable */
    DEVCFG1_FCKS_DISABLE,       /* Clock switching disable */

    DEVCFG2_FPLLIDIV_2 |        /* PLL divider = 1/2 */
    DEVCFG2_FPLLMUL_20 |        /* PLL multiplier = 20x */
    DEVCFG2_UPLLIDIV_2 |        /* USB PLL divider = 1/2 */
    DEVCFG2_UPLLDIS |           /* Disable USB PLL */
    DEVCFG2_FPLLODIV_2,         /* PLL postscaler = 1/2 */

    DEVCFG3_USERID(0xffff) |    /* User-defined ID */
    DEVCFG3_FSRSSEL_7);         /* Assign irq priority 7 to shadow set */

/*
 * Boot code.
 */
asm ("          .section .exception");
asm ("          .globl _start");
asm ("          .type _start, function");
asm ("_start:   la      $sp, _estack");
asm ("          la      $ra, main");
asm ("          la      $gp, _gp");
asm ("          jr      $ra");
asm ("          .text");

/*
 * Delay for a given number of milliseconds.
 */
void mdelay (unsigned msec)
{
    unsigned now = mfc0 (C0_COUNT, 0);
    unsigned final = now + msec * MHZ * 500;

    for (;;) {
        now = mfc0 (C0_COUNT, 0);

        /* This comparison is valid only when using a signed type. */
        if ((int) (now - final) >= 0)
            break;
    }
}

int main()
{
    /* Initialize coprocessor 0. */
    mtc0 (C0_COUNT, 0, 0);
    mtc0 (C0_COMPARE, 0, -1);
    mtc0 (C0_EBASE, 1, 0x9fc00000);     /* Vector base */
    mtc0 (C0_INTCTL, 1, 1 << 5);        /* Vector spacing 32 bytes */
    mtc0 (C0_CAUSE, 0, 1 << 23);        /* Set IV */
    mtc0 (C0_STATUS, 0, 0);             /* Clear BEV */

    /* Disable JTAG port, to make all LEDs available. */
    DDPCON = 0;

    /* Use all ports as digital. */
    ANSELA = 0;
    ANSELB = 0;

    /* All PORTA, PORTB as output. */
    LATA = 0;
    LATB = 0;
    TRISA = 0;
    TRISB = 0;

    int value = 1;
    int dir = 1;
    for (;;) {
        LATA = value & 0x1f;
        LATB = (value >> 5) & 0xffff;
        if (dir > 0)
            value <<= 1;
        else
            value >>= 1;

        if (! (value & 0x1fffff)) {
            /* Reverse direction */
            dir = -dir;
            value = 2;
            if (dir < 0)
                value <<= 18;
        }

        mdelay (100);
    }
}
В тексте программы я вижу кучу лишнего кода, который мне ни о чём не говорит...
SergeV wrote: Сейчас я поставил mx150f128b (без USB). Я купил каждой твари по паре, для экспериментов: 110f016b, 120f032b, 150f128b, 210f016b, 220f032b, 250f128b. Часто не жалко отдать четыре ножки для USB, зато можно делать штуки с управлением от компьютера. Пока что не удаётся использовать f016b - не получается прошить их через pic32prog. Возможно, не хватает внутренней RAM для programming executive.
Если с USB что-то получится - расскажете? оч.интересно :)
SergeV wrote: Есть вопрос про танталовый конденсатор на 20-й ножке (Vcap). У Вас в плате он отсутствует, но по документации вроде бы обязательный элемент.
--Спасибо,
Сергей
Да вроде присутсвует - керамический 0.1uF C5
Я тут за главного - если что шлите мыло на me собака shaos точка net
SergeV
Junior
Posts: 7
Joined: 18 May 2012 11:54
Location: 12.201.5.10

Post by SergeV »

Shaos wrote:В тексте программы я вижу кучу лишнего кода, который мне ни о чём не говорит...
Это потому что используется "голый" GCC, без библиотек и startup от Microchip. Зато весь код перед глазами, нет тёмных мест.

Boot code - это адрес BFC00000, откуда начинается выполнение. Устанавливает стек и $gp, и уходит в main(). В начале main() делается инициализация системных регистров, т.н. сопроцессор 0. Конфигурация чипа (fuses) сделаны в виде макроса PIC32_DEVCFG(). Inline-функции mfc0( и mtc0() объявлены в pic32mx.h.
Shaos wrote:Если с USB что-то получится - расскажете? оч.интересно :)
С USB есть положительный опыт на старших моделях. Вот http://code.google.com/p/retrobsd/sourc ... usb_boot.c, например, универсальный USB bootloader, совместимый с UBW32. Используется для RetroBSD на самых рахных платах. Размер кода порядка 9 килобайт. Даже для mx110f016b вполне терпимо, с учётом 3 килобайт boot memory.
Shaos wrote:
SergeV wrote: Есть вопрос про танталовый конденсатор на 20-й ножке (Vcap). У Вас в плате он отсутствует, но по документации вроде бы обязательный элемент.
--Спасибо,
Сергей
Да вроде присутсвует - керамический 0.1uF C5
А его достаточно? Из спецификации MX1/MX2, section 2.3.1: "A low-ESR (1 ohm) capacitor is required on the VCAP pin, which is used to stabilize the internal voltage regulator output. The VCAP pin must not be connected to VDD, and must have a CEFC capacitor, with at least a 6V rating, connected to ground. The type can be ceramic or tantalum".

Таблица 29-13: "External Filter Capacitor Value: min 8, typical 10 μF."

На родной микрочиповской плате там стоят два конденсатора: танталовый 10μF и керамический 0.1μF.
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Да - наверное надо будет заменить на 10uF...
P.S. А в чём может выражаться неправильность работы девайса в случае если этот конденсатор мелковат?
Я тут за главного - если что шлите мыло на me собака shaos точка net
SergeV
Junior
Posts: 7
Joined: 18 May 2012 11:54
Location: 12.201.5.10

Post by SergeV »

Shaos wrote:P.S. А в чём может выражаться неправильность работы девайса в случае если этот конденсатор мелковат?
Ядро процессора имеет напряжение питания 1.8V. Vcap, как я понимаю, это сглаживающий конденсатор после встроенного преобразователя. Если маловато, будет зависать или перевызываться иногда.
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SergeV wrote:
Shaos wrote:P.S. А в чём может выражаться неправильность работы девайса в случае если этот конденсатор мелковат?
Ядро процессора имеет напряжение питания 1.8V. Vcap, как я понимаю, это сглаживающий конденсатор после встроенного преобразователя. Если маловато, будет зависать или перевызываться иногда.
Нет - такого вроде бы не наблюдалось

P.S. Вот думаю C5 вот на это перевести:
http://www.digikey.com/product-detail/e ... ND/2256808
Это керамический 10 мкФ
Я тут за главного - если что шлите мыло на me собака shaos точка net
SergeV
Junior
Posts: 7
Joined: 18 May 2012 11:54
Location: 12.201.5.10

Post by SergeV »

Shaos wrote:
SergeV wrote:Ядро процессора имеет напряжение питания 1.8V. Vcap, как я понимаю, это сглаживающий конденсатор после встроенного преобразователя. Если маловато, будет зависать или перевызываться иногда.
Нет - такого вроде бы не наблюдалось
Я тоже не замечал. Но это может проявляться только когда включается вся периферия: UART, SPI, DMA.
Shaos wrote:P.S. Вот думаю C5 вот на это перевести:
http://www.digikey.com/product-detail/e ... ND/2256808
Это керамический 10 мкФ
Классная вещь, даже дешевле чем танталовые в Halted Electronics. Надо будет тоже такими разжиться.
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SergeV wrote:
Shaos wrote:P.S. Вот думаю C5 вот на это перевести:
http://www.digikey.com/product-detail/e ... ND/2256808
Это керамический 10 мкФ
Классная вещь, даже дешевле чем танталовые в Halted Electronics. Надо будет тоже такими разжиться.
Таки купил я этих керамических конденсаториков на 10 мкФ :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Плата центрального недопроцессора nedoCPU-32

Post by Shaos »

Немного подробнее о том, что есть внутри nedoCPU-32:

Code: Select all

PIC32MX110F016B  PIC32MX170F256B
      DIP28      
PROG: 16KB(+3KB) 256KB(+3KB)
DATA: 4KB        64KB
      20 remappable pins
      5 timers
      5 capture
      5 compare
      2 UART
      2 SPI/I2S
      5 external interrupts
      3 analog comparators
      2 I2C
      Parallel Master Port
      4 DMA Programmable Channels
      CTMU (touch)
      10 channels of 10-bit 1 Msps ADC
      RTCC 
      21 I/O Pins
      JTAG

nedoCPU-32:

X1.1 (A0) RA0            CTED1       RPA0 C3INC             AN0 CVREF+ VREF+
X1.2 (A1) RA1            CTED2       RPA1                   AN1 CVREF- VREF-
X1.3 (A2) RA2                        RPA2 CLKI OSC1 (NC if ext.crystal)
X1.4 (A3) RA3      PMA0              RPA3 CLKO OSC2 (NC if ext.crystal)
X1.5 (A4) RA4      PMA1  CTED9  T1CK RPA4 SOSCO
X1.6 (3.3V)
X1.7 (Vcc)
X1.8 (Gnd)

X2.1 (B0) RB0                        RPB0 C3IND C2INB C1IND AN2 PGED1
X2.2 (B1) RB1            CTED12      RPB1       C2INA C1INC AN3 PGEC1
X2.3 (B2) RB2            CTED13 SDA2 RPB2       C2IND C1INB AN4
X2.4 (B3) RB3                   SCL2 RPB3 RTCC  C2INC C1INA AN5
X2.5 (B4) RB4                        RPB4 SOSCI 
X2.6 (B5) RB5      PMD7              RPB5                       PGED3
X2.7 (B6) RB6      PMD6              RPB6                       PGEC3
X2.8 (B7) RB7 INT0 PMD5  CTED3       RPB7  TDI

X3.1 (C0) RB8      PMD4  CTED10 SCL1 RPB8  TCK
X3.2 (C1) RB9      PMD3  CTED4  SDA1 RPB9  TDO
X3.3 (C2) RB10     PMD2  CTED11      RPB10                      PGED2
X3.4 (C3) RB11     PMD1              RPB11 TMS                  PGEC2
X3.5 (C4) RB12     PMD0                                     AN12
X3.6 (C5) RB13     PMRD  CTPLS       RPB13                  AN11
X3.7 (C6) RB14     PMWR  CTED5  SCK1 RPB14 C3INB            AN10 CVREFOUT
X3.8 (C7) RB15     PMCS1 CTED6  SCK2 RPB15 C3INA            AN9
Плюс к этому входы вида RPAxx и RPBxx можно цеплять к разнообразной периферии программно (например UART1, UART2, таймера 2-5 и т.д.)

P.S. Интересной особенностью параллельного мастер порта (сигналы PMxx) является то, что на него можно натравить DMA, которое может брать последовательность байтов из памяти и колбасить их в порт - это можно использовать для генерации видео...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Плата центрального недопроцессора nedoCPU-32

Post by Shaos »

Пока решил с однобитным видео поэкспериментировать на примере вот этого:

http://hackaday.io/project/2032-pic32-oscilloscope

Тут тоже DMA, но через SPI

P.S. В оригинальный PIC32MX110F016B эти примеры уже не влезают - расчехляю PIC32MX170F256B...

P.P.S. Работает :)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Stan
Banned
Posts: 397
Joined: 04 Jan 2013 10:09
Location: 95.24.178.158

Re: Плата центрального недопроцессора nedoCPU-32

Post by Stan »

Shaos wrote:Интересной особенностью параллельного мастер порта (сигналы PMxx) является то, что на него можно натравить DMA, которое может брать последовательность байтов из памяти и колбасить их в порт - это можно использовать для генерации видео...
На фотографиях это точечная графика через PIC32 или всё же псевдографический режим?
Если точечная графика, то какой размер растра?