TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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.
-
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
-
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
-
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
-
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)
-
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
-
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:
-
Magnifico compilado y gracias por compartirlo. (Hasta que por fin entendí la implementacion del modulo CCP)
Orko 8)
-
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:
-
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>
-
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.
-
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!
-
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.
-
Por aquí, para los PIC16 y 18 utilizamos el CCS C, para los dsPIC el Microchip C30.
-
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
-
Gracias pipoforos.
Date una vuelta por Recursos de Picmania (http://picmania.garcia-cuervo.net/Recursos.php) por si encuentras algo que te sirva.
-
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)
-
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.
-
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)
-
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).
-
Hola Redpic!
Gracias por los ejemplos, son muy útiles! :)
Salu2!
-
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
-
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
-
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
-
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
-
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:
-
"Viejos los montes y aún así reverdecen."
Qué bien que reverdeciste el thread Diego. :mrgreen: