Hola, agradeceré mucho la ayuda que puedan darme, no tengo mucha experiencia con esto de la programación de los PIC´s, la única forma en que se me ocurre programarlos es ir definiendo etapa por etapa lo que quiero que haga cada pin, actualmente estoy haciendo un sistema de semáforos con sensores mediante un PIC 18F2550, necesito definir dos pines para sensores y uno para un botón de interrupción, todo el programa es masomenos así:
(pequeña fracción del código)
void main(void){
int i;
set_tris_a(0b00000110);
set_tris_b(0b00000001);
set_tris_c(0b00000000);
while(1){
//Horizontal Derecho********
//9
output_a(0b00001110);
output_b(0b01001101);
output_c(0b11000100);
delay_ms( 600 );
//8
output_a(0b00000110);
output_b(0b01001101);
output_c(0b11000100);
delay_ms( 600 );
(pequeña fracción del código)
con lo primero según yo configuro los puertos A1, A2, y B0 de entrada y todos los de mas de salida, el problema es que al simular el circuito con ese código, me suelta 5V en esos pines, y pues cuando le meto datos me da corto circuito y no lee los datos de entrada...
no se que hacer
y si por ejemplo pongo este código:
(pequeña fracción del código)
void main(void){
int i;
set_tris_a(0b00000110);
set_tris_b(0b00000001);
set_tris_c(0b00000000);
while(1){
//Horizontal Derecho********
//9
output_a(0b00001000);
output_b(0b01001100);
output_c(0b11000100);
delay_ms( 600 );
(pequeña fracción del código)
es decir, si cambio los unos por ceros en esos pines, pues lo que hace es mandarme voltaje negativo y cuando le meto datos, si por ejemplo le doy un voltaje positivo da un corto (obviamente por juntar positivo y negativo) y lo sigue sin leer...
no se que ponerle en los lugares de esos bites para que simplemente no me mande nada y lea lo que se le pone
ya intente por ejemplo ponerlo en hexadecimal así:
set_tris_a(0x60);
set_tris_b(0xFF);
set_tris_c(0x00);
solo quiero configurar los pines A1, A2, y B0 de entrada y los demás de salida
El resultado es el mismo, otra manera de hacerlo que se me ocurre (y no lo he probado) es ir definiendo pin por pin lo que hay que hacer, de la siguiente forma:
output_high(pin_c3);
output_low(pin_a3);
y así sucesivamente.....
pero de esta manera el código quedaría exageradisímamente largo y complicado.....
Simplemente quiero que el PIC no me suelte nada en esos pines y que lea los datos que se le introducen, ¿Cual es el error que tengo?, ¿de que otra manera lo puedo hacer?
Por favor, espero que alguien pueda ayudarme a resolver este problema, se los agradeceré muchisimo.
(pequeña fracción del código)
void main(void){
int i;
set_tris_a(0b00000110);
set_tris_b(0b00000001);
set_tris_c(0b00000000);
while(1){
//Horizontal Derecho********
//9
output_a(0b00001110);
output_b(0b01001101);
output_c(0b11000100);
delay_ms( 600 );
//8
output_a(0b00000110);
output_b(0b01001101);
output_c(0b11000100);
delay_ms( 600 );
(pequeña fracción del código)
con lo primero según yo configuro los puertos A1, A2, y B0 de entrada y todos los de mas de salida, el problema es que al simular el circuito con ese código, me suelta 5V en esos pines, y pues cuando le meto datos me da corto circuito y no lee los datos de entrada...
no se que hacer
y si por ejemplo pongo este código:
(pequeña fracción del código)
void main(void){
int i;
set_tris_a(0b00000110);
set_tris_b(0b00000001);
set_tris_c(0b00000000);
while(1){
//Horizontal Derecho********
//9
output_a(0b00001000);
output_b(0b01001100);
output_c(0b11000100);
delay_ms( 600 );
(pequeña fracción del código)
es decir, si cambio los unos por ceros en esos pines, pues lo que hace es mandarme voltaje negativo y cuando le meto datos, si por ejemplo le doy un voltaje positivo da un corto (obviamente por juntar positivo y negativo) y lo sigue sin leer...
no se que ponerle en los lugares de esos bites para que simplemente no me mande nada y lea lo que se le pone
ya intente por ejemplo ponerlo en hexadecimal así:
set_tris_a(0x60);
set_tris_b(0xFF);
set_tris_c(0x00);
solo quiero configurar los pines A1, A2, y B0 de entrada y los demás de salida
El resultado es el mismo, otra manera de hacerlo que se me ocurre (y no lo he probado) es ir definiendo pin por pin lo que hay que hacer, de la siguiente forma:
output_high(pin_c3);
output_low(pin_a3);
y así sucesivamente.....
pero de esta manera el código quedaría exageradisímamente largo y complicado.....
Simplemente quiero que el PIC no me suelte nada en esos pines y que lea los datos que se le introducen, ¿Cual es el error que tengo?, ¿de que otra manera lo puedo hacer?
Por favor, espero que alguien pueda ayudarme a resolver este problema, se los agradeceré muchisimo.