You are not logged in.
Dear visitor, welcome to Aqua Computer Forum. If this is your first visit here, please read the Help. It explains how this page works. You must be registered before you can use all the page's features. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
![]() |
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
#include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <stdlib.h> #include <stdio.h> #include "lcd.c" //taster3 pressed=bit_is_clear(PINB, PINB1) //taster2 pressed=bit_is_clear(PINB, PINB2) //taster1 pressed=bit_is_clear(PINB, PINB3) //led 2 an cbi(PORTC,PINC4); //led 2 aus sbi(PORTC,PINC4); //led 1 an cbi(PORTC,PINC5); //led 1 aus sbi(PORTC,PINC5); //ls an sbi(PORTC,PINC3); //ls aus cbi(PORTC,PINC3); SIGNAL (SIG_INPUT_CAPTURE1)//wenn mikrophon was bekommen { cli(); //interrupts aus cbi(PORTC,PINC3);//ls aus } int main( void ) { DDRC=0xff;//out DDRB=0x00;//in sbi(PORTC,PINC4);//led aus sbi(PORTC,PINC5);//led aus cbi(PORTC,PINC3);//ls aus lcd_init(LCD_DISP_ON); lcd_clrscr(); unsigned volatile int i,j; char act[20]; unsigned char l,h; unsigned int wert; for(;;) { if(bit_is_clear(PINB, PINB3))//taster 1 { lcd_clrscr(); outb(TCCR1A, 0); outb(TCCR1B, (1<<ICES1 | 1<<CS10));// rising edge for ICP, full speed outb(TIMSK, 1<<TICIE1);// ICP interrupt enable ICR1H=0; ICR1L=0; TCNT1H=0; TCNT1L=0; sbi(PORTC,PINC3);//ls an sei();//interrupt an for(i=0;i<65000;i++)for(j=0;j<10;j++)//pause, waerendessen interrupt { asm volatile("nop"); } l=ICR1L; h=ICR1H; wert=256*h+l; sprintf(act,"%u %u %u\n",l, h,wert); lcd_puts(act); } } return 0; } |
![]() |
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
#include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <stdlib.h> #include <stdio.h> #include "lcd.c" //taster3 pressed=bit_is_clear(PINB, PINB1) //taster2 pressed=bit_is_clear(PINB, PINB2) //taster1 pressed=bit_is_clear(PINB, PINB3) //led 2 an cbi(PORTC,PINC4); //led 2 aus sbi(PORTC,PINC4); //led 1 an cbi(PORTC,PINC5); //led 1 aus sbi(PORTC,PINC5); //ls an sbi(PORTC,PINC3); //ls aus cbi(PORTC,PINC3); unsigned volatile char l,h; unsigned volatile char first=0; SIGNAL (SIG_INPUT_CAPTURE1) { cli(); //interrupts aus if(first==0)//nur den ersten wert nehmen { first=1; l=ICR1L; h=ICR1H; } cbi(PORTC,PINC3);//ls aus } int main( void ) { DDRC=0xff;//out DDRB=0x00;//in sbi(PORTC,PINC4);//led aus sbi(PORTC,PINC5);//led aus cbi(PORTC,PINC3);//ls aus lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_puts("..."); unsigned volatile int i,j,mess; char act[20]; unsigned volatile int t=0; unsigned int wert=0; for(;;) { if(bit_is_clear(PINB, PINB3))//taster 1 { lcd_clrscr(); lcd_puts("Messe"); t=0; for(mess=0;mess<10;mess++) { lcd_puts("."); first=0; TCCR1A=0; TCCR1B=(1<<ICES1 | 1<<CS11);// rising edge for ICP,CPU/8 TIMSK=(1<<TICIE1);// ICP interrupt enable ICR1H=0; ICR1L=0; TCNT1H=0; TCNT1L=0; sbi(PORTC,PINC3);//ls an sei();//interrupt an for(i=0;i<65000;i++)for(j=0;j<10;j++)//pause, waerendessen interrupt { asm volatile("nop"); } wert=256*h+l; //sprintf(act,"%u %u %u\n",l, h,wert-550); t+=wert-364; //lcd_puts(act); } sprintf(act,"\n%u",t); lcd_puts(act); } } return 0; } |
-