Está en la página 1de 103

MÓDULO 2

CU9

PROYECTO CU9

DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL BASADO EN EL


PROYECTO CU8, DONDE SE ADICIONA UN MODO DE DIRECCIONAMIEMTO
INDIRECTO A MEMORIA DE DATOS, A TRAVÉS DE UN REGISTRO INDICE
DENOMINADO "IX".
CU9
FPGA

PC16R
uP16

MUXMAR 2
RST BUS ADDRESS

MAR
IX
CLK
BUS
ENTRADA S A FPGA

DATA_IN

MUXMDRI

MEMORIA
MDRI
MUXRX IR

BUS
RX CONTROL
CPU

ALU CCR BUS DATA


_OUT

MDRO

REGPA REGPB

PORT A PORT B
SALIDAS DE FPGA ENTRADAS A FPGA
CU9
IR 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

X”0000” 00000000 = CLR RX RESERVADOS PARA


X”0100” 00000001 = INC RX
X”0200” 00000010 = LDI RX OPER. CON LA "ALU"
X”0300” 00000011 = DEC RX
X”0400” 00000100 = NOP
X”8000” 10000000 = RST
X”0500” 00000101 = LDD RX
X”0600” 00000110 = STR RX
USO ESTOS BITS PARA ENTRAR
X”070X” 00000111 = OPERACIONES ARITMÉTICO- EL CÓDIGO DE IDENTIFICACIÓN
LÓGICAS ENTRE MEMORIA DE DEL BIT A SELECCIONAR:
DATOS Y REGISTRO “RX”.
X”0800” 00001000 = STR RXL, PORT A
PORT_A(BIT 0) = “000”
X”09X0” 00001001 = BIT SET I, PORT A PORT_A(BIT 1) = “001”
X”0AX0” 00001010 = BIT CLR I, PORT A .
X”0B00” 00001011 = INC PORT A
X”0C00” 00001100 = DEC PORT A
.
X”0D00” 00001101 = LDI RX, PORT B .
X”0E00” 00001100 = BTIJC, PORT B .
X”0F00” 00001101 = BTIJS, PORT B
X”1000” 00010000 = JMP PC, DIR
PORT_A(BIT 6) = “110”
X”1100” 00010001 = JMP PC, IF Z, DIR PORT_A(BIT 7) = “111”
X”1200” 00010010 = JMP PC, IF C, DIR
X”1300” 00010011 = DEC RX, IF NZ
X"1400" 00010100 = LDI IX
X"1500" 00010101 = INC IX Total: 40 instrucciones
X"1600" 00010110 = LDD RX, IX
X"1700" 00010111 = STR RX, IX
CU9
DIRECCIONAMIENTO INDEXADO
SE SUMAN LAS SIGUIENTES INSTRUCCIONES :

LDI_IX  CARGA INMEDIATA DE REGISTRO "IX".


INC_IX  INCREMENTO DEL CONTENIDO DEL REGISTRO "IX".
LDD_RX_IX  CARGA DE "RX" CON CONTENIDO DE MEMORIA
APUNTADA POR REGISTRO "IX".
STR_RX_IX  CARGA DE MEMORIA APUNTADA POR REGISTRO "IX"
CON EL CONTENIDO DE "RX".
IX
MUXMAR2

PC

MUXMAR2
MDRI

IX

SELEMUXMAR
CU9
CU9 CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO

RUTINA DE PRUEBA
0000 CLR RX
0001 LDI IX, 0A00
0002 0A00
0003 STR RX, IX
0004 INC IX
0005 INC RX
0006 STR RX, IX
0007 INC IX
0008 INC RX
0009 STR RX, IX
000A LDI IX, 0A00
000B 0A00
000C LDD RX, IX
000D STR RXL, PORTA
000E INC IX
000F STR RX, IX
0010 STR RXL, PORTA
0011 INC IX
0012 STR RX, IX
0013 STR RXL, PORTA
0014 INC RX
0015 JMP PC, 0001
0016 0001
CU9
SE PRUEBAN LAS INSTRUCCIONES RELACIONADAS CON EL REGISTRO IX

