Transferir dados entre o ATtiny85 | ATmega128 usando nRF24L01

Olá,

Desde o último projeto tenho estado empenhado em construir um alarme de casa sem fios.

Numa fase inicial pensei usar o RF433, tive algumas dificuldades em colocar em funcionamento, este dispositivo não se dá muito bem com programação AVR Atmel Studio, principalmente porque uma das limitações é o facto de ter conseguido colocar 2 emissores e 1 recetor.

Rapidamente abandonei o sensor de RF433 para um outro dispositivo que poderá comunicar com vários emissores e 1 recetor.

Confesso que não experimentei ainda com 2 emissores, por não possuir suficientes componentes, no entanto já encomendei mais 3 nRF24L01, para fazer a experiência, enquanto aguardo pela encomenda avanço com este tutorial com a convicção que certamente conseguirei colocar vários emissores e um só recetor.

O objetivo não será “ainda” explicar como construir um alarme sem fios, mas sim o funcionamento deste componente o nRF24L01.

Como tem vindo ser apanágio da minha parte não vou aprofundar muito o tema , visto já existirem vários sites com este componente bem explicado, exemplos: https://wiki.analog.com/resources/eval/sdp/sdp-b/peripherals/spi

http://www.diyembedded.com/tutorials/nrf24l01_0/nrf24l01_tutorial_0.pdf

Como têm reparado ultimamente tenho estado de volta do ATtiny85, fiquei muito interessado em fazer projetos com este pequeno componente, limitado nos pinos e nas funcionalidades internas, mas capaz de fazer alguns projetos interessantes.

Muita informação e projetos em Arduino, mas programação com AVR Studio, raramente se encontra, assim fica mais interessante o desafio.

Foi este vídeo  que me impulsionou para avançar na construção de um programa para o Attiny85 com o nRF24L01.

Encontrei algumas dificuldades em colocar o ATtiny85 com AVR Studio7 em pleno funcionamento, visto que o SPI ( Serial Port interface ) teria de ser “emulado” por software.

Não tendo conseguido encontrar a libraria do nRF24L01 para simular no Proteus, ainda ficou mais abstrato o debug do SPI, no entanto passo a passo fui descodificando o modo de funcionamento do nRF24L01 e adaptei ao ATtiny85.

O nRF24L01 que usei foi um dos dispositivos que compõe o KIT OPEN128, ver imagem:

NRF24L01-RF-Board-B

Cujo pinout é um pouco diferente dos atuais:

NRF24L01-RF-Board-B_Pinout

Com esta configuração verificamos que existem 6 pinos que deverão ser usados, ou seja, os pinos disponíveis pelo ATtiny85, no entanto se o projeto que se pretende fazer é um alarme, ficaríamos sem qualquer pino para receber informação, neste caso era preferível usar o ATmega8 e todas as dificuldades eram simplificadas ?

O que deveremos ter em atenção que este dispositivo é tolerante a 5V no envio e receção de dados mas NÃO na alimentação que sugere-se os 3.3V.

Ora 3.3V para quem usa o ATtiny85 praticamente não usa projetos em arduino, obriga a fazer um divisor de tensão com 3 resistências, mas; nada como procurar nas gavetas e encontrar um regulador compacto. Do tamanho do ATtiny85, “ 5V to 3.3V Step Down AMS1117” www.electrofun.pt 5Vto3.3V AMS1117

É obvio que estes componentes foram selecionados para teste, no trabalho final teremos de ter em consideração os consumos e o tamanho global do transmissor, visto que irá funcionar a bateria e o consumo é extremamente importante.

Para este protótipo usou-se os seguintes componentes:

1 Conversor USB – TTL (PL2303)                                http://www.botnroll.com

1 Programador Atmel, USBASP V2.0                      https://comink.pt

1 ATMEL ATMega128 AVR ISP JTAG                      https://comink.pt

1 ATtiny85 – AVR 8 Pin 20MHz 8K                            https://www.ptrobotics.com

1 Socket USBASP ATtiny85                                           Tutorial Microelectronic

1 USBASP 10Pin Módulo Conversor Padrão 6Pin  https://pt.gearbest.com

3 Emissor e receptor wireless, NRF24L01+            https://comink.pt

1 Universal Power Supply 5V 2A                               https://www.ptrobotics.com

1 Fonte para breadboard 3.3V e 5V                          https://comink.pt

Varios Jumper Macho / Femea 1 fio 20cm             https://comink.pt

Avançando para o código, se já viram o vídeo que sugeri perceberam que o
ATtiny85 usa o USI ( universal serial interface ) SPI | I2C ou seja é composto de dupla funcionalidade, no que pretendemos temos o SPI com 3 pinos MOSI – MISO -SCK, mas os registos internos são diferentes do ATmega128, nomeadamente o clock que devera ser gerado por software.

Construiu-se as macros para configurar os pinos do ATtiny85.
Attiny85_1

As macros que vão permitir ler e escrever no nRF24L01

Attiny85_2O setup de inicialização do nRF24, configurando os respetivos pinos como entradas e saídas, incluindo a configuração dos registos USICR para gerar o clock de sincronismo, no final o CSN_1 ( chip select not), desativado  e selecionando CE_0 o nRF24 para carregar dados.

Attiny85_3

A função ler/escrever bytes permite gerar os impulsos de clock para transmissão / receção de dados

Attiny85_4

O código de envio de dados pelo ATtiny85 com nRF24L01.


/*
* main.c for NRF24L01 sensor
* Created: 15-07-2018
* Author : Norlinux
* http://www.microelectronic.pt
* https://www.facebook.com/MundoDosMicrocontroladores/
* Released under GPLv3.
* Please refer to LICENSE file for licensing information.
* which can be found at http://www.gnu.org/licenses/gpl.txt
*/
#include
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
#include
#include
#include "NRF24L01.h"
extern uint8_t TX_BUF[];
int main(void)
{
uint8_t ctr = 0;
nRF24L01_Initial();
while (1) {
TX_BUF[0]=ctr++;
NRF24L01_Send();
_delay_ms(1000);
}
}

 Em breve dar-vos-ei a explicação de como tudo acontece, no video abaixo temos a receção dos dados no ATmega128, pela porta serie.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s