Giter Site home page Giter Site logo

tectijuana / interfaz Goto Github PK

View Code? Open in Web Editor NEW
30.0 10.0 46.0 101.49 MB

Lenguajes de Interfaz para ISC

License: GNU General Public License v3.0

Shell 4.37% Assembly 43.04% C 5.90% C++ 1.61% Dockerfile 12.37% CMake 4.57% Python 27.49% Makefile 0.64%

interfaz's Introduction

Periodo (2024) ENERO-JUNIO
Materia LENGUAJES DE INTERFAZ, Lunes a Jueves de 2-3pm y 3-4pm
Grupo SCC-1014SC6A y SCC-1014SC6C
Caracterización Esta asignatura aporta al perfil del Ingeniero en Sistemas Computacionales las siguientes habilidades: - Implementa aplicaciones computacionales para solucionar problemas de diversos contextos, integrando diferentes tecnologías, plataformas o dispositivos - Desarrolla y administra software para apoyar la productividad y competitividad de las organizaciones cumpliendo con estándares de calidad. - Coordina y participa en equipos multidisciplinarios para la aplicación de soluciones innovadoras en diferentes contextos. - Diseña e implementa interfaces para la automatización de sistemas de hardware y desarrollo del software asociado. La presente asignatura aporta los conocimientos para el diseño e implementación de interfaces hombre-máquina y máquina-máquina para la automatización de sistemas. El desarrollo, implementación y administración de software de sistemas o de aplicación que cumpla con los estándares de calidad con el fin de apoyar la productividad y competitividad de las organizaciones. Para que desempeñe sus actividades profesionales considerando los aspectos legales, éticos, sociales y de desarrollo sustentable y a la vez le permita poseer las habilidades metodológicas de investigación que fortalezcan el desarrollo cultural, científico y tecnológico en el ámbito de sistemas computacionales y disciplinas afines.
Objetivos Desarrollar software para establecer la interfáz hombre-máquina y máquina-máquina.
Unidad Competencia Especifica De la Unidad Actividades de Aprendizaje Actividades de Enseñanza Desarrollo de Competencias Genéricas Horas Teo-Pra Criterios de Evaluación Fuentes Apoyos Didacticos Eval Núm. Sem.
Diag Form Suma
01.Introducción al lenguaje ensamblador - Conoce la arquitectura y organización de un procesador y la estructura de un programa en ensamblador e identifica la relación entre ambos. - Investigar la estructura y organización de un procesador (CPU). Discutir y formalizar grupalmente lo investigado. - Analizar los registros más importantes que contiene un CPU, así como las funciones de los mismos. - Describir modos de direccionamiento a memoria y efectuar ejercicios. - Realizar ejemplos sencillos de cómo estructurar un programa fuente y que esté despliegue mensajes en el monitor con instrucciones básicas en lenguaje ensamblador * Estar atento * No faltar a clase * Realizar las practicas propuestas en casa (y laboratorios) *Participación en clase preguntar cualquier duda * Apoyo al maestro en presentación de temas alternativos que ayuden al incremento del conocimiento de los estudiantes. Poseer habilidades de Análisis de problemas, e identificación de componentes de hardware asociadas al software. Utilizar algún lenguaje de programación de alto nivel. Procesar e interpretar datos. Representar e interpretar conceptos en diferentes formas. Modelar fenómenos y situaciones. Pensamiento lógico, algorítmico, heurístico, analítico y sint�tico. Potenciar las habilidades para el uso de tecnologías de informaci�n. Resolución de problemas. Analizar la factibilidad de las soluciones. Optimizar soluciones. Toma de decisiones. 10 Examen practico
Lista de Cotejo
Exposiciones
Demostraciones
-Raspberry Pi Assembly Language Programming ARM Processor Coding (2019), Stephen Smith, APRESS.
-PRÁCTICAS DE ENSAMBLADOR BASADAS EN RASPBERRY PI, ANTONIO JOSÉ VILLENA GODOY UNIVERSIDAD DE MÁLAGA.
-Assembly Language using the Raspberry Pi: A Hardware Software Bridge (2017) Robert Dunne.
-Raspberry Pi Computer Architecture Essentials, Andrew K. Dennis (2016)
Internet, Apoyo con otros maestros para efecto de practicas, Paginas de tutoriales de Ensamblador 00 00 00
02.Programación básica - Conoce y aplica instrucciones del lenguaje ensamblador, para programar aplicaciones de interfaz . - Realizar investigación y listar las principales instrucciones de programación en lenguaje ensamblador. - Desarrollar programas por medio de prácticas en lenguaje ensamblador, los cuales ejemplifiquen las diferentes instrucciones y funciones básicas así como la forma de estructurarlas. * Estar atento * No faltar a clase * Realizar las practicas propuestas en casa (y laboratorios) *Participación en clase preguntar cualquier duda * Apoyo al maestro en presentación de temas alternativos que ayuden al incremento del conocimiento de los estudiantes. Poseer habilidades de Análisis de problemas, e identificación de componentes de hardware asociadas al software. Utilizar algún lenguaje de programación de alto nivel. Procesar e interpretar datos. Representar e interpretar conceptos en diferentes formas. Modelar fenómenos y situaciones. Pensamiento lógico, algorítmico, heurístico, analítico y sint�tico. Potenciar las habilidades para el uso de tecnologías de informaci�n. Resolución de problemas. Analizar la factibilidad de las soluciones. Optimizar soluciones. Toma de decisiones. 18 Examen practico
Lista de Cotejo
Exposiciones
Demostraciones
-Raspberry Pi Assembly Language Programming ARM Processor Coding (2019), Stephen Smith, APRESS.
-PRÁCTICAS DE ENSAMBLADOR BASADAS EN RASPBERRY PI, ANTONIO JOSÉ VILLENA GODOY UNIVERSIDAD DE MÁLAGA.
-Assembly Language using the Raspberry Pi: A Hardware Software Bridge (2017) Robert Dunne.
-Raspberry Pi Computer Architecture Essentials, Andrew K. Dennis (2016)
Internet, Apoyo con otros maestros para efecto de practicas, Paginas de tutoriales de Ensamblador 00 00 00
03.Modularización - Aplica macros y procedimientos en el desarrollo de aplicaciones de software orientado a interfaz en lenguaje ensamblador. - Realizar investigaciones sobre los conceptos macro y procedimiento, analizando sus semejanzas y diferencias. - Analizar el funcionamiento de un programa que no utiliza macros o procedimientos en su funcionamiento, todo esto utilizando un software que permita obtener datos estadísticos del funcionamiento de los programas en depuración. - Desarrollar programas en un lenguaje de programación que haga uso de macros o procedimientos, posteriormente analizar el funcionamiento interno de los programas desarrollados haciendo el uso del software que permita obtener datos estadísticos sobre el funcionamiento de los mismos. * Estar atento * No faltar a clase * Realizar las practicas propuestas en casa (y laboratorios) *Participación en clase preguntar cualquier duda * Apoyo al maestro en presentación de temas alternativos que ayuden al incremento del conocimiento de los estudiantes. Poseer habilidades de Análisis de problemas, e identificación de componentes de hardware asociadas al software. Utilizar algún lenguaje de programación de alto nivel. Procesar e interpretar datos. Representar e interpretar conceptos en diferentes formas. Modelar fenomenos y situaciones. Pensamiento lógico, algoritmico, heurístico, analítico y sintático. Potenciar las habilidades para el uso de tecnologías de información. Resolución de problemas. Analizar la factibilidad de las soluciones. Optimizar soluciones. 21 Entregar las evidencias de prácticas por unidad y propuesta de proyecto final, avances 100% (30% por avance) -Raspberry Pi Assembly Language Programming ARM Processor Coding (2019), Stephen Smith, APRESS.
-PRÁCTICAS DE ENSAMBLADOR BASADAS EN RASPBERRY PI, ANTONIO JOSÉ VILLENA GODOY UNIVERSIDAD DE MÁLAGA.
-Assembly Language using the Raspberry Pi: A Hardware Software Bridge (2017) Robert Dunne.
-Raspberry Pi Computer Architecture Essentials, Andrew K. Dennis (2016)
Internet, Apoyo con otros maestros para efecto de practicas, Paginas de tutoriales de Ensamblador 00 00 00
04.Programación de dispositivos - Programar interfaces de software y hardware para la manipulación de puertos y dispositivos de computadora. - Analizar el funcionamiento del buffer de video de una computadora, mediante la lectura en modo texto del mismo. - Desarrollar programas en lenguaje ensamblador para acceder a los dispositivos de almacenamiento de la computadora. - Diseñar una interfaz de hardware utilizando algún tipo de integrado programable (ej. Microcontrolador). - Diseñar una interfaz de software en algún lenguaje de programación para controlar la interfaz de hardware utilizando los puertos paralelos, seriales y USB de la computadora. * Estar atento * No faltar a clase * Realizar las practicas propuestas en casa (y laboratorios) *Participación en clase preguntar cualquier duda * Apoyo al maestro en presentación de temas alternativos que ayuden al incremento del conocimiento de los estudiantes. Poseer habilidades de Análisis de problemas, e identificación de componentes de hardware asociadas al software. Utilizar algún lenguaje de programación de alto nivel. Procesar e interpretar datos. Representar e interpretar conceptos en diferentes formas. Modelar fenómenos y situaciones. Pensamiento lógico, algorítmico, heurístico, analítico y sint�tico. Potenciar las habilidades para el uso de tecnologías de informaci�n. Resolución de problemas. Analizar la factibilidad de las soluciones. Optimizar soluciones. Toma de decisiones. 16 Prototipo de proyecto final funcional documento terminado en formato APA -Raspberry Pi Assembly Language Programming ARM Processor Coding (2019), Stephen Smith, APRESS.
-PRÁCTICAS DE ENSAMBLADOR BASADAS EN RASPBERRY PI, ANTONIO JOSÉ VILLENA GODOY UNIVERSIDAD DE MÁLAGA.
-Assembly Language using the Raspberry Pi: A Hardware Software Bridge (2017) Robert Dunne.
-Raspberry Pi Computer Architecture Essentials, Andrew K. Dennis (2016)
Internet, Apoyo con otros maestros para efecto de practicas, Paginas de tutoriales de Ensamblador 00 00 00

Cool Text: Logo and Graphics Generator

La presente asignatura aporta los conocimientos para el diseño e implementación de interfaces hombre-máquina y máquina-máquina para la automatización de sistemas. El desarrollo, implementación y administración de software de sistemas o de aplicación que cumpla con los estándares de calidad con el fin de apoyar la productividad y competitividad de las organizaciones. Para que desempeñe sus actividades profesionales considerando los aspectos legales, éticos, sociales y de desarrollo sustentable y a la vez le permita poseer las habilidades metodológicas de investigación que fortalezcan el desarrollo cultural, científico y tecnológico en el ámbito de sistemas computacionales y disciplinas afines.

Cool Text: Logo and Graphics Generator

Activación de Student Pack de GitHub.com, se hará la donación de miles de doalres de software de licencia pero las condiciones son CUENTA DE CORREO INSTITUCIONAL.

Es requisito indispensable registrarse en GitHub utilizando un nombre de usuario que combine su apellido y nombre (ApellidoNombre). Además, se debe añadir una fotografía de perfil actual. Es importante destacar que GitHub implementa políticas de seguridad estrictas, incluyendo el bloqueo de la IP de su equipo después de tres intentos fallidos de acceso, para prevenir el abuso en la reiteración de intentos de inicio de sesión. Como plataforma profesional, se advierte de antemano sobre estas medidas para garantizar un uso adecuado.

Si ya posee una cuenta en GitHub con proyectos profesionales bajo su nombre de usuario actual, no es necesario realizar cambios. Sin embargo, si su cuenta contiene principalmente material académico que no afecta a terceros, le solicitamos amablemente que modifique su nombre de usuario para incluir la fotografía utilizada en el aula virtual. Asegúrese de que la cuenta esté asociada con su dirección de correo electrónico institucional (@tectijuana.edu.mx), aunque es posible vincular más de una dirección de correo electrónico a su perfil de GitHub.

