DTForuM


BIENVENIDO AL NUEVO DTForuM -- Ya están habilitadas las descargas -- Si tienes alguna duda sobre el uso, puedes publicar tu mensaje en MENSAJES PARA EL STAFF ... .... D T F o r u M .... El de siempre, pero mejor !! 
..:: DTForuM.INFO ::.. Manuales de Servicio y toda la Información técnica - Uniendo a los amantes de la electrónica de todo el mundo. From here, to the world !!! 
..:: DTForuM.INFO ::.. Antes de pedir información, búsquela presionando el botón BUSCAR.

..:: DTForuM.INFO ::.. Punto de reunión de amantes de la electrónica.
DESTACADOS, la zona con lo mejor de DTForuM.INFO  ( Hacé click ) ..:: DTForuM.INFO ::.. ..:: 2005- 2006- 2007- 2008- 2009-2010- 2011- 2012- 2013- 2014- 2015- 2016- 2017-2018 ::..
..:: DTForuM.INFO ::.. Uniendo Técnicos desde hace más de 13 años !! ...::DTForuM.INFO::... ...:::La mayor Comunidad de intercambio de Información Técnica:::... El de siempre, pero mejor !!

AllDataSheets

Buscar Datasheet
Buscar en AllDatasheet.com

CuentaDigital

Web Amiga

Clase Nro 4 de C para PICs

Visitante · 42 · 24863

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

hector27

  • Visitante
Respuesta #27 on: mayo 25, 2009, 15:31:39 pm
Me falto las aclaraciones sobre el programa. Van como comentarios:

//incluyo las librerías estandar
#include <stdio.h>
#include <stdlib.h>
//incluyo la libreria con los retardos
#include "delays.h"

//funcion principal
void main(void)
{
//con este registro configuro los terminales del puerto B, si pongo 1 es entrada y si pongo el bit a 0 es salida.
//En nuestro cado todos los bits, y por lo tanto todos los terminales son salidas.
TRISB = 0b00000000;

//Idem para el puerto A, pero en este caso los bits 0, 1 y 2 del puerto A son entradas y el resto salidas,
//por lo tanto los terminales RA0, RA1 y RA2 son entradas.
TRISA = 0b00000111;

/Idem para el puerto C, pero en este caso el bit 7 es salida y el resto son entradas
TRISC = 0b01111111;
//el bit 7 (GIE) del registro INTCON lo pongo en 0, con ello no habilito las interrupciones.
INTCONbits.GIE=0;
//Aqui deshabilito los comparadores (para que el puerto A funcione como entrada o salida, y no como comparadores)
CMCON = 0b00000111;
//apago la referencia de tension de los comparadores y la pongo a 0.
CVRCON= 0b00000000;
//pongo todo el puerto B a 1 (salidas del puerto B a +5V), y con ello apago los LEDs
PORTB=0b11111111;

//loop de trabajo
while(1){
//hago que el BIT 0 del puerto B cambie de estado
PORTB=PORTB^0b00000001;
//retardo de un segundo
DelayS();
}
}

//funcion de retardo de un segundo, que usa la funcion de la libreria de retardo de 250 mS (la llama 4 veces,
//por lo cual el retardo es de 250ms x 4 = 1000ms = 1 segundo
void DelayS(void)
{
DelayS4();
DelayS4();
DelayS4();
DelayS4();
}


hector27

  • Visitante
Respuesta #26 on: mayo 25, 2009, 12:24:42 pm
Estaré ausente por razones de trabajo durante lo que queda de la semana, asi que los dejaré en paz por unos dias. Si pueden practiquen modificando el programa, para encender otro led o conjuntos de LED.
Saludos!
Héctor


hector27

  • Visitante
Respuesta #25 on: mayo 25, 2009, 12:22:01 pm
Seguimos:

