====== Portwell NANO-6050 ======
* Product Page: https://portwell.com/products/detail.php?CUSTCHAR1=NANO-6050
* Manual: [[http://drivers.portwell.com/IPC_Manual/NANO/NANO-6050/Manual_NANO-6050_R1_1.2_20161107.pdf|Manual_NANO-6050_R1_1.2_20161107.pdf]] ({{ ::manual_nano-6050_r1_1.2_20161107.pdf |}})
===== Portwell Engineering Tool =====
{{ ::20210825_unified_pet_4.4.27.zip |}}
===== GPIO Use Examples =====
{{::nano-6050_gpio_map.png?nolink&200|}}
==== LED Blink ====
Connect LEDs (though resistors!) to GPIO 1 & 2
#include "stdafx.h"
#include "User_Api.h"
#include "PET_Type.h"
#include "time.h"
void delay(int sec)
{
int ms = 1000 * sec;
clock_t start_time = clock();
while (clock() < start_time + ms);
}
int main()
{
int i;
// init portwell API
PET_API_Init();
// set GPIO 1 and 2 to outputs
PET_GPIO_SetPinDirection (1, 1, 0);
PET_GPIO_SetPinDirection (1, 2, 0);
// blink!
for (i = 1; i < 100; i++)
{
PET_GPIO_WritePin(1, 1, 1);
PET_GPIO_WritePin(1, 2, 0);
delay(75);
PET_GPIO_WritePin(1, 1, 0);
PET_GPIO_WritePin(1, 2, 1);
delay(75);
}
// turn both LEDs off
PET_GPIO_WritePin(1, 1, 0);
PET_GPIO_WritePin(1, 2, 0);
// close portwell API
PET_API_Uninit ();
}
Build:
''gcc blink.c -o blink libapi_x64.a -lm''
==== Input Test ====
Connect GPIOs 3 & 4 to ground through buttons
#include "stdafx.h"
#include "User_Api.h"
#include "PET_Type.h"
#include "time.h"
void delay(int sec)
{
int ms = 1000 * sec;
clock_t start_time = clock();
while (clock() < start_time + ms);
}
int main()
{
int i;
// start portwell API
PET_API_Init();
// set pin 3 & 4 as an input
PET_GPIO_SetPinDirection (1, 3, 1);
PET_GPIO_SetPinDirection (1, 4, 1);
unsigned char greenvalue = 0;
unsigned char redvalue = 0;
for (i = 1; i < 20; i++)
{
// read pins, print values
PET_GPIO_ReadPin(1, 4, &greenvalue);
printf("\n Green is: %d", greenvalue);
PET_GPIO_ReadPin(1, 3, &redvalue);
printf("\n Red is: %d\n", redvalue);
delay(200);
}
printf("\n");
// close API
PET_API_Uninit ();
}
Build:
''gcc inputTest.c -o inputTest libapi_x64.a -lm''
==== Button LED ====
Lights LEDs when buttons are pressed.
#include "stdafx.h"
#include "signal.h"
#include "User_Api.h"
#include "PET_Type.h"
#include "time.h"
static volatile sig_atomic_t keep_running = 1;
static void sig_handler(int _)
{
(void)_;
keep_running = 0;
}
int main(void)
{
signal(SIGINT, sig_handler);
// start portwell API
PET_API_Init();
// set pin 3 & 4 as inputs
PET_GPIO_SetPinDirection (1, 3, 1);
PET_GPIO_SetPinDirection (1, 4, 1);
// set pin 1 & 2 as outputs
PET_GPIO_SetPinDirection (1, 1, 0);
PET_GPIO_SetPinDirection (1, 2, 0);
// pull 1 & 2 low
PET_GPIO_WritePin(1, 1, 0);
PET_GPIO_WritePin(1, 2, 0);
unsigned char greenvalue = 0;
unsigned char redvalue = 0;
while (keep_running)
{
// read pins, print values
PET_GPIO_ReadPin(1, 4, &greenvalue);
PET_GPIO_ReadPin(1, 3, &redvalue);
// check for button presses (0)
// bring pin high if pressed, low when released
// green
if (greenvalue == 0) {
PET_GPIO_WritePin(1, 2, 1);
} else {
if (greenvalue == 1) {
PET_GPIO_WritePin(1, 2, 0);
}
//red
if (redvalue == 0) {
PET_GPIO_WritePin(1, 1, 1);
} else {
if (redvalue == 1) {
PET_GPIO_WritePin(1, 1, 0);
}
}
}
}
// close API
PET_API_Uninit ();
return EXIT_SUCCESS;
}
==== Heartbeat ====
#include "stdafx.h"
#include "signal.h"
#include "User_Api.h"
#include "PET_Type.h"
#include "time.h"
#include "stdio.h"
static volatile sig_atomic_t keep_running = 1;
static void sig_handler(int _)
{
(void)_;
keep_running = 0;
}
void delay(int sec)
{
int ms = 1000 * sec;
clock_t start_time = clock();
while (clock() < start_time + ms);
}
int main(void)
{
signal(SIGINT, sig_handler);
// init portwell API
PET_API_Init();
// set GPIO 1 and 2 to outputs
PET_GPIO_SetPinDirection (1, 2, 0);
// blink!
while (keep_running)
{
PET_GPIO_WritePin(1, 2, 1);
delay(75);
PET_GPIO_WritePin(1, 2, 0);
delay(100);
PET_GPIO_WritePin(1, 2, 1);
delay(75);
PET_GPIO_WritePin(1, 2, 0);
//delay(500);
sleep(2);
}
// turn both LEDs off
PET_GPIO_WritePin(1, 2, 0);
// close portwell API
PET_API_Uninit ();
return EXIT_SUCCESS;
}