Skip to content

Latest commit

 

History

History
960 lines (687 loc) · 32.7 KB

README-PT-BR.md

File metadata and controls

960 lines (687 loc) · 32.7 KB

Biblioteca Arduino para o Si4844

Esta é uma biblioteca para o SI4844, BROADCAST ANALOG TUNING DIGITAL DISPLAY AM/FM/SW RADIO RECEIVER, um Circuito Integrado fabricado pela Silicon Labs. Esta biblioteca é especialmente destinada aos interessados em controlar este dispositivo usando o a plataforma Arduino com o seu ambiente de desenvolvimento (IDE).

Esta Biblioteca pode ser distribuída livrimente seguindo a Licença de Software Livre MIT.

Copyright (c) 2019 Ricardo Lima Caratti

{% include libhistory.html %}

ATENÇÃO

É importante ressaltar que o dispositivo SI4844 opera com +3.3V. Se você pretende usar uma versão do Arduino de 5V, será necessário o uso de um conversor bidirecional de 5V e 3.3V. Também é importante saber que a simples alimentação do SI4844 com a tensão de 3.3V do Arduino não é suficiente. Isso porque o Arduino que opera com 5V prover 5V em seus pinos digitais bem como no barramento I2C (A4 e A5).

Veja Making the Si4844 works with 5V Arduino UNO or similar

Há alguns exemplos nesta biblioteca que poderão auxiliá-lo na construção de seu projeto. Com estes exemplos, é possível executar as principais funções do Si4844 via o Monitor Serial (Serial Monitor) do ambiente de desenvolvimento do Arduino (IDE).

Sumário

  1. Licença de uso desta biblioteca
  2. Seu suporte é importante
  3. Sobre a Arquitetura do SI4844
  4. Terminologia
  5. Características da Biblioteca
  6. Instalação da Biblioteca
  7. Requisitos de Hardware e Configuração
  8. Um exemplo usando esta Biblioteca Arduino
  9. Documentação da API
  10. Referências
  11. Vídeos

Licença de uso desta biblioteca

Esta biblioteca pode ser utilizada seguindo a licença de Software Livre do MIT, cujo texto traduzido de forma livre pode ser conferido a seguir:

A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos, incluindo a documentação, associados à esta biblioteca. É permitido usar, modificar, distribuir, juntar com outro software, publicar, fazer sublicença e negociar, sob as seguintes condições:

Os Direitos Autorais e as permissões supracitadas devem ser incluídos em todas as cópias ou partes copiadas desta biblioteca.

IMPORTANTE:

ESTA BIBLIOTECA É FORNECIDA "TAL COMO ESTÁ", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU IMPLÍCITA. EM NENHUM CASO O AUTOR OU TITULAR DOS DIREITOS AUTORAIS SERÁ RESPONSÁVEL POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE.

Seu suporte é importante

Se você tem interesse em fornecer suporte de desenvolvimento a esta biblioteca, junte-se a este projeto via Github. Se preferir, faça sugestões sobre funcionalidades que você gostaria que estivesse disponível nesta biblioteca.

Sobre a Arquitetura do SI4844

O SI4844 um rádio receptor AM/FM/OC. Ele possui um Sintonizador Analógico que permite a seleção de estações por meio de um potenciômetro (resistor variável). O SI4844 permite também a execução de comandos enviados via um microcontrolador para executar tarefas como: mudança de banda, volume, obter a frequência corrente para ser exibida em display entre outras. Há várias informações importantes que podem ser de interesse para um projetista de rádio e que pode ser obtida por meio desta biblioteca para o Arduino.

Conheça mais sobre a arquitetura do SI4844 na publicação da Silicon Labs BROADCAST ANALOG TUNING DIGITAL DISPLAY AM/FM/SW RADIO RECEIVER

Terminologia

