Autor Tema: Proyectos con 18F87k22  (Leído 3997 veces)

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

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Proyectos con 18F87k22
« en: 11 de Enero de 2015, 13:08:43 »
hola a todos.queria abrir este hilo para ir poniendo diferentes proyectos del pic18F87k22.que es por el que me he decantado
desde hace algun tiempo.ya he realizado varias practicas con este chip.y es bastante diferente al 18F2550 que es el ultimo con el
que realize bastantes proyectos.

llegue a abrir otro hilo para el 18F67K22 pero por un poco de mayor precio,me decante por el 18F87k22.
asi que abro este hilo para que no haya confusiones.entre microcontroladores.


lo primero que quiero hacer es controlar el modulo A/D interno.pero se me esta dando un problema.
estoy realizando las pruebas con el MPLAB y con el ICD2.en el MPLAB todo funciona perfectamente.pero con el ICD2 es otra cosa.

al principio pense que el problema estaba en la configuracion del oscilador.y aunque todabia no puedo descartar deltodo esto.
se me esta dando el caso de un funcionamiento incorrecto del ICD2.

una de las pruebas que realizo para ver este fallo.es que no puedo cargar valores en determinados registros especiales.
como pueden ser ADCON1,ADCON2,ANCON0,ANCON1,ANCON2. si que puedo introducir valores en ADCON0.

en las pruebas que he realizado puedo ver cambios de estado en los registros ADRESH y ADRESL.cuando introduzco valores de 5 o 0v
en la entrada analogica seleccionada.pero los valores intermedios no se corresponden.supongo que sera porque no estan correctamente
configurados los registros de configuracion.pero como saberlo si el ICD2 no configura bien los registros de configuracion del A/D.


por eso queria preguntar si ha alguien lo ha sucedido algo parecido.
« Última modificación: 07 de Febrero de 2015, 16:59:26 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #1 en: 11 de Enero de 2015, 16:42:33 »
acabo de montar otro circuito con este pic.y el problema persiste.asi que no es del microcontrolador ni de la placa.solo responde ADCON0.
ADCON1 y ADCON2 no cambian sus valores.

asi que he pensado que aunque los valores no se visualizan en la ventana de registros especiales.igual el dato esta ahi.
pues he probado a pasar el valor de ADCON1 y ADCON2 al acumulador.y efectivamente el valor esta ahi.

es un alivio que los datos esten ahi.lo que hace falta es que el ICD2 tambien los tenga en cuenta.
ahora me toca comprobar que es lo que pasa con el modulo A/D.que no presenta los datos que deberia.puede que tenga mal configurados
los registros de configuracion o algo del oscilador del microcontrolador.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #2 en: 11 de Enero de 2015, 18:07:02 »
por fin logre hacer que funcione.aparte de configurar correctamente los registros del control del modulo A/D.la causa principal es la configuracion del oscilador
del microcontrolador.

queria hacer funcionar el microcontrolador a 64Mhz.para esto puse un crystal de 16Mhz y active el pll.esto en el modo HS.
puse un led para ver si realmente funcionaba a 64Mhz.y parece que si funcionaba.pero al parecer el modulo A/D no va bien.

ahora que le hecho un vistazo mas detallado al datasheet.parece que la maxima velocidad en el modo HS es de 25Mhz.
no se como usar el oscilador interno para generar 64Mhz. pero se supone que si se puede.como dice esta nota:

The PLL is available to the internal oscillator block
when the internal oscillator block is configured as the
primary clock source. In this configuration, the PLL is
enabled in software and generates a clock output of up
to 64 MHz

ya solo me queda ver que registros retocar.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado vixctor

  • PIC16
  • ***
  • Mensajes: 109
Re: Proyectos con 18F87k22
« Respuesta #3 en: 12 de Enero de 2015, 01:06:43 »
El problema NO está en el oscilador, sino en que varios registros, como ANCONX a pesar de ser parte de los SFR no forman parte de ACCESS BANK, por esa razón, para inicializar los registros del ADC necesitas estar en el banco 0x0F00 de la RAM interna del PIC...

