Nove PIC16 a PIC18 - Porty

Jan Waclawek konfera na efton.sk
Pátek Červen 28 09:47:49 CEST 2024


[preposielam]

Ahoj,

ten kod je inicializacia portu D, teda jej fragment s nastavenim portu D v tej funkcii Init_IO_Ports_RA_RE_RB_RC_RD(). Je to vlastne inicializacia portu D podla datasheetu kapitola IO-ports. Toto je v poriadku. Ja som vcera este precital TB3130 - Peripheral Pin Select in 8-bit Microcontrollers Technical Brief. Po jeho prestudovani som zacal aspon tusit, ze okrem tych nastaveni portu D v inicializacnej rutine, je potrebne este nastavit aj registre PPS. Pointa je v tom, ze kazdy IO-pin ma este multiplexer na alternativne fukcie hardwaru, ktory treba nastavit tiez. To samozrejme v datasheete napisane priamo nie je, to sa musi clovek dovtipit sam... To bolo na tom dost tazke, na to prist. Dalsi problem, ktory treba vyriesit, je tabulka, ktora popisuje prepinanie prislusneho hardware na pin. Tuna som nasiel ako periferiu LATxy, to je dalsie sklicko do mozaiky nastavenia. Ked som si potom v include file pre io-registre pic18f47k42 nasiel RD0PPS, tak to uz bola brnkacka. Takze ku povodnej inicializacii portu D, treba este pridat fragment kodu:
    
    // Nastavenie PPS-registrov
    // - odomknutie
    INTCON0bits.GIE = 0;
    PPSLOCK = 0x55;
    PPSLOCK = 0xAA;
    PPSLOCKbits.PPSLOCKED = 0;
    
    // code
    // RxyPPS - vystupy z LAT_RDx
    RD0PPS = 0b00000000;    // LATD0 -> RD0
    RD1PPS = 0b000000;
    
    // - zamknutie
    PPSLOCK = 0x55;
    PPSLOCK = 0xAA;
    PPSLOCKbits.PPSLOCKED = 1;
    INTCON0bits.GIE = 1;
    
Potialto je to vsetko v poriadku. No pin mi stale nekmital, ale vystup OSC2 daval pekny obdlznik na 1MHz.. Cely zufaly som zapol zo zufalstva ICD-debuger v PicKit-3. A ukazalo sa, ze chyba bola niekde inde. Konkretne vo funkcii nastavenia oscilatora, je tam takyto fragment kodu:

    OSCFRQ = 0b00000010;    // HFINTOSC = 4MHz
    OSCTUNE = 0b00000000;   // no tune
    
    OSCCON1 = 0b01100000;   // HFINTOSC; divide by 1
    
    while(!OSCCON3bits.NOSCR)   // wait for New OSC Ready
        ;

No a samozrejme na tom while, to cele zastavilo. Tento fragment mam tiez odpisany z nejakeho TBxxxx. Takze som tuto funkciu vypol a bezal na defaultnych 64MHz clocku, kvoli rychlemu testu. A ajhla, soft sa zrazu rozbehol podla ocakavania... Este za zmienku stoji to, ze ICD-debuger vypol watchdog. Ktora z tychto dvoch veci rozbehla soft, som uz rano po prebdelej noci nemal chut zistovat. Ale vratim sa k tomu.

Dalsia poznamka sa tyka toho, ako je napisana cela dokumentacia ku konkretne tychto dvoch kapitol. Najprv som lustil datasheet, potom TB3130, ktora je napisana na starsie typy PIC18 a samozrejme potom zase datasheet a nakoniec som skoncil pri include file pic18f47k42.h, ktory ma vyse 3MB. Ten je samozrejme napisany v novom formate a ma inu strukturu popisu periferii nez je v datasheete a tom TB3130. Takze princip a detaily treba hladat v tom TB3130, konkretne pikosky potom v datasheete a finalny zapis do kodu v tom include file pic18f47k42.

Takze toto som zvladol. Teraz pride dalsi krok a to konfiguracia pinu portu D na input. A tuna by som rad poprosil tych skusenejsich o pomoc s tym, ako nastavit pin na vstup digitalny a vstup analogovy. Az by mal niekto hotovy fragment kodu nastavenia, budem velmi rad. Ako ja na to casom pridem aj sam, ale usetrilo by mi to dost casu a lustenia neprehladnej dokumentacie. Vopred dakujem za pomoc.

A.

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240628/c7b63d90/attachment-0001.htm>


Další informace o konferenci Hw-list