PRIMERO : SE ESCRIBEN LAS POSICIONES DE RAM DE 0A00, 0A01 Y 0A02 CON "STR RX,IX"
SEGUNDO: SE LEEN DICHAS POSICIONES CON "LDD RX, IX" MIENTRAS SE ESCRIBEN EN PORTA.
TERCERO: AL TERMINAR EL CICLO, SE INCREMENTA RX Y SALTA A "0001" DONDE SE REPITE TODO
PERO CON NUEVOS VALORES DE "RX" EN UN LOOP INFINITO.
CU9
RUTINA PARA DETECCIÓN Y EJECUCIÓN DE INSTRUCCIÓN LDI_IX
CU9
CU9
CU9
CU9

RUTINA SIMILAR A LA DE "LDI RX"


CU9
CU9
RUTINA PARA DETECCIÓN Y EJECUCIÓN DE LAS INSTRUCCIONES
LDD RX, IX Y STR RX, IX
CU9
CU9

PARA RACIONALIZAR ESTADOS, VUELVO A UTILIZAR PARTE DE LAS RUTINAS


DE "LDD RX, MEM" Y "STR RX, MEM" COMUNES A "LDD RX, IX" Y "STR RX, IX".
CU9
RUTINA PARA DETECCIÓN Y EJECUCIÓN DE INSTRUCCIÓN "INC IX"
CU9
UP16

PROYECTO UP16

EL MISMO DISEÑO EN VHDL DE MICROPROCESADOR DEL PROYECTO CU8,


PERO ELIMINANDO LAS ENTRADAS-SALIDAS EMPLEADAS PARA TEST.
UP16

COMO ERA DE ESPERAR, LA LÓGICA UTILIZADA NO HA VARIADO.


SÓLO SE AHORRÓ EN LA CANTIDAD DE PINES DISPONIBLES QUE
HA BAJADO A 18 (PORTA, PORTB, RST Y CLOCK)
UP16
PLACA DE0-NANO CYCLONE IV
PORTA PORTB(0)
CLK 50 MHZ
RESET

EP4CE22F17C6

PORTB(5,4,3,2)
UP16
UP16

EP4CE22F17C6
UP16KIT
DISTRIBUCIÓN DE COMPONENTES
A UTILIZAR EN LA PLACA DE0-NANO

LAS ENTRADAS A LOS PINES E1 Y J15 TIENEN


RESISTENCIAS DE PULL-UP POR LO QUE
ESTÁN NORMALMENTE EN “1”.
UP16KIT
UP16

PORTB(5)
PORTB(7)
PORTB(6)
UP16 VISTA DEL PIN PLANNER EDITOR
UP16

DISPOSICIÓN DE PINES PARA COMPATIBILIDAD CON LA PLACA


UP16
DISPOSICIÓN DE PINES PARA CONFIGURAR EL MICRO AL KIT

PORTA(0) PIN: A15


PORTA(1) PIN: A13
PORTA(2) PIN: B13
PORTA(3) PIN: A11
PORTA(4) PIN: D1
PORTA(5) PIN: F3
PORTA(6) PIN: B1
PORTA(7) PIN: L3

PORTB(0) PIN: E1 (CONEXIÓN AL PULSADOR KEY_1)


PORTB(1) PIN: M1 (CONEXIÓN AL DIPSWITCH_0)
PORTB(2) PIN: T8 (CONEXIÓN AL DIPSWITCH_1)
PORTB(3) PIN: B9 (CONEXIÓN AL DIPSWITCH_2)
PORTB(4) PIN: M15 (CONEXIÓN AL DIPSWITCH_3)
PORTB(5) PIN: D5 (CONEXIÓN A GPIO-00 : PUERTO DE EXPANSIÓN)
PORTB(6) PIN: C6 (CONEXIÓN A GPIO-01: PUERTO DE EXPANSIÓN)
PORTB(7) PIN: B3 (CONEXIÓN A GPIO-02 : PUERTO DE EXPANSIÓN)

CLOCKCU PIN: R8 (CONEXIÓN DIRECTA AL OSCILADOR DE 50MHZ)


RESETCU PIN: J15 (CONEXIÓN AL PULSADOR KEY_0)
UP16

PROYECTO U16PKIT01

PROYECTO CON EL MICRO UP16, SIMULANDO UN DESPLAZAMIENTO A


IZQUIERDA DE UN BIT EN “1” POR EL PORT A, CON LAZO DE RETARDO.
(DEBE VISUALIZARSE UN LED ENCENDIDO POR VEZ EN FORMA CÍCLICA DE
DERECHA A IZQUIERDA).
UP16

IMPLEMENTACIÓN DEL PROYECTO “UP16KIT01” EN EL KIT DE0-NANO

CONSTANTE DE LAZO DE RETARDO = X”FFFF”.

CONEXIÓN DEL PULSADOR KEY0 DE LA PLACA A LA ENTRADA DE RESET


DEL MICROPROCESADOR.

CONEXIÓN DE LA SALIDA DEL OSCILADOR DE 50 MHZ A LA ENTRADA DE RELOJ


DEL MICROPROCESADOR  FRECUENCIA DE RELOJ INTERNA DE 5 MHZ.
UP16
PROGRAMA 01
NEMOTÉCNICO HEX
0000 CLR RX 0000 0000
0001 INC RX 0001 0100
0002 STR RX, X” 0800” 0002 0600
0003 0800 0003 0800
0004 LDI RX, X”FFFF” 0004 0200
0005 0FFF DELAY 0005 FFFF MÁXIMO VALOR
0006 DEC RX, IF NZ 0006 1300 DE RETARDO ...
0007 LDD RX, X” 0800” 0007 0500
0008 0800 0008 0800
0009 STR RXL, PORTA 0009 0800
000A SLL RX 000A 0715
000B STR RX, X” 0800” 000B 0600
000C 0800 000C 0800
000D JMP PC, X”0005” 000D 1000
000E 0004 000E 0004

8 BITS LED7 LED0


UP16
CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO
UP16
SIMULACIÓN PARA EL GENERADOR DE SECUENCIA

CICLO DE APROX. 394 ms POR CONTEO


UP16

PROYECTO U16PKIT02

PROYECTO CON EL MICRO UP16, SIMULANDO UN DESPLAZAMIENTO A


IZQUIERDA DE UN BIT EN “1” POR EL PORT A, CON DOBLE LAZO DE
RETARDO.
(DEBE VISUALIZARSE UN LED ENCENDIDO POR VEZ EN FORMA CÍCLICA DE
DERECHA A IZQUIERDA).
UP16

IMPLEMENTACIÓN DEL PROYECTO “UP16KIT02” EN EL KIT DE0-NANO

CONSTANTE DE LAZO DE RETARDO EXTERNO = X”0005”


Y PARA LAZO DE RETARDO INTERNO = X”FFFF”.

CONEXIÓN DEL PULSADOR KEY0 DE LA PLACA A LA ENTRADA DE RESET


DEL MICROPROCESADOR.

CONEXIÓN DE LA SALIDA DEL OSCILADOR DE 50 MHZ A LA ENTRADA DE RELOJ


DEL MICROPROCESADOR  FRECUENCIA DE RELOJ INTERNA DE 5 MHZ.
UP16
PROGRAMA 02 USAMOS DOBLE LAZO DE RETARDO
0000 CLR RX
EMPLEANDO RX Y UNA POSICIÓN DE
0001 INC RX MEMORIA DE DATOS
0002 STR RX, 0800 MEM 0800 
0003 0800 ALMACENA
0004 LDI RX, 0005
POSICIÓN DE
0005 0005
0006 STR RX, 0801 DESPLAZAMIENTO
0007 0801
0008 LDI RX, FFFF MEM 0801 
0009 FFFF LAZO ALMACENA VALOR DE
000A DEC RX, IF NZ INTERNO LAZO DE RETARDO
000B LDD RX, 0801
EXTERNO.
000C 0801
000D DEC RX LAZO
000E JMP PC, IF Z, 0014
000F 0014 EXTERNO
0010 STR RX, 0801
0011 0801
0012 JMP PC, 0008
0013 0008
0014 LDD RX, 0800
0015 0800
0016 SLL RX
0017 STR RXL, PORTA
0018 STR RX, 0800
0019 0800 LED7 LED0
0020 JMP PC, 0004
0021 0004
UP16
CONTENIDO DEL ARCHIVO RAM.HEX PARA ESTE PROYECTO

