-
Created by Unknown User (m0702505), last modified by Unknown User (tonini) on 11.3.2011
You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 14
Next »
Lähetyskoodi oma tekemä :
#include "bsp.h"
#include "mrfi.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_leds.h"
#include "bsp_buttons.h"
static void linkTo(void);
static uint8_t viestiLaskuri=0;
static linkID_t sLinkID1 = 0;
static uint8_t sRxCallback(linkID_t);
void main(void) // Pääohjelma alkaa tästä
{
BSP_Init(); // laudan alustus
SMPL_Init(sRxCallback); // radion alustus
BSP_TOGGLE_LED2(); // punanen ledi paalle
do {
if (BSP_BUTTON1()) // odotetaan etta nappia painetaan
{
break;
}
} while (1);
linkTo(); // linkin muodostaminen
while (1) ;
}
static void linkTo() // linkin muodostaminen
{
uint8_t msg[2];//, delay =0;
while (SMPL_SUCCESS != SMPL_Link(&sLinkID1)) // odotetaan että linkki on muodostettu
{
// ledit vilkkuu kunnes linkki on onnistunut
BSP_TOGGLE_LED1();
BSP_TOGGLE_LED2();
NWK_DELAY(50); // ledit vilkkuu 50ms valein
}
// kun linkki onnistunut laitetaan vihrea ledi paalle
BSP_TOGGLE_LED1();
// radion kaynnistys
SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // valitaan radiocontrol ja action
// laitetaan viestin ensimmaiseen alkioon arvo 1
msg[0] = 1; // vastaan otin lukee sen vihreena ledina
while (1)
{
NWK_DELAY(100); // 100ms delay
msg[1] = ++viestiLaskuri; // viestin toiseen alkioon viestien maara
SMPL_Send(sLinkID1, msg, sizeof(msg)); // lahetetaan viesti
}
}
static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto
{
uint8_t msg[2], len;
// tarkisetaan vastaan otetavan viestin ID
if (port == sLinkID1)
{
if ((SMPL_SUCCESS == SMPL_Receive(sLinkID1, msg, &len))) //
{
BSP_TOGGLE_LED2(); // jos viestin vastaan otto onnistunut niin punanen ledi paalle
return 1;
}
}
return 0;
}
Vastaanotto:
#include "bsp.h"
#include "mrfi.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_leds.h"
#include "bsp_buttons.h"
static void linkFrom(void);
void toggleLED(uint8_t);
static uint8_t viestiLaskuri = 0;
static linkID_t sLinkID2 = 0;
static volatile uint8_t viestiVastaanotettu = 0;
static uint8_t sRxCallback(linkID_t);
void main (void)
{
BSP_Init(); // laudan alustus
SMPL_Init(sRxCallback); // radion ja SimpliTi alustus
BSP_TOGGLE_LED1(); // vihreä ledi päälle
do {
if (BSP_BUTTON1()) // odotetaan että nappia painetaan
{
break;
}
} while (1);
linkFrom(); // linkin muodostaminen
while (1) ;
}
static void linkFrom()
{
uint8_t msg[2];
/* listen for link forever... */
while (1)
{
BSP_TOGGLE_LED2();
if (SMPL_SUCCESS == SMPL_LinkListen(&sLinkID2)) // kuuntelee niin kauan kunnes linkki on valmis
{
break;
}
}
// radion käynnistys
SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // valitaan "radiocontrol ja action"
msg[0] = 2;
while (1)
{
if (viestiVastaanotettu)
{
msg[1] = ++viestiLaskuri; // laitaan viestilaskuri +1 viestin ensimmäiseen alkioon
SMPL_Send(sLinkID2, msg, sizeof(msg)); // lähetetään viesti
viestiVastaanotettu = 0;
}
}
}
static uint8_t sRxCallback(linkID_t port) // viestin vastaanotto
{
uint8_t msg[2], len;
// tarkisetaan vastaan otetavan viestin ID
if (port == sLinkID2)
{
if (SMPL_SUCCESS == SMPL_Receive(sLinkID2, msg, &len)) // jos viestin vastaanotto onnistunut niin vihreä ledi päälle
{
BSP_TOGGLE_LED1();
viestiVastaanotettu = 1;
return 1;
}
}
return 0;
}
AD-luku ja lähetys
#include "bsp.h"
#include "mrfi.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_leds.h"
#include "bsp_buttons.h"
void toggleLED(uint8_t);
static void linkTo(void);
static uint8_t viestiLaskuri=0;
static linkID_t sLinkID1 = 0;
static uint8_t sRxCallback(linkID_t);
void initIO();
int analogitulo();
int viestiVastaanotettu=1;
void main(void)
{
initIO(); // IO alustus
BSP_Init(); // laudan alustus
SMPL_Init(sRxCallback); // radion alustus
BSP_TOGGLE_LED2(); // punanen ledi päälle
do {
if (BSP_BUTTON1()) // odotetaan että nappia painetaan
{ break; }
} while (1);
linkTo(); // linkin muodostaminen
while (1) ;
}
static void linkTo()
{
uint16_t adc_msg;
uint8_t adc1;
uint8_t adc2;
//uint8_t adc3;
while (SMPL_SUCCESS != SMPL_Link(&sLinkID1)) // ledit vilkkuu kunnes linkki on onnistunut
{
BSP_TOGGLE_LED1();
BSP_TOGGLE_LED2();
NWK_DELAY(50); // ledit vilkkuu 50ms välein
}
// kun linkki onnistunut laitetaan vihreä ledi päälle
BSP_TOGGLE_LED1();
// radion käynnistys
SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0);
// laitetaan viestin ensimmäiseen alkioon arvo 1
while (1)
{
uint8_t msg[3];
NWK_DELAY(100); // 100ms delay
adc_msg = analogitulo(); // luetaan saatu jännitteen tieto muuttujaan
// adc_msg on 16bit ja lähetetty viesti voi olla vain 8bit, joten jaetaan adc_msg kahteen 8bit muuttujaan
adc1 = adc_msg>>8;
adc2 = adc_msg&255;
msg[0]=adc1; // viestin ensimmäiseen alkioon eniten merkitsevät bitit
msg[1]=adc2; // toiseen vähiten merkitsevät
msg[2]=viestiLaskuri; // tieto viestien määrästä
SMPL_Send(sLinkID1, msg, sizeof(msg)); // lähetetään viesti
viestiVastaanotettu = 0;
}
}
static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto
{
uint8_t msg2, len;
// tarkisetaan vastaan otetavan viestin ID
if (port == sLinkID1)
{
if ((SMPL_SUCCESS == SMPL_Receive(sLinkID1, msg, &len))) // jos viestin vastaanotto onnistunut punanen ledi päälle
{
viestiVastaanotettu = 1;
viestiLaskuri++;
BSP_TOGGLE_LED2();
return 1;
}
}
return 0;
}
void initIO()
{
WDTCTL = WDTPW+WDTHOLD; // sammuta watchdog timer
P2SEL |= BIT2; // avaa portin 2 bitti 3
// ref moduulin alustus
// Mahdollista 2.5V jaettu referenssi, poista lämpöanturi käytöstä virran säästämiseksi
REFCTL0 |= REFMSTR+REFVSEL_2+REFON+REFTCOFF;
/* Initialize ADC12 */
ADC12CTL0 = ADC12ON+ADC12SHT02; // Turn on ADC12, set sampling time
ADC12CTL1 = ADC12SHP; // Use sampling timer
ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_2; // Vr+=Vref+ and Vr-=AVss
__delay_cycles(75); // 75 us delay @ ~1MHz
ADC12CTL0 |= ADC12ENC; // Enable conversions
}
int analogitulo()
{
uint16_t adc_arvo=0;
ADC12CTL0 |= ADC12SC; // Start conversion-software trigger
while (!(ADC12IFG & BIT0));
//__no_operation(); // SET BREAKPOINT HERE
adc_arvo = ADC12MEM0;
return adc_arvo;
}
You must log in to comment.