Estoy tratando de hacer un control remoto de RF usando ATtiny85 funcionando a 8MHz en un oscilador interno, este módulo transmisor RF 434MHz barato (como el que se muestra a continuación) y VirtualWire lib, pero no ha tenido éxito hasta ahora .
Entonces, antes de continuar, ¿es posible usar VirtualWire con ATtiny85 funcionando a 3.6V y 8MHz con su oscilador interno? Si es así, ¿cómo?
Encontré algunas fuentes dispersas de información en la Red sobre esto, pero no pude encontrarle mucho sentido.
He construido versiones ATMega328 del receptor y transmisor usando VirtualWire sin mayores problemas. Ambos módulos se comunican entre sí y se pierden muy pocos datos. Ahora, cuando intenté reemplazar el transmisor ATMega328 con una versión más pequeña usando el ATtiny85, tengo problemas.
Estos son los síntomas:
-
El principal parece ser que cuando agrego la inclusión de VirtualWire, mi boceto parece ralentizarse mucho . Así que me imagino que es una cuestión de tiempo. Pero no estoy seguro de cuál es el problema.
-
Puse un visor en ATtiny85 pin 6 (PB1) pero No veo que se esté transmitiendo nada fuerte>. Creo que me equivoqué con los nombres de los pines.
-
Puedo hacer que el LED parpadee y también puedo leer los botones sin problemas.
Aquí están los esquemas y la diseño de placa para el control remoto:
La placa actualmente se alimenta con 2 pilas AA NiMH que actualmente están a 2.6V. Puedo hacer que el ATtiny85 parpadee con ese voltaje. Planeo alimentar el RC con una batería de litio CR2 de 3.6V.
Aquí hay más detalles de mi entorno de desarrollo:
- Arduino IDE 1.05
- Estoy usando núcleos ATtiny desde aquí
- Estoy programando el ATtiny85 usando un Arduino UNO R3 como ISP, sin problemas (está funcionando porque puedo hacer que el ATtiny85 parpadee un LED ).
Y aquí está mi código:
#include <VirtualWire.h> # define VCC_PIN A1
#define BTN_PIN A2 # define LED_PIN A3 # define TXD_PIN PB1 # define BLINK_UP_TIME 25 # define BUTTON_NONE 0 # define BUTTON_1 1 # define BUTTON_2 2 # define BUTTON_3 3 # define BUTTON_4 4 # define BUTTON_5 5 # define BUTTON_6 6 configuración de pinvoid () { BTN_PIN, INPUT); pinMode (TXD_PIN, SALIDA); pinMode (VCC_PIN, SALIDA); pinMode (LED_PIN, SALIDA); // deje el transmisor de RF apagado por ahora digitalWrite (VCC_PIN, LOW); // Inicializar el IO y el ISR vw_set_tx_pin (TXD_PIN); vw_setup (2000); // Bits por segundo // avisa al usuario que estamos vivos: heartbeat blink (3, 50); delay (1000);} uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; void loop () {botón byte = ReadButtons (); if (button! = BUTTON_NONE) {// botón de transmisión presionado digitalWrite (LED_PIN, HIGH); // Destella una luz para mostrar la transmisión digitalWrite (VCC_PIN, HIGH); // enciende el transmisor en delay (10); buf [0] = botón; vw_send (buf, 1); vw_wait_tx (); // Espere hasta que todo el mensaje se haya ido digitalWrite (LED_PIN, LOW); // apaga el LED digitalWrite (VCC_PIN, LOW); // apaga el transmisor} delay (100);} byte ReadButtons () {unsigned int buttonVoltage = analogRead (BTN_PIN); botón de byte = BUTTON_NONE; // no devuelve ningún botón pulsado si las siguientes comprobaciones no escriben en btn if (buttonVoltage < 10) {button = BUTTON_1; } else if (buttonVoltage < 200) {button = BUTTON_2; } else if (buttonVoltage < 400) {button = BUTTON_3; } else if (buttonVoltage < 550) {button = BUTTON_4; } else if (buttonVoltage < 720) {button = BUTTON_5; } else if (buttonVoltage < 900) {button = BUTTON_6; } else if (buttonVoltage > 1000) {button = BUTTON_NONE; } return (button);}
Entonces, ¿Qué ocurre con mi configuración?