LAZO EXTERNO
LAZO INTERNO
UP16

PROYECTO U16PKIT03
PROYECTO CON EL MICRO UP16, SIMULANDO UN DESPLAZAMIENTO A
IZQUIERDA Ó DERECHA DE UN BIT EN “1” POR EL PORT A, CON DOBLE LAZO
DE RETARDO.
CON EL PULSADOR KEY1 SE CAMBIA EL SENTIDO DE DESPLAZAMIENTO DEL
“1”, CADA QUE SE PULSA.
UP16 0800  0000 DIAGRAMA DE ESTADOS PARA EL
CONTROL DE SENTIDO DE BARRIDO
0802  FFFF
DEL GENERADOR DE SECUENCIA

NO
KEY1=1?
SI SI
KEY1=0?
NO
NO
0802=0?
NOT 0802
SI

EJECUTAR
EJECUTAR
SRL
SLL

DELAY PARTE DE LA RUTINA DEL PROYECTO ANTERIOR

EJEMPLO DE CONCEPTO DE SUBRUTINA


UP16

IMPLEMENTACIÓN EN LA FPGA CONECTANDO


EL PULSADOR KEY0 A LA ENTRADA DE RESET
DEL MICROPROCESADOR Y USANDO KEY1
COMO UN SELECTOR DE FUNCIÓN

SLL

LED7 LED0

SRL
UP16

RUTINA PRINCIPAL

SUBRUTINA DE
GENERACIÓN
DE DELAY

EJEMPLO DE CONCEPTO DE SUBRUTINA


UP16 PROGRAMA 03
0000 CLR RX
0001 INC RX
0002 STR RX, 0802
0003 0802
0004
0005
BT1JS, 000F
000F
RUTINA DE DELAY
0006 BT1JC, 0006 0100 LDI RX, 0005
0007 0006 0101 0005
0008 LDD RX, 0802 0102 STR RX, 0801
0009 0802 0103 0801
000A NOT RX 0104 LDI RX, FFFF
000B STR RX, 0802 0105 FFFF
000C 0802 0106 DEC RX, IF NZ
000D JMP PC, 000F 0107 LDD RX, 0801
000E 000F 0108 0801
000F LDD RX, 0802 0109 DEC RX
0010 0802 010A JMP PC, IF Z, 0110
0011 JMP PC IF Z, 0018 010B 0110
0012 0018 011C STR RX, 0801
0013 LDD RX, 0800 011D 0801
0014 0800 011E JMP PC, 0104
0015 SLL RX 011F 0104
0016 JMP PC, 001B 0110 JMP PC, 0004
0017 001A 0111 0004
0018 LDD RX, 0800
0019 0800
001A SRL RX
001B STR RXL, PORTA
001C STR RX, 0800
001D 0800
001E JMP PC, 0100
001F 0100
CU10
PROYECTO CU10

DISEÑO EN VHDL DE MICROPROCESADOR ELEMENTAL BASADO EN EL


PROYECTO CU9, ADICIONANDO UN CONTROLADOR INDEPENDIENTE DEL
CONVERSOR ANALÓGICO-DIGITAL TIPO SERIE ADC128S022, QUE SE
ENCUENTRA INTEGRADO EN LA PLACA DE0-NANO DE LA CYCLONE IV.
.
CU10
FPGA

PC16R
uP16

MUXMAR 2
RST ❶ BUS ADDRESS

MAR
IX
CLK
BUS
ENTRADA S A FPGA

DATA_IN

MUXMDRI2

MEMORIA
MDRI

MUXRX IR
CONTROLADOR DE ADC

