-
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 16
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;
// alusta ADC12
ADC12CTL0 = ADC12ON+ADC12SHT02; // käynnistä ADC12 ja aseta näytteenoton aika
ADC12CTL1 = ADC12SHP; // käytä näytteenoton timeriä
ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_2; // Vr+=Vref+ and Vr-=AVss ADC12 Input Channel 2 ADC12 Select Reference 1
__delay_cycles(75); // 75 us delay @ ~1MHz
ADC12CTL0 |= ADC12ENC; // ottaa käyttöön muunnoksen
}
int analogitulo()
{
uint16_t adc_arvo=0;
ADC12CTL0 |= ADC12SC; // aloita muunnos
while (!(ADC12IFG & BIT0));
//__no_operation(); // aseta breakpoint tähän
adc_arvo = ADC12MEM0; // AD muunnos tallettuu ADC muisti paikkaan ADC12MEM0
return adc_arvo; // palautetaan arvo adc_arvo
}
You must log in to comment.