Código: [Seleccionar]
;****************************************************************************************************************
; Configuración de otros módulos que interfieren con el funcionamiento de los puertos...
;****************************************************************************************************************
movlb d'15' ; Algunos registros (SFR) NO forman parte de ACCESS, aunque estén en el banco #15...
;****************************************************************************************************************
; Comparadores: OFF
;****************************************************************************************************************
movlw d'3' ; Deshabilito los comparadores...
movwf CM1CON ; Comparator disabled, Internally connected, output not inverted, iterrupt disabled,
movwf CM2CON ; Non-inverting input connects to the internal CVREF voltaje
movwf CM3CON ; Inverting input of comparator connects to VBG
;****************************************************************************************************************
; Entradas analógicas...
;****************************************************************************************************************
movlw b'00001010' ; AN1 y AN3 entradas analógicas, las demas entradas serán digitales...
movwf ANCON0 ; Las demas serán entradas digitales...
clrf ANCON1 ; Entradas digitales (AN08 a AN15)
movlw b'00001010' ; AN19 [3] (RG1) => Analog, AN17 [1] (RG3) => Analog
movwf ANCON2 ; Entradas digitales (AN16 a AN23)

;****************************************************************************************************************
clrf BSR ; Al banco 0...
movlw b'11000000' ; Configuro las fuentes de referencia del módulo ADC
movwf ADCON1 ; TRIGSEL [7:6] = RTCC, REF_P [5:4] = AVDD, REF_N [3] AVSS, CHSN [2:0] = Chn 0 (GND)
movlw b'00001110' ; Configuro el modo en el que estará trabajando el ADC... (2 TAD)
movwf ADCON2 ; Justificado a la izquierda (ADRESH => 8 MSB), X TAD, FOSC / 64
bcf IPR1,ADIP ; La interrupción del ADC será de baja prioridad...




Como podrás notar, se hace el cambio de banco usando la instrucción MOVLB  d'15'



En este otro ejemplo podrás ver como usar el reloj interno del PIC, a 16 mhz, con PLL para obtener 64 Mhz...

Código: [Seleccionar]

movlw b'11110000' ; IDLE on Sleep, 16 mhz clock
movwf OSCCON ; Oscon calibrado, ahora...
btfss OSCCON,HFIOFS ; El oscilador se ha estabilizado?
bra $-2 ; aun no, esperando...
nop ; NOP para terminar de estabilizar el reloj
btfss RCON,POR ; La fuente de alimentación acaba de ser activada?
call delay_10ms ; Si, haré un delay de 40 ms en lo que se estabiliza la fuente de alimentación...
; movlw b'01000000' ; PLL Enabled, This PIC clock = 64 Mhz
movwf OSCTUNE ; Se necesito un valor de +5 para calibrar el reloj a 16 MHZ... (Para este PIC)



Para que funcione bien, checa los settings que uso:

Código: [Seleccionar]
     LIST      P=PIC18F67K22    ; list directive to define processor
     #INCLUDE <P18F67K22.INC>   ; processor specific variable definitions

errorlevel  -202        ; suppress message 202 from list file
errorlevel  -311     ; suppress message 311 from list file
;****************************************************************************************************************
;Configuration bits
;****************************************************************************************************************

     CONFIG RETEN = OFF, INTOSCSEL = LOW, SOSCSEL = DIG, XINST = OFF
     CONFIG FOSC = INTIO1, PLLCFG = ON, FCMEN = OFF, IESO = OFF
     CONFIG PWRTEN = ON, BOREN = OFF, BORV = 3, BORPWR = LOW
     CONFIG WDTEN = OFF, WDTPS = 1, RTCOSC = SOSCREF
     CONFIG CCP2MX = PORTC, MSSPMSK = MSK7, MCLRE = OFF, STVREN = ON
     CONFIG BBSIZ = BB1K, DEBUG = OFF, CP0 = ON, CP1 = ON, CP2 = ON
     CONFIG CP3 = ON, CP4 = ON, CP5 = ON, CP6 = ON
     CONFIG CP7 = ON, CPB = ON, CPD = ON, WRT0 = OFF, WRT1 = OFF
     CONFIG WRT2 = OFF, WRT3 = OFF, WRT4 = OFF, WRT5 = OFF, WRT6 = OFF
     CONFIG WRT7 = OFF, WRTB = OFF, WRTC = ON, WRTD = OFF
     CONFIG EBRT0 = OFF, EBRT1 = OFF, EBRT2 = OFF, EBRT3 = OFF
     CONFIG EBRT4 = OFF, EBRT5 = OFF, EBRT6 = OFF, EBRT7 = OFF
     CONFIG EBRTB = OFF


Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #4 en: 12 de Enero de 2015, 11:33:26 »
muchas gracias vixctor por la informacion.se me paso por la cabeza eso que dices de estar en el banco de los registros especiales.y tambien realize esa prueba
sin resultados.pero supongo que abria algo mal hecho aparte de eso.

