Los Retos de la Pepper - Hotboards/CodeBank8 GitHub Wiki

Este es un reto con mucho picante para el que se sienta muy salsa. Si te parecen muy sencillos, solo recuerda que se irán agregando mas y con mayor dificultad. Puedes resolver estos ejercicios con tu compilador favorito con o sin librería de apoyo. Te retamos a que los resuelvas sin librerías de apoyo =)

1.- Ligths On, es decir Leds ON

  • 1.1.- Parpadea a una frecuencia visible todos los leds conectados del puerto B.
  • 1.2.- Parpadea a una frecuencia visible el led conectado al Puerto B, pin 2 (Led 3).
  • 1.3.- Parpadea tres leds conectados al puerto B a diferentes frecuencias
  • 1.4.- Parpadea los leds del puerto B de manera alternada acorde a la secuencia mostrada (luces navideñas)
    D1  D2  D3  D4  D5  D6  D7  D8
t1   *      *        *       *
t2       *       *       *       *
           (repetir)
  • 1.5.- Cree un programa que cuente los números del cero al 255 y muestre la cuenta en los leds del puerto B.
  • 1.6.- Rotar un led encendido de izquierda a derecha en el puerto B
  • 1.7.- Rotar un led encendido de derecha a izquierda en el puerto B
  • 1.8.- Rotar un led apagado de izquierda a derecha en el puerto B
  • 1.9.- Rotar un led encendido de derecha a izquierda y después de izquierda a derecha, en el puerto B
  • 1.10.- Realizar la siguiente secuencia en los leds del puerto B
    D1  D2  D3  D4  D5  D6  D7  D8
t1   *                           *
t2       *                   *
t3           *           *
t4               *   *
               (repetir)
  • 1.11.- Combina la secuencia anterior con la siguiente
    D1  D2  D3  D4  D5  D6  D7  D8
t1               *   *
t2           *           *
t3       *                   *
t4   *                           *
               (repetir)

2.- Enter Interruptores

  • 2.1.- Leer el valor de los microswitch conectados al puerto D<4:7> y desplegar el valor en los leds del puerto B<0:3>
  • 2.2.- Leer el valor de los microswitch conectados al puerto D<4:7> y desplegar el valor en los leds del puerto B<4:7>
  • 2.3.- Leer el estado del microswitch conectado al puerto D pin 5, si esta en cero encender el led del puerto B pin 7, de estar en uno apagar el led.
  • 2.4.- Con los microswitch se pueden ingresar 16 valores (de 0 a 15). Con estos valores variar la frecuencia de parpadeo de los leds conectados al puerto B (ejercicio 1.1). siendo 0 leds apagados, el 1 la velocidad mas baja y 15 la velocidad mas alta.
  • 2.5.- Rotar los leds de izquierda a derecha si el valor de los microswitch es igual a 7 y si es igual a 10 rotar de derecha a izquierda
  • 2.6.- Modificar el programa anterior y agregar la opción de que se ingrese el numero 3 para que los leds tengan la secuencia del ejercicio 1.4
  • 2.7.- Utilizando el microswitch conectado al puerto D pin 4 realizar un programa que incremente una variable de 0 a 255 para después desplegar el valor en los leds del puerto B, la cuenta se deberá incrementar en uno cada que el estado del microswitch cambie de uno a cero.
  • 2.8.- Modificar el programa anterior para que cambie la forma de incrementar el valor de la variable. Usando el resto de los microswitch D<5:7> establecer el valor con el que se incrementara la variable. Si se ingresa un uno se incrementa de uno en uno, si se ingresa un dos se incrementa de dos en dos y así sucesivamente, hasta el máximo valor que pueden dar los 3 microswitch restantes (que es 7)

