PIC16F1939-při 32 MHz porty nestíhají po sobě jdoucí operace

Dobry den,
jiz delsi dobu sleduji toto forum a musim uznat, ze nekteri clenove opravdu vnaseji svetlo do spousty problemu, proto bych se chtel zeptat zda nekdo z Vas zasvedcenych uz pracoval s PIC16F1939/1937/1827… ? Narazil jsem na malinky problem (mozna vestsi): Je mozne, ze kdyz pouziji u tehto obvodu vnitrni oscilator taktovany na 32MHz tak se deji podivne veci?
Napr. prestane fungovat :

ASM:
BSF PORTA,0
BCF PORTA,0

C:
#define pin RA0
void main (void)
{
.
.
.
pin = 1;
pin = 0;
.
.
.
}

  • vypada to jako kdyz PORT nestiha, ale kdyz mezi prikazy vlozim treba NOP tak je vse OK!
  • programuji sice v C ale compiler(Hi-TECH) to prelozi stejne jak je popsano v prikladu (nikde jsem se s tim nesetkal ani u PIC24 , PIC32)
  • zkousel jsem uz psat i na ceskou podporu (mirochip.cz) ale nikdo se me ani neozval, stejny vysledek i u podpory microchip.com

PS: jestli je tu o tom uz zminka tak se omlouvam nikde jsem ji nenasel, nerad bych tu resil jiz vyresene.

Tomas

:arrow_right: administrator: přejmenováno z "PIC16F1939 pin bug ?"

Cau, je mozny ze to “nestiha” , resilo se to tady [forum.mcontrollers.com/t/pic-16f688-nejde-nastavit-alebo-znulovat-port-c4-prikazom/1698/1) chvylku my to trvalo nez sem to nasel

Je to R-M-W problem.
Když budeš na výstup používat LATA registr, tak by to mělo chodit.
Já používám PIC16F1936, 37 a šlapou velice dobře.

pouzivat registr LAT me napadlo ale nebyl jsem si jisty, prislo me to takove krkolomne, ale budu na to zrejme muset pristoupit. Takze pokud rozumim spravne tak je to v podstate omezeni rychlosti IO portu??? napr.: zapis do LAT a po urcitem casovem intervalu se nastavi i pin??? pro me je to celkem dulezite hodne casto emuluji SPI atd.

  • nejake osciloscopy tu mam ale ne vzdy resi problem vysejiciho portu (vyzkousim)

Problém není, že by regist PORTx byl pomalý, problém je při zpravovávání instrukcí BSF a BCF na registrech PORTx. Přitom probíhá taková krkolomnější změna obsahu výstupních D klopáků.

Popsáno je to tady: marcansoft.com/uploads/readmodifywrite.pdf
Odkaz vytaženej z vlákna od MiloPS3.

Na PIC 16 mě RMW ještě nevypeklo, ale na PIC18 hned napoprvé :smiley:

:arrow_right: administrator: přiloženy externí soubory
readmodifywrite.pdf (177 KB)

Zdravím

Navážu na kolegu přede mnou. Ten problém je popsán ve výše uvedeném pdf velmi přesně a v anglické literatuře se označuje jako data dependency - datová závislost. Celý problém lze poměrně snadno ošetřit vložením instrukce NOP (prázdná instrukce), pokud aplikace není kritická k vloženému zpoždění 1 cyklu navíc. Vadit to může v rozsáhlých smyčkách. Ve svém příspěvku posílám RAW.pdf, kde je problém popsán i obrázkem a vzorkem příkladu. Je to z nové publikace - slabikář PIC18, na kterém teď dělám. Enjoy it.
RAW.pdf (122 KB)

Dekuji mnohokrat… pri normalni praci me to nejak neomezuje ale u emulace napr: SPI - je to male spozdeni, ktere jsem resil poci zminovane NOP instrukce ale pro “minimalni zefektivneni” jsem se rozhodl mezi instrukcemi nulovat WDT sice to mnoho nepomuze ale aspon neco ( po vetsinu casu resim casove narocne operace ) 1x PIC a k nemu 4x SPI v ruznych ryclostech na mnoho periferii tzv.: Cesky prumysl = vsechno zadarmo :smiley: