Ще бъдат разгледани няколко решения на прости практически проблеми с помощта на 3 различни платформи – обикновен микро-контролер Atmel ATtiny, система Arduino и система Raspberry Pi. Ще бъде направен сравнителен анализ между тях на базата на възможности, цена, производителност и др. Ще бъдат разгледани основните езици (ASM, C/C++, Processing и т. н.) и средства за разработка за тези платформи както и възможността за използването им при изучаване на софтуерните и хардуерните технологии.
6. Схема със светодиод
● Raspberry Pi
● Arduino
● Microcontroller
ATtiny85
● Processing, Wiring, Arduino, ...
7. Raspberry Pi – C/C++
#include <wiringPi.h>
int main (void)
{
wiringPiSetup ();
pinMode (0, OUTPUT);
for (;;)
{
digitalWrite (0, HIGH);
delay (500);
digitalWrite (0, LOW);
delay (500);
}
return 0;
}
#include <wiringPi.h>
int main (void)
{
wiringPiSetup ();
pinMode (0, OUTPUT);
for (;;)
{
digitalWrite (0, HIGH);
delay (500);
digitalWrite (0, LOW);
delay (500);
}
return 0;
}
8. Raspberry Pi – Python
import RPi.GPIO as GPIO
import time
# blinking function
def blink(pin):
GPIO.output(pin,GPIO.HIGH)
time.sleep(1)
GPIO.output(pin,GPIO.LOW)
time.sleep(1)
return
# to use Raspberry Pi board pin numbers
GPIO.setmode(GPIO.BOARD)
# set up GPIO output channel
GPIO.setup(11, GPIO.OUT)
# blink GPIO17 50 times
for i in range(0,50):
blink(11)
GPIO.cleanup()
9. Arduino – C/C++
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off
delay(1000); // wait for a second
}
10. ATtiny85 – C/C++
#include <avr/io.h>
#include <util/delay.h>
// Define the I/O port to be used for the LED.
// This a number between 0 and 7 that tells which bit to use.
#define LED_PORT PB3
int main(void) {
// Set the LED port number as output.
// The DDRB is the data direction for port B.
// - shifts the "1" on left to the desired position and ...
// - does bitwise "OR" with the value in the port register.
DDRB |= (1 << LED_PORT);
// Start infinite loop.
while (1) {
// Set the LED bit to "1" - LED will be "on".
PORTB |= (1 << LED_PORT);
// Wait a little. The delay does N-number of "empty" loops.
_delay_ms(200);
// Set the LED bit to "0" - LED will be "off".
PORTB &= ~(1 << LED_PORT);
// Wait a little.
_delay_ms(400);
}
return (0);
}
12. The Tinusaur project
● ATtiny85, 8-bit RISK
● 1 MHz (up to 20 MHz)
● 512 B RAM
● 8 KB PRG
● 512 B EEPROM
● 6 GPIO
13. Технически критерии за сравнение
Raspberry Pi Arduino Uno ATtiny85/Tinusaur
Процесор ARM11 – 32-bit RISK ATmega328P 8-bit RISK ATtiny85 – 8-bit RISK
Честота 700 MHz 16 MHz 1 MHz
Памет RAM 256/512 MB 2 KB 512 B
Памет PRG On-board SD slot 32 KB, 1 KB EERPROM 8 KB, 512 B EERPROM
Вход/изход 8×GPIO, UART, I²C, SPI ... 6 analog, 14 digital 6 analog/digital
Периферия USB, audio & video, HDMI - -
OS Linux, etc. - -
Размери 85×56 mm 53×68 mm 23×36 mm
Тегло 45 гр. 28 гр. 9 гр.
Консумация 500mA, 700–1000 mA 50 mA 1-2 мА, 300 µA (0.1 µA)
Цена 35 USD 20 USD (10 USD) 8 USD (5 USD)
14. Една практическа задача:
говореща играчка
Talking Toy
Основни функции:
● Дигитализиране на
аудио
●
Запис на аудио в
паметта
● Промени в записания
сигнал
●
Възпроизвеждане на
аудио
15. Ако използваме Raspberry Pi + Linux
● Трябва да се използва
външен модул за
аудио вход
● Кода може да се
напише на:
– C/C++
– Python
– Shell script
– Etc..
16. Ако използваме Arduino
● Външен модул за
запис и
възпроизвеждане
за аудио
● Програма за
комуникация с
модула
– Ползва се C/C++
17. Ако използваме ATtiny85/Tinusaur
Нужни са:
● микрофон с предусилвател
● външна памет със сериен достъп
●
високоговорител с усилвател
Най-важното е:
● Програма
18. Защо ATtiny85/Tinusaur
Ефективен:
● Минималната нужна
производителност
● Ниска консумация
● Ниска себестойност
● Миниатюрни размери
● Лесен старт при
разработката
Предимства на другите:
● Arduino:
– повече памет за код;
– възможност за разширение
на възможностите;
– сравнително ниска цена.
● Raspberry Pi:
– достатъчно ресурси
(процесор и памет);
– възможност за разширение
на възможностите.
19. А защо не ATtiny85/Tinusaur
● Няма достатъчно
вградена памет за
данни.
● Малко памет за
код.
● Невъзможност за
значително
разширение при
бъдещи нужди.
Недостатъци на другите
решения:
● Arduino:
– по-висока себестойност;
– по-големи размери;
– по-висока консумация.
● Raspberry Pi:
– прекалено мощен за
задачата;
– висока себестойност;
– много висока консумация;
– големи размери.
20. За какво друго може да ни
послужи ATtiny85/Tinusaur
Лични проекти:
● Включване и
изключване при
различни условия –
време, температура,
светлина, сигнал, и
др.
21. За какво друго: обучение
Обхваща един пълен, но
лесен за усвояване, цикъл на
разработка на малка
микропроцесорна система:
● подбор на компонентите на
системата
●
сглобяване на хардуера
●
писане на софтуер на ниско
ниво
●
писане на софтуер на високо
ниво
● решаване на
теоретични задачи
– хардуерни – логика,
сигнали и др.
– софтуерни – алгоритми,
паралелни задачи и др.
● решаване на
практически задачи
● създаване на реални
продукти