Termo Descrição
Bibliotecas Arduino Se referem a arquivos escritos em C or C++ (.c, .cpp) capazes de fornecer funcionalidades extras aos seus Sketches Arduino. Neste contexto, a Biblioteca para o SI4844 fornece funcionalidades extras para controlar um rádio baseado no SI4844
IDE Ambiente integrado de Desenvolvimento (do Inglês: Integrated Development Environment)
Sketch Um nome utilizado pelo ambiente Arduino para um programa. Basicamente é o arquivo principal de um programa Arduino
ATDD Do Inglês, Analog Tune Digital Display. O termo ATDD é usado para se referir ao dispositivo (CI) SI4844
interrupt (interrupção) No contexto deste documento, uma interrupção é um recurso do Arduino que permite a execução de tarefas importantes independentemente do fluxo de execução corrente do seu programa
C++ É uma linguagem de programação orientada a objetos. Pode ser entendida como uma extensão da linguagem C que permite o desenvolvimento de programas e bibliotecas usando a abordagem Orientada a Objetos.
Guia de Programação Se refere ao manual da Silicon Labs Si48XX ATDD PROGRAMMING GUIDE
POC Do Inglês, Proof of Concept ou em Português, Prova de Conceito. Trata-se de uma abordagem para avaliar um dado produto, modelo ou ideia

Características da Biblioteca

  1. Open Source (Código Aberto)
  2. Totalmente construída baseada no Si48XX ATDD PROGRAMMING GUIDE
  3. Mais de 30 funções (métodos) implementadas
  4. Definição de banda e faixas de frequências personalizada para OC (2.3–5.6 MHz e 22–28.5 MHz)
  5. Linguagem C++ e Programação Orientada a Objetos
  6. Disponível no ambiente de desenvolvimento do Arduino (IDE)
  7. Simplifica projetos baseados no SI4844

Instalação da Biblioteca

É possível Instalar esta biblioteca em seu Ambiente usando o próprio Gerenciador de Bibliotecas do Arduino. Para tanto, selecione a opção de menu Sketch -> Incluir Biblioteca -> Gerenciar Biblioteca. Por fim tecle na caixa de busca o texto PU2CLR Si4844.

As imagens a seguir ilustram esta ação.

IDE 01

IDE 01

É possível também instalar a última versão e também anteriores desta biblioteca obtendo diretamente os fontes deste repositório ou ainda por meio do site Arduino Library List

Requisitos de Hardware e Configuração

Conforme dito anteriormente, esta biblioteca foi escrita para a Plataforma Arduino e foi testada com sucesso no Arduino Pro Mini 3.3V 8MHZ.

Arduino 5V e o SI4844

O dispositivo SI4844 trabalha com +3.3V. Se você não estiver usando uma versão do Arduino Pro Mini de 3.3V, recomendo utilizar uma abordagem de conversão de nível de tensão. Eu testei alguns conversores bidirecionais de tensão vendidos no eBay e não tive sucesso. Creio que devido a comunicação I2C. Como solução, utilizei um multiplexador I2C, o TCA9548A, que além da função de multiplexador, também permite a conversão de nível de tensão no barramento I2C. Com o TCA9548A, consegui fazer o Arduino UNO se comunicar com o SI4844. Para os pinos de RESET e o de Interrupção, utilizei um conversor de nível de tensão adquirido na SparkFun.

É importante ressaltar que usei os componentes que tinha em minhas mão. Creio que com componentes mais adequados, essa solução poderá ser bem mais simples. Veja a minha abordagem clicando aqui..

Montagem do protótipo do rádio

Por fim, para usar esta biblioteca, é necessário construir um rádio baseado no SI4844. Os esquemas e fotos a seguir mostram como construir um rádio simples baseado no SI4844.

Esquema

Embora o esquema a seguir apresente a instalação do dispositivo OLED e notões, você poderá ignorá-los para fazer os primeiros testes do seu circuito. Para tanto, você deverá selecionar os exemplos que vem junto com esta biblioteca e que não utilizam estes componentes. Procure na pasta “Examples”, os sketches com exibição para “Serial Monitor”. Estes exemplos permitem visualizar e operar o receptor pelo computador.

Arduino and OLED circuit

schematic Arduino and OLED

