Rakett69: taimeriga pommi "demineerimine"
#1
vaatasin sellist saadet ETV2st, oleks huvitav näha millise skeemi ja millise koodiga oli taimeriga "pomm" mida osalised demineerisid.
Kas keegi on selle välja guugeldanud ? Ise ma ei leidnud.

Mul mingi kõhutunne ütleb et skeemis oli paar bugi ja asi tegi paugu ilma näppimatagi.
Vasta
#2
Kood:
#include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/wdt.h> #define set_bit sbi #define clear_bit cbi #define is_set(sfr, bit) (sfr & _BV(bit)) volatile uint16_t speed = 1 , safe = 0; volatile uint32_t cnt = 0 , t = 0 , Wait_Turbo = 0; static const uint8_t hex [] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; volatile uint8_t numbers[11] = { //HGFEDCBA 0b01000100,//0 --B-- 0b11110110,//1 | | 0b10001100,//2 H A 0b10010100,//3 | | 0b00110110,//4 --G-- 0b00010101,//5 | | 0b00000101,//6 E D 0b11110100,//7 | | 0b00000100,//8 --F-- C 0b00010100,//9 0b11111111 }; void delay( uint16_t len ){ len = len - 2; for ( ; len > 0 ; len--){ asm( "nop" ); asm( "nop" ); } } void delayms( uint8_t len ){ len--; for ( ; len > 0 ; len-- ){ delay( 999 ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); } delay( 998 ); } void doSPI( uint8_t data ){ sbi( DDRB , 5 ); sbi( DDRB , 3 ); SPCR = (1 << SPE) | (1 << MSTR) | 0b0011; sbi( SPSR , 2 ); SPDR = data; while( !(SPSR & (1 << SPIF)) ); } void WriteNum( uint32_t num , uint8_t digits ){ uint8_t i; cbi( PORTB , 2 ); for ( i = 0 ; i < digits ; i++ ) { if ( num || !i ) doSPI( numbers[num%10] ); else doSPI( numbers[10] ); num/=10; } sbi( PORTB , 2 ); } // Programmers Notepad - pomm.c SIGNAL ( SIG_OVERFLOW0 ) { //Siia j�utakse ca 30 korda sekundis if ( safe > 8 ) return; if ( t > speed ) t -= speed; else t = 0; if ( Wait_Turbo ) Wait_Turbo--; } uint8_t turbo = 0; void Turbo( uint8_t mode ){ if ( !(turbo & (1 << mode)) ) { turbo |= 1 << mode; speed *= 2; } } int main( void ){ CLKPR = 128; CLKPR = 0; wdt_reset(); wdt_enable( WDTO_500MS ); cbi( PRR , 2 ); DDRB = 0x45; DDRC = 0x20; PORTC = 0x0F; PORTD = 0xFF; sei (); delayms( 200 ); TCCR0B = 0b101; TIMSK0 = 1; WriteNum( 900 , 3 ); while ( is_set (PIND , 0 ) ) { PORTB ^= 1; delay( 100 ); wdt_reset(); } t=27466; Wait_Turbo = 20; for (;;){ if ( t > 0 ) PORTB ^= 1; //Kontrollsignaal pommile delay( 100 ); if ( (t / 20) % 2) set_bit( PORTB , 6 ); else clear_bit( PORTB , 6 ); if ( (t / 27) % 2) set_bit( PORTC , 5 ); else clear_bit( PORTC , 5 ); if ( safe < 100 ) safe++; if ( is_set( PIND , 7 ) || !is_set(PIND , 2 ) ) safe=0; if ( is_set( PIND , 1 ) ) Turbo( 1 ); if ( is_set( PIND , 3 ) ) Turbo( 2 ); if ( !is_set( PIND , 4 ) ) Turbo( 3 ); if ( is_set( PIND , 5 ) ) Turbo( 4 ); if ( is_set( PINC , 0 ) ) Turbo( 5 ); if ( is_set( PINC , 2 ) ) Turbo( 6 ); if ( is_set( PINC , 3 ) ) Turbo( 7 ); if ( !is_set( PIND , 0 ) ) { if ( !Wait_Turbo ) speed *= 2; //Tempo magnificooooo!!!! Wait_Turbo = 10; } WriteNum(t * 512 / 15625,3); wdt_reset(); } }
Vasta
#3
väga hää !

Kas skeemi ka leidub ?
Vasta
#4
Mingid screenshotid leiab sealt:

http://lemmy.planet.ee/sitt/Rakett69-kivi.png
http://lemmy.planet.ee/sitt/Rakett69-skeem.png

Vasta


Alamfoorumi hüpe:


Kasutaja, kes vaatavad seda teemat: 1 külali(st)ne