TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: JoseV en 12 de Agosto de 2020, 06:55:58
-
Hola.
Soy aprendiz de primeros pasos. He hecho este programita y en simulación si va pero en real no ejecuta "switch". Ccc s Compiler 5.076. ¿Me echais una mano?. Gracias.
#include <16F630.h>
#fuses nocpd, noprotect, nobrownout, nomclr, noput,nowdt,intrc
#use delay(clock=4000000)
#define A PIN_C0 //SALIDAS A,B,C,D
#define B PIN_C1
#define C PIN_C2
#define D PIN_C3
#define Boton PIN_C5 //BOTON
#define EN PIN_C4 //ACTIVA L293
int pasos=255;
int sentido;
int s=15;
///////////////////////////////////////////////////////////
void main(){
set_tris_c(0b00100000);
output_c(0b00000000);
while(1){
while (!input(Boton)); //SI ESTA A "0" NO SALE DEL BUCLE
delay_ms(10);
switch (sentido) {
case 1:
for (int i = 0; i < pasos; i++) {
output_High(EN);
//...... Codigo
}
Output_low(EN);
sentido = 0;
break;
case 0:
for (int i = 1; i < pasos; i++) {
output_High(EN);
//......Codigo
} //bucle for case 0
output_low(EN);
output_c(0b00111000);
sentido = 1;
break;
}
}
}
-
Primero siempre defini un valor de inicio
Nunca dejes las cosas al azar.
---------------------------------------------------------------
Si no funciona en la realidad y si en la simulacion pueden ser varias cosas:
- Tiempos y todo ocurre muy rapido, lo cual en la simulacion no.
- Problemas de hardware (MLCR, Oscilador mal contacto)
- FUSES (que generalmente el simulador no lo tiene en cuenta)
Mientras esta en 0 se queda encerrado.... pero si esta en 1, es como si no existiera eso... Luego una demora de 10ms y luego el resto del programa.
Si estas esperando que el boton este en 1, para ejecutar el programa, espero que el resto del programa sea lo suficientemente lento como para que retires el dedo, sino va a entrar varias veces. y cambiando de sentido.
-
Hola KILLERJC.
Te agradezco que te hayas parado a ver mi programa.
Si, el tiempo que tenemos hasta volver a preguntar por el botón "while (!input(Boton));" es suficiente, unos 3 segundos. He hecho pruebas y el micro si que arranca pero cuando llega a "switch" de ahí no progresa. Item mas: he tratado de cambiarlo por otro tipo de bucle
if (sentido==0){
for (int i = 0; i < pasos; i++) {
.
.
.
else if(sentido==1){
for (int i = 0; i < pasos; i++) {
y tampoco va en real. Si quito el bucle "if...Else if", sin problemas...(con lo bien que cacharreaba yo con mi ASM).
Veo que me falta mucho en C.
Gracias y un saludo
JoseV