Mostrando entradas con la etiqueta 16F876A. Mostrar todas las entradas
Mostrando entradas con la etiqueta 16F876A. Mostrar todas las entradas

jueves, 31 de octubre de 2013

Base oruga Tamiya track & whell (Prueba 2)

Muy buenas a todos y todas!!!

He estado probando diferentes configuraciones para el set de ruedas oruga de Tamiya.

Por el momento para hacer las pruebas me quedo con la típica configuración de un tanque.

Para la alimentación de los motores, como son pequeños y consumen poco, voy a utilizar un driver L293D.

También utilizare unos de los dos canales HPWM que tiene el 16F876A para controlar la velocidad.



Al driver L293D le he puesto un ventilador que ahora mismo va fijo, pero cuando el proyecto este más avanzado solo se encendera cuando el Driver se caliente, esto lo haré con un sensor de temperatura Lm35.



Los encargados de la transmisión de datos serán módulos de radio frecuencia de 433mhz de la marca Cebek. Estos módulos solo permiten la comunicación en una dirección.

Aun no se la distancia a la que es capaz de transmitir y recibir, pero imagino que, al menos, 20 metros.

Todo va controlado con un microcontrolador 16F876A con bootloader que es el "cerebro" que se encarga de recibir los datos a trabes del puerto RC0.

El control de la velocidad usaremos el HPWM situado en el RC2 (CCP1).

Los 4 movimientos posibles están situados en los puertos:

  • RB4 Avance motor 1.
  • RB5 Retroceso motor 1,
  • RB6 Avance motor 2.
  • RB7 Retroceso motor 2.


Todo el conjunto va alimentado con una batería de 9,6V, pero también puede funcionar con una batería reciclada de 7,4V con celdas 18650.

Para enviar los datos al tanque estoy utilizando un convertidor USB-RS232 y un integrado MAX232 conectado a el transmisor de RF.

Y el software para los movimientos he rescatado un programa que hice hace tiempo llamado Peyutsubot 2.5 al cual le he encontrado un par de fallos y estoy intentando subsanar, además de incluir el control de PWM.

Iré poniendo avances, saludos!!!

Otros artículos sobre radio frecuencia que te pueden interesar:

jueves, 18 de julio de 2013

Enviar datos desde PIC a Visual Basic 6 a través del puerto serie

Microchip Logo

Muy Buenas a todos y todas!!!

Después de actualizar a la versión 1.1 del programa CDLA, ahora le toca el turno al programa en Visual Basic 6 para controlar las locomotoras desde el PC.

Este programa ya transmitía datos desde el PC al PIC, ahora lo que quiero que haga es que lea el control manual y muestre en la pantalla del ordenador los datos seriales que envía el microcontrolador.

Para esto he utilizado el objeto MSCOMM1 que ya esta incluido en Visual Basic 6 con la instrucción "MScomm1.input".

Intentare explicarlo un poco y espero que sea comprensible:

Enviando datos desde PIC a VB6

Los datos seriales que se mandan desde el microcontrolador PIC y son transmitidos a una velocidad de 9600 baudios y cada variable va separada por "," terminando el mensaje con los carácteres "AK":


include "modedefs.bas"   'Activa el modo de comunicación

Masterout var portc.6

