[
  {
    "path": "README.md",
    "content": "# jammer\nVery simple 433MHz (EUROPE/ASIA) or 315MHz (USA) RF jammer for keyless cars and garage keys\n\n433/315 MHz key fob jammer based on ATTINY13A and FS1000A RF transmitting module. \nPIN B2 of ATTINY13A is connected to DATA IN of FS1000A transmitter board.\nBoth ATTINY13 and FS1000A are connected to 5V power supply.  You can attach several FS1000A to the same ATTINY13 for better results as well as modify FS1000A board by adding regulated capacitor 5pF-30pF for fine tuning jammed frequiencies (see videos below)\nPlease notice that SAW Oscillator used in FS1000A modules has 433.92MHz and has to be fine tuned to jamm particular frequency.\n\nThe source code for ATTINY13 is generating set of square waves - 50 sequences of 3 pulses each with different width to put enough noise on 433/315Mhz frequency. The device can effectively jam all wireless keys in 100 meter range f.ex. in underground garage.\n\nRemember to buy appropriate FS1000A version for your location (check frequency).\n\nTo see how it works look here : https://www.youtube.com/watch?v=C7fyKEQMs7c    an here - modified version  https://www.youtube.com/watch?v=F10x1WN3X4Q\n\n-------------------------------------------------------------------------------------------------------------------------------\n\nCOMPILATION ON LINUX PC :\n\nLink to video how to program the chip : https://www.youtube.com/watch?v=7klgyNzZ2TI\n\nThe script attached in repository ( \"compileattiny\" ) can be used to upload data to the chip if you have Linux machine with following packages : \"gcc-avr\", \"binutils-avr\" (or sometimes just \"binutils\"), \"avr-libc\", \"avrdude\" and optionally \"gdb-avr\"(debugger only if you really need it) . For example in Ubuntu download these packages using command : \"sudo apt-get install gcc-avr binutils-avr avr-libc gdb-avr avrdude\". After this is done you can run from directory you downloaded the github files appropriate compilation script by commands\n\n    \"sudo chmod +rx compileattiny\" and \"sudo ./compileattiny\"\n\n-------------------------------------------------------------------------------------------------------------------------------\n\nCOMPILATION ON WINDOWS PC :\n\nIf you have Windows 10 machine please follow this tutorial to download and install full AVR-GCC environment for Windows : http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/windows_avr.html with latest compiler from Microchip/Atmel.\n\nAfter it is done please use \"compileattiny.bat\"  for compilation inside directory where you have downloaded \"main.c\" file. You have to be logged as Windows Administrator to use avrdude software.\n\nPROGRAMMING THE ATTINY / ATMEGA / ARDUINO - connecting cables to the chip :\n\nTo upload program code to the chip using cheapest USBASP programmer (less than 2 USD on eBay/Aliexpress) look at this page : http://www.learningaboutelectronics.com/Articles/Program-AVR-chip-using-a-USBASP-with-10-pin-cable.php , because we are not using ARDUINO bootloader here (especially for chips like ATTINY)\n\nTo program Digispark - In ARDUINO IDE go to File/Preferences/Additional board manager URL and put this URL : https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json , then go to Menu Tools/Board and select Digistump AVR Boards / Digispark default 16.5 MHZ\n"
  },
  {
    "path": "compileattiny",
    "content": "rm *.elf\nrm *.o\nrm *.hex\navr-gcc -mmcu=attiny13 -std=gnu99 -Wall -Os -o main.elf main.c -w\navr-objcopy -j .text -j .data -O ihex main.elf main.hex\navr-size --mcu=attiny13 --format=avr main.elf\nsudo avrdude -c usbasp -p attiny13  -U flash:w:\"main.hex\":a\n\n"
  },
  {
    "path": "compileattiny.bat",
    "content": "del *.elf\r\ndel *.o\r\ndel *.hex\r\navr-gcc -mmcu=attiny13 -std=gnu99 -Wall -Os -o main.elf main.c -w\r\navr-objcopy -j .text -j .data -O ihex main.elf main.hex\r\navr-size --mcu=attiny13 --format=avr main.elf\r\navrdude -c usbasp -p attiny13  -U flash:w:\"main.hex\":a\r\n"
  },
  {
    "path": "jammer.ino",
    "content": "/*\r\n * 433 MHz key fob jammer based on ATTINY13A and FS1000A RF transmitting module\r\n * PIN B2 of ATTINY13A is connected to DATA IN of FS1000A transmitter board\r\n * both ATTINY13 and FS1000A are connected to 5V power supply\r\n * internal clock 9.6MHz with division by 8 = 1.2MHz effective clock\r\n * \r\n */\r\n\r\n#include <stdint.h>\r\n#include <avr/io.h>\r\n#include <util/delay.h>\r\n\r\n//0 is P0, 1 is P1, 2 is P2, etc. - unlike the analog inputs, for digital outputs the pin number matches.\r\n#define\tFS1000A_DATA_PIN    2\r\n\r\nint main(void)\r\n{\r\n        uint8_t widthsize;\r\n        uint8_t sequence;\r\n        uint8_t duration;\r\n\r\n        // SET OUTPUT PIN TO STEER FS1000A DATA IN\r\n         pinMode(FS1000A_DATA_PIN, OUTPUT);\r\n\r\n        digitalWrite(FS1000A_DATA_PIN, LOW);\r\n\r\n    /* neverending loop */\r\n    while (1) {\r\n\r\n        widthsize = 0;\r\n        sequence = 0;\r\n        duration = 0;\r\n\r\n        // generating SQUARE WAVE for FS1000A DATA INPUT\r\n        // we send 50 sequences of 3 pulses different width ( from 50us to 2.5 ms )\r\n        // to generate enough distortion on 433 MHz frequency\r\n\t// and get widest possible bandwith covered on spectrum\r\n        \r\n        for(sequence=1; sequence<50; sequence++)\r\n            {\r\n         \r\n        // only 10 pulses for each width\r\n            for(duration=1; duration<=3; duration++)\r\n                {  \r\n\r\n                   digitalWrite(FS1000A_DATA_PIN, HIGH);     // bring DATA PIN up\r\n\r\n                   // starting from 50usec width Pulses\r\n                   for(widthsize=1; widthsize<=(1+sequence); widthsize++)      _delay_us (50);\r\n\r\n                   digitalWrite(FS1000A_DATA_PIN, LOW);     // drag DATA PIN down\r\n\r\n                    // starting from 50usec Pulses\r\n                   for(widthsize=1; widthsize<=(1+sequence); widthsize++)     _delay_us (50);\r\n  \r\n                }; // end of DURATION loop\r\n\r\n            }; // end of SEQUENCE variable loop\r\n\r\n      }; // neverending loop \r\n\r\n};  // end of MAIN\r\n"
  },
  {
    "path": "main.c",
    "content": "/*\n * 433 MHz key fob jammer based on ATTINY13A and FS1000A RF transmitting module\n * PIN B2 of ATTINY13A is connected to DATA IN of FS1000A transmitter board\n * both ATTINY13 and FS1000A are connected to 5V power supply\n * internal clock 9.6MHz with division by 8 = 1.2MHz effective clock\n * \n */\n\n#include <stdint.h>\n#include <avr/io.h>\n#include <util/delay.h>\n\n#define\tFS1000A_DATA_HIGH()\t\t(PORTB |= _BV(FS1000A_DATA_PIN))\n#define\tFS1000A_DATA_LOW()\t\t(PORTB &= ~_BV(FS1000A_DATA_PIN))\n#define\tFS1000A_DATA_OUTPUT()\t\t(DDRB |= _BV(FS1000A_DATA_PIN))\n\n// Main Settings\n#define\tFS1000A_DATA_PIN\t\t\tPB2\n\nint main(void)\n{\n        uint8_t widthsize;\n        uint8_t sequence;\n        uint8_t duration;\n\n        // SET OUTPUT PIN TO STEER FS1000A DATA IN\n        FS1000A_DATA_OUTPUT();\n        FS1000A_DATA_LOW();\n\n\t/* neverending loop */\n    while (1) {\n\n        widthsize = 0;\n        sequence = 0;\n        duration = 0;\n\n        // generating SQUARE WAVE for FS1000A DATA INPUT\n        // we send 50 sequences of 3 pulses different width ( from 50us to 2.5 ms )\n        // to generate enough distortion on 433 MHz frequency\n\t// and get widest possible bandwith covered on spectrum\n        \n        for(sequence=1; sequence<50; sequence++)\n        {\n         \n        // only 10 pulses for each width\n        for(duration=1; duration<=3; duration++)\n          {  \n\n            FS1000A_DATA_HIGH();  // bring DATA PIN up\n\n            // starting from 50usec width Pulses\n           for(widthsize=1; widthsize<=(1+sequence); widthsize++)\n             {\n                // Generated by delay loop calculator\n                // at http://www.bretmulvey.com/avrdelay.html\n                //\n                // Delay 60 cycles\n                // 50us at 1.2 MHz\n                 asm volatile (\n                               \"    ldi  r18, 20\"\t\"\\n\"\n                               \"1:  dec  r18\"\t\"\\n\"\n                               \"    brne 1b\"\t\"\\n\"\n                               );\n\n              };  // end of widthsize for loop\n\n            FS1000A_DATA_LOW();  // drag DATA PIN down\n\n            // starting from 50usec Pulses\n           for(widthsize=1; widthsize<=(1+sequence); widthsize++)\n             {\n                // Generated by delay loop calculator\n                // at http://www.bretmulvey.com/avrdelay.html\n                //\n                // Delay 60 cycles\n                // 50us at 1.2 MHz\n                 asm volatile (\n                               \"    ldi  r18, 20\"\t\"\\n\"\n                               \"1:  dec  r18\"\t\"\\n\"\n                               \"    brne 1b\"\t\"\\n\"\n                               );\n\n\n              };  // end of WIDTHSIZE variable for loop\n\n           }; // end of DURATION loop\n\n         }; // end of SEQUENCE variable loop\n\n      }; // neverending loop \n\n};  // end of MAIN\n\n\n\n"
  },
  {
    "path": "main.hex",
    "content": ":1000000009C00EC00DC00CC00BC00AC009C008C09A\r\n:1000100007C006C011241FBECFE9CDBF02D025C046\r\n:10002000EFCFBA9AC29882E090E023E0C29A31E022\r\n:10003000432F50E0841795072CF024E12A95F1F71F\r\n:100040003F5FF6CFC29831E0432F50E08417950709\r\n:100050002CF024E12A95F1F73F5FF6CF215031F7DC\r\n:0E00600001968333910509F7DECFF894FFCFA8\r\n:00000001FF\r\n"
  }
]