SI4844 circuito mínimo

schematic SI4844 minimal circuit

Conforme pode ser verificado, o esquema acima é muito simples e utiliza pouquíssimos componentes. Os botões estão configurados para usar o recurso de “pull up” interno do Arduino. O display OLED e o SI4844 estão conectados no barramento I2C conforme apresenta a tabela a seguir. Observe também os resistores de “pull up” no barramento I2C. Os valores destes resistores podem depender dos dispositivos conectados ao barramento. Recomendo iniciar com resistores de 10K. No entanto, é provável que você resultados melhores com resistores mais baixos (exemplo: 3.3K).

Conexões Arduino and SI4844

The table below shows the pin connections between the Si4844 and Arduino Pro Mini.

SI4844 pin Arduino pin Description
2 2 Arduino interrupt pin
15 12 Regurlar arduino digital pin used to RESET control
16 A4 (SDA) I2C bus (Data)
17 A5 (SCL) I2C bus (Clock)

No front-end was added to this receiver. However, you will be surprised with the its performance. You can connect to the audio output a mono or stereo amplifier or an earphone to listen to the radio. On article How to Build an Arduino-Controlled AM/FM/SW Radio [May 26, 2016], Mr. Raymond Genovese, suggests a better SI4844 setup, including a RF amplifier.

Outra configuração pode ser encontrada no documento da Silicon Labs "Si4822/26/27/40/44 ANTENNA, SCHEMATIC, LAYOUT, AND DESIGN GUIDELINES" Rev 0.3. Este documento também sugere um circuito com amplificador de RF. Confira as páginas 8, 9 and 10.

Atenção: Se você não estiver utilizando o Arduino Pro Mini, verifique a pinagem correta para interrupt (IRQ), RST, SDIO and SCLK do seu Arduino. A tabela a seguir apresenta a pinagem de algumas placas de Arduinos.

Board Interrupt (IRQ) Pins I2C / TWI pins
328-based
(Nano, Mini ou Uno)
2 and 3 A4 (SDA / SDIO), A5 (SCL / SCLK)
Mega 2, 3, 18, 19, 20 e 21 20 (SDA/SDIO) e 21 (SCL/SCLK)
32u4-based
(Micro, Leonardo or Yum)
0, 1, 2, 3 e 7 2 (SDA/SDIO) e 3 (SCL/SCLK)
Zero todos os pinos exceto o 4 D8 (SDA/SDIO) e D9 (SCL/SCLK)
Due todos os pinos digitais 20 (SDA/SDIO) e 21 (SCL/SCLK)
101 todos os pinos digitais.
Somente os pinos 2, 5, 7, 8, 10, 11, 12 e 13 funcionam com CHANGE
------

Componentes

Listas de componentes utilizados

Part Description
IC1 Si4844-A10 radio receiver
Arduino Arduino Pro Mini, 3.3V, 8MHz
C1 22pF ceramic capacitor
C2 22pF ceramic capacitor
C3 100nF ceramic capacitor
C4 4.7uF Electrolytic or ceramic capacitor
C5 4.7uF Electrolytic or ceramic capacitor
C6 100nF ceramic capacitor
C7 470nF ceramic capacitor
R1 3.3K ~ 10K resistor
R2 3.3K ~ 10K resistor
R3 100K linear potentiometer
L1 ferrite AM antenna
L2 100mH
Y1 32.768 kHz crystal
S1...S4 4 push buttons

Fotos

Soldagem do SI4844 no adaptador

Foi um pouco difícil fazer a soldagem de um componente tão pequeno no adaptador. Contudo, com o uso de uma lente de aumento eletrônica e uma caneta (ferro de solda) foi possível fazer o trabalho.

SI4844 soldered on adapter 01

SI4844 soldered on adapter 03

Protótipo

SI4844 soldered on adapter 04

SI4844 soldered on adapter 05

SI4844 soldered on adapter 06

Outra abordagem de protótipo.

Documentação da API