Las siguientes lineas:
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
estan referidas a la proteccion de lectura de la memoria de codigo, para diferentes bloques de la misma, por ejemplo si se CP0 está en ON no podria leerse externamente la memoria de programa desde la direccion 0x0800 a 0x1FFF. En el curso no tememos que alguien nos copie el codigo, por lo cual no usamos esa caracteristica.

Las lineas:
#pragma config CPB = OFF
#pragma config CPD = OFF
Actuan en forma similar a las anteriores, pero referidas a la memoria EEPROM de datos.


Las siguientes lineas:
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
Nos permiten, si entan en ON, protejer los distintos bloques de la memoria de programa contra escritura
No lo usamos en nuestros proyectos, por lo cual estan OFF

Las lineas:
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
Actuan en forma similar a las anteriores, pero referidas a la memoria EEPROM de datos.

Las siguientes lineas:
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
Si las colocamos en ON, protegen la lectura de los diferentes bloques de la memoria de programa, pero no la lectura externa, como en el caso de CP0, sino que evita la lectura mediante el uso de tablas desde otro bloque.

Esta linea, actua en forma similar a las anteriores, pero referidas a la memoria EEPROM de datos.
#pragma config EBTRB = OFF


Desconectado jjose

  • GOLD MEMBER
  • *
    • Mensajes: 825
    • DT$ 675
Respuesta #24 on: mayo 24, 2009, 22:43:27 pm
CARO BOTICARIO

increíble como nuestras notas se cruzaron en el aire.

te agradezco la disposición y buena voluntad, mas tener dos modelos de placa te criaría una enorme complicación con el material del curso.

Mas también entiendo que si ya hay muchas placas montadas, seria un problema colocar um cambio en ellas..

Nuevamente, te agradezco

abcs


jjose
 


hector27

  • Visitante
Respuesta #23 on: mayo 24, 2009, 17:29:51 pm
Seguimos:

En esta linea:
#pragma config LPT1OSC = OFF
se nos permite configurar el consumo del oscilador para el timer 1, si esta en ON es el modo de bajo consumo, apto para aplicaciones portatiles a baterias, pero se pierde algo de estabilidad. En nuestro proyecto no usamos baterias, no usamos el oscilador para el timer 1 y tampoco usamos el timer 1. Lo ponemos OFF.

En esta linea:
#pragma config PBADEN = OFF
es posible configurar mas entradas para el ADC, en el puerto B, bits 0 a 4,  (las entradas normales del ADC estan en el puerto A)
Como no usamos el ADC y necesitamos el puerto B para los LEDs, esa caracteristica esta en OFF


En esta linea:
#pragma config CCP2MX = ON
Se nos permite configurar si el modulador de ancho de pulso sale por el puerto B o por el puerto C, debe estar en ON para que salga por el puerto C, que es nuestro caso, pues el puerto B lo usamos para los LEDs.

En esta linea:
#pragma config STVREN = OFF
nos permite que si hay un error de programa y hacemos desborde del stack el sistema haga RESET (se reinicie). Este micro tiene un stack de 31 niveles. Nuestro proyecto no utiliza esta caracteristica y esta en off.

En esta linea
#pragma config LVP = OFF
se nos permite usar baja tension para programar el micro usando la programacion en el mismo circuito. Nuestro proyecto no utiliza esa caracteristica y esta OFF

En esta linea
//#pragma config ICPRT = OFF
se permitiria tener un puerto dedicado para la programación en el circuito. Solo está disponible para PICs de esta familia de 44 pines, que no es nuestro caso y es por ello que esta comentada y no se usa. De otra manera el compilador dará un error.

En esta linea
#pragma config XINST = OFF
Habilitamos unas intrucciones extras que tienen estos PICs, en nuestro caso no lo usamos. De llegar a usarlos hay que indicarlo en la configuracion del compilador.

En esta linea
#pragma config DEBUG = OFF
se nos permite que los bits 6 y 7 del puerto B se utilicen para la programacion en el circuito, nosotros no usamos esa caracteristica y necesitamos el puerto B completo, por lo cual está en OFF.


