Mamba van LinkSprite realiseren smalle band powerline mededeling over pcDuino (2 / 4 stap)

Stap 2: Test Code

De volledige voorbeeldcode kan worden (mamba_pcduino) hier downloaden.

De belangrijkste programma als volgt:

/******************************************************************************************
* Voorbeeldcode voor plm1 bibliotheek.
*
*
*
-Project beschrijving:
* Dit programma fungeert als een brug van RS-232 naar Powerline en Powerline
* tot en met RS-232. Het beschikt over een eenvoudige hoofdlus en 4 ISR; 2 voor de UART
* een voor de externe interrupt van PLM-1 en een voor een 10 ms-timer.
*
-Onderbreekt voor de PLM-1 externe interrupt is verplicht. Dit
* ISR behandelt de interrupts die nodig zijn voor de transmissie en ontvangst.
* Hoe hoger de configuratie van de PLM-1 baud rate, des te sneller
* de interrupts zal optreden.
*
-Project bestanden:
* de plm1.h van de plm1 bibliotheekfuncties declaraties en definities van gebruiker
* parameters voor de configuratie van plm1.
* plmcfg.h bevat definities van referentie configuratie tekenreeksen voor de PLM-1.
* ports.h definities van macro's gebruikt voor I/O manipulatie.
* serial.h verklaringen van functies die worden gebruikt voor seriële communicatie.
* spi.h opsommingen en macro's die zijn gebruikt voor SPI communicatie met de PLM-1.
*
* main.c Main functie en interrupt handlers van het programma.
* plm.c Libplm bibliotheek. Bevat alle functies die worden gebruikt door de bibliotheek en de
* SPI initialisatie functie voor gebruik met de PLM-1.
* serial.c functies gebruikt voor seriële communicatie.
******************************************************************************************/

#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

/ * Timer 0 configuratie * /
#define TIMER0_CLOCK_SRC_HZ (F_CPU / 1024) / * Nb teken per seconde = 6144000 / 1024 = 6000 * / //15626
#define TIMER0_NB_INT_FOR_100_MS 10 //10 / * Nb teken per 100ms = 600 * /
#define TIMER0_NB_TICKS_FOR_100_MS 156 //60 / * Nb teken per 100ms = (10 * 60) * /
#define TIMER0_RESET_VALUE (255 - TIMER0_NB_TICKS_FOR_100_MS)