A Biblioteca SI4844 foi desenvolvida em C++. Para utilizá-la, inclua o arquivo SI4844.h e declare em seu Sketch uma variável da classe SI4844. Após instalar a Biblioteca no Arduino, você deve incluí-la em seu código conforme apresentado no código a seguir.

// 
#include <SI4844.h>   

// Arduino Pin (tested on pro mini)
#define INTERRUPT_PIN 2
#define RESET_PIN 12


#define DEFAULT_BAND 4

SI4844 si4844; 

void setup() {

    // Initiate and connect the device ATDD (SI4844) to Arduino
    si4844.setup(RESET_PIN, INTERRUPT_PIN, DEFAULT_BAND);

}

void loop() {


  // if something changed on ATDD (SI4844), do something  
  if (si4844.hasStatusChanged())
  {
    Serial.print("Band Index: ");
    Serial.print(si4844.getStatusBandIndex());
    Serial.print(" - ");
    Serial.print(si4844.getBandMode());
    Serial.print(" - Frequency: ");    
    Serial.print(si4844.getFrequency(),0);
    Serial.print(" KHz");
    Serial.print(" - Stereo ");
    Serial.println(si4844.getStereoIndicator());
  }

}

Veja um exemplo compreto em Proof of Concept for SI4844 Arduino Library.

Estruturas e Tipos Definidos de Dados

O objetivo das estruturas de dados e tipos definidos apresentados a seguir é tornar a programação para o dispositivo SI4844 mais simples.

/* 
 * A estrutura a seguir representa a resposta de 4 bytes obtida pelo comando ATDD_GET_STATUS
 * Veja as páginas 14 e 15 do Guia de Programação 
 */
typedef struct
{
  byte BCFG0 : 1;     // Bit 0
  byte BCFG1 : 1;     // bit 1
  byte STEREO : 1;    // bit 2
  byte STATION : 1;   // bit 3
  byte INFORDY : 1;   // bit 4
  byte HOSTPWRUP : 1; // bit 5
  byte HOSTRST : 1;   // bit 6
  byte CTS : 1;       // bit 7
  byte BANDIDX : 6;   // Form bit 0 to 5
  byte BANDMODE : 2;  // From bit 6 to 7
  byte d2 : 4;        // Frequency digit 2
  byte d1 : 4;        // Frequency digit 1
  byte d4 : 4;        // Frequency digit 4
  byte d3 : 4;        // frequency digit 3
} si4844_get_status;
/*
 * A seguir tem-se um recurso da linguagem C (union) para representar os mesmos dados armazenados
 * em uma dad posição de memória de duas formas diferentes. Desta forma, ao receber 4 bytes, será 
 * possivel representá-los segundo a estrutura anterior.
*/
typedef union {
  si4844_get_status refined;
  byte raw[4];
} si4844_status_response;
/*
 * A estrutura a seguir representa os 9 bytes obtidos pelo comando GET_REV.
 * Veja a página 22 do Guia de Programação. 
 */
typedef struct
{
  byte RESERVED : 6; // Bit 0 to 5
  byte ERR : 1;      // bit 6
  byte CTS : 1;      // bit 2
  byte PN;           // Final 2 digits of Part Number (HEX).
  byte FWMAJOR;      // Firmware Major Revision (ASCII).
  byte FWMINOR;      // Firmware Minor Revision (ASCII).
  byte CMPMAJOR;     // Component Major Revision (ASCII).
  byte CMPMINOR;     // Component Minor Revision (ASCII).
  byte CHIPREV;      // Chip Revision (ASCII).
} si4844_firmware_info;
typedef union {
  si4844_firmware_info refined;
  byte raw[9];
} si4844_firmware_response;

Public Methods

setup

/*
* Conecta o SI4844 ao Arduino e Instancia e configura alguns parâmetros necessários
* para o funcionamento do rádio. Esta função deve ser a primeira a ser chamada.
* @param resetPin  Pino do Arduino para executar a ação de reset do SI4844
* @param interruprPin Pino do Arduino para executar uma interrupção    
* @param defaultBand A banda que o rádio deve iniciar (Banda Padrão)
*/
void SI4844::setup(unsigned int, unsigned int, byte)

