It probably isn't bricked
I've got quite a few Arduinos, and over the last few years have only ever "bricked" one, and I think that was by zapping it with static electricity. Unfortunately that particular one had a SMD (surface mounted) processor chip, so it isn't easy to try swapping it with another chip.
Stay calm, and try the following steps ...
When writing an Interrupt Service Routine (ISR):
Keep it short
Don't use delay ()
Don't do serial prints
Make variables shared with the main code volatile
Variables shared with main code may need to be protected by "critical sections" (see below)
Don't try to turn interrupts off or on
What are interrupts?
Most processors have interrupts. ...
The simplest thing to do is set them to INPUT_PULLUP. If you want a purely hardware solution then you could connect them to GND through some resistors (10kΩ or whatever you have in that kind of order of magnitude will do).
You don't want to just tie them directly to ground, and you don't want to link them directly together - that could lead to short ...
At least - as I assume you upload your sketch via avrdude - please give more information about the upload failure (e.g. output of sketch uploader) so people here can help you better.
Additionally to the great answer of Nick Gammon, please search for exclamation marks in your sketch. If your sketch contains a string with more than or equal to 3 exclamation ...
I made up a small torch locator which used an ATtiny85 powered from a button-cell (CR2032). It looks like this:
That currently weighs 5.9g. The battery-holder weighs 1.6g so you could save that by making a more light-weight holder (perhaps a bit of plastic for insulation, and soldering directly to the battery). The chip socket weighs at least 0....
It's called a "Wired Or" arrangement.
The Arduino's RESET pin has a pullup resistor in it (10KΩ). That keeps the RESET pin normally HIGH. To invoke a reset that pin needs pulling low, and that is done from a number of sources:
The RESET button
The DTR pin (through a 100nF capacitor) of the USB interface chip
The 555 watchdog circuit above
The critical ...
A board we make does this.
The RX pin is wired to INT0
INT0 pin set to input or input pullup depending on how the RX line is driven
On sleep, INT0 low level interrupt is enabled
//Clear software flag for rx interrupt
rx_interrupt_flag = 0;
//Clear hardware flag for rx interrupt
EIFR = _BV(INTF0);
//Re-attach interrupt 0
The answer needs to have multiple parts:
Yes, in principle you can create a bootloader for any microcontroller, which acts like the Arduino's.
Please be aware that there are different bootloaders, not just the common STK500 compatible one. Each of these bootloaders implements a certain protocol to transfer the binary code to the target system.
The main difference is the bit before the -. That is, the 328 vs the 328P. The "P" there denotes "Picopower" which allows the chip to run at very low power consumptions.
Basically the P version is a more modern version of the non-P chip. There are probably other internal differences too but you will have to check the datasheets thoroughly for those.
The clock speed selected will affect both delay*() and millis()/micros() as well as the functions in <util/delay.h>, therefore you must use the target system's correct clock speed if you are using any of these functions. This can be easily done by editing boards.txt and copying an existing entry for the Uno and changing the value of the f_cpu parameter ...
It's possible you have a non-fatal problem
reflash the Arduino bootloader
If your Arduino has a socketed microcontroller you can try swapping it out with one that has the bootloader preloaded.
Officially, no. Practically, often but not always.
If I follow the datasheet to the the letter, this configuration should not work. BUT... After some test, it did work.
The data sheet does not say that it "should not" work, it says that it is that the part is not qualified for operation at 16 MHz below some voltage higher than you want to use. That ...
I would personnaly suggest an ATtiny 45/85. It is pretty much a small AVR with 5 GPIOs. You can program it with the Arduino IDE and use the Arduino as ISP. If you can design you own custom PCB, a SMD version of the ATtiny is small, low and compact. The total circuit to make the ATtiny function is also minimal.
Also, at a low clock speed (0-4MHz), you can ...
It's because these are unprogrammed chips, meaning they haven't had a bootloader programmed into them yet. Here is a tutorial for using your Arduino board to program a bootloader into them (there are many such tutorials available).
It only needs to be done once per chip so it will be worth your while to program all of them, once you have set up to do one. ...
The reset on an Arduino does not erase anything. It merely restarts execution of an already uploaded program. Also the AVR needs to be powered on for it to realize whether it has been reset.
Every time you power on an Arduino it automatically starts code execution from the beginning of the program in the flash memory.
Yes you can use ATMega328P without arduino board. I always use the IC without arduino. There are two ways of doing it.
You can use arduino board with the IC. Program the IC and then take it out and use it in your circuit. You will have to use 16MHZ Oscillator with capacitors.
If you don't have arduino board, you can use other programmers like USBasp to ...
You cannot use Serial inside an interrupt. Transmitting Serial relies on interrupts being available, and from inside an interrupt they aren't.
All Serial communication must be done from loop().
So you need to just count the switch toggles and check to see if that value has changed in your loop.
volatile uint32_t toggles = 0;
uint32_t old_toggles = 0;
One microsecond is only 16 CPU cycles.
The CPU needs 4 cycles to prepare itself for servicing the interrupt
(save the program counter, load the interrupt vector and clear the I bit
in SREG). The interrupt vector itself is a jmp instruction that takes
2 cycles. When the ISR is done, it executes the reti instruction
(return from interrupt) that takes 4 cycles....
This is a X->Y problem. Here is a solution for X:
Bit 3 of high fuse of the ATmega328p controls if EEPROM memory is preserved through the chip erase. You can change the high fuse setting in boards.txt. Restart the IDE to apply the new setting.
The fuses are written when you select the "burn bootloader" option in the Arduino IDE.
Besides breaking a pin while removing the IC from its socket, or static electricity during manipulation, I don't see what could fry the ATmega.
However, it is possible that the R2 ATmega has a different bootloader and that may be an issue.
If I was you I would just remove the ATmega from the R3 board and test it on a breadboard (don't need a lot of ...
The formula seems to be volt*5.9-6.6=mhz (valid between 1.8v and 4.5v), so at 3.3v, this would give 12.8mhz. Be aware that, if you are running at 12.8mhz, ANY drop below 3.3v MAY cause problems (and very hard to diagnose, too!) or you MAY get away with it.
However, Arduino Atmega328p chips have a "brown-out" detection set at 4.3v - any drop below that, the ...
You can remove an ATMEGA from an Arduino and use it in your own board, however when used on a typical Arduino board the chip will be fused for an external crystal as a clock source, rather than the (simpler but less accurate) internal clock.
You cannot change the clock source over ISP unless the clock source the chip is currently expecting is operational, ...
It can be done with one button, one resistor, one capacitor and one GPIO pin (in addition to the RESET pin):
simulate this circuit – Schematic created using CircuitLab
Pressing the button causes a LOW pulse on the RESET pin (in the exact same way as the USB interface does).
During your startup procedure you read the GPIO pin you have chosen. If it's ...
Certainly there is.
// disable ADC
ADCSRA = 0;
You can disable lots of internal modules like this:
power_all_disable(); // turn off all modules
See my page about power saving.
Majenko commented that turning off the ADC, while leaving the processor running was pointless. The real way to save battery power is to sleep, and it is possible to do ...
did somebody come across such case, or I'm the first in the world?
You are not the first. I recently got bitten by the very same issue.
However, unless you are close to an unusually strong radio source, I do
not think it has anything to do with electromagnetic interference. In my
experience, the internal pullup is perfectly reliable for reading
ATTINY's are designed to easily do this since they can wake from power down sleep mode by a pin change...
Basically you want to...
Connect a normally-open push button between an IO pin and ground.
Enable the pull-up on the IO.
Enable the pin change interrupt on the IO pin.
Enter "power down" sleep mode.
When the button is pushed, it ...
Using the 1.1V internal analog reference to measure a draining VCC
source by using a voltage divider on it
You could indeed use a voltage divider, and measure a scaled-down Vcc
against the internal 1.1 V reference. This is, however, not what
the code you posted is doing. It is instead measuring the internal
reference against Vcc, as stated in the comment ...