Autor Tema: Sugerencia de temario para aprender PICS  (Leído 1561 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 8bits

  • PIC10
  • *
  • Mensajes: 13
Sugerencia de temario para aprender PICS
« en: 06 de Agosto de 2017, 00:48:21 »
Hola buena noche a todos los foreros, en esta ocasión solicito de su ayuda y experiencia, para que me aconsejen el camino, o ruta de aprendizaje más óptima (no quiero la más corta ni la más facil) de aprender a programar microcontroladores PIC. Les comento que he iniciado con el IDE MPLABx y el compilador XC8, seleccione el PIC18F4550. Me estoy guiando con el datasheet, este foro y algunos artículos en la web. Lo que necesito saber es como estudiar...es decir, ¿en que orden debería ver los temas?, debido a que es todo un mundo. En estos días que he iniciado en esto, según el datasheet eh iniciado en conocer la memoria del micro y su arquitectura interna, también como se debe seleccionar y configurar el reloj, la estructura general interna de un micro, he visto los puertos de salida y entrada y como configurarlos, y el Timer0 en modo temporizador a 8 bitsy 16 bits, en cuanto al software no soy nuevo en programación, me desenvuelvo "bien" así que no fue difícil iniciarme en el MPLAB y el compilador, realice un par de brogramas básicos para cambiar el estado de los pines de determinado puerto en función de la temporizador TMR0. Bueno hasta aquí es lo que eh visto. Pero ahora que debería empezar?. Estaré muy agradecido si me orientan en este asunto. Saludos    :mrgreen::mrgreen:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Sugerencia de temario para aprender PICS
« Respuesta #1 en: 06 de Agosto de 2017, 11:47:12 »
En si de todos los integrados que puedas usar, sean PIC/ARM/AVRs etc, cuando necesites siempre vas a buscar lo que necesites. Ejemplo si necesito 2 UART entonces vas a buscar un micro con eso.

La programacion la tenes clara entonces no hay problema, no de donde provengas pero solo tenes que recordar que en un micro las memorias son mas limitadas y la capacidad de calculo tambien lo es. Al comienzo de un proyecto es simplemente hacerlo como se pueda, si luego se necesita se optimiza alguna que otra parte ( A no ser que sea mas simple directamente conseguir un mejor micro).

De aca en adelante es interiorizarte en lo que son los modulos, por ejemplo ya viste como se manejan los puertos. O el timer0, la idea es que entiendas como funciona mas que simplemente hacerlo funcionar, tenes un esquema que te indica el camino del reloj y desde donde pueden venir los pulsos ( externos, oscilador del Tmr si es que posee etc)

Esos 2 modulos lo consideraria lo "basico" de la progrmacion micro, solo hay una cosa mas que tenes que aprender para cumplir con cualquier cosa que se te cruce. Las interrupciones.
Primero entender que son, que te permiten y que hace el micro para atender una interrupcion, sabiendo estas cosas entenderas que uno no debe poner un delay dentro de una interrupcion por ejemplo. Y con esto finalizarias lo basico.
Podrias buscar sobre SPI/UART para ver como son las formas de onda y como funcionan, como para tener una idea principal

Luego a partir de aca va a depender de que pienses hacer con el micro. Supongamos quisieras multiplexar una salida con un shift-register, Y podes hacerlo de 2 formas, vas a notar que en los datasheet no dice nada de SPI en este shif-register, pero si observas la forma de onda es de un SPI, asi que podes hacer un SPI por software o usas el SPI por hardware.

A medida que avanzan los micros mas modulos tienen, asi que una pequeña leida aunque sea solo la parte introductoria del modulo, te permite saber que hace, entonces cuando necesites hacer una cosa ya tenes varias "herramientas" a tu disposicion y solo te queda saber donde ponerlas. Un modulo que te recomiendo que veas es el CCP. Y algunas utilidades que se me ocurren son:

Capture: Medida de ancho de pulso.
Compare: Generar interrupciones mas precisas que con el timer solo y recargandolo.
PWM: Hace un DIM de una LED.

De aca en adelantesabeindo que tenes en tus micros, solo necesitas un proyecto que debas hacer e intentar usar los modulos para que te faciliten la vida o ayudarte a realizar lo que estas buscando.

Desconectado 8bits

  • PIC10
  • *
  • Mensajes: 13
Re:Sugerencia de temario para aprender PICS
« Respuesta #2 en: 06 de Agosto de 2017, 14:20:49 »
Buen día KILLERJEC, gracias por tu respuesta. Bien entonces por lo que me recomiendas he investigado un poco para armar este pequeño plan de estudio, tambien para cada tema quiero hacer un mini proyecto en donde aplique el tema en cuestión, que opinas:

-I/O pins: Control de Led 16X2
-Interrupciones: Internas y externas (Aqui no se me ocurre en que aplicarlas)
-ADC: leer algunos sensores y modificar los estados de los puertos I/O, en función de algún valor deseado, ejemplo
-Generación de PWM: Controlar la velocidad de un motor CC, Motor a pasos y un servo
-Comunicación Serie UART: Comunicación Serie con la PC usando Putty
-Comunicación SPI: Controlar lector SD

Pues esto es lo que sugiero para mi entrenamiento, me gustaría saber tu opinión o la de algún otro forero.
Nota: ahora que me acuerdo aprovecho aquí para plantear una duda que tengo, hasta ahora en los programas que he realizado, yo solo declaro en mi código los bits de configuración con los que voy a trabajar y los que se usar, hasta el momento son los que definen el modo de trabajo y el prescaler, pero, ¿que pasa con los demás, están des-habilitados por defecto?, o ¿debería yo indicarlos en mi fichero, e indicar que estarán des-habilitados?.

Saludos a la comunidad

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Sugerencia de temario para aprender PICS
« Respuesta #3 en: 06 de Agosto de 2017, 15:36:40 »
Citar
-I/O pins: Control de Led 16X2
-Interrupciones: Internas y externas (Aqui no se me ocurre en que aplicarlas)
-ADC: leer algunos sensores y modificar los estados de los puertos I/O, en función de algún valor deseado, ejemplo
-Generación de PWM: Controlar la velocidad de un motor CC, Motor a pasos y un servo
-Comunicación Serie UART: Comunicación Serie con la PC usando Putty
-Comunicación SPI: Controlar lector SD


Pienso que la idea es que sepas usar el modulo, asi que iria a algo mas simple y no complicandola con la electronica, Me refiero a que aunque no sea tan visible como el motor podrias simplificarlo para que sea mas simple. Entonces mis ideas van a apuntar a eso.

I/O pins - Simple, leds + botones para leer/escribir el puerto, no tiene ningun secreto y que seguramente ya lo hiciste, hacer aunque sea 1 entrada y 2 salida ya tendrias una idea de como manejar los puertos. Leer un boton, preocuparse por el rebote del boton. Suponete algo bien simple, cada ves que presionas una salida se alterna, es decir pasa de 1 a 0. Y verificar que sea lo que hagas, ejemplo tener presionado el boton no cambie el comportamiento que deberia tener. Tambien al MISMO tiempo deberias tener otra salida que cambie cada medio segundo por ejemplo.
Timer - Usar un timer para que cambie el estado de una salida, calcular el valor que debe tener el timer para lograrlo, verificar que el tiempo sea el correcto. Cuando calcules seguramente vas a darte cuenta que tenes que recargar el Timer cada ves que inicia.

Interrupciones - Aca tenemos 2 casos:
- Externas, podemos usar el mismo ejemplo que el de I/O, y usamos RB0, esta entrada para el boton permita que sea por flanco, lo cual primero te llevaria a usar la interrupcion para hacer la misma operacion que antes ( cambiar el estado de la salida del primer led ) mientras que en tu funcion principal solo cambias continuamente el del 2do led, para que veas como se simplifica la operacion.
 Tambien en las externas, deberias usar RB4 a RB7 , ya que estas son distintas a la del RB0, estas son por nivel, es decir que si la entrada cambia, sea a 1 o a 0, ya entraria a la interrupcion.
- Internas, Podemos retomar el ejemplo del Timer, nomas que esta ves nuestro while del main no va a tener nada y todo va a realizarse desde la interrupcion.

ADC - Podes usar sensores, pero tambien podrias  usar un potenciometro, un terminal a los 5V, el otro terminal al GND y el punto medio con una pequeña resistencia de 1K en serie al pin del PIC. Como mostrar el resultado, lo mas simple es usar leds. Suponete que el ADC te de como resultado 10 bits, lo rotas unas cuentas veces, por ejemplo 6 veces y usas los 4 bits de mayor peso para ponerlos en alguna salida.

CCP
Compare - Volver a realizar el ejemplo del Timer, solo que esta ves vas a intentar usar el CCP para que compare con el TMR1, vas a notar que si lo configuras correctamente, el CCP resetea por si solo el Timer1. Lo cual la interrupcion se simplifica y el error se reduce aun mas.
PWM - Usar 2 botones que al presionar auemnte o disminuya 10% del duty por ejemplo. Ya para este momento sabrias como usar las entradas. Como salida un led. De esa forma podes verlo y jugar con ello. Si luego queres ir mas adelante podrias usar un motor CC, recorda que la velocidad del motor DC depende de la carga.

PLUS: Los motores paso a paso los vas a manejar con un driver el cual le podes dar pulsos o si lo controlas un poco mas directo usarias una tabla y las I/O. Un servo es una buena idea para usar el PWM, tambien podria llegar el momento en que necesites hacer un PWM por software, debido a que muchas veces la frecuencia del oscilador hace que no puedas crear PWM de frecuencias bajas.

UART - Creo que es la mejor forma, si podes conseguirte un conversor TTL-USB se simplifica aun mas.

SPI - El lector SD tendrias que complicarte en la forma de inicializacion de la SD, por eso nombre usar un shift-register, como un 74xx595, que podes controlarlo con el SPI y podes ver la salida con leds, si usas un Timer por ejemplo podrias hacer que cada cierto tiempo cambie la salida, aunque sea incrementando el valor de una variable y enviando esa variable. Y es un integrado que no cuesta demasiado. Al Timer lo podes haces por interrupcion o en el main, eso queda a tu criterio.

--------------------------------------------------------

Citar
Nota: ahora que me acuerdo aprovecho aquí para plantear una duda que tengo, hasta ahora en los programas que he realizado, yo solo declaro en mi código los bits de configuración con los que voy a trabajar y los que se usar, hasta el momento son los que definen el modo de trabajo y el prescaler, pero, ¿que pasa con los demás, están des-habilitados por defecto?, o ¿debería yo indicarlos en mi fichero, e indicar que estarán des-habilitados?.

El MPLAB X, tiene un generador de bits de configuración ( En la parte de abajo creo que dice Configuration bits), el cual seleccionas desde una lista y presionas generar el cual te da el codigo para que copies y pegues. Como sugerencia deberías siempre definir todos los bits de configuración. Y si no te aparece en Windows sino me equivoco esta, esta dentro de otra opcion mas.

Despues si queres complicarte con cosas mas grandes lo haces, pero creo que de nada sirve complicarse con varias cosas que no estas acostumbrado, a solo complicarte la vida con una sola. Por eso mis ejemplos como ya dije buscan simplificar la forma de hacerlo, por mas que sean "repetitivos" o que no sean de gran satisfaccion verlos funcionar, pero tenes una salida la cual podes ver y que actue en consecuencia.

Desconectado 8bits

  • PIC10
  • *
  • Mensajes: 13
Re:Sugerencia de temario para aprender PICS
« Respuesta #4 en: 06 de Agosto de 2017, 16:08:28 »
Me parece muy buena tu propuesta, así le haré mi objetivo es aprender a usar correctamente los microcontroladores (iniciando con este), considero que puedo ir avanzando progresivamente y las practicas que sugieres pueden hacerme enfocar en saber como funciona correctamente cada periférico. Agradezco tu ayuda nuevamente.