This is an old revision of the document!


Ethernet

Seotud mooduliga: [HW] Kontrollermoodul

See teegi osa sisaldab Kodulabori etherneti kasutamise funktsioone.

Andmetüübid

  • ir_distance_sensor
    Infrapuna-kaugusanduri kauguse arvutuse funktsiooni parameetrite struktuur. Kauguse arvutusvalem on a / (ADC + b) - k. Struktuuri liikmed:
    • a - jagatav.
    • b - vabaliige.
    • k - korrigeerimiskonstant.

Konstandid

  • ir_distance_sensor GP2Y0A21YK - Sharp GP2Y0A21YK kaugusanduri parameetrite struktuuri objekt.

Funktsioonid

  • signed short thermistor_calculate_celsius(unsigned short adc_value)

Termistori temperatuuri arvutamine Celsiuse kraadides ADC muunduri väärtusest. Funktsioon põhineb teisendustabelil. Parameetrid:

  • adc_value - ADC teisenduse väärtus.
  • Tagastab temperatuuri Celsiuse kraadides -20 kuni 100 kraadi piires.
  • signed short ir_distance_calculate_cm(ir_distance_sensor sensor, unsigned short adc_value)

IR kaugusanduri väljundpinge ADC väärtuse sentimeetriteks ümberarvutamise funktsioon. Parameetrid:

  • sensor - Kaugusanduri parameetrite struktuuri objekt.
  • adc_value - 10-bitine +5 V võrdluspingega ADC väärtus.
  • Tagastab kauguse sentimeetrites või -1, kui seda ei saanud arvutada.
  • unsigned short ultrasonic_measure(pin trigger, pin echo)

Ultraheli-kaugusanduri mõõtmise teostamise funktsioon. Funktsioon tekitab SRF04 kaugusmõõdiku päästikuimpulsi ja mõõdab kajaimpulsi saabumise aega. Aja põhjal arvutatakse objekti kaugus. Mõõtmine võtab aega kuni 36 ms. Funktsioon eeldab 14.7456 MHz mikrokontrolleri taktsagedust. Parameetrid:

  • trigger - päästiku viigu muutuja.
  • echo - kaja viigu muutuja.
  • Tagastab kauguse sentimeetrites või 0, kui mõõtmine ebaõnnestus.

 

Näide

// html stringide salvestamiseks programmimälusse
#include <avr/pgmspace.h>
 
// Ethernelt funktsioonid
#include "ip_arp_udp_tcp.h"
#include "enc28j60.h"
#include "net.h"
#include "ethernet.h"
 
#include <homelab/delay.h>
#include <homelab/pin.h>
 
// Veebilehe koostamiseks eraldi funktsioon
uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off);
 
// MAC ja IP peavad olema unikaalsed oma kohtvõrgus,
// kahte ühesugust aadressi ei saa olla seadmetel.
// See MAC on suvaliselt võetud (üldjuhul pole vaja muuta)
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
 
// IP vastavalt kohtvõrgule (viimane number valida ise)
static uint8_t myip[4] = {192,168,1,100};
 
// andmete puhvri suurus
static uint8_t buf[BUFFER_SIZE+1];
 
// LED PB7 muutuja määramine
pin debug_led = PIN(B, 7);
 
 
int main(void)
{        
	uint16_t plen = 0;	//andmejada pikkus
	uint16_t dat_p;		//url-i alguse aadress
	int8_t cmd;
 
	// Etherneti initseerimine vastavalt etteantud aadressidele
	ethernet_init(mymac,myip);
 
	// LED PB7 on väljund
	pin_setup_output(debug_led);
 
	while(1)
	{
		// Võtab vastu pakette, kuni saab endale määratud andmetega paketi
		ethernet_get_packet(buf);
 
		// Vaatab, mis url-is sisaldub
		dat_p = ethernet_analyse_url(buf);
 
		// Leiab vastuvõetud jadast url-i esimese tähemärgi
		cmd = buf[dat_p];
 
		// Kui sümbol on asciis '0'
		if (cmd == '0')
		{
			// LED kustutada
			pin_set(debug_led);
			// Lae veebilehet vastavalt LED-i olekule
			// Vajalik on jälgida andmejada lõppu
			plen = ethernet_load_webpage(buf,pin_get_value(debug_led));
		}
		else if (cmd == '1')	//sümbol on '1'
		{
			// LED põlema
			pin_clear(debug_led);
			plen = ethernet_load_webpage(buf,pin_get_value(debug_led));
		}
		// Muul juhul lae veebileht vastavalt LED olekule
		else plen = ethernet_load_webpage(buf,pin_get_value(debug_led));
 
		// Kuva varem valmis laetud veebileht
		ethernet_print_webpage(buf,plen);
	}
}
 
// Veebileht laetakse kuvamiseks kirjutades andmed TCP saatmise puhvrisse
uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off)
{
	uint16_t plen;
 
	// Laeb html koodi saatmiseks puhvrisse
	// Need suured stringid on salvestatud PSTR makro abil programmimälusse,
	// et mitte raisata liigselt töömälu
	plen = ethernet_load_data(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"));
	plen = ethernet_load_data(buf,plen,PSTR("<center><p>Homelab PB7 LED: "));
 
	// Kui LED ei põle
	if (on_off)
	{
		plen = ethernet_load_data(buf,plen,PSTR("<font color=\"#FF0000\"> ON</font>"));
		plen = ethernet_load_data(buf,plen,PSTR("<p><a href=\"./0\">Switch off</a><p>"));
	}
	// Kui LED põleb
	else
	{
		plen = ethernet_load_data(buf,plen,PSTR("<font color=\"#00FF00\"> OFF</font>"));
		plen = ethernet_load_data(buf,plen,PSTR("<p><a href=\"./1\">Switch on</a><p>"));
	}
 
	// Väljasta andmete lõpu aadress puhvris
	return(plen);
}
et/software/homelab/library/module/ethernet.1316071145.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0