TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: yerflow en 02 de Mayo de 2010, 21:08:17
-
Hola mi primer post aqui
Les cuento de un proyecto en el que trabaje los últimos meses y ya esta terminado, quiero compartir lo que tengo por si alguien quiere adaptar algo de este proyecto a sus propios .=)
El proyecto consiste en un sintonizador en la banda de 1200Mhz 2490Mhz el cual está controlado por un pic 18f4550, un PLL de 17 bits una pantalla alfanumérica, y una pantallita gráfica a color de un celular.
El sintonizador haciendo un barrido continuo muestrea en la pantalla gráfica la cantidad de señal presente en la entrada de R.F. del equipo.
Usando un juego de códigos en el programa se logra jugar con los colores por cantidad de señal; comenzando del color mas oscuro al blanco.
Actualización continua de la pantallita gráfica.
INFO COMO USAR EL DISPLAY -->
http://www.todopic.com.ar/foros/index.php?topic=31027.msg258816#msg258816
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30519.0;attach=11928)
Les dejo especificaciones técnicas:
-Prototipo terminado
-Firmware versión 10.02.12
-Rango extendido de 1200 Mhz - 2510 Mhz ( 1.2Ghz -2.5Ghz )
-Comunicación USB (beta1)
-Saltos de frecuencia por muestreo:
* 0.025 Mhz
* 0.050 Mhz
* 0.100 Mhz
* 0.500 Mhz
* 1. Mhz
* 2. Mhz
* 4. Mhz
Pantallita gráfica 6566 pixeles
Ejes de muestreo 3D:
X = frecuencia en Mhz (f)
Y = amplitud (A)
Z = tiempo (t)
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30519.0;attach=11930)
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30519.0;attach=12064)
Usos
-Diseño antenas de Wifi y Bluetooth direccionales y omnidireccionales ( 2.4Ghz )
-Receptor Superheterodino digital (salto de banda min. 12.5 khz)
-Analizador de Espectro Electromagnético 3D
-Analizador de filtros pasa banda
-Monitoreo de actividad R.F.
-Medidor de ciclo magnético-eléctrico del fotón en el medio de propagación.
-
Se ve muy interesante ... :oops:
Gracias
PD/ Ya las vi al final jeje
-
Hola! Se ve muy interesante el proyecto, hace tiempo que quiero hacer uno! Podrias decirme tus referencias?
Gracias y felicitaciones!
-
Te ha quedado de lujo, enhorabuena.
¿Lo publicarás?
-
Pero que interesante, ¿la pantalla a color es una pantalla Nokia de 128 x128?
-
(Misterio en el aire)
-
Esta muy bueno, felicidades.
-
disculpen por la demora mucho q hacer. :P
el programa lo escribí en una combinación entre ASM y Pic basic pro tiene aprox. 3000 líneas (incluido espacios) de largo pero aqui lo mas importante:
Primero comparto sobre el PLL usado, es un philips TSA5059
-máximo rango de entrada 2.7Ghz
-comandos por bus I2C
-Conectado a un ZERO IF down converter TDA8060 como VCO y mixer de RF (estos dos se encuentran ahora en el TDA8260)
Control del PLL TSA5069:
primero q nada para los q no han usado nunca el sistema I2C hay mucho en internet sobre ello. pero no encontré algo q me sirva con este chip asi q escribí la secuencia de el pin de reloj (SCL) y el pin de datos (SDA), una rutina simple justa y rápida.
'I2C ADDRESS VARIABLE------- (setiamos las variables)----------------------------
ADDR VAR BYTE 'ADDRESS VARIABLE
RW VAR BIT
I2C_ACK VAR BIT
I2CBYTE VAR BYTE
' I2C VCO PORTS PLLS -----------------------------------------------------------
SCL VAR PORTD.2 ' I2C clock OUT
SDA VAR PORTD.3 ' I2C data OUT
'************* PLL BYTE EN DETALLE *********************************************************************************************************************************'
' BYTE 1 = NWORD1 = 0 , N14 , N13 , N12 , N11 , N10 , N9 , N8 PROGRAM DIVIDER '
' BYTE 2 = NWORD2 = N7 , N6 , N5 , N4 , N3 , N2 , N1 , N0 PROGRAM DIVIDER '
' BYTE 3 = RATIOW = 1 , N16 , N15 , PE , R3 , R2 , R1 , R0 (PE = "1" PRESCALER /2 ACTIVE) (R3 TO R0 = PROGRAMMABLE REFERENCE DIVIDER RATIOCONTROL) '
' BYTE 4 = CURRENTP = C1 , C0 , XCE , XCS , P3 ,P2/T2, P1/T1, P0/T0 (C1 Y C0 CHARGE PUMP CURRENT) (XCE XCS TX = TEST. NORMAL MODE XCE=0 XCS=0) (P =PORTS ALL=0) '
'*******************************************************************************************************************************************************************'
'************* Device ADDRESS #192 (AS TO GND) TSA5059 *******************************************************************************
VCO CON 192 ' The address of the I2C device you wish to access
NWORD1 var byte ' 0 , N14 , N13 , N12 , N11 , N10 , N9 , N8 PROGRAM DIVIDER
NWORD2 var byte ' N7 , N6 , N5 , N4 , N3 , N2 , N1 , N0 PROGRAM DIVIDER
RATIOW VAR BYTE ' 1 , N16 , N15 , PE , R3 , R2 , R1 , R0 (PE = 1 PRESCALER /2 ACTIVE) (R3 TO R0 = PROGRAMMABLE REFERENCE DIVIDER RATIOCONTROL)
CURRENTP con %01000000 ' C1 , C0 , XCE , XCS , P3 ,P2/T2, P1/T1, P0/T0 (C1 Y C0 CHARGE PUMP CURRENT) (XCE XCS TX = TEST. NORMAL MODE XCE=0 XCS=0) (P =PORTS ALL=0)
HIGH SCL
HIGH SDA
LET ADDR=VCO 'setiamos el address del pll, éste puede tener hasta cuatro distintos address (cuatro dispositivos en el mismo bus)
NWORD1 = %00000000
NWORD2 = %00000000
RATIOW = %10001111
'CURRENTP = %11000000
'para mayor info esta en el DATASHEET,
PLLSEND5BYTES: 'subrutina de los pines del pic conectados al pll I2C
HIGH SDA 'START CONDITION
HIGH SCL 'START CONDITION
LOW SDA 'START CONDITION
PAUSEUS 5
LOW SCL 'START CONDITION
LET I2CBYTE = ADDR ' SEND ADDRESS
GOSUB SENDI2CBYTE ' SENDOUT
let NWORD1.7=0 '
LET I2CBYTE = NWORD1 ' SEND NWORD1
GOSUB SENDI2CBYTE ' SENDOUT
LET I2CBYTE = NWORD2 ' SEND NWORD2
GOSUB SENDI2CBYTE ' SENDOUT
LET RATIOW.7=1
LET I2CBYTE = RATIOW ' SEND RATIOW
GOSUB SENDI2CBYTE ' SENDOUT
LET I2CBYTE = CURRENTP' SEND CURRENTP
GOSUB SENDI2CBYTE ' SENDOUT
LOW SCL ' STOP CONDITION
LOW SDA ' STOP CONDITION
PAUSEUS 5
HIGH SCL ' STOP CONDITION
PAUSEUS 5
HIGH SDA ' STOP CONDITION
PAUSEUS 5
RETURN
SENDI2CBYTE: 'Subrutina para enviar 1 byte a la vez. Esta rutina se la llama 5 veces cada envío de datos al PLL.
LOW SCL 'C 11110
PAUSEUS 5 '
IF I2CBYTE.7 = 1 THEN HIGH SDA 'D 11110X
IF I2CBYTE.7 = 0 THEN LOW SDA 'D 11110X
PAUSEUS 5
HIGH SCL 'C 111107
PAUSEUS 5 'CLOCK 1 HIGH
LOW SCL 'C 11110X0
PAUSEUS 5
IF I2CBYTE.6 = 0 THEN LOW SDA 'D 1111070
IF I2CBYTE.6 = 1 THEN HIGH SDA 'D 11110X0X
PAUSEUS 5
HIGH SCL 'C 11110706
PAUSEUS 5 'CLOCK 2 HIGH
LOW SCL 'C 11110X0X0
PAUSEUS 5
IF I2CBYTE.5 = 0 THEN LOW SDA 'D 111107060
IF I2CBYTE.5 = 1 THEN HIGH SDA 'D 11110X0X0X
PAUSEUS 5
HIGH SCL 'C 1111070605
PAUSEUS 5 'CLOCK 3 HIGH
LOW SCL 'C 11110X0XOX0
PAUSEUS 5
IF I2CBYTE.4 = 0 THEN LOW SDA 'D 11110706050
IF I2CBYTE.4 = 1 THEN HIGH SDA 'D 11110X0X0X0X
PAUSEUS 5
HIGH SCL 'C 111107060504
PAUSEUS 5 'CLOCK 4 HIGH
LOW SCL 'C 11110X0X0X0X0
PAUSEUS 5
IF I2CBYTE.3 = 0 THEN LOW SDA 'D 1111070605040
IF I2CBYTE.3 = 1 THEN HIGH SDA 'D 11110X0X0X0X0X
PAUSEUS 5
HIGH SCL 'C 11110706050403
PAUSEUS 5 'CLOCK 5 HIGH
LOW SCL 'C 11110X0X0X0X0X0
PAUSEUS 5
IF I2CBYTE.2 = 0 THEN LOW SDA 'D 111107060504030
IF I2CBYTE.2 = 1 THEN HIGH SDA 'D 11110X0X0X0X0X0X
PAUSEUS 5
HIGH SCL 'C 1111070605040302
PAUSEUS 5 'CLOCK 6 HIGH
LOW SCL 'C 11110X0XOXOXOXOXO
PAUSEUS 5
IF I2CBYTE.1 = 0 THEN LOW SDA 'D 11110706050403020
IF I2CBYTE.1 = 1 THEN HIGH SDA 'D 11110X0XOXOXOXOXOX
PAUSEUS 5
HIGH SCL 'C 111107060504030201
PAUSEUS 5 'CLOCK 7 HIGH
LOW SCL 'C 11110X0XOXOXOXOXOXO
PAUSEUS 5
IF I2CBYTE.0 = 0 THEN LOW SDA 'D 1111070605040302010 'W/R BIT IN WRITE(0)
IF I2CBYTE.0 = 1 THEN HIGH SDA 'D 11110XOXOXOXOXOXOXOX
PAUSEUS 5
HIGH SCL 'C 11110706050403020101
PAUSEUS 5 'CLOCK 8 HIGH
LOW SCL 'C 11110X0XOXOXOXOXOXOXO
PAUSEUS 5
HIGH SDA 'ACKNOWLEDGE BIT 'D 11110X0XOXOXOXOXOXOXO1 'NEXTBYTE IF ANY 'IF LOW END OF RECEPTION
PAUSEUS 5
HIGH SCL 'C 111107060504030201010A
PAUSEUS 5 'CLOCK 9 HIGH
LOW SCL
PAUSEUS 5
RETURN
--------------------------------------------------------------------------------------------------------
Los bytes llamados NWORD corresponden a los 17 bits de división. la formula para convertir la frecuencia separada en Mhz y en Khz en los 17 bits de división es la siguiente, tbn está el ratio incluido en la formula así q si cambia el ratio(salto de frecuencia) la formula se adapta =);
FORMULA:
IF RAT = 1 THEN DT = 4:NN = 0 '4000 KHZ STEP SIZE RAT*4 = DT
IF RAT = 2 THEN DT = 2:NN = 0 '2000 KHZ STEP SIZE RAT = DT
IF RAT = 4 THEN DT = 1:NN = 0 '1000 KHZ STEP SIZE RAT/4 = DT
IF RAT = 8 THEN DT = 2:NN = KILOHZ / 500 '500 KHZ STEP SIZE ""
IF RAT = 20 THEN DT = 5:NN = KILOHZ / 200 '200 KHZ STEP SIZE ""
IF RAT = 40 THEN DT = 10:NN = KILOHZ / 100 '100 KHZ STEP SIZE ""
IF RAT = 80 THEN DT = 20:NN = KILOHZ / 50 '50 KHZ STEP SIZE ""
IF RAT = 160 THEN DT = 40:NN = KILOHZ / 25 '25 KHZ STEP SIZE ""
'X
IF RAT < 3 THEN NWORDX = MEGAHZ / DT 'X
IF RAT > 3 THEN NWORDX = MEGAHZ * DT 'X
let NWORDX = NWORDX + NN ' NWORDX = N15 - N0 1010101010101010 'X
let NWORD1 = NWORDX >> 8 ' NWORD1 = N15 - N8 10101010 'X
let NWORD2 = NWORDX ' NWORD2 = N7 - N0 10101010 'X
'X
IF RAT = 160 AND MEGAHZ <= 1638 THEN RATIOW.6 = 0 ' MAKE N16 = 0 'X
IF RAT = 160 AND MEGAHZ = 1638 AND KILOHZ >= 4000 THEN RATIOW.6 = 1 ' MAKE N16 TO BYTE 3 '65536 = RATIOW.6 'X
IF RAT = 160 AND MEGAHZ >= 1639 THEN RATIOW.6 = 1 ' MAKE N16 TO BYTE 3 'X
'X
IF RAT < 100 THEN RATIOW.6 = 0 'X
IF NWORD1.7 = 0 THEN RATIOW.5 = 0 ' MOVE N15 TO BYTE 3 OR RATIOW 'X
IF NWORD1.7 = 1 THEN RATIOW.5 = 1 : NWORD1.7 = 0 ' MOVE N15 TO BYTE 3 OR RATIOW 'X
'X
LET RATIOW.7 = 1 'ALWAYS = 1 'X
IF RAT > 1 THEN RATIOW.4 = 0 'PRESCALER OFF 'X
IF RAT = 1 THEN RATIOW.4 = 1 'PRESCALER OFF
'X
'PLL BYTE DE RATIO 'X
IF RAT = 2 OR RAT = 1 THEN RATIOW.3 = 0 : RATIOW.2 = 0 : RATIOW.1 = 0 : RATIOW.0 = 0
IF RAT = 4 THEN RATIOW.3 = 0 : RATIOW.2 = 0 : RATIOW.1 = 0 : RATIOW.0 = 1
IF RAT = 8 THEN RATIOW.3 = 0 : RATIOW.2 = 0 : RATIOW.1 = 1 : RATIOW.0 = 0
IF RAT = 20 THEN RATIOW.3 = 1 : RATIOW.2 = 0 : RATIOW.1 = 1 : RATIOW.0 = 1
IF RAT = 40 THEN RATIOW.3 = 1 : RATIOW.2 = 1 : RATIOW.1 = 0 : RATIOW.0 = 0 'X
IF RAT = 80 THEN RATIOW.3 = 1 : RATIOW.2 = 1 : RATIOW.1 = 0 : RATIOW.0 = 1 'X
IF RAT = 160 THEN RATIOW.3 = 1 : RATIOW.2 = 1 : RATIOW.1 = 1 : RATIOW.0 = 0 'X
'X
'X
RETURN 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
con esto solo escribiendo por ejemplo en la variable MEGAHZ = 2400 y en la variable KILOHZ = 0, la formula convierte esto en los 5 bytes para mandarlo al PLL por el bus de datos I2C, dando como resultado la estabilización de frecuencia del VCO en 2.4Ghz =)
Espero haberlo explicado bien. por favor postear si alguna parte no se entiende bien para poder explicarlo mejor.
La explicación del display y su chip la haré luego. :-/
Saludos a todos
Att. su amigo Yerflow