Ismételten egy vizuális effekt. Kivezérlésjelzőt már mindenki látott. Ám a valóságban kevés olyan van, amiben lenne látványos és hasznos funkció, pl. peak-hold.
Az áramkör nagyon egyszerű. Igazából, aki megépítette a hőmérőt annak szinte semmin nem kell módosítani.

Kattints a képre, a nagyobb mérethez!
Megépítve:

Majd, működés közben:
A videó megtekintéséhez Flash lejátszó szükséges!
A zene itt, egyik fejleszésemről szól, mp3. A kivezérlésjelzőhöz nem tartozik szervesen.
A kód igazából egy kis ötlet adó. Komolyabb animációk számolások, stb. Erre is van lehetőség, de ezeket most idő hiányában nem ismertetném.
- #include <avr/io.h> 
- #include <util/delay.h> 
- #include <math.h> 
-   
- #define MR            PB3 
- #define ST_CP            PB1 
- #define SH_CP            PB2 
- #define SD            PB0 
-   
- #define STROBE_SH_CP()    PORTB |=  (1<<SH_CP);PORTB &= ~(1<<SH_CP) 
- #define STROBE_ST_CP()    PORTB |=  (1<<ST_CP);PORTB &= ~(1<<ST_CP) 
- #define STROBE_MR()        PORTB &= ~(1<<MR);PORTB |= (1<<MR) 
- #define SD_HIGH()        PORTB |=  (1<<SD) 
- #define SD_LOW()        PORTB &= ~(1<<SD) 
-   
- unsigned short m_abs(signed short v1) { 
-     if(v1<0) return -v1; 
-     return v1; 
- } 
-   
- //------------------------------------- 
- void m_delay_10ms(unsigned short val) { 
- //------------------------------------- 
-     while(val--) _delay_ms(10); 
- } 
-   
- //------------------------------------- 
- void SendByte(unsigned char data) { 
- //------------------------------------- 
-     unsigned char i; 
-     i = 7; 
-     do { 
-         if(data & (1<<i)) SD_HIGH(); else SD_LOW(); 
-         STROBE_SH_CP(); 
-     } while (i--); 
- } 
-   
- //------------------------------------- 
- short GenerateBar(unsigned char value,unsigned char peak) { 
- //------------------------------------- 
-     unsigned short result; 
-     unsigned char i; 
-   
-     result = 0; 
-     for(i=0;i<16;i++) { 
-         if(value>i) result |= (1<<i); 
-     } 
-     result |= (1<<peak); 
-     return result; 
- } 
-   
- //------------------------------------- 
- void init() { 
- //------------------------------------- 
-     DDRB = (1<<MR)|(1<<ST_CP)|(1<<SH_CP)|(1<<SD);    //kimenetek 
-   
-     //Init ADC 
-     ADMUX = 0x00; 
-     ADCSRA =  (1<<ADEN) 
-            |  (0<<ADATE) 
-            |  (0<<ADSC) 
-            |  (1<<ADPS2) 
-            |  (1<<ADPS1) 
-            |  (1<<ADPS0) 
-            ; 
- } 
-   
- //------------------------------------- 
- unsigned short ADConvert(unsigned char channel) { 
- //------------------------------------- 
-     ADMUX &= ~(1<<MUX1|1<<MUX0); 
-     ADMUX |= channel; 
-     ADCSRA |= (1<<ADSC); 
-     while(ADCSRA & (1<<ADSC)); 
-     return ADC; 
- } 
-   
- //------------------------------------- 
- int main(void) { 
- //------------------------------------- 
- unsigned short data; 
- unsigned short adc, counter,counter_peak; 
- unsigned short peak_hold,adc_c; 
-     init(); 
-   
-     peak_hold = 0; 
-     adc_c = 0; 
-     counter = 0; 
-     counter_peak = 0; 
-     for(;;)  { 
-         if(counter) counter--; 
-         adc = ADConvert(2); 
-         if(adc>256) adc -= 256; 
-         adc >>= 5; 
-         if(adc>adc_c) adc_c = adc; 
-         if(adc>peak_hold) peak_hold = adc; 
-         if(counter==0) { 
-             counter = 100; 
-             data = GenerateBar(adc_c,peak_hold); 
-             STROBE_MR(); 
-             SendByte(data>>8); 
-             SendByte(data); 
-             STROBE_ST_CP(); 
-             if(adc_c)adc_c--; 
-         } 
-         if(counter_peak==0) { 
-             counter_peak = 800; 
-             if(peak_hold)peak_hold--; 
-         } 
-         if(counter_peak)counter_peak--; 
-     } 
- } 
 
	    
		Értékeléshez bejelentkezés szükséges!