TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RedPic en 21 de Octubre de 2006, 17:42:51

Título: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 21 de Octubre de 2006, 17:42:51
Esta serie de contenidos titulada Técnicas en C pretende mostrar con ejemplos comentados la forma de implementar ciertos procesos muy usuales durante el uso de los Microcontroladores PIC de las series 16F y 18F.

Su desarrollo no pretende sentar cátedra sobre como realizar estas operaciones comunes sino mas bien mostrar, de forma pedagógica, una manera de hacerlos. Explicando paso a paso, en la medida de lo posible, qué conceptos son los involucrados y cómo se realizaría mediante el idioma de compilación C.

Todos lo ejemplos están profusamente comentados y han sido compilados mediante el compilador CCS C v3.242 (http://www.ccsinfo.com/). Todos han sido probados sobre la RRBOARD2  Sistema modular para los PIC 16F877/18F4550 (http://www.todopic.com.ar/foros/index.php?topic=2300.0) que estamos desarrollando en este mismo foro.

Pretendo no utilizar recursos específicos de un PIC en concreto para que sean fácilmente adaptables a muchos de ellos y podamos así utilizarlos en una ámplia gama de ellos.

Estas técnicas en C no es para principiantes absolutos. Se requiere un cierto nivel básico que vamos a dar por supuesto. Si no es éste tu caso te recomiendo visitar los hilos hermanos: Ejemplitos en C para 16F648A  (http://www.todopic.com.ar/foros/index.php?topic=4530.0), Microcursillo en C (http://www.todopic.com.ar/foros/index.php?topic=4533.0) ó Ejemplitos 16F876A. (http://www.todopic.com.ar/foros/index.php?topic=4531.0)

Espero que esta nueva serie de artículos os sea muy provechosa.

Indice de contenidos
==============

1.- Midiendo un pulso. 1ª Parte. Tiempo en Alto (http://www.todopic.com.ar/foros/index.php?topic=14428.0) Mediante INTEXT.
2.- Midiendo un pulso. 2ª Parte. Tiempo en Alto (http://www.todopic.com.ar/foros/index.php?topic=14479.0) Mediante INTCCP en modo Capture.
3.- Midiendo un pulso. 3ª Parte. Tiempo en Alto (http://www.todopic.com.ar/foros/index.php?topic=14528.0) Mediante INTRB.
4.- Midiendo un pulso. 4ª Parte. El pulso completo (http://www.todopic.com.ar/foros/index.php?topic=14434.0) El Periodo y la Frecuencia.
5.- Generando un pulso. 1ª Parte. Onda Simétrica (http://www.todopic.com.ar/foros/index.php?topic=14531.0) Mediante INTRTCC.
6.- Generando un pulso. 2ª Parte. Onda Simétrica (http://www.todopic.com.ar/foros/index.php?topic=14590.0) Mediante INTCCP en modo Compare.
7.- Múltiples lapsus largos de tiempo con una sola interrupción (http://www.todopic.com.ar/foros/index.php?topic=24801.0) Utilizando el Timer1.

Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: angelmoi123 en 23 de Octubre de 2006, 19:26:27
Saludos cordiales

Diego, he visto una gran cantidad de libros sobre esto del C, temas de otros autores, codigos y paro de contar y debo confesar que no habia encontrado en toda la red Ejemplos tan practicos, sencillos (bueno algunos con cierta complejidad) y aplicables como los que tu has propuesto.

Con lo acertado de tus propuestas y la forma extraordinariamente didactica que imprmies tanto en  los experimentos  como en los proyectos creo que ha garantizado el aprendizaje de mas de uno en este foro.

Quiero manifestar publicamente que atraves de tus ejemplos y temas he podido profundizar en esto del C para los PICs.

Estoy seguro que aprovecharemos una vez mas, este excitante tema propuesto.

Te felicito por la pasion que le imprimes a todo lo que hemos visto que haces y por lo incondicional de tus temas

Sigue adelante amigo

Tu discipulo

PD.. En que momento descansas..?

angelmoi123
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 24 de Octubre de 2006, 01:37:07
Muchas gracias por tus palabras Angelmoi.  :)

Es que mi pasión es doble: hacer y compartir. No comprendo lo uno sin lo otro.

No comprendo a quien puede plantearse enseñar algo si no lo ha experimentado con sus propias manos y no comprendo a nadie que haciendo alguna cosa no corre a contárselo a todo el mundo.

En fin que uno es como es.

¿Descanso? ¿Eso qué es lo que és? ja ja ja  :D  :D  :D

Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: santi.sl en 24 de Octubre de 2006, 03:01:56
Felicitaciones de nuevo por esta serie  de artículos que sin duda nos serviran para aprender muchas cosas de c.
Sigo diciendo que ójala todos los profesores tanto de FP como universitarios tuvieran esa motivación y esas ganas de prácticar y enseñar como tú Diego y seguro que muchas de tus publicaciones són usadas  por esos mediocres ( en muchos casos) profesores  que por su condición de funcionarios pasan de todo.

Bueno pues tanto tú Diego como la demás gente estupenda de este Foro que siga con ganas de hacer cosas y de enseñarselas a los demás.

Saludos a todos desde A Coruña, España:
Santi



Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 24 de Octubre de 2006, 04:55:59
Ja, ja, ja  :D  :D  :D

Santi, tus palabras son proféticas ....

Universidad de Valencia, España : Tarjeta EduMic (http://edumic.uv.es/ejemplos.html)
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: santi.sl en 24 de Octubre de 2006, 09:04:13
Pero que me dices Diego, de profeta, ni profecía  nada, son manifestaciones  sinceras  de un Gallego sobre la realidad de la vida.

Saludos a todos
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 25 de Octubre de 2006, 16:33:46
Bueno, ahí tenéis el Midiendo un pulso. 3ª Parte. Tiempo en High (http://www.todopic.com.ar/foros/index.php?topic=14479.0) Mediante el módulo CCP. Otra forma de hacer lo mismo usando una técnica ligeramente distinta al método anterior.  :mrgreen:

Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: Orko en 25 de Octubre de 2006, 17:09:40
Magnifico compilado y gracias por compartirlo. (Hasta que por fin entendí la implementacion del modulo CCP)

Orko  8)
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: pachopic en 26 de Octubre de 2006, 22:15:33
HOLA:

muy buenos los tutoriales .... yo en lo personal he aprendido mucho de ellos incluidos los de tu pagina... eres  muy  buen tutor

salu2 :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 28 de Octubre de 2006, 20:14:21
Añadido otro método para medir el ancho en Alto de un pulso:

Midiendo un pulso. 3ª Parte. Tiempo en Alto con INTRB (http://www.todopic.com.ar/foros/index.php?topic=14528.0) Mediante la interrupción por cambio de estado del PORTB<4:7>

Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 01 de Noviembre de 2006, 08:04:38
Cambiando ahora de tono ....

En vez de medir vamos a generar el pulso.

Generando un pulso. 1ª Parte. Onda Simétrica (http://www.todopic.com.ar/foros/index.php?topic=14531.0) Mediante INTRTCC.

Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 01 de Noviembre de 2006, 09:29:01
Continuamos con nuestra generación de pulsos.  :mrgreen:

Ahora le toca a Generando un pulso. 2ª Parte. Onda Simétrica (http://www.todopic.com.ar/foros/index.php?topic=14590.0) Mediante INTCCP en modo Compare.

P.D: Evidentemente ... ¿ la que queda eeeees ?: ¡Exacto! ¡El módulo CCP en modo PWM!

Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: walvarez en 22 de Enero de 2007, 14:42:16
Compañero muchas gracias por tu respuesta aun no tengo ningún compilador instalado en mi pc, si puedes me recomiendas alguno para poder comenzar a practicar.
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 22 de Enero de 2007, 16:29:49
Por aquí, para los PIC16 y 18 utilizamos el CCS C, para los dsPIC el Microchip C30.
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: pipoforos en 14 de Noviembre de 2007, 16:00:02
hola redpic antes que nada felicitarte y agradecerte por ayudar a tanta gente como yo que se inicia en el mundo de los picss.. quisiera saber donde puedo encontrar un  manual en español o igles no importa sobre el c en micros ayuda sii
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 14 de Noviembre de 2007, 16:09:35
Gracias pipoforos.

Date una vuelta por Recursos de Picmania (http://picmania.garcia-cuervo.net/Recursos.php) por si encuentras algo que te sirva.

Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: jeremylf en 04 de Enero de 2008, 02:30:20
Hombre, gracias por compartir todo esto y mas q en tu pagina publicas. Sabes, gracias a ti e aprendido sobre las interrupciones, los timer's, algo del cpp, usb,... tantas cosas como asta los rebotes de un switch y asi cosas q quiza sean muy basicas pero q por tu forma de explicarlo logras entenderlo muy bien.

Estoy sinceramente agradecido  :P

Sige asi! Gracias.

PD: ¿En exactitu quien es mejor: El modulo CPP o la INTEXT a la hora de medir pulsos?  :mrgreen:


salu2 8)
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 04 de Enero de 2008, 09:48:38
Muchas gracias por tus amables palabras.  :mrgreen:

En cuanto a tu pregunta: Son exactamente iguales en exactitud. Pero es importante saber hacerlo en ambos ya que nunca sabes qué pin tendrás disponible en cada nuevo diseño.
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: jeremylf en 04 de Enero de 2008, 20:31:25
Pero es importante saber hacerlo en ambos ya que nunca sabes qué pin tendrás disponible en cada nuevo diseño.
Exacto! por eso mi pregunta, yaq esa interrupcion unica para b3 hasta b7 como dices es algo inexacta y pues... eso no me sirve mucho, mas aun si es para todos esos pines y no uno en especial (pierdo pines).

En cuanto a tu pregunta: Son exactamente iguales en exactitud
Perfecto!!


Muchas gracias!
salu2 8)
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 15 de Febrero de 2009, 09:18:45
Añadido un nuevo artículo a la serie: Múltiples lapsus largos de tiempo con una sola interrupción utilizando el Timer1 (http://www.todopic.com.ar/foros/index.php?topic=24801.0).
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: Diploko en 17 de Noviembre de 2010, 06:23:27
Hola Redpic!
Gracias por los ejemplos, son muy útiles!  :)

Salu2!
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: Macko77 en 06 de Diciembre de 2013, 10:46:14
Buenas RedPic, ando realizando un sistema de control luminoso como una integración de matlab y una tarjeta de adquisición con un 18F4550, por medio de matlab la idea es enviar un carácter y que el pic haga la parte de control, la tarjeta realiza 3 acciones apagado y encendido de dos recintos y control luminoso de uno de los recintos, las dos primeras cosas ya están hechas pero no logro realizar la acción de la regulación de luz, el codigo que llevo es el siguiente:

#include <18F4550.h>
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN,NOLVP
#use delay(clock=20000000)
#use fast_io(A)
#use standard_io(B)
#include "usb_cdc.h" // Descripción de funciones del USB, entre comillas es porque esta trabajando sobre la misma carpeta
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.

void main() {
   int sal1, sal2;
   unsigned char datoIN;
   usb_cdc_init(); // Configuramos al puerto virtual.
   usb_init(); // Inicializamos el stack USB.
   set_tris_A(0xFF); // Configuro el puerto A como entradas
   set_tris_B(0x00); // Configuro el puerto b salida
   
   while(!usb_cdc_connected())
   {
      OUTPUT_HIGH(PIN_E0);
      OUTPUT_LOW(PIN_E1);
      DELAY_MS(500);
      OUTPUT_HIGH(PIN_E1);
      OUTPUT_LOW(PIN_E0);
   }
   // espera a detectar una transmisión de la PC (Set_Line_Coding).
   
   OUTPUT_HIGH(PIN_E0);
   OUTPUT_LOW(PIN_E1);
 
   sal1=0; //Inicializo Variables alternativas
   sal2=0; //Inicializo Variables alternativas
 
  do{
      usb_task();
         //////////////////////////////////////////////////////
           
      if (usb_enumerated())
      {  // Espera a que el dispositivo sea enumerado por el host.
         OUTPUT_LOW(PIN_E0);
         OUTPUT_HIGH(PIN_E1);
         if(usb_cdc_kbhit())
         { // En espera de nuevos caracteres en el buffer de recepción.
            datoIN = usb_cdc_getc();
            if(datoIN == 'a')
            { //¿lo que llegó fué el caracter a = hay movimiento en el salon 1 y esta en la intesidad mas alta?
            OUTPUT_HIGH(PIN_B0);
            sal1=1; //si, entonces se prenden las luces del salon 1
            }
            if(datoIN == 'b')
            { val=8;
            }
            if(datoIN == 'c')
            { val=7;
            }
            if(datoIN == 'd')
            { val=6;
            }
            if(datoIN == 'e')
            { val=5;
            }
            if(datoIN == 'f')
            { val=4;
            }
            if(datoIN == 'g')
            { val=3;
            }
            if(datoIN == 'h')
            { val=2;
             }
            if(datoIN == 'i')
            { //¿lo que llegó fué el caracter b = no hay movimiento en el salon 1?
            OUTPUT_LOW(PIN_B0);
            }
            if(datoIN == 'j')
            { //¿lo que llegó fué el caracter c = = hay movimiento en el salon 2?
            OUTPUT_HIGH(PIN_B1);
            sal2=1; //si, entonces se prenden las luces del salon 2
             }
            if(datoIN == 'k')
            { //¿lo que llegó fué el caracter d = no hay movimiento en el salon 2?
            OUTPUT_LOW(PIN_B1);
            }

            if (sal1==1 || sal2==1) // Pregunto por variable del salon
            {
            OUTPUT_HIGH(PIN_B2); // Prende Led Indicador
            }
            else
            {
            OUTPUT_LOW(PIN_B2); // Prende Led Indicador
            }
           dato=datoIN;
           }
      }
  }while (TRUE); // bucle infinito.
}


La idea es q cuando llegue el dato b la intensidad sea del 90%, cuando llegue c la intensidad sea del 80%, cuando llegue d la intensidad sea del 70%, cuando llegue e la intensidad sea del 60%, cuando llegue f la intensidad sea del 50%, cuando llegue g la intensidad sea del 40%, cuando llegue h la intensidad sea del 30%.


RedPic le escribo porq he probado muchas cosas pero no me sale lo que quiero, y esto es parte de mi tesis de grado para optar por el titulo de ingeniero en telecomunicaciones, y lo necesito, no se si ud podria colaborarme o ayudarme para poder implementarlo.

Este es el cto de manera general, los moc que utilizo el 3020 q cruzan por cero y el triac bt136
https://drive.google.com/file/d/0Bw7-Do2OdLyGbDdLVHQ1WG01anRCRlF6cFZBOFVXX05KS25v/edit?usp=sharing

Agradeceria una pronta respuesta

Saludos Fabio
maverick77.fabio@gmail.com
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RALF2 en 07 de Diciembre de 2013, 11:10:57
Amigo el MOC3020 no sirve para lo que deseas hacer, porque este siempre se activa cuando la señal pasa por cero, debes emplear un detector de cruce por cero conectado a una entrada del pic como estos (https://www.google.co.ve/#q=detector+de+cruce+por+cero+para+pic) y debes utilizar un MOC3031, por ejemplo, que no tiene detector de cruce por cero.   :mrgreen:
Como te lo coloque aqui:
http://www.todopic.com.ar/foros/index.php?topic=41837.0

No dupliques los post, por favor!

Saludos
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RALF2 en 07 de Diciembre de 2013, 13:36:08
En la imagen tienes un circuito que podrias utilizar para detectar el cruce por cero y para lograr los angulos de control que necesitas   :mrgreen:

(http://img40.imageshack.us/img40/9366/9rgj.png)


Las fuentes DC son de 5voltios y el voltaje de la fuente AC es de 120 Vrms.
los valores de algunas resistencias debes revisarlas porque aunque funciona en la simulacion en la vida real puede que necesiten un pequeño ajuste.

Saludos
Título: pulsos de medidor de flujo
Publicado por: ivanibarra en 08 de Agosto de 2014, 13:09:21
buen dia a todos
espero me puedan ayudar..como le puedo hacer para  saber si un medidor de flujo me esta arrojando pulsos digitales y que sea otro dispositivo o circuito aparte del osciloscopio.. saludossss
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: RedPic en 24 de Octubre de 2014, 10:06:22
Aprovechando que se ha comentado esta serie de artículos (¡Ya tienen 8 años!¡qué viejitos!¡ellos y yo! :shock:) les he dado un repaso para corregir los links de las imágenes que estaban mal tras varios cambios de dominio y/o servidor. Ahora ya se ven todas  :mrgreen:
Título: Re: Serie Técnicas en C : Presentación e Indice de Contenidos.
Publicado por: migsantiago en 24 de Octubre de 2014, 13:27:16
"Viejos los montes y aún así reverdecen."

Qué bien que reverdeciste el thread Diego.  :mrgreen: