Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Puttet koden inn i kodeblokker med syntax-highlighting og formaterte så godt jeg kunne, ingen garantier for at koden faktisk er korrekt eller gyldig, da en del informasjon hadde forsvunnet underveis i kopieringen fra gammel wiki...

...

Pål Driveklepp

Source code for ATmega16

<source lang=c> /*

Source for software for atmega16 running at 8MHz sensing optical flashes and notifying host via USART

  • /

...

Code Block
languagecpp
linenumberstrue
collapsetrue
/* Source for software for atmega16 running at 8MHz sensing optical flashes and notifying host via USART */
#include <avr/io.h>

...


#include <avr/signal.h>

...


#include <avr/interrupt.h>

...



unsigned char pulsecounter = 0;

...


unsigned int uptime = 0;

...


unsigned int downtime = 0;

...


unsigned char sufficientdowntime = 0;

...


unsigned char sendpointer = 0;

...



void flash(unsigned char pattern);

...


void notify(void);

...



int foo = 0;

...


void delay(unsigned int delayet){

...


	for (unsigned int i = 0; i < delayet; i++){

...


		foo++;

...


	}

...


}

...



/* AD-converter conversion complete interrupt routine */

...


ISR(ADC_vect){

...


	int sample = (ADCW>>2);

...


	if ((sample>32)&&(sufficientdowntime)){

...


		uptime++;

...


		downtime = 0;

...


	}

...


	else {

...


		if (uptime){

...


			if((uptime>5)&&(uptime<60)){ //led flash duration was measured to 16 samples

...


				notify();

...


				pulsecounter++;

...


				PORTC = pulsecounter&0x01;

...

}

}

uptime = 0;


			}
			uptime = 0;
			downtime++;

...


			if(downtime>60){

...


				sufficientdowntime = 1;

...

}

else{

sufficientdowntime = 0;

}

}


			}
			else{
				sufficientdowntime = 0;
			}
		}
	}
	delay(2500);

...


	ADCSRA |= (1<<ADSC); //AD start conversion

...


}

...



int main(void){

...


	//LEDS

...


	DDRC = 0xFF;

...


	//ADC

...


	DDRA = 0x00;

...


	//serialport

...


	DDRD = 0xFF;

...



	//ADC READS ADC0 (pin1 on PortA)

...


	ADMUX = (1<<REFS0)|(1<<REFS1);

...


	//adc prefrences

...


	ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);

...



	//setup USART

...


	UCSRB = (1<<TXEN);

...


	//8 databits see page 163 for writing to this register

...


	UCSRC = (1<<URSEL)|(3<<UCSZ0);//(1<<UCSZ1)|

...


	//baud-rate = 9600 (when mcu=8MHz)

...


	UBRRL = 51;

...



	flash(0x00);

...



	for (int i = 0; i < 256; i++){

...


		/* Wait for empty transmit buffer */

...


		while (

...

 !( UCSRA & (1<<UDRE)) )

...

;

...


		/* Put data into buffer, sends the data */

...


		UDR = i;

...

}


	}

	//ENABLES GLOBAL INTERRUPTS

...


	sei();

...


	while(1){

...


	}

...


}

...



/* flash arbitrary signal */

...


void flash(unsigned char pattern){

...


	for (int i = 0; i < 10; i++){

...


		PORTC = pattern;

...


		delay(60000);

...


		PORTC = 0xFF;

...


		delay(60000);

...


	}

...


}

...



/* send signal to host */

...


void notify(void){

...


	/* Wait for empty transmit buffer */

...


	while (

...

 !( UCSRA & (1<<UDRE)) )

...

;

...



	/* Put data into buffer, sends the data */

...


	UDR = 0x41 + sendpointer;

...



	/* Wait for empty transmit buffer */

...


	while (

...

 !( UCSRA & (1<<UDRE)) )

...

;

...


	/* send end of text */

...


	UDR = 0x0A;

...



	if(sendpointer<25){

...


		sendpointer++;

...


	}

...


	else{

...


		sendpointer = 0;

...


	}

...


}

...

 

Perl script for logging to mySQL

<source lang=perl>

Code Block
languageperl
linenumberstrue
collapsetrue
#!/usr/bin/perl

...



#Author: Bruce S. Garlock

...



#Date: 2002-09-11

...



#Requirements: Device::SerialPort 0.12 (from cpan)

...



#Version: 0.1

...



#Description: This perl script is for logging of data from a serial

...



#port, to a specified logfile. The logfile can then be parsed

...

  1. other programs for reporting purposes.
  1. This program was written for specifically logging Multitech's
  1. MTASR2-203 T1 Router. The router outputs text to the command

...

 with

#other programs for reporting purposes.
#This program was written for specifically logging Multitech's

#MTASR2-203 T1 Router. The router outputs text to the command

#port with 57.6k, 8-1-N, and No flow control.

...




use Device::SerialPort 0.12;

...




$LOGDIR = "/var/log"; # path to data file

...



$LOGFILE = "router.log"; # file name to output to

...



$PORT = "/dev/ttyS0"; # port to

...

  1. Serial Settings

...

 watch



#Serial Settings

$ob = Device::SerialPort->new ($PORT) || die "Can't Open $PORT: $!";

...



$ob->baudrate(9600) || die "failed setting baudrate";

...



$ob->parity("none") || die "failed setting parity";

...



$ob->databits(8) || die "failed setting databits";

...



$ob->handshake("none") || die "failed setting handshake";

...



$ob->write_settings || die "no settings";

...

  1. Send a string to the port



#Send a string to the port

$pass=$ob->write("AT");

...



sleep 1;

...




#open the logfile, and Port

...



open(LOG,">>${LOGDIR}/${LOGFILE}")

...



    ||die "can't open smdr file $LOGDIR/$LOGFILE for append: $SUB $!\n";

...



open(DEV, "<$PORT")

...



   || die "Cannot open $PORT: $_";



...

select(LOG), $| = 1; # set nonbufferd

...

 mode

#Loop forver, logging data to the log file

...




use DBI;

...



$username = '*****';$password = '******';$database =

...


 '******';$hostname = 'localhost';

...



$dbh = DBI->connect("dbi:mysql:database=$database;" .

...


 "host=$hostname;port=3306", $username, $password);


...

$watted = 0;

...



$SQL= "INSERT INTO ticktable VALUES (

...

 , NOW( ) , '26')";

...




while($_ = <DEV>){ # print input device to file

...



	if (($_ eq "X\n") || ($_ eq "Y\n") || ($_ eq "Z\n")){

...



		$watted = 1;

...



		print "reached end!";

...

}

else {



	}

	else {

		if($watted>0){

...



			$dbh = DBI->connect("dbi:mysql:database=$database;"

...

 .

				"host=$hostname;port=3306", $username, $password);

...



			$InsertRecord = $dbh->do($SQL);

...



			if ($InsertRecord){

...



				print "SQL success!";

...

}

else{

...



			}

			else{

				print "SQL failed!: $DBI::errstr";

...

}

$watted = 0;

}

}

print $_;

}

undef $ob;

...



			}

			$watted = 0;

		}

	}

	print $_;

}


undef $ob;