Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

07/09/2016 #121
Moderador

Avatar de D@rkbytes

callecuatro1976 dijo: Ver Mensaje
Ok. Voy a ver como lo implemento, o en vez de leer por adc ya marcar la tensión y que salga por el pwm y no usaría la memoria, ¿es correcto?
No entendí absolutamente nada.
Pero, lo que tienes que guardar es el valor de la variable "ciclo_activo" y al iniciar el programa debes leer ese valor y asignarlo a la variable.
08/09/2016 #122

Avatar de callecuatro1976

Mi ides era ya asignar la tensión con los pulsadores no leerla del adc, si coloco con el pulsador 15 volt que el pwm saque la proporción a 15 volt,

18 volt = máximo pwm
0 volt = mínimo pwm
Y que los pulsadores se muevan en ese rango
Y avance 1,1 1,2 1,3 y sale saque la tensión

Lo voy haciendo y subo,gracias
08/09/2016 #123
Moderador

Avatar de D@rkbytes

Eso que mencionas, es lo que exactamente hace el programa que subí.
Pero yo aproveché uno de los canales ADC de ese PIC para leer el voltaje.
08/09/2016 #124

Avatar de callecuatro1976

Si tenes razón! Como le agrego dos pulsadores más así apretando por 3 segundo tengo 2 memorias y puedo tener dos voltajes diferentes y cada ves que apretó por 3 segundo puedo guardar el valor y trabajo con eso?
08/09/2016 #125
Moderador

Avatar de D@rkbytes

Con un contador y un bucle, pero si tienes más pines de sobra, no le encuentro sentido a eso.
08/09/2016 #126

Avatar de callecuatro1976

Sí, estoy haciendo un lio con los pulsadores.

---------- Actualizado ----------

A ésto es a lo que me refería sobre el voltaje.
Si se puede hacer algo así, y que cuando se deje el botón apretado, suba más rápido.
Y con respecto a la memoria, estoy tratando de hacerlo.
Archivos Adjuntos
Tipo de Archivo: rar 16F883 Lectura de pulsos, porcentaje y voltaje amper.rar (172,2 KB (Kilobytes), 7 visitas)
09/09/2016 #127
Moderador

Avatar de D@rkbytes

Pues no lo veo correcto.
De esa forma no estarás mostrando el voltaje de salida.
Ten en cuenta que la carga presenta una resistencia que provocará una caída de tensión y el programa estará indicando un voltaje que calculas por software, pero ese voltaje no será el que está presente en el momento.
Aparte, en el programa estás usando el ADC 4 y no lo tienes conectado en ninguna parte del esquema.

No entiendo por qué estás modificando un proyecto que se te está dando funcional, por algo que no tiene sentido.
09/09/2016 #128

Avatar de callecuatro1976

Porque estoy trabado con el tema de las memorias y no encuentro la manera que cuando se apaga vuelve a cero. El proyecto que hiciste es muy bueno. Solo necesito que me de la forma de guardar 2 datos así no es tedioso empezar de cero cada vez que se apaga, la opción mejor es usar el adc.
09/09/2016 #129
Moderador

Avatar de D@rkbytes

En el post #121 te expliqué cómo hacerlo, y la verdad es muy sencillo.
Es algo tan básico, que es una de las primeras cosas que se deben saber al programar microcontroladores.

Ahora, si quieres algo más elaborado, puedes sensar el voltaje de alimentación del microcontrolador y guardar los datos cuando ese voltaje esté por debajo de 5 V.
O sea, establecer un voltaje de referencia antes de que ocurra el BOR (Brown-Out Reset)
El compilador de CCS por defecto siempre desactiva éste fuse, así que dependiendo el PIC, podrá operar hasta por debajo de unos 3.3 V.
Así que tienes un amplio rango para poder fijar una histéresis y no provocar falsas lecturas.
10/09/2016 #130

Avatar de callecuatro1976

ok es algo si como lo estoy haciendo


void memoria()
{
if (!input(PIN_A2))
{
write_eeprom (00,voltaje);
}
else if (!input(PIN_A2))
{

voltaje=read_eeprom(00);
lcd_gotoxy(11,1);
printf(lcd_putc,"%4.1fV ",voltaje);
}
}
10/09/2016 #131
Moderador

Avatar de D@rkbytes

