Webcampista.com

mucho más que un foro

PIC 18f4550 y CCS compiler

Si el osacilador de momento es el interno, no me he complicado.

Osacar esto el bootloader que usas tu Bootloader USB para PIC18F4550 a full. o usas el wizard del ccs????? Esque yo he probado el wizar del ccs y me dice que active configuracion de rs232, pero si lo quiero por usb????

En cuanto a comunicacion i2c ya encontre algo.

me fata el manejo de lcd.

Joer que agobio, esto de andar a ciegas, siendo la primera vez que programos estas cosas y encima contrareloj.......

Gane algo o no, voy a pillarme una cogorza el dia 25.....
 
Al ser un simple filtro por descontado que a partir de 220nF funciona bien , mucha gente usa 470nF para curarse en salud, hasta varios microFs. Yo no lo pondria, durante la desconexion nos podemos encontrar que se descargue antes la Vcc que la Vusb por exceso de capacidad, polarizando de forma inversa algun transistor interno del chip. Los problemas llegan solos....no hay que buscarlos.


Pues si no lo pones, te aseguro que no funciona, o funciona de vez en cuando, lo dicho, al final, acto de fe y a ponerlo (yo soy de los de, si tengo, 470nf)



Navegante, si, el bootloader que tengo yo es un derivado de ese, convenientemente modificado (aunque no mucho) para que pueda trabajar directamente en las placas en las que lo pongo, ten en cuenta que a veces tardamos en programarlo, durante ese tiempo las salidas deben estar configuradas correctamente, o te puedes cargar algo, si controlan un puente en H que controla un motor (no sé si viste un vídeo que puse hace tiempo de un "helicoptero") por ejemplo, debes ponerlo todo "apagado" o puedes hacer un corto.

Bueno, que me enrollo, si, es ese, por cierto que el programa del PC también lo modifiqué... (está escrito en C++ Builder, "una pasada", "C tipo delphi") para quitar la parte de demo y que no se queje cuando le pones un cristal que no es el suyo.




Una cosa que se me ocurrió del comparador, ¿a qué tensión interna tienes el comparador? lo pregunto por lo que dices de que en la pata te daba 2,65V, ¿es esa la tensión o parecida?
A ver lo que opináis, en un operacional (y un comparador es eso "potenciado" ¿no?) las dos patas de entrada "deben tener" siempre la misma tensión, internamente lo intentará por lo menos, quizá por eso te salga esa tensión, y si intentas que suba demasiado, quizá tengas un problema (te lo cargues) no lo creo, no me suena haber roto ninguno por eso, pero bueno, puede ser eso que te cuento, lo puedes comprobar si ves que tanto si subes como si bajas la tensión, la pata no sube ni baja mucho (esto con una resistencia de pull down)

Por cierto que entendí que eso del LCD y el I2C ya te funcionaba... ¿el SAA ese no lo controlabas ya?

Del LCD hay montones de librerías, seguro que en el CCS también, úsalas.
 
Ah, que se me olvida, para hacer fácil la comunicación a través de USB lo que hacen muchos proyectos es emular un puerto serie, así puedes controlarlo con cualquier programa que pueda controlar el puerto serie, que suelen ser todos los lenguajes de programación. ¿tiene que ver con lo que dices?
El bootloader del CCS debe hacer algo parecido, y utiliza el SIOW para programarlo, una opción que se llama "Download Software" y creo que tienes un tiempo para hacerlo, esto lo recuerdo del PIC16F875 y demás, ya hace que no trabajo con él.
 
Pues no me entendistes bien, jejejeje

Gestor de carreras es lo que hemos hecho hasta ahora,
Cominicacion i2c para manejar los saa
comparador
interrupciones de rb
todo esto ok
lo que me falta por hacer, es lo que es mi cruz, el puñetero c, pero con buenos diagramas de fujos, creo que me saldré.

Ahora para el box, que es lo que me falta hacer, y que no tengo ni idea, pues nunca he hecho nada, es el bootloader, control de moteres paso a paso, y manejo de dos lcd para mostrar info. y lo que mas complicado es la i2c entre pic, que no tengo ni idea.
 
aclaracion de los anteriores comentarios, si la nota de aplicacion dice 220nF, se ponen, si se entiende el por que, mejor, y si la gente dice que alguien tiene problemas pero que poniendo 470nF nadie se queja, pues con 470nF, microF es lo que no pondria.
____________________________

Si el ampli no trabaja en la zona de amplificacion lineal, no se puede asegurar que esten al mismo nivel, y en este caso ademas es que el circuito que nos pintas parece bastante simbolico, vete a saber. Lo que es seguro es que hay que revisar el hard por que tambien me extraña lo que explica de las tensiones.