Desconectado jjose

  • GOLD MEMBER
  • *
    • Mensajes: 825
    • DT$ 675
Respuesta #22 on: mayo 24, 2009, 13:51:39 pm
Hola Boticario

Por favor, mas una sugestión para la placa, que olvidé de colocar en la nota anterior

Del modo como están conectados los LED’s D1 a D8, estos irán a encender cuando la línea del PIC este negativa,  lo que siempre se acepta como línea en OFF.

Sugiero cambiar para la disposición en el anexo, donde los LED’s encenderán cuando la línea este en VCC.

Grande abrazo

jjose





hector27

  • Visitante
Respuesta #21 on: mayo 24, 2009, 13:50:38 pm
Estimado José
Tu tienes la libertad de hacer los cambios que quieras; pero yo ya no puedo hacerlo, tengo armada y funcionando la placa, al igual que otros usuarios que ya han hecho la placa y adquirido ese chip. El curso seguirá con la placa como está hecha.
Si tu deseas mejorar la placa, no me opongo, e incluso haré versiones extras de software para tu placa si así lo deseas; pero te repito, el curso seguirá con la placa original.
Saludos!
Héctor


Desconectado jjose

  • GOLD MEMBER
  • *
    • Mensajes: 825
    • DT$ 675
Respuesta #20 on: mayo 24, 2009, 01:29:33 am

Caro Boticario

Llegue a la triste conclusión que para reservar las líneas RB6 y  RB7 para utilización exclusiva para ICSP, y mantener todas  que tu utilizaste en la placa actual se va a hacer muy complicado con el 2550 o equivalente.

Veo algunas salidas

1> la que mas me gusta es saltar de una vez al 18F4550, y quedarnos con una libertad muy grande de líneas, para lo que ya planeaste, como para alguna expansión futura.
2> eliminar algunas de las líneas actuales   Usar el LCD  solamente para escribir nos permitiría salvar una línea, precisaríamos  eliminar mas una.

Una candidata seria RA2, pin 4, que creo no pasa de una entrada que puede tener 0V o VCC.  Como ya se tiene RA1, pin 3 que a través del potenciómetro puede colocar cualquier voltaje entre VCC y 0V, tal vez se podría eliminar el jumper en RA2 y con esto liberamos mas una línea.

Quedaríamos con las siguientes dos limitaciones

LCD solo permite escritura
El jumper VVC / 0 del pin RA2 no existiría mas

Que te parece le camino

Estoy en la mitad del diseño de la placa, porque como uso Multisim / Ultiboard tuve que empezar de cero en la colocación de los componentes, ya que el diagrama estoy respetando el tuyo, excepto en el ICSP.
Así que tomes la decisión podré continuar.

Grande abrazo

 abrazoo
jjose


hector27

  • Visitante
Respuesta #19 on: mayo 23, 2009, 18:19:31 pm
Seguimos otro poco:
En la linea:

#pragma config WDT = OFF


definimos que no utilizamos el watch dog timer (perro guardian)

Es circuito, con el que cuentan, creo, todos los PIC, es un temporizador que si no se inicializa periodicamente, produce un reset del microcontrolador. Sirve para evitar "cuelgues". Obviamente si lo utilizamos, el programa que realicemos debe tener en cuenta su uso.
En nuestro proyecto no se utiliza.

La linea siguiente indica el factor de division que tiene el preescales para el perro guardian. Divide el reloj/4 por ese factor, y ese seria el tiempo limite para inicializar el watch dog y evitar que resetee. En nuestro proyecto esta fijado a ese valor pero no lo utilizamos.

#pragma config WDTPS = 32768


En esta linea:

#pragma config MCLRE = OFF

Indicamo que no utilizamos el terminal de reset para esa funcion (master clear), sino como un puerto mas; por eso esta en OFF.


hector27

  • Visitante
Respuesta #18 on: mayo 23, 2009, 15:10:55 pm
Si, seria util.


