TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: Rikr09 en 24 de Octubre de 2016, 13:55:42
-
Saludos amigos de todopic,
Soy nuevo con ATMEL STUDIO y con los ARM y tengo un problema ya que no estoy logrando leer el estado de un pin del micro ver el link https://www.dropbox.com/s/grfx96793hc0dhu/Captura.JPG?dl=0 (https://www.dropbox.com/s/grfx96793hc0dhu/Captura.JPG?dl=0)
El timer está funcionando y pues puedo corroborarlo porque con la función TOOGLE el led está cambiando de estado, pero el que se encuentra condicionado por el if, sólo entra una vez y el led no se vuelve a apagar, lo que me hace pensar que no se está leyendo el estado del pin o no sé la verdad.
Espero y me puedan ayudar con esto.
Muchas Gracias
-
hubiera sido mejor que pusiera tu codigo directo aqui. ya que salir de la pagina y leer tu codigo es gorroso,
Ademas incompleto y sin detalle que hace tu programa..
Saludos
-
Atendiendo a tu sugerencia adjunto el código:
El programa es sencillo, la idea es que cada vez que se active el TimerTimer_EraseBuffU1Rx.CPUTimer_H.Triggered == 1 ingrese y lea el PIN_PC19; si es igual a 1 lo coloca en 0 y viceverza; si se fijan en los define se puede detallar que el LED_GTXRXPIN es el mismo PIN_PC19; del mismo modo, se nota que se se está empleando la función ioport_toggle_pin_level(LED_RSSIPIN); para cambiar cada vez que se cumple el tiempo del mismo timer, el estado del LED_RSSIPIN; nada más.
/*** LED Output ***/
#define LED_PWRPIN PIN_PC15
#define LED_TXRXPIN PIN_PC16
#define LED_LINKPIN PIN_PC17
#define LED_BUSYPIN PIN_PC18
#define LED_GTXRXPIN PIN_PC19
#define LED_RSSIPIN PIN_PC20
while (1) {
if( Timer_EraseBuffU1Rx.CPUTimer_H.Triggered == 1 ){
Timer_EraseBuffU1Rx.CPUTimer_H.Triggered = 0;
if(ioport_get_pin_level(PIN_PC19) == 0){
ioport_set_pin_level(LED_GTXRXPIN,1);
}else{
ioport_set_pin_level(LED_GTXRXPIN,0);
}
ioport_toggle_pin_level(LED_RSSIPIN);
}
delay_us(1);
}//while(1)
El problema:
El PIN_PC19(LED_GTXRXPIN) SIEMPRE queda activo; mientras que el LED_RSSIPIN si apaga y prende cada 5 segundos tal y como se espera y no se por qué.
-
ahora viene mi pregunta tonta,, porque no se como lo programaste, si usaste el Cristal externo o interno, en ti programa no pone la configuracion de los Fuses ,Cristal , de verdad no se como es tu programa completo.
pero aqui
while (1) {
if( Timer_EraseBuffU1Rx.CPUTimer_H.Triggered == 1 ){
Timer_EraseBuffU1Rx.CPUTimer_H.Triggered = 0;
if(ioport_get_pin_level(PIN_PC19) == 0){
ioport_set_pin_level(LED_GTXRXPIN,1); aqui pone el pin como salida
}else{
ioport_set_pin_level(LED_GTXRXPIN,0); y aqui lo pone como entrada
}
ioport_toggle_pin_level(LED_RSSIPIN); y este hace intermitencia
}
delay_us(1);
}//while(1)
para poder ayudarte seria mejor que ponga todos el codigo y explica que es lo hace tu programa,
y si lo hiciste tu es mejor que vaya paso por paso para que asi ver donde esta o estan tus errores,
Saludos