Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
04/11/2013 #2641
Moderador

Avatar de D@rkbytes

erickp dijo: Ver Mensaje
Te comento que mi pc tiene el windows 7 de 64 bits y por lo que yo sé, no puedo compilar si no es con MPASM, ¿Habrá alguna solución o necesito definitivamente una maquina de 32 bits?
Lo que puedes hacer es realizar el mismo procedimiento que mencioné en el post #2733 para modificar la palabra de configuración en el archivo 16F677.INC y así seguir compilando con MPASM.

En la parte de configuración de fuses lo dejas de esta forma:
Código:
        NOLIST
    ifdef PM_USED
        LIST
        include 'M16F6xx.INC'    ; PM header
        device  pic16F677, intrc_osc_noclkout, wdt_on, mclr_on, protect_off
        XALL
        NOLIST
    else
        LIST
        LIST p = 16F677, r = dec, w = -302
        INCLUDE "P16F677.INC"    ; MPASM  Header
        __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF

        NOLIST
    endif
        LIST
erickp dijo: Ver Mensaje
Como siempre una felicitación y reconocimiento por tu gran ayuda.
Saludos y nuevamente gracias por tu gran ayuda a nosotros los novatos.

Atte.
erickp
De nada erickp, y en lo que te podamos ayudar, cuenta con ello.

Suerte.
05/11/2013 #2642


D@rkbytes dijo: Ver Mensaje
Tu código contiene varios errores, sobre todo en el control de la interrupción por cambio de estado RB4-RB7
Ya los corregí, y ahora al presionar el botón de tiempo extra, se reinicia el conteo a 29.

Suerte.


Leer información de varios sensores y luego mostrar la información en pantalla, no es difícil.
Tan solo se leen los sensores consecutivamente, se guarda la información en variables, se procesa y se muestra.
En el caso de sensores análogos como el LM35, realizar la tarea de leer varios y luego mostrar, es sencillo.
Cuando el proceso de lectura y conversión es semi complicado como el caso de un DS18B20,
entonces si puede demorar un poco la visualización si se usan varios sensores.
Aún así, para ambos casos no se requiere del uso de microcontroladores potentes.

Quizás este ejemplo que adjunto, te parecerá muy interesante, es sobre Pseudo Multitasking con PIC.
Hace ya algún tiempo que lo descubrí, y ahora los enlaces están rotos.
Pero por suerte logré descargar los archivos, y aquí se los dejo.
En el archivo viene la explicación de como funciona, y algunas librerías. "Está en inglés"

Nota:
El proyecto original usaba un PIC16F887A, yo lo adapte a un PIC16F88.
Como quiera dejé el archivo *.bas original sin realizar modificaciones.

Saludos.
Suerte.
Buenas tardes amigo D@rkbytes. Gracias por este circuito.
Me tome el atrevimiento y lo monte en PROTEUS con un 16F628A y 3 displays.
Con un poco más de exactitud en el tiempo con respecto al reloj de PROTEUS en el ejemplo.
Arranca desde 180 y el reloj marca 3 minutos cuando llega a 000 el timer.
Adjunto carpeta con archivos y sigo en el proceso de poder programarlo con pulsadores.
Cualquier ayuda será bien recibida.
06/11/2013 #2643
Moderador

Avatar de D@rkbytes

juanc08 dijo: Ver Mensaje
Suerte.
Buenas tardes amigo D@rkbytes. Gracias por este circuito.
Me tome el atrevimiento y lo monte en PROTEUS con un 16F628A y 3 displays.
Con un poco más de exactitud en el tiempo con respecto al reloj de PROTEUS en el ejemplo.
Arranca desde 180 y el reloj marca 3 minutos cuando llega a 000 el timer.
Adjunto carpeta con archivos y sigo en el proceso de poder programarlo con pulsadores.
Cualquier ayuda será bien recibida.
Si lo que quieres es hacer un contador programable, es mejor que realices otro código.
Ese no está diseñado para eso y tardarás más en modificar el código que en hacer un nuevo programa.

Saludos.
10/11/2013 #2644


