TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rodrigo_pinilla en 22 de Marzo de 2015, 01:49:07
-
Lo que pasa es que estoy probando los pines A1, A2, y A3 conectando un led en ellos pero funcionan extraño, si hago asi no prenden:
#include <16F88.h>
#FUSES nomclr //sin reset
#FUSES intrc //esto usa el cirstal interno del pic
#use delay(clock=1000000) //cristal a 1 megabit de velocidad
#byte portb=6 //declaro la ubicasion del puerto b
#byte porta=5 //la ubicasion del puerto a
#byte a1= pin_a1 //declaro el pin a1
#byte a2= pin_a2 //el pin a2
#byte a3= pin_a3 //el pin a3
void main()
{
inicio:
a1 = 1;
a2 = 1; //prendo los leds
a3 = 1;
delay_ms(1000); // espero 1000 segundos
a1 = 0;
a2 = 0; //apago los leds
a3 = 0;
delay_ms(1000); // espero 1000 segundos
goto inicio;
}
pero si hago asi si funciona:
inicio:
porta = 1;
delay_ms(1000);
porta = 0;
delay_ms(1000);
goto inicio;
lo malo es que asi se activan todos los pines del puerto a y yo solo quiero activarlos de a uno, como le hago?????
y otra cosa es que se deberian prender y apagar cada 1 segundo, pero lo hacen muchisimo mas rapido, a que se debe???
-
Mi recomendacion, por que veo que estas teniendo muchos problemas es que uses XC8 y no CCS
Ahi vas a manejar los registros directamente y no esa funciones que tiene CCS, si queres seguir con CCS entonces usa el manual.
Busca en google "CCS manual" y el primer pdf que sale es. esta en ingles pero esta todo.
y lo que vos buscas es un
#define a1 pin_a1
-
bueno el proyecto lo tengo que hacer con el ccs :( .. a que te refieres con las funciones que tiene el ccs??
-
Me refiero a las funciones , directivas de prepocesamiento etc.
#byte
Syntax: #byte id = x
Elements: id is a valid C identifier,
x is a C variable or a constant
Purpose: If the id is already known as a C variable then this will locate the variable at address x. In this case the
variable type does not change from the original definition. If the id is not known a new C variable is created
and placed at address x with the type int (8 bit)
En resumen lo estas usando mal. Por eso decia que lo que buscas es un #define
-
una cosa mas, en donde dice:
#use delay(clock=1000000) //cristal a 1 megabit de velocidad
tiene que ser a 1 megabit o puedo ponerle menos velocidad? probe con varias velocidades y eso hace que los leds enciendan a diferentes velocidades, pero no lo hacen cada segundo, como calculo el valor correcto para que los leds enciendan cada segundo??
-
Eso depende del cristal/oscilador que estes usando...
Veo que tus fuses pones que es el cristal interno
El valor que pones alli no es para que el micro funcione a esa velocidad. Sino es para que funcionen correctamente las funciones delay_ms().
En los delays el micro se pasa haciendo Nada ( NOP ), la cantidad de estas instrucciones depende de la velocidad de tu oscilador, una instruccion se ejecuta en Fosc/4, si tenes un cristal o oscilador interno de 8Mhz, cada instruccion se realiza cada 0.5us
Si quisieras 1 segundo de espera son : 2 millones de ciclos o instrucciones de 1 solo ciclo. Ahora si tu oscilador fuera de 4Mhz le llevaria 1 millon de ciclos. Ese calculo lo hace con lo que definis en delay(clock=xxxxxx)
Dependiendo del valor que tenga en el registro OSCCON
en los bits IRCF<2:0>: Internal RC Oscillator Frequency Select bits
Podes elegir la frecuencia:
000 = 31.25 kHz
001 = 125 kHz
010 = 250 kHz
011 = 500 kHz
100 = 1 MHz
101 = 2 MHz
110 = 4 MHz
111 = 8 MHz
Dice que en el restart esta en 000 , trata de ponerle el valor 0x70 al registro OSCCON asi queda en 8Mhz, y luego ahi donde dice clock pones 8000000
-
bueno ya logre arreglar el problema de los pines, lo que pasaba esque lo tenia mal configurado:
en vez de
#byte porta=5 //la ubicasion del puerto a
#byte a1= pin_a1 //declaro el pin a1
#byte a2= pin_a2 //el pin a2
#byte a3= pin_a3 //el pin a3
es
#byte porta=5 //la ubicasion del puerto a
#bit a1= porta.1 //declaro el pin a1
#bit a2= porta.2 //el pin a2
#bit a3= porta.3 //el pin a3
solo era eso, que fastidio que el compilador no me diga ningun error
-
Vuelvo a decir... el compilador esta bien, vos seguis errandole de directivas.