Close

Tutoriál: pcDuino GPIO s Arduino IDE

V tomto tutoriálu si vysvětlíme, jak použít GPIO piny implementace Arduina v pcDuinu v2 a v3. Protože v3 je již dostupná můžete ji použít, je zaměnitelná s v2. Přestože je pcDuino v2 kompatibilní s Arduinem, je zde několik rozdílů, na které si musíte dát pozor, aby jste se vyhnuli nepříjemným chybám a vaše projekty uspěly. V této části tutoriálu projdeme následující:

– ADC (analog na digitál)
– Digitální vstupy a výstupy
– PWM (pulzně šířková modulace)
– I2C bus
– SPI bus

Použití ADC pinů

Stejně jako Arduino Uno, nebo kompatibilní pcDuino v2 má šest ADC pinů na obvyklých místech:
Použití ADC pinů pcDuina v2 je docela jednoduché, musíte si ale pamatovat několik věcí o hardwaru: Maximální vstupní napětí na A0 a A1 jsou 2 V – pro A2 až A5 je to 3,3 V.

pcduino-v2-ADC-pin-map

Přestože je na desce AREF pin, ve chvíli kdy tutoriál píši, ještě není tato funkce podporovaná. Z pohledu softwaru mají hodnoty A0 a A1 šesti bitové rozlišení a mohou spadnout mezi 0 a 63 (0 – 2v), ostatní mají dvanácti bitové rozlišení a proto hodnoty mezi 0 až 4095 (0 – 3,3 V). Použití ADC pinů je jednoduché, jeho ukázku vidíte v tomto sketchi:

// pcDuino v2 ADC 
#include <core.h> // pro pcDuino
int a0, a1, a2, a3, a4, a5;
void setup()
{
}
void loop()
{
// read all the ADCs
a0 = analogRead(0);
a1 = analogRead(1);
a2 = analogRead(2);
a3 = analogRead(3);
a4 = analogRead(4);
a5 = analogRead(5);
// zobrazí ADC hodnoty do konsole
printf(A0, A1, A2, A3, A4, A5n);
printf(%d %d %d %d %d %dn, a0, a1, a2, a3, a4, a5);
printf(n);
delay(1000);
}

… který má za následek tuto konzoli:

pcDuino-ADC-demo-output

Digitální výstupy

Implementace digitálních výstupů na pcDuinu v2 není nic neobvyklého, kromě toho že jste limitováni maximálním napětím 3,3 V namísto obvyklých 5 V. Dále můžete využít jen 4mA z každého pinu. Tak i tak, pokud máte nějaké 5V-only shieldy, které musíte použít s vaším pcDuinem v2, je tu deska na převedení napětí pro pcDuino v2, která problém vyřeší:

pcDuino-v2-voltage-translation-board-TBoard
Pro nové verze by ale napětí 3,3 V neměl být problém. Nové senzory, integrované obvody a další součástky by měly být s 3,3 V kompatibilní. S pcDuino v2 dále získáte čtyři extra digitalní I/O piny, ty najdete poblíž SPI skupiny, jako na obrázku níže:

pcDuino-extra-GPIO-pins
Ty jsou jednoduše adresované jako D14 až D17.

Nyní zpět k rychlé demonstraci pomocí typických LEDek. Protože proud vycházející z každého GPIO pinu nemůže přesáhnout 4 mA. Budete muset použít rezistor, aby jste udrželi věci pod kontrolou. Použijte LED wizard, a vyplňte pro zdroj 3,3 V, 2,1 V jako propustné napětí pro naše LEDky a 4 mA pro proud. Hodnota pro rezistor vychátí 330Ω.

Pokud vás přepadla lenost stejně jako nás 🙂 a požijete například 560Ω, proud bude kolem 2,5 mA s přijatelnými výsledky. Přesně to jsme udělali v následujícím ukázkovém sketchi:

#include <core.h> // for pcDuino
void setup()
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
void loop()
{
for (int i = 4; i < 8; i++)
{
digitalWrite(i, HIGH);
delay(250);
digitalWrite(i, LOW);
}
}

… výsledek můžete vidět v tomto videu:

V případě, kdy používáte digitální piny a vstupy, postupujte jako obvykle. Mají ale jiné maximum vstupního napětí, tedy 3,3 V.

Použití I2C data bus

I2C bus (dvouvodičové rozhraní) je běžná sériová datová sběrnice. Používá se pro propojování různých zařízení s mikrokontrolérem. Informace o sběrnici I2C a Arduino tutoriál najdete zde. Stejně jako Arduino Uno R3, I2C bus piny jsou oba A4 a A5 (pro SCL a SDA) a mohou se například nacházet poblíž D13.

Je několik omezení pro verzi pcDuino V2. Maximální rychlost je 200 kHz, používá pouze sedmi bitové adresy a nemůžete použít pcDuino v podřízeném režimu.

Demonstrujeme I2C sběrnici, zapisováním dat do a čtením z 24LC256 EEPROM. Ten se sám o sobě hodí, protože pcDuino V2 nemá EEPROM funkci. To samé demonstrujeme s Arduino Uno v druhé části našich I2C tutoriálů.

Propojení je velmi jednoduché: Piny od 1 do 4 EEPROMu jsou zapojené do GND, pin 5 do SDA, pin 6 do SCL, pin7 do GND a pin 8 do 3,3 V. Nakonec 0,1 uF kondenzátor je umístěn na opačné straně 3,3 V a GND

pcduino-v2-eeprom

Sketch pro čtení a zapisování hodnot do EEPROM je jednoduchý, a kromě #include <core.h> pro pcDuino operují všechny funkce normálně.