Condiciones Académicas

  1. Introducción Intensiva: La primera semana del curso será particularmente intensiva, funcionando como un periodo de regularización para asegurar que todos los estudiantes se adapten al ritmo de trabajo propuesto. Este tiempo también nos permitirá identificar y potenciar las habilidades técnicas de cada participante.

  2. Formación de Equipos: Los equipos de trabajo se formarán de manera aleatoria a través de GitHub Education Classroom, que además servirá como el repositorio principal para las prácticas. Es importante notar que la composición de los equipos no será permanente, permitiendo así diversas dinámicas de colaboración a lo largo del curso.

  3. Dinámica Semestral: A partir de medio semestre, los lunes y miércoles se dedicarán exclusivamente a resolver dudas, mientras que los martes y jueves estarán enfocados al trabajo en equipo. Durante las sesiones, se proporcionará información detallada sobre la organización de cada semana.

  4. Certificación en C++: Para la certificación en C++, se utilizará la plataforma SoloLearn, disponible para Android, iPhone y PC. Es necesario activarla con una cuenta personal para obtener al final un certificado validado mediante un enlace. Es crucial entender que no se tolerará la manipulación de certificados académicos.

  5. GitHub PRO: Se activará una cuenta PRO en GitHub.com para cada estudiante, con un valor anual de $90 USD. Esta cuenta permitirá la presentación ilimitada de proyectos de desarrollo de software, tanto abiertos como cerrados, y facilitará la visibilidad y la indexación a nivel mundial. El objetivo es promover el perfil de cada estudiante en comunidades internacionales y fomentar oportunidades de vinculación y promoción.

  6. Figma para Educación: Se invita a los estudiantes a utilizar Figma con una beca educativa valorada en $80 USD. Esta herramienta es ideal para la entrega de proyectos colaborativos académicos que no requieran código fuente.

  7. Código de Programación en GitHub GIST y Github Classroom: Todo código de programación debe ser alojado en GitHub y seguir un formato específico para ser aceptado. Es fundamental que el estudiante se familiarice con este formato, ya que la presentación del código es tan importante como la solución propuesta en sí.


EVALUACIÓN:

  1. Uso de LOOM: Es mandatorio que todos los estudiantes estén registrados en LOOM.com y tengan activada la beca académica. Muchas comunicaciones y detalles se realizarán a través de grabaciones de pantalla o smartphone. Igualmente el uso de Asciinema se requiere revisar detalladamente su procedimiento antes el nodo ARM cuando este compilando, etc.

  2. Presentación de Trabajos:

    • Todos los trabajos llevauna rúbrica (en forma de tabla, animacion o video de LOOM.com de ejemplos) y ser entregados a más tardar el viernes de cada semana, con previo aviso al grupo durante los horarios de clase.
    • Cada trabajo incluirá una rúbrica detallada que explicará cómo se compone la nota final sobre 100 puntos. Es importante prestar atención a los requisitos para maximizar la calificación.
    • Docencia he visto que los estudiantes no leen las instrucciones solo ven ejemplos y sobre estos elaboran sus bases pero estan desorientados causan fallos.
  3. Política de Entrega:

    • Los trabajos no entregados recibirán una calificación de cero (0) y afectarán el promedio general.
    • Ceros notorios pasara el estudiante a exposiciones, y trabajo especifico asignado para recuperar el ritmo.
    • La fecha límite para la entrega semanal es el viernes durante el horario de clase. No se aceptarán trabajos tarde a menos que haya una justificación válida (como problemas de trabajo o salud), la cual debe ser comunicada de manera privada e idependientemente debe de hacerlos y entregarlos en fechas indicadas.
  4. Retroalimentación:

    • Se ofrecerá retroalimentación principalmente a través de GitHub Classroom donde fue depositada la actividad, ejercicio, etc.
  5. Evaluación del Curso:

    • Hay exámenes temáticos, prácticas, tareas. La calificación final de cada tema será el promedio de todas las tareas entregadas con una ponderacion que se atendera en su momento por el grupo.
    • Es obligatorio completar al menos una tarea por tema, de lo contrario, se deberá presentar un examen de recuperación.
    • Algunas practicas no contarán para la evaluación directa pero servirán como refuerzo del tema y deben ser completadas, como CHECKLIST o Lista de Cotejo.
  6. Proyecto Final (por checarlo):

    • El curso culmina con un proyecto documental, dividido en dos etapas, cada una valorada en un 50% del total. Se utilizará GitHub Projects para organizar y dar transparencia al proceso.

Esta versión busca ser más directa y organizar la información de manera que sea más accesible y fácil de seguir para los estudiantes y docentes.

REQUISITOS DE HARDWARE:

  • SmartPhone,PC o Laptop, tableta con AppStore-Google Play con TERMIUS.App igualmente VSCode para Windows, Mac o Linux
  • Sistemas Operativo 64 bits, recomendable DualBoot con Linux con 20Gb o mas (ubuntu, Debian, etc) o también puede ser un USB 3.0 Bootable con persistencia de unos 6 Gb ver http://pendrivelinux.com con software de Termius instalado entre otros.
  • Necesaria contar con MicroControlador RaspberryPi "PICO W" este se organizan los estudiantes y se hara una "propuesta" a el grupo para adquirirlo por volumen de fabrica al costo, junto con material de GitHub Education y sticker del PIN-OUT.
  • Raspberry PICO W sera el centro de atención de las practicas de dia a dia en ARM Assembly 32bit, por ser hardware libre esta bien documentada y apoyada con un inmensa comunidad, considere esta opción si otro MCU competente dedide cambiarlo y entrará a trabajar en su materia.
  • Para apoyar a el grupo se conectara una RaspberryPI5 8gb RAM 128Gb ssd en una IP estática para que se conecten a esta para las practicas complementarias con Kernel de Linux, igualmente en 32 bits
  • Trabajaremos con ARM32 en microcontrolador Raspberry PicoW en Assembly un poco y cerramos el semestre con C.
  • Smartphone con APP de SSH que se activará con TERMIUS (de su Github student pack) con un valor de $30 dlls gratis para UD durante un año que brinda la compañia.

Sin otro particular estoy a sus ordenes.

MC. René Solis R.

Redes Sociales:

  • Twitter: @IoTeacher noticias mas activo al dia.
  • FB: facebook.com/profesorsolis (noticias y marketplace)

REGISTRO 2024a

Formulario de estudiantes 2024a

https://forms.gle/ViCfFPmKLUvCp5ch6


Calendario de Examenes LDI24a

interfaz's People

Contributors

ioteacher avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

interfaz's Issues

5 Proyecto Final (FIN DE SEMESTRE) Incluye EBook y Videos

Título del Proyecto

Captura del Momento: Tomando una Foto con el Equipo usando Arduino Tiny Machine Learning Kit (detección e imagen)

Objetivos

NOTA: Puede implementarlo con C, CSharp, Python que invoque la camara para que tome la foto.

General

Utilizar el Arduino Tiny Machine Learning Kit para integrar habilidades técnicas y colaborativas, culminando en la captura de una foto del equipo como cierre simbólico del semestre.

Específicos

  • Configurar el Arduino Tiny Machine Learning Kit para controlar una cámara.
  • Programar el Arduino para que, mediante un botón o sensor, se active la cámara y se tome una foto.
  • Demostrar la colaboración y el aprendizaje conjunto a través de una actividad de equipo.

Materiales Necesarios

  • Arduino Tiny Machine Learning Kit.
  • Cámara compatible con Arduino (módulo de cámara).
  • Botón o sensor para activar la cámara.
  • Cables de conexión.
  • Computadora con el software de Arduino instalado.
  • GitRepo de kit con ejemplos

Metodología

Preparación

  • Revisar la documentación del Arduino Tiny Machine Learning Kit y el módulo de cámara.
  • Instalar y configurar el software de Arduino en la computadora.
  • Bajar repositorio con ejemplos

Desarrollo

  • Conectar el módulo de cámara al Arduino.
  • Programar el Arduino para que, al activarse mediante un botón o sensor, la cámara tome una foto.
  • Probar el sistema asegurándose de que la foto se tome correctamente cuando se active el sensor o botón.

Implementación

  • Organizar una sesión con el equipo de trabajo.
  • Colocar el Arduino en un lugar adecuado donde todos los miembros del equipo puedan ser fotografiados.
  • Utilizar el sistema desarrollado para tomar una foto del equipo.

Documentación y Presentación

  • Preparar una presentación que detalle el proceso de desarrollo, problemas encontrados y cómo se solucionaron en su repositorio de equipo.
  • Incluir la foto del equipo como parte de la documentación del proyecto tomada con el UI de Arduino IDE o similar.
  • Presentar el proyecto al docente y comentar sobre experiencia de aprendizaje durante la sesión de cierre del semestre.

Evaluación

  • Técnica: Correcta implementación y funcionamiento del sistema de el demo con fotos.
  • Colaborativa: Participación activa de todos los miembros del equipo en la realización del proyecto, en su reposiorio.

Incluye links de youtube de mas de 6 capitulos paso a paso.

1.3 Evaluacion Tema 1

Image

Image

Reglas generales:

  • No se permite navegador solo el Idoceo connect.
  • Preguntas abiertas, puede Ud. responder ampliamente.
  • Celular ponerlo en silencio.
  • Docente tecleará el PIN para prevenir que estudiantes fuera de laboratorio contesten.
  • No cámaras o micrófonos
  • No GTP´s

Guia básica
Programar o modificar el programa de 8 bit protobard computer (por ejemplo Hola Mundo) se considera el MAS DIFICIL Y SE ATENDENDERA CON PRIORIDAD.

10% POSTER DE ARM32 las categorías repasarlas, son 4 se ven claramente la división del poster.
https://azeria-labs.com/downloads/cheatsheetv1.3-1920x1080.png


30% Introduccion del libro de las practicas de Ensamblador

TEMA 1
https://riuma.uma.es/xmlui/bitstream/handle/10630/10214/LibroDePracticas.pdf?sequence=1&isAllowed=y


50% examen será de PROTOBOARD COMPUTER de 8 bits, conceptos de instrucciones de ensamblador, depurador, botón de STEP, RESET, formato de lenguaje de la controladora simple.
RAM, ROM, FLAGS, etc.

10% Examen algo similar a:

¿Qué tipo de puerto de red utiliza el Raspberry Pi 5?
¿Qué tipo de memoria RAM utiliza el Raspberry Pi 5?
¿Qué tipo de almacenamiento interno tiene el Raspberry Pi 5?
¿Qué tipo de procesador utiliza el Raspberry Pi 5?
¿Qué tipo de tarjeta gráfica utiliza el Raspberry Pi 5?
¿Qué tipo de conectividad de red tiene el Raspberry Pi 5?
¿Qué tipo de puerto USB tiene el Raspberry Pi 5?
¿Raspberry Pi 5 tiene un puerto de Consola Serial?
¿Qué tipo de fuente de alimentación utiliza el Raspberry Pi 5?

Sobre: GEF, SSH, Compilador, depurador

No vendrá tema de AWSAcademy pues fue una introducción a la forma de trabajar en general todas las materias.

4.2 (PRACTICA 2) Programación de dispositivos ( OLED Display)

Práctica: Desplegar un Mensaje o icono en un Display OLED con C/C++

Objetivo

Desarrollar un programa en C/C++ que permita mostrar un mensaje en un display OLED, facilitando la comprensión del manejo de displays gráficos y la programación en C/C++.

