Grabar con un bootloader a través el puerto serie o el USB

Publicar nuevo tema   Responder al tema

Página 1 de 2. 1, 2  Siguiente

Ver el tema anterior Ver el tema siguiente Ir abajo

Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Mar 9 Dic 2008 - 0:17

Grabar con un bootloader a través el puerto serie o el USB

1) El monitor de Jack http://www.wsu.edu/~jackdoll/jmon/
Hice unas versiones para SDCC o PIC-GCC http://per.launay.free.fr/pik_digor/moniteur/
Se puede grabar los programas usarios con gtkterm o minicom

2) El monitor de Juan http://www.iearobotics.com/wiki/index.php?title=PIC_Bootloader
Se puede cargar el programa usario a través del puerto serie o usb
http://www.iearobotics.com/wiki/index.php?title=Pydownloader-wx
La video : Cargando programas en la Skypic con el Pydownloader
http://www.youtube.com/watch?v=-t48-Nccp-c

Per

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  arcachofo el Mar 9 Dic 2008 - 22:29

Gracias por los links... muy interesantes.
Parece una forma sencilla de cargar programas y probarlos sin las complicaciones del icsp, ocupando solo 2 pines del pic.
Por lo que me ha parecido en el "monitor de Jack" se puede interactuar con el pic en tiempo real... no?, este me ha gustado por su sencillez. Por lo que he entendido se maneja solo con una terminal serie... no necesita otro software en el PC para comunicarse con el pic?... osea una vez grabado el firmware en el pic solo conectarlo al puerto serie y abrir una terminal serie en el PC y ya está?

El tema es que reduce la memoria disponible del pic... no?

arcachofo
Participante Activo
Participante Activo

Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Vie 12 Dic 2008 - 2:11

La gente que lee el francés : http://per.launay.free.fr/pik_digor/html/moniteur.html
Hice un diagrama de flujo del monitor pero en francés

Con el monitor de Jack se puede comunicar con gtkterm , no necesita otra software.
Cuidado se debe arrancar en una terminal : gtkterm -r '*'
Asi gtkterm espera '*' (una estrella) antes de enviar una nueva linea del fichero hex
Con gtkterm trabajo tambien con el puerto usb con un ft232rl, hay una carta con kicad en mis paginas

Durante 4 segundas, si no pulsa una tecla, el programa usario arranca
si pulsa una tecla el monitor arranca
Si pulsa la tecla "0" se puede leer o modificar la memoria flash
idem "1" la memoria eeprom
"2" la memoria RAM
"3" se carga un programa usario
"4" Arrancar el programa usario
"5" Ver los 256 palabras de la EEPROM
"6" bistable validacion de los interrupciones GIE
"7" Programa de prueba
Como el programa es GPL se puede modificar

Para probar una biblioteca es muy agradable

La version de Jack toma 768 palabras de 14 bits, tengo 2 versiones una igual y una de 1 kilo palabras (añadi un programa de Juan para duplicar PIC)
Los PIC16F877 tienen 8K palabras de 14 bits

Saludos
Per

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  arcachofo el Sáb 13 Dic 2008 - 16:37

Me gustaría probar esto, pero creo que tengo el puerto serie roto... así que quizás lo podría hacer por usb... no? :
Con gtkterm trabajo tambien con el puerto usb con un ft232rl, hay una carta con kicad en mis paginas


Quieres decir que tienes algún esquema del circuito en tu página?


EDITO:
creo que ya lo encontré... te refieres a: http://per.launay.free.fr/kicad/realisation/usb/ ??

veo en un esquema (carta): PUERTO USB -> FT232R -> MAX232 -> DB9 ; pero eso es un adaptador USB/serie... no?

Para hacer el monitor se puede conectar directamente FT232 con el pic... no?

Una pregunta: con FT232 se podría hacer un programador directo por USB?

arcachofo
Participante Activo
Participante Activo

Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Sáb 20 Dic 2008 - 23:53

Si trabajo con un ft232rl y un pic 16f88 o pic16f876 con la carta usb , tu puedes ver el circuito aqui
http://per.launay.free.fr/kicad/realisation/usb/usb.png hay las fuentes para kicad en http://per.launay.free.fr/kicad/realisation/usb/

