quarta-feira, 2 de outubro de 2024

MILK-V DUO 256 - ARDUINO - TM1637

Requer Python atualizado e libraries pyserial e serial 
(use pip3 install serial e pip3 install pyserial)
,

Introdução

Arduino é uma plataforma de hardware de código aberto popular, conhecida por sua simplicidade, facilidade de uso e abertura. Ele fornece uma rica coleção de funções de biblioteca e códigos de exemplo, tornando-o acessível mesmo para indivíduos sem experiência em programação. Além disso, a comunidade Arduino é altamente ativa, permitindo fácil acesso a uma ampla variedade de tutoriais, documentação e suporte de projetos.

A série Milk-V Duo agora suporta o desenvolvimento do Arduino. Você pode usar diretamente o Arduino IDE e, após uma configuração simples, começar a utilizá-lo.

A CPU da série Duo adota um design de núcleo grande, onde o firmware do Arduino é executado no núcleo pequeno, enquanto o núcleo grande é responsável pela comunicação com o IDE do Arduino. Ele recebe o firmware do Arduino e o carrega no pequeno núcleo para execução. Ao mesmo tempo, o sistema Linux no grande núcleo também funciona normalmente.


1. Instale o Arduino

Arduino IDE oferece suporte a três sistemas operacionais: Windows, Linux e macOS. De acordo com o sistema que você está usando, acesse o site oficial do Arduino para baixar o pacote de instalação correspondente para instalação. A versão mais recente atual é 2.3.2 e é recomendado usar a versão mais recente.

Adicione o Duo ao Arduino

Abra o Arduino IDE, selecione Preferences no menu File e adicione o endereço do arquivo de configuração do Duo na aba Additional boards manager URLs Settings:

https://github.com/milkv-duo/duo-arduino/releases/download/config/package_sg200x_index.json


Faça download do endereço do arquivo json mais recente em Releases .

Se você configurou outros endereços de placa de desenvolvimento antes, separe-os com vírgulas ou clique no ícone no lado direito da barra de endereço para abrir a janela e siga as instruções para adicioná-los.

Após configurar, selecione menu  Board no menu Tools, abra o Boards Manager, procure por SG200X e clique em Install.


Neste ponto, o ambiente de desenvolvimento Duo no Arduino IDE foi instalado. Agora você pode escrever e testar o código.

Teste o pisca LED

Atualmente, o sistema de cartão SD do Duo precisa gravar firmware compatível com Arduino. Faça download do firmware com o prefixo arduino da versão mais recente do firmware.

Consulte Inicialize o Duo para instalar o sistema de cartão SD.

No caso 

arduino-milkv-duo256m-sd-v1.1.2-2024-0801.img.zip



Após Boot, LED deve piscar

Use um cabo USB para conectar o Duo ao computador e o Duo ligará automaticamente.

O firmware padrão do Duo, o sistema Linux de núcleo grande, controlará o piscar do LED integrado. Isto é conseguido através do script de inicialização. Agora vamos usar o Arduino de núcleo pequeno para acender o LED. Precisamos desabilitar o script de LED piscando no Linux de núcleo grande. No terminal Execute in do Duo:

mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync

Ou seja, renomeie o script de LED piscando. Após reiniciar o Duo, o LED não piscará mais:

reboot

Neste momento, haverá um dispositivo serial adicional na “Porta” do “Gerenciador de Dispositivos” do computador.



Na interface principal do Arduino IDE, clique em Select Board e, em seguida, clique em Select other board and port...


Procure por "duo", selecione Duo Dev Module para Duo, selecione Duo256 Dev Module para Duo256M, selecione a porta serial correspondente na porta e clique em OK.


Abra o programa Examples01.BasicsBlink  de teste no menu File do Arduino IDE. A função deste programa é piscar o LED integrado do dispositivo Arduino. In Duo Também é compatível. Pode ser necessário instalar o pyserial para fazer o upload e, em seguida, vamos clicar no botão Upload para testar:



Neste momento, você pode ver o LED da placa Duo piscando em intervalos de 1 segundo.

2. Duo Arduino pin resource

Duo


SPIPWMI2CUARTGPIONAMEPINPINNAMEGPIOADC
1GP0
1
40
VBUS
2GP1
2
39
VSYS
GND
3
38
GND
PWM7GP2
4
37
3V3_EN
PWM6GP3
5
36
3V3(OUT)
PWM5UART3_TXGP4
6
35
PWM6UART3_RXGP5
7
34
GND
8
33
GND
SPI2_SCKPWM9I2C3_SDAGP6
9
32
GP27
SPI2_MOSIPWM8I2C3_SCLGP7
10
31
GP26ADC1
SPI2_MISOPWM7I2C1_SDAGP8
11
30
RUN
SPI2_CSnPWM4I2C1_SCLGP9
12
29
GP22
GND
13
28
GND
PWM10I2C2_SDA14GP10
14
27
GP2127
PWM11I2C2_SCL15GP11
15
26
GP2026
PWM4GP12
16
25
GP1925
PWM5GP13
17
24
GP1824
GND
18
23
GND
19GP14
19
22
GP1722
20GP15
20
21
GP1621
 
0
LED


Duo256M