Requisitos del Proyecto

  • Configuración del Display: Inicializar y configurar el display OLED para asegurar la correcta visualización de los mensajes.
  • Interfaz de Usuario: Implementar una función que permita al usuario introducir el mensaje que desea desplegar.
  • Despliegue del Mensaje: Programar la lógica necesaria para que el mensaje introducido por el usuario se muestre correctamente en el display OLED.
  • Documentación: Comentar adecuadamente el código para explicar las funciones y procedimientos utilizados.

Descripción Adicional

  • El estudiante deberá familiarizarse con la documentación técnica del display OLED utilizado, comprendiendo las especificaciones y comandos disponibles para su manipulación.
  • Es crucial que el programa incluya manejo de errores básicos, como verificaciones de conexión del display y validación de los mensajes introducidos.
  • Esta práctica desarrolla habilidades en programación de hardware y manejo de dispositivos periféricos en un entorno de bajo nivel.

Por ultimo estan invitados a realizar en el simulador primero y despues conociendo el orden de los cables, pasen por un OLED display fisico para conectarlo.

Recuerde DESCONECTAR LA PICOW antes de poner los cables

Si sale humo o huele quemado son $50 pesos la cuota de recuperacion de la pieza, se compran en AliExpress.com

SIMULADOR
https://wokwi.com/projects/new/pi-pico-w

2.1 Programación básica

INTEGRACION DE ARM Assembly como MACRO con Leng. C

asciicast

Para integrar código de ARM32 assembly con C, es importante seguir una convención de llamadas que permita la comunicación entre ambos lenguajes. A continuación, te proporciono un ejemplo simple de cómo hacer esto. El ejemplo consistirá en una función de assembly que suma dos números y una función en C que llama a esta función de assembly.

Primero, creemos la función de assembly que suma dos números. Esta función recibirá dos argumentos y retornará la suma de ambos. La función podría llamarse sumar, y su código en assembly se vería así:

.global sumar
.type sumar, %function

sumar:
    @ Argumentos:
    @   r0 - primer número
    @   r1 - segundo número
    
    ADD r0, r0, r1  @ Suma r0 y r1, resultado en r0
    BX lr           @ Regresa a la función llamadora

Ahora, necesitas escribir el código en C que llame a esta función de assembly. Para hacer esto, declara un prototipo de la función sumar en tu código C, de modo que el compilador sepa de su existencia y pueda manejar correctamente la llamada. Luego, puedes llamar a sumar desde tu función principal en C o desde cualquier otra parte de tu código C.

El código en C que hace uso de la función sumar se vería así:

#include <stdio.h>

// Prototipo de la función assembly
extern int sumar(int a, int b);

int main() {
    int resultado;

    // Llama a la función assembly
    resultado = sumar(10, 20);

    printf("El resultado es: %d\n", resultado);
    return 0;
}

Para compilar y enlazar estos dos archivos, puedes usar un Makefile simple que utilice gcc para el código C y as para el assembly, o directamente en la línea de comandos si prefieres. Asegúrate de tener ambos archivos en el mismo directorio y de reemplazar <nombre_del_archivo_c> y <nombre_del_archivo_assembly> con los nombres de tus archivos reales.

En la línea de comandos, podrías compilar y enlazar tus archivos de la siguiente manera:

as -o sumar.o sumar.s          # Compila el código assembly
gcc -o sumar_c.o -c sumar.c    # Compila el código C
gcc -o programa sumar.o sumar_c.o   # Enlaza ambos objetos y genera el ejecutable

Este es un ejemplo básico para mostrarte cómo integrar ARM32 assembly con C. Puedes expandir esto para incluir llamadas a funciones más complejas y pasar diferentes tipos de datos entre C y assembly.

4.1 (PRACTICA 1) Practicas Csharp PicoW

Image

Aquí tienes la salida del texto mejorado en formato Markdown:


Práctica: Desarrollo de una Aplicación en C# para Control de Puerto Serial a nuestra picoW

Objetivo:
Elaborar un programa utilizando C# con una interfaz gráfica que permita interactuar con un dispositivo PicoW a través del puerto serial.

IDE de Arduino debe de desplegar en la sección de SERIAL Display boton del lado superior derecho.

Requisitos de la Interfaz: (ABIERTO A SUGERENCIAS)

  1. ComboBox: Este componente permitirá al usuario seleccionar uno de los puertos seriales disponibles (del 1 al 10).
  2. Botón 'Conectar': Al presionar este botón, el programa deberá establecer una conexión con el puerto serial seleccionado en el ComboBox.
  3. Botón 'Desconectar': Este botón permitirá liberar el puerto serial que está actualmente en uso, cerrando la conexión establecida.
  4. Botón 'Reset': Al ser activado, este botón deberá limpiar el contenido del TextBox TxtBoxMensaje, dejándolo listo para una nueva entrada.
  5. TextBox 'TxtBoxMensaje': Este campo de texto será utilizado para ingresar mensajes que serán enviados y desplegados en la consola serial de un dispositivo Arduino.

Descripción Adicional:

  • La aplicación deberá ser capaz de manejar errores básicos relacionados con la conexión al puerto serial, como intentos de conexión a puertos no disponibles o errores al enviar datos.
  • La interfaz debe ser clara y amigable para el usuario, asegurando que los componentes sean accesibles y fácilmente identificables.

Esta práctica ayudará a los estudiantes a entender la comunicación entre aplicaciones de software y dispositivos de hardware a través de puertos seriales, utilizando C# y Windows Forms.


1.2 - Conoce la arquitectura y organización de un procesador y la estructura de un programa en ensamblador e identifica la relación entre ambos.

Objetivo:

Desarrollar un documento GIST.GitHub.COM con el contexto del poster de de ARM32 lenguaje ensamblador utilizando GEMINI.google.com como herramienta de inferencia y aprendizaje. El trabajo se basará en el póster de Azeria Labs: https://azeria-labs.com/assembly-basics-cheatsheet/ que permite hacer mas dinámica la lectura y comprensión.

Instrucciones:

  1. Crear una cuenta en GEMINI.google.com (si aún no la tiene).

  2. Acceder al póster de Azeria Labs: https://azeria-labs.com/assembly-basics-cheatsheet/ y descargarlo

  3. Seleccionar una sección del póster: una vez "cargado" a el gemin, y atenderá las secciones del poster para que el asistente se refiera a una sección del conocimiento.

Ejemplo
Instrucciones básicas: Esta sección incluye las instrucciones de ensamblaje más comunes, como suma, resta, carga y almacenamiento de datos.

Directivas de ensamblaje: Esta sección describe las directivas de ensamblaje que se utilizan para controlar el flujo del programa y definir la estructura de datos.

Modos de direccionamiento: Esta sección explica cómo se utilizan los diferentes modos de direccionamiento para acceder a la memoria.

Interrupciones y excepciones: Esta sección describe cómo se manejan las interrupciones y excepciones en ARM32.

Utilizar GEMINI para:

Anotar la información más importante: Resuma los conceptos clave, las sintaxis y los ejemplos de código de la sección seleccionada.

Organizar la información de forma clara y concisa: El cheat sheet debe ser fácil de leer y comprender.

Compartir el cheat sheet:

Rúbrica:

La rúbrica para evaluar el cheat sheet se basará en los siguientes criterios:

Completitud El cheat sheet debe cubrir todos los temas relevantes de la sección seleccionada del póster.
Precisión La información del cheat sheet debe ser precisa y actualizada.
Claridad El texto debe ser un balance entre fácil de leer y comprender, sea introductorio del su curso.
Organización La información debe estar organizada de forma lógica y coherente.
Formato El contexto generativo, debe estar formateado correctamente utilizando markdown.

Recursos adicionales y oficiales del la arquitectura RISC de ARM:

Documentación oficial de ARM: https://developer.arm.com/documentation/den0024/a/

3.7 Cierre de tema 3 con PicoW con ChatGTP

Integracion final adaptar ChatGTP para la PicoW

Image

Práctica: Conexión de Raspberry Pi Pico W con ChatGPT y Visualización en OLED

Objetivo

Implementar un programa en el Raspberry Pi Pico W que establezca una conexión con ChatGPT, envíe un prompt definido, reciba la respuesta y la muestre en un display OLED. Adicionalmente, el LED del Pico W deberá parpadear cada vez que se reciban tokens de la respuesta.

Requisitos del Proyecto

  • Configuración del Pico W: Configurar el Raspberry Pi Pico W para conectarse a Internet.
  • Conexión con ChatGPT: Establecer una conexión API con ChatGPT para enviar y recibir datos.
  • Display OLED: Mostrar la respuesta de ChatGPT en un display OLED conectado al Pico W.
  • LED Interactivo: Programar un LED para que parpadee en sincronización con la llegada de cada token de la respuesta de ChatGPT.
  • Interfaz de Usuario: Crear una interfaz simple para que el usuario pueda introducir el prompt deseado a través de un terminal o interfaz web conectada al Pico W.

Descripción Adicional

  • Los estudiantes deberán familiarizarse con la programación en C/C++ para la implementación de esta práctica.
  • Es necesario entender el manejo de conexiones HTTP/S y la integración con APIs web.
  • La práctica requerirá la comprensión de la manipulación de dispositivos periféricos (display OLED y LED interno)
  • Se espera que el código sea comentado adecuadamente para explicar cómo se gestionan las conexiones de red, el procesamiento de datos y la interacción con los dispositivos de hardware.

Resultados Esperados

Al final de esta práctica, los estudiantes habrán desarrollado un dispositivo capaz de interactuar en tiempo real con servicios basados en inteligencia artificial, además de obtener experiencia práctica en el desarrollo de aplicaciones IoT (Internet de las Cosas) que involucran hardware y comunicaciones de red.

2.2.3 Corrida de programas y ASCIINEMA de Depuracion

TRABAJARÁ CON EL PROGRAMA DE "TORRES DE HANOI"

https://github.com/tectijuana/interfaz/blob/master/arm32/codigo/hanoi.md

El programa esta elaborado, solicita su atenciòn para:

NOTA: Programas fuentes que no tengan encabezado con su nombre, ASCINEMAS que no tenga su nombre mencionado en un $echo o similar. No se tomarán como evaluación en iDOCEO es obligatorio separar su esfuerzo extraordinario con ChatGTP sin aportación

2.1.5 Programación trabajando con variables C y ARM32

Image

Sea un problema básico que les permita comparar C y ensamblador, incluyendo sus compiladores, podemos plantearles el siguiente ejercicio que implica la suma de dos números. Este ejercicio se presenta primero en C y luego en ensamblador ARM32 para una Raspberry Pi, lo que permitirá a los estudiantes ver la diferencia en términos de sintaxis, nivel de abstracción y eficiencia entre ambos lenguajes.

Ejercicio: Suma de dos números

En C:

#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;
    int suma = a + b;
    printf("La suma es: %d\n", suma);
    return 0;
}

NOTA: Obviamente es un ejemplo extendido para asimilar los pasos de ensamblador..

En Ensamblador ARM32 para Raspberry Pi:

Para el ensamblador, asumiendo que los estudiantes están trabajando en una Raspberry Pi y utilizando el editor nano en la terminal o similar, el código podría ser:

.section .data
a: .word 5
b: .word 10
resultMessage: .asciz "La suma es: "
digit: .asciz "0"

.section .text
.global main

main:
    LDR R0, =a
    LDR R1, [R0]
    LDR R0, =b
    LDR R2, [R0]
    ADD R3, R1, R2   @ R3 tiene el resultado de la suma
    
    @ Convertir el resultado a ASCII (solo funciona para números de 1 dígito)
    ADD R3, R3, #48   @ Convertir el dígito a ASCII sumando 48
    
    @ Preparar para imprimir el mensaje
    LDR R0, =resultMessage
    LDR R1, =digit
    STRB R3, [R1]  @ Guardar el dígito convertido a ASCII en 'digit'
    
    @ Imprimir mensaje
    MOV R0, #1    @ stdout
    LDR R1, =resultMessage
    MOV R2, #13   @ longitud del mensaje "La suma es: "
    MOV R7, #4    @ syscall para write
    SWI 0
    
    @ Imprimir dígito
    MOV R0, #1    @ stdout
    MOV R2, #1    @ longitud del dígito
    SWI 0
    
    @ Salir
    MOV R7, #1    @ syscall para exit
    SWI 0

