{{ :en:multiasm:curriculum:logo_400.png?200 | Multiasm Project Logo}}
=== Project Information ===
This content was implemented under the following project:
* Cooperation Partnerships in higher education, 2023, MultiASM: A novel approach for energy-efficient, high performance and compact programming for next-generation EU software engineers: 2023-1-PL01-KA220-HED-000152401.
**Consortium Partners**\\
* Silesian University of Technology, Gliwice, Poland (Coordinator),
* Riga Technical University, Riga, Latvia,
* Western Norway University, Forde, Norway,
* ITT Group, Tallinn, Estonia.
{{ :en:multiasm:curriculum:pasek_z_logami_1000px.jpg?400 | Consortium Partner's Logos}}
**Erasmus+ Disclaimer**\\
This project has been co-funded by the European Union.\\
Views and opinions expressed are, however, those of the author or authors only and do not necessarily reflect those of the European Union or the Foundation for the Development of the Education System. Neither the European Union nor the entity providing the grant can be held responsible for them.
**Copyright Notice**\\
This content was created by the MultiASM Consortium 2023–2026.\\
The content is copyrighted and distributed under CC BY-NC [[https://en.wikipedia.org/wiki/Creative_Commons_license|Creative Commons Licence]] and is free for non-commercial use.
{{ en:iot-open:ccbync.png?100 |CC BY-NC}}
In case of commercial use, please get in touch with MultiASM Consortium representative.
====== Introduction ======
This manual is intended to help students bootstrap into assembler programming across a variety of applications. It presents practical exercises in a hands-on lab format, often also covering toolchain configuration. Some sections present details for hardware, such as remote IoT and remote ARM laboratories. Others assume the student owns or has access to the PC and can install software.
====== ARM and Mobiles ======
ARM processors are omnipresent, ranging from simple IoT devices to laptops, notebooks, and workstations.\\
For this reason, we had to select one technology to use for a practical introduction and experimentation.\\
To present both hardware interfacing and programming, the obvious choice is the Raspberry Pi. The following chapters present laboratory details and scenarios.\\
Follow the links below to the lab descriptions and scenarios:
* [[en:multiasm:exercisesbook:arm:sut]]
* [[en:multiasm:exercisesbook:arm:rtu]]
===== SUT's ARM laboratory =====
===== RTU's ARM laboratory =====
====== Programming in Assembler for Embedded Systems ======
Assembler programming for embedded systems uses an integrated solution for IoT laboratories, namely VREL NextGen Software. \\
Users connect to the system using a web browser and develop software in the browser, compile it and inject it into the microcontroller, all remotely. Next, they use a web camera to observe the results.\\
The following chapters present more data on how to use the VREL NextGen remote labs system.
[[en:iot-open:practical:software]]
* [[en:iot-open:practical:software:users]]
* [[en:iot-open:practical:software:admins]]
===== SUT AVR Assembler Laboratory Node Hardware Reference =====
==== Introduction ====
Each laboratory node is equipped with an Arduino Uno R3 development board, based on the ATmega328P MCU. It also has two extension boards:
* external, analogue and digital communication board,
* user interface board presented on the image {{ref>sutavrlabimage1}}.
There are 8 laboratory nodes. They can be used independently, but to present collaboration, nodes are interconnected symmetrically with GPIOs presented in a hardware reference section below
==== Hardware reference ====
The table {{ref>sutavrlabtable1}} lists all hardware components and details. Note that some elements are accessible, but their use is not supported via the remote lab, e.g., buttons and a buzzer.\\ The node is depicted in the figure {{ref>sutavrlabimage1}}.
{{ :en:multiasm:exercisesbook:avr:sut_avr_lab_node.png?600 |}}
==== Communication ====
Devices (laboratory nodes) are interconnected in pairs, so it is possible to work in groups and implement scenarios involving more than one device:
* node 1 with node 2,
* node 3 with node 4,
* node 5 with node 6,
* node 7 with node 8.
Interconnections are symmetrical, so that device 1 can send data to device 2 and vice versa (similar to serial communication). Note that analogue inputs are also involved in the interconnection interface.
See image {{ref>sutavrlabimage2}} for details.
{{ :en:multiasm:exercisesbook:avr:sutavrconnections.png?600 |}}
SUT AVR nodes interconnection diagram
The in-series resistors protect the outputs of the Arduino boards from excessive current when both pins are set as outputs with opposite logical states.
The capacitors on the analogue lines filter the PWM signal, providing a stable voltage for measurement by the analogue-to-digital converter.
Such a connection makes it possible to implement a variety of scenarios:
* Connection of OC0A to ADC5 allows you to generate a voltage for measuring on input 5 of the analogue-to-digital converter.
* Connection of OC1A to INT0 allows you to generate a digital periodic signal that can trigger hardware interrupts.
* Connection of OC1B to T1 allows you to generate a digital periodic signal, the pulse count of which can be counted using timer T1.
Nodes are interconnected in pairs: 1-2, 3-4, 5-6, 7-8. Scenarios for data transmission between MCUs require booking and the use of correct nodes for sending and receiving messages.