Serout portb.1, N9600, [#variable1,#variable2,#variable3,"AK"]

* La variable 1 es una variable tipo BYTE que va desde 0 a 255
* La variable 2 es una variable tipo BYTE que va desde 1 a 8
* La variable 3 es una variable tipo BIT que va desde 0 a 1


Con serialComunicator de Mecanique nos mostrará en pantalla los datos en el siguiente formato:

010AK 010AK 010AK.... (Variable1 = 0, Variable2 =1, Variable3 =0, AK)

12831AK 12831AK 12831AK... (Variable1 = 128, Variable2 =,3 Variable3 =1, AK)

Esta es la trama de datos que se envían desde el microcontrolador PIC y que tendremos que decodificar en VB6.


Obtención de datos en VB6

Ahora, ¿como extraemos de esa maraña de caracteres los datos que nos interesan?

Para obtener los datos tenemos la función .Input de MScomm. con el adquirimos los datos del cual luego iremos desgranando dato por dato.

La rutina que vamos a utilizar esta dentro de un timer como podemos ver en el siguiente ejemplo:


Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim dataIn, tdataIn, Vel, total As String
Dim C, T, N, X As Integer   'cantidad, tipo, numero, valor

Private Sub Command1_Click()
  Timer1.Enabled = True
  MSComm1.PortOpen = True
  Command1.Enabled = False
  Command2.Enabled = True
End Sub

Private Sub Command2_Click()
  Command1.Enabled = True
  Command2.Enabled = False
  Timer1.Enabled = False
  MSComm1.PortOpen = False
End Sub

Private Sub Form_Load()
  Timer1.Enabled = False
  Command1.Enabled = True
  Command2.Enabled = False
End Sub

Private Sub Timer1_Timer()

  dataIn = MSComm1.Input
  If dataIn <> "" Then ' Si no es un texto vacio entonces...
    tdataIn = Len(dataIn)
    
    If tdataIn = 7 And Right(dataIn, 2) = "AK" Then
      Text2.Text = (Right(dataIn, 2))
      Text1.Text = dataIn
    
      Vel = Mid$(dataIn, 1, 3)
      total = ""
      For X = 1 To Len(Vel)
        If InStr("0123456789", Mid$(Vel, X, 1)) Then
          total = total & Mid(Vel, X, 1)
          N = total
        End If
      Next X
    
      dataIn = (Right(dataIn, 4))
      C = Left(dataIn, 1)
    
      dataIn = Right(dataIn, 3)
      T = Left(dataIn, 1)
    
      Text3.Text = C
      Text4.Text = T
      Text5.Text = N
    End If
  End If
End Sub


Representación de los datos seriales en VB6

  • Text1: Lectura de toda la trama de datos seriales enviados por el PIC.
  • Text2: Lectura de los caracteres de confirmación (AK).
  • Text3: Lectura de la Variable2
  • Text4: Lectura de la Variable3
  • Text5: Lectura de la Variable1


El tema de como sacar el los números de una cadena, viene muy bien explicado y con varios ejemplos en este magnifico foro de Visual Basic.

DescargarEjemplo en Visual Basic para comunicación serial entre PIC y PC desde GitHub.

Espero que les sea de ayuda para entender como comunicar un microcontrolador PIC 16F628 o 16F876A con un sistema Visual Basic 6

Otros artículos sobre Visual Basic 6.0 que te pueden interesar:

Saludos a todos y todas!!!


martes, 25 de diciembre de 2012

Central analógica para maquetas de trenes con PIC 16F876A (Parte 2)

Con la ampliación de la maqueta, me he metido de lleno a mejorar el tema de la electrónica y aprovechar al máximo los micro controladores, y se me ocurrió, que podría hacer algo parecido al sistema DCC pero en analógico. Para mi esto significa tener una central (Master) y los demás dispositivos auxiliares (Slaves).

De esta manera espero poder tener un control mucho más personalizado para cada circuito.

Nunca había caído en la cuenta de poder usar arrays para mejorar el código y estoy bastante contento ya que con ellos he podido resumir el código y hacerlo más compacto y espero que eficiente.

La velocidad esta controlada por el potenciómetro, que es común para todas las locomotora. Bueno no es lo más correcto llamarlas locomotoras, en realidad se refiere a cada circuito, ya que al ser analógico no alimento las locomotoras como en el sistema DCC, si no las vías.

Para entrar en el modo manual se pulsa 1, ya que en el montaje final la pantalla ira sobre el teclado. El modo PC aun no esta terminado así que ahora mismo no funciona.


Para seleccionar el circuito pulsaremos 1, 2 o 3 . Una vez dentro, aparecerá el número de circuito, la velocidad, y la dirección en la que va la locomotora situada en ese circuito. Para salir de ese circuito y volver al menú principal hay que pulsar "#"


martes, 18 de diciembre de 2012

Comunicación multipunto entre PICs usando MAX485 (RS-485)

PIC 16F876a 20MHz

Bienvenidos a todos y todas!!!

Para la maqueta he decidido cambiar el sistema que utilizo en la comunicación entre PIC‘s.

Antes lo hacia directamente PIC a PIC, pero se me quedaba corto para poder añadir más microcontroladores.

Primero mire si se podía con un MAX232, pero tiene el problema de no ser multipunto, es decir que no se pueden conectar más de 2 microcontroladores así que no servía para mi propósito de poder crear módulo independientes.

Investigando un poco encontré el MAX485, que se adapta mejor al tipo de configuración que se utilizará finalmente.

Después de ver algunos ejemplos de libros y la web, he hecho este pequeño programa de comunicaciones con MAX485. El programa es un bucle que comunica un pic con el otro haciendo que se enciendan la luz verde cuando recibe el dato.

Si bien este programa es para 2 micros, la idea seria ir añadiendo más, (el MAX485 admite hasta 32 dispositivos). El mayor problema que estoy teniendo hasta ahora es el tema de la sincronización, ya que para que funcione, cuando enviamos un dato, tenemos que poner el control bajo, es decir, el pin que hayamos seleccionado tiene que estar en LOW para poder recibir y el HIGH para poder transmitir.

Código para microcontrolador principal:


'PRINCIPAL

define LOADER_USED 1   
DEFINE OSC 4
include "modedefs.bas"   'Activa el modo de comunicación
ADCON1=6 

rojo    var portb.1
verde   var portb.0 
control var portc.0
entrada var portc.6
salida  var portc.7 


dato var byte
repet var byte

'para saber que el pic esta encendido
high rojo : high verde
pause 1000
low rojo : low verde

Estado:
  low control
  serin entrada,T2400,dato
  if dato = "E" then 
    high verde
    pause 250
    low verde
    pause 250
    goto enviando
  endif
goto estado

enviando:
  for repet = 1 to 10
    high control
    serout salida,T2400, ["D"]
  next
  high rojo
  pause 250
  low rojo
goto estado

end

Código para microcontrolador secundario:


define LOADER_USED 1   
DEFINE OSC 4
include "modedefs.bas"   'Activa el modo de comunicación
ADCON1=6 

rojo    var portb.1
verde   var portb.0 
control var portc.0
entrada var portc.7
salida  var portc.6 

cnt var bit 
dato var byte
repet var byte

'para saber que el pic esta encendido
high rojo : high verde
pause 1000
low rojo : low verde


Enviando:
  for repet = 1 to 10
    high control
    serout salida,t2400, ["E"]
  next
  high rojo
  pause 250
  low rojo

Estado:
  low control
  serin entrada,T2400,dato
  if dato = "D" then 
    high verde
    pause 250
    low verde
    pause 250
    goto Enviando
  endif
goto Estado

end


Por otro lado también estoy barajando la posibilidad de utilizar HSERIN y HSEROUT, pero eso sera dentro de un tiempo ya que ahora estoy un poco liado con la navidad y el trabajo.

También me gustaría poder hacer un ejemplo con más microcontroladores, pero como he comentado tendrá que ser un poco más adelante.

Saludos a todos y todas y felices fiestas!!!

lunes, 21 de mayo de 2012

Cambiando a bootloader tinybld198

Después de llevar utilizando un tiempo el bootloader Screamer-v1.4, la verdad me fue muy bien hasta que comencé a trabajar con una pantalla LCD 16X02.

En ese momento empezó a darme un error y no había manera de poder pasar al Pic el programa mediante este bootloader. Decidí buscar otro... y lo encontré!!! Se llama Tiny PIC bootloader.

¿Qué es Tiny PIC bootloader?

Es un pequeño programa que se graba en la memoria del PIC (usando un programador convencional una sola vez) y permite programar el PIC únicamente mediante un cable serial/USB, sin hardware adicional.

Utiliza elprotocolo de comunicación UART Serial a 1200-19200 baudios y los pines RX/TX + control de reset (generalmente RB1 o RB5).

Solución al problema

Pues bien solo con instalar este bootloader el error desaparece, bueno realmente no desaparece del todo. Tinybootloader detecta este problema y lo repara. si, así de fácil.

El error tiene algo que ver con GOTO que al compilarlo se pone donde no debe, o eso entendí yo cuando estuve buscando información para solucionar el problema.



Ventajas Tiny PIC bootloader

  • ✅ Programación rápida sin sacar el PIC del circuito.

  • ✅ Ideal para prototipos y pruebas iterativas.

  • ✅ Posibilidad de firmware remoto via modem/red.

⚠️ Limitaciones:

  • Ocupa memoria: Unos 200-500 bytes no disponibles para la aplicación

  • Velocidad: Más lento que programador hardware dedicado.

Por el momento voy a seguir utilizando Tiny PIC bootloader con el PIC 16f876A a 20Mhz aunque tengo que mirar la manera de hacerlo funcionar a 4Mhz, ya que tengo un par por ahí y me gustaría aprovecharlos también.

En la carpeta \picsource\ vienen los .hex para los diferentes microcontroladores.
Para el 16F876A a 20Mhz estoy utilizando el archivo tinybld_16F876A_20MHz.HEX con una velocidad de transmisión de 115200 Baudios y por el momento estoy muy contento con el resultado.

TinyBootloader lo puedes encontrar en la sección de descargas o en la pagina del autor, Claudiu Chiculita.


Saludos a todos y todas!!!

Los siguientes enlaces sobre microcontroladores te pueden interesar:

martes, 1 de mayo de 2012

Comunicación con MAX233 PC to PIC - PIC to PC

Buenas a todos y todas!!!

Siguiendo con mi maqueta ha llegado la hora de comunicar todos los módulos con el PC.

Para realizar la comunicación Full-duplex entre el microcontrolador y el ordenador hemos decidido usar un MAX 233.

La interfaz de comunicacion MAX233

El MAX233 es muy parecido al MAX232, pero no utiliza los condensadores, así que son menos componentes, y por tanto, menos probabilidad de fallo. Pero hay una diferencia entre estos dos integrados.

No comparten el número de patillas el MAX232 tiene 16 y el el MAX233 tiene 20 esto hace que no sea 100% compatible con el MAX232 sin un adaptador.

En el datasheet del MAX233 tenéis más información sobre lo que estoy comentando.



Circuito de interconexión con MAX233

El circuito para la interfaz de comunicaciones con el integrado MAX233 es el siguiente:



También he montado en algún otro el MAX232 y aunque con más componentes el resultado siempre ha sido muy bueno.

Saludos a todos y todas!!!

Otros artículos sobre programación con microcontroladores MicroChip que os pueden interesar:

viernes, 30 de marzo de 2012

Control locomotoras 16F876A modelismo ferroviario HO

Muy Buenas a todos!!!

Bien ya solo me queda un poco para terminar todo el conjunto de desvíos y controles para los 3 circuitos de la maqueta.

Ya solo faltaría el modulo de detección para, por ejemplo, paradas en caso de choque inminente, detención frente a el desvió, para ceder el paso a otra locomotora etc.

Supongo que este sera un poco más complicado que estos 2 últimos ya que sera el encargado de interconectar todo.

Bien hoy solo pongo una foto para que se vea como quedan todo el conjunto de circuitos. Espero organizarlo todo un poco mejor ya que hoy solo he tenido tiempo para unas pocas pruebas y todavía hay cosas que se pueden mejorar.


Por fin ya esta casi casi terminado, le he añadido un LCD 16x2 al conjunto del micro que controla los desvíos y el teclado.

Ahora puedo ver en la pantalla que desvíos (Dx) y que cruces (Cx), o significa circuito en su posición predeterminada y 1 si esta activado, el otro conjunto es para las velocidades de los 3 circuitos, en la imagen corresponden a el grupo de la derecha.

Las velocidades que son controladas por el otro microcontrolador aparecen reflejadas en LCD y las envío mediante la instrucción SEROUT a una velocidad de 9600.

Todo funciona correctamente, pero se puede mejorar, por ejemplo, haciendo que el LCD me indique la dirección en la que va cada circuito.

 

Bien por el momento esto es todo!!! Un saludo!!

sábado, 10 de marzo de 2012

16F876A ADC y HPWM

Muy buenas a todos y todas!!!

Buscando como controlar las locomotoras de la maqueta encontré como configurar la instrucción HPWM que tiene internamente el 16F876A.

¿Qué es HPWM?

HPWM es una instrucción que hacia tiempo que quería probar pero siempre me había dado fallos, eso unido a mi poca paciencia y tiempo...

Al final junto con un ejemplo que encontré en Todo PIC y revisando la ayuda de Microcode Studio, hice este pequeño programa para controlar la intensidad de 2 leds con los conversores analógicos.

Una de las ventajas que tiene es que se ejecuta en segundo plano así que puedes hacer otras cosas mientras que se ejecuta hpwm.

Una de las desventajas es que utiliza pines específicos del PIC llamados CCP, en el caso del 16F876A son 2 y están situados en los pines 12 y 13 (CCP2 y CCP1 respectivamente).

Para activar el HPWM en PBP se utilizan los siguientes DEFINE'S en la configuración inicial del programa:

DEFINE CCP1_REG PORTC ' Hpwm 1 pin port
DEFINE CCP1_BIT 2 ' Hpwm 1 pin bit
DEFINE CCP2_REG PORTC ' Hpwm 2 pin port
DEFINE CCP2_BIT 1 ' Hpwm 2 pin bit

Con esto se habilita el HPWM, y la instrucción es así:


HPWM Channel, Dutycycle, Frequency

  • Channel: Es el canal del CCP que estemos usando, 1 para CCP1 y 2 para CCP2
  • Dutycycle: pondremos la variable o el número que queramos para los ciclos que especifica el encendido / apagado en relación a la Frecuencia (Frequency).
    Con una variable Byte, 0 es totalmente apagado, 127 es la mitad de la onda y 255 seria la onda completa, en el caso del led, este brillara a su máxima potencia.
  • Frequency: estoy utilizando el valor de 255 aunque no lo tengo muy claro asi que lo mejor es que lo consulteis en el datasheet del mismo 16F876A

Ejemplo para el uso de HPWM


' Control HPWM con la lectura ADC del microcontrolador 16F876A
' Lee los potenciómetros y ajusta la intensidad de los leds conectados
' a los puertos  CCP1 y CCP2


define LOADER_USED 1  ' Para usar el bootloader del 16F876A

DEFINE OSC 4          ' Define la velocidad de reloj del microcontrolador


define ADC_BITS 10     ' Conversión A/D a 10 bits
Define ADC_CLOCK 3   
DEFINE ADC_SAMPLEUS 50 ' Tiempo de muestreo
DEFINE CCP1_REG PORTC  ' Hpwm 1 pin port
DEFINE CCP1_BIT 2      ' Hpwm 1 pin bit
DEFINE CCP2_REG PORTC  ' Hpwm 2 pin port
DEFINE CCP2_BIT 1      ' Hpwm 2 pin bit

' Variables para el dato
Dato1 var word       
Dato2 var word
Dato3 var word

dato1 = 0
dato2 = 0
dato3 = 0

TRISA = %11111111
TRISC = %00000000
portc = %00000000   

ADCON1 =%10000000

Pause 1000

Inicio:

  adcin 0, dato1
  dato1 = (dato1 / 4)
  hpwm 1, dato1, 250


  adcin 1, dato2
  dato2 = ( dato2 / 4)
  hpwm 2, dato2, 250
goto inicio
end        


Imagen del montaje en Proteus:


Otros artículos sobre PWM en microcontroladores que te pueden interesar:


Un saludo a todos y todas!!!

lunes, 27 de febrero de 2012

Control de desvíos con PIC 16F876A


Muy Buenas a todos y todas!!!

Esto es lo que tengo recopilado hasta ahora sobre el control de los desvíos de la maqueta con el microcontrolador PIC 16F876A.

En la maqueta tengo hasta 7 desvíos y todos son relés, así que es básicamente un control de relés con teclado y LCD de 16x02.

El programa es muy similar a uno que ya publique anteriormente sobre el control de LEDs llamado "Teclado y el port A del PIC 16F628".

Una de las diferencias es que se muestra el resultado en una pantalla LCD 16x2 conectada en el puerto C del 16F876A.

En un futuro también se mostrara la velocidad en una escala de 0 a 85, la verdad es que ya le he estado tocando aquí y allí y más o menos ya lo tengo controlado, aunque sigue en periodo de pruebas.


Como comenté anteriormente el programa es muy parecida a la entrada Teclado y portA. Con el LCD tuve un pequeño problema relacionado con el bootloader.

El Screamer1.4 / 1.6 tiene un problema al cargar el bootloader en el principio de la memoria del PIC y cuando lo intentaba cargar me daba un fallo relacionado con GOTO, como si intentara escribir en la zona donde esta el bootloader.

Lo solucione buscando otro bootloader llamado Tiny PIC bootloader. Resulta que este bootloader se programa en la parte final de la memoria y ya no da el error. Bueno lo mismo estoy equivocado, pero lo que si es cierto es que funciono... ¡¡Y a la primera!!


Os dejo los archivos en PBP y Proteus para el control de desvíos con 16f876A por si queréis dar un vistazo. Encontrareis los archivos en la sección de descargas.

Un Saludo!!!

lunes, 20 de febrero de 2012

Maqueta tren a escala control con VB6

Buenas a todos y todas!!!

Esta es la interfaz que estoy diseñando para el control de la maqueta mediante el ordenador con Visual Basic 6.

Por el momento no publico el código porque solo esta empezado y falta bastantes partes que no están terminadas.

Con el teclado se controlan los desvíos, numerados desde el 1 al 7 y "/" y "\" para los cruces de vías.



Los controles son 3 uno para el circuito exterior, otro para el interior y el tercero para realizar maniobras.

Y bueno esto sera a grandes rasgos la pantalla de control.

Espero hacerle también una especie de base de datos de los sensores para poder hacer paradas programadas y saber en que parte de la maqueta se encuentran los trenes.



Después de un tiempo y algunos problemas con el PC he conseguido comunicar el micro 16f876A con el programa que he estado realizando para la maqueta.

Como se puede ver en la imagen los cambios no son muchos, pero suficientes para que quedara todo mucho más claro.

Las lineas representan la posición de los desvíos. Azul para abierto y Negro para la posición de cerrado.

A día de hoy funciona perfectamente la velocidad y espero tener pronto los botones para las direcciones y los botones de Stop.

Los botones de Stop pararan la maqueta en su totalidad sea cual sea el botón que se pulse.

También tengo que resolver como mandar los datos de una manera más ordenada.

He visto algo pero no he tenido mucho tiempo. Otra función que me tengo pendiente es para hacer itinerarios y paradas programadas.

Aquí esta para descargar lo ultimo que hice de este programa: Visual Maqueta VB6

Próximamente más avances!!

Un saludo!!!

sábado, 1 de octubre de 2011

Primer programa 16f876A ADC y PWM

Muy buenas a todos y todas!!!

Primero de todo comentar que el bootloader con el microcontrolador 16F876A es lo más cómodo que he utilizado desde que empecé con los microcontroladores. Realmente animo a todos los que crean que tiene mucho lio, que se pongan, es realmente fácil y sobre todo muy cómodo.

Dicho esto, este es el primer programa que he realizado en PBP para el PIC 16F876A, aparte del mítico Blink (parpadeo) para comprobar que todo esta correcto con la programación.

Es un programa para utilizar un potenciómetro con el conversor analógico que integra el PIC internamente.

Primero lee el potenciómetro en una de las entradas analógicas del microcontrolador, en este caso AN0 y con ello controlamos la intensidad del un led mediante la función PWM (Pulse Width Modulation).


DEFINE LOADER_USED 1	' Para usar el bootloader

DEFINE OSC 20			' Defino la velocidad del cristal
DEFINE ADC_BITS 10 		' Conversión A/D a 10 bits
DEFINE ADC_CLOCK 3  
DEFINE ADC_SAMPLEUS 10 

Led1 VAR portc.1	' El puerto C1 pasa a llamarse Led1
Dato VAR WORD		' Variable para el dato

TRISA = %11111111	' Puerto A todo como entradas
ADCON1 = %10000010
PAUSE 1000

Inicio:

  ADCIN 0, Dato	' Lee el puerto AN0 y lo guarda en la variable Dato.
  Dato = Dato /4	' Al tener la conversión en 10bits la variable es de 0 a 1023 dividimos
      			' entre 4 para tener una variable de 0 a 255.
  PWM Led1, dato, 30	'PWM lee la variable almacenada en Dato y la transmite atraves de Led1.
  GOTO Inicio 
    
END
    

Una imagen de las conexiones:


Otros artículos sobre PWM en microcontroladores que te pueden interesar:

Un saludo!!

sábado, 24 de septiembre de 2011

Entrenador para PIC 16F876A Con Bootloader

Muy buenas a todos y todas!!!

Después de muchas pruebas y mucho leer en un foro por aquí, algunas webs por allá, me he decidido a construir esta placa entrenadora para el PIC 16F876A.

Esta placa además de ser entrenadora con unas pocas modificaciones podemos ampliar su versatilidad y usarla para otros proyectos que incluyan cada vez más sensores o actuadores.

Normalmente, con los medios adecuados y sin fallos en un par de días podemos tenerla lista.

En mi caso he tardado un poco más (cerca de un par de meses jejeje) pero entre el trabajo y un par de pequeños problemas que me surgieron con el puerto COM del portátil.

Otra de las cosas que decidí hacer es un programador JDM en condiciones.

¿El motivo? Lo hice porqué pensaba que era el programador el que tenía un problema y no funcionaba bien Finalmente resulto ser el puerto COM, que curiosamente si programa el 16F628, pero no el 16F876A

Fue la placa en el ordenador de sobremesa y con WinPic800, se programo a la primera.

Para hacer la placa entrenadora para PIC 16F876A, primero hice el circuito en un protoboard, y hasta que no lo tuve 100% probado no empecé con el diseño de la placa, la cual hice con el método de la "plancha" y con agua fuerte y agua oxigenada

Placa para 16F876A

Para hacer la PCB tome como referencia la que aparece en esta página, esta en alemán, pero lo básico se entiende.

Otra referencia que ha sido muy útil es este tema del foro de RobotsPeru y aunque se refiera el 16F877 se puede extrapolar al 16f876A.



El Bootloader es el de este mismo RobotsPeru en su sección de descargas, en mi caso el Screamer-v1.4 es por el momento, el que mejor me funciona.

Próximamente edito y subo los archivos para Inkscape y un paquete con toda la información que he recopilado.


Nuevo Bootloader en Cambiando a bootloader tinybld198

Un saludo a todos!!!

viernes, 5 de agosto de 2011

Ampliación Micro JDM de 18 a 28 pines

Muy buenas a todos y todas!!!

Con este adaptador podemos grabar los PIC de 28 pines como el 16F876A en el zócalo de 18 pines del uJDM.

Lo he probado con un 16F876A y no he tenido ningún problema. En el esquema original venía también el adaptador de 40 pines, pero como el último chip que tenía no me lo programo bien y ahora no funciona no tengo más para seguir probando, si consigo que funcione correctamente lo subié también.

Como único componente extra, tenemos que añadir una resistencia de 1Kohm.


Adaptador Micro JDM de 18 a 28 pines

Otros enlaces que te pueden interesar sobre microcontroladores PIC:

Saludos a todos y todas!!!

domingo, 25 de julio de 2010

Programador Micro JDM 16f628 y 16f84

Buenas a todos y todas!!!
Circuito programador Micro JDM
JDM Serial Programmer

Este es el segundo programador que he fabricado para poder programar el microcontrolador 16f628a.

Lo bueno es que con un adaptador también nos sirve para el microcontrolador PIC16f84 el JDM Serial Programmer.

El circuito original de este programador lo he sacado de esta web. Esta en ingles, pero no creo que sea un gran problema si conoces un poco los componentes.

Por mi parte la única modificación que le he realizado al circuito ha sido para que tenga un diodo LED más que indica cuando se esta programando.



Lista de componentes

Y aquí esta es la lista de componentes que he utilizado para el montaje del programador micro JDM:

  • R1 10k
  • R2 15k
  • R3 3k3
  • R4 10k
  • Z1 5.1v Zener
  • Q1 BC547
  • C1 100uF 16v
  • D1 Led rojo
  • D2 Led verde
  • J1 DB9F
  • J2 Socket DIL 18

Bueno como se puede ver son muy pocos y fáciles de conseguir en cualquier tienda o pagina web donde vendan componentes electrónicos.

Este es el circuito modificado:


Y es que este programador esta reducido al máximo para utilizar unicamente los pines de programación que vienen indicados en el datasheet del 16F628A en el apartado 14.11 "In-Circuit Serial Programming™:



Y ahora unas fotos del resultado final, un programador Micro basado en JDM:

Micro JDM - vista superior
Vista superior

Micro JDM - vista de las pistas
Vista de las pistas

JDM Serial Programmer
JDM Serial Programmer

En esta ultima fotografía se puede apreciar bien lo pequeño que es en comparativa con una llave.

Espero que os guste y que os sea practico. Las pruebas las he realizado con el portátil, el otro que tengo es bastante grande y para usarlo tenia que estar con cable, este programador micro es más practico y más cómodo de usar.

Programando con MicroJDM

Los programas más utilizados para flahear la memoría del 16F628A son Ic-Prog y WinPIC800.

IC-Prog:

Esta herramienta es para aficionados y profesionales y permite programar microcontroladores y chips de memoria integrados conectando un programador de hardware de tipo uJDM a un PC. Puedes descargar el sofware en la página oficial de IC-Prog.

IC-Prog es conocido por soportar una amplia gama de microcontroladores PIC de Microchip y otros dispositivos como AVR y algunos chips de memoria EEPROM.

WinPic800:


Es un software muy parecido a IC-Prog pero tiene soporte para GTP-USB. También podemos programar los casi los mismos chips y memorias que IC-Prog.

Puedes descargar WinPic800 desde su web oficial.

Programa de prueba

Si ya tienes el programador y el microcontrolador puedes verificar su funcionamiento con el siguiente programa con el que encenderemos y apagaremos un diodo LED en intervaluos de 1s:


@ DEVICE PIC16F628A, WDT_OFF
@ DEVICE PIC16F628A, PWRT_ON
@ DEVICE PIC16F628A, BOD_ON
@ DEVICE PIC16F628A, PROTECT_OFF
@ DEVICE PIC16F628A, CPD_OFF
@ DEVICE PIC16F628A, MCLR_OFF
@ DEVICE PIC16F628A, XT_OSC
@ DEVICE PIC16F628A, LVP_OFF

loop:
  HIGH PORTB.0
  pause 1000  
  
  LOW PORTB.0 
  pause 1000
  GOTO loop
end


NOTA 1: Puede que en las fotos los componentes como los transistores no tengan la misma posición, revisa el datasheet primero.

NOTA 2: En este enlace tenéis la configuración que uso para el programador.

NOTA 3: En este enlace tenéis una ampliación de zócalo de 18 pines a zócalo de 28 pines.

NOTA 4: Este programador NO funciona con convertidores USB/RS232


Muchas gracias a todos y todas!!!


El apartado que viene a continuación ha sido extraída de la pagina https://soloelectronicos.com y NO LO HE PROBADO PERSONALMENTE. Así que no me hago responsable si no funciona o hace que tengáis algún problema con la electrónica del PC/Portátil:

Si el voltaje MCLR# no fuera suficientemente alto (este problema se ha visto en portátiles, pero también en PCs con un puerto COM débil), puedes proporcionar este voltaje desde el exterior de 15-20v en los extremos de C1(de 100mf). Usa dos baterías de 9V o un PSU que entrega al menos 15V.

No hace falta ningún regulador ya que los diodos zener limitan el voltaje.No olvides la resistencia de 220 Ohm – que limita la corriente y protege el circuito JDM.

Los siguientes enlaces sobre microcontroladores te pueden interesar:

Saludos a todos!!!