SPIPWMI2CUARTGPIONAMEPINPINNAMEGPIOADC
1GP0
1
40
VBUS
2GP1
2
39
VSYS
GND
3
38
GND
PWM7GP2
4
37
3V3_EN
PWM6GP3
5
36
3V3(OUT)
PWM5UART3_TXGP4
6
35
PWM6UART3_RXGP5
7
34
GND
8
33
GND
SPI2_SCKPWM9I2C3_SDAGP6
9
32
GP27
SPI2_MOSIPWM8I2C3_SCLGP7
10
31
GP26ADC1
SPI2_MISOPWM7I2C1_SDAGP8
11
30
RUN
SPI2_CSnPWM4I2C1_SCLGP9
12
29
GP22
GND
13
28
GND
PWM10I2C2_SDA14GP10
14
27
GP2127
PWM11I2C2_SCL15GP11
15
26
GP2026
PWM4GP12
16
25
GP1925
PWM5GP13
17
24
GP1824
GND
18
23
GND
19GP14
19
22
GP1722
20GP15
20
21
GP1621
 
0
LED

3. EXEMPLO DE CÓDIGO TM1637

Este programa implementa o pino físico 19 (DIO) e 20 (CLK)  do Duo 256 para emitir níveis altos e baixos para se comunicar com o TM1637,  gerando DATA e CLOCK.


Código de teste (após instalar LIBRARY TM1637)

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 20
#define DIO 19

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000

const uint8_t SEG_DONE[] = {
  SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
  SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
  SEG_C | SEG_E | SEG_G,                           // n
  SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
  };

TM1637Display display(CLK, DIO);

void setup()
{
}

void loop()
{
  int k;
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
  display.setBrightness(0x0f);

  // All segments on
  display.setSegments(data);
  delay(TEST_DELAY);

  // Selectively set different digits
  data[0] = display.encodeDigit(0);
  data[1] = display.encodeDigit(1);
  data[2] = display.encodeDigit(2);
  data[3] = display.encodeDigit(3);
  display.setSegments(data);
  delay(TEST_DELAY);

  /*
  for(k = 3; k >= 0; k--) {
  display.setSegments(data, 1, k);
  delay(TEST_DELAY);
  }
  */

  display.clear();
  display.setSegments(data+2, 2, 2);
  delay(TEST_DELAY);

  display.clear();
  display.setSegments(data+2, 2, 1);
  delay(TEST_DELAY);

  display.clear();
  display.setSegments(data+1, 3, 1);
  delay(TEST_DELAY);


  // Show decimal numbers with/without leading zeros
  display.showNumberDec(0, false); // Expect: ___0
  delay(TEST_DELAY);
  display.showNumberDec(0, true);  // Expect: 0000
  delay(TEST_DELAY);
  display.showNumberDec(1, false); // Expect: ___1
  delay(TEST_DELAY);
  display.showNumberDec(1, true);  // Expect: 0001
  delay(TEST_DELAY);
  display.showNumberDec(301, false); // Expect: _301
  delay(TEST_DELAY);
  display.showNumberDec(301, true); // Expect: 0301
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(14, false, 2, 1); // Expect: _14_
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(4, true, 2, 2);  // Expect: __04
  delay(TEST_DELAY);
  display.showNumberDec(-1, false);  // Expect: __-1
  delay(TEST_DELAY);
  display.showNumberDec(-12);        // Expect: _-12
  delay(TEST_DELAY);
  display.showNumberDec(-999);       // Expect: -999
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(-5, false, 3, 0); // Expect: _-5_
  delay(TEST_DELAY);
  display.showNumberHexEx(0xf1af);        // Expect: f1Af
  delay(TEST_DELAY);
  display.showNumberHexEx(0x2c);          // Expect: __2C
  delay(TEST_DELAY);
  display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1
  delay(TEST_DELAY);
  display.clear();
  display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__
  delay(TEST_DELAY);
 
  // Run through all the dots
  for(k=0; k <= 4; k++) {
    display.showNumberDecEx(0, (0x80 >> k), true);
    delay(TEST_DELAY);
  }

  // Brightness Test
  for(k = 0; k < 4; k++)
  data[k] = 0xff;
  for(k = 0; k < 7; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(TEST_DELAY);
  }
 
  // On/Off test
  for(k = 0; k < 4; k++) {
    display.setBrightness(7, false);  // Turn off
    display.setSegments(data);
    delay(TEST_DELAY);
    display.setBrightness(7, true); // Turn on
    display.setSegments(data);
    delay(TEST_DELAY);  
  }

 
  // Done!
  display.setSegments(SEG_DONE);

  while(1);
}

A SMARTCORE FORNECE CHIPS E MÓDULOS PARA IOT, COMUNICAÇÃO WIRELESS, BIOMETRIA, CONECTIVIDADE, RASTREAMENTO E AUTOMAÇÃO. NOSSO PORTFÓLIO INCLUI MODEM 2G/3G/4G/NB-IOT, SATELITAL, MÓDULOS WIFI, BLUETOOTH, GPS, SIGFOX, LORA, LEITOR DE CARTÃO, LEITOR QR CCODE, MECANISMO DE IMPRESSÃO, MINI-BOARD PC, ANTENA, PIGTAIL, BATERIA, REPETIDOR GPS E SENSORES. 

Nenhum comentário:

Postar um comentário