User Tools

Site Tools


microcontroller_annoyances

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
microcontroller_annoyances [2007/03/26 17:23]
ladyada
microcontroller_annoyances [2016/01/28 18:05] (current)
Line 4: Line 4:
  
 ====== AVRs ====== ====== AVRs ======
 +
  
 ===== Calculating Fuses ===== ===== Calculating Fuses =====
  
-WinAVR is great, better than AVR studio but there'​s no nice fuse selector like there is with WinAVR. Luckily there are two calculators+WinAVR is great, better than AVR studio but there'​s no nice fuse selector like there is with AVR studio. Luckily there are two calculators
   - [[http://​www.vonnieda.org/​AVRFuses/​ | AVRFuses]] is a simple fuse programmer for the AVR series of microcontrollers from Atmel. It is written in C#.NET with the intention of being cross platform compatible with Windows, OS X and Linux. It is written to mimic the look, feel and utility of the AVR Studio fuse programmer.   - [[http://​www.vonnieda.org/​AVRFuses/​ | AVRFuses]] is a simple fuse programmer for the AVR series of microcontrollers from Atmel. It is written in C#.NET with the intention of being cross platform compatible with Windows, OS X and Linux. It is written to mimic the look, feel and utility of the AVR Studio fuse programmer.
-  - [[http://palmavr.sourceforge.net/​cgi-bin/​fc.cgi | AVR Fuse Calculator]] is a webpage that does it all  +  - [[http://www.engbedded.com/​cgi-bin/​fc.cgi| AVR Fuse Calculator]] is a webpage that does it all 
  
 ===== Fixing fuses ===== ===== Fixing fuses =====
Line 21: Line 21:
  
 ''​Once it (finally) enters interactive mode (at its super-slow clock speed), enter "sck 1000" at the prompt. This slows down the serial communication greatly by setting the SCK signal period to 1000 microseconds. You can then erase the chip by entering "​e"​ and then set the programmer back to normal by entering "sck 10" (for a 10 microsecond period). Finally, enter "​quit"​ to exit interactive mode. Your chip should be back to normal at this point, which you can verify by programming it again-- hopefully without the same fuse bit settings.''​ ''​Once it (finally) enters interactive mode (at its super-slow clock speed), enter "sck 1000" at the prompt. This slows down the serial communication greatly by setting the SCK signal period to 1000 microseconds. You can then erase the chip by entering "​e"​ and then set the programmer back to normal by entering "sck 10" (for a 10 microsecond period). Finally, enter "​quit"​ to exit interactive mode. Your chip should be back to normal at this point, which you can verify by programming it again-- hopefully without the same fuse bit settings.''​
 +
 +You can also use the Atmel Dragon, or the Atmel STK500 and High-Voltage programming to reset the clock (or other) fuses.
  
 ===== A/D Pins ===== ===== A/D Pins =====
  
-Don't forget, the 2 extra A/D pins on the Atmega8, '88, '48, and '168 can't be used as general purpose I/O!+Don't forget, the 2 extra A/D pins on the QFP packages of Atmega8, '88, '48, and '168 can't be used as general purpose I/O!
  
 ===== Flash corruption from bootloaders ===== ===== Flash corruption from bootloaders =====
Line 56: Line 58:
 So make sure to always use BOD fuses! So make sure to always use BOD fuses!
  
 +===== EEPROM corruption from brownouts =====
 +Brownouts can cause the first location of the on-board EEPROM to be overwritten.
 +
 +''​In addition to the precautions elsewhere on this Wiki, consider not using the first EEPROM location.''​
 +
 +
 +===== Brownout fuses =====
 +
 +If the voltage on your chip goes too low it can start executing random instructions,​ or corrupt the flash/​eeprom (see above) so just always set the BOD unless there'​s some good reason not to!
  
 ===== Reset Pin ===== ===== Reset Pin =====
  
-Not really an annoyance, but just so you know: its not necessary to have a pull-up 10K (or whatever) resistor on the Reset pin, there'​s an internal one already!+Not really an annoyance, but just so you know: Unless your design is in an electrically noisy environment,​ it is not necessary to have a pull-up 10K (or whatever) resistor on the Reset pin, there'​s an internal one already! 
 + 
 +(Reference: see "DC characteristics"​ of any AVR datasheet for R_RST 20-100Kohm pull up resistor) 
 + 
 +For a solid design, follow [[http://​www.atmel.com/​dyn/​resources/​prod_documents/​doc1619.pdf|AVR app note AVR040]]'​s suggestions:​ "To achieve the same protection on Reset as on other I/O pins, an external diode should be connected from Reset to VCC. A normal small-signal diode will do //[ed. 1N914 or 1N4148]//. In addition, a pull-up resistor (10K typical) and a small filter capacitor (4.7 nF) should be connected as shown in Figure 4-7."​ 
 + 
 +Note: [[http://​www.atmel.com/​dyn/​resources/​prod_documents/​doc2521.pdf|AVR042]] has more info on reset pin design (as well as overall good advice for hardware design w/AVRs)
  
-(Reference: see "DC characteristics" ​of any AVR datasheet ​for R_RST 20-100Kohm pull up resisitor)+If you plan to use debugWIRE, the resistor to VCC should be 10K or larger, and there should not be a capacitor to ground. See page 4 of [[http://​www.atmel.com/​dyn/​resources/​prod_documents/​doc2521.pdf|AVR042]] ​for details.
  
 ===== AVCC ===== ===== AVCC =====
Line 71: Line 88:
 The attinys in the 8 SOIC package are 8 SOIC Wide, so programmer clips (which are almost always for 8SOIC Narrow) may not fit onto them without adjustments. ​ The attinys in the 8 SOIC package are 8 SOIC Wide, so programmer clips (which are almost always for 8SOIC Narrow) may not fit onto them without adjustments. ​
  
-===== DI/DO =====+===== Programming Pins =====
  
-Some chips and datasheets refer to DI/DO instead of MISO and MOSI +Some chips' ​datasheets ​may refer to DI/DO instead of the '​standard' ​MISO and MOSI programming pins
- +
-===== Programming Pins =====+
  
 Similarly, the atmega128 uses '​nonstandard'​ pins for programming:​ Similarly, the atmega128 uses '​nonstandard'​ pins for programming:​
- 
 //Check the datasheet under "SPI Serial Programming Pin Mapping"​ to discover you should use the following for programming: ​ //Check the datasheet under "SPI Serial Programming Pin Mapping"​ to discover you should use the following for programming: ​
 MOSI -> PE0, MISO -> PE1, SCK -> PB1 // --- //​[[http://​www.avrfreaks.net/​wiki/​index.php/​Documentation:​Things_That_Are_Broken|AVR Wiki]]// MOSI -> PE0, MISO -> PE1, SCK -> PB1 // --- //​[[http://​www.avrfreaks.net/​wiki/​index.php/​Documentation:​Things_That_Are_Broken|AVR Wiki]]//
  
 +===== SPI Master mode =====
 +On some (all?) AVRs, if the SPI slave select (SS_) pin is an input and low, then the SPI interface will go into slave mode, even if you have previously selected master mode.  Hope you weren'​t using that pin for something else.
  
 ====== PIC ====== ====== PIC ======
Line 89: Line 105:
 Don't forget: pin RA4 is almost always open collector: that means that it can only '​float'​ or sink current! Don't forget: pin RA4 is almost always open collector: that means that it can only '​float'​ or sink current!
  
 +===== A collection of PIC Gotchas =====
  
- +( Do we link to other sites? ) This page is excellent: [[http://​www.piclist.com/​techref/​microchip/​gotchas.htm|Microchip Technologies Gotchas]]
/home/ladyada/public_html/wiki/data/attic/microcontroller_annoyances.1174929792.txt.gz · Last modified: 2016/01/28 18:05 (external edit)