Compiación en C:
Este comando le dice a GCC que compile suma.c y genere un archivo ejecutable llamado programa (el flag -o se usa para especificar el nombre del archivo de salida).

gcc sumac.c -o sumac
./sumac

Compilación en Arm32

as -o sumae.o suma.s
ld -o sumae sumae.o
./sumae

Debugger del ASM

gef sumae
.... start
...(stepi) ver siguiente linea

Explicación y comparación:

  • Nivel de abstracción: En C, el nivel de abstracción es alto, permitiendo al programador concentrarse más en la lógica del problema que en los detalles específicos del hardware. En ensamblador, el programador debe manejar explícitamente registros y operaciones específicas del procesador.
  • Sintaxis: C ofrece una sintaxis más fácil de entender y escribir para aquellos familiarizados con los lenguajes de alto nivel. En ensamblador, cada instrucción debe ser detallada y específica, lo que requiere un conocimiento más profundo del hardware.
  • Eficiencia: El código en ensamblador puede ser más eficiente y rápido, ya que permite un control más directo del hardware. Sin embargo, esto también significa que el programador debe optimizar manualmente el código, mientras que en C, el compilador realiza muchas optimizaciones automáticamente.

Este ejercicio muestra diferencias entre escribir código en C y ensamblador, pero también les introduce al proceso de compilación y ejecución en ambos lenguajes, ofreciendo una comprensión más profunda de cómo el código de alto nivel es traducido a instrucciones que el procesador puede entender.

Image

3.2 Practica 0, Checar IDE Arduino, ver el simulador y correr el BLINK

Wokwi

Wokwi es una plataforma avanzada de simulación en línea diseñada para entusiastas y profesionales de la electrónica y la programación de microcontroladores. Esta herramienta permite simular una amplia variedad de proyectos de hardware, facilitando el desarrollo, la prueba y la enseñanza de electrónica sin necesidad de componentes físicos.

Características Principales

  • Amplia compatibilidad de microcontroladores: Incluye soporte para Arduino, ESP32, Raspberry Pi Pico y otros.
  • Simulación de componentes electrónicos: Permite integrar y simular componentes como LEDs, sensores, pantallas y mucho más.
  • Entorno colaborativo: Los usuarios pueden compartir sus proyectos y simulaciones con la comunidad, mejorando el aprendizaje colaborativo y la distribución de conocimientos.

Beneficios

  • Educación: Ideal para la enseñanza de programación y electrónica, permitiendo a los estudiantes experimentar sin riesgos.
  • Prototipado rápido: Facilita la iteración y prueba de ideas sin necesidad de inversión inicial en hardware.
  • Colaboración: Simplifica el compartir y revisar proyectos entre equipos o con la comunidad global.

Uso

Para empezar a usar Wokwi especificamente usaremos la version C/C++, visita https://wokwi.com/projects/new/pi-pico-w

Templete universal para programas de RPI PicoW

/*
  Programa: Control de Raspberry Pi Pico W
  Autor: [Tu Nombre]
  Fecha: [Fecha de creación]

  Descripción:
  Este programa inicializa la comunicación serial en una Raspberry Pi Pico W y envía un mensaje de bienvenida.
  Posteriormente, entra en un bucle infinito donde puede agregar más funcionalidades.

  Licencia: [Tipo de licencia]

ESTA ES UN BORRADOR DE UN TEMPLETE NO ES FUNCIONAL
*/

#include <Arduino.h>

void setup() {
  // Inicializa la comunicación serial a 115200 baudios.
  Serial.begin(115200);
  
  // Envía un mensaje de bienvenida.
  Serial.println("Hola, Raspberry Pi Pico W!");

  // Configuraciones adicionales aquí.
}

void loop() {
  // Código principal que se ejecuta repetidamente.

  // Por ejemplo, podrías agregar lógica para leer sensores, controlar actuadores, etc.

  // Retraso mínimo para evitar saturar el bucle.
  delay(1);
}

Programar placa PicoW hardware

Para trabajar con la Raspberry Pi Pico W sin utilizar el entorno de Arduino, puedes programarla utilizando el SDK oficial en C/C++, en la terminal de comandos, trae su compilador y enlazador manualente,

En los equipos de Laboratorio acceder a Linux para cargar el SDK y no sea borrado por el bloqueador del laboratorista.

Instalación

La comunidad Arduino apoyando hizo una modificación y agrego una extension del SDK (Software Development Kit) de Raspberry Pi; similar a VSCode con sus extensiones.

https://arduino-pico.readthedocs.io/en/latest/install.html

5 Proyecto Final (FIN DE SEMESTRE) Incluye EBook y Videos

Título del Proyecto: Captura de Foto via Csharp o Python con ATML kit

Captura del Momento: Tomando una Foto con el Equipo usando Arduino Tiny Machine Learning Kit (Csharp o Python)

Objetivos

General

Utilizar el Arduino Tiny Machine Learning Kit para integrar habilidades técnicas y colaborativas, culminando en la captura de una foto del equipo, con Csharp o Python para captura de la foto.

Específicos

  • Configurar el Arduino Tiny Machine Learning Kit para control de kit.
  • Programar el Arduino Kit entregado para capturar la imagen.
  • Demostrar la colaboración y el aprendizaje conjunto a través de una actividad de equipo.

Materiales Necesarios

  • Arduino Tiny Machine Learning Kit.
  • Cámara compatible con Arduino (módulo de cámara).
  • Botón o sensor para activar la cámara.
  • Cables de conexión.
  • Computadora con el software de Arduino instalado.
  • GitRepo de kit con ejemplos

Metodología

Preparación

  • Revisar la documentación del Arduino Tiny Machine Learning Kit y el módulo de cámara.
  • Instalar y configurar el software de Arduino en la computadora.
  • Bajar repositorio con ejemplos

Desarrollo

  • Conectar el módulo de cámara al Arduino.
  • Programar el Arduino para que, al activarse mediante un botón o sensor, la cámara tome una foto.
  • Probar el sistema asegurándose de que la foto se tome correctamente cuando se active el sensor o botón.

Implementación

  • Organizar una sesión con el equipo de trabajo.
  • Colocar el Arduino en un lugar adecuado donde todos los miembros del equipo puedan ser fotografiados.
  • Utilizar el sistema desarrollado para tomar una foto del equipo.

Documentación y Presentación

  • Preparar una presentación que detalle el proceso de desarrollo, problemas encontrados y cómo se solucionaron en su repositorio de equipo.
  • Incluir la foto del equipo como parte de la documentación del proyecto tomada con el UI de Arduino IDE o similar.
  • Presentar el proyecto al docente y comentar sobre experiencia de aprendizaje durante la sesión de cierre del semestre.

Evaluación

  • Técnica: Correcta implementación y funcionamiento del sistema de el demo con fotos.
  • Colaborativa: Participación activa de todos los miembros del equipo en la realización del proyecto, en su reposiorio.

Incluye links de youtube de mas de 6 capitulos paso a paso.

https://www.youtube.com/watch?v=LXgL850p7b0&list=PLUwmiNOPP-7hrRFsplajItGAn5ykUjOgY

4.3 (PRACTICA 3 PicoW Wifi serever) Programar interfaces de software y hardware para la manipulación de puertos y dispositivos

Image

Simulador https://wokwi.com/projects/new/pi-pico-w

Práctica: Servidor Web con Pico W para Controlar un LED

Objetivo

Desarrollar un servidor web utilizando el microcontrolador Raspberry Pi Pico W, programado en C/C++, que permita controlar el estado de un LED a través de una interfaz web.

Requisitos del Proyecto

  • Configuración del Hardware: Leer documentacion de Pico W del LED interno (no requiere uno externo).
  • Configuración de Red: Establecer una conexión WiFi con el Pico W para permitir el acceso remoto.
  • Servidor Web: Implementar un servidor web en el Pico W que pueda recibir comandos a través de HTTP para controlar el LED.
  • Interfaz de Usuario Web: Crear una página web sencilla con botones para "Encender" y "Apagar" el LED.
  • Control del LED: Programar la lógica en C/C++ para que el Pico W pueda encender y apagar el LED basándose en las solicitudes recibidas del servidor web.

Descripción Adicional

  • Utilizar bibliotecas y herramientas adecuadas para la configuración del servidor web en el Pico W.
  • Asegurarse de que el código esté bien documentado, explicando cómo se configura la red y se manejan las solicitudes HTTP.
  • Incluir medidas básicas de seguridad para la conexión WiFi y el acceso al servidor web.

Resultados Esperados

  • El estudiante deberá ser capaz de demostrar cómo el Pico W puede interactuar con dispositivos de hardware a través de la web.
  • Se espera que el LED pueda ser controlado de manera remota desde cualquier navegador conectado a la misma red WiFi.

Esta práctica ofrece una excelente oportunidad para explorar la programación de microcontroladores en un contexto de IoT (Internet de las Cosas), utilizando el Pico W para aplicaciones de control remoto.

1.2.2 Ejercicios de ASM 8bit a C standard

Image

Acceder a una maquina simple 8-bits emulada.

Utilizar los GTP´s para documentar el código fuente del emulador de 8-bits

Es libre de cuestionar cualquier duda por el GTP

Aquí tienes una versión de la actividad de laboratorio en formato Markdown para GitHub:


Actividad de Laboratorio de Computación: Conversión de ASM a C

Objetivo

El objetivo de esta práctica de laboratorio es familiarizarse con la programación en lenguaje ensamblador (ASM) de 8 bits y su conversión a lenguaje C estándar. Los estudiantes aprenderán a manipular y modificar muestras de código, así como a comprender la documentación de mnemónicos e instrucciones de un emulador específico.

Fuente:

Requisitos Previos

  • Conocimientos básicos de programación en C y lenguaje ensamblador.
  • Acceso a un entorno de desarrollo de C y a un emulador de ASM de 8 bits.

Parte 1: Estudio de Mnemónicos e Instrucciones

1. Revisión de Documentación

  • Inicie la actividad leyendo la documentación proporcionada sobre el emulador de ASM de 8 bits utilizado en este laboratorio. Preste especial atención a los mnemónicos (abreviaturas de instrucciones) disponibles y a sus respectivas funciones.

2. Análisis de Mnemónicos

  • Elija cinco mnemónicos del conjunto de instrucciones y describa brevemente su propósito y cómo se utilizan en programas de ASM.

Parte 2: Conversión de Código ASM a C

1. Selección de Muestras de Código ASM

  • Utilizando las muestras de código ASM proporcionadas por el instructor, seleccione tres fragmentos de código para trabajar. Asegúrese de que cada muestra incluya varios mnemónicos diferentes.
  • Pida a el GTP le agregue comentarios detallados de lo que sucede linea por linea.

2. Análisis del Código ASM

Para cada fragmento de código seleccionado, realice lo siguiente:
a. Identifique y describa el propósito del código.
b. Anote los mnemónicos utilizados y su función en el contexto del código.

3. Conversión a C

  • Convierta cada muestra de código ASM a lenguaje C estándar. Asegúrese de mantener la funcionalidad original del código ASM en su versión en C.

4. Comparación y Análisis

  • Compare el código original en ASM con su versión convertida en C. Discuta las diferencias en términos de sintaxis, legibilidad y eficiencia.

Parte 3: Modificación del Código

1. Manipulación del Código

  • Modifique las versiones en C de las muestras de código para alterar su comportamiento. Esto puede incluir cambios en la lógica, la implementación de nuevas características o la optimización del código.

2. Pruebas y Validación

  • Compile y ejecute las versiones modificadas del código en C. Verifique que funcionen según lo previsto y documente cualquier cambio en el comportamiento del programa.