respecto a funcionar a 64Mhz sin crystal externo me parece excelente.ayer pude hacerlo funcionar asi.pero activando el bit PLLEN del registro OSCTUNE.
tal y como lo expones en tu respuesta.no basta con activarlo en la palabra de configuracion.

en tu respuesta tambien veo que la palabra de configuracion tiene la opcion de debug.DEBUG = OFF.
no sabia que habia que configurar el pic para el debugger.supongo que tendre que activar esta opcion para usar el ICD2.y desactivarla cuando
termine el programa.

la verdad es que este pic es nuevo para mi.tengo muchas cosas que aprender antes de saltar a los 24F
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Proyectos con 18F87k22
« Respuesta #5 en: 12 de Enero de 2015, 11:47:17 »
Yo uso en uno similar (18F26K80) el oscilador interno a 64 Mhz sin problemas, comunicando en CAN y en Serial a 115200 bps (por los tiempos precisos que precisan ambos) y no tuve dolores de cabeza con los puertos AD.
Repito, no es el mismo micro...
No uso cristal externo, aunque si dejo los capacitores puestos y el lugar para el cristal, por si las moscas... :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #6 en: 13 de Enero de 2015, 11:06:31 »
el sabado retomare el proyecto.estoy muy cansado despues del trabajo como para ponerme a programar.si lo hiciera me reventaria una vena. :D

respecto al 18F87k22 .como ya dije por algun hilo.estoy creando unas placas para usar en todos mis proyectos.es como una especie de zocalo adaptador pero
preparado para ser alimentado directamente.y con la posibilidad de poner componentes discretos como los propios cristales.como tu has hecho.aunque no se llegen a usar.
hare una cuantas hasta que perfeccione los diferentes errores.y asi algun dia encargar las placas a los chinos.preferiblemente las dimensiones serian de 5x5cm.



Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #7 en: 13 de Enero de 2015, 18:02:07 »
al final me pudo la curiosidad. :D

El problema NO está en el oscilador, sino en que varios registros, como ANCONX a pesar de ser parte de los SFR no forman parte de ACCESS BANK, por esa razón, para inicializar los registros del ADC necesitas estar en el banco 0x0F00 de la RAM interna del PIC...



hola vixctor.tenias razon en lo de conmutar el banco 0x0f00 yo lo he hecho con la instruccion movlb 0x0f y ha funcionado.he podido modificar los valores
de ANCON0,ANCON1 y ANCON2.pero no puedo modificar los valores de los registros ADCON2 y ADCON1.creo que todos los problemas que estoy teniendo con el modulo A/D es por culpa de esto.

sabes de alguna nota de microchip al respecto?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado vixctor

  • PIC16
  • ***
  • Mensajes: 109
