User Tools

Site Tools


lab3

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lab3 [2013/11/26 16:48]
dan.tudose created
lab3 [2013/11/26 17:08] (current)
dan.tudose
Line 1: Line 1:
 ====== Implementarea unui protocol de acces la mediu în rețele de senzori wireless ====== ====== Implementarea unui protocol de acces la mediu în rețele de senzori wireless ======
 +
 +===== Comunicatia intre noduri =====
 +
 +Compilati codul de mai jos si rulati pe doua noduri de adrese diferite: nodul cu adresa 1 este cel care trimite pachete iar al doilea (adresa diferita de 1) va receptiona pachetele trimise. Receptia va fi semnalata prin aprinderea led-ului de pe PB5 pe placa de extensie.
 + 
 +<code C>
 +#include <avr/io.h>
 +#include <avr/interrupt.h>
 +#define F_CPU 16000000UL
 +#include <util/delay.h>
 +
 +#define TRX_FRAME_BUFFER(index) (*(volatile uint8_t *)(0x180 + (index)))
 +
 +volatile uint8_t rxPayload;
 +
 +uint8_t nod1_address __attribute__((section(".data"))) = 2;
 +uint8_t node_address __attribute__((section(".data"))) = 2;
 +
 +
 +void initLeds()
 +{
 + DDRB = 0xff;
 + PORTB = 0x00;
 +}
 +
 +void setState(uint8_t state)
 +{
 + TRX_STATE = CMD_FORCE_TRX_OFF;
 + TRX_STATE = state;
 + while (state != TRX_STATUS_struct.trx_status); 
 +}
 +
 +// send a short frame with a magic payload
 +void sendFrame()
 +{
 + setState(CMD_PLL_ON);
 +
 + TRX_FRAME_BUFFER(0) = 3; //length - minimum length is 3
 + TRX_FRAME_BUFFER(1) = 0x00; //magic payload
 +
 +
 + // start transmission
 + TRX_STATE = CMD_TX_START;
 +}
 +
 +
 +// upon receipt make a simple verification of correctness
 +ISR(TRX24_RX_END_vect)
 +{
 + rxPayload = TRX_FRAME_BUFFER(0);
 + if (rxPayload == 0)
 + PORTB ^= (1<<PB5);
 + setState(CMD_RX_ON);
 +}
 +
 +void rfInit(void)
 +{
 + setState(CMD_TRX_OFF);
 +
 + IRQ_STATUS = 0xff;
 + IRQ_MASK_struct.rx_end_en = 1;
 + sei();
 +
 + //PHY_CC_CCA_struct.channel = 0x0b;
 + TRX_CTRL_2_struct.rx_safe_mode = 1;
 +}
 +
 +int main()
 +{
 + rfInit();
 + initLeds();
 +
 + while(1)
 + {
 + if (node_address == 1)
 + {
 + sendFrame();
 + PORTB ^= (1<<PB7);
 + _delay_ms(3000);
 + }
 + else 
 + {
 + PORTB &= ~(_BV(PB5));
 + setState(CMD_RX_ON);
 + while (rxPayload != 0) asm("nop");
 + }
 + }
 +
 + return 0;
 +
 +
 +
 +</code>
 +
  
 Nodurile vor urma un program comun de activitate wireless, vor transmite la început un broadcast pentru a obține informații de rutare apoi vor transmite un pachet de la un nod specificat către nodul desemnat base-station (nodul 0). Nodurile vor urma un program comun de activitate wireless, vor transmite la început un broadcast pentru a obține informații de rutare apoi vor transmite un pachet de la un nod specificat către nodul desemnat base-station (nodul 0).
lab3.1385477334.txt.gz · Last modified: 2013/11/26 16:48 by dan.tudose