Preferiria hacer pruebas simples paso a paso de este modulo COMP+Vref, seguro que poco a poco se llega a la cima.

De entrada, en el manual que tengo de microchip, en la pag 279, se ve como la Vref sale por RA2, eso no se si es incompatible con el modo 6 del COMP (dos comparadores con 4 entradas multiplexadas), ya he comentado lo de la config de la Vref, mejor probar y verificar si se puede acceder a ella por RA2 (previa config) directamente con un voltimetro, imagino que con el proteus tambien se tendria que poder verificar virtualmente.

Para que no se me olvide, hay que configurar las entradas del COMP como analogicas, supongo que ya se hace.
 
...ni idea, pues nunca he hecho nada, es el bootloader,...
no lo entiendo :(, pero no lo tienes ya? y si no como programas ese pic? o es un bootloader para algo especial, acaso cargar algun parametro concreto de la carrera...
___________________________
control de motores paso a paso
, mas :(, que motores? para que sirven? esto es un mundo...simplificando se trata de guardar en una matriz (array) las combinaciones de las salidas de cada paso, despues por medio de un puntero se van sacando secuencialmente controlando la cantidad de pasos que sera el giro angular conseguido por el eje...mas o menossss-------estoooo, no sera control pwm de los motores? (ya no borro la explicacion anteior que ha quedado muy chula :) jaja
___________________________
MAnejo de 2 LCD
con la misma info? no, lo sabia ! para eso tienen el Enable no? hay dos modos a 4 y a 8 bits mas alguno de control, habrá librerias espero
____________________________
I²C entre dos pics
jajaja es que me da la risa, joer con el proyecto!
Lo que yo se, el protocolo es (puede ser) multimaster, oleeeee, supongo que hay verificacion de colisiones etc, en todo caso si se puede programar que haya un unico master supongo que sera mas facil.
Significado: el master es el unico que puede solicitar dialogo al slave, es el unico que toma la iniciativa, los slaves responden a la solicitud del master.
Es otro mundo con sus 'bibliotecas' . A cada byte del master el esclavo direccionado devuelve un bit de reconocimiento llamado ACK (ya ha salido antes), eso evita que el master hable ' con las paredes' como les suele pasar a los profes muchas veces :), vigilar que el master no se quede colgado ante la falta de respuesta de un slave, esperando el dichoso bit ACK.
Por cierto, que se tienen que 'explicar' los dos pic?
[Otro detalle, el I²C no es el bus mas recomendado para sacarlo a pasear fuera de la pcb, ya se entiende que las condiciones no las pones tu]
Añado: que no se desconfigure lo del SAA1064, que esto ya iba,no?,
 
Si controlas el SAA con el I2C es que el maestro ya lo tienes, el problema entonces es el esclavo.

Los motores paso a paso es otro cantar... de los problemas que planteas a mi me parece el más complicado, por lo menos hasta entender las señales que tienes que generar, ya te digo, si eso lo tienes claro, lo demás coser y cantar :D

¿tienes ya los drivers para los paso a paso?

De todas maneras esto no será para el viernes ¿no?... centrémonos en lo del viernes...
 
aclaracion de los anteriores comentarios, si la nota de aplicacion dice 220nF, se ponen, si se entiende el por que, mejor, y si la gente dice que alguien tiene problemas pero que poniendo 470nF nadie se queja, pues con 470nF, microF es lo que no pondria.
____________________________

Bueno poneos deacuerdo, que me estais volviendo loco con tanto cambio de condensador, jejejejejeje que asta el profe ya me ha dado la llave del cuartillo, jejejejeje.
 
Si controlas el SAA con el I2C es que el maestro ya lo tienes, el problema entonces es el esclavo.

Los motores paso a paso es otro cantar... de los problemas que planteas a mi me parece el más complicado, por lo menos hasta entender las señales que tienes que generar, ya te digo, si eso lo tienes claro, lo demás coser y cantar :D

¿tienes ya los drivers para los paso a paso?

De todas maneras esto no será para el viernes ¿no?... centrémonos en lo del viernes...

Pues si es pal viernes, jejejeje ya se que me espera una semana de insomnio, ademas finalmente acabo de mandar a la mierda al impresentable que decia hacer el proyecto conmigo.
 
Otia... :(

Los condensadores (el condensador) de que hablamos son solo para funcionamiento del USB, si no lo usas, ni caso.


Pufff, me has desarmado, ¿a que le das prioridad? lo de los paso a paso para el viernes no lo veo, pero te puedo pasar el código que tengo del tema, un poco liado y simple (nada de tablas) por que lo estoy cambiando, pero bueno, algo hará...
 
no lo entiendo :(, pero no lo tienes ya? y si no como programas ese pic? o es un bootloader para algo especial, acaso cargar algun parametro concreto de la carrera...

de momento lo estoy haciendo a base de quemador, por eso mi duda, no se como tiene que ser la estructura del programa en CCS. Ya que usando el wizard me doce que tengo que activar el rs232.
, mas :(, que motores? para que sirven? esto es un mundo...simplificando se trata de guardar en una matriz (array) las combinaciones de las salidas de cada paso, despues por medio de un puntero se van sacando secuencialmente controlando la cantidad de pasos que sera el giro angular conseguido por el eje...mas o menossss-------estoooo, no sera control pwm de los motores? (ya no borro la explicacion anteior que ha quedado muy chula :) jaja

jejeje, se trata simplemente de accionar el cambio de pista, aunque dado tanta complicación estoy pensando de hacerlo con un rele bobinado.

con la misma info? no, lo sabia ! para eso tienen el Enable no? hay dos modos a 4 y a 8 bits mas alguno de control, habrá librerias espero
____________________________
jajaja es que me da la risa, joer con el proyecto!
Lo que yo se, el protocolo es (puede ser) multimaster, oleeeee, supongo que hay verificacion de colisiones etc, en todo caso si se puede programar que haya un unico master supongo que sera mas facil.
Significado: el master es el unico que puede solicitar dialogo al slave, es el unico que toma la iniciativa, los slaves responden a la solicitud del master.
Es otro mundo con sus 'bibliotecas' . A cada byte del master el esclavo direccionado devuelve un bit de reconocimiento llamado ACK (ya ha salido antes), eso evita que el master hable ' con las paredes' como les suele pasar a los profes muchas veces :), vigilar que el master no se quede colgado ante la falta de respuesta de un slave, esperando el dichoso bit ACK.
Por cierto, que se tienen que 'explicar' los dos pic?
[Otro detalle, el I²C no es el bus mas recomendado para sacarlo a pasear fuera de la pcb, ya se entiende que las condiciones no las pones tu]
Añado: que no se desconfigure lo del SAA1064, que esto ya iba,no?,
 
El tema de los LCD es más simple de lo que parece, el CCS tiene librerías para ello, podrías compartir todas las lineas salvo la de la enable.
 
Que te parece si en vez de liarme al tema de los motores, me mato con la mecanica, y pongo un rele bobinado????? con un transistor, y va que arde??????
 
Me parece muuuucho más sencillo y viable, además si es para "cambio de vía" más... ¿normal...? lo otro son matar moscas a cañonazos ¿no? ¿como son las vías de grandes? :D

Me llaman, me tengo que ir :bangehead:
 
eso de las lcd me lo suponia pero no tengo ni idea de na mas, jejejeje

y no no estamos en el chat. pero podriamops ir par discutir mas de tu a tu este seguindo modulo y poor lo menos tener mañana la estructura del programa.
 
Del programa que me he bajado, hay un ejemplo de programa base, como este.
/*********************************************************************
*
* Microchip USB C18 Firmware Version 1.0
*
*********************************************************************
* FileName: main.c
* Dependencies: See INCLUDES section below
* Processor: PIC18
* Compiler: C18 2.30.01+
* Company: Microchip Technology, Inc.
*
* Software License Agreement
*
* The software supplied herewith by Microchip Technology Incorporated
* (the “Company”) for its PICmicro® Microcontroller is intended and
* supplied to you, the Company’s customer, for use solely and
* exclusively on Microchip PICmicro Microcontroller products. The
* software is owned by the Company and/or its supplier, and is
* protected under applicable copyright laws. All rights are reserved.
* Any use in violation of the foregoing restrictions may subject the
* user to criminal sanctions under applicable laws, as well as to
* civil liability for the breach of the terms and conditions of this
* license.
*
* THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
* TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
* IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
*
* Author Date Comment
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Rawin Rojvanit 11/19/04 Original.
********************************************************************/

/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include "system\typedefs.h" // Required
#include "system\usb\usb.h" // Required
#include "io_cfg.h" // Required

#include "system\usb\usb_compile_time_validation.h" // Optional
#include "user\user.h" // Modifiable

/** V A R I A B L E S ********************************************************/
#pragma udata

/** P R I V A T E P R O T O T Y P E S ***************************************/
static void InitializeSystem(void);
void USBTasks(void);

/** V E C T O R R E M A P P I N G *******************************************/

extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code

#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
void _high_ISR (void)
{
;
}

#pragma code _LOW_INTERRUPT_VECTOR = 0x000818
void _low_ISR (void)
{
;
}
#pragma code

/** D E C L A R A T I O N S **************************************************/
#pragma code
/******************************************************************************
* Function: void main(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Main program entry point.
*
* Note: None
*****************************************************************************/
void main(void)
{
InitializeSystem();
while(1)
{
USBTasks(); // USB Tasks
ProcessIO(); // See user\user.c & .h
}//end while
}//end main

/******************************************************************************
* Function: static void InitializeSystem(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: InitializeSystem is a centralize initialization routine.
* All required USB initialization routines are called from
* here.
*
* User application initialization routine should also be
* called from here.
*
* Note: None
*****************************************************************************/
static void InitializeSystem(void)
{
ADCON1 |= 0x0F; // Default all pins to digital

#if defined(USE_USB_BUS_SENSE_IO)
tris_usb_bus_sense = INPUT_PIN; // See io_cfg.h
#endif

#if defined(USE_SELF_POWER_SENSE_IO)
tris_self_power = INPUT_PIN;
#endif

mInitializeUSBDriver(); // See usbdrv.h

UserInit(); // See user.c & .h

}//end InitializeSystem

/******************************************************************************
* Function: void USBTasks(void)
*
* PreCondition: InitializeSystem has been called.
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Service loop for USB tasks.
*
* Note: None
*****************************************************************************/
void USBTasks(void)
{
/*
* Servicing Hardware
*/
USBCheckBusStatus(); // Must use polling method
if(UCFGbits.UTEYE!=1)
USBDriverService(); // Interrupt or polling method

}// end USBTasks

/** EOF main.c ***************************************************************/

pero claro como que leñe es to eso????? y donde pongo yo mi programa?????
 
En el main, esto es para convertir el PIC en un CDC (un emulador de puerto serie), lo que va dentro del main es lo que se ejecuta, tienes que poner dentro del bucle, lo que tenga que ir dentro del bucle, ojo, si pones esto y quieres que funcione, olvídate de retardos de 200ms o 1 segundo, porque el USBTask se debe ejecutar cada cierto o pincha, te lo dice uno que lo está sufriendo con el CNC :(

¿esto también es para el viernes? joe macho...
 
yo siempre el mas dificil todavia. jejejejeje
 
He encontrado el trozo de código que hay que poner en el compilador del CCS para que desplace el código a un lugar seguro.

Esto es necesario para no chafar el bootloader, pues todo es memoria de programa (lo explicamos en otro hilo)

PHP:
    #define LOADER_END   0x8FF
    #define LOADER_SIZE    0x7FF

#ifndef _bootloader

   #build(reset=LOADER_END+2, interrupt=LOADER_END+8)

#org 0, LOADER_END {}

#endif

Lo que hay que cambiar es lo del 0x8FF y el 7FF, para no chafar el bootloader, fíjate que cambian las interrupciones, este código debe ir antes de cualquier otro
 
Si, son para aprovechar el bootloader de MicroChip (y el programa del PC, recuérdalo)

Pongo aquí por escrito, para que no se pierda con el chat.

Para cambiar la frecuencia del reloj y que siga funcionando el USB basta con modificar los "Configurations bits", quizá haya que hacerlo en el código con alguna directiva, pero es sencillo. También hay que cambiar el PLL para el USB. Hay que hacerlo en MPLAB, con el MCC18 instalado, claro... se compila todo y ya está.

EL bootloader se puede activar de varias maneras, una de ellas, la más común es con un pata, asociada a un pulsador o un jumper, por lo tanto esa pata debe ser una entrada y, si quieres que se active el bootloader (se activa al arrancar) debes mantener pulsado (a 0) ese pulsador/entrada si se quiere cambiar la pata, buscar una instrucción del tipo:
if (RA0==0) o if (!RA0)
Recordad cambiar también el TRIS correspondiente.
También puede ir por tiempo, si no le llega nada por usb en un tiempo, salta al programa de usuario

Otra cosa, el programa del PC es un poco viejuno, hay que ejecutarlo en modo windows95 y como administrador (sobre todo en windows 7) le oí decir a un profe que lo había hecho de otra manera, pero ahora no tengo el profe a mano, y así funciona así que así lo tengo...

Si tienes otro reloj, como el programa está hecho para 20Mhz en una placa de microchip, se queja, pero ni caso, le dais "pon lo que yo diga" y arreando. (Eso fue lo que modifiqué) hablamos otro día de posibles envíos...


Y ahora ya lo dejo...
 
Muchisimas gracias por el tiempo dedicado, y por ponerlo aqui otra vez, pero que sepas que ya habia hecho capturas de pantalla para tener esa informacion guardadita.

Voy con el programa del gestor en c y luego me pongo un rato con el bootloader que ya estoy espeso con este. Pues por lo que veo lo que me baje me sirve mas bien poco.
 
Arriba
© 2004-2024 Webcampista.com