Exemplo:

  si4844.setup(12, 2, 4);

Exemplo:

SI4844 si4844; 

void SI4844::setup() {
  Serial.begin(9600);
  delay(500);  
  si4844.setup(RESET_PIN, INTERRUPT_PIN, DEFAULT_BAND);
  // Configure the Pre-defined Band (band index 40) to work between 27.0 to 27.5 MHz
  // See Si48XX ATDD PROGRAMMING GUIDE, pages 17,18,19 and 20.
  si4844.setCustomBand(40,27000,27500,5);  

}

reset

/*
 * Reinicia o SI4844.
 * Veja as páginas 7, 8, 9 e 10 do Guia de Programação.
 */
void SI4844::reset(void )

Exemplo:

  si4844.reset();

powerDown

/*
 * Coloca o rádio em modo desligado. 
 * See Si48XX ATDD PROGRAMMING GUIDE; AN610; page 45
 */
void SI4844::powerDown(void)

setBand

/*
 * Muda a banda do rádio.
 * Veja a tabela 8. Pre-defined Band Table in Si48XX ATDD PROGRAMMING GUIDE; AN610; páginas 17 and 18  
 */
void SI4844::setBand(byte);

Exemplo:

  si4844.setBand(4); // FM

setCustomBand

/* 
 * This method allows you to customize the frequency range of a band.
 * The SI4844 can work from 2.3–28.5 MHz on SW, 64.0–109.0MHz on FM
 * You can configure the band index 40, for Exemplo, to work between 27 to 28 MHz.
 * See Si48XX ATDD PROGRAMMING GUIDE, pages 17, 18, 19 and 20.
 * 
 * (top – button)/(bandSpace) must be betwenn 50 and 230
 * 
 * @param byte bandIndes; Predefined band index (valid values: betwenn 0 and 40)
 * @param unsigned button; Band Bottom Frequency Limit
 * @param unsigned top; Band Top Frequency Limit
 * @param byte bandSpace; Channel Spacing (use 5 or 10 - On FM 10 = 100KHz)
 * @return void
 */
void SI4844::setCustomBand(byte, unsigned, unsigned, byte ) 

changeVolume

/*
 *  Controla o nível do volume.
 *  @param char '+' aumenta o volume do som e  '-' reduz o volume do som
 */
void SI4844::changeVolume(char);

Exemplo:

  si4844.changeVolume('+'); 

setVolume

/*
 * Atribui um volume ao rádio, 0 é volume muito baixo e 63 é o volume mais alto possível. 
 * @param byte volumeLevel (Domínio: 0 a 63) 
 */
SI4844::setVolume(byte level)

Exemple:

  si4844.setVolume(55);

volumeUp

/*
 *  Aumenta o voume do rádio  
 *  
 */
void SI4844::volumeUp()

Exemplo:

  si4844.volumeUp();

volumeDown

/*
 *  Diminiu o volume do rádio
 *  
 */
void SI4844::volumeDown()

Exemplo:

  si4844.volumeDown();

setAudioMode

/*
 * Atribui o modo de audio
 * See Si48XX ATDD PROGRAMMING GUIDE; AN610; page 21
 * @param byte audio_mode 
 *             0 = Digital volume mode (no bass/treble effect, volume levels from 0 to 63) 
 *             1 = Bass/treble mode (no digital volume control, fixed volume level at 59)
 *             2 = Mixed mode 1 (bass/treble and digital volume coexist, max volume = 59) 
 *             3 = Mixed mode 2 (bass/treble and digital volume coexist, max volume = 63) 
 *             Default is 3 (Mixed mode 2)
 * @param byte opcode 
 *             0 = Set audio mode and settings
 *             1 = Get current audio mode and settings without setting
 * @param byte attenuation (0 => -2db; 1 => 0db)
 */
void setAudioMode(byte opcode, byte attenuation )

Exemplo:

  si4844.setAudioMode(1,1);

