Sida 2 av 2

Re: Problem med att sätta specifik pinne på port, Microchip C18

Postat: 19 februari 2009, 21:45:30
av sodjan
> Envis som jag är så skulle jag dock vilja hävda att PORT registren endast bör användas för avläsning på 18-serien,

PORTx registren fungerar i princip som på PIC16 serien. Det finns inget problem med
PORTx registren som är specifikt för PIC18. Dock finns samma potentiella problem som
på PIC16 (d.v.s RMW problematiken) och där kan LAT vara en lösning. Men för övrigt
är det som sagt inga speciella problem med PORTx som är unika för PIC18.

> sojdan: Kan du förklara den stora meningen med att skriva till PORT registret i stället för LAT registret?

Finns ingen speciell fördel. Men det var inte det som frågan gällde. Jag tror helt enkelt inte
på din beskrivning av det som du upplevde (eller tolkade) utan en "replicator", d.v.s en
beskrivning (inkl kod) som kan upprepas av vem som helst. Jag tror och hävdar att du
gjorde en miss någonstans. Prove me wrong...

Förresten, ska det inte stå "Konstaterade att även PORTC och PORTE hade ändrats" i punkt 7 ?
Eller var det faktiskt LATC/LATE som ändrades när PORTD skrevs ?

Re: Problem med att sätta specifik pinne på port, Microchip C18

Postat: 19 februari 2009, 21:53:57
av Icecap
LAT-register tillkom pga vissa problem.

Tänka dig att en instruktion lägger ut ett värde på en PORT. Omedelbart efter utförs en RMW-operation på en pinne på den port, i sig inget problem MEN...

Varje kommando exekveras ju med 4 x-tal cykler och värden läggs ut på sista cykel, nästa instruktion som ju läser porter läser alltså mycket kort tid efter, en portpinne kan vara (/är!) belastat med en viss kapacitet och har en viss strömdrivningsförmåga, detta betyder att vad som egentligen kan ske är att en skrivning byter en pinne från '0' till '1', porten börjar ladda upp de strökapaciteter men innan den hinner med läsas den av en RMW-instruktion som '0' varefter den skrivs som '0'.

Normalt använder man då en NOP mellan skriva-instruktionen och RMW-instruktionen för att komma förbi detta men som en förbättring från PIC16 till PIC18 tillkom LAT-registerna.

Re: Problem med att sätta specifik pinne på port, Microchip C18

Postat: 19 februari 2009, 22:35:37
av BER
Prove me wrong...
Jag skall se om jag kan hitta någon 18F458 REV B2 liggandes.

Förresten, ska det inte stå "Konstaterade att även PORTC och PORTE hade ändrats" i punkt 7 ?
Eller var det faktiskt LATC/LATE som ändrades när PORTD skrevs ?

Det var LATC/LATE som watch fönsret markerade som ändrade, det var det som gav mig inspirationen att läsa på om LAT registren i databladet.

Re: Problem med att sätta specifik pinne på port, Microchip C18

Postat: 19 februari 2009, 22:46:38
av sodjan
OK.
Kan det ha något att göra med med punkt 2 i detta dokument :
http://ww1.microchip.com/downloads/en/D ... 80134h.pdf ?

Varför just en "18F458 REV B2" förresten ?
Om vi talar om ett specifikt problem på en specifik revision av an viss krets,
så är det ju enu mindre ett generellt PIC18 problem som du har observerat.
Och i *så* fall tar jag tillbaka allt... :-)

Re: Problem med att sätta specifik pinne på port, Microchip C18

Postat: 19 februari 2009, 23:16:56
av BER
Varför just en "18F458 REV B2" förresten ?
Den "nyaste" kretsen av de fem var en 18F458 REV B2. Så idén var att börja med en sådan för att ha som referens. Skulle det inte gå att återskapa med en sådan så har jag garanterat gjort en miss.

... specifikt problem på en specifik revision ...
Några av CAN-buss buggarna har följt med i alla ERRATA bladen för 18FXX8 vad jag vet. Så jag tänkte i banorna att "min" bugg kanske också levde kvar, dokumenterad eller ej.

Punkt 2 gällde bara för TRISE om jag förstod det hela rätt, och problemet jag beskrev borde vara kopplat till data latcharna för portarna eller?