This section contains all legacy tutorials written by the Group ADT(Advanced Digital Technologies)of the Pontificia Bolivarian University, Bucaramanga, Colombia. Some of these tutorials are from 2011. However, they could be still useful for the community.

The manuals contain information about legacy boards and tools such as:
  • Spartan 3A Starter Kit
  • Raspberry Pi 1,Model B
  • Tutorial Wixel Pololu
  • Introducción - FRDM-KL46Z NXP
  • Codewarrior con un Sistema Tower
  • Altium 6 Tutoriales
  • ADT Board

Spartan 3A Starter Kit
Raspberry Pi 1,Model B
Tutorial Wixel Pololu
Introducción - FRDM-KL46Z NXP
Codewarrior con un Sistema Tower
Altium 6 Tutoriales
ADT Board

  Verilog Basics

Verilog Basics.pdf
Jun 12, 2014, 6:52 PM
  Tutorial ISim 
Tutorial ISim 1
Para los que usan Xilinx ISE 12.3 o mayor, este es un tutorial para saber como simular sus diseños usando ISim   Apr 16, 2011, 6:53 AM
  I. Introducción al Starter Kit: Spartan 3A 
Si ya tienes una FPGA encendida y conectada a tu PC, puedes ver este vídeo para configurarla con el diseño que tengas hecho...  May 1, 2011, 8:08 PM
Introducción y conceptos básicos de diseño en FPGA  Jun 30, 2011, 10:13 AM
Introducción: Encender un LED
Video tutorial de introducción al software ISE de Xilinx -crear un proyecto -crear un módulo -Crear un archivo UCF -Síntesis, Implementación Para la Spartan 3A starter kit  Apr 22, 2011, 8:44 PM
  II.Buses y Compuertas Lógicas en Verilog 
Buses y Compuertas en Verilog
Video Tutorial de descripción de buses y compuertas en Verilog  Mar 30, 2011, 7:57 AM
  III. Operador Condicional "?" 
Operador Condicional "?" Video Tutorial del uso del comando "?" como operador condicional en la descripción de Hardware en Verilog    Mar 30, 2011, 7:57 AM
  IV. Estructuras Combinacionales y Secuenciales 
Clase 5 a, Estructura Combinacional Always@(*)
  Mar 30, 2011, 7:59 AM
Solución y Proyecto Xilinx Clase 5 a  Mar 30, 2011, 7:59 AM
Clase 5 b Estructuras Secuenciales, Contadores
Los objetivos de esta clase son:Repasar los pasos para programar una FPGA, (Sintetizar, Implemetar y Generar).Conocer Como se puede describir hardware secuencial para diseñar un contador de 32 bits ascendente y descendente y describir el hardware por medio del lenguaje Verilog.   Mar 30, 2011, 7:59 AM
Solución y Proyecto Xilinx Clase 5 b  Mar 30, 2011, 7:59 AM
Clase 5c, Divisor de Frecuencia y Aplicación Piano de una 8va
Video FLV MEGAUPLOAD frown(lost file) Mar 30, 2011, 7:59 AM
Divisor de Frecuencia, Clase 5 c  Mar 30, 2011, 7:59 AM
Memoria ROM Contiene en Notas Musicales estilo MIDI la canción Dragon Ball GT.Si usted hizo la Practica Clase 5 c puede utilizar este modulo para hacer un reproductor de la canción.  Mar 30, 2011, 7:59 AM
  V. Maquina de Estado
Guía de construcción de máquinas de estados  Mar 30, 2011, 7:59 AM
  VI. Circuitos basados en Flip-Flops 
Guía de teoría acerca del cruce en dominios de reloj y ejemplos de circuitos basados a Flip-Flops.   Jun 30, 2011, 12:26 PM
Guía teórica acerca de los Fli-Flops y su utilización en circuitos en FPGA  Jun 30, 2011, 10:57 AM
Circuitos de prueba basados en Flip-Flops
En este video se demuestra el funcionamiento de distintos circuitos basados en Flip-Flops mediante la descripción de sincronizadores  Jun 30, 2011, 12:28 PM
  VII. Ejercicios de repaso 
Ejercicios que ayudaran a repasar conceptos adquiridos a lo largo del curso básico y servirán para auto-evaluar las habilidades que se tienen en el lenguaje Verilog HDL     Jun 9, 2011, 3:43 PM


  Plantillas y modulos de algunos tutoriales
Feb 21, 2015, 7:25 AM
Aug 19, 2015, 11:36 AM
Apr 22, 2015, 9:29 AM


 Manuales Verilog Basico Orientado a Diseño Digital



Raspberry-Pi Enable Sound


