116

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 ... ...


21

TL;DR : 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. ...


16

To make explicit the implicit parasitic capacitance on the pin.


15

I made up a small torch locator which used an ATtiny85 powered from a button-cell (CR2032). It looks like this: Other side: 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....


15

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 ...


14

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 ...


11

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 attachInterrupt(INT_RX, ...


10

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 ...


10

It's possible you have a non-fatal problem check power check connections reflash the Arduino bootloader If your Arduino has a socketed microcontroller you can try swapping it out with one that has the bootloader preloaded.


9

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. ...


9

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.


8

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 ...


8

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 ...


8

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; ...


8

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....


8

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.


7

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 ...


7

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 ...


7

The -AU and -PU suffixes on the part name indicate different packages. The former is used for the "32A" package (32-lead TQFP), and the latter is used for the "28P3" package (28-lead DIP). In plain English, the -AU is a surface-mount part, and the -PU is a breadboard-friendly chip. As far as functionality, there is virtually no difference. The 32A package ...


7

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, ...


7

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 ...


7

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 switches ...


7

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. ...


6

Short answer: Yes. After all, Arduinos are made by starting with an ATMega (or other AVR) IC. Longer answer: People - including myself - routinely build with a bare ATMega328p (or other MCU), programming them off-board on another system, or providing connections to allow programming them in place. Beyond that you only need the soldering skills for the chip ...


6

It's no different to working with Make and any other form of GCC. Just set your CC variable and CFLAGS variable accordingly and work as per normal. For instance, I just knocked this one up: CC=avr-gcc OBJCOPY=avr-objcopy CFLAGS=-Os -DF_CPU=16000000UL -mmcu=atmega328p PORT=/dev/ttyACM0 led.hex: led.elf ${OBJCOPY} -O ihex -R .eeprom led.elf led.hex ...


6

The code below achieves what you are asking: #include <avr/sleep.h> #include <avr/power.h> const byte AWAKE_LED = 8; const byte GREEN_LED = 9; const unsigned long WAIT_TIME = 5000; ISR (PCINT2_vect) { // handle pin change interrupt for D0 to D7 here } // end of PCINT2_vect void setup() { pinMode (GREEN_LED, OUTPUT); pinMode (AWAKE_LED,...


6

Simply because the Wiring system that Arduino stole was written for the Atmel chips. Arduino didn't "invent" the Arduino system - they just took an existing system called Wiring and adapted it slightly and branded it Arduino.


6

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 ...


6

The answers are in the notes: Although no output capacitor is need for stability, it does improve transient response. Required if regulator is locate an appreciable distance from power supply filter. So the values aren't critical to the operation, but you should have them there. Bigger capacitors give more energy to the regulator and more energy ...


6

The compiler has realized that your loop doesn't do anything useful and therefore optimized the whole thing away. Thus you are just timing how long it takes to do nothing. (You didn't get a result of zero, because calling micros will itself take time). BTW, the granularity of micros is 4 µs, so you won't get a reading of 1 or 2. The code actually probably ...


Only top voted, non community-wiki answers of a minimum length are eligible