Re: Proyectos con 18F87k22
« Respuesta #8 en: 13 de Enero de 2015, 18:48:31 »
Código: [Seleccionar]
;****************************************************************************************************************
clrf BSR ; Al banco 0...
movlw b'11000000' ; Configuro las fuentes de referencia del módulo ADC
movwf ADCON1 ; TRIGSEL [7:6] = RTCC, REF_P [5:4] = AVDD, REF_N [3] AVSS, CHSN [2:0] = Chn 0 (GND)
movlw b'00001110' ; Configuro el modo en el que estará trabajando el ADC... (2 TAD)
movwf ADCON2 ; Justificado a la izquierda (ADRESH => 8 MSB), X TAD, FOSC / 64
bcf IPR1,ADIP ; La interrupción del ADC será de baja prioridad...



Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #9 en: 17 de Enero de 2015, 11:59:31 »
hola vixctor.dices que conmute el banco 0.entiendo que ADCON0 y algunos registros especiales deben de ser accedidos desde el banco 0x0f
que para eso es la instruccion movlb  .15  y que otros registros no es necesario esta conmutacion.

pero supongo que todos los registros especiales son accesibles si cargamos este valor.y no necesariamente conmutar el banco 0.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #10 en: 17 de Enero de 2015, 15:24:49 »
acabo de comprobar que desde las direcciones 0xFBA(PIR5) hasta 0xFC1(ADCON1).no se visualizan los valores que escribo en estos registros especiales.
usando el ICD2.porque desde el mpsim va bien.

aunque las rutinas funcionan bien tanto en la simulacion por software como por hardware.quizas sea un problema del ICD2.ademas los valores
estan ahi si los leo de los registros.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #11 en: 17 de Enero de 2015, 16:30:09 »
bueno.aqui pongo el programa de gestion del modulo ADC.ADRESL se enviara a LATB  y ADRESH  a LATC.tambien adjunto el proyecto.

Código: [Seleccionar]
;*************************************************www.ingeniopic.com*******************************************************
; PROGRAMA : 18F87k22_ADC
; Funcion :  Ejemplo de uso del ADC
;           
;   
;  Revision : 1.0        10/1/2015            Programa para : PIC18F87K22
; CPU Clock : 64 MHz                     Reloj instruccion :64.5ns
;       WDT : Deshabilitado                  Tipo de reloj :
; Code Prot : OFF            Crystal: Oscilador Interno
;*****************************************************www.ingeniopic.com***************************************************

;FUNCIONAMIENTO:
;
;Ejemplo de uso del ADC.entrada analogica por AN0.salida por LATB y LATC
;clock a 64Mhz


LIST   P=PIC18F87K22   ;Se indica el modo de procesador

     #INCLUDE   <P18F87K22.inc>


      RADIX   HEX      ;Sistema de numeracion hexadecimal

         

            CONFIG    RETEN=ON ; VREG Sleep Enable bit:
            CONFIG    INTOSCSEL=LOW ; LF-INTOSC Low-power Enable bit:
CONFIG    SOSCSEL=DIG ; SOSC Power Selection and mode Configuration bits:
            CONFIG    XINST=OFF ; Extended Instruction Set:
          CONFIG    FOSC=INTIO2 ; Oscillator:
            CONFIG    PLLCFG=ON ; PLL x4 Enable bit:
            CONFIG    FCMEN=OFF ; Fail-Safe Clock Monitor:
            CONFIG    IESO=OFF ; Internal External Oscillator Switch Over Mode:
            CONFIG    PWRTEN=OFF ; Power-up Timer:
            CONFIG    BOREN=OFF ; Brown-out Detect:
            CONFIG    BORV=1 ; Brown-out Reset Voltage bits:
            CONFIG    BORPWR=LOW ; BORMV Power level:
            CONFIG    WDTEN=ON ; Watchdog Timer:
            CONFIG    WDTPS=1024 ; Watchdog Postscaler:
            CONFIG    MSSPMSK=MSK5 ; MSSP address masking:
        CONFIG    MCLRE=ON ; Master Clear Enable:
            CONFIG    STVREN=ON ; Stack Overflow Reset:
            CONFIG    BBSIZ=BB1K ; Boot Block Size:
CONFIG   CCP2MX=PORTC
CONFIG   DEBUG = ON


ERRORLEVEL      -302


CBLOCK    0x000A ;comienza el bloque de ram
PDel0
PDel1
PDel2

ENDC