El ft232rl sale en 0-5v y se puede enviar directamente las RX, TX al PIC no se necesita el MAX 232 ,cuidado si quieres trabajar con 38400 baudios los hilos deben ser cortos entre el ft232rl y el PIC, el cable USB puede ser de 1m entre el ft232 y el PC

Per

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  arcachofo el Dom 21 Dic 2008 - 0:26

Pues parece un circuito muy sencillo...
No encuentro el ft232 para compralo donde yo vivo... tendré que pedirlo por internet.

Una pregunta: veo que el ft232 tiene RTS, CTS, DTR,... etc. estos pines se pueden contrplar por USB?

La idea es conectar un programador serie por el puerto USB, alguien preguntaba algo parcecido pero USB-paralelo:
http://pic-linux.foroactivo.net/piklab-f3/como-compilar-piklab-pikloops-y-pk2cmd-para-programar-con-pickit-2-t66.htm#105

arcachofo
Participante Activo
Participante Activo

Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Lun 22 Dic 2008 - 22:37

El ft232rl se compra en Farnel por ejemplo. Se debe poner dos modulos usbserial y ftdi_sio con modprobe para probar y despues ponerlos en /etc/modules. Cuidado para soldar el componente y suerte ( trabajo en un instituto (lycée) y tenemos un horno para los SMD)

Puedes usar todo el puerto serie. Es decir que cuando usas /dev/ttyUSB0 se usa los dos modulos para transformar el comando serie en usb y el ft232rl hace al revés.

Si no usas el estandar del puerto serie no se si funciona bien.

Per

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  arcachofo el Dom 28 Dic 2008 - 3:39

Hola...
Quiero probar el Bootloader en otro ordenador con max232 por puerto serie.
He montado el circuito en protoboard, he descargado jmonitor1.0, lo he grabado a un pic16f876... supongo que se puede con 876 también... no?

Que configuración hay que poner en Gtkterm?...
Que reloj pongo en el pic?

En las pruebas que he hecho no pasa nada al encender el pic...

A ver si consigo probar esto, me sería muy util.

Saludos.

arcachofo
Participante Activo
Participante Activo

Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Lun 29 Dic 2008 - 1:37

El reloj del monitor de Jack es 20 MHZ,yo trabajo con un cuarzo de 4 MHZ

en el fichero f877_jmon.inc hay en las lineas 85 -87
;baud rate constant with 20MHz clock...

baud_rate equ 040h ;19200 d'64'(subroutine serialsetup)

;baud_9600 equ 081h ;d'129'
Abajo de GtkTerm \dev\ttyS0 : 19200,8,N,1
Puedes modificar en la ventana configuracion puerto
hay tambien "Contrôle de flux" none

Si haces un reset : si hay una resistencia de polarización en MCLR, pon hilo a masa para hacer el reset
Se debe ver :

Jack's Monitor V1.0

(si apoya la tecla "0")
>Flash @>

cuidado con el monitor de Jack debes empezar tu programa en 0x0020
si trabajas en ensamblador, no hay problemas con org pero en C es mas dificil

Trabajo con este monitor, un pocillo modificado desde 2 años
Si puedo ayudarte, ¡ pregunta !

Per

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  arcachofo el Jue 1 Ene 2009 - 23:20

Bien... pues ya conseguí que funcione, al final lo hice con tu versión (monitor.hex) con un cristal a 4 MHz y a 9600 baud.
Lo estoy probando en un pic16f876, ... vale también para pic16f876a?... creo que había una versión diferente para la serie "a"... no?

Ya te iré preguntando dudas mientras lo esté usando... no entiendo bién como hacer debugging mientras el programa usuario está funcionando.

Una cosa: las rutinas Usart y escritura eeprom y flash del monitor están disponibles para programas de usuario.. no?
Es decir puedo hacer un programa en que se llame a estas rutinas sin tener que escribirlas de nuevo?

EDITO:
Se podría hacer otra versión solo para debugging, sin la capacidad para cargar programas, pero que permita ver como está funcionando el programa??