viggiani1975 dijo: Ver Mensaje
Pues no sé si serán los módulos rf los que presenten problema (FSI000A-CDR03A), hasta ahora los veo funcionando bien y como te comenté anteriormente, cuando programo para un solo pin parece funcionar bien por lo que creo que el problema no es tan trivial como parece. Voy a probar con un solo pin durante todo el día a ver si se mantiene y lo estoy comentando aquí nuevamente esta noche, de lo contrario, pues me tocaría desechar la idea del bloqueo con rf y pensarlo con teclado directamente en la moto para mayor seguridad.

Gracias.
Hola compañero, soy nuevo en cuestiones de módulos RF y tengo receptor y emisor como los suyos, la verdad no se como los puedo hacer funcionar y ya he buscado en google pero no hay mucha información para ellos podrías darme una mano con algo de info para este módulo?
14/11/2013 #2645


[ Aporte ] Controlador de acuario Pic18f4520
Pues eso, que gracias a todos ustedes y sin conocimientos de electrónica, pude armarme un controlador que me regula la temperatura del agua (frío y calor) con simulación de amanecer-anochecer por Hwpm y , mediante el motor de una unidad de Cd rota con un tornillo sinfin metida en un bote de comida para peces, les dá de comer 3 veces al día programables. Gracias en particular a reyvilla, por atender a mis cuestiones sobre el módulo CCP.

A quien le pueda interesar le dejo el hex, el archivo pbp y la simulacíon en proteus ( todo un poco caótico y todavía muy mejorable ,pero yo lo tengo funcionando y vá de mil amores ).

Comentar que todo el programa lo hice sobre la base del termostato y el reloj rtc del libro de Carlos A. Reyes y que en la simulación falta un pulsador cuya única función es encender y apagar la luz del Lcd
Archivos Adjuntos
Tipo de Archivo: rar Acuario.rar (36,8 KB (Kilobytes), 76 visitas)
18/11/2013 #2646


holas una consulta.
Estoy haciendo un proyecto q es mensaje a celular usando un sim900 y el pic 16f873
El sim fundiona con comandos at en el cual no tengo problema alguno, el problema es en el pic cuando hago el programa en pic basic
el programa es:

CONEC VAR BYTE

TESTEO:
SEROUT PORTC.6,N9600,["AT"]
SERIN PORTC.7,N9600,CONEC ;ALMACENADO EN CONEC
IF CONEC ="OK" THEN PASO2 ; COMPARACION SI ESTA OK VA A OTRA FUNC
GOTO TESTEO

El error radica en que en el momento de comparar if CONEC ="OK" me da error
pregunta :cuando yo le envio AT al sim me responde "OK"¿como ago que CONEC me almacen esos dos caracteres?¿como puedo hacer la comparacion en if?
os agradecere en el alma si alguien me ayuda
18/11/2013 #2647

Avatar de LaElectronicaMeOdia

¿como ago que CONEC me almacen esos dos caracteres?¿como puedo hacer la comparacion en if?
en lugar de la sentencia if-then utiliza la funcion serin2 y WAITSTR ArrayVar{\n}
19/11/2013 #2648


perdon pero no entiendo como usar el serin2 ni el CONEC VAR BIT me podrias darun ejemplo por favor
19/11/2013 #2649


nieves dijo: Ver Mensaje
holas una consulta.
Estoy haciendo un proyecto q es mensaje a celular usando un sim900 y el pic 16f873
El sim fundiona con comandos at en el cual no tengo problema alguno, el problema es en el pic cuando hago el programa en pic basic
el programa es:

CONEC VAR BYTE

TESTEO:
SEROUT PORTC.6,N9600,["AT"]
SERIN PORTC.7,N9600,CONEC ;ALMACENADO EN CONEC
IF CONEC ="OK" THEN PASO2 ; COMPARACION SI ESTA OK VA A OTRA FUNC
GOTO TESTEO

