Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Problema con el trisb


       



#1  Problema con el trisb
arex
Ubicación: Madrid
Registrado: 22 Jun 2007
Mensajes: 37
citar
Hola esto intentanto hacer un programa controlado por un pic16f876.

El tema es muy simple en la salidas Rb del pic tengo conectado lo siguiente:

RB0 Tengo conectado el enable de un L298 (control para un motor)
RB1 Tengo conectado el IN1 del L298
RB2 Tengo conectado el IN2 del L298
RB3 Tengo conectado un led

Las demas salidas RB sin conectar

El caso esque para controlar esto tengo que poner el TRISB como salidas, y lo hago asi:

TRISB=0b11110000;

El problema esque no funciona y lo que he hecho es ir probando con cada uno de las salidas RB, es decir primero puse:
TRISB=0b11110111; Y el led se encendia
luego:
TRISB=0b11110110; funcionaba
TRISB=0b11110010; funcionaba y se encendia el led y el motor giraba en un sentido
pero..TRISB=0b11110000; encuanto ponia el RB1 como salida, ya sea con los demas o por si solo no me funciona NADA he comprobado la placa y no esta en corto ni nada

Que puede ser?

#2  TRISB
AleixForo
Ubicación: Barcelona
Registrado: 04 Feb 2008
Mensajes: 14
citar
Mira si lo programas con el CCS, la instruccion es SET_TRIS_B( 0x32 ); (por ejemplo)
sino prueba primero de ponerlo en hexadecimal como en el ejemplo anterior en vez de en binario y sino no funciona, no pongas nada de configuracion de entrada salida, en los pic's funciona igual de bien.

#3  
Paloky
Ubicación: Mataró, Barcelona
Registrado: 21 Abr 2006
Mensajes: 146
citar
Hola Arex.

Supongo que una vez configurado el TRISB, pones IN1=0 y IN2=1 y biceversa para hacer girar el motor, no?.

Que compilador usas: Assembler o C ?

Pon el código completo a ver si vemos algo raro.

Saludos.

#4  
arex
Ubicación: Madrid
Registrado: 22 Jun 2007
Mensajes: 37
citar
Paloky escribió: Hola Arex.

Supongo que una vez configurado el TRISB, pones IN1=0 y IN2=1 y biceversa para hacer girar el motor, no?.

Que compilador usas: Assembler o C ?

Pon el código completo a ver si vemos algo raro.

Saludos.


Si efectivamente luego utilizo el IN1 y el IN2 Enable..., uso como como compilador el Mplab, el programa que he realizado es de los mas simple y lo hice con el unico objetivo de comprobar que mi placa funcionaba, es decir el programa gordo todavia no lo he hecho, por cierto si no lo configuro como salida no me funciona y no se porque pero bueno.
Lo mas raro esque tengo un entrenador con leds y demas y cuando conecto pruebo el micro parece estar bien, pero en mi placa no me va.

Ya he preguntado a 3 profesores y tampoco saben decirme.

El programita:
#include <pic1687x.h> /* declaración de registros apra el PIC16F876 */

void main (void){

OPTION=0;
TRISA=0b00111111;
ADCON1=0b00000111; // todas las líneas son digitales


TRISB=0b11110000; //aquí creo qe esta el problema

TRISC=0b11111111;
INTCON=0;

while(1){

if (RC1) {RB3=1; RB0=1;RB2=1;RB1=0;} else {RB3=0; RB0=1;RB2=0;RB1=1;}

}

}

Lo mas raro es que el Rb2 que controla el IN2 del L298 no me da problemas, y para comprobar el funcionamiento de la placa he quitado el micro e introducido manualmente 5 voltios al Rb1 que ataca al IN1 y funcinaba, es decir, el hardware no puede ser. Tambien he probado varios micros por si estubiera defectuoso.

salu2 y muchas gracias por todo

Por cierto RC1 es un pulsador con resistencia de pull-up

#5  
Paloky
Ubicación: Mataró, Barcelona
Registrado: 21 Abr 2006
Mensajes: 146
citar
Busca y utiliza el compilador CCS, y prueba este programa.




#include <16F876.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD

#use delay(clock=20000000)


/*
RB0 Tengo conectado el enable de un L298 (control para un motor)
RB1 Tengo conectado el IN1 del L298
RB2 Tengo conectado el IN2 del L298
RB3 Tengo conectado un led
*/


void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);


while(1)
{

if (input(PIN_C1))
{
output_high(PIN_B3); // Led ON
output_high(PIN_B0); // Enable L298
output_high(PIN_B2); // Sentido_1
output_low(PIN_B1);
}

else
{
output_low(PIN_B3); // Led OFF
output_high(PIN_B0); // Enable L298
output_low(PIN_B2); // Sentido_2
output_high(PIN_B1);
}


} // Fin del While(1)

} // Fin del Main





Te tendria que funcionar a la primera.

Ya me dirás a ver.

Saludos.

#6  
arex
Ubicación: Madrid
Registrado: 22 Jun 2007
Mensajes: 37
citar
Paloky gracias por tu aportacion pero como me obligan a usar ese compilador, no me quedan mas narices.