BUS
RX CONTROL
CPU
CONVERSOR
ADC SERIE

ALU CCR BUS DATA


_OUT

MDRO
REGPA REGPB

PORT A PORT B
SALIDAS DE FPGA ENTRADAS A FPGA
CU10

A10
B10 A9 B14
CU10
CU10
FPGA
csn_adc
clock_adc
CONVERSOR
ADC SERIE din_adc CONTROLADOR DE ADC
dout_adc
ADC128S022

salida_contr
end_of_conv

addr_contr
start_contr
muxmdri <= salida_contr

addr_contr <= salidair(7 downto 5)

uP16
CU10
IR 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

X”0000” 00000000 = CLR RX


X”0100” 00000001 = INC RX
RESERVADOS PARA
X”0200” 00000010 = LDI RX OPER. CON LA "ALU"
X”0300” 00000011 = DEC RX
X”0400” 00000100 = NOP
X”8000” 10000000 = RST
X”0500” 00000101 = LDD RX
X”0600” 00000110 = STR RX USO ESTOS BITS PARA ENTRAR
X”070X” 00000111 = OPERACIONES ARITMÉTICO-
LÓGICAS ENTRE MEMORIA DE EL CÓDIGO DE IDENTIFICACIÓN
DATOS Y REGISTRO “RX”. DEL BIT A SELECCIONAR:
X”0800” 00001000 = STR RXL, PORT A
X”09X0” 00001001 = BIT SET I, PORT A PORT_A(BIT 0) = “000”
X”0AX0” 00001010 = BIT CLR I, PORT A PORT_A(BIT 1) = “001”
X”0B00” 00001011 = INC PORT A
X”0C00” 00001100 = DEC PORT A
.
X”0D00” 00001101 = LDI RX, PORT B .
X”0E00” 00001100 = BTIJC, PORT B .
X”0F00” 00001101 = BTIJS, PORT B
X”1000” 00010000 = JMP PC, DIR .
X”1100” 00010001 = JMP PC, IF Z, DIR PORT_A(BIT 6) = “110”
X”1200” 00010010 = JMP PC, IF C, DIR
X”1300” 00010011 = DEC RX, IF NZ PORT_A(BIT 7) = “111”
X"1400" 00010100 = LDI IX
X"1500" 00010101 = INC IX
X"1600" 00010110 = LDD RX, IX Total: 43 instrucciones
X"1700" 00010111 = STR RX, IX
X”1800” 00011000 =START CONV CH I, ADC
X”1900” 00011001 = LDD RX, ADC
X”1A00” 00011010 = JUMP PC IF EOC NZ, ADC
CU10
Controlador del conversor ADC128S022
(de la placa Terasic DE0-Nano - Cyclone IV)

Clock_50MHz
sal_controller
Controlador ADC
Reset
address End of Conversion

FPGA
csn sclk din dout

ADC128S022 8 canales
CU10
ADC128S022
CU10
ADC128S022
CU10
ADC128S022
CU10
ADC128S022
CU10
DIAGRAMA DE TIEMPOS DE LAS SEÑALES DE CONTROL

clock
t
start
t
Momento de escribir al ADC Momento de leer el ADC
csn
t

sclk
t

din
t

dout cuatro ceros DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
t
Carga de datos al ADC: en cada flanco descendente de “sclk”.
Lectura de datos desde el ADC : en cada flanco ascendente de “sclk”.
CU10 Código del controlador del ADC
(Test en la placa DE0-Nano))
CU10

Se usan los 8 bits mas significativos


de los 12 adquiridos para ser
visualizados en los 8 LEDs de la placa
DE0-Nano.
CU10
CU10

Cómo se debe adaptar este


proyecto para ser usado por
el microcontrolador ...???
Vmedida = 1,54 V Vref = 3,32 V
Lectura osciloscopio = 1879
Calculo para 1,54 V = 1889

LEDs (D7 .....D0) = dout (11 ....4) = 01110101 = 75 (hexa)


dout_adc

sclk

dout_adc = 0000011101010111 = 0757(hexa) = 1879 (dec)


PIN PLANNER de este proyecto