;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
          ORG    0x00      ;Inicio en el Vector de Reset
  goto   INICIO      ;ir a la primera instruccion del programa
;<<<<<<---------------------- VECTOR DE INTERRUPCIONES ALTA PRIORIDAD ---------------->>>>>>>>>>
ORG 0X08
;goto INTERRUP_HI
;<<<<<<---------------------- VECTOR DE INTERRUPCIONES BAJA PRIORIDAD ---------------->>>>>>>>>>
ORG 0X18
;goto INTERRUP_LO


ORG 0X0020
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO    movlb d'15' ; Algunos registros (SFR) NO forman parte de ACCESS, aunque estén en el banco #15...

; Comparadores: OFF
movlw d'3' ; Deshabilito los comparadores...
movwf CM1CON ; Comparator disabled, Internally connected, output not inverted, iterrupt disabled,
movwf CM2CON ; Non-inverting input connects to the internal CVREF voltaje
movwf CM3CON ; Inverting input of comparator connects to VBG

; Configura oscilador interno
movlw b'11110000' ; IDLE on Sleep, 16 mhz clock
movwf OSCCON ; Oscon calibrado, ahora...
btfss OSCCON,HFIOFS ; El oscilador se ha estabilizado?
bra $-2 ; aun no, esperando...
nop ; NOP para terminar de estabilizar el reloj
btfss RCON,POR ; La fuente de alimentación acaba de ser activada?
call DEMORA ; Si, haré un delay de 10 ms en lo que se estabiliza la fuente de alimentación...
movlw b'01000000' ; PLL Enabled, This PIC clock = 64 Mhz
movwf OSCTUNE ; Se necesito un valor de +5 para calibrar el reloj a 16 MHZ... (Para este PIC)

;clrf BSR ; Al banco 0...
movlw b'11000000' ; Configuro las fuentes de referencia del módulo ADC
movwf ADCON1 ; TRIGSEL [7:6] = RTCC, REF_P [5:4] = AVDD, REF_N [3] AVSS, CHSN [2:0] = Chn 0 (GND)
movlw b'10001110' ; Configuro el modo en el que estará trabajando el ADC... (2 TAD)
movwf ADCON2 ; Justificado a la derecha X TAD, FOSC / 64
;bcf IPR1,ADIP ; La interrupción del ADC será de baja prioridad...




;Configura PORTA
clrf PORTA ;inicializa PORTA
clrf LATA ;inicializa LATA
movlw b'00001111' ;PA0,PA1,PA2 y PA3 como entradas
movwf TRISA
movlw b'00001111' ;AN0,AN1,AN2 y AN3 como entradas analogicas
movwf ANCON0,ACCESS

;Configura PORTB
clrf PORTB ;inicializa PORTB
clrf LATB ;inicializa LATB
clrf TRISB ;PORTB como salidas

;Configura PORTD
clrf PORTC ;inicializa PORTC
clrf LATC ;inicializa LATC
clrf TRISC ;PORTC como salidas


clrf INTCON

;---------------------------------- PROGRAMA PRINCIPAL ------------------------------

PRINCIPAL movlb .0
call DAT_AN


goto PRINCIPAL




;//////////////////////////////////(conversor A/D)////////////////////////////////////////////////////////////////////////////////////////////////
;///////////////busca el dato analogico introducido por el pin seleccionado/////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DAT_AN clrwdt
bsf ADCON0,ADON
bsf ADCON0,DONE ;inicia la conversion
AD_GOIN btfsc ADCON0,DONE ;comprueba si la conversion ha finalizado
goto AD_GOIN ;si la conversion ha finalizado continua

movff ADRESL,LATB ;carga el dato en LATB
movff ADRESH,LATC ;carga el dato en LATC

return



;----------------------------------- 10ms --------------------------
DEMORA  movlw     .188      ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .121      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL3  goto PDelL4         ; 2 ciclos delay
PDelL4  goto PDelL5         ; 2 ciclos delay
PDelL5  goto PDelL6         ; 2 ciclos delay
PDelL6  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------







