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:
Cujo pinout é um pouco diferente dos atuais:
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
É 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.
As macros que vão permitir ler e escrever no nRF24L01
O 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.
A função ler/escrever bytes permite gerar os impulsos de clock para transmissão / receção de dados
O código de envio de dados pelo ATtiny85 com nRF24L01.
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.
Últimos comentários: