Mamba de LinkSprite realizar comunicación de powerline de banda estrecha en pcDuino (2 / 4 paso)

Paso 2: Código de prueba

El código completo puede ser (mamba_pcduino) para descargar aquí.

Las principales del programa como sigue:

/******************************************************************************************
* Código de biblioteca plm1.
*
*
*
* Descripción del proyecto:
* Este programa actúa como puente de RS-232 a Powerline y Powerline
a la RS-232. Cuenta con un simple bucle principal y 4 ISR; 2 para el UART
* una para la interrupción externa de PLM-1 y otra para un temporizador de 10 ms.
*
* La interrupción para la interrupción externa de PLM-1 es obligatoria. Esto
* ISR maneja las interrupciones necesarias para la transmisión y recepción.
* Cuanto mayor sea la configuración de la velocidad en baudios PLM-1 tasa, más rápido
* las interrupciones se producirán.
*
* Archivos de proyecto:
* plm1.h las declaraciones de las funciones de biblioteca plm1 y definiciones de usuario
* parámetros para la configuración del plm1.
* plmcfg.h contiene las definiciones de cadenas de configuración de referencia para el PLM-1.
* ports.h las definiciones de macros utilizadas para la manipulación de I/O.
* serial.h las declaraciones de funciones utilizadas para la comunicación serial.
* spi.h las enumeraciones y las macros que se utiliza para la comunicación SPI con el PLM-1.
*
* main.c principal función y la interrupción de los controladores del programa.
* plm.c biblioteca de Libplm. Contiene todas las funciones utilizadas por la biblioteca y la
* Función de inicialización SPI para el uso con el PLM-1.
* serial.c funciones utilizadas para la comunicación serial.
******************************************************************************************/

#include < stdio.h >
#include < stdbool.h >
#include < string.h >
#include < core.h >
#include "spi.h"

#include "plm1.h"

#define ledpin 6
#define MOSI 11
#define MISO 12
#define SCK 13

/ * Configuración del timer 0 * /
#define TIMER0_CLOCK_SRC_HZ (F_CPU / 1024) / * Nb garrapatas por segundo = 6144000 / 1024 = 6000 * / //15626
#define TIMER0_NB_INT_FOR_100_MS 10 //10 / * Nb garrapatas por 100ms = 600 * /
#define TIMER0_NB_TICKS_FOR_100_MS 156 //60 / * Nb garrapatas por 100 ms = (10 * 60) * /
#define TIMER0_RESET_VALUE (255 - TIMER0_NB_TICKS_FOR_100_MS)

estático volátil bool uart_tx_flag = false;      / * Bandera de interrupción Tx UART. */
estático volátil bool uart_rx_flag = false;      / * Bandera de interrupción UART Rx. */
estático volátil bool timer_flag = false;        / * Bandera de la interrupción de temporizador. */
uart_rx_data de uint8_t estática;                    / * Lectura de datos UART Rx. */
rx_packet de uint8_t [PLM_RX_MAX_PACKET_SIZE];
uint8_t rx_length = 0;
tx_packet de uint8_t [PLM_TX_MAX_PACKET_SIZE];
uint8_t tx_length = 0;
uint32_t timecount4, timecount;
extern char e;
bool time_e;
void delay_us(int t)
{
int i;
int j;
para (j = 0; j < t; j ++)
para (i = 0; i < 1000; i ++);
}
void setup()
{
pinMode(MOSI,OUTPUT);
pinMode(SCK,OUTPUT);
pinMode(nPLM_RESET,OUTPUT);
pinMode(PLM_CS,OUTPUT);
pinMode(MISO,INPUT);
pinMode(ledpin,OUTPUT);
serial_init();
spi_init (SPI_SPEED_F16);

/ * Inicialización de la biblioteca plm1. */
digitalWrite (ledpin, LOW);
plm1_init (); //send_next_nibble
/ * Inicialización de la comunicación serial. */

digitalWrite (ledpin, HIGH);
attachInterrupt(0,SIGNAL,RISING);
/ * Activar interrupción externa 0 para PLM-1 * /
Serial.Print(5);
}
void loop(void)
{
Si ((timecount>100) & & (time_e))
{
time_e = false;
timecount4 = 0;
timer_flag = true;
timecount = 0;
}
if(time_e) más
{
if(timecount4>50)
{
timecount4 = 0;
timecount ++;
}
otra cosa
timecount4 ++;
}
Si (Serial.available())
{
uart_rx_data = Serial.read();
Serial.Write(uart_rx_data);
uart_rx_flag = true;
}
if(uart_tx_flag)
{
uart_tx_flag = false;
serial_tx_buffer_empty();
}

/ * True bandera si se produjo una interrupción de UART Rx. */
if(uart_rx_flag)
{
/ * Activa bandera si fue expresada interrupción UART Rx datos disponibles.
Cuando se recibieron los datos en serie, se inicia un temporizador de 10 ms.
* Si el temporizador expira antes de que se recibieron datos adicionales de la
* UART, una transmisión es iniciado. */
uart_rx_flag = false;
timer_flag = false;
timecount4 = 0;
timecount = 0;
& & (time_e)
/ * Deshabilitar la interrupción de temporizador. */
TIMSK0 = 0 X 00;

/ * Rellena el búfer con los datos de la UART. */
tx_packet [tx_length ++] = uart_rx_data;

/ * Iniciar el temporizador de 10 ms. Si la interrupción de temporizador se produce antes el siguiente byte de datos,
* enviar el paquete. De lo contrario, el temporizador se restablece. */
Si (tx_length < PLM_TX_MAX_PACKET_SIZE - 10)
{
time_e = true;
TCNT0 = 0 X 00;                             / * Contador de reset. */
TIMSK0 = _BV(OCIE0A);                     / * Habilitar partido comparar A interrupción. */
}

/ * Si el tamaño del paquete se está cerca del máximo, iniciar inmediatamente la transmisión. */
otra cosa
{
time_e = false;
/ * plm1_send_data devuelve true si la biblioteca ha en cola los paquetes correctamente. */
Si (plm1_send_data(tx_packet, tx_length)) / /
{
/ * Resetear el buffer tx si el paquete fue transferido con éxito a la biblioteca de PLM-1. */
tx_length = 0;
}
otra cosa
// {
TCNT0 = 0 X 00;
TIMSK0 = _BV(OCIE0A);
// }
}
}

/ * Tue la bandera si se produjo una interrupción de temporizador. */
if(timer_flag)
{
timer_flag = false;
Serial.Write(0xdd);
/ * plm1_send_data devuelve true si la biblioteca ha en cola los paquetes correctamente. */
Si (plm1_send_data(tx_packet, tx_length))
{
Serial.Write(tx_length);
tx_length = 0;
TIMSK0 = 0 X 00;                             / * Deshabilitar la interrupción de temporizador. */
}
}

/ * Cuando se recibe un paquete, plm1_receive devuelve la longitud de la
* paquetes y copias el contenido del paquete en rx_packet. */
Si ((rx_length = plm1_receive(rx_packet)))
{

output_serial_data (rx_packet, rx_length);
PLM.RX.write_next=0;
PLM.RX.read_next=0;
PLM.RX.pkt_end=0;
}

// }
return 0;                                 / * La función main() no devolverá. */
}

/ * Interrumpir la rutina de servicio derivados de la ligne d'interruption du PLM. */
void SIGNAL(void)
{
plm1_interrupt();
}

/ * interrupción de temporizador de 10 ms ISR */
Signal(TIMER0_COMPA_vect)
//{
Serial.Write(0x33);
timer_flag = true;
//}

UART RX
//*********************************************
/*Signal(USART_RX_vect)
{
uart_rx_flag = true;
uart_rx_data = UDR0;
}*/

/ * USART Tx Buffer vacío ISR. */
/*Signal(USART_UDRE_vect)
{

uart_tx_flag = true;

}*/

Artículos Relacionados

Incorporado sistema de adquisición de datos de ECG

Incorporado sistema de adquisición de datos de ECG

Este instructivo está pensada como un guid para crear una tarjeta de adquisición de datos de Embeddded ECG, proporciona algunos conocimientos básicos sobre identificación de sistema y procesamiento digital de señales en Matlab, programación de FPGA e
Maestro de acordeón - un sintetizador de música python/arduino

Maestro de acordeón - un sintetizador de música python/arduino

Este proyecto fue creado por un equipo de tres estudiantes de la Universidad de Pennsylvania en MHacks 2014 Detroit (un fin de semana Hackathon). El objetivo de este proyecto es crear un sintetizador de música que genera tonos basados en gestos del u
Tutorial EFCom - GSM/GRPS Shield Arduino

Tutorial EFCom - GSM/GRPS Shield Arduino