Esto lo digo para pics que no soportan auto-programación, pero sí tienen usart, si se hace un "monitor" y se añade al código del programa y se graba normalmente con cualquier grabador. Se podrían hacer diagnósticos de funcionamiento... no?... sería posible esto?

arcachofo
Participante Activo
Participante Activo

Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Dom 4 Ene 2009 - 23:16

¡ Buen año nuevo !

La grabación de los PIC16F87x y PIC16F87xA es diferente , puedes encontrar mi monitor por los 16F87xA aqui http://per.launay.free.fr/pik_digor/moniteur/monitorA/ se debe ejecutar el programa monitorA.py
para usar en un terminal ./monitorA.py , no olvidas antes el chmod u+x monitor.py
Despues hay 2 ficheros symbol-tablesA.inc y symol-tableA.inc, puedes usar si trabajas en ensamblador en C me parece mas dificil

El "debugging" (como se dice en español en francés tenemos el verbo "deverminer")
Trabajo con alumnos que empiezan el lenguaje C (sdcc) y los microcontroladores PIC16F877 y PIC16F88,
entonces uso mucho el printf.
Cuando usan una bucle (for,while...)
despues deben poner
printf("salida de bucle");
Y dentro de un programa, "mensaje 1",... "mensaje n"
Se hace una emulación ...
Con el monitor y el puerto serie es muy facil modificar, compilar, grabar y ¡ ver lo que funciona o no !
Pero si trabajas en tiempo real con interrupciones puedes usar variables de control y fijar estas variables de manera ciclica.

Saludos

Per

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  arcachofo el Vie 9 Ene 2009 - 23:38

No he podido hacer casi nada con el monitor estos días, además estoy haciendo las pruevas con un PC viejo que es muy lento para todo y además se le estropeó una tarjeta de memoria, y ahora solo con 128 MB es lentiiiisimo... voy a conseguir un cable usb-serie para usar mi PC y entonces podré hacer algo.

Ya entiendo como hacerlo con printf... se van mandando mensajes por uart al PC, así sabes por donde va pasando y eso... además se podrían mandar datos, por ejemplo para probar adc, se podrían visualizar los valores leidos y cosas así.. no?.

Lo de las interrupciones no lo tengo muy claro, te refieres a probocar una interrupcion en determinados puntos del programa y en ese momento poder leer o escribir la memoria desde el PC para probar cosas distintas?
Eso de fijar las variables de forma cíclica no lo he entendido...

De todas formas primero tengo que conseguir un puerto serie en mi PC para empezar a conocer bien el funcionamiento

Se podría probocar una interrupción cada ciclo de instrucciones y volcar los registros que se quiera vigilar al PC... bueno estoy imaginando mucho por ahora; vamos a empezar por el principio...

Gracias por las informaciones.

arcachofo
Participante Activo
Participante Activo

Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Dom 11 Ene 2009 - 22:43

Se emplea para probar los programas y tambien para probar adc y temporizador por ejemplo el modo "captura" con un ventilador (3 hilos).

Con las interrupciones, no trabajo con los alumnos y no se puede usar el puerto serie dentro de una interrupción toma demasiado tiempo pero se puede usar variables y enviarlas en el programa principal.

Si te gusta el puerto serie hay tambien un "laboratorio de bolsillo" http://www.liberlab.net/, hice una version para el pic16f877
http://per.launay.free.fr/pik_digor/liberlab_pic/
Con ejemplos en http://per.launay.free.fr/pik_digor/demo_fete_science/

Saludos

Per

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  arcachofo el Miér 28 Ene 2009 - 4:24

Pues ya tengo puerto serie...

He estado haciendo algunos intentos con el monitor y gtkterm, para cargar programas muy bien.. funciona perfecto.
Ahora intento hacer algo más interactivo, por lo pronto quiero usar las subrutinas del monitor, pero no tengo claro como hacerlo. He encontrado esto:

Código:

;==========================================================================
;monitor subroutines can be called from user code
;these can be cut and pasted to define the subroutines in user code
;monitor subroutines.......(n)=returned RAM bank
;
startuser  equ 01cffh ; run user code
monitor    equ 01d08h ;()jump into monitor, hard reset
runmon      equ 01d2ah ;()jump into monitor
eeread      equ 01f70h ;(2)eeread returns byte addressed in eeadr
eewrite    equ 01f62h ;(3)eewrite writes the byte to eeprom memory
                ; at the current eeadr