Desconectado jjose

  • GOLD MEMBER
  • *
    • Mensajes: 825
    • DT$ 675
Respuesta #17 on: mayo 23, 2009, 13:34:13 pm
Hi Boticario

mas una vez gracias por tus respuestas y material.

si no estoy equivocado en mi análisis, creo que esta faltando un conector que seria muy útil en la placa.
Seria un conector para poder entrar con algún programador/debugger tipo PICKIT 2 o ICD2, como te muestro en el anexo.

Grande abrazo
 abrazoo abrazoo
jjose


hector27

  • Visitante
Respuesta #16 on: mayo 22, 2009, 19:35:09 pm
Seguimos con la configuración del PIC:

En esta linea:

#pragma config FCMEN = OFF

configuramos el PIC para que no utilice el motitor de reloj a prueba de fallas (FCMEN), Este PIC puede monitorear la señal del oscilador de la CPU (cuando es externo) y si falla, pasar a utilizar un reloj interno. En nuestro proyecto no se usa y por ello está OFF

En esta otra linea:

#pragma config IESO = OFF

Configuramos el PIC para que no utilice una la caracteristica de arranque rapido, utilizando al inicio el clock interno, y una vez que el oscilador externo (con cristal) esta disponible, pasar a usarlo. En nuestro proyecto no se usa y por ello está OFF.

En esta otra linea:

#pragma config PWRT = ON

indicamos que si se utiliza un retardo en el inicio (o reset) para darle tiempo a que el sistema se estabilice. Nuestro proyecto lo utiliza y por ello está ON.


En esta otra linea:

#pragma config BOR = ON

Configuramos el PIC para que haga un reset si la tensión de alimentacion falla (por baja tensión, a los fines de evitar "cuelgues". Nuestro proyecto lo utiliza y por ello está ON.

En esta otra linea:

#pragma config BORV = 1

indicamos el valor de tensión en el que actua el parametro anterior (BOR), con la posibilidad de usar:
0= 4,6 V tipico
1= 4,3 V tipico
2= 2,8 V tipico
3= 2,1 V tipico

En nuestro proyecto usamos 4,3 voltios y por ello se indica 1.


En esta otra linea:

#pragma config VREGEN = OFF

Indicamos que no se utiliza la fuente de alimentación interna de 3,3V para el puerto USB.
Este PIC cuenta con un regulador interno de 3,3V para el puerto USB (que por especificacion de la norma debe trabajar a dicha tensión)
Como en nuestro proyecto no usamos el puerto USB, no usamos este regulador.
Si lo utilizaramos esa tensión podria medirse en el terminal 14 del PIC.





hector27

  • Visitante
Respuesta #15 on: mayo 22, 2009, 19:01:12 pm
en un archivo tienes el esquematico en orcad y el PCB en protel 94; en el otro archivo todo en protel 98


Desconectado jjose

  • GOLD MEMBER
  • *
    • Mensajes: 825
    • DT$ 675
Respuesta #14 on: mayo 22, 2009, 17:03:19 pm
Profe
yo de nuevo.

Estuve viendo la placa, y me gustaría cambiar algunas posiciones físicas, sin comenzar desde cero.
Principal razón es colocar un zócalo ZIF  para poder cambiar PIC’s sin esfuerzo para los pinos, y que sirva para dip 28Pdip  y  28SPdip.  Y hasta talvez colocar un zócalo de 40 pinos en paralelo.

Seria posible tener los archivos fuente.???

Si no hay problemas, que  programa usaste para diseñar la placa, MULTISSIM / ULTIBOARD   ¿????   O cual otro????

Claro que me comprometo a colocar los archivos finales a disposición para el resto de tus alumnos.



Desconectado jjose

  • GOLD MEMBER
  • *
    • Mensajes: 825
    • DT$ 675
Respuesta #13 on: mayo 22, 2009, 10:41:45 am
muchas gracias

muy buen curso profe.
tienes una excelente  didáctica

van dt's
 abrazoo
jjose


Tags: