Multiplexed adres / data-bus op PIC18F

J

jboud

Guest
Hi all,
Ik gebruik poort D multiplex toevoegen / gegevens naar een modem (mfrc531 controle)
en hier te lezen is mijn functie:

unsigned char lezen (unsigned char toe te voegen)

(Unsigned char val;

SET_TRIS_D (0x00);
output_d (add) / / Send adres
delay_cycles (1);
output_high (ALE);
delay_cycles (1);
output_low (ALE);
Delay_us (3);
output_low (NRD);
SET_TRIS_D (0xFF);
Delay_us (3);
val = input_d (); / / ontvangen van gegevens
delay_cycles (1);
output_high (NRD);
delay_cycles (1);

return val;
)het probleem is dat val neemt het adres waarde die ik heb verzonden previsiouly.

Ik kan het niet vinden van het probleem.

Ik zou echt waarderen als u uw hulp.

Hartelijk

 
Hi all,
Ik gebruik poort D multiplex toevoegen / gegevens naar een modem (mfrc531 controle)
en hier te lezen is mijn functie:

unsigned char lezen (unsigned char toe te voegen)

(Unsigned char val;

SET_TRIS_D (0x00);
output_d (add) / / Send adres
delay_cycles (1);
output_high (ALE);
delay_cycles (1);
output_low (ALE);
Delay_us (3);
output_low (NRD);
SET_TRIS_D (0xFF);
Delay_us (3);
val = input_d (); / / ontvangen van gegevens
delay_cycles (1);
output_high (NRD);
delay_cycles (1);

return val;
)het probleem is dat val neemt het adres waarde die ik heb verzonden previsiouly.

Ik kan het niet vinden van het probleem.

Ik zou echt waarderen als u uw hulp.

Hartelijk

 
Dit is waarschijnlijk een probleem met de timing.Je zult moeten experimenteren om de optimale vertragingen tussen gesprekken.Probeer het verhogen van de vertraging befor de haven te lezen.

Wat is de code in de verklaringen?
output_d (add);
val = input_d ();

Zijn deze functies of macro's?

Het zou beter zijn om te schrijven
LATD = toe te voegen;
val = PORTD;

om te voorkomen dat de overhead van een functie-aanroep indien deze functies.

Als ze zijn macro's, dont gebruiken.Macro's zijn afgeschreven als ze het begrijpen van de code obscure en zijn niets anders dan string vervangingen.

 
Bedankt voor het antwoord.

output_d (add) en val = input_d () zijn functies die door de ccs compiler.
We kunnen niet de toegang tot hun korps.

Ik zal proberen

LATD = toe te voegen;
val = PORTD;

en Ik zal u op de hoogte

hartelijk

 
Hi jboud

Het lijkt erop dat u wellicht de haven LATCH en niet de haven PINS lezing
- Controleer uw gegenereerde assembly code lezing registreren 0xF83 (PORTD)

Ik stel voor dat de TRISD 0xFF VOORDAT is bovenaan de negatieve Lees Strobe (NRD)

Je kan heel goed een probleem hebben met bus stelling.

De beschermde gegevens fiche van de MFRC531, dat je problemen had ontsluiten, bepaalt dat de gegevens lijnen zullen worden gesteld binnen 65ns van de belangrijkste negatieve rand van de flitser te lezen NRD.

Max klok van de 18F452 neemt 100ns per instructie - het vrijgeven van de bus (trisd 0xff) na beweert de flitser is te laat!

Zoals ik de tijden - de meeste van uw vertragingen gelezen kunnen worden verwijderd omdat ze overbodig zijn met de 18F452 op 40MHz.

hoop dat dit helpt - Uomo universale

 

Welcome to EDABoard.com

Sponsor

Back
Top