How to enable sound on Raspberry-Pi HDMI and Analog (Raspbian-Wheezy)
*Before starting startx
Use SuperUser (After every reboot) or use sudo before any command
sudo su
Install Firmware Updater
apt-get install ca-certificates git-core binutils
cp rpi-update /usr/local/bin/rpi-update
chmod +x /usr/local/bin/rpi-update​
Update Firmware
sudo rpi-update
Uncomment "hdmi_drive=2" on config.txt
nano /boot/config.txt
Install ALSA, MPlayer and PulseAudio
apt-get install mplayer mplayer-gui alsa-base alsa-utils pulseaudio mpg123
Add audio module to kernel
modprobe snd_bcm2835
echo 'snd_bcm2835' >> /etc/modules​
Configure ALSA driver for n Analog=1 HDMI=2 (Auto=0 Not recommended)
amixer cset numid=3 n
Replace asound.conf with:
   pcm.!default {
   type hw
   card 0

   ctl.!default {
   type hw
   card 0
nano /etc/asound.conf​
Reboot Raspberry Pi
Test audio without ALSA
cd /opt/vc/src/hello_pi/
 cd hello_audio​
Test analog output
./hello_audio.bin 1
Test audio with ALSA
Test analog output
amixer cset numid=3 1
speaker-test -t sine -f 600
Test HDMI output
amixer cset numid=3 2
speaker-test -t sine -f 600
Download mp3 file Hello.mp3
Play MP3 file
mpg123 Hello.mp3
Edited by Jose P Pinilla & Holguer A Becerra

How to enable video playback on raspberry pi

How to Enable video playback on raspberry pi (Raspbian-Wheezy)
How to run videos on Raspberry Pi:
Install dependencies for omxplayer (Only player right now that supports raspberry's GPU)
sudo apt-get install libpcre3-dev libpcrecpp0 libva-dev libva-x11-1 libva1
Install OMXPlayer (if not installed)
sudo dpkg -i omxplayer_0.0.1-arm.deb​


Add keyboard control to OMXPlayer using xterm:
sudo apt-get install xterm
Para utilizar los controles p(pausa) +/- volumen y otros
xterm -e omxplayer -o hdmi -r %f


Add a GUI to OMXPLayer:
tar xzf pexpect-2.3.tar.gz
cd pexpect-2.3
sudo python ./ install
wget -O - | tar xz
Download an HD video or use one from a pendrive, for example:
Inside tboplayer: 'Add' video file and 'Play'.
"Notice that video plays over the current screen displayed, leaving unwanted images behind.
To avoid this, do the following:
Create a file that contains this script (named e.g. ""):
sudo /opt/vc/bin/tvservice -p > /dev/null
sudo xterm -e omxplayer -o hdmi $@ > /dev/null
sudo chvt 1
sudo fbset -depth 8
sudo fbset -depth 16
sudo chvt 7

#This script takes advantage of a bug in 'tvservice' that leaves a black screen over your current tty
#Once the screen is black, the video can be played over it.
#A command 'q' is inserted to exit the player or when the video finishes
#To recover from the 'tvservice' black screen there is a change to tty 1 and then back to tty 7 where X is displayed
#Command 'fbset' recovers previous depth values to prevent wrong resolution display.​
Run the script with the video path as an argument:
sudo bash Iron_Man_3_Trailer_1080p.mp4
Edited by Jose P Pinilla & Holguer A Becerra

How to use GPIO on raspberry pi

How to use GPIOs on raspberry pi (Raspbian-Wheezy)

Taka a look at the GPIO header information of the raspberry pi, you can find it in the next links:
Note: The GPIO assignment for the raspberry pi is different between revision 1 and 2.
Do not use voltage levels greater than 3.3V, Raspberry pi doesn´t support 5V and doesn't have an over-voltage protection.
There are two different methods to write to or read from peripherals on embedded systems using Linux, the first one is creating a file-type access to the peripheral in the file system and the second is to write/read the base address of the memory allocated to the GPIO or module in the SoC usign pointers. This memory locations can be found in the datasheet for the  BCM2835 in the case of the raspberry pi.
Let's start with the first method (File System):
*Before starting startx
Use SuperUser (After every reboot) or use sudo before any command
sudo su
Connect an LED using a resistor between GPIO11 and GND.
Creating a File access to GPIO using console commands:
If you write to the ./export file in the /sys/class/gpio/ subdirectory, the system creates a file with a GPIO structure according to the input. In this case we want to create an access to write directly to GPIO11 in order to handle an LED.
Create a GPIO file access:
echo 11 > /sys/class/gpio/export 
Configure the Pin Direction (In/Out):
echo out > /sys/class/gpio/gpio11/direction
Write a value to turn on the LED using the GPIO11:
echo 1 > /sys/class/gpio/gpio11/value
Now your led should be ON!!!
Write a value to clear the LED using the GPIO11
echo 0 > /sys/class/gpio/gpio11/value
Now your led should be OFF!!!
Delete the created GPIO (11)
echo 11 > /sys/class/gpio/unexport
You are able to access to GPIO using python or any programming language. We wrote a python script to show how. Download
Open a new terminal and execute the script
python ADT_blink​
The script prompts the questions to determine which pin and how many times you want it to blink:
Type the number of the GPIO you want to blink : 11
Type the number of times you want it to blink e.g: 10
Now your GPIO 11 is blinking like a christmas tree.
Open the python script with a text editor and study all the lines (try to understand, is a simple script using file access)
Let's start with the Second method (Pointers):
If you want to read/write to GPIOs using pointers the better way is installing the bcm2635 library and understanding how it works, you can read the datasheet of bcm2835 starting with the section 1.2.2
Installing bcm2835 library
tar zxvf bcm2835-1.15.tar.gz​
make check
make install
Now you can easily use this library to access the GPIOs, the library uses pointers to write/read to the GPIOs or to changes the values in registers of the HW, modifying the function of each peripheral (PWM modules, UART, etc)
Download the code example written in C
Open the Terminal and use gcc to compile the code.
gcc -o main -l rt main.c -l bcm2835   ​

Execute the compiled code
Now your LED connected in the GPIO11 is Blinking!!! Like the example with the python script.
Open the C code with a text editor and study all the lines.
Now the Question is: What is the best way to access GPIOs on linux?
The WiringPi project is a library that includes an application for easy GPIO access.
For PWM it allows to configure hardware modules for dedicated PWM pins as well as using a software PWM solution on other pins.
Install WiringPi (WiringPi uses git, a source code management system):
sudo apt-get install git-core
Download or "clone" the WiringPi project and build it:
git clone git://
If you have already downloaded it, you can update to the latest version:
cd wiringPi
git pull origin
In order to use the WiringPi application you need to know the pin assignments related to it, which are explained in this site:
Using a HW module for PWM. Connect an LED using a resistor between GPIO18 and GND. (Pin 1 for WiringPi)
Refer to the "man page" of the recently installed WiringPi program called "gpio":
man gpio
Notice that you can configure a pin to be in, out, pwm, up, down or tri.
According to it, configure GPIO18 (WiringPi Pin 1) in HW PWM Mode using the command shell:
gpio mode 1 pwm
Write a value to the PWM module (from 1 to 1023):
gpio pwm 1 500
To remove the configuration of the pin, use:
gpio unexport 1
To remove all configurations:
gpio unexportall
Feel free to use the gpio program to configure other pins as input or output (PWM is only for special function pins like GPIO18(WiringPi 1), other PWM pins are occupied by the 3.5mm audio connector.
Using wiringPi.h and softPwm.h with C.(ADT_wiringPi.c)
This is a code example using wiringPi to configure a Soft-PWM pin.
In order to use the dedicated UART pins on the raspberry pi, first they have to be removed from their default application which is debugging.
To do this edit "/boot/cmdline.txt" and "/etc/inittab".
You can backup this files if you want to return to the default configuration:
cp /boot/cmdline.txt /boot/cmdline.bak
cp /etc/inittab /etc/inittab.bak​
Remove "console=ttyAMA0,115200" and "kgdboc=ttyAMA0,115200" configuration parameters from the "/boot/cmdline.txt" configuration file using nano editor.
nano /boot/cmdline.txt
Comment the last line on the "/etc/inittab" file. Put a '#' before "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100.
nano /etc/inittab
Now the RXD (GPIO15) and TXD (GPIO14) pins are available for general UART use.
This is an example application to use the UART pins using Python and the pyserial library:
To install Pyserial download the latest version from
Install by running the
python install
Open a Python terminal (remember to always be running under SuperUser by using sudo or su):
To test it without the need of another device simply connect raspberry's TXD and RXD pins to each other:
Run the following commands on the python terminal:
import serial
ser = serial.Serial("/dev/ttyAMA0")
ser.write("UART the Font")
read =
print read
The print command should have printed the string sent using the write command. To confugre the UART port, read the following introduction:
Install "minicom" for terminal emulation:
apt-get install minicom
You can use minicom using the next line command
minicom -b 9600 -o -D /dev/ttyAMA0
sudo crontab -e​
@reboot python /home/pi/LCD_raspi/


How to make a google talk robot on raspberry pi


Execute everything as 'sudo' or use 'sudo su' before starting.
Install all dependencies and clone the python sourcecode from github:
apt-get install python-pip
easy_install -U distribute
pip install RPi.GPIO xmpppy pydns
git clone
cd raspi_gtalk_robot
Edit the following lines to configure your chat:
BOT_GTALK_USER = This email address is being protected from spambots. You need JavaScript enabled to view it.' #Raspberry Pi username
BOT_GTALK_PASS = 'password' #Raspberry Pi password
BOT_ADMIN = This email address is being protected from spambots. You need JavaScript enabled to view it.' #Only user allowed to execute certain commands​
Execute the script:
 python ./
To test it send the following messages through Google Talk:
When using Pin functions, refer to the Pin Numbers instead of the Pin names, for example, the image shows an LED connected to Pin #19:

  • [pinon|pon|on|high] [pin] : turns on the specified GPIO pin
  • [pinoff|poff|off|low] [pin] : turns off the specified GPIO pin
  • [write|w] [pin] [state] : writes specified state to the specified GPIO pin
  • [read|r] [pin]: reads the value of the specified GPIO pin
Chat example:

  • [available|online|busy|dnd|away|idle|out|xa] [arg1] : set gtalk state and status message to specified argument
    • Example: busy I'm really busy, online I'm here
  • [shell|bash] [arg1] : executes the specified shell command argument after 'shell' or 'bash'
    • shell reboot

Note: The only command that requires Admin permissions in the original code are the ones that change the connection state. To change that, replace with this version.
How to add new functions?
Simply add this lines of code along with the rest of the methods found in
Automatic Reply
def command_003_love(self, user, message, args):
    '''I love you Pi'''
    self.replyMessage(user, "I love you too")​
Admin permission for command
def command_003_love(self, user, message, args):
    '''I love you Pi'''
    jid = user.getStripped() #Save username of contact
    # Verify if the user is the Administrator of this bot
    if jid == BOT_ADMIN:
        self.replyMessage(user, "I love you too")
        self.replyMessage(user, "Do I know you?")
Selective actions
Identify the unwanted user along with the ADMIN at the beginning of raspiBot-py
BOT_ADMIN = This email address is being protected from spambots. You need JavaScript enabled to view it.'
BOT_SPAM = "This email address is being protected from spambots. You need JavaScript enabled to view it."

def command_003_love(self, user, message, args):
    '''I love you Pi'''
    jid = user.getStripped() #Save username of contact
    # Verify if the user is the Administrator of this bot
    if jid == BOT_ADMIN:
        self.replyMessage(user, "I love you too")
    elif jid == BOT_SPAM:
        self.replyMessage(user, "I hate you")
        self.replyMessage(user, "Do I know you?")​
For more actions on GPIO Pins refer to:

How to configure a LAMP server (Spanish: Como configurar un servidor LAMP)

LAMP Server

How to configure a LAMP server (Spanish: Como configurar un servidor LAMP)
"Linux (operating system), Apache HTTP Server, MySQL (database software), and PHP, Perl or Python"
Ing. Diego Ricardo Páez Ardila

Servidor Raspberry Pi Debian Squeeze 

A continuación se explicará de forma detallada cómo configurar un Servidor LAMP. Se parte del punto de tener el sistema operativo instalado y configurada la comunicación ssh.

 El primer paso para la configuración del servidor, será comunicarse con el operador de internet con el fin de abrir los puertos virtuales del Router, el operador asignará una dirección IP estática a la que será dirigido el tráfico. Se debe abrir el puerto 80 para http, el 22 para ssh y el 21 para ftp. Otra opción consiste en ingresar directamente al router como administrador y abrir dichos puertos.

 1. Para conocer la información de la red del raspberry pi se ingresa en el terminal el comando ifconfigTeniendo la dirección IP estática asignada por el operador, en este caso, se debe configurar la raspberry con la misma dirección, para cambiar la IP se debe ingresar al siguiente archivo como root:


nano /etc/network/interfaces


Se reemplaza la línea “iface eth0 inet dhcp”  con lo siguiente:


iface eth0 inet static





Para guardar el archivo se presiona Control + O y para salir Control + X, el resultado se ve en la siguiente figura.



Después de modificar el archivo se reinicia el sistema utilizando el comando reboot. Al iniciar el sistema nuevamente se verifica que la IP sea la deseada con ifconfig y se realiza el ping de alguna página web para confirmar que todo funcione correctamente.



Control + c para salir del ping.


2.  Para tener un host en la red se requiere algún proveedor, para este servidor se utilizará el servicio de , ya que es gratuito y además realiza la actualización de los DNS, de esta forma la IP pública de nuestro servidor se encontrará siempre asociada al host.


Primero se debe crear una cuenta en, cuando la cuenta se halla activado se procede a crear el host. Para iniciar la interfaz gráfica se escribe el comando


pi@raspberrypi:~$ startx


Desde un navegador se hace el siguiente proceso:


1. Primero se selecciona add a host.



Seguido de esto se asigna  un nombre y se escoge un dominio de la lista.



Finalmente se crea el host.


Después de esto se descarga el software de no-ip para mantener conectado el host con la  dirección IP.


La función make debe encontrarse instalada en el sistema. Desde un terminal en modo root se ingresa lo siguiente:


root@raspberrypi:/home/pi/# apt-get install make

root@raspberrypi:/home/pi/# apt-get install gcc


Se accede a la carpeta descargada y se instala la herramienta de no-ip de la siguiente forma:


root@raspberrypi:/home/pi/# cd noip-2.1.9-1

root@raspberrypi:/home/pi/# make install noip2.c


Al realizar la instalación nos pedirá iniciar sesión con la cuenta de no-ip:


·       Please enter the login/email string for se escribe la dirección de correo o el nombre de usuario de nuestra cuenta en No-IP. Enter

·       Please enter the password for user debianisfreedom: se escribe la contraseña de nuestra cuenta de usuario en No-IP. Enter

·       Only one host [host registrado] is registered to this account. It will be used. Please enter an update interval: [30]: se pregunta la frecuencia con la que se actualizara la ip. Se deja por defecto 30 minutos. Enter

·       Do you with to run something at successful update?[N] (y/N): Enter

Después de realizado lo anterior se tiene configurado no-ip, pero aún falta que iniciar el proceso de actualización de DNS y que este proceso se ejecuta de forma automática. Para lograr esto se utiliza el script que se encuentra en la carpeta descargada de no-ip.


Se abre el editor de texto y se guarda el archivo con el siguiente código en /home/pi, con el nombre


 Se da permiso de ejecución al archivo desde el terminal en modo root:

root@raspberrypi:/home/pi/#  chmod +x

Después se copia el archivo creado a la carpeta init.d en la cual se encuentran los archivos que se lanzan al iniciar el sistema.

root@raspberrypi:/home/pi/#  cp /etc/init.d/

Después de eso accedemos al directorio:

root@raspberrypi:/home/pi/#   cd /etc/init.d/

Se añade el script al sistema con una prioridad baja, para que se ejecute al iniciar el sistema:

root@raspberrypi:/home/pi/etc/init.d/# update-rc.d defaults 18

Al culminar todos los pasos anteriores, se procede a iniciar el cliente.

root@raspberrypi:/home/pi/etc/init.d/# /etc/init.d/ start


3. Después de realizar la configuración de noip se procede a instalar el servidor web apache2.


root@raspberrypi:/home/pi/# apt-get install apache2


Se accede a un navegador que se encuentre fuera de nuestra red y se ingresa al host creado en noip, para probar de forma local se accede desde un computador diferente desde un navegador y se ingresa la ip asignada al raspberry. La carpeta por defecto del servidor se encuentra en /var/www, esta se modificara ingresando al archivo default de apache2 modificando la dirección de la carpeta a la deseada, en este caso /home/pi/server.


root@raspberrypi:/home/pi/# nano /etc/apache2/sites-available/default


La figura que se ve a continuación muestra la información almacenada en la carpeta server.


4. Después de tener el servidor instalado, se procede a instalar PHP, este lenguaje permitirá la creación de webs con contenido dinámico como texto, imágenes, videos entre otros:


Desde un terminal como root se ejecuta el siguiente comando.

root@raspberrypi:/home/pi/# apt-get install php5


Después de ejecutar este comando se reinicia el sistema.


Para confirmar que PHP este instalado, se debe crear un archivo en la carpeta del servidor de la siguiente manera:


root@raspberrypi:/home/pi/# nano /home/pi/server/prueba.php


Se escribe lo siguiente:





Se guarda y cierra el archivo, se procede al navegador ingresando la ip del raspberry pi o escribiendo localhost/prueba.php y debe aparecer lo siguiente:



10. Finalmente se instala MySql, esta aplicación permite la creación y manejo de bases de datos en el servidor.


root@raspberrypi:/home/pi/# apt-get install mysql-server mysql-client php5-mysql


Cuando se está realizando la instalación el software pedirá una contraseña para acceder a mysql, por lo tanto se debe ingresar la contraseña deseada.


Se reinicia el sistema después de esta instalación.


Al iniciar, en modo root se debe comprobar que todo esté funcionando bien por esto se ingresan los siguientes comando.


root@raspberrypi:/home/pi/# service mysql start


Se ingresa la contraseña creada anteriormente después de la primera –p


root@raspberrypi:/home/pi/# mysql -uroot –ppassword


Debe ingresar al modo mysql si todo ha quedado bien, para salir al root nuevamente se ingresa control + c.



Con esto finaliza la instalación del servidor LAMP.


How to connect an LCD interface on Raspi and install VNC

Written By: Peter Gomez & Holguer A Becerra

for connecting a raspberry pi with a computer through a network of internet access, the first thing to know is the IP address of the raspberry pi, this direction is taken to a putty which allows the connection through network internet access, so you can access the console raspberry pi. Seeing as follows:


Accessing the Console by entering the login and password


When you are in the console window, tip in the first command to download the file “” with the following command:



Now you have to configure your crontab daemon. You can edit your crontab configuration file by executing the following command:

sudo crontab –e

At the end of the file add the line following line to execute “” everytime your system reboots.

@reboot python /home/pi/

Save and exit the file by pressing CTRL + X. Press Y to confirm the saving. Finally reboot the system by the command:

sudo reboot



USB Bulk Transfer - Labview & Pic 18FXX5X

Autor principalJUAN CAMILO ATENCIA AMÍN (Ing Electrónico UIS).
Supervisor: Holguer A Becerra (Ing Electrónico UPB).
Objetivo: Brindar a los estudiantes y profesionales en la electrónica o áreas afines, herramientas y conocimientos que permitan utilizar en sus productos, proyectos o desarrollos modos de comunicación sencillos y rapidos sobre interfaces universales(USB Bulk Transfer protocol), para dejar de lado sistemas comunes de transmisión USB-Serial RS232 los cuales son muy lentos y requieren generalmente de Hardware externos FTDI.

REQUISITOS(Puede ser cambiado por software libre):

1)    Labview versión 2010 ó superior (Versión de prueba por 30 días).

2)    Proteus v7.7 o superior (Versión de prueba).

3)    Un PIC18f4550, CRYSTAL de 20MHZ y Cable USB.

4)    CSS 4.4 o superior (Versión de prueba).