B16=GPI0_21=CSN
D16= GPIO_25=SCLK

F15=GPIO_28=DIN F16 =GPIO_29=EOC

G15=GPIO_212=DOUT
CU11
PROYECTO CU11

DISEÑO EN VHDL DE UN CONTROLADOR MASTER PARA BUS SERIE I2C


PARA SER EMPLEADO COMO CONTROL DE TRANSFERENCIA DE DATOS
ENTRE EL MICROCONTROLADOR Y LA MEMORIA EEPROM SERIE 24LC02B
QUE POSEE LA PLACA TERASIC DE0-NANO CYCLONE IV.
CU11
Controlador de bus maestro I2C
Ejemplo con la memoria EEPROM 24LC02B
(de la placa Terasic DE0-Nano - Cyclone IV)
Start
R_Wn Dataout
Clock_200KHz
Acnowledge
Reset Controlador I2C Error_out
Addressin End_of_Trans
Datain
FPGA
Vdd Vdd
SCL SDA

Memoria EEPROM
(2Kbits serie I2C)
24LC02B
CU11
I2C BUS

La versión básica suele usar


un dispositivo Master que
controla por el bus desde
un dispositivo Slave hasta
128 que pueden
interactuar sólo con el
Master.
El bus es de 2 hilos, del
tipo open-drain: Uno es un
reloj (SCL) que gobierna el
Master y el otro es de
datos (SDA) que es
bidireccional.

La versión extendida consiste de múltiples Master que pueden tomar el control del bus
a través de un modo de arbitraje.
CU11
I2C BUS
Las líneas SCL y SDA deben terminar
con una resistencia de pull-up y por
lo tanto los terminales de dispositivos
conectados a ellas deben admitir la
bidireccionalidad.

Todo proceso de comunicación para la


transferencia de información debe
consistir de una condición inicial de
inicio (START) y una de finalización
(STOP).

En cada paquete enviado por el master


se espera un reconocimiento del slave
seleccionado. Si no responde debe
generarse el apropiado manejo de error
en dicha transferencia en una capa
superior del protocolo de comunicación.
CU11
I2C BUS

Los cambios en la línea de


SDA para transferencia de
datos se deben realizar
siempre con SCL en bajo.

Para comenzar una


transacción se debe generar
un flanco negativo en SDA
cuando SCL esté en alto.
Para terminar una
transacción se debe generar
un flanco positivo en SDA
cuando SCL esté en alto.
CU11
I2C BUS
Cuando el master comienza una transacción, manda una señal de START con SCL en «1».
En los próximos 8 estados en bajo de SCL, manda 7 bits con la dirección del dispositivo
elegido y otro bit en «0» o «1» para señalar que va a escribir o leer en el mismo.
En el noveno ciclo de SCL, el master pone la línea SDA en «Z» y espera a recibir un dato
por SDA (reconocimiento = acknowldge). Si recibe un «0» prosigue, sino ha habido un
error.
La cantidad de bytes subsiguientes son ilimitados y depende del sistema. Al finalizar cada
byte se debe pedir reconocimiento. Para terminar se debe generar una señal de STOP.
CU11
24LC02B(I2C 2K EEPROM)

Memoria EEPROM de 2Kbits en arreglo de 265 x 8.


Bus de comunicación serie de dos cables tipo I2C.
Velocidad de transferencia de 100KHz ó 400KHz.
Protección contra escritura por hardware.
Retención de datos hasta 200 años.
Mas de 1 millón de ciclos de borrado/escritura.
CU11
24LC02B(I2C 2K EEPROM)

Este modelo de memoria tiene una


identificación de 7 bits: 1010XXX.
CU11
24LC02B(I2C 2K EEPROM)
La escritura de un simple byte "BYTE WRITE" se realiza enviando :
1 - Dirección del dispositivo.
2 - Posición de memoria. MODO USADO AQUI
3 - Dato.