Hola, cada aficionado de la electrónica, hace poco hemos terminado un tutorial acerca de EFCom, que puntualmente puede ayudar a los estudiantes de Arduino a enviar un mensaje, llamar a un teléfono, mientras tanto, realizar comunicación GPRS, incluyen
Introducir

Introducir

Última vez que hemos logrado "Interact en comando entre pcDuino y Spyder" vía puerto del USB de pcDuino, hoy vamos a utilizar el UART (GPIO 0, GPIO 1) en pcDuino para lograr la comunicación de powerline para pcDuino.Paso 1: Diagrama de 1. conect
Cómo construir un simple fotómetro de Twilight

Cómo construir un simple fotómetro de Twilight

Un fotómetro de Crepúsculo es un sensor de luz muy preciso, utilizado en el amanecer o crepúsculo. Su propósito es medir la cantidad de aerosoles en la estratosfera.Cuando el sol está abajo el horizonte ya no directamente ilumina la tierra, la luz re
Lindo Castillo de arena banderas

Lindo Castillo de arena banderas

haciendo castillos de arena fue y sigue siendo, una actividad favorita de vacaciones junto al mar.  Así que ¿por qué no recuerdos de sus hijos de hacer castillos de arena en la playa (o en su cajón de arena) extra especial diciéndoles acerca de este
La introducción de LoRa™!

La introducción de LoRa™!

LoRa™ =telemetría de datos inalámbricos de largo alcance y se relaciona con un VHF/UHF 2 vías inalámbrica espectro de difusión de datos modulación enfoque radical que recientemente ha sido desarrollado y marca registrada (™) de Semtech - una larga (1
Analizador de espectro audio con Freescale GT60 LCD 8 bits

Analizador de espectro audio con Freescale GT60 LCD 8 bits

esto es un desarrollo que incluye un análogo y una parte digital.Básicamente el poder es representar la señal de audio separada en frecuencia, para esto que tenemos que muestra la señal de acuerdo con el teorema de muestreo Teorema de muestreo de Nyq
Antena de 433 MHz cinta métrica-juegos de rastreo de frecuencia ultraelevada transmisor!

Antena de 433 MHz cinta métrica-juegos de rastreo de frecuencia ultraelevada transmisor!

Este Instructable se relaciona con el diseño y evaluación de una simple cinta métrica base antena de Yagi 433 MHz de 3 elementos.  Un receptor eficaz fue hecho por "persuadir" a ~ US$ 4 Dorji 433 MHz pedir módulo de datos (amplitud Shift Keying)
Time-lapse de satélite

Time-lapse de satélite

Resumen: fue agregando Widgets a mi iGoogle un día y encontró un fresco poco negocio que muestran imágenes de satélite NOAA tiempo tomados por la serie GEOS geosincrónica. Hay nueve diferentes puntos de vista, con tres diferentes "spectra" dispo
AUMENTAR la gama de SIMPLE transmisor de FM de baja potencia por antena YAGI

AUMENTAR la gama de SIMPLE transmisor de FM de baja potencia por antena YAGI

IntroducciónPara la buena eficacia y directividad para la recepción en el espectro radioeléctrico, necesitamos una buena antena de Yagi-Uda. Esta antena fue inventada a principios del siglo XX por dos ingenieros japoneses llamados Uda y Yagi. La ante
Carro de ducha Pacífico Sur

Carro de ducha Pacífico Sur

El Pacífico Sur tiene una escena de ducha muy grande donde utilice un carrito de la duchaPaso 1: Hacer la Baseusted tendrá 4 2 por 4s y cortar 2 a 3 pies 1 en 3/4 y 2 a 6 ft 1 en y 3/4 luego skrew ellos juntos en un rectángulo y 2 más uno por 4 entre
Clap y hágase la luz

Clap y hágase la luz

hace ya un tiempo pasado subí un artículo. Ahora con mi universidad fuera del camino y un trabajo estable, tiempo libre ya no es difícil de conseguir.Estoy aquí para presentarles un proyecto simple y tal vez útil – Clap activado la luz de la noche.La
INFRA rojo mando ROBOCAR usando AVR (ATMEGA32) MCU

INFRA rojo mando ROBOCAR usando AVR (ATMEGA32) MCU

El presente proyecto describe un diseño e implementación de un infrarrojo (IR) remoto controlado RoboCar que puede ser utilizado para diversas aplicaciones de control sin tripulación automatizado. He diseñado RoboCar controlado remoto (movimiento de