Puedes cambiar el PIC poniendo la librería (.h) correspondiente para el CCS. Por ejemplo, en vez de usar el PIC 18F4550 queremos usar el PIC 18F2550, entonces hacemos lo siguiente, donde pone:

#Include <18F4550.h>

Lo cambiamos por:

#Include <18F2550.h>   

Los "#fuses" del programa CCS están configurados para poner un cristal de 20 MHz. Si quieres poner cualquier otro cristal (de 4 a 48 MHz.)

Puedes descargar el Driver que sirve para cualquier versión de windows aqui

Pudes descagar la solución desde aqui.



Por: Jesus Fabian Santana Hernandez y Juan Camilo Dueñas Moreno
Materia: Comunicaciones Digitales.
Docente: Holguer A Becerra
Universidad Pontificia Bolivariana


En esta practica usted se familiarizara con la plataforma FRDM-KL46Z de freescale, la cual contiene un procesador ARM Cortex M0+ de ultra bajo consumo, que utilizaremos a lo largo del semestre en los diferentes proyectos de clase.
  1. Descargue el datasheet de la plataforma FRDM-KL46Z.
  2. Ahora identifique los perifericos conectados a la plataforma y numerelos. Ademas, identifique los pines libres de la plataforma o GPIOs.
  3. Descargue el datasheet del chip MKL46Z256, el manual de referencia, el manual del cortex M0+ y responda:
    1. ¿Cual es la frecuencia maxima de operación del chip?
    2. ¿Cual es el consumo de energia en Watts?
    3. ¿Cual es su capacidad de memoria en Bytes?(Volatil y No volatl)
    4. ¿Cuantos I/Os tiene? y comparelos con cuantos estan libres y disponibles en la plataforma FRDM de desarrollo.
    5. ¿Que es un PLL?
    6. ¿Cuantos ADC tiene el chip y cual es su resolucion en bits? y frecuencia de operacion?
    7. ¿Cuantos DAC tiene el chip y cual es su resolucion en bits? y frecuencia de operacion?
    8. ¿Cuantos canales de PWM tiene disponibles y cual es su resolucion, y frecuencia?
    9. ¿Cuantos canales SPI dispone el sistema?  y frecuencia de operacion?
    10. ¿Cuantos timers tiene el sistema?  y frecuencia de operacion?
    11. ¿Cuantos Canales UART tiene el sistema?
    12. ¿Cuantos Stages de Pipeline tiene el sistema?
    13. ¿Què tipo de acceso a memoria tiene, Von Neuman o Hardvard modificado?
    14. ¿Cuantas instrucciones en lenguaje ensamblador tiene el sistema?
    15. ¿Cuantos registros tiene el sistema?
    16. ¿Què es NVIC y en que consiste?, cuantas intrerrupciones tiene el sistema?
    17. ¿Cuantos ciclos de maquina gasta un move en assembler en el ARMCortex M0+?
    18. ¿Cuantos ciclos de maquina gasta un multiply en assembler en el ARMCortex M0+? ==> ¿Por qué es importante saber esto?
  4. Una vez usted tenga la respuesta a las anteriores preguntas y las tenga claras(Salen en el parcial), usted puede proceder a trabajar con la plataforma, para esto debe:
    1. Instale el KDS- V2.0.0, descarguelo de la pagina de freescale.(Haga todo como administrador)
    2. Ahora descargue los devices Freescale_KSDK1.0.0_KL43Z_1.0.1, de la pagina de Freescale.
    3. Una vez instalado el KDS, usted debe bajar los siguentes componentes
    4. Abra el KDS y escriba en "Workspace" el nombre de PKinetis
    5. Descomprima los componentes que descargo en una ruta cercana a la Raiz C:\Componentes.
    6. Seleccione en el menu, processor expert-> Import component(s)
    7. Seleccione los componentes que va instalar y oprima open.

    8. Conecte la tarjeta de desarrollo FRDM-KL46Z y verifique que la los drivers de esta estan instalados correctamente(Conectelo al mini usb que dice SDA)..
    9. Ahora vaya a File->New-> Kinetis Design Studio y llame el proyecto "mi_primera_vez", oprima siguiente y seleccione el procesador a trabajar, oprima siguiente y seleccione "Processor Expert" y oprima Finish.

    10. Ahora de doble click sobre el componente CPU y modifique el procesador seleccionado al de la tarjeta(Mire encima del chip de la tarjeta para que verifique la referencia seleccionada).

    11. Ahora vaya a System oscillator 0, y active la casilla "System oscillator 0", seleccione en clock source "External Crystal"

    12. Ahora vaya a "Components Library" y seleccione el componente Port I/O-> BitIO_LDD y dele doble click para añadirlo, descargue el esquematicode la FRDM board, verifique en que pin esta ubicado el pin del procesador que esta conectado al LED(Verde) de la board cerca al Jumper.

    13. Una vez añadido el BitIO_LDD, renombrelo  dando click derecho para que se vea de la siguiente forma

    14. Este componente debe modificarse para que se conecte o se comunique con el pin que esta conectado al LED verde, por lo tanto usted debe verificar donde esta conectado el LED verde en el esquematico, y se dara cuenta que esta conectado al pin PD5.

    15. Modifiique para que el puerto de un bit sea solo de salida y que se inicialice en 0 y oprima CTRL+S, para guardar cambios.
    16. Ahora, oprima el siguiente boton para añadir al proyecto los cambios de los componentes.

    17. Una vez generado los componentes, vaya a "Sources->Main.c", mire el encabezado del archivo donde vera, una libreria llamada "Green_led.h", manteniendo oprimido el boton CTRL y con el click izquierdo oprimima sobre ella. Esto lo llevara a la libreria que contiene los prototipos de las funciones que manejan el pin PD5 o el led verde, busque el prototipo de la funcion "void Green_Led_PutVal(LDD_TDeviceData *DeviceDataPtr, bool Val);" y lea la descripcion en su parte superior.

    18. La funcion "void Green_Led_PutVal(LDD_TDeviceData *DeviceDataPtr, bool Val);" tiene dos argumentos, el primero es la direccion del puerto donde se quiere escribir el valor 0 o 1, que corresponde al segundo argumento. Usted puede ir dentro de esta funcion de la misma manera que accedio a la libreria, asi que oprima CTRL sobre esta funcion y verifique por usted mismo que hace con estos argumentos. Explore mas y mas dentro hasta que lo lleven a la libreria  "MKL46Z4.h"

      "Observe que el argumento DEviceDatPtr no se usa", peor observe en detalle "¿Què es Green_Led_Module_BASE_ADRESS, y PORT_MASK?"
    19. Este proceso se hace para que se de cuenta, que los componentes dados por el proceso expert, estan todos atados a una libreria madre, la cual contiene el acceso directo a los puertos del sistema y configuracion de todos los registros del sistema. De alguna manera decirle, que usted esta sobre una capa superior que le facilita las cosas, y debe apreciar esto.
    20. Ahora vaya nuevamente al archivo "Main.c", y modifiquelo de la siguiente manera:

    21. De click derecho sobre la carpeta "mi primera vez" del Project Explorer, para construir el proyecto
    22. Una vez construido el proyecto, aparecera un insecto en la carpeta, este archivo es de extension .elf y es el archivo que contiene las instrucciones que ejecutara el procesador

      Nota: si no construyo el proyecto verifique errores en el codigo.
    23. Ahora de click derecho sobre la carpeta "mi primera vez" nuevamente y vaya a Debug As-> Debug Configurations...(DEBE TENER LA TARJETA CONECTADA)

      Modifique de la siguiente manera el programador, oprima en aplicar, y luego oprima DEBUG.

    24. Una vez ha oprimido DEBUG, se empezara a compilar de nuevo el proyecto y empezara a descargar el archivo .elf sobre la plataforma.
    25. La interfaz grafica cambiara a modo debug y aparecera de esta manera:
    26. Ponga "BreakPoints en el codigo" para ir a lineas especificas cuando estas se vayan a ejecutar, y oprima el boton de ejecucion play o F8(Como tarea verifique que hace F5,F6 y CTRL+F2 ), po rahora solo oprima F8 cada breakpoint. Y verifique lo que pasa en el codigo, y el LED verde de la board.
    27. Quite los BreakPoints, y deje ejecutar indefinidamente el codigo.
    28. ¿A que frecuencia el led se prede y apaga? y por qué?
    29. Ahora modifque el codigo de la siguiente manera.
    30. Haga Build, y Debug del nuevo codigo, y verifique que hace la el procedimiento "delay".
    31. Modifique el codigo de la siguiente manera:
    32. ¿Qué paso con el LED, tiitla mas rapido o lento?, por què sucede esto?
    33. Ahora vaya al processor expert y añada otro BitIO_LDD y llamelo "button1", esta vez configurelo de entrada, y modifiquelo de tal forma que este conectado al PushButton(SW1), verifique con el esquematico.
    34. Como se dio cuenta tambien en el esquematico, los pushbuttons no tienen resistencia de Pull Up, se debe añadir configurando el puerto de entrada y ponerla. Para esto busque un componente en el processor expert llamado "Init_GPIO" y modifiquelo de la siguiente manera, luego oprioma CTRL+S para guardar cambios.

      Se selecciona el puerto C, porque es este el cual esta conectado al push button seleccionado, el PTC3, es alli donde se debe poner la resistencia de PULL UP.
    35. Genere el codigo del processor expert.
    36. Ahora modifique el codigo para que se vea de la siguiente manera.
    37. Compile y haga Debug del codigo, ¿Qué sucede cuando se oprime el boton, porque es importante PTC_Init(), que hace button1_GetVal()?
    38. Ahora añada el componente "ExtInt", y modifiquelo de la siguiente manera

    39. Modifique el button1, y active el Pin Sharing tambien

    40. Genere el processor expert de nuevo, y modifique el main.c para que luzca de la siguiente manera:

    41. Vaya al Events.C y vera un procedimiento llamado EInt1_OnINterrupt(Void), modifiquelo de la siguiente manera

      "Ponga el breakpoint en la funcion, el punto Azul"
    42. Ahora Compile, y haga DEBUG.
    43. ¿Qué sucede cuando oprime el button1?
    44. ¿Por qué el debug salta a la funcion de la interrupción?
    45. ¿Qué hace el codigo dentro de la interrupción?
    46. ¿Como funciona una interrupcion en el procesador ARM Cortex M0+?==> lea el siguiente documento e investigue mas, en los manuales de referencia de El ARM Cortex M0, el diagrama que usted busca saldra en el parcial, palabra clave "interrupt exception handling Cortex M0+", busque el diagrama Hardware y diargama de tiempos
    47. ¿Què significa la prioridad cuando se habla de interrupciones?
    48. Ahora añada un componeten llamado "TimerInt" y modifiquelo de la siguiente manera, para generar una interrupcion cada 1000 ms
    49. Genere el processor.
    50. Vaya de nuevo el archivo "Events.c" y vera que se ha añadido a interrupcion del timer, modifiquelo para que se vea de la siguiente forma.
    51. ¿Qué sucede con el led?, ¿Qué sucede si oprime el button1?
    52. Agrege el componente ahora llamado  "SegLCD_LDD" y modifiquelo de la siguiente manera

    53. Descargue el siguiente archivo  y la carpeta LCD peguela en Sources

    54. Modifique el codigo del main.c para que se vea asi, detalle cada linea a linea y entiendala.

    55. Modifique tambien el codigo de la interrupcion del timer:
    56. Compile y haga Debug.
    57. Responda:
      ¿Por qué en el main.c se pone extern int seconds, y en el events.c solo int seconds?, ¿Qué significa Extern?.
    58. ¿Qué significa LDD_TDeviceData *MySegLCDPtr; y que tipo de variable es?, para que sirve?
    59. ¿Qué hace la linea MySegLCDPtr = SegLCD1_Init(NULL);? y para que sirve.
    60. ¿Qué hace sprintf?
    61. ¿Qué hace vfnLCD_Write_Msg((uint8 *)sLCDBuffer);?
    62. ¿Cuantos caracteres maxio, se pueden imprimir sobre el LCD?
    63. ¿Por qué se usa %04i y %04s en el sprintf?
    64. ¿Para què se usa el siguiente codigo?

    65. ¿Què hace el siguiente codigo, y quien modifica seconds?
    66. ¿Què tiene que hacer para que el conteo sea mas rapido en seconds?
    67. ¿Què hace el siguiente codigo, explique en detalle?
      int seconds=0;
      void TI1_OnInterrupt(void)
      Green_Led_PutVal(NULL,seconds & 1);