Bueno como mi problema es rarisimo pues decidí hacer otra plaquita (esta ultima mucho mejor echa y comprobada), esta la he probado con el programita que os dije y me funciona, ha sique he ido creando un programa mas complejo (aunque no mucho) el caso es que inserto el micro en la placa pulso un fin de carrera el motor comienza a girar pero no para desconecto de alimentacion y veo que el micro esta muy caliente, enciendo la fuente otra vez y la fuente me indica que esta en corto y no funciona nada, despues quito el micro y ya no hay corto, asique digo bueno pues voy a poner el micro que use antes con el primer programa y nada mas ponerlo se empieza a calentar y otra vez en corto, vuelvo a quitar el micro y se quita el corto, en resumidas, me he cargado dos micros.

A que puede ser debido?

al principio me funcionó y no he cambiado nada, y me da miedo volver a probar y cargarme otro.

#7  Un esquemático del circuito?
Ardogan
Ubicación: Argentina
Registrado: 19 Ago 2006
Mensajes: 437
citar
Como calienta tanto el micro puede ser que tu circuito le esté pidiendo más corriente de la que puede dar el microcontrolador en alguno de sus pines.
Para ver si es algo de eso tendrías que postear el circuito que usaste (una imagen jpg o gif es lo más fácil de ver), para que te puedan contestar con precisión.
Saludos

#8  
arex
Ubicación: Madrid
Registrado: 22 Jun 2007
Mensajes: 37
citar
Adjunto os dejo el circuito que realice con el capture, yo creo que esta bien pero si ven algo raro...



Este mensaje contiene archivos adjuntos, para verlos debes estar registrado.

#9  
Ardogan
Ubicación: Argentina
Registrado: 19 Ago 2006
Mensajes: 437
citar
Lo primero que noté es que para inicializar los puertos de I/O recomiendan escribir un 0, y después configurar los TRIS (si bien no creo que esto para nada elimine el problema):

"It is recommended that when initializing the port, the data latch (PORT register)
should be initialized ?rst, and then the data direction (TRIS register). This will elim-
inate a possible pin glitch, since the PORT data latch values power up in a random
state."
" CLRF STATUS ; Bank0
CLRF PORTB ; Initialize PORTB by clearing output
; data latches
BSF STATUS, RP0 ; Select Bank1
MOVLW 0xCF ; Value used to initialize data direction
MOVWF TRISB ; PORTB<3:0> = inputs, PORTB<5:4> = outputs
; PORTB<7:6> = inputs "

No ví nada raro en el esquema del circuito. Pensaba que podían llegar a ser incompatibles las entradas del L298 con las salidas del PIC, pero no según las hojas de datos.

En la hoja de datos del L298/características eléctricas dice que la tensión en Vs tiene que ser al menos 2.5V mayor a Vih (nivel alto con el que se excitan las entradas lógicas), y veo que lo estás con Vss=Vs=Vcc.

En fin, nada de lo anterior explica el calentamiento del PIC...
Revisa si las resistencias en la placa son de los mismos valores del esquemático, quizás soldaste alguna de menor valor sin querer... Es lo único que se me ocurre para explicarlo.

Saludos

#10  
arex
Ubicación: Madrid
Registrado: 22 Jun 2007
Mensajes: 37
citar
He colocado un condensador de 100nF en paralelo con uno de 100uF a la entrada de alimentacion del l298 y parece que ya se ha solucinado, alomejor eran los pico de tension que hacian cosas raras, pero ahora se me plantea otra duda, esta vez con el programa

Este es mi programa:

#include <pic1687x.h> /* declaración de registros para el PIC16F876 */

#define FCd RC2
#define FCi RC1
#define pul RC0
#define derecha 1
#define izquierda 0

bit ok;

void main (void){

OPTION=0;
ADCON1=0b00000111;

PORTB=PORTC=0; /* CONVIENE PONER LOS PUERTOS A CERO */
/* FALTABA LOS TRIS */
TRISA=0b11111111; /* Todo como entradas*/
TRISB=0b11110000;
TRISC=0b11111111;

if (ok==derecha) {if (FCd==0){

RB0=RB1=RB2=RB3=0;
if (pul==0){
ok=!ok; /*+++*/
}
}

else {RB0=1;RB1=1;RB2=0;RB3=1;} /*+++*/

}


else if (FCi==0){

RB0=RB1=RB2=0;RB3=1;
if (pul==0){
ok=!ok; /*+++*/
}

}

else {RB0=1;RB1=0;RB2=1;} /*+++*/


}/*de main*/

Bueno pues donde aparece esto "/*+++*/" es por que en ese punto tendria que volver al principio del programa, es decir tendria que volver a hacer todo desde el main y no se como acerlo, talvez con funciones pero no se muy bien como se hace, me podeis ayuda?

muxas gracias a todos

 Responder





 Otros temas de interés 
No hay mensajes nuevos proteccion contra corto circuito.
No hay mensajes nuevos TV en corto
No hay mensajes nuevos LA fuente hace corto
No hay mensajes nuevos corto en placa base de un portatil??? andandara???
No hay mensajes nuevos fuente regulable hasta 30v con proteccion contra corto

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||