// pcDuino I2C 
#include <core.h> // pro pcDuino
#include <Wire.h> pro I2C
#define chip1 0x50 device bus address for EEPROM
// hodnoty vždy ukládejte do proměných
unsigned int pointer = 69;
byte d=0; 
void setup()
{
Wire.begin(); // wake up, I2C!
}
void writeData(int device, unsigned int add, byte data)
// napíše data do I2C adresy zařízení
{
Wire.beginTransmission(device);
Wire.write((int)(add 8)); 
Wire.write((int)(add & 0xFF)); 
Wire.endTransmission();
delay(10);
}
byte readData(int device, unsigned int add)
{
byte result; 
Wire.beginTransmission(device); 
Wire.write((int)(add 8)); 
Wire.write((int)(add & 0xFF)); 
Wire.endTransmission();
Wire.requestFrom(device,1); 
result = Wire.read();
return result; 
}
void loop()
{
printf(Writing data...n);
for (int a=0; a10; a++)
{
writeData(chip1,a,a);
}
printf(Reading data...n);
for (int a=0; a10; a++)
{
d=readData(chip1,a);
printf(Pointer %d holds %d.n,a,d);
}
}

… to vyústí do následující výstupní konzole:

pcduino-i2c-demonstration

Jak už víte, používání I2C není nijak těžké. Mnoho začátečníků ale odradí, nebo donutí v panice běžet do nejbližší knihovny. Nepotřebujete knihovnu, dejte I2C ještě trochu času a máte to v malíčku.

Použití SPI datové sběrnice

Nejdříve si projděte několik našich SPI Arduino tutoriálů, pokud SPI dosud neznáte. Zapisování do SPI zařízení pomocí pcDuina v2 není nic složitého. Je zde 3,3V hardwarová limitace a SPI piny jsou na stejném místě (D10 až D13), nebo v oddělené skupině na desce:

pcduino-v2-SPI-pins
Dále maximální rychlost SPI je 12 Mhz a implementace SPI na pcDuino v2 může pracovat jedině jako master. Je zde, ale několik důležitých rozdílů. Pro demonstraci ovládáme Microchip MCP4162, digitální reostat, pomocí SPI pro nastavení jasu na LED. Zde je obvod:

pcDuino-v2-MCP4162-SPI-demo-circuit
A teď ke sketchi. Všimněte si čtvrté řádky ve void setup() -ta nastavuje rychlost SPI na 12 Mhz. Rychlost můžete omezit ostatními násobiteli, jako jsou 32, 64 a 128, aby jste jej ještě více zpomalili. Dalším důležitým bodem je použití SPI.transfer(). U pcDuina v2 máme dva parametry. První jsou data poslaná do SPI zařízení a druhým je buď:

SPI_CONTINUE

Pokud ihned následuje další byte dat, nebo:

SPI_LAST

Když je to poslední bajt pro okamžitý transfer. To můžete vidět, na použití parametrů ve funkci setValue(), v ukázce níže:

// pcDuino SPI demonstration
#include <core.h> // for pcDuino
#include <SPI.h>
int ss = 10;
int del = 1000;
void setup()
{
SPI.begin();
SPI.setDataMode(SPI_MODE3);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV16);
pinMode(ss, OUTPUT);
digitalWrite(ss, HIGH);
}
void setValue(int value)
{
digitalWrite(ss, LOW);
SPI.transfer(0, SPI_CONTINUE);
SPI.transfer(value, SPI_LAST);
digitalWrite(ss, HIGH);
}
void loop()
{
setValue(255);
delay(del);
setValue(223);
delay(del);
setValue(191);
delay(del);
setValue(159);
delay(del);
setValue(127);
delay(del);
setValue(95);
delay(del);
setValue(63);
delay(del);
setValue(31);
delay(del);
setValue(0);
delay(del);
}

Ve chvíli, kdy používáte SPI sběrnici, relevantní data se zobrazí v okně. Například:

pcduino-V2-SPI-console-output

A nakonec na videu ukážeme, že to opravdu funguje. Na reostatu můžete vidět výstupní napětí, které se shoduje s jasem LEDek.

PWM – pulzně šířková modulace

Pomocí PWM můžete simulovat analogový výstup z pcDuino v2. Máme ale dva typy PWM pinů. První najdete na digitálních pinech D3, D9, D10 a D11, ty jsou simulovanou PWM a mají nízký rozsah od 0 do 25 na 5 Hz. Dále máme dva hardwarové PWM piny: D5 a D6, které fungují na 520 Hz a mají plný rozsah od 0 do 255, dostupný v analogWrite(). Jejich výstup je znovu 3,3 V. Dále nemůžete použít funkci pinMode(), nebo SPI sběrnici, pokud používáte D10, a nebo D11 PWM.

Závěrem

Nyní by jste měli chápat možnosti a omezení použití GPIO pinů na vašem pcDuino v2 Arduino sketchi. Budeme vydávat další články o pcDuino v2, tak sledujte naše stránky. PcDuino desky a příslušenství můžete koupit na HWKitchen.

 

Přeloženo ze souhlasem autora z: 

 

Oldřich Horáček

Oldřich Horáček

"Žádný člověk se nestane profíkem jen tak přes noc..."
Jsem zapálený hardwerář a tvůrce. Snažím se lidem přibližovat technologie, usnadňovat začátky a podporovat zajímavé projekty. Web Arduino.cz vznikl právě s tímto cílem. Moc mě baví věci udávat do pohybu a rozvíjet :-).
Oldřich Horáček

Latest posts by Oldřich Horáček (see all)

Napsat komentář