Entrega GIST personal

  • Un informe que incluya:
    • La descripción y análisis de los mnemónicos seleccionados.
    • El código ASM original y su versión convertida a C para cada muestra de 8-bit computer.
    • Una discusión sobre las diferencias entre las versiones ASM y C.
    • El código modificado en C y una descripción de los cambios realizados.
    • Conclusiones sobre la experiencia de conversión de código y su manipulación.

Evaluación

La evaluación de esta actividad se basará en la precisión de la conversión del código, la creatividad en las modificaciones realizadas al código en C y la profundidad del análisis y discusión en el informe.

Image

Depósito Repo Final 2pm

Screenshot 2024-05-19 at 17 09 08

Favor de agregar IOTEACHER de tener "privado" su repositorio. o darme referencia de este para dar evaluación

4.5 ChatGTP en PicoW

Integracion final adaptar ChatGTP para la PicoW

Image

Práctica: Conexión de Raspberry Pi Pico W con ChatGPT y Visualización en OLED

Objetivo

Implementar un programa en el Raspberry Pi Pico W que establezca una conexión con ChatGPT, envíe un prompt definido, reciba la respuesta y la muestre en un display OLED. Adicionalmente, el LED del Pico W deberá parpadear cada vez que se reciban tokens de la respuesta.

Requisitos del Proyecto

  • Configuración del Pico W: Configurar el Raspberry Pi Pico W para conectarse a Internet.
  • Conexión con ChatGPT: Establecer una conexión API con ChatGPT para enviar y recibir datos.
  • Display OLED: Mostrar la respuesta de ChatGPT en un display OLED conectado al Pico W.
  • LED Interactivo: Programar un LED para que parpadee en sincronización con la llegada de cada token de la respuesta de ChatGPT.
  • Interfaz de Usuario: Crear una interfaz simple para que el usuario pueda introducir el prompt deseado a través de un terminal o interfaz web conectada al Pico W.

Descripción Adicional

  • Los estudiantes deberán familiarizarse con la programación en C/C++ para la implementación de esta práctica.
  • Es necesario entender el manejo de conexiones HTTP/S y la integración con APIs web.
  • La práctica requerirá la comprensión de la manipulación de dispositivos periféricos (display OLED y LED interno)
  • Se espera que el código sea comentado adecuadamente para explicar cómo se gestionan las conexiones de red, el procesamiento de datos y la interacción con los dispositivos de hardware.

Resultados Esperados

Al final de esta práctica, los estudiantes habrán desarrollado un dispositivo capaz de interactuar en tiempo real con servicios basados en inteligencia artificial, además de obtener experiencia práctica en el desarrollo de aplicaciones IoT (Internet de las Cosas) que involucran hardware y comunicaciones de red.

2.2 Proyectos populares internacionales: MicroBit

ENSAMBLADOR CON MICROBIT

Para trabajar con micro:bit utilizando código en ensamblador, es importante tener en cuenta que la arquitectura de micro:bit difiere de las configuraciones típicas de Raspberry Pi y otros dispositivos basados en ARM que hemos discutido. El micro:bit V1 está basado en el microcontrolador nRF51822 que utiliza un procesador ARM Cortex-M0, mientras que el micro:bit V2 usa el nRF52833 con un procesador ARM Cortex-M4. Ambos son significativamente diferentes en capacidades y estructura a los procesadores ARM Cortex-A utilizados en Raspberry Pi. Además, la programación en ensamblador para estos microcontroladores se centra más en la interacción con su hardware específico y las capacidades de bajo nivel, como el manejo de GPIO, comunicación serial, y temporizadores, entre otros.

Para comenzar a escribir programas en ensamblador para el micro:bit, necesitarías familiarizarte con:

.section .text
.global _start

_start:
  1: b 1b

El conjunto de instrucciones específico del ARM Cortex-M0 o Cortex-M4, dependiendo de la versión de tu micro:bit. Esto incluye comprender las instrucciones básicas para operaciones matemáticas, manipulación de datos, y control de flujo.

Los registros específicos del microcontrolador y cómo interactúan con el hardware del micro:bit, incluidos los pines de entrada/salida, el acelerómetro, la pantalla LED, y otros periféricos.

El entorno de desarrollo y las herramientas necesarias para compilar y cargar el código en ensamblador en el micro:bit. Esto podría incluir configurar un entorno de desarrollo cruzado y usar herramientas como arm-none-eabi-gcc para compilar tu código ensamblador en un archivo binario que pueda ser cargado en el micro:bit.

Para adaptar un programa en ensamblador a fin de controlar un LED en un micro:bit (tanto versión 1 como versión 2), es crucial entender cómo el microcontrolador específico maneja los pines de entrada/salida (GPIO). Dado que el micro:bit V1 utiliza el nRF51822 (basado en ARM Cortex-M0) y el V2 utiliza el nRF52833 (basado en ARM Cortex-M4), ambos tienen capacidades similares de GPIO pero pueden diferir en detalles específicos de implementación. A continuación, proporcionaré un ejemplo conceptual para ambos, enfocado en prender y apagar un LED en un bucle infinito.

COMPILACION

Para compilar y subir un programa en ensamblador a un micro:bit, necesitarás seguir varios pasos que involucran la compilación de tu código en ensamblador a un archivo binario o hexadecimal (.hex), y luego transferir este archivo al micro:bit. A continuación, te guiaré a través de un proceso general que se puede adaptar dependiendo de las herramientas específicas que elijas usar y el sistema operativo que estés utilizando.

  1. Preparación del entorno
    Primero, necesitas tener un entorno de desarrollo cruzado para ARM instalado en tu computadora. Esto incluye el compilador GNU ARM (arm-none-eabi-gcc), el ensamblador (arm-none-eabi-as) y el utilitario para copiar y transformar archivos de objetos (arm-none-eabi-objcopy).

Estas herramientas están disponibles en el paquete GNU ARM Embedded Toolchain.

En Windows, puedes descargar estas herramientas desde el sitio oficial de ARM Developer.

En Linux, estas herramientas a menudo se pueden instalar directamente desde el gestor de paquetes de tu distribución, por ejemplo, en Ubuntu podrías usar:

sudo apt-get install gcc-arm-none-eabi
  1. Escribir el programa en ensamblador
    Crea un archivo de texto con tu programa en ensamblador, como main.s. Usa el ejemplo de código que te proporcioné anteriormente o cualquier otro código que desees compilar.

  2. Compilación del código en ensamblador
    Abre una terminal o línea de comandos y navega hasta el directorio donde guardaste main.s. Utiliza el siguiente comando para compilar tu código en ensamblador a un archivo de objeto:

arm-none-eabi-as -mcpu=cortex-m0 -g main.s -o main.o

Este comando especifica que el procesador objetivo es un Cortex-M0, que es el caso para el micro:bit V1. Para el micro:bit V2, que usa un Cortex-M4, cambiarías -mcpu=cortex-m0 por -mcpu=cortex-m4

  1. Enlazar el código objeto a un archivo binario
    El siguiente paso es enlazar el archivo de objeto a un archivo binario ejecutable
arm-none-eabi-ld -Ttext=0x0 -o main.elf main.o

Este comando enlaza main.o a un archivo ELF ejecutable (main.elf), con la dirección de inicio especificada por -Ttext=0x0. Debes ajustar la dirección de inicio según sea necesario para tu aplicación y entorno de hardware específico.

Finalmente, convierte el archivo ELF a un formato .hex que puede ser cargado en el micro:bit:

arm-none-eabi-objcopy -O ihex main.elf main.hex
  1. Subir el programa al micro:bit
    Conecta tu micro:bit a tu computadora usando un cable USB. El micro:bit debería aparecer como una unidad de disco USB.
    Copia el archivo main.hex a la unidad del micro:bit usando el explorador de archivos o un comando de copia en la terminal. La transferencia del archivo hará que el micro:bit se reinicie automáticamente y comience a ejecutar el programa.

Este es un proceso básico y los comandos específicos pueden variar dependiendo de las opciones de tu programa en ensamblador, la versión del micro:bit, y si estás utilizando funcionalidades específicas del microcontrolador o periféricos. Asegúrate de consultar la documentación específica de tu entorno de desarrollo y las herramientas para cualquier ajuste necesario en los comandos.

ARM Toolchain

https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain
https://developer.arm.com/downloads/-/gnu-rm

4.4 PRACTICA 4, control Bluetooth con PicoW

Simulador
https://wokwi.com/projects/new/pi-pico-w

Image

Image

Práctica: Control de LED Interno en Pico W mediante Bluetooth y Smartphone

Objetivo

Desarrollar un programa en C/C++ que permita controlar el LED interno de una Raspberry Pi Pico W a través de conexiones Bluetooth utilizando un smartphone como interfaz de control.

Requisitos del Proyecto

  • Configuración de Bluetooth: Establecer y configurar la conexión Bluetooth en el Pico W para permitir la comunicación con el smartphone.
  • Aplicación Smartphone: Utilizar una aplicación Google Play o AppStore de Apple en smartphone que pueda enviar comandos a través de Bluetooth para controlar el LED.
  • Control del LED: Implementar la funcionalidad en el Pico W para encender y apagar el LED interno basado en los comandos recibidos del smartphone.
  • Documentación: Documentar el código fuente para explicar la configuración de Bluetooth y el manejo de eventos de control del LED.

Descripción Adicional

  • Se debe prestar atención al manejo de conexiones Bluetooth, asegurando una conexión estable y segura entre el Pico W y el smartphone.
  • Esta práctica ofrece una excelente oportunidad para explorar la programación de microcontroladores con capacidades de red y la interacción con aplicaciones móviles.

Habilidades Desarrolladas

  • Programación en C/C++ para sistemas embebidos.
  • Manejo y configuración de módulos Bluetooth.
  • Desarrollo de interfaces de usuario en aplicaciones móviles para controlar dispositivos IoT.

Esta práctica es ideal para estudiantes interesados en el área de IoT y comunicaciones inalámbricas, aplicando conceptos de programación en sistemas embebidos y desarrollo de aplicaciones móviles.

3.4 Practica 2: OLED display mensaje

Práctica: Desplegar un Mensaje o icono en un Display OLED con C/C++

Objetivo

Desarrollar un programa en C/C++ que permita mostrar un mensaje en un display OLED, facilitando la comprensión del manejo de displays gráficos y la programación en C/C++.

Requisitos del Proyecto

  • Configuración del Display: Inicializar y configurar el display OLED para asegurar la correcta visualización de los mensajes.
  • Interfaz de Usuario: Implementar una función que permita al usuario introducir el mensaje que desea desplegar.
  • Despliegue del Mensaje: Programar la lógica necesaria para que el mensaje introducido por el usuario se muestre correctamente en el display OLED.
  • Documentación: Comentar adecuadamente el código para explicar las funciones y procedimientos utilizados.

Descripción Adicional

  • El estudiante deberá familiarizarse con la documentación técnica del display OLED utilizado, comprendiendo las especificaciones y comandos disponibles para su manipulación.
  • Es crucial que el programa incluya manejo de errores básicos, como verificaciones de conexión del display y validación de los mensajes introducidos.
  • Esta práctica desarrolla habilidades en programación de hardware y manejo de dispositivos periféricos en un entorno de bajo nivel.

Por ultimo estan invitados a realizar en el simulador primero y despues conociendo el orden de los cables, pasen por un OLED display fisico para conectarlo.

Recuerde DESCONECTAR LA PICOW antes de poner los cables

Si sale humo o huele quemado son $50 pesos la cuota de recuperacion de la pieza, se compran en AliExpress.com

SIMULADOR
https://wokwi.com/projects/new/pi-pico-w

2.1.8 Ejemplo: Microcontrolador H2 de Apple Airpods pro

Image

La imagen muestra una comparativa entre los ingresos de los AirPods de Apple y diversas compañías tecnológicas destacadas a partir de datos del 2022. Es notable que los ingresos generados solo por los AirPods son comparables o incluso superiores a los ingresos totales de empresas como Spotify, eBay y Airbnb.