setAudioMute

/*
 * Silencia a saída de audio.
 * 
 * @param bool on - false = normal; true = silêncio 
 */
void setAudioMute(bool on)

setBassTreeble

/*
 * Ajusta grave e agudo. 
 * @param byte bass_treeble (domain: 0 to 8)
 *      0 -Bass boost +4 (max)
 *      1- Bass boost +3
 *      2- Bass boost +2
 *      3- Bass boost +1 (min)
 *      4- Normal (No Bass/Treble effect) (Default) 5- Treble boost +1 (min)
 *      6- Treble boost +2
 *      7- Treble boost +3
 *      8- Treble boost +4 (max)
 */
void setBassTreeble(byte bass_treeble) {

Exemplo:

  si4844.setBassTreeble(2);

getStatus

/*
 * Obtém as informações corrente (atuais) do rádio. Exemplo: Frequência, banda etc.
 * Use esta função se você desejar manipular os dados retornados diretamente.  
 * Esta bibliotecas possui várias outras funções mais fáceis e diretas para obter informações do rádio. 
 * 
 * @return um ponteiro para a estrutura si4844_status_response
 */
si4844_status_response *SI4844::getStatus(void);

Exemple:

  si4844.getStatus();

getFirmware

/*
 * Obtém informações do Firmware. Por exemplo, part number, chip revision, patch e
 * component revision numbers.
 * Em geral, você não precisará executar este métodos. Há utros métodos nesta biblioteca 
 * que poderá prover estas informações.   
 * Veja a página 22 do Guia de Programação.
 * 
 * @return um ponteiro para a estrutura si4844_firmware_info
 */
si4844_firmware_response *SI4844::getFirmware(void);

Exemple:

  si4844.getFirmware();

getFrequency

/*
 * Obtém a frequência corrente do rádio em  KHz. 
 * Por exemplo: FM, 103900 KHz (103.9 MHz);
 *              SW, 7335 KHz (7.34 MHz, 41m)   
 * 
 * @return float Frequência em KHz.  
 */
float SI4844::getFrequency(void);

Exemplo:

    Serial.print("Frequency: ");    
    Serial.print(si4844.getFrequency(),0);

hasStatusChanged

/*
*  Verifica se o SI4844 teve seu estado mudado. Se você mover os sintonizador, por exemplo, 
*  o estado do dispositivo é alterado. 
*
*  return true or false  
*/
bool SI4844::hasStatusChanged(void);

Exemple:

  if (si4844.hasStatusChanged())
  {
    Serial.print(" - Frequency: ");    
    Serial.print(si4844.getFrequency(),0);
    Serial.print(" KHz");
    Serial.print(" - Stereo ");
    Serial.println(si4844.getStereoIndicator());
  }

resetStatus

void SI4844::resetStatus(void);

getBandMode

/*
 * Obtém a Banda Corrente (FM/AM/SW)
 * @return 0 = "FM mode"; 1 = "AM mode"; 2 = "SW mode".
 */ 
inline String SI4844::getBandMode()

getStereoIndicator

/*
 * return 0 = stereo off; 1 stereo on
 */
inline String SI4844::getStereoIndicator()

getStatusBCFG0

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusBCFG0() 

getStatusBCFG1

/*
 * Veja O guia de Programação, AN610, páginas 15 e 16
 */
inline unsigned SI4844::getStatusBCFG1() 

getStatusStereo

/*
 * Retorna um número inteiro indicado se a recepção está estéreo (0 = Não e 1 = Sim)
 * Veja O guia de Programação, AN610, páginas 15 e 16
 */
inline unsigned SI4844::getStatusStereo() 

getStatusStationIndicator

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusStationIndicator() 

getStatusInformationReady

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusInformationReady() 

getStatusHostPowerUp

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusHostPowerUp() 

getStatusHostReset

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusHostReset() 

getStatusBandMode

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusBandMode() 

getStatusBandIndex

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusBandIndex() 

getStatusCTS

/*
 * See Si48XX ATDD PROGRAMMING GUID, AN610, pages 15 and 16
 */
inline unsigned SI4844::getStatusCTS() 

getFirmwareErr

inline unsigned SI4844::getFirmwareErr()

getFirmwareCTS

inline unsigned SI4844::getFirmwareCTS()

getFirmwarePartNumber

/*
 * Get Firmware Final 2 digits of Part Number (HEX).
 */ 
inline unsigned SI4844::getFirmwarePartNumber() 

See Exemplo below

getFirmwareMajorRevision

/*
 * Get Firmware Major Revision (ASCII).
 */ 
inline unsigned SI4844::getFirmwareMajorRevision() 

See Exemplo below

getFirmwareMinorRevision

/*
 * Get Firmware Minor Revision (ASCII).
 */
inline unsigned SI4844::getFirmwareMinorRevision() 

See Exemplo below

getFirmwareComponentMajorRevision

/*
 * Get Firmware Component Major Revision (ASCII).
 */ 
inline unsigned SI4844::getFirmwareComponentMajorRevision() 

See Exemplo below

getFirmwareComponentMinorRevision

/* 
 * Get Firmware Component Minor Revision (ASCII).
 */
inline unsigned getFirmwareComponentMinorRevision() 

See Exemplo below

getFirmwareChipRevision

/*
 * Chip Revision (ASCII).
 */
inline unsigned SI4844::getFirmwareChipRevision() 

Exemplo:

  Serial.println("\nSI4844 -  Firmware information\n");

  si4844.getFirmware();
  Serial.print("Final 2 digits of Part Number..: ");
  Serial.println(si4844.getFirmwarePartNumber());
  Serial.print("Firmware Major Revision........: ");
  Serial.println(si4844.getFirmwareMajorRevision());
  Serial.print("Firmware Minor Revision........: ");
  Serial.println(si4844.getFirmwareMinorRevision());
  Serial.print("Component Major Revision.......: ");
  Serial.println(si4844.getFirmwareComponentMajorRevision());
  Serial.print("Component Minor Revision.......: "); 
  Serial.println(si4844.getFirmwareComponentMinorRevision());
  Serial.print("Chip Revision..................: ");
  Serial.println(si4844.getFirmwareChipRevision());

  Serial.println("*****************************");

Exemplos

Na pasta Exemplos você encontrará alguns sketches que podem ser úteis para o seus projetos.

Informações do Firmware

O sketch SI4844_FIRMWARE.ino inicia o rádio no modo FM e apresenta as informações do Firmware.

Um rádio mínimo com o SI4844

O sketch SI4844_MINIMAL.ino tem somente 35 linhas é pode ser usando como base para o seu projeto.

Prova de Conceito

O sketch SI4844_POC.ino é uma prova de conceito do uso da biblioteca Arduino. Apresenta mais funcionalidades que os exemplos anteriores.

Extended SW band frequency ranges from 2.3–5.6 MHz and 22–28.5 MHz

O sketch SI4844_CUSTOM_BAND.ino mostra como criar uma banda personalizada, não definida previamente na tabela de bandas do SI4844.

SI4844 com OLED

O sketch SI4844_OLED.ino apresenta u exemplo de uso da biblioteca com um display OLED I2C.

O esquema a seguir mostra como inserir um display OLED e 4 botões no esquema original. Com isso, é possível alterar a banda bem como ajustar o volume.

OLED and Button with SI4844

Controle do Som

The sketch SI4844_BASS_TREBLE.ino shows how to use sound control (treble, bass, mute etc).

Referências

  1. Si48XX ATDD PROGRAMMING GUIDE
  2. BROADCAST ANALOG TUNING DIGITAL DISPLAY AM/FM/SW RADIO RECEIVER
  3. Si4822/26/27/40/44 ANTENNA, SCHEMATIC, LAYOUT, AND DESIGN GUIDELINES
  4. How to Build an Arduino-Controlled AM/FM/SW Radio

Vídeos

  1. Prova de Conceito com SI4844 e Arduino (vídeo sobre este projeto)