3.- Interrumpiendo el Tiempo

  • 3.1.- Configurar el Timer 0 para contar a un lapso de 200ms.
  • 3.2.- Active interrupciones globales y use al timer0 para generar una interrupción cada 100ms
  • 3.3.- Active las interrupciones con prioridades, repita el ejercicio anterior, pero esta vez usando una interrupción de baja prioridad
  • 3.4.- Con el timer0 genere un tick de sistema (interrupción) cada 10ms, use ese tick para parpadear un led a razón de 250 ms
  • 3.5.- Con el tick anterior parpadee un led cada 100ms, otro casa 250ms, otro cada 500ms y un cuarto cada segundo
  • 3.6.- Con el tick del ejercicio 3.4 haga rotar los leds del puerto B a razon de 300ms y tambien haga parpadear el led A1 cada 200ms
  • 3.7.- Cree un arreglo de datos con valores que representen lapsos de tiempo los cuales deberán decrementarse usando la interrupción creada en el ejercicio 3.4. Use estos canales de tiempo para parpadear los 8 leds del puerto a diferentes tiempos (ocupara un arreglo de 8 elementos, uno para cada tiempo de cada led)
  • 3.8.- Parpadee el led 1 cada 200ms, el led 8 cada 300ms y haga rotar un led apagado de izquierda a derecha, del led 2 al led 7
  • 3.9.- Genere una interrupción cada 20ms usando el timer 1, y parpadee un led cada segundo usando esa interrupción
  • 3.10.- Parpadee un led cada 300ms usando al interrupción del timer 2 y parpadee un segundo led cada 200ms usando la interrupción del timer 3. Configure a timer 2 en alta prioridad y timer 3 en baja prioridad
  • 3.11.- Repita el ejercicio anterior pero en esta ocasión ambas interrupciones con la misma prioridad
  • 3.12.- Haga un muestreo del botón conectado al pin A0 cada 10ms y cada 50ms (cada 5 muestreos) determine si el botón esta presionado o no. Use interrupciones con cualquier timer para establecer el tiempo.

4.- Why so Serial....... Port

  • 4.1 Configure el puerto serial 1 a una velocidad de 9600 bauds y mande cada segundo la letra D mayúscula por serial
  • 4.2 Mande cada segundo por serial el mensaje "Hola mundo"
  • 4.3 Cree la función void putchar(char c) la cual acepte un carácter como parámetro y que su trabajo sea mandar el carácter pasado por serial. Ejemplo puchar('H');
  • 4.4 Cree una función void printString(char *str) la cual acepte un puntero a arreglos de caracteres terminados en nulos (almacenados en memoria flash) y que su trabajo sea, mandar esa cadena por serial. Ejemplo printString("Hola mundo")
  • 4.5 Mande por serial el valor en decimal que se ingresa por los microswitches conectados al puerto D
  • 4.6 Mande por serial el valor en binario que se ingresa por los microswitches conectados al puerto D
  • 4.7 Repita el ejercicio 4.2, pero en esta ocasión use la interrupción por transmisión del puerto serial.
  • 4.8 Incremente una variable de 0 a 255 cada segundo, mande por serial los incrementos para ser visualizados por una terminal
  • 4.9 Repita el ejercicio anterior, pero esta vez incremente la cuenta de la variable con el botón de la tarjeta. Use el ejercicio 3.12 como base para leer el estado del botón.

5.- Serial Port Killer

  • 5.1 Configure el puerto serial a una velocidad de 9600 bauds e invierta un led cada que se reciba cualquier carácter desde la terminal de una PC
  • 5.2 Repita el ejercicio anterior pero esta vez invierta el estado del led cada que se reciba la letra d minúscula
  • 5.3 Repita el ejercicio anterior pero esta vez invierta el estado del led 1 cada que se reciba el carácter '1', el led 2 cuando se reciba el carácter '2' y así sucesivamente hasta el numero 8
  • 5.4 Invierta el estado de un led cada que se reciba por serial la cadena "led\r"
  • 5.5 Invierta el estado de 3 leds conectados al puerto B, cada que se reciban las cadenas "uno\r" led 1, "dos\r" led 2, y "tres\r" led 3
  • 5.6 Repita los 5 ejercicios anteriores pero esta vez usando interrupciones por recepción del puerto serial
  • 5.7 Cree un programa que realice un simple eco de caracteres, carácter que reciba por serial carácter que envía de regreso
  • 5.8 Cree un programa que realice un simple eco de cadenas de caracteres, cadena de caracteres que ingrese regrese la por serial. NOTA: un cadena deberá terminar con el carácter \r (es el ENTER)

6.- Analogías Análogas

  • 6.1 Lea el canal numero 2 del ADC y despliegue los 8 bits mas significativos de la lectura en los leds del puerto B
  • 6.2 Con el valor completo (10 bits) del canal 2 del ADC y los leds del puerto B. Cree un vumetro, es decir una barra de volumen, cuando el potenciómetro de una lectura de cero, todos los leds están apagados, cuando esta en el máximo valor (1024) todos los leds encendidos, cuando el potenciómetro esta a la mitad , solo los cuatro primeros leds encendido y así sucesivamente
  • 6.3 Mande la lectura del potenciómetro por el puerto serial serial cada segundo. Despliegue la información de la siguiente manera Valor del Potenciometro: <depliega el valor del potenciometro>. Ejemplo Valor del Potenciometro: 934
  • 6.4 Mande el valor del potenciómetro, por serial, pero esta vez su valor sera su correspondiente a voltaje. Recuerde el valor 0 representa cero volts y el máximo valor de 1024 representara 3.3 volts
⚠️ **GitHub.com Fallback** ⚠️