Este gráfico puede servir para ilustrar un punto importante en un curso de ARM assembly relacionado con la importancia del hardware: aunque a menudo se centra la atención en el software y en los servicios, el hardware sigue siendo un componente crítico y altamente lucrativo en el ecosistema tecnológico. Los AirPods son un ejemplo de cómo el hardware innovador y bien diseñado puede generar una cantidad significativa de ingresos y mantener una posición relevante en el mercado.

En términos de enseñanza de ARM assembly, esto es relevante porque ARM es una arquitectura de procesador que se encuentra en muchos dispositivos móviles, incluidos aquellos que se conectan con hardware como los AirPods. Comprender cómo funciona el hardware a nivel de procesador permite a los estudiantes apreciar la relación directa entre la eficiencia y efectividad del código a bajo nivel y el rendimiento del hardware en el mundo real.

Cuando los estudiantes trabajan con ARM assembly, están lidiando con instrucciones que interactúan directamente con el hardware del dispositivo. Esta interacción es crucial porque un código assembly bien optimizado puede mejorar significativamente el rendimiento de un dispositivo, lo cual es esencial para el éxito de productos como los AirPods. La eficiencia en el consumo de energía, la velocidad de procesamiento y la capacidad de realizar múltiples tareas de manera efectiva son todas áreas en las que un buen diseño de hardware y un software eficiente pueden hacer una gran diferencia.

Por lo tanto, entender el ensamblador ARM no solo es importante para aprender cómo funcionan las computadoras a un nivel fundamental, sino que también proporciona la base para comprender cómo se pueden desarrollar y optimizar productos de hardware exitosos que generen ingresos significativos y sean competitivamente viables en el mercado tecnológico actual.

Image

1.Introduccion

Image

Image

Aviso para Estudiantes: Uso de Markdown en Repositorios de GitHub Classroom

Estimados estudiantes,

En el marco de nuestras actividades académicas en GitHub Classroom, queremos destacar la importancia del uso de Markdown para la documentación y presentación de sus proyectos de forma clara y eficaz. Markdown es un lenguaje de marcado ligero que facilita la conversión de texto plano en HTML, lo que permite crear documentos estructurados y fáciles de leer directamente en GitHub.

¿Por qué utilizar Markdown?

  • Claridad y Estructura: Permite organizar la información de manera lógica, utilizando encabezados, listas, enlaces e imágenes, lo que facilita su comprensión.
  • Sencillez de Uso: Su facilidad de aprendizaje y uso permite que se concentren en el contenido de su documentación, sin preocuparse por la complejidad del formato.
  • Compatibilidad: Los documentos creados con Markdown son compatibles con diversas plataformas y herramientas, asegurando que su trabajo sea accesible en diferentes contextos.
  • Profesionalismo: Un manejo adecuado de Markdown refleja profesionalidad y atención al detalle, habilidades muy valoradas en el ámbito tecnológico.

Directrices para el uso de Markdown en sus proyectos:

  • README.md: Es indispensable incluir un archivo README.md en la raíz de cada repositorio, donde describan el propósito del proyecto, características, instrucciones de instalación, dependencias y cualquier otra información pertinente.
  • Documentación del Código: Utilicen Markdown para documentar su código, especialmente en scripts complejos, funciones y módulos, para explicar su lógica y uso.
  • Informes y Reflexiones: Empleen Markdown para estructurar informes o reflexiones, utilizando títulos, subtítulos, listas y citas para mejorar la legibilidad y comprensión.
  • Inclusión de Elementos Multimedia: Aprovechen las capacidades de Markdown para incluir imágenes, gifs y enlaces a videos que complementen sus explicaciones o demostraciones.

Recursos para aprender y mejorar su uso de Markdown:

Los animamos a familiarizarse con Markdown y a utilizarlo de manera efectiva en sus proyectos. El dominio de esta herramienta no solo mejorará la calidad de sus entregas, sino que también les proporcionará una habilidad valiosa para su futuro profesional.

Atentamente,

Rene Solis Depto. Sistemas y Computacion

1.1 Seleccionado Arquitectura ARM 64 bit

image

Image

Favor de borrar las maquinas de pruebas de AWS Academy

a) Terminar y borrar todas las instancias de prueba
b) Invocar nuevo nodo Ubuntu en ARM Aquitectura
colocando al final el bloque siguiente GIST:

https://gist.github.com/IoTeacher/6f25bb5efb9dfff4ae8a0f3651c31a4b

c) Acceder via VS Code con la extension SSH


Image

Lista de Cotejo, Estudiantes envía 1 post de sus logros de esta practica de conocer la arquitectura ARM 64 bit

CITAS:
https://aws.amazon.com/es/blogs/aws/join-the-preview-for-new-memory-optimized-aws-graviton4-powered-amazon-ec2-instances-r8g/

3.2 (PRACTICA 0) Aplica macros y procedimientos en el desarrollo de aplicaciones de software orientado a interfaz en lenguaje ensamblador.

Wokwi

Wokwi es una plataforma avanzada de simulación en línea diseñada para entusiastas y profesionales de la electrónica y la programación de microcontroladores. Esta herramienta permite simular una amplia variedad de proyectos de hardware, facilitando el desarrollo, la prueba y la enseñanza de electrónica sin necesidad de componentes físicos.

Características Principales

  • Amplia compatibilidad de microcontroladores: Incluye soporte para Arduino, ESP32, Raspberry Pi Pico y otros.
  • Simulación de componentes electrónicos: Permite integrar y simular componentes como LEDs, sensores, pantallas y mucho más.
  • Entorno colaborativo: Los usuarios pueden compartir sus proyectos y simulaciones con la comunidad, mejorando el aprendizaje colaborativo y la distribución de conocimientos.

Beneficios

  • Educación: Ideal para la enseñanza de programación y electrónica, permitiendo a los estudiantes experimentar sin riesgos.
  • Prototipado rápido: Facilita la iteración y prueba de ideas sin necesidad de inversión inicial en hardware.
  • Colaboración: Simplifica el compartir y revisar proyectos entre equipos o con la comunidad global.

Uso

Para empezar a usar Wokwi especificamente usaremos la version C/C++, visita https://wokwi.com/projects/new/pi-pico-w

Templete universal para programas de RPI PicoW

/*
  Programa: Control de Raspberry Pi Pico W
  Autor: [Tu Nombre]
  Fecha: [Fecha de creación]

  Descripción:
  Este programa inicializa la comunicación serial en una Raspberry Pi Pico W y envía un mensaje de bienvenida.
  Posteriormente, entra en un bucle infinito donde puede agregar más funcionalidades.

  Licencia: [Tipo de licencia]
EJEMPLO NO FUNCIONAL 
*/

#include <Arduino.h>

void setup() {
  // Inicializa la comunicación serial a 115200 baudios.
  Serial.begin(115200);
  
  // Envía un mensaje de bienvenida.
  Serial.println("Hola, Raspberry Pi Pico W!");

  // Configuraciones adicionales aquí.
}

void loop() {
  // Código principal que se ejecuta repetidamente.

  // Por ejemplo, podrías agregar lógica para leer sensores, controlar actuadores, etc.

  // Retraso mínimo para evitar saturar el bucle.
  delay(1);
}

Programar placa PicoW hardware

Para trabajar con la Raspberry Pi Pico W sin utilizar el entorno de Arduino, puedes programarla utilizando el SDK oficial en C/C++, en la terminal de comandos, trae su compilador y enlazador manualente,

En los equipos de Laboratorio acceder a Linux para cargar el SDK y no sea borrado por el bloqueador del laboratorista.

Instalación

La comunidad Arduino apoyando hizo una modificación y agrego una extension del SDK (Software Development Kit) de Raspberry Pi; similar a VSCode con sus extensiones.

https://arduino-pico.readthedocs.io/en/latest/install.html

1.2 - Conoce la arquitectura y organización de un procesador y la estructura de un programa en ensamblador e identifica la relación entre ambos.

Image

ACTIVIDAD:

Una vez repasado el material del curso (POSTER + Libro de Practicas.PDF) cuestiona el GPT Gemini de Google

  • Las preguntas deben estar en marcadas de amarillo (html o LATEX )

    ($${\color{red}Welcome \space \color{lightblue}To \space \color{orange}Stackoverflow}$$)

  ($${\color{red}Welcome \space \color{lightblue}To \space \color{orange}Stackoverflow}$$) 
  • Repuestas seleccionadas
  • Finalmente genera una IMAGEN GENERATIVA con http://firefly.adobe.com que ilustre los registros generales del la arquitectura ARM32 del lenguaje ensamblador (ver imagen abajo de este post)
  • Colocar la imagen arriba como una portada.

Depositar su GIST en enlace iDOCEO con su correo y PIN, este solo pedira 1 preguntas "Entregar LINK"

Rúbrica:

La rúbrica para evaluar el cheat sheet se basará en los siguientes criterios:

Completitud El cheat sheet debe cubrir todos los temas relevantes de la sección seleccionada del póster.
Precisión La información del cheat sheet debe ser precisa y actualizada.
Claridad El texto debe ser un balance entre fácil de leer y comprender, sea introductorio del su curso.
Organización La información debe estar organizada de forma lógica y coherente.
Formato El contexto generativo, debe estar formateado correctamente utilizando markdown.

2.1.6 Proyecto de exito mundial: Microbit.org y ARM Toolchain

PUBLICACION DE ARM CASOS DE EXITO

https://www.arm.com/company/success-library/arm-designs/microbit

MANUAL OPENSOURCE

https://microbit.org/get-started/user-guide/open-source/

ENSAMBLADOR CON MICROBIT

Para trabajar con micro:bit utilizando código en ensamblador, es importante tener en cuenta que la arquitectura de micro:bit difiere de las configuraciones típicas de Raspberry Pi y otros dispositivos basados en ARM que hemos discutido. El micro:bit V1 está basado en el microcontrolador nRF51822 que utiliza un procesador ARM Cortex-M0, mientras que el micro:bit V2 usa el nRF52833 con un procesador ARM Cortex-M4. Ambos son significativamente diferentes en capacidades y estructura a los procesadores ARM Cortex-A utilizados en Raspberry Pi. Además, la programación en ensamblador para estos microcontroladores se centra más en la interacción con su hardware específico y las capacidades de bajo nivel, como el manejo de GPIO, comunicación serial, y temporizadores, entre otros.

Para comenzar a escribir programas en ensamblador para el micro:bit, necesitarías familiarizarte con:

.section .text
.global _start

_start:
  1: b 1b

El conjunto de instrucciones específico del ARM Cortex-M0 o Cortex-M4, dependiendo de la versión de tu micro:bit. Esto incluye comprender las instrucciones básicas para operaciones matemáticas, manipulación de datos, y control de flujo.

Los registros específicos del microcontrolador y cómo interactúan con el hardware del micro:bit, incluidos los pines de entrada/salida, el acelerómetro, la pantalla LED, y otros periféricos.

El entorno de desarrollo y las herramientas necesarias para compilar y cargar el código en ensamblador en el micro:bit. Esto podría incluir configurar un entorno de desarrollo cruzado y usar herramientas como arm-none-eabi-gcc para compilar tu código ensamblador en un archivo binario que pueda ser cargado en el micro:bit.

Para adaptar un programa en ensamblador a fin de controlar un LED en un micro:bit (tanto versión 1 como versión 2), es crucial entender cómo el microcontrolador específico maneja los pines de entrada/salida (GPIO). Dado que el micro:bit V1 utiliza el nRF51822 (basado en ARM Cortex-M0) y el V2 utiliza el nRF52833 (basado en ARM Cortex-M4), ambos tienen capacidades similares de GPIO pero pueden diferir en detalles específicos de implementación. A continuación, proporcionaré un ejemplo conceptual para ambos, enfocado en prender y apagar un LED en un bucle infinito.

COMPILACION

Para compilar y subir un programa en ensamblador a un micro:bit, necesitarás seguir varios pasos que involucran la compilación de tu código en ensamblador a un archivo binario o hexadecimal (.hex), y luego transferir este archivo al micro:bit. A continuación, te guiaré a través de un proceso general que se puede adaptar dependiendo de las herramientas específicas que elijas usar y el sistema operativo que estés utilizando.

  1. Preparación del entorno
    Primero, necesitas tener un entorno de desarrollo cruzado para ARM instalado en tu computadora. Esto incluye el compilador GNU ARM (arm-none-eabi-gcc), el ensamblador (arm-none-eabi-as) y el utilitario para copiar y transformar archivos de objetos (arm-none-eabi-objcopy).

Estas herramientas están disponibles en el paquete GNU ARM Embedded Toolchain.

En Windows, puedes descargar estas herramientas desde el sitio oficial de ARM Developer.

En Linux, estas herramientas a menudo se pueden instalar directamente desde el gestor de paquetes de tu distribución, por ejemplo, en Ubuntu podrías usar:

sudo apt-get install gcc-arm-none-eabi
  1. Escribir el programa en ensamblador
    Crea un archivo de texto con tu programa en ensamblador, como main.s. Usa el ejemplo de código que te proporcioné anteriormente o cualquier otro código que desees compilar.

  2. Compilación del código en ensamblador
    Abre una terminal o línea de comandos y navega hasta el directorio donde guardaste main.s. Utiliza el siguiente comando para compilar tu código en ensamblador a un archivo de objeto:

arm-none-eabi-as -mcpu=cortex-m0 -g main.s -o main.o

Este comando especifica que el procesador objetivo es un Cortex-M0, que es el caso para el micro:bit V1. Para el micro:bit V2, que usa un Cortex-M4, cambiarías -mcpu=cortex-m0 por -mcpu=cortex-m4

  1. Enlazar el código objeto a un archivo binario
    El siguiente paso es enlazar el archivo de objeto a un archivo binario ejecutable
arm-none-eabi-ld -Ttext=0x0 -o main.elf main.o

Este comando enlaza main.o a un archivo ELF ejecutable (main.elf), con la dirección de inicio especificada por -Ttext=0x0. Debes ajustar la dirección de inicio según sea necesario para tu aplicación y entorno de hardware específico.

Finalmente, convierte el archivo ELF a un formato .hex que puede ser cargado en el micro:bit:

arm-none-eabi-objcopy -O ihex main.elf main.hex
  1. Subir el programa al micro:bit
    Conecta tu micro:bit a tu computadora usando un cable USB. El micro:bit debería aparecer como una unidad de disco USB.
    Copia el archivo main.hex a la unidad del micro:bit usando el explorador de archivos o un comando de copia en la terminal. La transferencia del archivo hará que el micro:bit se reinicie automáticamente y comience a ejecutar el programa.

Este es un proceso básico y los comandos específicos pueden variar dependiendo de las opciones de tu programa en ensamblador, la versión del micro:bit, y si estás utilizando funcionalidades específicas del microcontrolador o periféricos. Asegúrate de consultar la documentación específica de tu entorno de desarrollo y las herramientas para cualquier ajuste necesario en los comandos.

ARM Toolchain

https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain
https://developer.arm.com/downloads/-/gnu-rm

2.2.1 Microcontrolare Apple H2 de Airpods vs software

Image

La imagen muestra una comparativa entre los ingresos de los AirPods de Apple y diversas compañías tecnológicas destacadas a partir de datos del 2022. Es notable que los ingresos generados solo por los AirPods son comparables o incluso superiores a los ingresos totales de empresas como Spotify, eBay y Airbnb.

Este gráfico puede servir para ilustrar un punto importante en un curso de ARM assembly relacionado con la importancia del hardware: aunque a menudo se centra la atención en el software y en los servicios, el hardware sigue siendo un componente crítico y altamente lucrativo en el ecosistema tecnológico. Los AirPods son un ejemplo de cómo el hardware innovador y bien diseñado puede generar una cantidad significativa de ingresos y mantener una posición relevante en el mercado.

En términos de enseñanza de ARM assembly, esto es relevante porque ARM es una arquitectura de procesador que se encuentra en muchos dispositivos móviles, incluidos aquellos que se conectan con hardware como los AirPods. Comprender cómo funciona el hardware a nivel de procesador permite a los estudiantes apreciar la relación directa entre la eficiencia y efectividad del código a bajo nivel y el rendimiento del hardware en el mundo real.

Cuando los estudiantes trabajan con ARM assembly, están lidiando con instrucciones que interactúan directamente con el hardware del dispositivo. Esta interacción es crucial porque un código assembly bien optimizado puede mejorar significativamente el rendimiento de un dispositivo, lo cual es esencial para el éxito de productos como los AirPods. La eficiencia en el consumo de energía, la velocidad de procesamiento y la capacidad de realizar múltiples tareas de manera efectiva son todas áreas en las que un buen diseño de hardware y un software eficiente pueden hacer una gran diferencia.

Por lo tanto, entender el ensamblador ARM no solo es importante para aprender cómo funcionan las computadoras a un nivel fundamental, sino que también proporciona la base para comprender cómo se pueden desarrollar y optimizar productos de hardware exitosos que generen ingresos significativos y sean competitivamente viables en el mercado tecnológico actual.

Image

1.2.1 Practicas GTP con ASM 8bit-CLang

Image

Acceder a una maquina simple 8-bits emulada.

Utilizar los GTP´s para documentar el código fuente del emulador de 8-bits

Es libre de cuestionar cualquier duda por el GTP

Aquí tienes una versión de la actividad de laboratorio en formato Markdown para GitHub:


Actividad de Laboratorio de Computación: Conversión de ASM a C

Objetivo

El objetivo de esta práctica de laboratorio es familiarizarse con la programación en lenguaje ensamblador (ASM) de 8 bits y su conversión a lenguaje C estándar. Los estudiantes aprenderán a manipular y modificar muestras de código, así como a comprender la documentación de mnemónicos e instrucciones de un emulador específico.

Fuente:

Requisitos Previos

  • Conocimientos básicos de programación en C y lenguaje ensamblador.
  • Acceso a un entorno de desarrollo de C y a un emulador de ASM de 8 bits.

Parte 1: Estudio de Mnemónicos e Instrucciones

1. Revisión de Documentación

  • Inicie la actividad leyendo la documentación proporcionada sobre el emulador de ASM de 8 bits utilizado en este laboratorio. Preste especial atención a los mnemónicos (abreviaturas de instrucciones) disponibles y a sus respectivas funciones.

2. Análisis de Mnemónicos

  • Elija cinco mnemónicos del conjunto de instrucciones y describa brevemente su propósito y cómo se utilizan en programas de ASM.

Parte 2: Conversión de Código ASM a C

1. Selección de Muestras de Código ASM

  • Utilizando las muestras de código ASM proporcionadas por el instructor, seleccione tres fragmentos de código para trabajar. Asegúrese de que cada muestra incluya varios mnemónicos diferentes.
  • Pida a el GTP le agregue comentarios detallados de lo que sucede linea por linea.

2. Análisis del Código ASM

Para cada fragmento de código seleccionado, realice lo siguiente:
a. Identifique y describa el propósito del código.
b. Anote los mnemónicos utilizados y su función en el contexto del código.

3. Conversión a C

  • Convierta cada muestra de código ASM a lenguaje C estándar. Asegúrese de mantener la funcionalidad original del código ASM en su versión en C.

4. Comparación y Análisis

  • Compare el código original en ASM con su versión convertida en C. Discuta las diferencias en términos de sintaxis, legibilidad y eficiencia.

Parte 3: Modificación del Código

1. Manipulación del Código

  • Modifique las versiones en C de las muestras de código para alterar su comportamiento. Esto puede incluir cambios en la lógica, la implementación de nuevas características o la optimización del código.

2. Pruebas y Validación

  • Compile y ejecute las versiones modificadas del código en C. Verifique que funcionen según lo previsto y documente cualquier cambio en el comportamiento del programa.

Entrega GIST personal

  • Un informe que incluya:
    • La descripción y análisis de los mnemónicos seleccionados.
    • El código ASM original y su versión convertida a C para cada muestra.
    • Una discusión sobre las diferencias entre las versiones ASM y C.
    • El código modificado en C y una descripción de los cambios realizados.
    • Conclusiones sobre la experiencia de conversión de código y su manipulación.

Evaluación

La evaluación de esta actividad se basará en la precisión de la conversión del código, la creatividad en las modificaciones realizadas al código en C y la profundidad del análisis y discusión en el informe.


Image

Solicitar a GTP genera una SALIDA en formato mermaid, este se pasará a el graficador

http://mermaid.live


Formato de código fuente en MARKDOWN

RESALTAR CODIGO DE BLOQUE

function test() {
  console.log("notice the blank line before this function?");
}

(triplecomilla) ```javascript
function test() {
console.log("notice the blank line before this function?");
}

(triplecomilla)```

3.5 (Practica 3) PicoW Wi-Fi Server (o cliente wifi)

Image

Simulador https://wokwi.com/projects/new/pi-pico-w

Práctica: Servidor Web con Pico W para Controlar un LED

Objetivo

Desarrollar un servidor web utilizando el microcontrolador Raspberry Pi Pico W, programado en C/C++, que permita controlar el estado de un LED a través de una interfaz web.

Requisitos del Proyecto

  • Configuración del Hardware: Leer documentacion de Pico W del LED interno (no requiere uno externo).
  • Configuración de Red: Establecer una conexión WiFi con el Pico W para permitir el acceso remoto.
  • Servidor Web: Implementar un servidor web en el Pico W que pueda recibir comandos a través de HTTP para controlar el LED.
  • Interfaz de Usuario Web: Crear una página web sencilla con botones para "Encender" y "Apagar" el LED.
  • Control del LED: Programar la lógica en C/C++ para que el Pico W pueda encender y apagar el LED basándose en las solicitudes recibidas del servidor web.

Descripción Adicional

  • Utilizar bibliotecas y herramientas adecuadas para la configuración del servidor web en el Pico W.
  • Asegurarse de que el código esté bien documentado, explicando cómo se configura la red y se manejan las solicitudes HTTP.
  • Incluir medidas básicas de seguridad para la conexión WiFi y el acceso al servidor web.

Resultados Esperados

  • El estudiante deberá ser capaz de demostrar cómo el Pico W puede interactuar con dispositivos de hardware a través de la web.
  • Se espera que el LED pueda ser controlado de manera remota desde cualquier navegador conectado a la misma red WiFi.

Esta práctica ofrece una excelente oportunidad para explorar la programación de microcontroladores en un contexto de IoT (Internet de las Cosas), utilizando el Pico W para aplicaciones de control remoto.

Practica 1.1 Invocar Arquitectura ARM en AWSAcademy (AARCH64)

image

Image

Favor de borrar las maquinas de pruebas de AWS Academy

a) Terminar y borrar todas las instancias de prueba
b) Invocar nuevo nodo Ubuntu en ARM Aquitectura
colocando al final el bloque siguiente GIST:

https://gist.github.com/IoTeacher/6f25bb5efb9dfff4ae8a0f3651c31a4b

c) Acceder via VS Code con la extension SSH


Image

Lista de Cotejo, Estudiantes envía 1 post de sus logros de esta practica de conocer la arquitectura ARM 64 bit

CITAS:
https://aws.amazon.com/es/blogs/aws/join-the-preview-for-new-memory-optimized-aws-graviton4-powered-amazon-ec2-instances-r8g/