statische vluchtige bool uart_tx_flag = false;      / * Vlag voor Tx UART-interrupt. */
statische vluchtige bool uart_rx_flag = false;      / * Vlag voor Rx UART-interrupt. */
statische vluchtige bool timer_flag = false;        / * Vlag voor Timer interrupts. */
statische uint8_t uart_rx_data;                    / * Rx UART-gegevens lezen. */
uint8_t rx_packet [PLM_RX_MAX_PACKET_SIZE];
uint8_t rx_length = 0;
uint8_t tx_packet [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;
voor (j = 0; j < t; j ++)
voor (ik = 0; ik < 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);

/ * Initialisatie van de plm1 bibliotheek. */
digitalWrite (ledpin, laag);
plm1_init (); //send_next_nibble
/ * Initialisatie van de seriële communicatie. */

digitalWrite (ledpin, hoge);
attachInterrupt(0,SIGNAL,RISING);
/ * Activeren van externe interrupt 0 voor PLM-1 * /
Serial.Print(5);
}
void loop(void)
{
Als ((timecount>100) & & (time_e))
{
time_e = false;
timecount4 = 0;
timer_flag = true;
timecount = 0;
}
anders if(time_e)
{
if(timecount4>50)
{
timecount4 = 0;
timecount ++;
}
anders
timecount4 ++;
}
Als (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();
}

/ * Vlag true als een Rx UART-interrupt is opgetreden. */
if(uart_rx_flag)
{
/ * Vlag actief als interrupt UART Rx Data beschikbaar was reaised.
* Wanneer de seriële gegevens worden ontvangen, wordt een 10 ms timer gestart.
* Als de timer is afgelopen voordat aanvullende gegevens wordt ontvangen van de
* UART, een transmissie wordt gestart. */
uart_rx_flag = false;
timer_flag = false;
timecount4 = 0;
timecount = 0;
& & (time_e)
/ * Timer onderbreken uitschakelen. */
TIMSK0 = 0X00;

/ * De buffer te vullen met gegevens van de UART. */
tx_packet [tx_length ++] = uart_rx_data;

/ * De 10ms timer te starten. Als de timer interrupt treedt op voordat de volgende gegevensbyte,
* Stuur het pakket. Anders is de tijd op beginstand zetten. */
Als (tx_length < PLM_TX_MAX_PACKET_SIZE - 10)
{
time_e = true;
TCNT0 = 0X00;                             / * Reset-timer. */
TIMSK0 = _BV(OCIE0A);                     / * Enable vergelijken Match A interrupt. */
}

/ * Als de pakketgrootte wordt steeds in de buurt van het maximum, onmiddellijk de overdracht starten. */
anders
{
time_e = false;
/ * plm1_send_data retourneert de waarde true als de bibliotheek is in de wachtrij de packet sucessfully. */
Als (plm1_send_data(tx_packet, tx_length)) / /
{
/ * Tx buffer's resetten indien ze het pakket werd met succes overgebracht naar de bibliotheek van PLM-1. */
tx_length = 0;
}
anders
// {
TCNT0 = 0X00;
TIMSK0 = _BV(OCIE0A);
// }
}
}

/ * Vlag tue als een interrupt timer is opgetreden. */
if(timer_flag)
{
timer_flag = false;
Serial.write(0xdd);
/ * plm1_send_data retourneert de waarde true als de bibliotheek is in de wachtrij de packet sucessfully. */
Als (plm1_send_data(tx_packet, tx_length))
{
Serial.write(tx_length);
tx_length = 0;
TIMSK0 = 0X00;                             / * Timer onderbreken uitschakelen. */
}
}

/ * Als een pakket wordt ontvangen, plm1_receive geeft de lengte van de
* pakket en kopieën van de inhoud van het pakket in rx_packet. */
Als ((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;
}

// }
keren 0;                                 / * De main() functie zal nooit meer terugkeren. */
}

/ * Interrupt Service Routine provenant de la ligne d'interruption du PLM. */
VOID SIGNAL(void)
{
plm1_interrupt();
}

/ * 10 ms timer onderbreken 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 leeg ISR. */
/*Signal(USART_UDRE_vect)
{

uart_tx_flag = true;

}*/

Gerelateerde Artikelen

Tot vaststelling van een geperforeerde fiets band

Tot vaststelling van een geperforeerde fiets band

Inleiding:Een geperforeerde fiets band ruïnes volledig van een fiets, want het maakt het onbruikbaar. Dit kan een dag kinderen volledig ruïneren omdat hij geen manier heeft om van plaats tot plaats gaan zonder een fiets. Deze instructies in detail te
Het wijzigen van je Apple Watch band

Het wijzigen van je Apple Watch band

De Apple Watch is een must-have accessoire voor iedereen die een iPhone heeft.En met het slimme wearable apparaat populariteit nog op de stijging, mensen vinden meer manieren over hoe hun Apple Watch overeenstemt met wat ze dragen of welke gebeurteni
Handleiding: Hoe te wijzigen van een platte fiets band

Handleiding: Hoe te wijzigen van een platte fiets band

informatie over het wijzigen van een platte fiets band in deze video.
Bij het tekenen van Aardman van ' The Pirates! Band van Misfits'

Bij het tekenen van Aardman van ' The Pirates! Band van Misfits'

hier is een andere aanstaande geanimeerde film genaamd The Pirates! Bij het tekenen van Aardman De stappen van deze tutorial te volgen en het aanpassen van de snelheid zal zeker begeleiden u in uw eigen tekening.Stap 1:Stap 2:Stap 3: How to draw hoe
Horlogebandje van de vervanging van een oude innerlijke band

Horlogebandje van de vervanging van een oude innerlijke band

Dus de riem van mijn favoriete horloge brak... een lange tijd geleden. Een of andere manier was het niet eenvoudig om een vervanging die de stijl van het horloge voorzien. Dus ik mijn eigen maakte, snel en gemakkelijk en ik ben blij met het resultaat
Hoe te spelen van Guitar Hero/Rock Band

Hoe te spelen van Guitar Hero/Rock Band

de muziek spelen van Rock Band en Guitar Hero zijn games in zichzelf. Muziek videogames zijn een geheel nieuw genre van video game. Invoering van duizenden mensen ieder uur aan nieuwe bands, liedjes en genres van muziek, dit spel is de mainstream van
Repareren van een motorfiets lekke band

Repareren van een motorfiets lekke band

het is net als de vaststelling van een lekke band van fiets, maar dan veel groter.Bijvoorbeeld - contrast deze "tire irons" met de kleine plastic dingen u te wrikken van de band uit een velg van de fiets.Sommige nieuwere/grotere motorfietsen heb
Repareren van een platte fiets band - de weg van de Innertube

Repareren van een platte fiets band - de weg van de Innertube

De weg van de Innertube - aka - hoe te repareren van een lekke band met uw schoenveterAls het gaat om de vaststelling van een lekke band, stel ik voor eerst overweegt uw filosofie tegenover het leven. De theorie van de lekke band is eenvoudig, de rea
Schilderij van uw gitaar Rock Band

Schilderij van uw gitaar Rock Band

ik zal u tonen hoe te schilderen van uw Rock Band-gitaar als Eddie Van Halen, dus het ziet er geweldig!Al schilderde ik mijn hoede van Kies dus ik je laten met de kop zien zal. Het is hetzelfde proces, alleen zult u wilt uw hoede van Kies opstijgen o
Hoe te repareren van een ijzeren uitgelijnde band

Hoe te repareren van een ijzeren uitgelijnde band

Een vriend had zijn ijzeren band gebroken op een overdreven moeilijk lug nut. In dit Instructable, zal ik je laten zien hoe we opgelost met behulp van sommige TIG lassen.Ik maakte het op TechShop.Stap 1: Bereid uw werk Beginnen met een schoon gesnede
Aanpassen van uw Disney Magic Band Park Pass

Aanpassen van uw Disney Magic Band Park Pass

als u om het even wat als me bent u hebt opgeslagen en voor maanden te gaan uw Disney vakantie gepland. En met een gezin van vier de kleine dit en dat is optellen snel in het park. Nu komen ze met dit geweldige idee genoemd een magische band. Het is
Hoe te repareren van een platte auto band

Hoe te repareren van een platte auto band

mijn auto kreeg een spijker in de band en eerder dan mee naar de garage te laten aansluiten, ik deed en nam enkele foto's.Dit instructable zal u tonen hoe om te herstellen van de band van uw auto.Stap 1: Tools Je nodig hebt:-Auto-jack-Lug moersleutel
Het wijzigen van de buis en band op een fiets

Het wijzigen van de buis en band op een fiets

dit instructable is voor die mensen die weten hoe willen ter vervanging van een oude of kapotte band en buis van het wiel van een fiets.Stap 1: De band deflatie Om het leeglopen van de band die u wilt zoeken de klep, kleppen kunnen komen in twee vers
Maken van een eenvoudige koper band

Maken van een eenvoudige koper band

Wanneer ik heb niets dat ik kan doen buiten kant één van mijn hobby's sieraden maakt. Ik ben geen expert op het, maar ik probeer, dus ik had wat links over koperdraad uit een van mijn blikje Rose's en ik heb deze eenvoudige koperen armband.Stap 1: In