No. Muy mal, y no estás prestando atención a lo que te mencioné.
D@rkbytes dijo: Ver Mensaje
Lo que tienes que guardar es el valor de la variable "ciclo_activo" y al iniciar el programa debes leer ese valor y asignarlo a la variable.
¿Por qué se debe guardar el valor de la variable "ciclo_activo"?
Porque el valor de esa variable es lo que define el ciclo activo del PWM y por ende el voltaje de salida.
Así que guardar y leer la variable "voltaje", no tiene relevancia porque el ciclo activo determina el voltaje.

Ahora, ¿por qué leer la variable "ciclo_activo" al iniciar el programa?
Porque justo en ese momento es cuando se requiere saber que valor tenía anteriormente.
Por lo tanto, el programa al iniciar ya tendrá un valor con el cual ajustar el ciclo activo del PWM, y ésto se verá inmediatamente reflejado en el voltaje de salida.

Recuerda ésto:
Para programar debes tener noción e imaginación sobre el acontecimiento de eventos.
11/09/2016 #132

Avatar de callecuatro1976

void memoria()
{
if (!input(PIN_A2)) // si apreto pin a2 por 1 segundo guardo el dato
{
delay_ms(1000);
write_eeprom(00,ciclo_activo ); // guardo el dato ciclo activo

}
if (!input(pin_a2)) // si preciono pin a2 leo el dato en la posicion de la memoria
{

valor =read_eeprom(00); // paso el dato a la variable valor

}

lcd_gotoxy(11,1);
printf(lcd_putc, "%4.1fV ",valor); // muestro el dato en lcd remplazando el dato del adc
}

Si tenes razón , probé de esta manera hacerla la función y me parece que esta mal.
11/09/2016 #133

Avatar de roberttorres

callecuatro1976 dijo: Ver Mensaje
void memoria()
{
if (!input(PIN_A2)) // si apreto pin a2 por 1 segundo guardo el dato
{
delay_ms(1000);
write_eeprom(00,ciclo_activo ); // guardo el dato ciclo activo

}
if (!input(pin_a2)) // si preciono pin a2 leo el dato en la posicion de la memoria
{

valor =read_eeprom(00); // paso el dato a la variable valor

}

lcd_gotoxy(11,1);
printf(lcd_putc, "%4.1fV ",valor); // muestro el dato en lcd remplazando el dato del adc
}