end


Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con 18F87k22
« Respuesta #12 en: 07 de Febrero de 2015, 16:45:08 »
hola.aqui estamos de nuevo para poner mas programas.
en este caso queria gestionar la EUSART de este pic 18F87k22 y aclarar algunas cosas de utilidad.

las practicas las estoy haciendo en el isis del proteus.unas de las cosas mas importante a la hora de configurar la usart del pic,es la frecuencia
de funcionamiento Fosc.hay que tener en cuenta que Processor Clock Frecuency en la edicion del componente de isis no es Fosc.este valor
es el del crystal.Fosc es la frecuencia a la que esta trabajando el pic.y es determinada por el cristal y la configuracion del oscilador .

en el caso de usar oscilador internO,el valor que pongamos en el pic del simulador del isis.no tendra efecto alguno y por consiguiente no sera
tenido en cuenta.este valor devera configurarse en los fuses del pic.

el valor Fosc  sera la frecuencia a la que este trabajando el pic despues del PLL si es que lo hemos habilitado.

voy a realizar un ejemplo de funcionamiento a 64Mhz con oscilador interno.para saber si hemos configurado bien la frecuencia de trabajo,usaremos
la siguiente formula: t=1/F  = 1/64000000 = 15.625nS cada ciclo de reloj.y como cada intruccion del pic consume 4 ciclos, 15.625x4= 62.5nS

este ultimo valor es el que debemos de ver en la parte inferior de la ventana del simulador del isis.cuando ejecutemos una instruccion
de las mas rapidas.paso a paso.por ejemplo un NOP.ya que hay instrucciones que consumen mas de 4 ciclos de reloj.



una vez que tengamos esto hecho.empezaremos con la configuracion del SPBRG.este valor debe de seleccionarse de manera que se produzca el menor
procentage de error en una comunicacion con un baudrage determinado.porsupuesto que existe la posibilidad del % 0.pero habria que seleccionar
un crystal con un valor multiplo de la velocidad a trabajar.pero este dato esta de mas aqui ya que se supone que el que vaya a trabajar con este pic.
debe de saber esto.por ser un pic muy avanzado.y para gente avanzada.

ejemplo:

pic Fosc a 64Mhz trabajando con oscilador interno y PLL.a 9600bps.

SYNC=0,BRG=0,brg16=0
         
SPBRG=((Fosc/9600)/64)-1 =103    error=(64000000/(64(103+1))= 9615     (9615-9600)=0.156%

SPBRG =103
SPBRGH=  0(no se usa)



y este ejemplo es  trabajando a 16bit y que obtenemos menor margen de error.

SYNC=0,BRG=0,brg16=1
         
SPBRG=((Fosc/9600)/16)-1 =416    error=(64000000/(16(416+1))= 9592      (9592-9600)=-0.072%


SPBRG=161
SPBRGH=1

como aqui el valor de SPBRG se introduce en un registro de 16bit (416-255)=161 para SPBRG Y 1 para SPBRGH.

puede notarse como hay dos porcentages diferentes.uno positivo y otro negativo.pero nosotros en teoria debemos de coger la configuracion que tenga
menor porcentage de error.ya sea negativo o positivo.la diferencia es que una comunicacion se adelanta y otra se atrasa respecto a la velocidad
de 9600bps.aunque esto no tiene ninguna importancia si transmitimos un solo caracter o una trama de datos corta.

el problema de una comunicacion asincrona es que segun el margen de error de la transmision,se limita la cantidad de bytes a recibir o transmitir
de una sola vez.ya que el error se produce tanto para enviar como para recibir.

aunque no se la formula para esta comprobacion.creo que seria de la siguiente forma:

si el error es de un 20% a 9600bps.serian 7680 bits = 960bytes a transmitir correctamente de una sola vez.de 1200 bytes.

y si es un error de 0.072% como es nuestro caso.serian 9593 bits = 1199bytes a transmitir correctamente de una sola vez.de 1200 bytes.



PD:de momento adelanto esto hasta que termine de maquillar el programa.
« Última modificación: 07 de Febrero de 2015, 17:06:31 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)