El error radica en que en el momento de comparar if CONEC ="OK" me da error
pregunta :cuando yo le envio AT al sim me responde "OK"¿como ago que CONEC me almacen esos dos caracteres?¿como puedo hacer la comparacion en if?
os agradecere en el alma si alguien me ayuda
Hola...Debes leer la ayuda(Help) del PBP en el que explica el alcance y la forma de usar del comando SERIN2 y la forma de "esperar" una cadena. De todas formas NUNCA una variable del tipo BYTE(0-255) como tienes definido a CONEC puede almacenar una cadena de caracteres pero si el valor numérico de uno solo a la vez( o la "O(79)" o "o(111)" o la "K(75)" o la "k(107)").
Saludos.

Ric.
20/11/2013 #2650

Avatar de reyvilla

Hola compañeros de nuevo por acá con mis curiosidades, estuve hace un tiempo experimentando con el modulo PWM del PIC16F877A y me fue muy bien probando lo con un led variando su intensidad. En su momento me entero que la minima frecuencia a 20MHZ es de 1.22khz y a 4mhz es de 245hz lo cual es mucho para controlar un motor dc. A mi parecer esto es por la capacidad en si del microcontrolador ya que no es practico si se quiere independizar del manejo, a esto me refiero poder mantener un motor a una velocidad a través del PWM y poder hacer otras cosas sin tener que depender del una interrupción adicional para el control del motor. Esto ya que la única forma de poder bajar esa frecuencia es con un contador a través del timer1. Entonces llego a una conclusión que es preferible manejar un pwm directo por interrupción que el físico del microcontrolador ya que seria como mas eficiente el manejo del mismo y menos complicado que usando el modulo PWM propio del micro ya que no dependería de dos pines si no que podría aplicarlo a cualquier pin I/O.
Me gustaría saber sus opiniones y análisis al respecto.
A ustedes que les parece mejor...?
20/11/2013 #2651

Avatar de LaElectronicaMeOdia

A ustedes que les parece mejor...?
yo diria que depende del proyecto, la ventaja de utilizar el PWM del modulo del Pic es que trabaja en segundo plano, mientras que si es por codigo no.

con respecto al numero de pines, pues hay pics con varios modulos(PWM)

p.d.espero haber entendido bien tu planteamiento.
20/11/2013 #2652

Avatar de reyvilla

Exacto eso es lo que venden del micro y lo que entusiasma a utilizar el modulo PWM que es independiente de las otras ejecuciones del código, pero limitado y esa limitación te obliga a utilizar una subrutina adicional para poder utilizarlo en un motor y por lo tanto ya allí ya pierdes ese aspecto de independiente. Es útil al 100% para situaciones en las cuales manejes frecuencias mayores a 245hz de lo contrario para frecuencias de 50hz por ejemplo no lo veo muy eficaz por lo de la subrutina, en ese caso creo que es preferible hacer una rutina por interrupción y ya.
29/11/2013 #2653


Saludos reyvilla, leyendo tu pregunta (espero haber entendido bien) concuerdo con el amigo LaElectronicaMeodia, eso dependeria de tu proyecto, de la complejidad, o mas bien que tan grande con respecto a circuiteria quisieras hacerlo. Pero alguna vez en un proyecto utilice divisores de frecuencia, quizas podriar utilizar cualquiera de estos circuitos (existen muchos) para dividir tu frecuencia minima "245" y asi poder tener un rango mas amplio. De todas formas comenta por aqui cualquier cosa, o si lo haces de otra forma tambien podria interesarle a otros miembros del foro.
Saludos y Suerte!
30/11/2013 #2654


kiyero dijo: Ver Mensaje
Hola Volthor, probé el que me enviaste, pero al compilarlo me dá un error, (igual genera el archivo hex), lo simulo en proteus y se queda en el primer efecto, aún cuando vuelvo a presionar el pulsador, adjunto el .pbp y el .dsn, para que por favor lo observes (no sé si tal vez mi simulador está mal configurado), gracias, seguimos en contacto
amigo, el problema que tienes es que esta mal definido el watchdog (wdt) si eliminas o colocas como corresponde la linea, compila sin problema, saludos
04/12/2013 #2655


Control remoto sony
Amigos como puedo capturar las señales de cualquier control remoto sony para usarlo como pulsadores para activar relays con picbasic
04/12/2013 #2656