Si tenes razón , probé de esta manera hacerla la función y me parece que esta mal.
Buenas.
Vamos a ver si entiendo , lo que quieres hacer es que al pulsar el botón por un segundo guarde el valor del voltaje en la memoria y al pulsarlo nuevamente lea la memoria y despliegue nuevamente ese voltaje.
Si es asi, tu código esta mal, recuerda que los micros ejecutan las instrucciones de forma lineal,o sea que tu segunda instruccion de leer la memoria no se ejecutara.
Te paso un ejemplo con tu codigo para que lo pruebes y analizes:
Código PHP:
void memoria()
{     
 
int8 cont;     
   if(
input(pin_a2)==0){
          while(!
input(pin_a2)){
          
cont++;
          
delay_ms(10);
          if (
cont >80){
          
write_eeprom(00,ciclo_activo ); // guardo el dato ciclo activo
         
delay_ms(50);
    
lcd_gotoxy(2,1);
         
printf(lcd_putc"\fMEMORIA GRABADA");
         
delay_ms(1000);
         
CONT 0;
          }
          }
           
ciclo_activo =read_eeprom(00); // paso el dato a la variable ciclo_activo
           
lcd_gotoxy(2,1);
           
printf(lcd_putc"\fMEMORIA LEIDA");
           
delay_ms(1000);
           
printf(lcd_putc,"\f"); 
           
cont=0;
            
delay_ms(50);
             
establecer_ciclo(ciclo_activo);
            }

PD: En este ejemplo al pulsar el botón conectado al Pin A2 por un segundo o mas guarda el valor del ciclo_activo, y al pulsarlo solo una vez sin dejarlo presionado lee la memoria y despliega el voltaje.
11/09/2016 #134
Moderador

Avatar de D@rkbytes

roberttorres dijo: Ver Mensaje
PD: En este ejemplo, al pulsar el botón conectado al Pin A2 por un segundo o más, guarda el valor del ciclo_activo, y al pulsarlo sólo una vez sin dejarlo presionado, lee la memoria y despliega el voltaje.
Por ahí va la cosa. Pero, ¿Qué caso tiene leer el valor del ciclo activo guardado en la EEPROM, si durante ese periodo, el valor del ciclo activo no se a perdido y también está previamente asignado?
Como corroboración, es comprensible, pero también redundante.

La importancia de leer el valor guardado del ciclo activo, radica más que nada, al iniciar el programa.
Pero aquí ocurre otro detalle, en dado caso de que no ocurra un corte eléctrico, el equipo siempre arrancará con el motor encendido, puesto que posiblemente quede almacenado un valor diferente al mínimo para el ciclo activo del PWM.
Aquí entra en juego otro factor a guardar y posteriormente comparar, que sería el factor tiempo.
12/09/2016 #135

Avatar de callecuatro1976

Voy a probarlo gracias por su tiempo.
12/09/2016 #136

Avatar de roberttorres

D@rkbytes dijo: Ver Mensaje
Por ahí va la cosa. Pero, ¿Qué caso tiene leer el valor del ciclo activo guardado en la EEPROM, si durante ese periodo, el valor del ciclo activo no se a perdido y también está previamente asignado?
Como corroboración, es comprensible, pero también redundante.
Es cierto Tenes razón, solo tiene que guardar en la EEprom el ciclo activo, para que pueda volver a desplegar el voltaje en caso que la equipo se haya apagado.

La importancia de leer el valor guardado del ciclo activo, radica más que nada, al iniciar el programa.
Pero aquí ocurre otro detalle, en dado caso de que no ocurra un corte eléctrico, el equipo siempre arrancará con el motor encendido, puesto que posiblemente quede almacenado un valor diferente al mínimo para el ciclo activo del PWM.
Aquí entra en juego otro factor a guardar y posteriormente comparar, que sería el factor tiempo.
El ejemplo que subí hace exactamente eso, al encender el equipo, lo hace con el ciclo activo en 1, y al pulsar el boton conectado al pin_A2 y vuelve a desplegar el voltaje guardado, que es lo que entendí que el compañero quiere hacer.
Subo la simulacion y el codigo implementado:
Archivos Adjuntos
Tipo de Archivo: rar 16F883 Lectura de pulsos, porcentaje y voltajememo.rar (179,1 KB (Kilobytes), 11 visitas)
12/09/2016 #137

Avatar de callecuatro1976

Funciona muy bien! Como hago para que cuando dejo apretado suba o baje más rápido el voltaje y se puede poner un buzzer cuando se apreta un pulsador?
12/09/2016 #138
Moderador

Avatar de D@rkbytes

Similar a lo que comenté en el post #125, con un bucle y un contador.
Y si se cumple el conteo predeterminado, actualizas el periodo del retardo por un tiempo menor.
13/09/2016 #139

Avatar de callecuatro1976

Hola estoy probando y me encuentro que con el oscilador interno a 8mhz me da problema, con la lectura de los pulsadores , y todavía ando mareado con el contador
void memoria()
{
int8 cont
; esta variable se declara para alojar los datos de la memoria?
if(
input(pin_a2)==0
){ apretó pin a2
while(!
input(pin_a2
)){ while no entiendo que hace
cont
++; contador asciende
delay_ms(10
);
if (
cont >80
){ contador mayor de 80
write_eeprom(00,ciclo_activo );
// guardo el dato ciclo activo
delay_ms(50
);
lcd_gotoxy(2,1
);
printf(lcd_putc, "\fMEMORIA GRABADA"
);
delay_ms(1000
);
CONT = 0
; y el conatdor a 0


claro yo nunca lo iba hacer andar si no entiendo bien como funciona, el contador para que hacienda o baje mas rápido el voltaje no se como hacerlo, subo lo que hicimos hasta aca


Archivos Adjuntos
Tipo de Archivo: rar Nueva carpeta.rar (74,5 KB (Kilobytes), 2 visitas)
16/09/2016 #140

Avatar de callecuatro1976

Ya casi esta me falta un poco de ayuda para que corra mejor el programa, ya sube y baja rápido pero no logro reflejar la muestra en el adc, lo demás funciona bien no se si estoy aplicando bien las memorias pero hace lo que necesito.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.