Tutorial: Encender y apagar un LED con ayuda de un Timer



Altium Designer 6: Tutorial de Creación de Esquemáticos



Altium Designer 6: Tutorial de Comandos PCB


Altium Designer 6: Simulación de circuitos


Altium Designer 6: Tutorial de Circuito 3D


Altium Designer 6: Tutorial de manejo y creación de librerías



Multimedia ADT
This is a multimedia focused board made for the DE0-Nano Development Kit in order to allow users to further develop embedded applications. 
Different capabilities are included to improve the user interface (mouse/keyboard) with the baord, along with basic display (VGA 4bit/RGB) and Stereo Audio, an SD card slot allows the storage of multimedia information.
LED power indicator
3        Res 4k    Ohm 1/4W
3        Res 2k    Ohm 1/4W
3        Res 1k    Ohm 1/4W
3        Res 510  Ohm 1/4W
4        Res 10k  Ohm 1/4W
1        Res 330  Ohm 1/4W
2        Res 3.3k Ohm 1/4W
2        Res 82    Ohm 1/4W
2        Res 2k    Ohm 1/4W
2        Res 120  Ohm 1/4W
2        Cap 1uF 
1        HDF15 VGA
1        3.5mm Audio Jack
1        PS2 DIN6
2        Cap 
1        3mm LED
1        SD connector
1        2x20 Male Header Pins
1        16x1 Male Header Pins
2        2x1   Male Header Pins
Download Shematic(Download this file (test.m)Schematic PDF Download this file (test.m)Eagle)
Video of Multimedia ADT working:                           
HW  Demo Sources: Download
SW  Demo Sources: Download
Demo HW and SW Binaries(With Nios II): HW Download(.sof)
                                                                              SW Download(.elf)
Tutorial Video to generate the SW and HW of Demo: 

Other Videos(Using the PCB):