flashread  equ 01f84h;(3)read a location in flash program memory
                ;,or in eeprom data
                            ;address is in eeadrh and eeadr
                            ;data returns in eedath and eedata
flashwrite  equ 01f77h;(3)write to a location in the flash program
                        ;memory -address in eeadrh and eeadr
                        ;data in eedath and eedata
getdigit    equ 01fb6h ;(0)get usart byte and convert to hex digit
                ; in low nibble of w
gethexbyte  equ 01fabh ;(3)two ascii digits from the usart-
                ;convert to a byte in w
gethexword  equ 01fa6h ;(3)two hex bytes returned in addrfh,addrfl
getkey      equ 01fbeh ;(0)getkey checks input for esc,goes to runmon
                ;,or returns ascii key
getbin          equ    01fd0h  ;(3)fast getbyte from usart for loader,
                    ; -no echo adds to checksum
sendbyte    equ 01fc6h ;(0) byte in w as two hex char to usart
sendcrlf    equ 01eebh ;(0)send a cr/lf sequence
serialsetup equ 01f8fh ;(0)initialize the usart for tx,rx
                ; at default baud rate
serrx      equ 01f9ah ;(0)read a byte from usart, return in w
sertx      equ 01fa0h ;(0)transmit byte from w register
sendstring      equ    01febh  ;(2)unpacks one ascii line to the usart
            ;strings are format: da "string\0" (nul term)

            ;must enter with eeadr,eeadrh pointing to a string

            ;macro mssg calls this routine



He intentado llamar a alguna de las subrutinas pero no me funciona... no sé como hay que hacerlo.

Podrías poner algún pequeño ejemplo de cómo usar estas subrutinas en un programa?

Gracias...

arcachofo
Participante Activo
Participante Activo

Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008

Volver arriba Ir abajo

Re: Grabar con un bootloader a través el puerto serie o el USB

Mensaje  per el Jue 29 Ene 2009 - 22:46

Cual pic usas ?
Trabajo con un pic16f877
Trabajo con picgcc y por ejemplo se puede usar flashread con
// ./compila.sh ej_lectura_flash 16f877a .
#include <pic/p16f877a.h>
#define FOSC_HZ 4000000

#include <uart.h>
#include <uart2.h>

#define flashread 0x1f7a

int main (void)
{
int a,b;
uart_open(SET_9600_8N1);
uart_putc('\n');
uart_puts("*Lecture(a) Flash");
uart_putc('\n');

while(1)
{
uart_puts("direccion adresse ");
a = getint(uart_getc);
putint(uart_putc,a);
EEADRH=a>>8;
EEADR=a&0xff;

__asm__ __volatile__ ("movlw 0x1f");
__asm__ __volatile__ ("movwf PCLATH");
__asm__ __volatile__ ("call 0x1f7a");
__asm__ __volatile__ ("clrf PCLATH");

b=(EEDATH<<Cool|EEDATA;
uart_puts(" contenu(ido) ");
putint(uart_putc,b);
uart_putc('\n');
}
return 0;
}

Cadena : Un poco de francés y español [url=http://pic-linux.foroactivo.net/javascript:emoticonp('Wink')][/url]

Si trabajas en ensemblador, no olvidas que las variables estan en el banco 3

Despues de la rutina, hay un numero entre paréntesis por ejemplo eeread ; (2) es decir que al salir de la rutina estas en el banco 2

Si tienes un ejemplo, puedes escribirlo aqui o aca o enviarme en mi dirección

per
Participante Activo
Participante Activo

Cantidad de envíos: 30
Fecha de inscripción: 08/12/2008
Localización: Rennes Bretaña Francia Europa

http://per.launay.free.fr

Volver arriba Ir abajo

Página 1 de 2. 1, 2  Siguiente

Ver el tema anterior Ver el tema siguiente Volver arriba


Publicar nuevo tema   Responder al tema
Permiso de este foro:
No puedes responder a temas en este foro.