EL DISPOSITIVO AL RECIBIR
EL "STOP" LUEGO DE UN
PEDIDO DE "WRITE",
COMIENZA UN CICLO
INTERNO DE ESCRITURA
QUE PUEDE TARDAR HASTA SE ESCRIBEN 8 BYTES CONSECUTIVOS
5 ms...!!!

Se puede escribir
también, en múltiples
posiciones de memoria
consecutivas (hasta 8) denominado "PAGE WRITE", desde la inicial,
enviando cada dato con su respectiva confirmación (ACK).
CU11
24LC02B(I2C 2K EEPROM)

La memoria tiene un contador interno que se incrementa en cada acceso.


Si por ejemplo, quedó apuntando en la dirección N, al generar una sesión de
lectura como se muestra, se leerá el dato de la dirección N+1.
CU11
24LC02B(I2C 2K EEPROM)
MODO USADO AQUI

La forma convencional de lectura de una posición de memoria específica, es la de


Random Read. Se deben generar dos ciclos: uno START-ACK y otro START-STOP.

El primero direcciona el dispositivo y la posición de memoria deseada para leer.

El segundo direcciona nuevamente el dispositivo pero indicándole que se lo va a leer y


luego se adquiere el dato almacenado.
CU11
24LC02B(I2C 2K EEPROM)

El caso «secuencial» permite la lectura de varias posiciones de memoria consecutivas,


terminando la transacción con una señal de STOP.
CU11

En la placa Terasic DE0-Nano de Cyclone IV, las resistencias de pull-up ya están


insertadas en la placa del impreso.
CU11
Código del controlador I2C
CU11
CU11

IMPORTANTE:
EL DISPOSITIVO 24LC02, AL RECIBIR
EL STOP" COMIENZA UN CICLO
INTERNO DE ESCRITURA QUE TARDA
5 ms...!!!
=> ESTO DEBE SER CONSIDERADO
EN LA RUTINA DEL CONTROLADOR
"I2C" PARA EL MANEJO DE LA
MEMORIA 24LC02 .......!!!

QUE HABRÍA QUE MODIFICAR


EN ESTE PROYECTO ...???
CU11
CU11
CU11
CU11
CU11
CU11
CU11
Simulación de dos rutinas de escritura en la memoria serie EEPROM de
dirección 1010xxx en las posiciones de memoria 00 y 01
CU11

Rutina completa de la primera escritura


CU11

Zoom de la primera rutina desde comienzo de START y escritura del CONTROL BYTE
CU11

Zoom de la primera rutina desde escritura de WORD ADDRESS y WRITE DATA


CU11

Rutina de la segunda escritura desde START e indicando CONTROL BYTE y WORD ADDRESS
CU11

Rutina de la segunda escritura desde WORD ADDRESS y WRITE DATA


CU12
PROYECTO CU12

DISEÑO EN VHDL DE UN GENERADOR INDEPENDIENTE DE PWM (PULSE


WIDTH MODULATION) PROGRAMABLE.
CU12
GENERADOR "PWM" (Pulse Width Modulation)

Clock_50MHz
Reset_in
Generador PWM sal_pwm
data_in

Genera una onda cuadrada de ciclo de trabajo variable y frecuencia ajustable .

data_in (9 downto 0) = Define el ciclo de trabajo (resolución 1/1024 ó 1‰)


data_in (13 downto 12) = Define la frecuencia de referencia(50, 25, 10 ó 5 KHz)
CU12
GENERACIÓN DE SEÑAL "PWM" (Pulse Width Modulation)

clock_50mhz
t

clock_per
t

sal_pwm Desde 1 hasta 1022 ciclos de clock_per


t

Desde 1022 a 1 Período


de clock_per
mode_ucnt => "x x M1 M0 x x D9 ...............D0"
Rango de 1 a 1023
M1 M0 => F_pwm períodos de clock_per
0 0 50 KHz para definir el "1" lógico
0 1 25 KHz
1 0 10 KHz
1 1 5 KHz
CU12

Código del Generador PWM


CU12
CU12
CU12

Código del TestBench para


el Generador PWM
CU12
CU12

Período de la frecuencia = 20,48 us


CU12

Período de la frecuencia = 40,959 us

También podría gustarte