Fila 7

          Fila 7
  1. ¿Qué son los Flags en el contexto de la CPU de un emulador de 8 bits y cuál es su función principal?
  2. ¿Cómo se establecen o modifican los Flags como resultado de operaciones aritméticas o lógicas en el emulador de 8 bits?
  3. ¿Cuáles son algunos ejemplos de Flags comunes en el emulador de 8 bits y qué indica cada uno?
  4. ¿De qué manera se pueden utilizar los Flags para controlar el flujo de ejecución de un programa en el emulador de 8 bits?
  5. ¿Es posible acceder o modificar directamente los Flags a través de instrucciones específicas en el emulador de 8 bits, y si es así, cómo?

Originally posted by @IoTeacher in #14 (comment)

3.6 PRACTICA 4, control Bluetooth con PicoW

Simulador
https://wokwi.com/projects/new/pi-pico-w

Image

Image

Práctica: Control de LED Interno en Pico W mediante Bluetooth y Smartphone

Objetivo

Desarrollar un programa en C/C++ que permita controlar el LED interno de una Raspberry Pi Pico W a través de conexiones Bluetooth utilizando un smartphone como interfaz de control.

Requisitos del Proyecto

  • Configuración de Bluetooth: Establecer y configurar la conexión Bluetooth en el Pico W para permitir la comunicación con el smartphone.
  • Aplicación Smartphone: Utilizar una aplicación Google Play o AppStore de Apple en smartphone que pueda enviar comandos a través de Bluetooth para controlar el LED.
  • Control del LED: Implementar la funcionalidad en el Pico W para encender y apagar el LED interno basado en los comandos recibidos del smartphone.
  • Documentación: Documentar el código fuente para explicar la configuración de Bluetooth y el manejo de eventos de control del LED.

Descripción Adicional

  • Se debe prestar atención al manejo de conexiones Bluetooth, asegurando una conexión estable y segura entre el Pico W y el smartphone.
  • Esta práctica ofrece una excelente oportunidad para explorar la programación de microcontroladores con capacidades de red y la interacción con aplicaciones móviles.

Habilidades Desarrolladas

  • Programación en C/C++ para sistemas embebidos.
  • Manejo y configuración de módulos Bluetooth.
  • Desarrollo de interfaces de usuario en aplicaciones móviles para controlar dispositivos IoT.

Esta práctica es ideal para estudiantes interesados en el área de IoT y comunicaciones inalámbricas, aplicando conceptos de programación en sistemas embebidos y desarrollo de aplicaciones móviles.

2.2 Conoce y aplica instrucciones del lenguaje ensamblador, para programar aplicaciones de interfaz .

TRABAJARÁ CON EL PROGRAMA DE "TORRES DE HANOI"

https://github.com/tectijuana/interfaz/blob/master/arm32/codigo/hanoi.md

El programa esta elaborado, solicita su atenciòn para:

NOTA: Programas fuentes que no tengan encabezado con su nombre, ASCINEMAS que no tenga su nombre mencionado en un $echo o similar. No se tomarán como evaluación en iDOCEO es obligatorio separar su esfuerzo extraordinario con ChatGTP sin aportación

1.2 ASM de Procesador vs ASM de microcontrolador

Image

--- MARTES 27 de FEB----

Acceder a una maquina simple 8-bits emulada.

https://cpu.visualrealmsoftware.com/emu/

Biografia: https://theshamblog.com/how-the-8-bit-breadboard-computer-works/

Emulador de 8 bits de Ben Eater disponible en el enlace proporcionado, he aquí cinco preguntas potenciales con sus respectivas respuestas, ideales para entender y explorar las capacidades de esta máquina simple emulada:

  1. ¿Qué es el emulador de 8 bits de Ben Eater y para qué sirve?

    • El emulador de 8 bits de Ben Eater es una simulación digital de una computadora de 8 bits construida físicamente usando componentes electrónicos simples como parte de un proyecto educativo. Este emulador permite a los usuarios interactuar con una versión virtual de la computadora, facilitando la comprensión de los fundamentos de la arquitectura de computadoras, el funcionamiento de los circuitos digitales y los principios básicos de la programación a nivel de hardware.
  2. ¿Cómo se realiza una operación simple, como la suma de dos números, en el emulador?

    • Para realizar una suma de dos números en el emulador, primero debes ingresar los números utilizando las instrucciones de carga adecuadas para almacenar cada número en registros diferentes. Luego, utilizas una instrucción de suma que lee los valores de estos registros, realiza la operación de suma, y almacena el resultado en un registro o memoria. Finalmente, puedes visualizar el resultado usando una instrucción de salida que muestre el contenido del registro o memoria donde se almacenó el resultado.
  3. ¿Qué representan las distintas áreas del emulador como la CPU, la memoria y los registros?

    • En el emulador, la CPU (Unidad Central de Procesamiento) es el núcleo que ejecuta las instrucciones del programa, realizando operaciones lógicas y aritméticas. La memoria es donde se almacenan las instrucciones del programa y los datos necesarios para su ejecución. Los registros son pequeñas unidades de almacenamiento dentro de la CPU que retienen temporalmente los datos o direcciones de memoria necesarios para ejecutar las instrucciones, facilitando el acceso rápido durante el proceso de ejecución.
  4. ¿Cómo se puede visualizar el contenido de la memoria en el emulador?

    • El emulador proporciona una interfaz visual que muestra el contenido de la memoria en tiempo real. Generalmente, hay una sección específica en la interfaz de usuario donde se listan las direcciones de memoria junto con los valores almacenados en cada una de ellas. Puedes navegar por esta sección para observar cómo cambian los valores de la memoria a medida que se ejecutan las instrucciones del programa.
  5. ¿Es posible modificar el programa cargado en el emulador? Si es así, ¿cómo?

    • Sí, es posible modificar el programa cargado en el emulador. Generalmente, esto se hace accediendo a una sección de la interfaz donde puedes escribir o modificar el código de máquina o las instrucciones en un formato que el emulador pueda entender. Después de realizar los cambios deseados, puedes cargar el nuevo programa en la memoria del emulador y ejecutarlo para observar los resultados de tus modificaciones. Esto es especialmente útil para experimentar con diferentes algoritmos y entender mejor cómo funcionan las instrucciones a nivel de hardware.

Estas preguntas y respuestas ofrecen un punto de partida para explorar y entender las funcionalidades básicas del emulador de 8 bits de Ben Eater, proporcionando una herramienta educativa valiosa para aquellos interesados en los fundamentos de la computación.

1.2 ASM de Procesador vs ASM de microcontrolador

Image

--- MARTES 27 de FEB----

Acceder a una maquina simple 8-bits emulada.

https://cpu.visualrealmsoftware.com/emu/

Biografia: https://theshamblog.com/how-the-8-bit-breadboard-computer-works/

Emulador de 8 bits de Ben Eater disponible en el enlace proporcionado, he aquí cinco preguntas potenciales con sus respectivas respuestas, ideales para entender y explorar las capacidades de esta máquina simple emulada:

  1. ¿Qué es el emulador de 8 bits de Ben Eater y para qué sirve?

    • El emulador de 8 bits de Ben Eater es una simulación digital de una computadora de 8 bits construida físicamente usando componentes electrónicos simples como parte de un proyecto educativo. Este emulador permite a los usuarios interactuar con una versión virtual de la computadora, facilitando la comprensión de los fundamentos de la arquitectura de computadoras, el funcionamiento de los circuitos digitales y los principios básicos de la programación a nivel de hardware.
  2. ¿Cómo se realiza una operación simple, como la suma de dos números, en el emulador?

    • Para realizar una suma de dos números en el emulador, primero debes ingresar los números utilizando las instrucciones de carga adecuadas para almacenar cada número en registros diferentes. Luego, utilizas una instrucción de suma que lee los valores de estos registros, realiza la operación de suma, y almacena el resultado en un registro o memoria. Finalmente, puedes visualizar el resultado usando una instrucción de salida que muestre el contenido del registro o memoria donde se almacenó el resultado.
  3. ¿Qué representan las distintas áreas del emulador como la CPU, la memoria y los registros?

    • En el emulador, la CPU (Unidad Central de Procesamiento) es el núcleo que ejecuta las instrucciones del programa, realizando operaciones lógicas y aritméticas. La memoria es donde se almacenan las instrucciones del programa y los datos necesarios para su ejecución. Los registros son pequeñas unidades de almacenamiento dentro de la CPU que retienen temporalmente los datos o direcciones de memoria necesarios para ejecutar las instrucciones, facilitando el acceso rápido durante el proceso de ejecución.
  4. ¿Cómo se puede visualizar el contenido de la memoria en el emulador?

    • El emulador proporciona una interfaz visual que muestra el contenido de la memoria en tiempo real. Generalmente, hay una sección específica en la interfaz de usuario donde se listan las direcciones de memoria junto con los valores almacenados en cada una de ellas. Puedes navegar por esta sección para observar cómo cambian los valores de la memoria a medida que se ejecutan las instrucciones del programa.
  5. ¿Es posible modificar el programa cargado en el emulador? Si es así, ¿cómo?

    • Sí, es posible modificar el programa cargado en el emulador. Generalmente, esto se hace accediendo a una sección de la interfaz donde puedes escribir o modificar el código de máquina o las instrucciones en un formato que el emulador pueda entender. Después de realizar los cambios deseados, puedes cargar el nuevo programa en la memoria del emulador y ejecutarlo para observar los resultados de tus modificaciones. Esto es especialmente útil para experimentar con diferentes algoritmos y entender mejor cómo funcionan las instrucciones a nivel de hardware.

Estas preguntas y respuestas ofrecen un punto de partida para explorar y entender las funcionalidades básicas del emulador de 8 bits de Ben Eater, proporcionando una herramienta educativa valiosa para aquellos interesados en los fundamentos de la computación.

2.1 Programación básica

INTEGRACION DE ARM Assembly como MACRO con Leng. C

asciicast

Para integrar código de ARM32 assembly con C, es importante seguir una convención de llamadas que permita la comunicación entre ambos lenguajes. A continuación, te proporciono un ejemplo simple de cómo hacer esto. El ejemplo consistirá en una función de assembly que suma dos números y una función en C que llama a esta función de assembly.

Primero, creemos la función de assembly que suma dos números. Esta función recibirá dos argumentos y retornará la suma de ambos. La función podría llamarse sumar, y su código en assembly se vería así:

.global sumar
.type sumar, %function

sumar:
    @ Argumentos:
    @   r0 - primer número
    @   r1 - segundo número
    
    ADD r0, r0, r1  @ Suma r0 y r1, resultado en r0
    BX lr           @ Regresa a la función llamadora

Ahora, necesitas escribir el código en C que llame a esta función de assembly. Para hacer esto, declara un prototipo de la función sumar en tu código C, de modo que el compilador sepa de su existencia y pueda manejar correctamente la llamada. Luego, puedes llamar a sumar desde tu función principal en C o desde cualquier otra parte de tu código C.

El código en C que hace uso de la función sumar se vería así:

#include <stdio.h>

// Prototipo de la función assembly
extern int sumar(int a, int b);

int main() {
    int resultado;

    // Llama a la función assembly
    resultado = sumar(10, 20);

    printf("El resultado es: %d\n", resultado);
    return 0;
}

Para compilar y enlazar estos dos archivos, puedes usar un Makefile simple que utilice gcc para el código C y as para el assembly, o directamente en la línea de comandos si prefieres. Asegúrate de tener ambos archivos en el mismo directorio y de reemplazar <nombre_del_archivo_c> y <nombre_del_archivo_assembly> con los nombres de tus archivos reales.

En la línea de comandos, podrías compilar y enlazar tus archivos de la siguiente manera:

as -o sumar.o sumar.s          # Compila el código assembly
gcc -o sumar_c.o -c sumar.c    # Compila el código C
gcc -o programa sumar.o sumar_c.o   # Enlaza ambos objetos y genera el ejecutable

Este es un ejemplo básico para mostrarte cómo integrar ARM32 assembly con C. Puedes expandir esto para incluir llamadas a funciones más complejas y pasar diferentes tipos de datos entre C y assembly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.