Avatar de LaElectronicaMeOdia

carlos jara dijo: Ver Mensaje
Amigos como puedo capturar las señales de cualquier control remoto sony para usarlo como pulsadores para activar relays con picbasic
yo hice un codigo en C para el Samsung y philips pero supongo que segun esta ficha es lo mismo para el sony, por interrupcion externa y un timer haces la medicion del tiempo de los pulsos y decodificas.
06/12/2013 #2657


gracias
Gracias amigo por tu pdf
06/12/2013 #2658


Amigos, necesito de su gran ayuda.

Tengo este código. ¿Me podrían ayudar? Está en pic basic.
¿Cómo puedo hacer una rutina de tiempo para cada pulsador?
Oséa que si presiono 5 segundos pulsador1, led1 encienda 30 minutos, si presiono 7 segundos pulsador 1,
el led1 se quede encendido 1 hora y si presiono 2 segundos pulsador1 que el led1 se apague solo al cumplirse un minuto.

Ojala me puedan ayudar. Muchas gracias por su aporte.
Archivos Adjuntos
Tipo de Archivo: rar control de relay.rar (8,0 KB (Kilobytes), 48 visitas)
08/12/2013 #2659


hola
Amigos del foro logre implementar algo pero aun me falta anexo todo el circuito con el codigo que he podido avanzar espero me puedan ayudar lo incomodo es que no tengo internet en casa y no me dejan instalar ni el proteus ni el microcode en cabina alquilada jejeje espero su ayuda amigos

la idea es que pueda darle diferentes tiempos presionando el mismo pulsador
ejemplo;
* PRIMER TIEMPO mantengo presionado botón por un mediosegundo y activa led_1 por 10 segundos si vuelvo a presionar el boton dentro de los 10 segundos le ordenare que se apague led_1 y si no es presionado el boton se apagara después de los 10 segundos automáticamente.

* SEGUNDO TIEMPO mantengo presionado botón por 2 segundos y activa led_1 por 1 minuto si dentro del minuto se vuelve a presionar el boton led_1 se apagara y si no es presionado el boton cumple el tiempo del minuto y el led_1 se apaga automaticamente.

