TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: txu2 en 24 de Marzo de 2006, 15:16:00

Título: Duda:Sacar un uno por una pata
Publicado por: txu2 en 24 de Marzo de 2006, 15:16:00
Estoy programando en C con dsPic, estoy haciendo lo más básico,
TRISB=0
PORTB=0x1

se supone que con eso dentro d mi programa debería hacer k salga un uno por mi pata?? o como va eso? tengo k poner algo mas? no tengo k declarar esas variables no? pork con las libreria k adjunto ya las reconoce?
yo solo kiero encender un led. al compilar no da error pero luego en el debbug no cambia el estado d esa variable y no sale nada, no he probado a  grabar el probramita.
Título: RE: Duda:Sacar un uno por una pata
Publicado por: SnackySmores en 24 de Marzo de 2006, 23:44:00
prueba a usar LATB en lugar de PORTB Vacilando
Título: RE: Duda:Sacar un uno por una pata
Publicado por: Nocturno en 25 de Marzo de 2006, 00:38:00
¿Sabes cuándo hay que usar LATx y cuándo PORTx?, ¿cuál es la diferencia?
Título: RE: Duda:Sacar un uno por una pata
Publicado por: maunix en 25 de Marzo de 2006, 08:30:00
txu2 suponiendo que deshabilitaste todo módulo que te pueda interferir con la salida que pretendes manejar, has caso a lo que dice nocturno que a su vez es lo que dice microchip.


. Para sacar un dato usa los registros LATx.

. Para leer un dato usa los registros PORTx


Esto es una mejora en los 18,  24 y dsPIC que evitan el uso de los shadow registers.... pero bueno no nos la compliquemos, básicamente con lo que está arriba te manejaras perfectamente.

Título: RE: Duda:Sacar un uno por una pata
Publicado por: dsPIC30f4011 en 28 de Marzo de 2006, 16:09:00
Saludos para sacar encender solo un pin de algun puerto debes hacer asi

Supongamos que deseamos encender un led en el pin RE0

PORTEbits.RE0 = 1; //enciende led
PORTEbits.RE0 = 0; //apaga led
Título: RE: Duda:Sacar un uno por una pata
Publicado por: maunix en 28 de Marzo de 2006, 22:14:00
Escrito originalmente por dsPIC30f4011
Saludos para sacar encender solo un pin de algun puerto debes hacer asi

Supongamos que deseamos encender un led en el pin RE0

PORTEbits.RE0 = 1; //enciende led
PORTEbits.RE0 = 0; //apaga led



Hasta donde yo sé se hace asi

LATEbits.RE0 = 1; //enciende led
LATEbits.RE0 = 0; //apaga led

El uso de los latchs evita la necesidad de registros shadow ya que al trabajar en alta frecuencia se hace indispensable.  El uso de los latchs evita todo esta gestión.

Saludos

Título: Re: Duda:Sacar un uno por una pata
Publicado por: Dextrom666 en 24 de Abril de 2006, 23:03:32
yo no uso el C para programar dspic, uso el asm.
pero lo ke se es ke asi se hace para prender y apagar leds en C.

/*****************************************/

LATEbits.RE0 = 1; //enciende led
; aqui se debe poner un tiempo de retardo para ke lo puedas visualizar
; encendido ==> espera un tiempo ==> apagado.
; de lo contrario ni te daras cuenta ke se prendio por un momento.
LATEbits.RE0 = 0; //apaga led

/****************************************/

lo ke aparezca por el LATE , aparecera por el port E.
tambien se puede hacer con el PORTE directamente al menos en asm,
ami no me trae problemas en el asm.
Título: Re: Duda:Sacar un uno por una pata
Publicado por: Vayadespiste en 24 de Mayo de 2006, 13:54:19
No se si será el caso, pero en ensamblador hay que configurar los pines del puerto b en que modo van a funcionar, es decir si analógico o digital, en el caso de ser digital y todos los pines esto corresponde 0xFFFF en el registro ADPCFG, no estoy seguro pero creo que en "C" basta con poner ADPCFG = 0xFFFF; (En el caso que quieras poner todo el puertob digital)
Título: Re: Duda:Sacar un uno por una pata
Publicado por: JavisusII en 24 de Mayo de 2006, 18:41:10
Según me consta una escritura en el registro LATx tiene el mismo efecto que en PORTx,
el problema aparece  en la lectura del  PORTx y más concretamente en instrucciones de lectura,modificación,escritura
como BSET,etcc .
La lectura de PORTx lee directamente las entradas
La lectura del LATx lee el registro cerrojo, y no el valor instantáneo del valor de entrada.