* TERCER TIEMPO mantengo presionado el boton por 5 segundos y se activa led_1 por un tiempo de 2 horas si dentro de este tiempo de 2 horas se vuelve a presionar el boton led_1 se apaga y si no se presiona el boton led_1 se apagara automaticamente cuando se cumpla el tiempo adecuado amigo por favor he avanzado un poco del codigo pero aun no logro dar con el codigo o con la forma adecuada de hacer por favor es`pero me puedan ayudar con sus conocimientos.
Este es el codigo
Código:
@ DEVICE PIC16F628A         
@ DEVICE INTRC_OSC_CLKOUT    
@ DEVICE WDT_OFF             
@ DEVICE PWRT_OFF            
@ DEVICE LVP_OFF               
@ DEVICE CPD_ON             
@ DEVICE PROTECT_ON 
       
DEFINE OSC 4 

CMCON = 7

TRISB = %00000000 
TRISA = %11110000 
PORTA = %00000000
PORTB = %00000000

TLED1       VAR word  
TLED2       VAR word
TLED3       VAR WORD

MinutO      var byte   
Segundo     Var Byte     
MAS_TIEMPO  VAR BYTE
INITIO      VAR BYTE
I           var byte

FLAG0       VAR BIT
FLAG1       VAR BIT
FLAG2       VAR BIT


;******POTENCIA******///////****** 
LED         var PORTB.0  
LED_1       VAR PORTB.1 
LED_2       VAR PORTB.2 
LED_3       VAR PORTB.3
Trbuz       VAR PORTB.7
;********************///////******

;******PULSADORES****///////******                   
BOTON       VAR PortA.7 
BOTON1      VAR PortA.6
BOTON2      VAR PortA.4
;********************///////******


;gosub beeps
;pause 1000

OPTION_REG = %10000101
ON INTERRUPT GOTO MI_INTERRUPCION
INTCON = %10100000

FLAG0=0
FLAG1=0
flag2=0
i=0

 INICIO:
   
     if boton then    ;como implementar los tiempos adecuadamente??????
      repeat
       pause 10
        i = i + 1      
      until not boton           
     if i =< 50 then         
       toggle led_1    
       toggle flag0    
       TLED1=0         
      else      
    if i=< 150 then 
     high led_1    
      high flag1    
       TLED2=0
     else
       toggle led_1   
       flag0=0
       flag1=0
       tled1=0
       tled2=0
      endif
     endif
    endif
   pause 10
     
GOTO INICIO

    DISABLE            
MI_INTERRUPCION: 
    MAS_TIEMPO = MAS_TIEMPO + 1
    IF MAS_TIEMPO => 61 THEN
    MAS_TIEMPO = 0
    TOGGLE LED
    if FLAG0 THEN 
    TLED1 = TLED1 + 1
    ENDIF
    IF FLAG1 THEN
    TLED2= TLED2 + 1
    ENDIF
    IF FLAG2=1 THEN
    TLED3= TLED3 + 1
    ENDIF

    IF LED_1 = 1 and TLED1 = 10 THEN  ; 10 segundos 
    flag0=0
    LED_1=0
    TLED1=0
    i=0
    ENDIF
    
    IF LED_1 = 1 and TLED2 = 60 tHEN ; 1 minuto ===> 60 segundos
    LED_1=0 
    FLAG1=0
    TLED2=0 
    i =0  
    endif
    ENDIF

    IF LED_1 = 1 and TLED3 = 7200 tHEN ; 2 horas ===> 7200 segundos
    LED_1=0 
    FLAG2=0
    TLED3=0 
    i =0  
    endif
    ENDIF
    
    INTCON = %10100000 
    Resume
    Enable
    END
Si quisiera que tenga un sonido buzzer para que me avise cuando active el tiempo de 1 minuto por decir bip bip tiempo de
for I = 0 to 1
high buzzer
pause 80
low buzzer
pause 80
next I
y cuando se cumpla el minuto vuelva a sonar bip bip afectaria esto en la rutina del conteo por interrupcion osea afectaria en algo. Ya que estuve haciendo pruebas y cuando le puse el buzzer se retrazaba un poco en contar los segundos o mejor dicho no eran exactos los segundos
Archivos Adjuntos
Tipo de Archivo: rar ckto.rar (18,2 KB (Kilobytes), 41 visitas)
09/12/2013 #2660


hola cesarim
mira estuve probando tu codigo agregue un par de lineas pero no trabaja no logro hallar la forma adecuada esperemos que puedan ayudar los amigos del foro o amigos moradores
lo estuve probando con segundos en cada tiempo
Código:
 INICIO:
   
     if boton then    
      repeat
       pause 10
        i = i + 1     
      until not boton           
     if i =< 30 then      
       high led_1    
       high flag0    
       TLED1=0         
      elseif 
        gosub Time1 
      ELSE   
    if i=< 150 then 
     high led_1  
      high flag1    
       TLED2=0
     else
      gosub Time1
      endif
     endif
    endif
   pause 10
     
GOTO INICIO

    DISABLE            
MI_INTERRUPCION: 
    MAS_TIEMPO = MAS_TIEMPO + 1
    IF MAS_TIEMPO => 61 THEN
    MAS_TIEMPO = 0
    TOGGLE LED
    if FLAG0 THEN 
    TLED1 = TLED1 + 1
    ENDIF
    IF FLAG1 THEN
    TLED2= TLED2 + 1
    ENDIF

    IF LED_1 = 1 and TLED1 = 8 THEN  ; 
    flag0=0
    LED_1=0
    TLED1=0
    i=0
    ENDIF
    
    IF LED_1 = 1 and TLED2 = 12 tHEN ; 
    LED_1=0 
    FLAG1=0
    TLED2=0 
    i =0  
    endif
    ENDIF
    
    INTCON = %10100000 
    Resume
    Enable
    
    Time1:
       toggle led_1  
       flag0=0
       flag1=0
       tled1=0
       tled2=0
    goto INICIO   
 END
¿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 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.