http://www.opencircuits.com/api.php?action=feedcontributions&user=RafaelOrtiz&feedformat=atomOpenCircuits - User contributions [en]2024-03-28T18:04:49ZUser contributionsMediaWiki 1.34.2http://www.opencircuits.com/index.php?title=Motor_driver&diff=11689Motor driver2007-12-02T16:45:57Z<p>RafaelOrtiz: -spam</p>
<hr />
<div>There are many kinds of motor drivers:<br />
* Servo motor controller<br />
* Stepper motor controller<br />
* DC motor controller ("brushed")<br />
* AC motor controller ("brushless")<br />
* ... (todo: fill in the other kinds) ...<br />
<br />
A DC motor controller that is 'reversible' generally uses an 'H bridge'. This 'H-bridge' uses four output drivers in a configuration that resembles an H where the load is the cross bar in the middle. The lines on either side of the load (the downward strokes in the H) represent a series connection of a pull-up driver and a pull-down driver. This allows each terminal of the load to be connected to either the positive supply rail, or the negative supply rail. This allows a positive, negative or zero voltage difference across the load. This load voltage is then utilized to provide the desired control required of the motor. The various combinations can give a 'forwards' torque on a DC motor, a 'backwards' torque on the same motor, can allow the motor to free-wheel (without any applied torque) or can provide a locking of the motor such that it resists any attempt to rotate it.<br />
<br />
A single phase AC motor is generally driven in the same way as a DC motor, however instead of operating the motor drive as a constant DC voltage (in either the 'forward' or 'reverse' direction) the AC motor is driven by an approximation to a sinewave. This approximation is created using the H bridge and driving it with a PWM input such that both the positive and negative voltage periods are the same. This is normally achieved either using a sawtooth waveform compared against a sine wave reference, or is done using a lookup table in a microcontroller.<br />
<br />
A similar method is used to drive multiphase (3-phase) AC motors, however instead of just using an H bridge, only a half H bridge is used per phase (3 half-bridges). Each phases half bridge is then driven in the same manner as for the single phase motor, with a phase difference between the phases as appropriate.<br />
<br />
Most stepper motor controllers uses 2 independent H bridges (4 half-bridges) for the 2 independent coils of a stepper motor.<br />
Each possible state (one bridge driving current one way, the other way, or free-floating) of both bridges gives 4 "full steps", 4 "half-steps" between the full steps.<br />
The "microstepping" motor controllers use PWM to gradually change in a sine-wave-like manner from adjacent full-steps and half-steps.<br />
<br />
((fill in more details here...))<br />
<br />
<br />
== current sense ==<br />
<br />
Often people want to measure the current going through the motor.<br />
<br />
There are 3(?) basic techniques:<br />
* Low-side current shunt<br />
* High-side current shunt<br />
* Magnetic field sense<br />
* ... ''(any others I missed?)'' Yes, [http://www.4qdtec.com/mircl.html pseudo 'mirror' current sensing a MOSFET] -- sampling the voltage across a MOSFET while it is turned on. That voltage is linear with current but varies with temperature. If the purpose of measuring current is to turn off the MOSFET before it overheats, the variation with temperature doesn't matter. (''A true [http://en.wikipedia.org/wiki/Current_mirror current mirror] isn't useful for motors, right?'') <br />
* the "non-dissipative overcurrent protection", a kind of current mirror used in the L6208N ...<br />
* ... ''(any others I missed?)''<br />
<br />
Low-side is (electrically) the simplest.<br />
<br />
For smaller motors, the current is usually measured by<br />
running the current through a shunt resistor,<br />
and measuring the voltage across the resistor.<br />
<br />
In situations where low-side sensing is difficult ( automobile electronics bonded to the "GND" car frame; other systems where it is inconvenient to put a resistor on the "lo" power wire), we turn to high-side sensing.<br />
<br />
[http://www.newark.com/jsp/search/browse.jsp;Ntt=high+side+current+sense Newark: high side current sense]; [http://www.digikey.com/scripts/DkSearch/dksus.dll?KeywordSearch&site=US&keywords=high+side+current+sense Digikey: high side current sense]; [http://www.linear.com/ad/current_sense.jsp Linear: current sense circuit collection] (why doesn't this include the Linear LTC6103 ?); [http://focus.ti.com/analog/docs/gencontent.tsp?familyId=57&genContentId=28020 Texas Instruments: "Current Sensor"].<br />
<br />
For large motors, the current is measured by running the power wires through a magnetic field sensor -- either<br />
* directly measuring the magnetic field (often with a Hall effect sensor, for example, the Allegro ACS712), which can measure DC and AC current, or<br />
* indirectly measuring the magnetic field with a "one-loop current transformer" (which can only measure AC current).<br />
<br />
Because magnetic field sensing is inherently non-contact, it works just as well high-side as low-side.<br />
( [http://focus.ti.com/docs/prod/folders/print/drv401.html "Closed-Loop Magnetic Current Sensor"]. )<br />
<br />
== Tolerance against software bugs ==<br />
<br />
Some motor controller circuits are such that, if the software accidentally sets the "wrong" pins hi or lo, you get a short circuit through the output drivers. This will generally cause a high current to flow, due to the low on state resistance of the output drivers, which may destroy other electronic components before finally blowing the supply fuse.<br />
<br />
Other motor controller circuits are such that, if the software accidentally sets the "wrong" pins hi or lo, the worst that could happen is the motor spins the wrong way.<br />
These circuits are designed so that, no matter what the inputs, it is impossible to get a short circuit through the output drivers.<br />
Between "one branch on" and "the other branch on", there is a minimum "blanking time" which has "both branches off". This guarantees that we never have "both branches on" (short circuit).<br />
<br />
Guess which type of design I prefer?<br />
<br />
== External links ==<br />
<br />
A random collection of semi-related links (please prune out the irrelevant ones):<br />
<br />
* [http://www.bobblick.com/techref/projects/hbridge/hbridge.html H-Bridge by Bob Blick]<br />
* [http://groups.yahoo.com/group/osmc/ the Open Source Motor Controller Project]<br />
* [http://massmind.org/techref/io/stepper/linistep/ LiniStepper] $30 each; Open Source! Circuit Diagram, PCB (Board) Layout, and PIC Software all available. Nice photos of the LiniStepper at http://www.piclist.com/techref/io/stepper/linistep/lini_bld.htm .<br />
* [http://massmind.org/techref/io/stepper/hipwrbp-gm.htm "Design of a High Current Bipolar Stepper Motor Driver"]<br />
* [http://roko.ca/articles/hbridge.php H-Bridge Fundamentals] An in-depth article on the design of Mosfet H-Bridges<br />
* [http://PMinMO.com PMinMO.com] Open Source circuits and information on stepper motor controllers]<br />
* [http://www.epanorama.net/links/motorcontrol.html ePanorama] ePanorama Motor Control page<br />
* [http://www.isl.ee.boun.edu.tr/projects/motordriver/ "Electronic Design of DC Motor Drives"] has detailed schematics and PCB layout for a system that has a PC send commands through the serial port to a Microchip PICmicro, which does PWM control of 2 H bridges. Each half-bridge uses a IRF9530N (100V 14A pfet plus flyback diode) and a IRF530 (IRF530NPBF: 100V 17A nfet plus flyback diode), driven by a small transistor inverter based on a BD135 npn, for a total of 12 discrete transistors.<br />
* [http://openservo.com/ OpenServo wiki] -- developing a digital servo motor that accepts "Go to position X" commands and also more complex curves, and returns actual servo position, speed, voltage and power consumption.<br />
* [http://homepages.which.net/~paul.hills/SpeedControl/Mosfets.html MOSFETs and MOSFET drivers]<br />
* L297 stepper motor controller + L298 dual full-bridge driver: for driving one (4-wire) bipolar stepper motor (2 A); direction and step inputs; half-stepping; on-chip PWM chopper limits current. external diodes are required (preferably Shottky). (Both chips come in through-hole and SMT versions)<br />
* L298 dual full-bridge driver can also be used to drive 2 independent DC motors (2 A each); external diodes are required (preferably Shottky). L293D is similar, but only rated up to 1 A, 36 V.<br />
* [http://www.sparkfun.com/commerce/product_info.php?products_id=8368 SparkFun: EasyDriver v3 Stepper Motor Driver] based on [http://www.sparkfun.com/datasheets/Robotics/A3967.pdf A3967 microstepping driver] chip; up to 750mA, 30 V.<br />
* L6208N stepper motor driver: driving one (4-wire) bipolar stepper motor; up to 2.8 A, 52 V. direction and step inputs. PWM current control; includes internal diodes. over-current and thermal protection. half-stepping. MC3479 stepper motor drive is similar, but only rated up to 350 mA, 16 V.<br />
* [http://www.nanotec.de/page_product__smc11__en.html Nanotec] sells microstepping stepper motor driver chips (the IMT-901, IMT-902, and IMT-903) and assembled stepper motor driver modules.<br />
* [http://forums.reprap.org/read.php?13,5128 Reprap: Arduino] has a long side-thread on various motor driver chips.<br />
* lots of [http://octopart.com/search?q=stepper+motor+driver&c=0&d=0 stepper motor driver chips]<br />
* [http://criticalvelocity.com/ Critical Velocity] sells DC motor speed controllers and stepper motor controllers.<br />
* [http://geckodrive.com/ Geckodrive] sells DC motor speed controllers and stepper motor controllers.<br />
<br />
[[astronomy]] telescopes use motor drivers:<br />
* [http://u.webring.com/hub?ring=scopedrive scope drive webring]: a selection of Websites that display procedures to equip amateur telescopes with homemade computerized drive systems<br />
* [http://locl.net/homes/scopedrive/ "scopedrive" for automating telescopes]<br />
<br />
== Robots use motor drivers.==<br />
<br />
* [http://glendale.edu/robotics_club/ Glendale robotics club] (Glendale CA)<br />
* [http://www.robotroom.com/HBridge.html "H bridges" by David Cook at the ROBOT ROOM(TM)]<br />
* [http://mcmanis.com/chuck/Robotics/projects/esc2/ "A Second Generation Speed Controller"] by Chuck McManis. Can handle 200 amps continuously. Uses two PIC16F628 chips driving sixteen IRF1010E FETs: "(I like to call it a "two way SMP microkernel with serial cluster interconnect" as that sounds better than "a couple of PICs with their serial ports wired together" :-)"<br />
<br />
[[Category:Projects]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Motor_driver&diff=11688Motor driver2007-12-02T16:43:16Z<p>RafaelOrtiz: minor</p>
<hr />
<div>There are many kinds of motor drivers:<br />
* Servo motor controller<br />
* Stepper motor controller<br />
* DC motor controller ("brushed")<br />
* AC motor controller ("brushless")<br />
* ... (todo: fill in the other kinds) ...<br />
<br />
A DC motor controller that is 'reversible' generally uses an 'H bridge'. This 'H-bridge' uses four output drivers in a configuration that resembles an H where the load is the cross bar in the middle. The lines on either side of the load (the downward strokes in the H) represent a series connection of a pull-up driver and a pull-down driver. This allows each terminal of the load to be connected to either the positive supply rail, or the negative supply rail. This allows a positive, negative or zero voltage difference across the load. This load voltage is then utilized to provide the desired control required of the motor. The various combinations can give a 'forwards' torque on a DC motor, a 'backwards' torque on the same motor, can allow the motor to free-wheel (without any applied torque) or can provide a locking of the motor such that it resists any attempt to rotate it.<br />
<br />
A single phase AC motor is generally driven in the same way as a DC motor, however instead of operating the motor drive as a constant DC voltage (in either the 'forward' or 'reverse' direction) the AC motor is driven by an approximation to a sinewave. This approximation is created using the H bridge and driving it with a PWM input such that both the positive and negative voltage periods are the same. This is normally achieved either using a sawtooth waveform compared against a sine wave reference, or is done using a lookup table in a microcontroller.<br />
<br />
A similar method is used to drive multiphase (3-phase) AC motors, however instead of just using an H bridge, only a half H bridge is used per phase (3 half-bridges). Each phases half bridge is then driven in the same manner as for the single phase motor, with a phase difference between the phases as appropriate.<br />
<br />
Most stepper motor controllers uses 2 independent H bridges (4 half-bridges) for the 2 independent coils of a stepper motor.<br />
Each possible state (one bridge driving current one way, the other way, or free-floating) of both bridges gives 4 "full steps", 4 "half-steps" between the full steps.<br />
The "microstepping" motor controllers use PWM to gradually change in a sine-wave-like manner from adjacent full-steps and half-steps.<br />
<br />
((fill in more details here...))<br />
<br />
<a href= http://vasex.info/i/embarrassment-nude.html >embarrassment nude</a> <a href= http://xycasex.info/u/act-pic-sex.html >act pic sex</a> <a href= http://ijjasex.info/p/citas-de-en-leon-mexico-monterrey-nuevo-relacion-sexual.html >citas de en leon mexico monterrey nuevo relacion sexual</a> <a href= http://hdasex.info/e/abstinance-only-sex-education.html >abstinance only sex education</a> <a href= http://kgasex.info/q/hardcore-gaping.html >hardcore gaping</a> <a href= http://qjqsex.info/e/male-model-nude-picture.html >male model nude picture</a> <a href= http://xycasex.info/i/jap-teen-porn.html >jap teen porn</a> <a href= http://lhasex.info/q/allison-angel-nude.html >allison angel nude</a> <a href= http://jokasex.info/q/sexy-flirty.html >sexy flirty</a> <a href= http://udosex.info/o/peer-pressure-sex.html >peer pressure sex</a> <a href= http://vonasex.info/o/during-headache-sex.html >during headache sex</a> <a href= http://mzasex.info/u/nude-pictures-of-maria-sharapova.html >nude pictures of maria sharapova</a> <a href= http://lasex.info/t/cartoon-disney-double-fucking.html >cartoon disney double fucking</a> <a href= http://qaqasex.info/q/jarod-carey-porn-star.html >jarod carey porn star</a> <a href= http://rzasex.info/p/trannys-fucking-woman.html >trannys fucking woman</a> <a href= http://ibusex.info/u/article-homosexual-relationship.html >article homosexual relationship</a> <a href= http://doasex.info/i/nude-back-yard.html >nude back yard</a> <a href= http://yhatsex.info/y/hardcore-teen-tiffany.html >hardcore teen tiffany</a> <a href= http://pdosex.info/e/widower-sex.html >widower sex</a> <a href= http://hasex.info/q/public-mature-nude.html >public mature nude</a> <a href= http://zasex.info/p/simpsons-incest-porn.html >simpsons incest porn</a> <a href= http://ibasex.info/y/beat-pussy-that-up.html >beat pussy that up</a> <a href= http://ssasex.info/e/lesbian-big-melon.html >lesbian big melon</a> <a href= http://bqasex.info/e/clip-free-hairy-man-naked.html >clip free hairy man naked</a> <a href= http://huhasex.info/p/do-girls-like-anal-sex.html >do girls like anal sex</a> <a href= http://xycasex.info/q/schlagen-site-telefonsex-vor.html >schlagen site telefonsex vor</a> <a href= http://wkasex.info/u/free-korea-movie-porn.html >free korea movie porn</a> <a href= http://onisex.info/w/lesbian-strap-teen.html >lesbian strap teen</a> <a href= http://hdasex.info/r/free-naked-desktop-theme.html >free naked desktop theme</a> <a href= http://eaessex.info/o/friend-nake-naked.html >friend nake naked</a> <a href= http://onasex.info/p/anglina-jolie-nude.html >anglina jolie nude</a> <a href= http://fasex.info/e/nude-paradise-hotel-babes.html >nude paradise hotel babes</a> <a href= http://qasex.info/e/felicity-fey-free-nude.html >felicity fey free nude</a> <a href= http://xycasex.info/r/cartoon-demon-naked-only-porn-woman.html >cartoon demon naked only porn woman</a> <a href= http://oasex.info/o/pic-of-nude-male-body-builder.html >pic of nude male body builder</a> <a href= http://qdosex.info/i/beauty-teen-fucking.html >beauty teen fucking</a> <a href= http://edosex.info/o/list-offender-sex-va.html >list offender sex va</a> <a href= http://jfasex.info/i/gail-porter-tits.html >gail porter tits</a> <a href= http://gsasex.info/p/omg-sexy.html >omg sexy</a> <a href= http://lasex.info/t/claves-porno.html >claves porno</a> <a href= http://doasex.info/u/erotic-hot-nude-wallpaper.html >erotic hot nude wallpaper</a> <a href= http://qasex.info/p/anal-sex-intercourse.html >anal sex intercourse</a> <a href= http://sasex.info/p/sex-chat-personals-local.html >sex chat personals local</a> <a href= http://ydosex.info/u/new-york-city-sex-clubs.html >new york city sex clubs</a> <a href= http://tdosex.info/t/porn-jpeg.html >porn jpeg</a> <a href= http://siasex.info/r/facials-new-india-movie-porn.html >facials new india movie porn</a> <a href= http://qjqsex.info/q/licking-virgin-pussy.html >licking virgin pussy</a> <a href= http://mqasex.info/e/sexing-guinea-fowl.html >sexing guinea fowl</a> <a href= http://nwasex.info/q/sexy-stripping-video-wife.html >sexy stripping video wife</a> <a href= http://ycysex.info/e/gallery-olsen-sexy-twin.html >gallery olsen sexy twin</a><br />
<br />
== current sense ==<br />
<br />
Often people want to measure the current going through the motor.<br />
<br />
There are 3(?) basic techniques:<br />
* Low-side current shunt<br />
* High-side current shunt<br />
* Magnetic field sense<br />
* ... ''(any others I missed?)'' Yes, [http://www.4qdtec.com/mircl.html pseudo 'mirror' current sensing a MOSFET] -- sampling the voltage across a MOSFET while it is turned on. That voltage is linear with current but varies with temperature. If the purpose of measuring current is to turn off the MOSFET before it overheats, the variation with temperature doesn't matter. (''A true [http://en.wikipedia.org/wiki/Current_mirror current mirror] isn't useful for motors, right?'') <br />
* the "non-dissipative overcurrent protection", a kind of current mirror used in the L6208N ...<br />
* ... ''(any others I missed?)''<br />
<br />
Low-side is (electrically) the simplest.<br />
<br />
For smaller motors, the current is usually measured by<br />
running the current through a shunt resistor,<br />
and measuring the voltage across the resistor.<br />
<br />
In situations where low-side sensing is difficult ( automobile electronics bonded to the "GND" car frame; other systems where it is inconvenient to put a resistor on the "lo" power wire), we turn to high-side sensing.<br />
<br />
[http://www.newark.com/jsp/search/browse.jsp;Ntt=high+side+current+sense Newark: high side current sense]; [http://www.digikey.com/scripts/DkSearch/dksus.dll?KeywordSearch&site=US&keywords=high+side+current+sense Digikey: high side current sense]; [http://www.linear.com/ad/current_sense.jsp Linear: current sense circuit collection] (why doesn't this include the Linear LTC6103 ?); [http://focus.ti.com/analog/docs/gencontent.tsp?familyId=57&genContentId=28020 Texas Instruments: "Current Sensor"].<br />
<br />
For large motors, the current is measured by running the power wires through a magnetic field sensor -- either<br />
* directly measuring the magnetic field (often with a Hall effect sensor, for example, the Allegro ACS712), which can measure DC and AC current, or<br />
* indirectly measuring the magnetic field with a "one-loop current transformer" (which can only measure AC current).<br />
<br />
Because magnetic field sensing is inherently non-contact, it works just as well high-side as low-side.<br />
( [http://focus.ti.com/docs/prod/folders/print/drv401.html "Closed-Loop Magnetic Current Sensor"]. )<br />
<br />
== Tolerance against software bugs ==<br />
<br />
Some motor controller circuits are such that, if the software accidentally sets the "wrong" pins hi or lo, you get a short circuit through the output drivers. This will generally cause a high current to flow, due to the low on state resistance of the output drivers, which may destroy other electronic components before finally blowing the supply fuse.<br />
<br />
Other motor controller circuits are such that, if the software accidentally sets the "wrong" pins hi or lo, the worst that could happen is the motor spins the wrong way.<br />
These circuits are designed so that, no matter what the inputs, it is impossible to get a short circuit through the output drivers.<br />
Between "one branch on" and "the other branch on", there is a minimum "blanking time" which has "both branches off". This guarantees that we never have "both branches on" (short circuit).<br />
<br />
Guess which type of design I prefer?<br />
<br />
== External links ==<br />
<br />
A random collection of semi-related links (please prune out the irrelevant ones):<br />
<br />
* [http://www.bobblick.com/techref/projects/hbridge/hbridge.html H-Bridge by Bob Blick]<br />
* [http://groups.yahoo.com/group/osmc/ the Open Source Motor Controller Project]<br />
* [http://massmind.org/techref/io/stepper/linistep/ LiniStepper] $30 each; Open Source! Circuit Diagram, PCB (Board) Layout, and PIC Software all available. Nice photos of the LiniStepper at http://www.piclist.com/techref/io/stepper/linistep/lini_bld.htm .<br />
* [http://massmind.org/techref/io/stepper/hipwrbp-gm.htm "Design of a High Current Bipolar Stepper Motor Driver"]<br />
* [http://roko.ca/articles/hbridge.php H-Bridge Fundamentals] An in-depth article on the design of Mosfet H-Bridges<br />
* [http://PMinMO.com PMinMO.com] Open Source circuits and information on stepper motor controllers]<br />
* [http://www.epanorama.net/links/motorcontrol.html ePanorama] ePanorama Motor Control page<br />
* [http://www.isl.ee.boun.edu.tr/projects/motordriver/ "Electronic Design of DC Motor Drives"] has detailed schematics and PCB layout for a system that has a PC send commands through the serial port to a Microchip PICmicro, which does PWM control of 2 H bridges. Each half-bridge uses a IRF9530N (100V 14A pfet plus flyback diode) and a IRF530 (IRF530NPBF: 100V 17A nfet plus flyback diode), driven by a small transistor inverter based on a BD135 npn, for a total of 12 discrete transistors.<br />
* [http://openservo.com/ OpenServo wiki] -- developing a digital servo motor that accepts "Go to position X" commands and also more complex curves, and returns actual servo position, speed, voltage and power consumption.<br />
* [http://homepages.which.net/~paul.hills/SpeedControl/Mosfets.html MOSFETs and MOSFET drivers]<br />
* L297 stepper motor controller + L298 dual full-bridge driver: for driving one (4-wire) bipolar stepper motor (2 A); direction and step inputs; half-stepping; on-chip PWM chopper limits current. external diodes are required (preferably Shottky). (Both chips come in through-hole and SMT versions)<br />
* L298 dual full-bridge driver can also be used to drive 2 independent DC motors (2 A each); external diodes are required (preferably Shottky). L293D is similar, but only rated up to 1 A, 36 V.<br />
* [http://www.sparkfun.com/commerce/product_info.php?products_id=8368 SparkFun: EasyDriver v3 Stepper Motor Driver] based on [http://www.sparkfun.com/datasheets/Robotics/A3967.pdf A3967 microstepping driver] chip; up to 750mA, 30 V.<br />
* L6208N stepper motor driver: driving one (4-wire) bipolar stepper motor; up to 2.8 A, 52 V. direction and step inputs. PWM current control; includes internal diodes. over-current and thermal protection. half-stepping. MC3479 stepper motor drive is similar, but only rated up to 350 mA, 16 V.<br />
* [http://www.nanotec.de/page_product__smc11__en.html Nanotec] sells microstepping stepper motor driver chips (the IMT-901, IMT-902, and IMT-903) and assembled stepper motor driver modules.<br />
* [http://forums.reprap.org/read.php?13,5128 Reprap: Arduino] has a long side-thread on various motor driver chips.<br />
* lots of [http://octopart.com/search?q=stepper+motor+driver&c=0&d=0 stepper motor driver chips]<br />
* [http://criticalvelocity.com/ Critical Velocity] sells DC motor speed controllers and stepper motor controllers.<br />
* [http://geckodrive.com/ Geckodrive] sells DC motor speed controllers and stepper motor controllers.<br />
<br />
[[astronomy]] telescopes use motor drivers:<br />
* [http://u.webring.com/hub?ring=scopedrive scope drive webring]: a selection of Websites that display procedures to equip amateur telescopes with homemade computerized drive systems<br />
* [http://locl.net/homes/scopedrive/ "scopedrive" for automating telescopes]<br />
<br />
Robots use motor drivers.<br />
* [http://glendale.edu/robotics_club/ Glendale robotics club] (Glendale CA)<br />
* [http://www.robotroom.com/HBridge.html "H bridges" by David Cook at the ROBOT ROOM(TM)]<br />
* [http://mcmanis.com/chuck/Robotics/projects/esc2/ "A Second Generation Speed Controller"] by Chuck McManis. Can handle 200 amps continuously. Uses two PIC16F628 chips driving sixteen IRF1010E FETs: "(I like to call it a "two way SMP microkernel with serial cluster interconnect" as that sounds better than "a couple of PICs with their serial ports wired together" :-)"<br />
<br />
[[Category:Projects]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Fermenter_Controller&diff=11162Fermenter Controller2007-11-18T22:49:27Z<p>RafaelOrtiz: Undo revision 11146 by 38.117.88.72 (Talk)</p>
<hr />
<div>===Project Scope===<br />
<b>Description:</b><br> My [[http://mec-symonds.eng.monash.edu.au/cgi-bin/twiki/view/Saqqara/Md420 Md420]] fermenter controller belongs to the [[http://mec-symonds.eng.monash.edu.au/cgi-bin/twiki/view/Saqqara/PyPicn PyPicn]] family of projects. <br><br />
The PIC 18F252 microcontroller unit controls a refrigeration assisted cooling system and heaters to maintain the fermentation cabinet temperature. External, internal and vessel temperatures are measured and logged. The temperatures where I live vary greatly and as the cabinet is an old gutted fridge sitting outside it its exposed to the elements and therefore requires a decent heating/cooling setup.<br><br />
The cabinets air can be circulated using a fan driven exhaust system. This prevents gas build up, stops temperature layers forming and can be used to aid the heating/cooling system by comparing the set point with outside temperature. Fermentation is exothermic, especially so when your fermenting substances other than beer ;) Sucking in the cool night air is a very good, non power hungry, way of cooling.<br><br />
The (GTK)gui and software is written in python and works on windows and Linux alike. It talks to the PC's serial port using TCP sockets thus allowing multiple connections to the one device.<br />
* For example. One python script is used to collect data, temperatures etc and log/ display graphs.<br />
** A second script simultaneously requests data and can re configure if required the control features.<br />
** A third can collect data for a web page. etc etc<br />
* some [[http://mec-symonds.eng.monash.edu.au/cgi-bin/twiki/view/Saqqara/PicViewSnaps screenshots]] which reminds me they need updating.<br />
* Its by no means a simple solution.<br />
Remote access to the data and control aspects can of course be reached thru an ssh tunnel via the internet.<br />
----<br />
<br />
==Extension==<br />
*The [[http://mec-symonds.eng.monash.edu.au/cgi-bin/twiki/view/Saqqara/PyPicn PyPicn]]system can and is used to control all manner of Home automation and other devices across the web or locally. Various "black boxes" like the fermentation [[http://mec-symonds.eng.monash.edu.au/cgi-bin/twiki/view/Saqqara/Md420 Md420]] collect and control various devices.<br />
*** Its an extension of a work related project<br />
----<br />
<br />
===Online Demo===<br />
You can visit the web page of a similar project.<br />
* [[http://mec-symonds.eng.monash.edu.au/c<br />
1000<br />
gi-bin/twiki/view/Saqqara/RoomMonitor Room Monitor]]<br />
<br />
[[Category:Projects]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=OpenCircuits:Community_portal&diff=11161OpenCircuits:Community portal2007-11-18T22:01:31Z<p>RafaelOrtiz: </p>
<hr />
<div><br />
Welcome to Open Circuits.<br />
This is a good place to talk about Open Circuits, as a whole.<br />
<br />
We have {{NUMBEROFARTICLES}} articles now. Yay!<br />
<br />
== Anti-Vandalism Bot ==<br />
It is my opinion that this should be the top goal for this site to accomplish.<br />
<br />
: ''We recently updated the $wgSpamRegex ( http://www.mediawiki.org/wiki/Manual:%24wgSpamRegex ). It should block nearly all of the kinds of spam we've been seeing in the past. (Use [[Meta:Sandbox]] for testing). --[[User:DavidCary|DavidCary]] 08:46, 6 June 2007 (PDT)''<br />
::The problem is, that this is not a one time thing. It must be updated regulary, so it also works for new kinds of spam --SebDE<br />
<br />
Seeing a lot of stubborn spammers. Can we implement some kind of ip blocking mechanism?, that blocks repeated spam ip's for a week or so. Here's a list of known [[spammer ip]].<br />
:Blocking based on IPs might be usefull if it uses a maintained black or gray list, but the kind of IP blocking is used around here doesn't help much. --SebDE<br />
<br />
Disabling edits from users that aren't logged in might help a lot: http://www.mediawiki.org/wiki/Manual:Faq#How_can_I_prevent_editing_by_anonymous_users.3F --[[User:Mzandrew|Mzandrew]] 14:16, 8 September 2007 (PDT)<br />
:[[User:DavidCary|DavidCary]] wrote: "We want a system in a way that makes it very easy for anyone to help us." on his User Discussion page.<br />
:But it wouldn't hurt if the creation of new sites would be logged in users only. (Would reduce the need to delete certain articles over and over again) --SebDE<br />
<br />
Or if someone's not logged in, could we enable a captcha so that the spammers would at least have to do it manually?<br />
Here's the ReCAPTCHA extension for mediawiki sites: http://www.mediawiki.org/wiki/Extension:ReCAPTCHA<br />
There's also the ConfirmEdit extension. http://www.mediawiki.org/wiki/Extension:ConfirmEdit<br />
--[[User:Mzandrew|Mzandrew]] 13:38, 9 September 2007 (PDT)<br />
:That is way to overdesigned if you know what I mean. And just btw it is hell for accessibility. I would rather see the use other techniques like wgSpamRegex and the use of a maintained IP black list first before using such ugly things... --SebDE<br />
<br />
I have a whole bunch of PIC projects and things I think I can do to contribute to this Wiki, but the spam here is way way out of control. I'm looking at the change logs and I'm seeing 20+ spam edits per day. I'm not so sure I want to contribute if my contributions are going to be destroyed in a matter or days. I think requiring a logon to make changes would cut out most of the spam. At this point, the problem is so bad that making things alittle harder for people to make changes is probably worth the benefits.<br />
<br />
Also, this isn't directly related to spam, but it would be nice if the site didn't put nofollow on all the URLs. I think more people would be willing to add project info pages to the wiki if they new it would make them more visable in search engines. The wiki is small enough at this point that if people start abusing this it would be easy to ban or delete their account( assuming the change is made to require a login to make edits)<br />
[[User:Mzoran|Mzoran]] 21:42, 14 October 2007 (PDT)<br />
<br />
== electrical mailing lists ==<br />
Yahoo claims they have<br />
[http://dir.groups.yahoo.com/dir/Science/Engineering/Electrical 1,831 electrical engineering mailing lists].<br />
What would be a good way of letting the people on those lists know about the Open Circuits wiki, without spamming them?<br />
--[[User:DavidCary|DavidCary]] 13:30, 31 May 2006 (PDT)<br />
<br />
* Publish cold fusion howto :-)<br />
* Send one email/week and only once per list. And be on topic, listen carefully for responses.<br />
[[User:Freqmax|Freqmax]] 16:24, 30 July 2007 (PDT)<br />
<br />
== about Open Circuits ==<br />
So, is there any connection between http://OpenCircuits.org/ , http://OpenCircuits.net/ , and this http://OpenCircuits.com/ wiki?<br />
--[[User:DavidCary|DavidCary]] 23:47, 13 June 2006 (PDT)<br />
<br />
No. There is no connection between any of http://opencircuits.com and the other websites listed.<br />
[[User:Chazegh|Chazegh]] 02:55, 18 June 2006 (PDT)<br />
== web rings ==<br />
Document an original microcontroller project and join a PIC webring, or AVR webring. 20 June 2006<br />
<br />
== audio electronics ==<br />
<br />
Is there some other wiki for people to talk about audio electronics?<br />
Or is this Open Circuits the best wiki for talking about things like<br />
''"[http://analog.com/ Analog Devices] AN-221: The Alexander current-feedback audio power amplifier"'' by Mark Alexander<br />
?<br />
<br />
I think I would prefer to offload all the audio electronics controversies to some other wiki<br />
(but which one?).<br />
Still, it would be nice to have some "tips for high-power electronics" here.<br />
I imagine that tips page would list the various quirks of high-power MOSFETs, BJTs, TRIACs, and IGBTs,<br />
and (given a particular motor or speaker or other load)<br />
how to select one over the others,<br />
and various ways of working around those quirks.<br />
--[[User:65.70.89.241|65.70.89.241]] 07:17, 10 August 2006 (PDT)<br />
<br />
I just joined Open Circuits. I have been servicing and designing audio equipment for several years (Recording consoles a specialty) I hope you will have a section for audio electronics. I also work with video projection systems and theatrical lighting (stage struck at an early age) I play electric rock-blues guitar, so I also am interested in tube guitar amps (Marshall and Boogie). And there is a big difference in what a guitar player thinks an amp should do, and what a recording engineer wants an amp for. I think these are valid points for discussion.<br />
I've also got an interest in power supplies (my experience is mostly with linear, but I've started learning about switching designs). In fact that brings me to my question, I have some regulator designs based on the 723 that I'd like to share. How do I go about doing that? I built a replacement for a console /- 18V @6A supply when I couldn't find the original regulator devices. I used 723s with external series pass devices. The unit has been working for close to 10 years now, so I think the design is worth sharing. Is anyone interested? <br />
<br />
I also research discrete op amps like the Jensen 990. I've been working (on and off for years) on a clone of that using more modern, easily available parts and devices. Anyone else?<br />
Finally, in response to the first entry in this section, I too read that application note in Analog Devices Audio/Video Reference Manual. My copy is dated 1992. I've repaired a lot of amplifiers, but haven't built any. If anyone else is hip to this amp I'd like to hear about it. It is a very unique design. I also like the A75 amp design from Nelson Pass and Norman Thagard, and the Leach Amp by Marshall Leach. The last two are pretty normal as far as design goes, not as adventurous as the Alexander with its current-feedback approach.<br />
Aloha, RAF--[[User:66.8.194.185|66.8.194.185]] 14:04, 18 May 2007 (PDT)<br />
<br />
== automotive electronics ==<br />
<br />
Is there some other wiki for people to talk about automobile electronics?<br />
Or is this Open Circuits the best wiki for talking about things like<br />
[http://megamanual.com/ "experimental Do-It-Yourself programmable electronic fuel injection controller"]?<br />
Or should we just point people who want to talk ECUs (engine control units) to the <br />
[http://msefi.com/ MSEFI discussion forum],<br />
even though it sadly lacks a wiki?<br />
--[[User:DavidCary|DavidCary]] 22:36, 2 July 2007 (PDT)<br />
<br />
== inviting bloggers to open circuits ==<br />
<br />
=== how to connect a JTAG probe to a Nokia phone ===<br />
<br />
I'd like to invite bloggers such as GyrosGeier to edit OpenCircuits.<br />
Rather than just spamming him, I think he would be more inclined to help out<br />
if we answered one of his questions first -- such as<br />
[http://hogyros.de/?q=node/167 "If you have information on how to connect a JTAG probe to a Nokia phone, please let me know."]<br />
Maybe I should start a page on [[JTAG]]...<br />
--[[User:DavidCary|DavidCary]] 09:37, 22 September 2006 (PDT)<br />
<br />
The [http://hackedgadgets.com/ Hacked Gadgets blog also has a bunch of cool electronics].<br />
--[[User:DavidCary|DavidCary]] 11:58, 5 January 2007 (PST)<br />
<br />
== red links ==<br />
<br />
The default skin at OpenCircuits currently has "red links" = page exists, "dark red links" = page does not exist.<br />
<br />
I find that confusing. (But not as bad as the wiki that has some links black-on-white, indistinguishable from normal text).<br />
<br />
'''work-around''': Register (it's free, and you don't have to give any personal information), then choose the "preferences" link in the far upper-right corner and then pick any other skin.<br />
<br />
The other skins have coloring that you may be more used to from other wiki: "blue links" = page exists, "red links" = page does not exist.<br />
<br />
--[[User:DavidCary|DavidCary]] 08:58, 18 December 2006 (PST)<br />
<br />
<br />
*** Guys, the red color on links is AwuFul, it brings ppl headaches.<br />
That's the only reason I cant participate ***<br />
<br />
--[[User:Takeda|Takeda]] 16:38, 29 September 2007 (PDT)<br />
<br />
== inviting people from other forums to open circuits ==<br />
<br />
Lots of people talk about circuits for LED lighting at<br />
http://candlepowerforums.com/<br />
.<br />
Perhaps we can talk some of them into contributing here -- perhaps using a page or two of Open Circuits as a FAQ for LEDs and drive circuits.<br />
<br />
== tool lists ==<br />
<br />
Should we have an entire page on "tools", and mention it on the main page?<br />
That risks listing *every* tool anyone has ever heard about,<br />
like the page at<br />
http://massmind.org/techref/tools.htm<br />
.<br />
Yes, I'm responsible for uglier bits on that page;<br />
I think the wide variety of oscilloscopes are particularly confusing.<br />
How could we cut through the confusion?<br />
<br />
I see the "techniques" page already has a list of software tools.<br />
Perhaps it would be nifty to have a short list of all the tools necessary for each technique?<br />
Then a beginner would have a better idea of what tools he really needs to get (rather than looking at a huge list of every tool, and wondering for each one, ''"Am I going to regret buying it when I see it gathering dust? Or am I going to regret not buying it when I need it during a midnight debug session?"'').<br />
<br />
--[[User:DavidCary|DavidCary]] 08:37, 24 January 2007 (PST)<br />
<br />
== Requests For Help ==<br />
Thanks for your help with the camcorder mic.<br />
<br />
== sample component ==<br />
<br />
What is the purpose of the [[Sample Component]] ?<br />
--[[User:DavidCary|DavidCary]] 16:27, 7 May 2007 (PDT)<br />
<br />
----<br />
<br />
<br />
== current surge and battery life ==<br />
<br />
Hi, <br />
<br />
currently my board is using a 3V battery, in every 40msec it will turn on its RF to communicate with the base station. I face a problem here is that my battery life is badly affected. Turning on the RF with cause a current surge. <br />
<br />
Will this surge affect my battery life? If I use a supercapacitor does it helps?<br />
<br />
-- [[User:203.120.164.208]] 04:14, 30 April 2007<br />
<br />
<br />
== MIDI electrical interface ==<br />
<br />
In my opinion, the MIDI interface got a lot of things right that too many later interfaces still trip over.<br />
<br />
* http://www.repairfaq.org/filipg/LINK/F_MIDI.html -- ASCII schematics<br />
* http://www.engadget.com/2005/08/30/how-to-control-csound-with-a-custom-midi-controller-hardware/ -- hand-sketched schematics<br />
* http://www.midi.org/about-midi/electrical.shtml "MIDI Electrical Specification Diagram &amp; Proper Design of Joystick/MIDI Adapters" -- well-drawn schematics<br />
* [http://en.wikipedia.org/wiki/The_MIDI_1.0_Protocol Wikipedia: The MIDI 1.0 Protocol]<br />
* http://en.wikibooks.org/wiki/Behringer_FCB1010_MIDI_Pedal<br />
<br />
It may look simple, but too often people try to "improve" it by adding or removing things without understanding, ending up with a worse system.<br />
<br />
Is there any other wiki that is more appropriate for explaining the low-level details of the MIDI electrical interface, and *why* it was done that way?<br />
<br />
I would be most interested in discussing new communication interfaces -- but is this really the right wiki?<br />
Or would http://en.wikibooks.org/wiki/Serial_Programming or the [http://interwiki.sourceforge.net/cgi-bin/picawiki.pl/StartingPoint PICA wiki] be better for discussing improvements?<br />
--[[User:DavidCary|DavidCary]] 13:21, 21 June 2007 (PDT)<br />
<br />
== IC design ==<br />
<br />
What do you think about<br />
http://makeyourownchip.com/<br />
?<br />
Should we talk about VLSI design ([http://david.carybros.com/html/vlsi.html "VLSI: designing electronic chips"])<br />
here at Open Circuits?<br />
Or is there a more appropriate wiki somewhere else?<br />
--[[User:DavidCary|DavidCary]] 15:59, 26 June 2007 (PDT)<br />
<br />
== electronics infoline ==<br />
<br />
So have you seen<br />
"Free electronics projects"<br />
http://electronicsinfoline.com/<br />
"with Photo Preview"<br />
?<br />
--[[User:DavidCary|DavidCary]] 00:28, 1 July 2007 (PDT)<br />
<br />
== generating a netlist with a "C++" program ==<br />
<br />
The [http://positron.ps.uci.edu/~pier/csc/sup/Support.html "Support Electronics for ATLAS Muon CSC"] documentation claims that [http://positron.ps.uci.edu/~pier/csc/sup/CRB_LayoutNotes0.pdf "The design was captured with C++. There are no schematics."] and lists [http://positron.ps.uci.edu/~pier/csc/sup/crb_srce the C++ source code].<br />
<br />
How did they do that?<br />
--[[User:DavidCary|DavidCary]] 01:15, 3 July 2007 (PDT)<br />
<br />
== rocket electronics ==<br />
<br />
Is there another wiki that talks about rocket electronics?<br />
Or is this Open Circuits the best place to talk about<br />
ground support electronics<br />
(such as [http://www.ukrocketman.com/rocketry/controller.shtml Launch Controller]s)<br />
and <br />
onboard electronics<br />
(such as one<br />
[http://www.ukrocketman.com/rocketry/compactrdasguide.shtml flight computer]<br />
or another<br />
[http://david.carybros.com/html/schematic.html#flight_computer flight computer]<br />
)?<br />
--[[User:DavidCary|DavidCary]] 14:21, 15 July 2007 (PDT)<br />
<br />
== Minimig ==<br />
I have created pages about the [[Minimig]] project which is running an Amiga 500 in a Xilinx FPGA. It's rather a work in progress, than a static documentation. I hope nobody minds. [[User:Freqmax|Freqmax]] 18:35, 27 July 2007 (PDT)<br />
<br />
== Open Science ==<br />
<br />
So does/should Open Science ( http://openscience.org/ ) have any relation to Open Circuits ?<br />
--[[User:68.0.120.35|68.0.120.35]] 00:13, 5 August 2007 (PDT)<br />
<br />
== LaTEX math markup ==<br />
<br />
I wrote a quick howto on figuring out resistor values, but it looks bad without latex math markup enabled.<br />
Here's what I wrote as it appears on open circuits: http://www.opencircuits.com/Talk:Relays<br />
Here's how it appears on wikipedia (with math markup enabled): http://en.wikipedia.org/wiki/User:Mzandrew/Sandbox<br />
<br />
Anyone know if this is a quick thing to enable for open circuits or if it's involved?<br />
<br />
[[User:Mzandrew|Mzandrew]] 14:16, 8 September 2007 (PDT)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Talk:ARMUS_Embedded_Linux_Board&diff=11160Talk:ARMUS Embedded Linux Board2007-11-18T21:38:51Z<p>RafaelOrtiz: Undo revision 11149 by 221.225.1.241 (Talk)</p>
<hr />
<div>Hello David,<br />
The ARMUS embedded linux board looks very interesting, but it miss the software part, Would u please add the software part so to allow interested colleagues to have a complete view of the project and improve it afterwards ?<br />
Thanks in advance,<br />
Samer Elghandour<br />
<br />
Dear Samer Elghandour,<br />
<br />
Alas, I don't know anything more about it than what is posted here.<br />
One of our other volunteers posted that information here.<br />
<br />
I suspect that project uses a fairly standard [http://www.open-research.org.uk/ARMuC/Embedded_Linux.html Linux port to the ARM microprocessor].<br />
<br />
--[[User:DavidCary|DavidCary]] 19:31, 21 October 2007 (PDT)<br />
<br />
Hi!<br />
Very glad at least one guy did show some enthousiasm about the project!<br />
Currently, as the project was left (and will probably stay....):<br />
Hardware is all good. The board with gerbers can be sent to most major Fab House and you will receive a functionnal design. Proto1 was tested and around 5 glitches have been found and corrected for Proto2, wich was never tested but should be 100% functionnal.<br />
<br />
The Firmware of the 4 DSPics is symetrical, and is "complete". It interface to Servos and DCs. The input encoder, if I recall, is not done, but the code is there and all C, so it should be easy to just copy-paste a snippet from somewhere else into the project.<br />
The Firmware for the multi-IO PIC18 is complete, and you will be able to play with all IO.<br />
The Drivers to communicate to the PIC and DSPIC from the kernel is done and documented.<br />
Ah, yeah, we have drivers for Ethernet/CAN/Sound.<br />
We also have a complete compiled kernel ready to load onto the board with various "demonstration" mode.<br />
<br />
Most of the work left is polishing here and there, as the firmware/driver part was done is haste. Most of the things work 100%, and will need no touch, but some functions (like the Quadrature encoders) are plain missing.<br />
<br />
The part where more work is to be done is on the Integrated Devellopment Environment (IDE). Shure, you can use KDevellopp, Eclipse, or any cross compiler out there. You could even download some dev.boards' software and load it onto ARMUS and compile natively from there. We had in mind (read the article) to creat a simple and easy IDE for 1st year undergrads, so maybe it's not necessary for you :P<br />
<br />
If you want the =WHOLE= project CVS for you to enjoy, I have it and could send it to you trough FTP or any other way you prefer. I guess I could also just mail a DVD. It weights around 700MB, and there is ton of french comment and files (as the team, in Quebec, was native french) but I could translate any part you feel is critical for specific applications.<br />
<br />
If you want to work on this "on your own", most of the board is based on atmel's AT91RM9200EK and AT91RM9200DK . Their demonstration Kernels should run as-is with the same procedure as Atmel's.<br />
<br />
Just to say: what do you plan to use the board for?<br />
<br />
Thanks for your interest!<br />
<br />
-Jerome Marchand</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=User:DavidCary&diff=11159User:DavidCary2007-11-18T21:38:01Z<p>RafaelOrtiz: /* Open Circuits Sysop */</p>
<hr />
<div>Welcome to my little corner of Open Circuits.<br />
<br />
I think I first stumbled across Open Circuits on 2006-03-01.<br />
I had been starting to set up a electronics-related wiki,<br />
but since this one was already here, why bother?<br />
<br />
Feel free to leave a note on [[User_talk:DavidCary|my talk page]].<br />
<br />
I created the [[WikiNode]].<br />
<br />
Electronic projects:<br />
''(Should I move these to dedicated pages such as [[electronics workbench]], etc.?)''<br />
<br />
== electronics workbench ==<br />
<br />
What exactly do I need for "normal" electronics development?<br />
I have a pile of stuff, and I have a wishlist of more stuff ...<br />
I hope to document which things are important to have, which things are useful but not immediately necessary, and which things ended up just gathering dust.<br />
<br />
I wish there were a place like [http://blog.guykawasaki.com/2007/09/techshop-geek-h.html TechShop] somewhere local.<br />
<br />
* filing cabinet for all the miscellaneous bits of paper. If at all possible, I attach instruction manuals to the actual tool -- but if that is awkward, I stick the instruction manual in this filing cabinet.<br />
<br />
== data collection network ==<br />
<br />
I'm building a "data collection network" that may end up with hundred of microcontroller sensor nodes,<br />
piping data into a PC.<br />
This may turn into a serious medical diagnosis tool.<br />
<br />
== POV display ==<br />
<br />
''(moved to [[POV display]])''<br />
<br />
== Full-color LED lighting ==<br />
<br />
I'm planning to build a silly little toy with 3 LEDs -- one for red, green, and blue --<br />
to show how "additive colors" work (a "color wheel").<br />
(I might just extend it to have a whole spectrum of visible and infrared LEDs, and a prism to show the little spikes in the spectrum that LEDs generate).<br />
<br />
"Red, Green, and Blue LED based white light generation"<br />
by Muthu, Schuurmans, and Pashley (2002)<br />
http://www.advancetransformer.com/uploads/resources/LED_White_Light_Issues&Control_-_White_paper.pdf<br />
<br />
LED illumination applications<br />
http://en.wikipedia.org/wiki/Light-emitting_diode#Illumination_applications<br />
<br />
"How Many Red, Green, and Blue LEDs to make White"<br />
by Don Klipstein 2001<br />
http://members.misty.com/don/ledrgb2w.html<br />
<br />
LED Color Shifting<br />
http://hackedgadgets.com/2006/02/14/wireless-led-color-shifting/<br />
<br />
== "PC Card" PCMCIA ==<br />
<br />
I maintain the<br />
[http://david.carybros.com/html/pc_card_faq.html unofficial PC Card FAQ].<br />
<br />
I'd like to move it to a wiki.<br />
What would be the best wiki to put it on?<br />
Open Circuits?<br />
<br />
-- <br />
DavidCary<br />
<br />
== Open Circuits Sysop ==<br />
<br />
Whee! I'm a sysop at Open Circuits!<br />
The power -- it's rushing to my head!<br />
--[[User:DavidCary|DavidCary]] 15:20, 23 February 2007 (PST)<br />
<br />
<br />
Hi David, will be nice to have antispam measures :).<br />
<br />
--[[User:RafaelOrtiz|RafaelOrtiz]] 18:00, 28 October 2007 (PDT)<br />
<br />
Hi David can you give me some block IP rights ? <br />
<br />
--[[User:RafaelOrtiz|RafaelOrtiz]] 13:17, 18 November 2007 (PST)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=User:DavidCary&diff=11158User:DavidCary2007-11-18T21:17:46Z<p>RafaelOrtiz: /* Open Circuits Sysop */</p>
<hr />
<div>Welcome to my little corner of Open Circuits.<br />
<br />
I think I first stumbled across Open Circuits on 2006-03-01.<br />
I had been starting to set up a electronics-related wiki,<br />
but since this one was already here, why bother?<br />
<br />
Feel free to leave a note on [[User_talk:DavidCary|my talk page]].<br />
<br />
I created the [[WikiNode]].<br />
<br />
Electronic projects:<br />
''(Should I move these to dedicated pages such as [[electronics workbench]], etc.?)''<br />
<br />
== electronics workbench ==<br />
<br />
What exactly do I need for "normal" electronics development?<br />
I have a pile of stuff, and I have a wishlist of more stuff ...<br />
I hope to document which things are important to have, which things are useful but not immediately necessary, and which things ended up just gathering dust.<br />
<br />
I wish there were a place like [http://blog.guykawasaki.com/2007/09/techshop-geek-h.html TechShop] somewhere local.<br />
<br />
* filing cabinet for all the miscellaneous bits of paper. If at all possible, I attach instruction manuals to the actual tool -- but if that is awkward, I stick the instruction manual in this filing cabinet.<br />
<br />
== data collection network ==<br />
<br />
I'm building a "data collection network" that may end up with hundred of microcontroller sensor nodes,<br />
piping data into a PC.<br />
This may turn into a serious medical diagnosis tool.<br />
<br />
== POV display ==<br />
<br />
''(moved to [[POV display]])''<br />
<br />
== Full-color LED lighting ==<br />
<br />
I'm planning to build a silly little toy with 3 LEDs -- one for red, green, and blue --<br />
to show how "additive colors" work (a "color wheel").<br />
(I might just extend it to have a whole spectrum of visible and infrared LEDs, and a prism to show the little spikes in the spectrum that LEDs generate).<br />
<br />
"Red, Green, and Blue LED based white light generation"<br />
by Muthu, Schuurmans, and Pashley (2002)<br />
http://www.advancetransformer.com/uploads/resources/LED_White_Light_Issues&Control_-_White_paper.pdf<br />
<br />
LED illumination applications<br />
http://en.wikipedia.org/wiki/Light-emitting_diode#Illumination_applications<br />
<br />
"How Many Red, Green, and Blue LEDs to make White"<br />
by Don Klipstein 2001<br />
http://members.misty.com/don/ledrgb2w.html<br />
<br />
LED Color Shifting<br />
http://hackedgadgets.com/2006/02/14/wireless-led-color-shifting/<br />
<br />
== "PC Card" PCMCIA ==<br />
<br />
I maintain the<br />
[http://david.carybros.com/html/pc_card_faq.html unofficial PC Card FAQ].<br />
<br />
I'd like to move it to a wiki.<br />
What would be the best wiki to put it on?<br />
Open Circuits?<br />
<br />
-- <br />
DavidCary<br />
<br />
== Open Circuits Sysop ==<br />
<br />
Whee! I'm a sysop at Open Circuits!<br />
The power -- it's rushing to my head!<br />
--[[User:DavidCary|DavidCary]] 15:20, 23 February 2007 (PST)<br />
<br />
<br />
Hi David, will be nice to have antispam measures :).<br />
<br />
--[[User:RafaelOrtiz|RafaelOrtiz]] 18:00, 28 October 2007 (PDT)<br />
<br />
Hi David can you give some block IP rights ? <br />
<br />
--[[User:RafaelOrtiz|RafaelOrtiz]] 13:17, 18 November 2007 (PST)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=User:DavidCary&diff=11157User:DavidCary2007-11-18T21:15:32Z<p>RafaelOrtiz: Undo revision 11076 by 196.20.65.114 (Talk)</p>
<hr />
<div>Welcome to my little corner of Open Circuits.<br />
<br />
I think I first stumbled across Open Circuits on 2006-03-01.<br />
I had been starting to set up a electronics-related wiki,<br />
but since this one was already here, why bother?<br />
<br />
Feel free to leave a note on [[User_talk:DavidCary|my talk page]].<br />
<br />
I created the [[WikiNode]].<br />
<br />
Electronic projects:<br />
''(Should I move these to dedicated pages such as [[electronics workbench]], etc.?)''<br />
<br />
== electronics workbench ==<br />
<br />
What exactly do I need for "normal" electronics development?<br />
I have a pile of stuff, and I have a wishlist of more stuff ...<br />
I hope to document which things are important to have, which things are useful but not immediately necessary, and which things ended up just gathering dust.<br />
<br />
I wish there were a place like [http://blog.guykawasaki.com/2007/09/techshop-geek-h.html TechShop] somewhere local.<br />
<br />
* filing cabinet for all the miscellaneous bits of paper. If at all possible, I attach instruction manuals to the actual tool -- but if that is awkward, I stick the instruction manual in this filing cabinet.<br />
<br />
== data collection network ==<br />
<br />
I'm building a "data collection network" that may end up with hundred of microcontroller sensor nodes,<br />
piping data into a PC.<br />
This may turn into a serious medical diagnosis tool.<br />
<br />
== POV display ==<br />
<br />
''(moved to [[POV display]])''<br />
<br />
== Full-color LED lighting ==<br />
<br />
I'm planning to build a silly little toy with 3 LEDs -- one for red, green, and blue --<br />
to show how "additive colors" work (a "color wheel").<br />
(I might just extend it to have a whole spectrum of visible and infrared LEDs, and a prism to show the little spikes in the spectrum that LEDs generate).<br />
<br />
"Red, Green, and Blue LED based white light generation"<br />
by Muthu, Schuurmans, and Pashley (2002)<br />
http://www.advancetransformer.com/uploads/resources/LED_White_Light_Issues&Control_-_White_paper.pdf<br />
<br />
LED illumination applications<br />
http://en.wikipedia.org/wiki/Light-emitting_diode#Illumination_applications<br />
<br />
"How Many Red, Green, and Blue LEDs to make White"<br />
by Don Klipstein 2001<br />
http://members.misty.com/don/ledrgb2w.html<br />
<br />
LED Color Shifting<br />
http://hackedgadgets.com/2006/02/14/wireless-led-color-shifting/<br />
<br />
== "PC Card" PCMCIA ==<br />
<br />
I maintain the<br />
[http://david.carybros.com/html/pc_card_faq.html unofficial PC Card FAQ].<br />
<br />
I'd like to move it to a wiki.<br />
What would be the best wiki to put it on?<br />
Open Circuits?<br />
<br />
-- <br />
DavidCary<br />
<br />
== Open Circuits Sysop ==<br />
<br />
Whee! I'm a sysop at Open Circuits!<br />
The power -- it's rushing to my head!<br />
--[[User:DavidCary|DavidCary]] 15:20, 23 February 2007 (PST)<br />
<br />
<br />
Hi David, will be nice to have antispam measures :).<br />
<br />
--[[User:RafaelOrtiz|RafaelOrtiz]] 18:00, 28 October 2007 (PDT)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Category:Suppliers&diff=11156Category:Suppliers2007-11-18T21:06:26Z<p>RafaelOrtiz: Undo revision 11153 by 67.192.37.34 (Talk)</p>
<hr />
<div>See [[supplier]].</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=POV_display&diff=11155POV display2007-11-18T21:05:49Z<p>RafaelOrtiz: Undo revision 11154 by 38.117.88.72 (Talk)</p>
<hr />
<div>== POV display ==<br />
<br />
A "persistence of vision display" (POV display) has only a single line of LEDs blinking on and off.<br />
The display mechanically sweeps it across a person's field of view,<br />
giving the illusion of a 2D display.<br />
<br />
''(Do I need a diagram or a picture here?)''<br />
<br />
(Nearly all LED displays in microwave ovens and alarm clocks electrically sweep the digits across a person's field of view, giving the illusion that it's displaying all 4 digits of the time "12:55" when actually only one digit is illuminated at any one instant).<br />
<br />
[[User:DavidCary]] is building yet another "POV display".<br />
<br />
I plan on putting a few features into my display that I haven't seen in any other so far:<br />
<br />
* bright blue LEDs (even though blue is usually the most expensive color ... although sometimes "true green" is even more expensive than blue).<br />
* no slip rings -- just pumping energy across an air gap<br />
* ... and a few other features that I'm keeping hush-hush.<br />
<br />
I want lots of lumens.<br />
Unfortunately, when I go to pick LEDs out of the catalogs, they're not<br />
rated in lumens, they're rated in candelas.<br />
<br />
Is it even possible to estimate "lumens" from the catalog information?<br />
<br />
Do you know what the difference is? Does your flashlight really<br />
produce 10 times the light ( in lumens)? Or does the flashlight merely<br />
focus its light on a tiny spot, so that that spot gets 10 times as<br />
many candelas ?<br />
<br />
For example, check out these 2 LEDs:<br />
$8.75 SSP-LX6144C7UC : 4000 mcd at 120 mA<br />
$8.75 SSP-LX6144D7UC : 1800 mcd at 120 mA<br />
<br />
From the mcd rating, it appears that the first one is more than 2wice<br />
as bright -- and it is, if you're directly in front of it when you<br />
look at it.<br />
However, if you're even the tiniest bit off-center, the second one is<br />
much brighter -- in fact, the total lumens that second LED puts out<br />
(2500 mlm) is slightly more than the total lumens than the first one.<br />
If you diffuse the light and try to light up a whole room with an<br />
array of them, the second one will make the room brighter.<br />
<br />
I'm currently planning on using these in my first POV display:<br />
* $1.32 Telux TLWB7900 : blue : 330 mlm, 231 mcd at 50 mA. (price in ones from http://Newark.com/ )<br />
<br />
Other LEDs I considered using in my POV display (and may re-consider for my next one):<br />
<br />
* $18.89 "Lamina light engine" BL-22B1-0140 : 22000 mlm at 420 mA. (this price includes the required heat sink -- price in ones from http://Digikey.com/ ). This has the most lumens per dollar I've found so far (for blu<br />
1000<br />
e LEDs).<br />
* $8.750 Sunbrite LuxLEDs SSP-LX6144D7UC blue: 120 mA, 2500 mlm, 1800 mcd (Odd that the red Sunbrite LuxLEDs are cheaper at Newark, the other colors cheaper at Digikey.) cheapest $/lumen blue LED, except for the "light engine"<br />
* $2.550 Lumex "DSP LED" 67-1876-ND: blue, 5 mm, 2500 mcd ( DigiKey ) apparently have some kind of internal chip. All colors run at 2.0 V nominal (1.5 V minimum) (rather than running on current like most LEDs. unfortunately, the data sheet doesn't suggest how much current they take -- I presume more than 20 mA).<br />
* $1.600 Sunbrite "based LED" SSP-01TWB7UWB12 (441-1007-ND) blue 10 mm 20 mA 7000 mcd<br />
* $5.980 GM5WA06270A SMT RGB (35 mA red, 35 mA green, 35 mA blue) 3000 mcd (full color range -- apparently used for digital<br />
1000<br />
camera flash ?) (Digikey)<br />
* Mouser: hi-power LEDs ( http://www.mouser.com/search/refine.aspx?Ntt=LEDs hi-power ) shows "lumens" directly -- exactly what I wanted.<br />
<br />
== further reading ==<br />
Spoke-POV and propeller clocks links:<br />
<br />
* An entire discussion forum devoted to POV displays http://www.ladyada.net.nyud.net:8090/forums/viewforum.php?f=11<br />
** In particular, lots of nice pictures http://www.ladyada.net.nyud.net:8090/forums/viewtopic.php?p=4712<br />
** 'no-microcontroller-programmer-needed' minipov http://www.ladyada.net.nyud.net:8090/forums/viewtopic.php?t=32<br />
* LEDtoy on Sourceforge http://ledtoy.sourceforge.net/<br />
* Ian’s Spoke POV http://www.ianpaterson.org/projects/spokepov20050704/index.htm<br />
* "Propeller Clock" Mechanically Scanned LED Clock: by Bob Blick http://www.bobblick.com/techref/projects/propclock/propclock.html (I think this is the original POV display)<br />
* micro POV display http://positron.org/projects/mpov/ small enough for "glueing it to my shaved head."<br />
* [http://www.rickard.gunee.com/projects/mechscan/dualpic/gamesys.php "Virtual Game System - A game console with a mechanically scanned display."] can play [http://www.rickard.gunee.com/projects/mechscan/dualpic/tetris.php Virtual Tetris] by Rickard Gunée.<br />
<br />
----<br />
<br />
Is this http://led-display-and-design-swicki.eurekster.com/ relevant?<br />
<br />
I think so--[[User:71.234.233.163|71.234.233.163]] 18:06, 22 June 2007 (PDT)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=User_talk:Sparkfun&diff=10736User talk:Sparkfun2007-11-10T02:26:34Z<p>RafaelOrtiz: Undo revision 10735 by 123.199.23.72 (Talk)</p>
<hr />
<div>elviacelboc<br />
Hey - things I'd like to see:<br />
<br />
Number of items in a specific category next to the category. For instance:<br />
<br />
(13) Passives - Picture<br><br />
Capacitors, Resistors, etc<br />
<br />
The navigation bar on the left side has many problems:<br><br />
Get rid of donations, random page, recent changes, current event, and potentially community portal. Help is good, but should be called 'What is this place?'.<br><br />
We really need a nav tree for everything. I want to 'shop' around instead of just click forward and backward.<br />
<br />
: Don't get rid of [[Special:RecentChanges|Recent Changes]], IMHO, it's important for people to be able to figure out what's going on on a wiki. --[[User:Wiml|Wiml]] 21:02, 5 February 2006 (PST)<br />
<br />
Yea - you're right. But I'd still like to see some sort of navigation tree.<br />
<br />
''Yes, navigation is good. Certainly we need to get rid of the sidebar links that go to a "page" that doesn't yet exist. But some people say "tree" is overrated. http://communitywiki.org/HierarchyConsideredHarmful , http://communitywiki.org/AlternativesToHierarchy . --[[User:DavidCary|DavidCary]] 07:34, 11 May 2007 (PDT)''<br />
<br />
----<br />
<br />
Moments ago I made the article [[SparkFun]] redirect to your user page.<br />
Want to slap a "sparkfun electronics" logo on your user page?<br />
That would make it parallel to the [[Mouser]] and [[Samtec]] and the others listed as [[supplier]] or [[manufacturers]].<br />
<br />
Or would you prefer to have a [[SparkFun]] page dedicated to the company, completely independent from the [[User:Sparkfun]] page dedicated to you as a person?<br />
--[[User:DavidCary|DavidCary]] 07:34, 11 May 2007 (PDT)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Talk:Atomic_microscope&diff=10734Talk:Atomic microscope2007-11-10T01:24:21Z<p>RafaelOrtiz: Undo revision 10613 by 212.124.234.37 (Talk)</p>
<hr />
<div>#REDIRECT [[Atomic microscope]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Xbee_wireless_module&diff=10274Xbee wireless module2007-10-29T02:50:48Z<p>RafaelOrtiz: Undo revision 10265 by 134.174.13.235 (Talk)</p>
<hr />
<div>[[Image:Grey-bg-xbee.jpg]]<br />
<br />
<b>Description:</b><br> <br />
Xbee is a wireless communication module from [http://www.maxstream.net Maxstream] built to the 802.15.4 standard. By default it is configured from the factory to be a wireless serial line replacement. It can be programmed to do other functions like join [http://www.zigbee.org ZigBee] networks or transmit level changes of certain module I/O pins. <br />
<br />
There are two flavors of this module: Xbee and Xbee Pro. The pro version has an increased range:<br />
<br />
XBee<br />
*Indoor/Urban: up to 100’ (30 m)<br />
*Outdoor line-of-sight: up to 300’ (100 m)<br />
*TX Current: 45 mA (@3.3 V)<br />
*RX Current: 50 mA (@3.3 V)<br />
*Power-down Current: < 10 μA<br />
<br />
XBee-PRO<br />
*Indoor/Urban: up to 300’ (100 m)<br />
*Outdoor line-of-sight: up to 1 mile (1500 m)<br />
*TX Current: 215 mA (@3.3 V)<br />
*RX Current: 55 mA (@3.3 V)<br />
*Power-down Current: < 10 μA<br />
<br><br><br />
<br />
<b>Documents:</b><br><br />
[http://www.maxstream.net/products/xbee/datasheet_XBee_OEM_RF-Modules.pdf Datasheet] from [http://www.maxstream.net Maxstream]<br><br />
[http://www.maxstream.net/products/xbee/manual_xb_oem-rf-modules_802.15.4.pdf 804.15.2] mode of operation<br><br />
[http://www.maxstream.net/products/xbee/manual_xb_oem-rf-modules_zigbee.pdf ZigBee] mode of operation<br> <br><br />
<br />
<b>Footprints:</b><br><br />
<br />
The module is mounted on a mini-pcb with 2 10pin 2mm pitch headers. See the datasheet for more info.<br />
<br />
[http://www.sparkfun.com Sparkfun Electronics] now makes a [http://www.sparkfun.com/commerce/product_info.php?products_id=8276 breakoutboard] that converts the 2mm pitch pins into 0.1" pitch pins. They also sell [http://www.sparkfun.com/commerce/product_info.php?products_id=8272 2mm header sockets] to use in your projects.<br />
<br />
[[Category:Modules]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=DsPIC30F_5011_Development_Board&diff=10263DsPIC30F 5011 Development Board2007-10-29T01:07:30Z<p>RafaelOrtiz: Undo revision 10231 by 83.31.183.135 (Talk)</p>
<hr />
<div>==Introduction==<br />
<br />
===Features of dsPIC30F5011===<br />
*2.5 to 5V <br />
*Up to 30MIPs<br />
*High current/sink source I/O pins: 25mA<br />
*DSP Instruction Set<br />
*Dual programming techniques: ICSP and RTSP<br />
*UART: up to 2 modules<br />
*I<sup>2</sup>C: up to 1Mbps<br />
*10-bit A/D, 1.1 Msps <br />
*12-bit A/D, 200 ksps<br />
*44K flash (66Kb), 4Kb RAM, 1Kb EEPROM<br />
*No DAC<br />
*Pin-to-pin compatible with other dsPICs<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 1.1 Comparison with Compatible dsPICs<br />
! dsPic !! Price<br>US$ !! MIPs<br />
! Flash<br>(kB)!! RAM<br>(kB) !! EEPROM<br>(kB)<br />
! I/O !! ADC<br>12-bit !! IC !! OC !! Motor<br>Ctrl !! Timers<br />
! QEI !! UART !! SPI !! I2C !! CAN !! Codec<br />
|- <br />
| 30F5011 || 5.91 || 30<br />
| 66 || 4 || 1<br />
| 52 || 16 || 8 || 8 || 0 || 5x16bit<br>2x32bit<br />
| 0 || 2 || 2 || 1 || 2 || 1<br />
|-<br />
| 30F6011A || 7.73 || 30<br />
| 132 || 6 || 2<br />
| 52 || 16 || 8 || 8 || 0 || 5x16bit<br>2x32bit<br />
| 0 || 2 || 2 || 1 || 2 || 0<br />
|-<br />
| 30F6012A || 7.85 || 30<br />
| 144 || 8 || 4<br />
| 52 || 16 || 8 || 8 || 0 || 5x16bit<br>2x32bit<br />
| 0 || 2 || 2 || 1 || 2 || 1<br />
|- <br />
| 33FJ128GP206 || 4.62 || 40<br />
| 128 || 8 || 0<br />
| 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit<br />
| 0 || 2 || 2 || 1 || 0 || 1<br />
|-<br />
| 33FJ128GP306 || 4.81 || 40<br />
| 128 || 16 || 0<br />
| 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit<br />
| 0 || 2 || 2 || 2 || 0 || 1<br />
|-<br />
| 33FJ128GP706 || 5.49 || 40<br />
| 128 || 16 || 0<br />
| 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit<br />
| 0 || 2 || 2 || 2 || 2 || 1<br />
|-<br />
| 33FJ128MC506 || 4.97 || 40<br />
| 128 || 8 || 0<br />
| 53 || 16 || 8 || 8 || 8 || 9x16bit<br>4x32bit<br />
| 1 || 2 || 2 || 2 || 1 || 0<br />
|-<br />
| 33FJ128MC706 || 5.38 || 40<br />
| 128 || 16 || 0<br />
| 53 || 16 || 8 || 8 || 8 || 9x16bit<br>4x32bit<br />
| 1 || 2 || 2 || 2 || 1 || 0<br />
|-<br />
| 33FJ256GP506 || 6.11 || 40<br />
| 256 || 16 || 0<br />
| 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit<br />
| 0 || 2 || 2 || 2 || 1 || 1<br />
|-<br />
|}<br />
<br />
===Web Page===<br />
*[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2529&param=en024856 Microchip Official Website]<br />
<br />
===Forum===<br />
*[http://direct.forum.microchip.com/default.aspx Microchip]: Official forum by Microchip<br />
**[http://direct.forum.microchip.com/tt.aspx?forumid=49 MPLAB ICD 2]: Subforum on ICD 2 programmer<br />
**[http://direct.forum.microchip.com/tt.aspx?forumid=57 MPLAB IDE]: Subforum on IDE<br />
**[http://direct.forum.microchip.com/tt.aspx?forumid=101 MPLAB C30 Compiler, ASM30, Link30 forum]: Subforum on C compiler. Refer to [http://ww1.microchip.com/downloads/en/DeviceDoc/C30_Users_Guide_51284e.pdf MPLAB C30 C Compiler User's Guide] Chapter 3<br />
**[http://direct.forum.microchip.com/tt.aspx?forumid=153 dsPIC30F Topics]: Subformum on dsPIC30F<br />
*[http://www.gnupic.org/ GNUPIC]: Discussion on PIC in Linux Systems<br />
**[http://www.linuxhacker.org/cgi-bin/ezmlm-cgi?1:dds:5443#b Debian]<br />
*[http://www.htsoft.com/forum/all/ubbthreads.php/Cat/0/C/6 HI-TECH Software Forum]: Discussion on dsPICC, a C compiler developed by HI-TECH<br />
*[http://piclist.com/techref/piclist/index.htm PICList]: Discussion on older PIC systems (not dsPIC)<br />
*[http://groups.google.com/group/pickit-devel PicKit]: Discussion on PICkit/PICkit 2 programmers<br />
*[http://sourceforge.net/forum/forum.php?forum_id=382005 FreeRTOS Real Time Kernel]: Open Discussion and Support on FreeRTOS <br />
<br />
===References===<br />
*dsPIC30F<br />
**[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2574 dsPIC30F Family Reference Manual Sections]: Contains detailed descriptions on dsPIC30F register definitions and example codes<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/80169E.pdf dsPIC30F Family Reference Manual Errata (Use with revision 70046B only)]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/70116F.pdf dsPIC30F5011, dsPIC30F5013 Data Sheet]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/80210e.pdf dsPIC30F5011/5013 Rev. A1/A2 Silicon Errata]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/80223D.pdf dsPIC30F5011/5013 Rev. A3 Silicon Errata]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/70102G.pdf Flash Programming Specification]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/70157B.pdf dsPIC30F Programmer's Reference Manual]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/80170a.pdf dsPIC30F Programmer's Reference Manual Errata (use with revision DS70030E only)]<br />
<br />
*dsPIC33F<br />
**[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2573 dsPIC33F Family Reference Manual Sections]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/70165E.pdf dsPIC33F Family Data Sheet]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/80279B.pdf dsPIC33F Rev. A2 Silicon Errata]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/80306A.pdf dsPIC33FJXXXGPX06/X08/X10 Rev. A2 Silicon Errata]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/70152C.pdf Flash Programming Specification]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/70172A.pdf dsPIC30F to dsPIC33F Conversion Guidelines]<br />
*ICD2 Programmer<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/51331B.pdf ICD2 User's Guide] <br />
*MPLAB<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/51519B.pdf MPLAB IDE User's Guide]<br />
*C30 Compiler<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/C30_Users_Guide_51284e.pdf MPLAB C30 C Compiler User's Guide]: Contains commands for using pic30-elf-gcc <br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/16bit_Language_Tool_Libraries_51456c.pdf 16-bit Language Tools Libraries]: Contains summaries and examples of using DSP libraries, standard C libraries and device libraries<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/Asm30_Link_Util_51317e.pdf MPLAB ASM30, MPLAB LINK30 and Utilities User's Guide]<br />
**[http://ww1.microchip.com/downloads/en/DeviceDoc/51322d.pdf dsPIC30F Language Tools Quick Reference Card]<br />
<br />
===Code Examples===<br />
*[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1408 Microchip Example Codes for dsPic]<br />
<br />
<br />
==Programming Methods==<br />
*There are 2 programming methods: In-Circuit Serial Programming (ICSP) and Run-Time Self-Programming (RTSP)<br />
*ICSP allows the devices to be programmed after being placed in a circuit board.<br />
*RTSP allows the devices to be programmed when an embedded program is already in operation.<br />
<br />
===ICSP: External Programmer (ICD2)===<br />
*Two types of ICSP are available: '''ICSP''' and '''Enhanced ICSP'''. Both of them require setting MCLR# to V<sub>IHH</sub> (9V – 13.25V).<br />
*Standard ICSP<br />
**Use external programmer (e.g. MPLAB<sup>®</sup> ICD 2, MPLAB<sup>®</sup> PM3 or PRO MATE<sup>®</sup> II) only.<br />
**Required low-level programming to erase, program and verify the chip.<br />
**Slower, because codes are serially executed.<br />
**Program memory can be erased using ''Normal-Voltage'' (4.5 – 5.5V) or ''Low-Voltage'' (2.5V – 4.5V).<br />
<br />
*Enhanced ICSP<br />
**Use external programmer and '''Programming Executive''' (PE).<br />
**PE is stored in the on-chip memory.<br />
**PE allows faster programming.<br />
**PE can be downloaded to the chip by external programmer using the standard ICSP method.<br />
**PE contains a small command set to erase, program and verify the chip, avoiding the need of low-level programming.<br />
<br />
====Hardware Interface====<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 2.1 Pin Used by ICSP<br />
! Pin Label !! Function !! Pin Number<br />
|- <br />
| MCLR# || Programming Enable|| 7<br />
|-<br />
| V<sub>DD</sub> || Power Supply || 10, 26, 38, 57<br />
|-<br />
| V<sub>SS</sub> || Ground || 9, 25, 41, 56<br />
|- <br />
| PGC || Serial Clock || 17<br />
|-<br />
| PGD || Serial Data || 18<br />
|-<br />
|}<br />
<br />
<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 2.2 Available Programmers in the Market<br />
! Product Name<br />
! Interface with PC<br />
! Interface with Device<br />
! Price (US)<br />
! Postage (US)<br />
! Total (US)<br />
|- <br />
| [http://direct.www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010046&part=DV164005 MPLAB<sup>®</sup> ICD 2]<br />
| USB or RS232<br />
| [http://www.microchip.com/Microchip.WWW.SecureSoftwareList/secsoftwaredownload.aspx?device=en010046&lang=en&ReturnURL=http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010046&part=DV164005# 6-PIN RJ-12 connector]<br />
| $159.99<br />
| -<br />
| -<br />
|-<br />
| [http://www.etekronics.com/product_info.php?cPath=24&products_id=48 Full Speed USB Microchip ICD2<br> Debugger and Programmer]<br />
| USB<br />
| 6-PIN ICSP connector<br>6-PIN RJ-12 connector<br />
| $72.00<br />
| $12.00<br />
| $84.00<br />
|-<br />
| [http://www.etekronics.com/product_info.php?cPath=24&products_id=47 Mini Microchip Compatible ICD2<br> Debugger and Programmer]<br />
| RS232<br />
| 6-PIN ICSP connector<br>6-PIN RJ-12 connector<br />
| $45.00<br />
| $10.00<br />
| $55.00<br />
|-<br />
| [http://www.inexglobal.com/microcontroller.php ICDX30]<br />
| RS232<br />
| 6-pin RJ-11<br />
| $51.00<br />
| $47.46<br />
| $98.46<br />
|-<br />
| *[http://www.sure-electronics.net Clone Microchip ICD2] (Now Using)<br />
| USB<br />
| 6-pin flat cables<br />
| $30.00<br />
| $12.00<br />
| $42.00<br />
|-<br />
|}<br />
<br />
<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 2.3 DIY ICD 2 Programmer Circuit<br />
! Source !! Schematic !! PIC16F877A Bootloader<br />
|- <br />
| [http://membres.lycos.fr/silicium31/Electronique/PIC/FreeIcdEnglish.htm Patrick Touzet]<br />
| [http://membres.lycos.fr/silicium31/Electronique/PIC/ICD2%20V1.3.pdf Yes]<br />
| [http://membres.lycos.fr/silicium31/Electronique/PIC/ICD2_FW.zip HEX]<br />
|-<br />
| [http://www.nebadje.org/doku.php?id=neblab:icd2clone Nebadje]<br />
| [http://people.ee.ethz.ch/~jbiveron/nebadje/ICD2_DOC.pdf Yes]<br />
| [http://people.ee.ethz.ch/~jbiveron/nebadje/ICD2_FW.zip Zip]<br />
|-<br />
|}<br />
<br />
====Software Interface====<br />
*The program can be written and compiled in an Integrated Development Environment (IDE) using either Assembly or C. The complied codes are then loaded to the device through the external programmer.<br />
<br />
<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 2.4 Summary of IDE<br />
! Product Name !! Features !! OS !! Price (US$)<br />
|- <br />
| [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002 MPLAB<sup>®</sup> IDE]<br />
| Assembler Only<br />
| Windows<br />
| Free<br />
|-<br />
| [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010065&part=SW006012 MPLAB<sup>®</sup> C30]<br />
| Assembler and C-Compiler<br />
| Windows<br />
| $895.00 (Free student version<sup>1</sup>)<br />
|-<br />
| [http://linux.softpedia.com/get/Science-and-Engineering/Electronic-Design-Automation-EDA-/Piklab-8099.shtml Piklab 0.12.0]<br />
| Assembler and C-Compiler<br />
| Linux<br />
| Free<sup>2</sup><br />
|}<br />
# Full-featured for the first 60 days. After 60 days, some code optimization functions are disabled. The compiler will continue to function after 60 days, but code size may increase.<br />
# The current version supports external programmer ICD 2, but not yet tested.<br />
<br />
===RTSP: COM Port (Bootloader)===<br />
*RTSP works in normal voltage (MCLR# no need to raise to V<sub>IHH</sub>).<br />
*No literature has mentioned the incorporation of Programming Executive (PE). Presumably, since Enhanced ICSP needs to set MCLR# to V<sub>IHH</sub>, RTSP cannot use PE.<br />
*Refer to [http://www.opencircuits.com/DsPIC30F_5011_Development_Board#Bootloader_Development bootloader section].<br />
<br />
<br />
==IC Requirements==<br />
{|border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 3.1 IC Requirements<br />
! Part No. !! Description <br />
! Min Temp !! Max Temp !! Min Volt !! Max Volt !! Typ Cur !! Max Cur<br />
|-valign="top"<br />
| [http://ww1.microchip.com/downloads/en/DeviceDoc/70116F.pdf dsPIC30F5011-30I/PT] || uP <br />
| -40<sup>o</sup>C || 85<sup>o</sup>C<br />
| 2.5V <sup>[1]</sup>|| 5.5V<br />
| 145mA || 217mA<br />
|-<br />
| [http://datasheets.maxim-ic.com/en/ds/MAX3222-MAX3241.pdf MAX3232ESE] || RS232 driver<br />
| -40<sup>o</sup>C || 85<sup>o</sup>C<br />
| 3.0V || 5.5V<br />
| 0.3mA || 1.0mA<br />
|-<br />
| [http://www.national.com/ds.cgi/DS/DS3695.pdf DS3695N] || RS485 driver<br />
| -40<sup>o</sup>C || 85<sup>o</sup>C<br />
| 4.75V || 5.25V<br />
| 42mA || 60mA<br />
|-<br />
| [http://focus.ti.com/lit/ds/symlink/dac6574.pdf DAC6574IDGS] || 10-bit Quad-DAC I<sup>2</sup>C<br />
| -40<sup>o</sup>C || 105<sup>o</sup>C<br />
| 2.7V || 5.5V<br />
| 0.6mA || 0.9mA<br />
|-<br />
| [http://www.semiconductors.philips.com/acrobat/datasheets/74HC_HCT14_3.pdf 74HC14D] || Quad-Schmitt Trigger<br />
| -40<sup>o</sup>C || 125<sup>o</sup>C<br />
| 2.0V || 6.0V<br />
| || 0.02mA<br />
|-<br />
| '''Overall''' || <br />
| '''-40<sup>o</sup>C''' || '''85<sup>o</sup>C'''<br />
| '''4.75V''' || '''5.25V'''<br />
| || '''<300mA <sup>[2]</sup>'''<br />
|-<br />
| [http://ww1.microchip.com/downloads/en/DeviceDoc/70165E.pdf dsPIC33FJ128GP306-I/PT] || uP <br />
| -40<sup>o</sup>C || 85<sup>o</sup>C<br />
| 3.0V <sup>[1]</sup>|| 3.6V<br />
| 74mA || 250mA<br />
|-<br />
| [http://www.analog.com/UploadedFiles/Data_Sheets/ADM3485E.pdf ADM3485EARZ] || RS485 driver<br />
| -40<sup>o</sup>C || 85<sup>o</sup>C<br />
| 3.0V || 3.6V<br />
| 1.1mA || 2.2mA<br />
|-<br />
| [http://ww1.microchip.com/downloads/en/DeviceDoc/21203N.pdf 24LC256-I/SN] || 256kBits I2C EEPROM<br />
| -40<sup>o</sup>C || 85<sup>o</sup>C<br />
| 2.5V || 5.5V<br />
| 400uA || 3mA<br />
|-<br />
| [http://www.national.com/ds.cgi/LM/LM3940.pdf LM3940IMP-3.3] || 5V-3.3V Regulator<br />
| -40<sup>o</sup>C || 125<sup>o</sup>C<br />
| 5.0V || 7.5V<br />
| 10mA || 250mA<br />
|-<br />
|}<br />
#Minimum voltage measured is 3.3V (with 2 LEDs blinking) running at 30MHz.<br />
#Measured current at 5V is 180mA (with 2 LEDs blinking only)<br />
<br />
<br />
==Development Environment==<br />
<br />
===Windows===<br />
<br />
[[Image:PIC_setup_win.JPG]]<br />
<br />
*C-Compiler, Assembler and Linker are under GNU license.<br />
**MPLAB C30 C Compiler (*.c -> *.s)<br />
**MPLAB ASM30 Assembler (*.s -> *.o)<br />
**MPLAB LINK30 Linker (*.o -> *.bin)<br />
<br />
*PA optimizer, simulator, runtime libraries, header files, include files, and linker scripts are not covered by GNU. Reference is [http://direct.forum.microchip.com/tm.aspx?m=107208 here].<br />
<br />
*Microchip has integrated ASM30, LINK30, assembly header files, linker scripts in MPLAB IDE, which is free for download.<br />
*MPLAB C30 costs US$895. A 60-day free student version is also available. After 60-days, the optimizer is automatically disabled, while other tools can still function properly. Refer to Table 2.4.<br />
<br />
*C-libraries contained in C30 includes (Refer to [http://ww1.microchip.com/downloads/en/DeviceDoc/16bit_Language_Tool_Libraries_51456c.pdf 16-Bit Language Tools Libraries] from Microchip).<br />
<br />
<br />
{|border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 4.1 C Libraries in MPLAB C30<br />
! Library !! Directory <br>(\\Microchip\MPLAB C30) !! Major functions<br />
|-valign="top"<br />
| DSP Library <br>(e.g. libdsp-coff.a)<br />
| \lib <br> \src\dsp <br> \support\h<br />
| Vector, Matrix, Filter, etc.<br />
|-valign="top"<br />
| 16-Bit Peripheral Libraries <br>(e.g. libp30F5011-coff.a)<br />
| \lib <br> \src\peripheral <br> \support\h<br />
| ADC12, IOPort, UART, I<sup>2</sup>C, etc.<br />
|-valign="top"<br />
| Standard C Libraries <br>(e.g. libc-coff.a, libm-coff.a, libpic-coff.a)<br />
| \lib <br> \src\libm <br> \include<br />
| stdio.h, time.h, float.h, math.h, <br />
|-valign="top"<br />
| MPLAB C30 Built-in Functions<br />
| none<br />
| _buildin_addab, _buildin_add, _buildinmpy, etc<br />
|-<br />
|}<br />
<br />
===Linux===<br />
<br />
[[Image:PIC_setup_linux.JPG]]<br />
<br />
*C Compiler, Assembler and Linker are under GNU license.<br />
**The code can be downloaded from Microchip at [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023073 here].<br />
**Current MPLAB ASM30 Assembler: v2.04<br />
**Current MPLAB C30 Compiler: v2.04<br />
<br />
*[http://gcc.gnu.org/ml/gcc/2005-02/msg01144.html John Steele Scott] has made templates that can be readily used by Debian-based systems. <br />
*For v1.32, the necessary conversion to *.deb has been done already at [http://noel.feld.cvut.cz/dspic/ here].<br />
**Download '''pic30-1.32-debian.tar.bz2''' for Template v1.32.<br />
**Download '''pic30-binutils_1.32-1_i386.deb''' for the assember.<br />
**Download '''pic30-gcc_1.32-1_i386.deb''' for the compiler.<br />
*For v3.01, convert the Toolchain following instructions at [http://www.nabble.com/Debian-templates-for-dsPIC-build-toolchain-3.01-tf4308624.html here]<br />
**pre-install these packages: dpkg-dev, debhelper, bison, flex, sysutils, gcc-3.3, fakeroot<br />
**pack pic30-binutils into deb file<br />
**install pic30-binutils<br />
**pack pic30-gcc-3.01 into deb file<br />
**install pic30-gcc-3.01<br />
**pack pic30-support into deb file<br />
**install pic30-support<br />
*'''Important Note''': Only the compiler is free. The header files and library are owned by Microchip. <br />
**Thomas Sailer suggested to download the Student version of C30 compiler and then build the libraries without source code. A package template for Fedora system is available [http://www.baycom.org/~tom/dspic/ here].<br />
**Instructions for filling the upstream direction is available [http://forum.microchip.com/printable.aspx?m=139360 here].<br />
**Alteratively, [https://gna.org/projects/pic30-libc/ Stephan Walter] has started a project to develop C Runtime Library for dsPIC. <br />
***Current libraries in version 0.1.1 include: assert.h, cdefs.h, ctype.h, errno.h, inttypes.h, stdint.h, stdio.h, stdlib.h, string.h<br />
<br />
*Burning Program Codes to Target Board<br />
#Use 'dspicprg and dspicdmp' utilities developed by [http://homerreid.ath.cx/misc/dspicprg/ Homer Reid] to burn hex code (*.hex) to devices. See Reference [http://forum.microchip.com/tm.aspx?m=94243 here]. Through serial port only?<br />
#Use [http://piklab.sourceforge.net/ Piklab IDE]. Details on file format not known.<br />
#Use [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002 MPLAB IDE] to burn hex code (*.hex) to devices.<br />
<br />
===Code Optimization===<br />
*Below is a comparsion between different optimization levels for the project including drivers for 2 projects.<br />
<br />
{|border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 4.2 Comparison between differnt optimization levels<br />
! Optimization !! Description !! Project 1<br>Code Size<br>(byte) !! Project 1<br>Data Usage<br>(byte) !! Project 2<br>Code Size<br>(byte) !! Project 2<br>Data Usage<br>(byte)<br />
|-valign="top"<br />
| O0 <br />
| No optimization<br>Fastest Compilation<br />
| 6222 (9%) || 178 (4%) || 26,037 (38%) || 710 (17%)<br />
|-valign="top"<br />
| O1 <br />
| Optimize<br> Tries to reduce code size and execution time.<br />
| 4473 (6%) || 178 (4%) || 22,290 (32%) || 710 (17%)<br />
|-valign="top"<br />
| O2 <br />
| Optimize even more<br> Performs nearly all supported optimizations <br>that do not involve a space-speed trade-off. <br>Increases both compilation time and the <br>performance of the generated code.<br />
| 4422 (6%) || 178 (4%) || 21,993 (32%) || 710 (17%)<br />
|-valign="top"<br />
| O3 <br />
| Optimize yet more. <br>O3 turns on all optimizations specified by O2 <br>and also turns on the inline-functions option.<br />
| 4485 (6%) || 178 (4%) || 22,176 (32%) || 710 (17%)<br />
|-valign="top"<br />
| Os <br />
| Optimize for size. <br>Os enables all O2 optimizations that do not <br>typically increase code size. It also performs <br>further optimizations designed to reduce code <br>size.<br />
| 4356 (6%) || 178 (4%) || 21,885 (32%) || 710 (17%)<br />
|-<br />
|}<br />
<br />
<br />
==Software Architecture==<br />
+--------+--------+--------+--------+--------+<br />
Application | Task 1 | Task 2 | Task 3 | Task 4 | Task 5 |<br />
+--------+--------+--------+--------+--------+<br />
| POSIX API |<br />
+-------------------+------------------------+<br />
OS | Coroutine | FreeRTOS Scheduler |<br />
+-------------------+------------------------+<br />
| Drivers |<br />
+------+-----+-----+--------+-------+--------+<br />
Hardware | UART | ADC | DAC | EEPROM | PWM | TIMERS | <br />
+------+-----+-----+--------+-------+--------+<br />
*Currently, operating system is based on [http://www.freertos.org/ FreeRTOS] incorporating coroutine developed by [http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html Simon Tatham]<br />
*Software Drivers are to be developed to allow users at Application Level to use the hardware (e.g. ADC, DAC, UART, EEPROM etc) through the OS.<br />
*The interface between the drivers and the OS is based on [http://www.die.net/doc/linux/man/man2/ POSIX standard] (e.g. open(), write(), read(), ioctl(), usleep() etc).<br />
*The most up-to-date development can be found at repository [http://chungyan5.no-ip.org/vc/?root=freertos_posix freertos_posix]<br />
<br />
<br />
==Programming Tips==<br />
<br />
===Memory Map for 5011===<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 6.1 Memory Location<br />
! Type !! Start Address !! End Address !! Size<br />
|-valign="top"<br />
| Flash || 0x000000 ||0x00AFFF || 44K<sup>[1]</sup><br />
|-valign="top"<br />
| +--Flash: Reset Vector || 0x000000 ||0x000003 || 4<br />
|-valign="top"<br />
| +--Flash: Interrupt Vector Table || 0x000004 ||0x00007F || 124<br />
|-valign="top"<br />
| +--Flash: Alternate Vector Table || 0x000084 ||0x0000FF || 124<br />
|-valign="top"<br />
| +--Flash: User Program || 0x000100 ||0x00AFFF || 43.7K<br />
|-valign="top"<br />
| EEPROM || 0x7FFC00 || 0x7FFFFF || 1K<sup>[2]</sup><br />
|-valign="top"<br />
| Programming Executive || 0x800000 || 0x8005BF || 1472<br />
|-valign="top"<br />
| Unit ID || 0x8005C0 || 0x8005FF || 64<br />
|-valign="top"<br />
| Config Registers || 0xF80000 || 0xF8000F || 16<br />
|-valign="top"<br />
| Device ID || 0xFF0000 || 0xFF0003 || 4<br />
|-<br />
|}<br />
[1] Each address is 16-bit wide. Every two addresses correspond to a 24-bit instruction. Each even address contains 2 valid bytes; each odd address contains 1 valid byte plus 1 phathom byte.<br><br />
[2] Each address is 8-bit wide.<br />
<br />
===Data Location===<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 6.2 Data Location<br />
! Type !! Description !! Example<br />
|-valign="top"<br />
| _XBSS(N) <sup>[1]</sup><br />
| RAM Data in X-memory, aligned at N, no initilization<br />
| int _XBSS(32) xbuf[16];<br />
|-valign="top"<br />
| _XDATA(N) <sup>[1]</sup><br />
| RAM Data in X-memory, aligned at N, with initilization<br />
| int _XDATA(32) xbuf[] = {1, 2, 3, 4, 5};<br />
|-valign="top"<br />
| _YBSS(N) <sup>[1]</sup><br />
| RAM Data in Y-memory, aligned at N, no initilization<br />
| int _YBSS(32) ybuf[16];<br />
|-valign="top"<br />
| _YDATA(N) <sup>[1]</sup><br />
| RAM Data in Y-memory, aligned at N, with initilization<br />
| int _YDATA(32) ybuf[16] = {1, 2, 3, 4, 5};<br />
|-valign="top"<br />
| __attribute__((space(const)))<br />
| Flash ROM data, constant, accessed by normal C<br>statements, but 32K max.<br />
| int i __attribute__((space(const))) = 10;<br />
|-valign="top"<br />
| __attribute__((space(prog)))<br />
| Flash ROM data, read/write by program space visibility<br>window (psv)<br />
| int i __attribute__((space(prog)));<br />
|-valign="top"<br />
| __attribute__((space(auto_psv)))<br />
| Flash ROM data, read by normal C statements, write<br>by accessing psv<br />
| int i __attribute__((space(auto_psv)));<br />
|-valign="top"<br />
| __attribute__((space(psv)))<br />
| Flash ROM data, read/write by (psv)<br />
| int i __attribute__((space(psv)));<br />
|-valign="top"<br />
| _EEDATA(N) <sup>[1]</sup><br />
| ROM Data in EEPROM, aligned at N, read/write with psv<br />
| int _EEDATA(2) table[]={0, 1, 2, 3, 5, 8};<br />
|-valign="top"<br />
| _PERSISTENT<br />
| RAM Data, data remain after reset<br />
| int _PERSISTENT var1, var2;<br />
|-valign="top"<br />
| _NEAR<br />
| RAM Data at near section<br />
| int _NEAR var1, var2;<br />
|-valign="top"<br />
| _ISR<br />
| Interrupt service rountine<br />
| void _ISR _INT0Interrupt(void);<br />
|-valign="top"<br />
| _ISRFAST<br />
| Fast interrupt service rountine<br />
| void _ISRFAST _T0Interrupt(void);<br />
|-<br />
|}<br />
#N must be a power of two, with a minimum value of 2.<br />
<br />
===Configuration Bits===<br />
----<br />
*System clock source can be provided by:<br />
#Primary oscillator (OSC1, OSC2)<br />
#Secondary oscillator (SOSCO and SOSCI) with 32kHz crystal<br />
#Internal Fast RC (FRC) oscillator at 7.37MHz (7372800Hz)<br />
#Low-Power RC (LPRC) oscillator (Watchdog Timer) at 512 kHz.<br />
*These clock sources can be incorporated with interal Phase-locked-loop (PLL) x4, x8 or x16 to yield the osciallator frequrence F<sub>OSC</sub><br />
*The system clock is divided by 4 to yield the internal instruction cycle clock, F<sub>CY</sub>=F<sub>OSC</sub>/4<br />
*FRC with PLLx16 is used to achieve F<sub>CY</sub>=29.49MHz (29491200Hz or 30MIPS)<br />
<br />
//The code (MACRO) below is to be placed at the top of program (before main)<br />
_FOSC(CSW_FSCM_OFF & FRC_PLL16);<br />
_FWDT(WDT_OFF); //Turn off Watchdog Timer<br />
_FBORPOR(PBOR_ON & BORV_27 & MCLR_DIS & PWRT_16);<br />
_FGS(CODE_PROT_OFF); //Disable Code Protection<br />
<br />
===Timer===<br />
<br />
----<br />
*Each timer is 16-bit (i.e. counting from 0 to 65535).<br />
*Timer 2 and 3 can be incorporated together to form a 32-bit timer.<br />
*Prescale is the ratio between timer counts and system clock counts. Prescales of 1:1, 1:8, 1:64 and 1:256 are available.<br />
*Timers may be used to implement free time clock or mesaure time.<br />
<br />
====Free Time Clock====<br />
*Let required time for ticking be PERIOD.<br />
*Number of instruction cycles during PERIOD = PERIOD*F<sub>CY</sub> cycles<br />
*Using a prescale of 1:x, the timer period count register = # of cycles/x<br />
*e.g. PERIOD = 10ms; # of cycles = 10ms*30MHz = 300000 cylces; Using 1:64 Prescale, register setting = 300000/64 = 4688<br />
void time_init(void){<br />
TMR1 = 0; // Clear register<br />
PR1 = 4688; // Set period<br />
//============================================================<br />
_T1IF = 0; // Clear interrupt flag<br />
_T1IE = 1; // Enable interrupts<br />
//============================================================<br />
T1CONbits.TCS = 0; // Use internal clock source<br />
T1CONbits.TCKPS = 2; // Prescale Select 1:64<br />
T1CONbits.TON = 1; // Start the timer <br />
}<br />
//********************************************************************<br />
void _ISRFAST _T1Interrupt(void){<br />
_T1IF = 0; // Clear interrupt flag<br />
//Place user code here<br />
}<br />
<br />
====Time Measurement====<br />
*To measure the time taken for action(), use the code below:<br />
unsigned int measure_time(void){ <br />
PR3 = 0xFFFF; // Set counter to maximum<br />
_T3IF = 0; // Clear interrupt flag<br />
_T3IE = 0; // Disable interrupt<br />
T3CONbits.TON = 1; // Start the timer, TMR3 count up<br />
TMR3 = 0; //Clear TMR3 to start count up<br />
//====================================================<br />
//Add code here to wait for something to happen<br />
action();<br />
//====================================================<br />
T3CONbits.TON = 0; //Stop the timer<br />
//====================================================<br />
return (unsigned int) TMR3/FCY; //TMR/FCY yields the actual time<br />
}<br />
<br />
===Interrupt===<br />
<br />
----<br />
*Registers are involved in Interrupts includes: <br />
#Interrupt Flag Status (IFS0-IFS2) registers<br />
#Interrupt Enable Control (IEC0-IEC2) registers<br />
#Interrupt Priority Control (IPC0-IPC10) registers<br />
#Interrupt Priority Level (IPL) register<br />
#Global Interrupt Control (INTCON1, INTCON2) registers<br />
#Interrupt vector (INTTREG) register<br />
*User may assign priority level 0-7 to a specific interrupt using IPC. Setting priority to 0 disable a specific interrupt. Level 7 interrupt has the highest priority.<br />
*Current priority level is stored in bit<7:5> of Status Register (SR). Setting Interrupt Priority Level (IPL) to 7 disables all interrupts (except traps). <br />
*sti() and cli() can be defined to enable and disable global interrupts for time critical functions:<br />
#define IPL ( 0x00e0 )<br />
#define cli() SR |= IPL //Set IPL to 7<br />
#define sti() SR &= ~IPL //Set IPL to 0<br />
//============================================================<br />
char adc_ioctl(unsigned char request, unsigned char* argp){<br />
//...<br />
cli(); //Disable global interrupt<br />
for(;ch<=argp[0];ch++)<br />
adc_add_ch(argp[ch]); //Add adc channels<br />
sti(); //Enable global interrupt<br />
//...<br />
return 0;<br />
}<br />
*dsPic30F has an [http://ww1.microchip.com/downloads/en/DeviceDoc/80223D.pdf errate note] on the Interrupt Controller. When Nested Interrupt is turned on (NSTDIS=0 by default), a high priority interrupt negating a low priority interrupt may result in an Address Error.<br />
*To work around the problem, it is suggested by Microchip to use the following MACRO to protect:<br />
# the clearing of Interrput Flag<br />
# the disabling of Interrupt Enable<br />
# the lowering of Interrupt Priority <br />
# the modification of IPL in Status Register to 1-6<br />
#define DISI_PROTECT(X) { \<br />
__asm__ volatile ("DISI #0x1FFF");\<br />
X; \<br />
DISICNT = 0; \<br />
}<br />
*For example,<br />
void _ISR _T1Interrupt( void )<br />
{<br />
DISI_PROTECT(IFS0bits.T1IF = 0);<br />
//do something here...<br />
}<br />
<br />
===UART===<br />
<br />
----<br />
*5011 provides two UART channels UxART, for x=1, 2.<br />
*UxMODE, UxSTA, UxBRG are registers used to set the mode, indicate the status, and set the baud rate respectively.<br />
*For UART communications compatiable with RS232 standard, an external driver (e.g. MAX3232ESE) is needed.<br />
*For UART communications compatiable with RS485 standard, an external driver (e.g. DS3695N) is needed.<br />
====Auto baud rate detection====<br />
*The method is provided by [http://www.opencircuits.com/DsPIC30F_5011_Development_Board ingenia bootloader].<br />
*The PC sends a ASCII character 'U' (0x55) to the target board.<br />
*On the first rising edge of the start bit, the target board starts the timer.<br />
*At the fifth rising edge, the timer is stopped, let the count number be ''t_count''. <br />
**The measured period corresponds to 8 bits transmitted at a baud rate ''uxbrg''.<br />
_ _ _ _ _ _<br />
_|S|_|1|_|1|_|1|_|1|_|S|_ (S = Start Bit)<br />
<---------------><br />
Measured Time<br />
*The relationship between ''uxbrg'' and ''TMR'' is<br />
Measured Time (in seconds) = t_count/F<sub>cy</sub><br />
uxbrg = 1/(Measured Time/8)<br />
= 8*F<sub>cy</sub>/t_count<br />
*Since UxBRG is computed by:<br />
UxBRG = (F<sub>cy</sub>/(16*Baudrate)) -1<br />
= (F<sub>cy</sub>/(16*8*F<sub>cy</sub>/t_count)) -1<br />
= t_count/128 -1<br />
*The following is the code for auto baud rate detection for U2ART:<br />
unsigned int uart2_autobaud(void){<br />
U2MODEbits.ABAUD = 1; //Enable Autobaud detect from U2RX (from IC2 if 0)<br />
U2MODEbits.UARTEN = 1; //U2ART enable<br />
//Timer 3 Config==========================================================<br />
PR3 = 0xFFFF; // Set counter to maximum<br />
_T3IF = 0; // Clear interrupt flag<br />
_T3IE = 0; // Disable interrupt<br />
T3CONbits.TON = 1; // Start the timer, TMR3 count up<br />
//Input Capture Config====================================================<br />
IC2CONbits.ICM = 3; //Detect rising <br />
_IC2IF = 0; //Clear interrupt flag<br />
_IC2IE = 0; //Disable interrupt<br />
//Start Auto baud detection===============================================<br />
unsigned int i=0;<br />
cli(); //Disable Global Interrupt<br />
while(!_IC2IF); //1st rising edge detected<br />
TMR3 = 0; //Clear TMR3 to start count up<br />
_IC2IF = 0; //Clear interrupt flag<br />
while(!_IC2IF); //2nd rising edge detected<br />
_IC2IF = 0; //Clear interrupt flag<br />
while(!_IC2IF); //3rd rising edge detected<br />
_IC2IF = 0; //Clear interrupt flag<br />
while(!_IC2IF); //4th rising edge detected<br />
_IC2IF = 0; //Clear interrupt flag<br />
while(!_IC2IF); //5th rising edge detected<br />
_IC2IF = 0; //Clear interrupt flag<br />
T3CONbits.TON = 0; //Stop the timer<br />
sti(); //Enable Global Interrupt<br />
//Compute value for BRG register==========================================<br />
unsigned int time;<br />
time = ((TMR3+0x40)>>7)-1; //+0x40 for rounding<br />
//========================================================================<br />
return time;<br />
}<br />
*For 30MIP, tested speeds of transmission include 9600bps, 19200bps, 28800bps, 38400bps and 57600bps.<br />
====open()====<br />
*The following structures and variables are used as circular buffers for transmit and receive.<br />
struct UART_Rx{<br />
unsigned char wr;<br />
unsigned char rd;<br />
};<br />
struct UART_Tx{<br />
unsigned char wr; <br />
unsigned char rd;<br />
unsigned char tx_complete_flag;<br />
};<br />
struct UART_Rx uart_rx;<br />
struct UART_Tx uart_tx;<br />
unsigned char uart_rx_buf[MAX_UART_RX_BUF];<br />
unsigned char uart_tx_buf[MAX_UART_TX_BUF];<br />
<br />
char uart_open()<br />
{<br />
uart_rx.wr = 0;<br />
uart_rx.rd = 0;<br />
uart_tx.wr = 0;<br />
uart_tx.rd = 0;<br />
uart_tx.tx_complete_flag = 1;<br />
uart2_init();<br />
return 0;<br />
}<br />
<br />
void uart2_init(void){<br />
unsigned int u2brg = 97; <br />
#if(AUTO_BAUD_DECT>0)<br />
u2brg = uart2_autobaud();<br />
#endif<br />
U2BRG = u2brg; <br />
//=================================================================<br />
// Disable U2ART<br />
U2MODEbits.UARTEN = 0; //Disable U2ART module<br />
//=================================================================<br />
// Configure Interrupt Priority<br />
_U2RXIF = 0; //Clear Rx interrupt flags<br />
_U2TXIF = 0; //Clear Tx interrupt flags<br />
_U2RXIE = 1; //Receive interrupt: 0 disable, 1 enable <br />
_U2TXIE = 1; //Transmit interrupt: 0 disable, 1 enable<br />
//=================================================================<br />
// Configure Mode<br />
// +--Default: 8N1, no loopback, no wake in sleep mode, continue in idle mode<br />
// +--Diable autobaud detect<br />
// +--Enable U2ART module<br />
U2MODEbits.ABAUD = 0; //Disable Autobaud detect from U2RX <br />
U2MODEbits.UARTEN = 1; //U2ART enable<br />
//=================================================================<br />
// Configure Status<br />
// +--Default: TxInt when a char is transmitted, no break char<br />
// +--Default: RxInt when a char is received, no address detect, clear overflow<br />
// +--Enable Transmit<br />
U2STAbits.UTXEN = 1; //Tx enable<br />
}<br />
<br />
====write()====<br />
*This function writes a series of bytes to the circular buffer and start transmission.<br />
int uart_write(unsigned char *buf, int count)<br />
{<br />
//If transimt has not completed, return busy<br />
if(uart_tx.tx_complete_flag == 0){<br />
return -1; <br />
}<br />
else{<br />
uart_tx.tx_complete_flag = 0;<br />
}<br />
int next_data_pos;<br />
int byte = 0;<br />
for (; byte<count; byte++) {<br />
next_data_pos = pre_wr_cir254buf( (unsigned char)uart_tx.wr, <br />
(unsigned char)uart_tx.rd, <br />
MAX_UART_TX_BUF); <br />
if (next_data_pos!=255) {<br />
//Valid data is available<br />
uart_tx_buf[uart_tx.wr] = (unsigned char) buf[byte]; //copy the char to tx_buf<br />
uart_tx.wr = next_data_pos; //increment the ptr<br />
} else break;<br />
}<br />
//Raise Interrupt flag to initiate transmission<br />
_U2TXIF = 1; //Start interrupt<br />
return byte; <br />
}<br />
*The interrupt routine reads from the circular buffer and send the data. The uart is opened such that the module will generate an TX Interrupt when it a byte is sent.<br />
void _ISR _U2TXInterrupt(void){<br />
DISI_PROTECT(_U2TXIF = 0); //Clear Interrupt Flag<br />
unsigned char next_data_pos;<br />
next_data_pos = pre_rd_cir254buf( (unsigned char)uart_tx.wr,<br />
(unsigned char)uart_tx.rd, <br />
MAX_UART_TX_BUF);<br />
if (next_data_pos!= 255) {<br />
//Valid Data is available to transmit<br />
U2TXREG = (uart_tx_buf[(unsigned char)uart_tx.rd] & 0xFF); //send next byte...<br />
uart_tx.rd = (unsigned char) next_data_pos; //update rd pointer<br />
} else {<br />
//Transimission has completed<br />
uart_tx.tx_complete_flag = 1; // change to empty of tx<br />
}<br />
}<br />
<br />
====read()====<br />
*The interrupt routine writes to the circular buffer when space is available.<br />
void _ISR _U2RXInterrupt(void){<br />
unsigned char next_data_pos;<br />
if ( U2STAbits.URXDA ){<br />
next_data_pos = pre_wr_cir254buf( uart_rx.wr, uart_rx.rd, MAX_UART_RX_BUF);<br />
if (next_data_pos!=255) {<br />
//If buffer is not full<br />
uart_rx_buf[uart_rx.wr] = (unsigned char) U2RXREG; //Read the data from buffer<br />
uart_rx.wr = next_data_pos;<br />
} <br />
else{<br />
//When buffer is full, still remove data from register, butthe incoming data is lost<br />
next_data_pos = (unsigned char) U2RXREG; //Read the data from buffer<br />
} <br />
}<br />
DISI_PROTECT(_U2RXIF = 0); //Clear the flag<br />
}<br />
*This function reads one byte from the circular buffer.<br />
int uart_read(unsigned char *buf)<br />
{<br />
int next_data_pos;<br />
next_data_pos = pre_rd_cir254buf( uart_rx.wr, uart_rx.rd, MAX_UART_RX_BUF);<br />
//Copy 1 byte when data is available<br />
if (next_data_pos!=255) <br />
{<br />
*buf = uart_rx_buf[uart_rx.rd]; //copy the stored data to buf<br />
uart_rx.rd = next_data_pos; //update the ptr<br />
return 1;<br />
}<br />
//No data can be copied<br />
else<br />
{<br />
return 0;<br />
} <br />
}<br />
<br />
===I<sup>2</sup>C===<br />
<br />
----<br />
*Two lines are devoted for the serial communication. SCL for clock, SDA for data.<br />
*Standard communication speed includes<br />
#Standard speed mode: 100kHz<br />
#Fast speed mode: 400kHz<br />
#High speed mode: 3.4MHz<br />
*dsPIC30f5011 supports standard and fast speed modes. The maximum speed attainable is 1MHz.<br />
*Pull-up resistors are required for both SCL and SDA. Minimum pull-up resistance is given by:<br />
Pull-up resistor (min) = (V<sub>dd</sub>-0.4)/0.003 ...... [See section 21.8 in Family reference manual]<br />
*2.2Kohm is typical for standard speed mode.<br />
*After initiating a start/stop/restart bit, add a small delay (e.g. no operation) before polling the corresponding control bit (hardware controlled).<br />
*After sending a byte and receiving an acknowledgement from the slave device, ensure to change to idle state.<br />
<br />
====open()====<br />
*The following structure is used to record whether special bits are needed to be sent.<br />
typedef union{<br />
unsigned char val;<br />
struct{<br />
unsigned START:1; //start<br />
unsigned RESTART:1; //restart<br />
unsigned STOP:1; //stop<br />
unsigned NACK:1; //not acknowledgment<br />
unsigned :1;<br />
unsigned :1;<br />
unsigned :1;<br />
unsigned :1; <br />
}bits;<br />
} I2C_STATUS;<br />
static I2C_STATUS i2c_status; <br />
<br />
*Initializing I<sup>2</sup>C with default speed I2C_BRG without interrupts.<br />
void i2c_open(void)<br />
{<br />
//Open i2c if not already opened<br />
if(I2CCONbits.I2CEN == 0)<br />
{<br />
_SI2CIF = 0; //Clear Slave interrupt<br />
_MI2CIF = 0; //Clear Master interrupt<br />
_SI2CIE = 0; //Disable Slave interrupt<br />
_MI2CIE = 0; //Disable Master interrupt<br />
I2CBRG = I2C_BRG;<br />
I2CCONbits.I2CEN = 1; //Enable I2C module <br />
i2cIdle(); //I2C bus at idle state, awaiting transimission<br />
i2c_status.val = 0; //clear status flags<br />
}<br />
}<br />
<br />
====ioctl()====<br />
*Use this function before read/write to append special bits before or after the data byte.<br />
char i2c_ioctl(unsigned char request, unsigned char* argp)<br />
{<br />
switch(request){<br />
case I2C_SET_STATUS:<br />
i2c_status.val = *argp;<br />
break;<br />
default:<br />
return -1; //request code not recognised <br />
}<br />
return 0;<br />
}<br />
<br />
====write()====<br />
*This function sends an 8-bit data using the I2C protocol.<br />
Mst/Slv _______ M ____M___ S M ________ <br />
SDA (Data) |S| data |A|S|<br />
|T| |C|T|<br />
|A|XXXXXXXX|K|P|<br />
*Use ioctl() to select whether a start/restart/stop bit is required.<br />
*If slave does not respond after ACK_TIMEOUT, the transmission is considered unsucessful.<br />
int i2c_write(unsigned char *buf)<br />
{<br />
unsigned int count = 0;<br />
if(i2c_status.bits.START)<br />
{<br />
I2CCONbits.SEN = 1; <br />
Nop(); //A small delay for hardware to respond<br />
while(I2CCONbits.SEN); //Wait till Start sequence is completed<br />
}<br />
else if(i2c_status.bits.RESTART)<br />
{<br />
I2CCONbits.RSEN = 1; <br />
Nop(); //A small delay for hardware to respond<br />
while(I2CCONbits.RSEN); //Wait till Start sequence is completed<br />
}<br />
I2CTRN = *buf; //Transmit register<br />
while(I2CSTATbits.TBF); //Wait for transmit buffer to empty<br />
while(I2CSTATbits.ACKSTAT){<br />
if(++count > ACK_TIMEOUT){<br />
//Slave did not acknowledge, byte did not transmit sucessfully, <br />
//send stop bit to reset i2c<br />
I2CCONbits.PEN = 1;<br />
Nop(); //A small delay for hardware to respond<br />
while(I2CCONbits.PEN); //Wait till stop sequence is completed<br />
i2cIdle();<br />
return 0;<br />
}<br />
}<br />
i2cIdle();<br />
if(i2c_status.bits.STOP)<br />
{<br />
I2CCONbits.PEN = 1;<br />
Nop(); //A small delay for hardware to respond<br />
while(I2CCONbits.PEN); //Wait till stop sequence is completed<br />
i2cIdle();<br />
}<br />
i2c_status.val = 0; //Clear status<br />
return 1;<br />
}<br />
<br />
====read()====<br />
*This function reads 1 byte from slave using the I2C protocol.<br />
Mst/Slv ____ ___S____ M M _____ <br />
SDA (Data) | data |A|S|<br />
| |C|T|<br />
|XXXXXXXX|K|P|<br />
*Use ioctl() to select whether an ACK/NACK and/or STOP bit is needed to be sent.<br />
int i2c_read(unsigned char *buf)<br />
{<br />
I2CCONbits.RCEN = 1; //Enable Receive<br />
while(I2CCONbits.RCEN);<br />
I2CSTATbits.I2COV = 0; //Clear receive overflow<br />
*buf = (unsigned char) I2CRCV; //Access the receive buffer<br />
I2CCONbits.ACKDT = (i2c_status.bits.NACK)? 1 : 0;<br />
I2CCONbits.ACKEN = 1; //Send Acknowledgement/Not Acknowledgement<br />
i2cIdle(); //I2C bus at idle state, awaiting transimission<br />
if(i2c_status.bits.STOP)<br />
{<br />
I2CCONbits.PEN = 1;<br />
Nop(); //A small delay for hardware to respond<br />
while(I2CCONbits.PEN); //Wait till stop sequence is completed<br />
i2cIdle();<br />
}<br />
i2c_status.val = 0; //Clear status<br />
return 1;<br />
}<br />
<br />
====Example====<br />
Mst/Slv _______ M ___M___ M S ____M___ S M ___M___ M S ___S____ M ___S____ M M _____ <br />
SDA (Data) |S| | |A| |A|R| | |A| |A| |N|S|<br />
|T|address|W|C|channelA|C|E|address|R|C| Data H |C| Data L |A|T|<br />
|A|1001111|0|K|00010010|K|S|1001111|1|K|10101010|K|10XXXXXX|K|P|<br />
<br />
/*<br />
* Send start bit, slave address (Write Mode)<br />
*/ <br />
status = I2C_START;<br />
i2c_ioctl(I2C_SET_STATUS, &status);<br />
data = (unsigned char) I2C_SLAVE_ADDR;<br />
i2c_write(&data);<br />
/*<br />
* Send control byte: Channel select<br />
*/<br />
data = (unsigned char) ctrl_byte;<br />
i2c_write(&data);<br />
/*<br />
* Send restart bit, slave address (Read Mode)<br />
*/<br />
status = I2C_RESTART;<br />
i2c_ioctl(I2C_SET_STATUS, &status);<br />
data = (unsigned char) (I2C_SLAVE_ADDR|0x01);<br />
i2c_write(&data);<br />
/*<br />
* Receive High Byte with Acknowledgment<br />
*/<br />
i2c_read(&data);<br />
usr_data.high = (unsigned char) data;<br />
/*<br />
* Receive Low Byte with Not Acknowledgment and stop bit<br />
*/ <br />
status = I2C_NACK | I2C_STOP;<br />
i2c_ioctl(I2C_SET_STATUS, &status);<br />
i2c_read(&data);<br />
usr_data.low = (unsigned char) data;<br />
<br />
===ADC===<br />
<br />
----<br />
*12-bit ADC: (Max 16 Channels)<br />
*Allow a maximum of 2 sets of analog input multiplexer configurations, MUX A and MUX B (Normally use one only).<br />
*A maximum of 200kps of sampling rate when using auto sampling mode.<br />
====open()====<br />
*The following variables are required.<br />
unsigned int adc_buf[ADC_MAX_CH]; //Store most updated data<br />
volatile unsigned int* ADC16Ptr = &ADCBUF0; //Pointer to ADC register buffer, <br />
unsigned char adc_ch_select = 0; //Pointer to channel to be read from<br />
unsigned char adc_data_ready = 0; //Indicate if RAM data is ready for output<br />
*Configuration is highlighted below.<br />
**Interrupt: The ADC module will be set to interrupt when the specified channels are updated.<br />
**I/O: Set the corresponding TRISBX bits (digit i/o config) to input (i.e. = 1), and set corresponding bits in ADPCFG (analog config) to zero.<br />
**Scanning Mode: Scan mode is used. In this mode, the Sample and Hold (S/H) is switched between the channels specified by ADCSSL (Scan select register).<br />
**Reference Voltage for S/H: Only MUX A is used. By default, the negative reference voltage of the S/H is connected to V<sub>REF-</sub>.<br />
**Settings for ADC Operation: For 200kbps operation, the voltage references for the ADC voltage are connected to V<sub>REF+</sub> and V<sub>REF-</sub>. Scan input is enabled, and the module will generate an interrupt when all selected channels have been scanned.<br />
**Sampling Rate: T<sub>AD</sub> refers to the time unit for the ADC clock. To configure the ADC module at 200kbps, the minimum sampling time of 1T<sub>AD</sub> = 334ns is required. ADCS<5:0> in ADCON3 register is used to set the time, which is given by:<br />
ADCS<5:0> = 2(T<sub>AD</sub>/T<sub>CY</sub>)-1 <br />
= 2(334e-9/33.34e-9)-1 <br />
= 19<br />
<br />
char adc_open(int flags)<br />
{<br />
// Configure interrupt<br />
_ADIF = 0; //clear ADC interrupt flag<br />
_ADIE = 1; //enable adc interrupt<br />
// Configure analog i/o <br />
_TRISB0 = 1;<br />
_TRISB1 = 1; <br />
ADPCFG = 0xFFFC; //Enable AN0 (Vref+) and AN1 (Vref-)<br />
// Configure scan input channels <br />
ADCSSL = 0x0003; //0 => Skip, 1 => Scan<br />
// Configure CH0 Sample and Hold for 200kbps<br />
// +-- Use MUX A only<br />
// +-- Set CH0 S/H -ve to VRef-<br />
ADCHSbits.CH0NA = 0;<br />
// ADCCON3:<br />
// +--Auto Sample Time = 1TAD<br />
// +--A/D Conversion Clock Source = system clock<br />
// +--A/D Conversion Clock Select ADCS<5:0>= 2(TAD/TCY)-1<br />
// 200kbps(Sampling frequency)<br />
ADCON3bits.SAMC = ADC_ACQ_TIME; //1TAD for sampling time<br />
ADCON3bits.ADRC = 0; //Use system clock<br />
ADCON3bits.ADCS = ADC_ADCS; //each conversion requires 14TAD<br />
// ADCCON2:<br />
// +--Default: Use MUX A, No splitting of Buffer<br />
// +--Voltage Reference Configuration Vref+ and Vref-<br />
// +--Scan Input Selections<br />
// +--5 samples between interrupt<br />
ADCON2bits.VCFG = 3; //External Vref+, Vref-<br />
ADCON2bits.CSCNA = 1; //Scan input<br />
ADCON2bits.SMPI = 1; //take 2 samples (one sample per channel) per interrupt<br />
// ADCCON1:<br />
// +--Default: continue in idle mode, integer format<br />
// +--Enable ADC, Conversion Trigger Source Auto, Auto sampling on<br />
ADCON1bits.FORM = 0; //[0:integer]; [2 fractional]; [3 siged fractional]<br />
ADCON1bits.SSRC = 7; //auto covert, using internal clock source<br />
ADCON1bits.ASAM = 1; //auto setting of SAMP bit<br />
ADCON1bits.ADON = 1; //Turn on module<br />
return 0;<br />
}<br />
<br />
====read()====<br />
*16 registers (ADCBUF0 -ADCBUF15) are dedicated to store the ADC data between interrupts. However, the data in ADCBUFx does not necessarily correspond to the data taken for channel x. Since the lowest register will always be filled first, when some of the channels are not scanned (i.e. skipped), care must be taken. The following code checks the ADCSSL register for the current scanning channels and moves the data to the corresponding position in *adc_buf.<br />
void _ISR _ADCInterrupt(void){<br />
unsigned int channel = 0;<br />
unsigned int buffer = 0;<br />
for (; channel<ADC_MAX_CH; channel++)<br />
{<br />
if(select(channel)) //Check if channel has been selected<br />
{<br />
adc_buf[channel] = ADC16Ptr[buffer]; //Copy data to adc_buf<br />
buffer++;<br />
}<br />
}<br />
adc_data_ready = 1;<br />
DISI_PROTECT(_ADIF = 0); //Clear adc interrupt<br />
}<br />
<br />
static unsigned char select(unsigned char ch)<br />
{<br />
unsigned int mask;<br />
mask = 0x0001 << ch;<br />
if(ADCSSL & mask)<br />
return 1;<br />
return 0;<br />
}<br />
*User can read from the buffer at anytime to get the most updated analog values.<br />
int adc_read(unsigned int* buf, int count)<br />
{<br />
if(adc_data_ready == 1)<br />
{<br />
int num_channel = count/2; //number of channels to read<br />
unsigned char channel = adc_ch_select; //index for adc_buf<br />
int i = 0; //index for buf<br />
while(i<num_channel && channel<ADC_MAX_CH)<br />
{ <br />
//Loop only for specified number of channel or all channels <br />
buf[i++] = adc_buf[channel++]; //use data in local buffer<br />
while(select(channel)==0)<br />
{ //increment to next valid channel<br />
channel++; <br />
if(channel >= ADC_MAX_CH) break;<br />
}<br />
}<br />
return 2*i;<br />
}<br />
return -1;<br />
}<br />
<br />
====ioctl()====<br />
*This function is used to add or remove channels from the ADC scanning process.<br />
char adc_ioctl(unsigned char request, unsigned char* argp)<br />
{<br />
switch(request)<br />
{<br />
case ADC_ADD_CH:<br />
//ADD channels to current set==========================<br />
cli(); //Disable global interrupt<br />
if(select(argp[0]) == 0){ //If channel not in scan list<br />
adcAdd(argp[0]); //Add individual channel to scan list<br />
adc_data_ready = 0; //First data not ready yet, until interrupt occurs<br />
}<br />
adc_ch_select = argp[0]; //Select current channel for reading<br />
sti(); //Enable global interrupt<br />
break;<br />
case ADC_RM_CH:<br />
//REMOVE channels from current set==========================<br />
cli(); //Disable global interrupt<br />
if(select(argp[0])){ //If channel in scan list <br />
adcRm(argp[0]); //Remove individual channel<br />
adc_ch_select = 0; //Reset to AN0<br />
}<br />
sti(); //Enable global interrupt<br />
break;<br />
default:<br />
return -1; //request code not recognised <br />
}<br />
return 0;<br />
}<br />
*Channels may be added or removed by changing _TRISBX, ADPCFG, ADCSSL and ADCON2bits.SMPI.<br />
void adc_add_ch(unsigned char ch){<br />
unsigned int mask;<br />
mask = 0x0001 << ch;<br />
TRISB = TRISB | mask;<br />
ADCSSL = ADCSSL | mask; <br />
ADPCFG = ~ADCSSL;<br />
ADCON2bits.SMPI++; //take one more sample per interrupt<br />
}<br />
<br />
void adc_rm_ch(unsigned char ch){<br />
unsigned int mask;<br />
mask = 0x0001 << ch;<br />
ADPCFG = ADPCFG | mask;<br />
ADCSSL = ~ADPCFG;<br />
ADCON2bits.SMPI--; //take one less sample per interrupt<br />
}<br />
<br />
===EEPROM===<br />
<br />
----<br />
*5011 has 1024 bytes of EEPROM, readable and writable under normal voltage (5V).<br />
*To use, declare:<br />
unsigned char _EEDATA(2) eeData[1024]={ 0x00, 0x00, 0x00, 0x00, .... }<br />
unsigned int byte_pointer = 0;<br />
====lseek()====<br />
*This function moves the pointer to the desired position before a reading/writing operation is performed.<br />
int eeprom_lseek(int offset, unsigned char whence){<br />
byte_pointer = offset;<br />
return byte_pointer;<br />
}<br />
====read()====<br />
*This function read ''count'' bytes from the eeprom.<br />
int eeprom_read(unsigned char* buf, int count){<br />
int i=0;<br />
for(; i<count && byte_pointer < 1024; i++){<br />
readEEByte( __builtin_tblpage(eeData), <br />
__builtin_tbloffset(eeData) + byte_pointer, <br />
&buf[i]);<br />
byte_pointer++; //Update global pointer<br />
}<br />
return i; //read i bytes successful <br />
}<br />
*readEEByte() is implemented in assembly code as follows:<br />
.global _readEEByte<br />
_readEEByte:<br />
push TBLPAG ;w0 = base of eeData<br />
mov w0, TBLPAG ;w1 = offset for eeData in byte<br />
tblrdl.b [w1], [w2] ;w2 = pointer to user buffer<br />
pop TBLPAG<br />
return<br />
<br />
====write()====<br />
*This function write ''count'' bytes to eeprom.<br />
int eeprom_write(unsigned char* buf, int count){<br />
char isOddAddr = byte_pointer%2; //current address is odd<br />
char isOddByte = count%2; //number of bytes to write is odd<br />
//=================================================================<br />
unsigned int word_offset = byte_pointer>>1; //div by 2 and round down<br />
int max_write;<br />
max_write = (isOddAddr == 0 && isOddByte == 0) ? (count>>1) : (count>>1)+1;<br />
//=================================================================<br />
unsigned int word_data; //Store word to be written<br />
int byte_wr = 0; //number of bytes written, i.e buffer pointer<br />
int i = 0;<br />
//=================================================================<br />
for(; i<max_write && word_offset<512; i++, word_offset++){<br />
if(i==0 && isOddAddr){<br />
//First byte not used<br />
//============================================save first byte<br />
readEEByte( __builtin_tblpage(eeData), <br />
__builtin_tbloffset(eeData) + byte_pointer - 1,<br />
&word_data);<br />
//===========================================================<br />
word_data = ((unsigned int)buf[0] << 8) + (0xFF & word_data);<br />
byte_wr++; //Update buffer pointer<br />
byte_pointer++; //Update global pointer<br />
} else if(i==max_write-1 && ((isOddAddr && sOddByte==0)||(isOddAddr==0 && isOddByte))){<br />
//Last byte not used<br />
//=============================================save last byte<br />
readEEByte( __builtin_tblpage(eeData), <br />
__builtin_tbloffset(eeData) + byte_pointer + 1,<br />
&word_data);<br />
//============================================================<br />
word_data = (word_data << 8) + buf[byte_wr];<br />
byte_wr++; //Update buffer pointer<br />
byte_pointer++; //Update global pointer<br />
} else{<br />
//Both bytes valid<br />
word_data = ((unsigned int)buf[byte_wr+1] << 8) + buf[byte_wr];<br />
byte_wr+=2; //Update buffer pointer<br />
byte_pointer+=2; //Update global pointer<br />
}<br />
//==================================================================<br />
eraseEEWord( __builtin_tblpage(eeData), <br />
__builtin_tbloffset(eeData) + 2*word_offset);<br />
writeEEWord( __builtin_tblpage(eeData), <br />
__builtin_tbloffset(eeData) + 2*word_offset,<br />
&word_data);<br />
//==================================================================<br />
}<br />
return byte_wr; //No. of byte written<br />
}<br />
*eraseEEWord and writeEEWord are implemented in assembly.<br />
.global _eraseEEWord<br />
_eraseEEWord:<br />
push TBLPAG <br />
mov w0, NVMADRU ;w0 = base of eeData<br />
mov w1, NVMADR ;w1 = offset for eeData in word<br />
mov #0x4044, w0 <br />
mov w0, NVMCON ;Set to erase operation<br />
push SR ;Disable global interrupts<br />
mov #0x00E0, w0<br />
ior SR<br />
mov #0x55, w0 ;Write the KEY sequence<br />
mov w0, NVMKEY<br />
mov #0xAA, w0 <br />
mov w0, NVMKEY<br />
bset NVMCON, #15 ;Start the erase cycle, bit 15 = WR<br />
nop<br />
nop<br />
L1: btsc NVMCON, #15 ;while(NVMCONbits.WR)<br />
bra L1<br />
clr w0<br />
pop SR ;Enable global interrupts<br />
pop TBLPAG<br />
return<br />
<br />
.global _writeEEWord<br />
_writeEEWord:<br />
push TBLPAG ;w0 = base of eeData<br />
mov w0, TBLPAG ;w1 = offset for eeData in byte<br />
tblwtl [w2], [w1] ;w2 = pointer to user buffer<br />
mov #0x4004, w0 ;Set to write operation<br />
MOV w0, NVMCON<br />
push SR ;Disable global interrupts<br />
mov #0x00E0, w0<br />
ior SR<br />
mov #0x55, w0 ;Write the KEY sequence<br />
mov w0, NVMKEY<br />
mov #0xAA, w0 <br />
mov w0, NVMKEY<br />
bset NVMCON, #15 ;Start the erase cycle, bit 15 = WR<br />
nop<br />
nop<br />
L2: btsc NVMCON, #15 ;while(NVMCONbits.WR)<br />
bra L2<br />
clr w0<br />
pop SR ;Enable global interrupts<br />
pop TBLPAG<br />
return<br />
<br />
===Simple PWM (Output Compare Module)===<br />
<br />
----<br />
<br />
*The PWM module consists of 8 channels using the output compare module of dsPic.<br />
*These channels are locate at pin 46 (OC1), 49 (OC2), 50 (OC3), 51 (OC4), 52 (OC5), 53 (OC6), 54 (OC7), 55 (OC8). These pins are shared with port D.<br />
*The range of PWM freqeuencies obtainable is 2Hz to 15MHz (See Figure 6.3). Suggested range of operation is 2Hz to 120kHz. The relationship between resolution ''r'' and PWM frequency ''f''<sub>PWM</sub> is given by:<br />
f<sub>PWM</sub> = f<sub>CY</sub>/(Prescale*10<sup>rlog(2)</sup>)<br />
<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 6.3 Relationship of Resolution and PWM Frequency<br />
! Resolution (bit) !! Prescale=1 !! Prescale=8 !! Prescale=64 !! Prescale=256<br />
|- <br />
|1||15,000,000 ||1,875,000 ||234,375||58,594 <br />
|- <br />
|2||7,500,000 ||937,500 ||117,188 ||29,297 <br />
|- <br />
|3||3,750,000 ||468,750 ||58,594 ||14,648 <br />
|- <br />
|4||1,875,000 ||234,375 ||29,297 ||7,324 <br />
|- <br />
|5||937,500 ||117,188 ||14,648 ||3,662 <br />
|- <br />
|6||468,750 ||58,594 ||7,324 ||1,831 <br />
|- <br />
|7||234,375 ||29,297 ||3,662 ||916 <br />
|- <br />
|8||117,188 ||14,648 ||1,831||458 <br />
|- <br />
|9||58,594 ||7,324 ||916 ||229 <br />
|- <br />
|10||29,297 ||3,662 ||458 ||114 <br />
|- <br />
|11||14,648 ||1,831 ||229||57 <br />
|- <br />
|12||7,324 ||916 ||114 ||29 <br />
|- <br />
|13||3,662 ||458 ||57 ||14 <br />
|- <br />
|14||1,831 ||229 ||29 ||7 <br />
|- <br />
|15||916 ||114 ||14 ||4 <br />
|- <br />
|16||458 ||57 ||7 ||2 <br />
|-<br />
|}<br />
<br />
====open()====<br />
*A timer (either Timer 2 or 3) is needed to determine the pwm period. The following code uses timer 2 for all 8 channels.<br />
void pwm_open(void){<br />
OC1CON = 0; OC2CON = 0; //Disable all output compare modules<br />
OC3CON = 0; OC4CON = 0;<br />
OC5CON = 0; OC6CON = 0;<br />
OC7CON = 0; OC8CON = 0;<br />
//============================================================<br />
TMR2 = 0; // Clear register<br />
PR2 = 0xFFFF; // Set to Maximum<br />
//============================================================<br />
_T2IF = 0; // Clear interrupt flag<br />
_T2IE = 0 // Enable interrupts<br />
//============================================================<br />
T2CONbits.TCS = 0; // Use internal clock source<br />
T2CONbits.TCKPS = 0; // Prescale Select 1:1<br />
//============================================================<br />
T2CONbits.TON = 1; // Start the timer <br />
}<br />
<br />
====ioctl()====<br />
*User should select the channel and set the pwm period using the functions below before issuing the duty cycle:<br />
char pwm_ioctl(unsigned char request, unsigned long* argp){<br />
unsigned int value;<br />
unsigned char mask;<br />
switch(request){<br />
case PWM_SET_PERIOD:<br />
return setPeriodNPrescale(argp[0]);<br />
case PWM_SELECT_CH:<br />
pwm_channel = argp[0];<br />
mask = 0x01 << pwm_channel;<br />
pwm_status = pwm_status | mask;<br />
return 0;<br />
default:<br />
return -1;<br />
}<br />
}<br />
char setPeriodNPrescale(unsigned long value_ns){<br />
unsigned long ans;<br />
unsigned long long numerator = (unsigned long long)value_ns*SYSTEM_FREQ_MHZ;<br />
int index= -1;<br />
unsigned long denominator;<br />
//-------------------------------------------------<br />
do{<br />
denominator = (unsigned long)1000*pwm_prescale[++index];<br />
ans = (unsigned long)(((long double)numerator/denominator) + 0.5) - 1; //round to nearest int<br />
} while(ans > 0x0000FFFF && index < 3);<br />
//-------------------------------------------------<br />
if(ans > 0x0000FFFF)<br />
return -1;<br />
//-------------------------------------------------<br />
T2CONbits.TON = 0; // Turn off the timer<br />
T2CONbits.TCKPS = index; // Change prescale factor<br />
PR2 = (unsigned int) ans; // Set to Maximum<br />
T2CONbits.TON = 1; // Turn on the timer <br />
//-------------------------------------------------<br />
return 0;<br />
}<br />
<br />
====write()====<br />
*User can change the duty cycle using the following functions<br />
int pwm_write(unsigned long* buf){<br />
if((pwm_status & (0x01 << pwm_channel)) == 0){<br />
return -1; //Channel has not been enabled<br />
}<br />
switch(pwm_channel){<br />
case 0:<br />
OC1RS = calcDCycle(buf[0]); OC1R = OC1RS; <br />
OC1CONbits.OCM = 6; //Simple PWM, Fault pin disabled<br />
break;<br />
case 1:<br />
OC2RS = calcDCycle(buf[0]); OC2R = OC2RS; <br />
OC2CONbits.OCM = 6; //Simple PWM, Fault pin disabled<br />
break;<br />
...<br />
case 7:<br />
OC8RS = calcDCycle(buf[0]); OC8R = OC8RS; <br />
OC8CONbits.OCM = 6; //Simple PWM, Fault pin disabled<br />
break; <br />
default:<br />
return -1;<br />
}<br />
return 4;<br />
}<br />
unsigned int calcDCycle(unsigned long value_ns){<br />
unsigned long long numerator = (unsigned long long)value_ns*SYSTEM_FREQ_MHZ;<br />
unsigned int index = T2CONbits.TCKPS;<br />
unsigned long denominator = (unsigned long)1000*pwm_prescale[index];<br />
return (unsigned int)(((long double)numerator/denominator) + 0.5) - 1; //round to nearest int<br />
}<br />
<br />
====Propagration Delay====<br />
*PWM channels sharing the same timer will have their PWM signals synchronised (i.e. the HIGH state of the duty cycle are all triggered together).<br />
*To introduced delay to the PWM signals, the signal from selected channels may be made to pass through a series of inverters (e.g. 74HC14D). This adds propagation delay to the signal.<br />
*However, as propagration delay of logic gates depends on applied voltage, temperature and load capacitance, the accuracy is low and performance is poor. For accurate delay, delay lines may be used, but they are expensive.<br />
<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 6.4 Propagation Delay of [http://www.nxp.com/acrobat_download/datasheets/74HC_HCT14_3.pdf Philips 74HC14D]<sup>[1], [2]</sup><br />
! !! 3.3V !! !! !! 5.0V !! !!<br />
|- <br />
! Number of Gates !! A !! B !! C !! A !! B !! C<br />
|- <br />
| 2 <br />
| 21ns (10.5)|| 23ns (11.5)|| 22ns (11.0)<br />
| 15ns (7.5)|| 14ns (7.0)|| 14ns (7.0)<br />
|-<br />
| 4 <br />
| 45ns (11.3)|| 46ns (11.5)|| 46ns (11.5) <br />
| 30ns (7.5)|| 30ns (7.5)|| 30ns (7.5)<br />
|-<br />
| 6 <br />
| 69ns (11.5)|| 70ns (11.7)|| 72ns (12.0) <br />
| 45ns (7.5)|| 46ns (7.7)|| 47ns (7.8)<br />
|- <br />
|}<br />
[1] Data in specification for 4.5V: Typical 15ns, Maximum 25ns<br><br />
[2] Data in specification for 6.0V: Typical 12ns, Maximum 21ns<br />
<br />
===DSP Library===<br />
<br />
----<br />
*Library functions in <dsp.h> include the following categories: <br />
#Vector<br />
#Window<br />
#Matrix<br />
#Filtering<br />
#Transform<br />
#Control<br />
<br />
====Data Types====<br />
*Signed Fractional Value (1.15 data format)<br />
**Inputs and outputs of the dsp functions adopt 1.15 data format, which consumes 16 bits to represent values between -1 to 1-2<sup>-15</sup> inclusive.<br />
**Bit<15> is a signed bit, positive = 0, negative = 1.<br />
**Bit<14:0> are the exponent bits ''e''.<br />
**Positive value = 1 - 2<sup>-15</sup>*(32768 - ''e'')<br />
**Negative value = 0 - 2<sup>-15</sup>*(32768 - ''e'')<br />
*40-bit Accumulator operations (9.31 data format)<br />
**The dsp functions use the 40 bits accumalators during arithmatic calculations.<br />
**Bit<39:31> are signed bits, positive = 0x000, negative = 0x1FF.<br />
**Bit<30:0> are exponent bits.<br />
*IEEE Floating Point Values<br />
**Fractional values can be converted to Floating point values using: '''fo = Fract2Float(fr);''' for fr = [-1, 1-2<sup>-15</sup>]<br />
**Floating point values can be converted to Fractional values using: '''fr = Float2Fract(fo);''' or '''fr = Q15(fo);''' for fo = [-1, 1-2<sup>-15</sup>]<br />
**Float2Fract() is same as Q15(), except having saturation control. When +ve >= 1, answer = 2<sup>15</sup>-1 = 32767 (0x7FFF). When -ve < -1, answer = -2<sup>15</sup> = -32767 (0x8000)<br />
<br />
===Build-in Library===<br />
<br />
----<br />
*Some assembler operators can only be accessed by inline assembly code, for example, <br />
#Manuipulation of accumulators A and B (add, sub, mul, divide, shift, clear, square)<br />
#Bit toggling<br />
#Access to psv (program space visiblity) page and offset<br />
#Access to table instruction page and offset<br />
*Built-in functions are written as C-like function calls to utilize these assembler operators.<br />
<br />
<br />
==Bootloader Development==<br />
<br />
===Concepts===<br />
*Programming with ICSP is useful when the target board is produced in batch. The producer can download a program even when the chip is on the target board.<br />
*However, ICSP requires an external programmer.<br />
*To allow the user to change the program after production but without the need of an external programmer, bootloader becomes useful.<br />
*Bootloader is a small program installed via ICSP. Everytime the device is reset, the bootloader is run first. The bootloader first detects the default serial channel whether the user wishes to download a new program to the device. If so, the bootloader will pause there, and wait for the user to download the hex file from the PC. The hex file is written to the device via RTSP instructions in the bootloader. If a new download is not necessary, the bootloader redirects to the previously installed user's program.<br />
*The disadvantage of bootloaders is that they consume some of the memory of the device.<br />
<br />
<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 7.1 Free bootloaders for dsPIC<br />
! Developer<br />
! Source<br />
! Platform<br />
! User Guide<br />
! Remarks<br />
|- valign="top"<br />
| [http://www.ingenia-cat.com/index.php?lang=en ingenia]<br />
| [http://www.ingenia-cat.com/download/iBL.s Assembly]<br />
| [http://www.ingenia-cat.com/download/ingeniadsPICbootloader1.1.zip Windows]<br />
| [http://www.ingenia-cat.com/reference/pdf/iBL.UG.V1.2.pdf pdf]<br />
| <br />
*Works for all dsPIC supporting RTSP<br />
*Auto baudrate detection<br />
*Use about 1.15% of the flash memory space (0xAFFF-0xAE00)/(0xAFFF-0x0100)<br />
*Development of Linux platform is underway<br />
*Modification of code for dsPIC30F5011 is successful<br />
|-valign="top"<br />
| [http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm Tiny]<br />
| [http://www.etc.ugal.ro/cchiculita/software/tinybld191.zip Assembly]<br />
| Windows<br />
| [http://www.etc.ugal.ro/cchiculita/software/tinybldusage.htm Web]<br />
| <br />
*By default, only supports 601X, 601X, 401X, 2010<br />
*Smaller code size than ingenia, but not as easy to modify<br />
|-valign="top"<br />
| [http://www.via.si/software/dsPIC_bootloader/ Elektronika]<br />
| [http://www.via.si/software/dsPIC_bootloader/data/ Hex]<br />
| Windows<br />
| [http://www.via.si/software/dsPIC_bootloader/data/README.txt txt]<br />
| <br />
*Only works for dsPIC30F6014 serial port UART2 at baudrate 57600<br />
|-<br />
|}<br />
<br />
===dsPicBootloader===<br />
<br />
*The bootloader developed by ingenia is open source and it has been modified (see below) to suit our development using dsPic30f5011.<br />
*The bootloader (hereafter called dsPicBootloader) employs the following settings:<br />
# Use U2ART channel<br />
# Use FRC, PLL16<br />
# For 5011, the bootloader is located between 0x00AE00 to 0x00AFFE (512bytes). Refer to C:\Program Files\Ingenia\ingeniadsPICbootloader\ibl_dspiclist.xml after installing the GUI interface.<br />
*Changes made to [http://www.ingenia-cat.com/download/iBL.s assembly code] includes:<br />
1. including p30f5011.gld and p30f5011.inc<br />
.include "p30f5011.inc"<br />
2. changing the config code of UART #0x8420 -> #0x8020<br />
; Uart init<br />
mov '''#0x8020''', W0 ; W0 = 0x8020 -> 1000 0000 0010 0000b<br />
mov W0, U2MODE ; Enable UART, AutoBaud and 8N1<br />
clr U2STA<br />
3. changing the start address 0xAE00 - 0x0100 = 0AD00<br />
.equ CRC, W4<br />
.equ ACK, 0x55<br />
.equ NACK, 0xFF<br />
.equ USER_ADDRESS, 0x0100<br />
.equ START_ADDRESS, '''0xAD00''' ; Relative to 0x0100<br />
4. using Internal FRC and PLL16<br />
config __FOSC, CSW_FSCM_OFF & '''FRC_PLL16''' ;Turn off clock switching and<br />
;fail-safe clock monitoring and<br />
;use the Internal Clock as the<br />
;system clock<br />
5. disabling MCLR (optional)<br />
config __FBORPOR, PBOR_ON & BORV_27 & PWRT_16 & '''MCLR_DIS'''<br />
;Set Brown-out Reset voltage and<br />
;and set Power-up Timer to 16msecs<br />
6. changing all the related registers of U1ART to U2ART, all U1XXX => U2XXX<br />
'''U2MODE, U2STA, U2BRG, U2RXREG, U2TXREG'''<br />
7. changing all the related registers of IC1 to IC2, all IC1XXX => IC2XXX<br />
'''IC2CON, #IC2IF, #IC2IE'''<br />
<br />
===dsPicProgrammer (Java-based Multi-Platformed)===<br />
*Ingenia developed a programmer (PC-side) that works only in Windows environment. The project for Linux environment is currently suspended.<br />
*A simple programmer (hereafter called dsPicProgrammer) written in Java based on the library developed by [http://www.rxtx.org/ RXTX] has been developed here. The programmer supports both Linux and Windows environments, and may be used as a substitution for the official programmer developed by ingenia.<br />
*The programmer has the following specification and limitations:<br />
#Can be used on both Linux and Windows platforms.<br />
#Adjustable baudrate (9600bps to 57600bps).<br />
#Support programming of dsPIC30F5011 and dsPIC33FJ128GP306 devices (Developers may add your devices).<br />
#Protection against overwriting bootloader codes on devices.<br />
#Detection if application program does not have its reset() at user's code start address.<br />
#Reprogramming can be done without powering down the target board, provided the user's program is compliant to that stated below.<br />
#Target board will run the user's program after programming is done.<br />
#Can be used with USB-Serial Cables. Below is a list of tested cable:<br />
::[http://www.prolific.com.tw/eng/Products.asp?ID=59 Prolific PL-2303 USB to Serial Bridge Controller]: [http://www.prolific.com.tw/eng/downloads.asp?ID=31 Driver download]<br />
<br />
===Special Consideration===<br />
*The bootloader assumes that the user program starts at address 0x100. This is usually the case, but there are always exceptions.<br />
*To ensure that the user program always starts at address 0x100, you can create a customized linker script and customized reset() function as follows:<br />
:*Copy and modify the file named "crt0.s" from the directory "C:\Program Files\Microchip\MPLAB C30\src\pic30" to the project directory and include it.<br />
.section .reset, code //previously .section .libc, code <br />
:*Copy and modify the linkerscript for the device (e.g. p30f5011.gld) to the project directory and include it.<br />
.text __CODE_BASE :<br />
{<br />
*(.reset); //<-insert this line here<br />
*(.handle);<br />
*(.libc) *(.libm) *(.libdsp); /* keep together in this order */<br />
*(.lib*);<br />
*(.text);<br />
} >program<br />
<br />
===Communication Protocol===<br />
<br />
+-------------------+ +-------------------+----------------+<br />
| dsPicProgrammer | | dsPicBootloader | User's Program |<br />
+-------------------+ +-------------------+----------------+<br />
| PC | | Target dsPic |<br />
+-------------------+ +------------------------------------+<br />
| COM PORT |=============| UART |<br />
+-------------------+ +------------------------------------+<br />
<br />
* '''Stage 1: User's Configuation'''<br />
**Select a COM port channel<br />
**Select a baudrate<br />
**Select the user hex file<br />
java -jar dsPicProgrammer.jar COM1 19200 foo.hex<br />
* '''Stage 2: Resetting Target Device'''<br />
**dsPicProgrammer sends a Break character (pull UART-TX to low logic, which is normally high).<br />
**User's program on dsPic detects the break character and reset the chip<br />
::NOTE: The user's program is expected to have the following code in order to enable this function. Otherwise, the target board must be restarted manually.<br />
void _ISR _U2RXInterrupt(void)<br />
{<br />
//No Framming error<br />
if( U2STAbits.FERR == 0)<br />
{<br />
//Normal procedure<br />
}<br />
//Framming error<br />
else<br />
{<br />
if ( U2STAbits.URXDA ){<br />
unsigned char data;<br />
data = (unsigned char) U2RXREG;<br />
if(data == 0x00){<br />
// A break char has been received: <br />
// U2RX has been pulled to zero for more than 13 bits<br />
// This is used to reboot the pic<br />
mdelay(800); //wait for break character to clear<br />
asm("reset"); //software reset<br />
}<br />
} <br />
}<br />
_U2RXIF = 0; //Clear the flag<br />
}<br />
* '''Stage 3: Entering Ingenia's Protocol'''<br />
** Transmission is conducted in 8N1, i.e. 8-bit, no parity, 1 stop-bit<br />
** Communication Protocol is reviewed in [http://www.ingenia-cat.com/reference/pdf/iBL.UG.V1.2.pdf ingenia bootloader user's guide] section 2.1.3. The following summarises the key steps on the PC side (Refer also to section 2.2.2).<br />
::#Autobaud rate detection: dsPicProgrammer continuously sends a character "U" [0x55] via COM port and waits for an acknowledgment character "U", [ACK] = [0x55]<br />
::#Version Control: dsPicProgrammer sends the command character [0x03]. On success, dsPicProgrammer receives 3 characters i) Major Version ii) Minor Version iii) Acknowledgment [0x55]<br />
::#Device ID Monitoring: dsPicProgrammer sends the read command character [0x01] + 24-bit address [High][Medium][Low] (0xFF0000). Then, it receives 4-byte data [High][Medium][Low][ACK]<br />
::#Load the user hex file and check integrity<br />
::#Start Programming: dsPicProgrammer issues the write command character [0x02] + 24-bit address [High][Medium][Low]+ Number of bytes [N] + [data 0] + [data 1] + ... + [data N-1] + [CRC]=(INTEL HEX8 Checksum - Sum modulo 256) and receives [ACK] or [NACK] = [0xFF]<br />
::NOTE: Writing is in row mode access (i.e. erase and write a whole row, each row has 32 instructions, or 96 bytes because each instruction has 24 bits)<br />
* '''Stage 4: Goto User's Program'''<br />
**dsPicProgrammer sends the goto user code command [0x0F]<br />
<br />
<br />
==USB-RS232 Bridge==<br />
<br />
*As USB ports are becoming more and more common, COM ports and Parallel ports may be redundant in the next few years. This section explore the possibilities of programming the target board through a USB port.<br />
*There are two options:<br />
#Use an external USB/RS232 adaptor, the driver will emulate a virtual COM port, such as [http://www.prolific.com.tw/eng/downloads.asp?ID=31 Prolific] and [http://www.ftdichip.com/Drivers/VCP.htm FDTI]. Ingenia has tested its bootloader with some USB-232 manufacturers (silabs, FTDI, etc..). However, the programming failed with our Prolific adapter. Application program may use [http://java.sun.com/products/javacomm/ JavaComm API] (javax.comm) and/or [http://www.rxtx.org/ RXTX] to drive the COM port.<br />
#Modified the bootloader program on PC to support USB communication. e.g. using [http://jusb.sourceforge.net/ jUSB] and [http://javax-usb.org/ JSR-80] (javax.usb). External circuits such as PIC18F4550 and MAX232 are required.<br />
<br />
|--User's App.--|-------Device Manager------|-------USB-RS232 Interface------|---dsPIC---|<br />
Option 1:<br />
+-------------+ +----------+ +----------+ +---+ +------------+ +-----+ +--------+<br />
| Application |--| JavaComm |--| Virtual |==|USB|--| FDTI |--|RS232|==| Target |<br />
| Program | | RXTX | | COM Port | +---+ | Circuitary | +-----+ | Board |<br />
+-------------+ +----------+ +----------+ +------------+ +--------+<br />
Option 2:<br />
+-------------+ +--------+ +---+ +------------+ +-----+ +--------+<br />
| Application |----------| JSR-80 |==========|USB|--| PIC18F4550 |--|RS232|==| Target |<br />
| Program | | jUSB | +---+ | MAX232 | +-----+ | Board |<br />
+-------------+ +--------+ +------------+ +--------+<br />
<br />
*Currently, when RXTX is incorporated with JavaComm API, operating systems supported include Linux, Windows, Mac OS, Solaris and other operating systems. On the other hand, jUSB and JSR-80 only works for linux.<br />
<br />
===FDTI Chipset===<br />
*FT232RL communicates with PC via USB to provide 1 UART channel.<br />
*Datasheet can be downloaded [http://www.ftdichip.com/Documents/DataSheets/DS_FT232R.pdf here]. <br />
**Refer to Fig. 11 (Page 19) for Bus Powered Configuration.<br />
**Refer to Fig. 16 (Page 24) for for UART TTL-level Receive [RXD -> 1], Transmit [TXD -> 4], Transmit Enable [CBUS2/TXDEN -> 3]. Omit Receive Enable [CBUS3/PWREN#] and use [CBUS2/TXDEN -> 2] <br />
**Refer to Fig. 15 (Page 23) for LED Configuration: [CBUS0/TXLED#] and [CBUS1/RXLED#]<br />
*Virtual COM Port Drivers can be downloaded [http://www.ftdichip.com/Drivers/VCP.htm here].<br />
<br />
<br />
==Programming the Device==<br />
<br />
===Requirements===<br />
*Hardware<br />
#PC with COM port (Windows XP Installed for MPLAB)<br />
#ICD2 Programmer<br />
#Target Board<br />
#5V Power Supply<br />
<br />
*Software<br />
#[http://ww1.microchip.com/downloads/en/DeviceDoc/MP750.zip MPLAB IDE v7.50]: v7.60 is not compatible with our current [http://www.sure-electronics.com/ ICD2 Programmers]. There are consistent "Devices cannot be founded" warnings.<br />
#[http://chungyan5.no-ip.org/websvn/listing.php dsPicProgrammer] ('''dsPicProgrammer.jar''')<br />
#[http://users.frii.com/jarvi/rxtx/download.html RXTX driver]: download and upzip rxtx-2.1-7-bins-r2.zip (Final)<br />
<br />
*Files<br />
#[http://chungyan5.no-ip.org/websvn/listing.php dsPicBootloader] ('''bl_5011.hex'''). Original assembly code by ingenia can be downloaded from [http://www.ingenia-cat.com/download/iBL.s here].<br />
#Application hex file (e.g. '''app.hex''')<br />
<br />
===Loading Bootloader (Once only)===<br />
{|border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 9.1 Loading Bootloader<br />
! Step !! Remarks <br />
|-valign="top"<br />
| Install [http://ww1.microchip.com/downloads/en/DeviceDoc/MP750.zip MPLAB IDE] || <br />
*Do '''NOT''' connect ICD 2 (via USB) to PC<br />
*Execute '''MPLAB vX.XX Install.exe'''<br />
|-valign="top"<br />
| Install USB Driver ||<br />
*Follow the instruction in (C:\Program Files\Microchip\MPLAB IDE\ICD2\Drivers\Ddicd2.htm)<br />
|-valign="top"<br />
| Select Target Chip ||<br />
*Run MPLAB IDE on PC<br />
*Select: Configure>Select Devices...<br />
*Choose dsPIC30F5011<br />
|-valign="top"<br />
| Target <-> ICD 2 ||<br />
*Use six pin cable. Beware of the pin assignments. Only pin 1 - 5 should be used.<br />
*Place Jumper on target board (if any). The Jumper connects target V<sub>cc</sub> to ICD 2.<br />
*Do '''NOT''' power-up the target.<br />
|-valign="top"<br />
| ICD 2 <-> PC ||<br />
*Plug-in ICD 2 to PC via USB cable<br />
*Power-up the target.<br />
*Select: Programmer>Select Programmer>MPLAB ICD 2<br />
*If this is the first time the ICD 2 is connected to PC, MPLAB IDE will automatically download the required OS to ICD 2, wait until it has finished<br />
*If you have not connected and powered up the target, you might see Warnings on invalid device IDs, and/or running self tests.<br />
*See results of self test if necessary: Programmer>Settings, Status Tab. Refer to [http://ww1.microchip.com/downloads/en/DeviceDoc/51331B.pdf ICD2 User's Guide] Chapter 7.<br />
|-valign="top"<br />
| Load Bootloader ||<br />
*Select: File>Import...<br />
*Select '''bl_5011.hex'''<br />
|-valign="top"<br />
| Start Programming ||<br />
*Select: Programmer>Program<br />
|-valign="top"<br />
| Finishing ||<br />
*Power-down the Taget<br />
*Select: Programmer>Select Programmer>None<br />
*Unplug USB cable<br />
|-<br />
|}<br />
<br />
===Loading Firmware===<br />
====Java Environment Setup====<br />
*Download and install the latest JDK or JRE<br />
**Available from [http://java.sun.com/javase/downloads/index.jsp Sun Microsystems] (e.g. JDK 6 Update 3)<br>[[Image:1 1 java.JPG]]<br><br />
*Download and Extract RXTX Driver <br />
**Available from [http://users.frii.com/jarvi/rxtx/download.html RXTX] <br />
**File: rxtx-2.1-7-bins-r2.zip (Final)<br />
**Extract the files using software such as WinRAR<br>[[Image:1 2 rxtx.JPG]]<br><br />
*Copy RXTXcomm.jar<br />
**To C:\Program Files\Java\X\lib\ext (under the latest jre, e.g. X = jre1.6.0_03)<br>[[Image:1 3 rxtxcomm.JPG]]<br><br />
*Copy rxtxSerial.dll<br />
**To C:\Program Files\Java\X\bin (under the lastest jre, e.g. X = jre1.6.0_03)<br />
**For Linux users, copy librxtxSerial.so to /jre/lib/[machine type] (i386 for instance)<br>[[Image:1 4 rxtxserial.JPG]]<br><br />
*Download dsPicProgrammer <br />
**Available from http://chungyan5.no-ip.org/websvn/listing.php <br />
**Expand the latest tag under dsPicProgrammer<br />
**File: dsPicProgrammer.jar<br>[[Image:1 5 dspicprogrammer.JPG]]<br><br />
**Save the file (dsPicProgrammer.jar) and your hex file (foo.hex) to your local directory (e.g. C:\dsPicProgrammer\)<br>[[Image:1 6 dspicprogrammer2.JPG]]<br><br />
====Download Firmware====<br />
*Start a Command Prompt<br />
**Start -> Run<br>[[Image:2 1 run.JPG]]<br><br />
**Enter cmd<br>[[Image:2 2 cmd.JPG]]<br><br />
*Run dsPicProgrammer<br />
**Change to the directory where dsPicProgrammer.jar is located and run the command:<br>java -jar dsPicProgrammer.jar COM1 57600 foo.hex (Windows)<br>java -jar dsPicProgrammer.jar /dev/ttyS0 57600 foo.hex (Linux)<br>where COM1 is your COM Port ID<br>57600 is communication speed [in bps]<br>foo.hex is your firmware new file<br>[[Image:2 3 command.JPG]]<br><br />
**When the program prompt you for an input, press y:<br>[[Image:2 4 prompt.JPG]]<br><br />
**If communication can be established, you should see something like this:<br>[[Image:2 5 progress.JPG]]<br><br />
**Wait until programming is completed.<br>[[Image:2 6 complete.JPG]]<br><br />
====Troubleshooting====<br />
*Invalid COM Port<br />
**In case of selecting an invalid COM port, you should see the error message:<br>gnu.io.NoSuchPortException: Choosing COM Port Error<br>[[Image:3 1 com err.JPG]]<br><br />
*Missing firmware file<br />
**In case of selecting a firmware file that does not exist, you should see the error message:<br>java.io.FileNotFoundException: foo1.hex <The system cannot find the file specified><br>[[Image:3 2 file err.JPG]]<br><br />
*Missing RXTX driver<br />
**In case of missing the RXTX driver, you should see the error message:<br>Exception in thread “main” java.lang.NoClassDefFoundError: gnu/io/UnsupportedCommOperationException<br>[[Image:3 3 rxtx err.JPG]]<br><br />
<br />
<br />
==Remote Access==<br />
*At the moment, local devices (e.g. EEPROM, ADC, DAC, etc.) can only be accessed locally through POSIX functions such as open(), read(), write(), ioctl().<br />
*However, a client may need to access these devices on a remote server. This section reviews the background and gives some ideas on its possible implementation.<br />
<br />
===Requirements===<br />
*A remote file access protocol, to transfer "files" (i.e. device's data) such as:<br />
#[http://en.wikipedia.org/wiki/FTP File Transfer Protocol] (FTP): Required files are copied from sever to client for manipulation<br />
#[http://en.wikipedia.org/wiki/Remote_Shell Remote Shell] (RSH): Required files are copied from sever to client for manipulation<br />
#[http://en.wikipedia.org/wiki/Network_File_System_%28Sun%29 Network File System] (NFS): Required files are manipulated on sever<br />
*An API to access files using a selected protocol, such as:<br />
#[http://www.die.net/doc/linux/man/man2/lam_rfposix.2.html lam_rfposix]: A POSIX-like remote file service for Local Area Multicomputer<br />
#API employed by VxWorks: [http://en.wikipedia.org/wiki/VxWorks VxWorks] is a Unix-like real-time operating system, commonly used for embedded systems.<br />
<br />
===API Reference for VxWorks===<br />
*Reference:<br />
**[http://www.windriver.com/vxworks/ VxWorks Official Website]<br />
**[http://www-cdfonline.fnal.gov/daq/commercial/ OS Libraries API Reference]<br />
*Related Libraies<br />
**netDrv (netDrv.h): an API using FTP or RSH<br />
**nfsDrv (nfsDrv.h): an API using NFS<br />
<br />
<br />
==Conversion to dsPIC33F Devices==<br />
*This section discusses the conversion required from dsPIC30F5011 to dsPIC33FJ128GP306.<br />
*Refer to official document [http://ww1.microchip.com/downloads/en/DeviceDoc/70172A.pdf dsPIC30F to dsPIC33F Conversion Guidelines] (DS70172A).<br />
*Note that this section does not mainly intend to introduce the new functionalities of dsPIC33F devices. It only serves the purpose to summarise the major (if not minimum) changes required to port the setup of dsPIC30 to dsPIC33 devices.<br />
<br />
===Hardware===<br />
*dsPIC33 operates at voltage of 3.3V. A voltage regulator, such as [http://www.national.com/ds.cgi/LM/LM3940.pdf LM3940] can be used to convert 5V supply to 3.3V.<br />
*A 1uF capacitor has to be placed at pin 56 (previously V<sub>SS</sub>, now V<sub>DDCORE</sub>).<br />
<br />
===Software===<br />
<br />
====Configuration Bits====<br />
<br />
----<br />
*dsPIC33 can operate at 40MIPs at maximum. To configure the device using internal FRC, replace the configuration bits setting as follows:<br />
_FOSCSEL(FNOSC_FRCPLL); // FRC Oscillator with PLL<br />
_FOSC(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMD_NONE); <br />
// Clock Switching and Fail Safe Clock Monitor is disabled<br />
// OSC2 Pin Function: OSC2(RC15) as Digital IO<br />
// Primary Oscillator Mode: Disabled<br />
_FWDT(FWDTEN_OFF); // Watchdog Timer Enabled/disabled by user software <br />
*Configure on-chip PLL at runtime as follows (at start of main function):<br />
_PLLDIV = 38; // M=40: PLL Feedback Divisor bits<br />
CLKDIV = 0; // N1=2: PLL VCO Output Divider Select bits<br />
// N2=2: PLL Phase Detector Input Divider bits<br />
OSCTUN = 22; // Tune FRC oscillator, if FRC is used; <br />
// 0: Center frequency (7.37 MHz nominal)<br />
// 22: +8.25% (7.98 MHz)<br />
RCONbits.SWDTEN = 0; // Disable Watch Dog Timer<br />
while(OSCCONbits.LOCK != 1); // Wait for PLL to lock<br />
<br />
====UART====<br />
<br />
----<br />
*No change is required.<br />
<br />
====I2C====<br />
<br />
----<br />
*dsPIC33 supports upto 2 I<sup>2</sup>C devices. As a result, replace all I<sup>2</sup>C related registers with xxI2Cyy to xxI2C'''1'''yy. For examples:<br />
_SI2C1IF = 0; //Clear Slave interrupt<br />
_MI2C1IF = 0; //Clear Master interrupt<br />
_SI2C1IE = 0; //Disable Slave interrupt<br />
_MI2C1IE = 0; //Disable Master interrupt<br />
I2C1BRG = I2C_BRG; // Configure Baud rate<br />
I2C1CONbits.I2CEN = 1;<br />
...<br />
etc.<br />
<br />
====ADC====<br />
<br />
----<br />
*The ADC in dsPic33 is significantly different from that in dsPic30. Specifically, ADC in dsPic33 uses DMA to buffer the adc data. Replace the open, interrupt routine, add and remove codes as follows:<br />
<br />
unsigned int adc_bufA[ADC_MAX_CH] __attribute__((space(dma),aligned(256)));<br />
unsigned int adc_bufB[ADC_MAX_CH] __attribute__((space(dma),aligned(256)));<br />
unsigned int* ADC16Ptr; //Pointer to ADC register buffer, <br />
unsigned char adc_ch_select = 0; //Pointer to channel to be read from<br />
unsigned char adc_data_ready = 0; //Indicate if RAM data is ready for output<br />
unsigned int which_dma = 0; //indicate which adc_buf to be used<br />
<br />
void adc_open(void)<br />
{<br />
// Configure interrupt<br />
_AD1IF = 0; //clear ADC interrupt flag<br />
_AD1IE = 0; //disable adc interrupt<br />
AD1CHSbits.CH0NA = 0;<br />
// Configure analog i/o <br />
_TRISB0 = 1;<br />
_TRISB1 = 1; <br />
AD1PCFG = 0xFFFC; //Enable AN0 (Vref+) and AN1 (Vref-)<br />
AD1PCFGH = 0xFFFF; //AN16-AN31: Disabled<br />
// Configure scan input channels <br />
AD1CSSL = 0x0003; //0 => Skip, 1 => Scan<br />
AD1CSSH = 0x0000; //Skipping AN16-AN31<br />
// ADCCON4:<br />
AD1CON4bits.DMABL = 0; // Each buffer contains 1 word<br />
// ADCCON3:<br />
AD1CON3bits.SAMC = 1; //1TAD for sampling time<br />
AD1CON3bits.ADRC = 0; //Use system clock<br />
AD1CON3bits.ADCS = ADC_ADCS; //each conversion requires 14TAD<br />
// ADCCON2:<br />
AD1CON2bits.VCFG = 3; //External Vref+, Vref-<br />
AD1CON2bits.CSCNA = 1; //Scan input<br />
AD1CON2bits.SMPI = 1; //2 channels are scanned<br />
// ADCCON1:<br />
AD1CON1bits.FORM = 0; //[0:integer]; [2 fractional]; [3 siged fractional]<br />
AD1CON1bits.SSRC = 7; //auto covert, using internal clock source<br />
AD1CON1bits.ASAM = 1; //auto setting of SAMP bit<br />
AD1CON1bits.AD12B = 1; //12-bit, 1-channel ADC operation<br />
AD1CON1bits.ADDMABM = 0; // DMA buffers are built in scatter/gather mode<br />
AD1CON1bits.ADON = 1; // Turn on the A/D converter<br />
// DMA0 Configuration:<br />
DMA0CONbits.AMODE = 2; // Configure DMA for Peripheral indirect mode<br />
DMA0CONbits.MODE = 2; // Configure DMA for Continuous Ping-Pong mode<br />
DMA0PAD=(int)&ADC1BUF0; <br />
DMA0CNT = 1; // generate dma interrupt every 2 samples <br />
// same as SMPI because only 1 dma buffer per channel <br />
DMA0REQ = 13; // Select ADC1 as DMA Request source<br />
DMA0STA = __builtin_dmaoffset(adc_bufA); <br />
DMA0STB = __builtin_dmaoffset(adc_bufB);<br />
_DMA0IF = 0; // Clear the DMA interrupt flag bit<br />
_DMA0IE = 1; // Set the DMA interrupt enable bit<br />
DMA0CONbits.CHEN=1; // Enable DMA<br />
}<br />
<br />
void _ISR _DMA0Interrupt(void)<br />
{<br />
ADC16Ptr = (which_dma == 0)? adc_bufA : adc_bufB; //Update pointer<br />
adc_data_ready = 1;<br />
which_dma ^= 1; //Next buffer to be used<br />
_DMA0IF = 0; //Clear the DMA0 Interrupt Flag<br />
}<br />
<br />
static void adcAdd(unsigned char ch){<br />
unsigned int mask;<br />
mask = 0x0001 << ch;<br />
TRISB = TRISB | mask;<br />
AD1CSSL = AD1CSSL | mask; <br />
AD1PCFG = ~AD1CSSL;<br />
AD1CON2bits.SMPI++; //take one more sample per interrupt<br />
DMA0CNT++; <br />
}<br />
<br />
static void adcRm(unsigned char ch){<br />
unsigned int mask;<br />
mask = 0x0001 << ch;<br />
AD1PCFG = AD1PCFG | mask;<br />
AD1CSSL = ~AD1PCFG;<br />
AD1CON2bits.SMPI--; //take one less sample per interrupt<br />
DMA0CNT--; <br />
}<br />
<br />
====EEPROM====<br />
<br />
----<br />
*There is no EEPROM in dsPIC33 devices. Please consider to use an external EEPROM using I<sup>2</sup>C communication.<br />
<br />
====Simple PWM====<br />
<br />
----<br />
*No change is required.<br />
<br />
===Memory Map for dsPIC33FJ128GP306===<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 11.1 Memory Location<br />
! Type !! Start Address !! End Address !! Size<br />
|-valign="top"<br />
| Flash || 0x000000 ||0x0157FF || 86K<sup>[1]</sup><br />
|-valign="top"<br />
| +--Flash: Reset Vector || 0x000000 ||0x000003 || 4<br />
|-valign="top"<br />
| +--Flash: Interrupt Vector Table || 0x000004 ||0x0000FF || 252<br />
|-valign="top"<br />
| +--Flash: Alternate Vector Table || 0x000104 ||0x0001FF || 252<br />
|-valign="top"<br />
| +--Flash: User Program || 0x000200 ||0x0157FF || 85.5K<br />
|-valign="top"<br />
| Programming Executive || 0x800000 || 0x800FFF || 4K<sup>[1]</sup><br />
|-valign="top"<br />
| Config Registers || 0xF80000 || 0xF80017 || 24<br />
|-valign="top"<br />
| Device ID (0xE5) || 0xFF0000 || 0xFF0003 || 4<br />
|-<br />
|}<br />
[1] Each address is 16-bit wide. Every two addresses correspond to a 24-bit instruction. Each even address contains 2 valid bytes; each odd address contains 1 valid byte plus 1 phathom byte.<br><br />
<br />
===Custom Linker Script to Maximize Space for Constant Data===<br />
*Constant data declared using keyword '''const''' will be stored in the .const section in the flash memory.<br />
*Normally, during compilation, the linker will assign these data after the program code (.text section).<br />
*Since .const is accessed by auto-psv function, to maximize the space for constant data (32kb), the .const section needs to be aligned at 0x80000 boundary.<br />
*This requires the following change in linker script:<br />
<br />
__CONST_BASE = 0x8000;<br />
<br />
.text __CODE_BASE :<br />
{<br />
*(.reset);<br />
*(.handle);<br />
*(.libc) *(.libm) *(.libdsp); /* keep together in this order */<br />
*(.lib*);<br />
/* *(.text); deleted to maximize space for const data */<br />
} >program<br />
<br />
.const __CONST_BASE :<br />
{<br />
*(.const);<br />
} >program<br />
<br />
*If your program is large, after this change in linker script, function calls may involve large jump in the memory map (>32kB). As a result, you may need to enable the large code and large memory model during compilation. In such case, use the following options in your build path:<br />
-mlarge-code -mlarge-data<br />
*Meanwhile, functions that are defined in the standard C libraries, but are replaced with your own implementations (e.g. I/O stubs: open(), read(), write(), lseek(), ioctl() etc.) may have the following linker error:<br />
/usr/pic30-elf/lib//libc-elf.a(fflush.eo)(.libc+0x3c): In function '.LM11':<br />
: Link Error: relocation truncated to fit: PC RELATIVE BRANCH _write<br />
/usr/pic30-elf/lib//libc-elf.a(fclose.eo)(.libc+0x42): In function '.LM18':<br />
: Link Error: relocation truncated to fit: PC RELATIVE BRANCH _close <br />
*To resolve the problem, you need to place the functions in the .libc section rather than in the .text section, like this:<br />
#define LIBC_CODE_LOC __attribute__ ( (section(".libc")))<br />
<br />
int LIBC_CODE_LOC open(const char *pathname, int flags){ ... }<br />
int LIBC_CODE_LOC close(int fd){ ... }<br />
int LIBC_CODE_LOC write(int fd, void* buf, int count) { ... }<br />
int LIBC_CODE_LOC read(int fd, void* buf, int count) { ... }<br />
int LIBC_CODE_LOC ioctl(int fd, int request, void* argp) { ... }<br />
int LIBC_CODE_LOC lseek(int fd, int offset, int whence) { ... }<br />
<br />
===dsPicBootloader and dsPicProgrammer===<br />
*RTSP for dsPIC33F is different from dsPIC30F.<br />
**Row size changes from 32 instructions (96bytes) to 64 instructions (192 bytes)<br />
**Erase operation changes from 1 row to 8 rows<br />
**No EEPROM<br />
*With regards to the above changes, dsPicBootloader and dsPicProgrammer has been modified. In particular, dsPicProgrammer can be used to program both dsPic30F and dsPic33F devices. You can easily add your devices to the source code.<br />
<br />
<br />
==Downloads==<br />
{| border="1" cellspacing="0" cellpadding="5"<br />
|+ Table 12.1 Related software download links for dsPicBootloader and dsPicProgrammer<br />
! Program<br />
! Site 1<br />
! Site 2<br />
! Remarks<br />
|- valign="top"<br />
| JDK<br />
| [http://java.sun.com/javase/downloads/index.jsp website]<br />
| <br />
| Download latest JDK<br />
|- valign="top"<br />
| RXTX<br />
| [http://users.frii.com/jarvi/rxtx/download.html website]<br />
| <br />
| Download rxtx-2.1-7-bins-r2.zip or later<br />
|- valign="top"<br />
| dsPicBootloader v1.3<br />
| [http://chungyan5.no-ip.org/websvn/listing.php click]<br />
| [http://www.opencircuits.com/images/a/a7/DsPicBootloader_1_3_1.zip click]<br />
| Under "dsPicBootloader/", download bl_5011.s or bl_j128gp306.s<br />
|-valign="top"<br />
| dsPicProgrammer v1.3.5<br />
| [http://chungyan5.no-ip.org/websvn/listing.php click]<br />
| [http://www.opencircuits.com/images/9/9e/DsPicProgrammer_1_3_5.zip click]<br />
| Under "dsPicProgrammer/", dowload dsPicProgrammer.jar<br><br>Alternatively, if you want to compile yourself or modify the source code, download <br>all source files under "dsPicProgrammer/" '''plus''' RdFileIntelHex.java under <br>"IntelHexPaser/tags/0.02.00/".<br>You should also install RXTX on your local machine as recommended in the readme file.<br />
|- valign="top"<br />
| Ingenia's bootloader<br />
| [http://www.ingenia-cat.com/en/downloads.php website]<br />
| <br />
| Download original ingenia's bootloader<br />
|-<br />
|}</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=ARMUS_Embedded_Linux_Board&diff=10262ARMUS Embedded Linux Board2007-10-29T01:06:30Z<p>RafaelOrtiz: Undo revision 10243 by 211.242.42.53 (Talk)</p>
<hr />
<div>==Presentation==<br />
ARMUS, an ARM robotic processing system designed by a team of fourth-year undergraduate students in electrical engineering and computer engineering. This project intends to replace the Handy Board, the current microcontroller system used by first-year undergraduate students in our curricula with a more powerful, versatile and up- to- date technology, while preserving ease of use. Our ARMUS processing system offers high processing and memory capabilities at low energy consumption, for a price of around 300$CAD.<br />
<br />
Here is a paper describing the whole project:<br />
[[Media:ArmusPaper.pdf|Article on Armus]]<br />
<br />
==Specs==<br />
The board is made to run Linux. We have sucessfully built and tested the first prototype. It ran Linux 2.4 with no big issues. Since then, we have designed the second version (proto2), but never built it because we graduated.<br />
Here are the specs:<br />
* AT91RM9200 CPU (ARM920T core)<br />
* On board 32MB SDRAM and 8 MB Flash.<br />
* CompactFLash<br />
* SD/MMC trough SPI<br />
* 2 RS232 ports<br />
* JTAG/ICE port<br />
* LCD port on the memory bus, we used a graphical LCD of 64x128<br />
* 10baseT Ethernet<br />
* USB Host and Device<br />
* CAN port<br />
* Audio (TLC320AIC23B: stereo out, stereo in, microphone in, 44.1kHz 16 bits)<br />
* 48 IOs and 10 ADCs on a PIC18F8310<br />
* 4x dsPIC30f3010 for motor control (4 DC, 4 servo, 4 capture/compare, 4 quad encoder, 8 more ADCs)<br />
<br />
* Power supply is done with two switching power supplies (3.3V and 5V) to minimize power comsuption.<br />
<br />
==Design Files==<br />
Here are the whole hardware design tree. These [[Media:ArmusHardware.zip|Project files]] were made using Altium designer 2004 SP4. They include the schematics and the PCB files. I would gladly post a PDF version, but somehow pins number and names get affected by the operations.<br />
<br />
There is a free "Altium Viewer" license availlable at www.altium.com, one should be able to view the whole project with it.<br />
<br />
Here are the [[Media:ArmusGerber.zip|Gerber files for Armus]], All optimized for Sierra Proto Express, wich did a fantastic job on the first proto run at very low cost with their "no-touch 4-layer" service. To use any other fab house remember that trace/space is 6 mils, and minimum hole size is 15mils.<br />
<br />
==Software Drivers and Kernels==<br />
THIS PAGE IS UNDER CONSTRUCTION, COME BACK SOON!<br />
I still need to get the software part together...<br />
<br />
[[Category:Projects]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Digikey&diff=10261Digikey2007-10-29T01:05:37Z<p>RafaelOrtiz: Undo revision 10253 by 66.132.221.18 (Talk)</p>
<hr />
<div>{| align=right<br />
|-<br />
| <br />
[[Image:Digikey-Logo.gif|Digikey]]<br />
|}<br />
<b>Description:</b><br> The defacto standard for small parts ordering. Once you get used to their interface/search engine, you'll cuss at every other parts website out there. They are great. $25 minimum order. Same day shipping. They have a lot of stock items, but a lot of non-stocked items so don't believe the catalog.<br />
<br />
<b>Website:</b><br><br />
[http://www.digikey.com www.digikey.com] of course<br />
<br />
<b>Contact Info:</b><br><br />
1-800-344-4539<br />
<br />
All major credit cards accepted. Many shipping methods. I believe they ship to USA, Canada, and many other countries.<br />
<br />
[[Category:Suppliers]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Manufacturers&diff=10260Manufacturers2007-10-29T01:04:40Z<p>RafaelOrtiz: Undo revision 10248 by 216.56.61.90 (Talk)</p>
<hr />
<div>[[Analog Devices Inc.]] - Amplifiers, Converters, RF/IF Components, MEMS, DSP<br />
<br />
[[CUI]] - Power supplies, power connectors, etc<br />
<br />
[[Molex]] - The great connector company<br />
<br />
[[Nordic Semiconductors]] - ISM Band(s) Transmitters and Transceivers<br />
<br />
[[Samtec]] - USA based mfg of connectors and cables. They have the wacky stuff for reasonable prices.<br />
<br />
[[Microchip]] - Microcontrollers - the great PIC family of microcontrollers<br />
* [http://massmind.org/techref/piclis unofficial PICList discussion forums]<br />
* [http://forum.microchip.com/ official Microchip discussion forums]<br />
<br />
[[Atmel]] - Flash memory, ARM microcontrollers, - and the famous AVR microcontrollers<br />
* [http://avrfreaks.net/wiki/index.php/ unofficial Atmel AVR discussion forums]<br />
<br />
[[STMicroelectronics]] - http://www.st.com/<br />
<br />
Cypress<br />
* [http://psocdeveloper.com/ unofficial Cypress discussion forums]<br />
* official Cypress discussion forums: start at http://cypress.com/ , then choose "Design", "Discussion".<br />
<br />
Philips -- many things, including [[Integrated Circuits | ARM microcontroller]]s<br />
* [http://www.embeddedrelated.com/groups/lpc2000/1.php lpc2000 Discussion Group]<br />
* [http://forum.sparkfun.com/viewforum.php?f=11 Spark Fun Electronics Forum -> Everything ARM and LPC]<br />
<br />
----<br />
<br />
If you want information *about* a particular part, the best place is the datasheet -- usually on the manufacturer's web site.<br />
<br />
If you want the actual part itself, though -- sometimes you can get samples directly from the manufacturer. But that's pretty hit-or-miss.<br />
Your best bet is through some [[distributor]] or [[supplier]].<br />
<br />
''(A "distributor" and a "supplier" are the same thing, right?)''<br />
<br />
[[Category:Manufacturers]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=OpenCircuits:Community_portal&diff=10259OpenCircuits:Community portal2007-10-29T01:03:49Z<p>RafaelOrtiz: -spam</p>
<hr />
<div><br />
Welcome to Open Circuits.<br />
This is a good place to talk about Open Circuits, as a whole.<br />
<br />
We have {{NUMBEROFARTICLES}} articles now. Yay!<br />
<br />
== Anti-Vandalism Bot ==<br />
It is my opinion that this should be the top goal for this site to accomplish.<br />
<br />
: ''We recently updated the $wgSpamRegex ( http://www.mediawiki.org/wiki/Manual:$wgSpamRegex ). It should block nearly all of the kinds of spam we've been seeing in the past. (Use [[Meta:Sandbox]] for testing). --[[User:DavidCary|DavidCary]] 08:46, 6 June 2007 (PDT)''<br />
::The problem is, that this is not a one time thing. It must be updated regulary, so it also works for new kinds of spam --SebDE<br />
<br />
Seeing a lot of stubborn spammers. Can we implement some kind of ip blocking mechanism?, that blocks repeated spam ip's for a week or so. Here's a list of known [[spammer ip]].<br />
:Blocking based on IPs might be usefull if it uses a maintained black or gray list, but the kind of IP blocking is used around here doesn't help much. --SebDE<br />
<br />
Disabling edits from users that aren't logged in might help a lot: http://www.mediawiki.org/wiki/Manual:Faq#How_can_I_prevent_editing_by_anonymous_users.3F --[[User:Mzandrew|Mzandrew]] 14:16, 8 September 2007 (PDT)<br />
:[[User:DavidCary|DavidCary]] wrote: "We want a system in a way that makes it very easy for anyone to help us." on his User Discussion page.<br />
:But it wouldn't hurt if the creation of new sites would be logged in users only. (Would reduce the need to delete certain articles over and over again) --SebDE<br />
<br />
Or if someone's not logged in, could we enable a captcha so that the spammers would at least have to do it manually?<br />
Here's the ReCAPTCHA extension for mediawiki sites: http://www.mediawiki.org/wiki/Extension:ReCAPTCHA<br />
There's also the ConfirmEdit extension. http://www.mediawiki.org/wiki/Extension:ConfirmEdit<br />
--[[User:Mzandrew|Mzandrew]] 13:38, 9 September 2007 (PDT)<br />
:That is way to overdesigned if you know what I mean. And just btw it is hell for accessibility. I would rather see the use other techniques like wgSpamRegex and the use of a maintained IP black list first before using such ugly things... --SebDE<br />
<br />
I have a whole bunch of PIC projects and things I think I can do to contribute to this Wiki, but the spam here is way way out of control. I'm looking at the change logs and I'm seeing 20 spam edits per day. I'm not so sure I want to contribute if my contributions are going to be destroyed in a matter or days. I think requiring a logon to make changes would cut out most of the spam. At this point, the problem is so bad that making things alittle harder for people to make changes is probably worth the benefits.<br />
<br />
Also, this isn't directly related to spam, but it would be nice if the site didn't put nofollow on all the URLs. I think more people would be willing to add project info pages to the wiki if they new it would make them more visable in search engines. The wiki is small enough at this point that if people start abusing this it would be easy to ban or delete their account( assuming the change is made to require a login to make edits)<br />
[[User:Mzoran|Mzoran]] 21:42, 14 October 2007 (PDT)<br />
<br />
== electrical mailing lists ==<br />
Yahoo claims they have<br />
[http://dir.groups.yahoo.com/dir/Science/Engineering/Electrical 1,831 electrical engineering mailing lists].<br />
What would be a good way of letting the people on those lists know about the Open Circuits wiki, without spamming them?<br />
--[[User:DavidCary|DavidCary]] 13:30, 31 May 2006 (PDT)<br />
<br />
* Publish cold fusion howto :-)<br />
* Send one email/week and only once per list. And be on topic, listen carefully for responses.<br />
[[User:Freqmax|Freqmax]] 16:24, 30 July 2007 (PDT)<br />
<br />
== about Open Circuits ==<br />
So, is there any connection between http://OpenCircuits.org/ , http://OpenCircuits.net/ , and this http://OpenCircuits.com/ wiki?<br />
--[[User:DavidCary|DavidCary]] 23:47, 13 June 2006 (PDT)<br />
<br />
No. There is no connection between any of http://opencircuits.com and the other websites listed.<br />
[[User:Chazegh|Chazegh]] 02:55, 18 June 2006 (PDT)<br />
== web rings ==<br />
Document an original microcontroller project and join a PIC webring, or AVR webring. 20 June 2006<br />
<br />
== audio electronics ==<br />
<br />
Is there some other wiki for people to talk about audio electronics?<br />
Or is this Open Circuits the best wiki for talking about things like<br />
''"[http://analog.com/ Analog Devices] AN-221: The Alexander current-feedback audio power amplifier"'' by Mark Alexander<br />
?<br />
<br />
I think I would prefer to offload all the audio electronics controversies to some other wiki<br />
(but which one?).<br />
Still, it would be nice to have some "tips for high-power electronics" here.<br />
I imagine that tips page would list the various quirks of high-power MOSFETs, BJTs, TRIACs, and IGBTs,<br />
and (given a particular motor or speaker or other load)<br />
how to select one over the others,<br />
and various ways of working around those quirks.<br />
--[[User:65.70.89.241|65.70.89.241]] 07:17, 10 August 2006 (PDT)<br />
<br />
I just joined Open Circuits. I have been servicing and designing audio equipment for several years (Recording consoles a specialty) I hope you will have a section for audio electronics. I also work with video projection systems and theatrical lighting (stage struck at an early age) I play electric rock-blues guitar, so I also am interested in tube guitar amps (Marshall and Boogie). And there is a big difference in what a guitar player thinks an amp should do, and what a recording engineer wants an amp for. I think these are valid points for discussion.<br />
I've also got an interest in power supplies (my experience is mostly with linear, but I've started learning about switching designs). In fact that brings me to my question, I have some regulator designs based on the 723 that I'd like to share. How do I go about doing that? I built a replacement for a console /- 18V @6A supply when I couldn't find the original regulator devices. I used 723s with external series pass devices. The unit has been working for close to 10 years now, so I think the design is worth sharing. Is anyone interested? <br />
<br />
I also research discrete op amps like the Jensen 990. I've been working (on and off for years) on a clone of that using more modern, easily available parts and devices. Anyone else?<br />
Finally, in response to the first entry in this section, I too read that application note in Analog Devices Audio/Video Reference Manual. My copy is dated 1992. I've repaired a lot of amplifiers, but haven't built any. If anyone else is hip to this amp I'd like to hear about it. It is a very unique design. I also like the A75 amp design from Nelson Pass and Norman Thagard, and the Leach Amp by Marshall Leach. The last two are pretty normal as far as design goes, not as adventurous as the Alexander with its current-feedback approach.<br />
Aloha, RAF--[[User:66.8.194.185|66.8.194.185]] 14:04, 18 May 2007 (PDT)<br />
<br />
== automotive electronics ==<br />
<br />
Is there some other wiki for people to talk about automobile electronics?<br />
Or is this Open Circuits the best wiki for talking about things like<br />
[http://megamanual.com/ "experimental Do-It-Yourself programmable electronic fuel injection controller"]?<br />
Or should we just point people who want to talk ECUs (engine control units) to the <br />
[http://msefi.com/ MSEFI discussion forum],<br />
even though it sadly lacks a wiki?<br />
--[[User:DavidCary|DavidCary]] 22:36, 2 July 2007 (PDT)<br />
<br />
== inviting bloggers to open circuits ==<br />
<br />
=== how to connect a JTAG probe to a Nokia phone ===<br />
<br />
I'd like to invite bloggers such as GyrosGeier to edit OpenCircuits.<br />
Rather than just spamming him, I think he would be more inclined to help out<br />
if we answered one of his questions first -- such as<br />
[http://hogyros.de/?q=node/167 "If you have information on how to connect a JTAG probe to a Nokia phone, please let me know."]<br />
Maybe I should start a page on [[JTAG]]...<br />
--[[User:DavidCary|DavidCary]] 09:37, 22 September 2006 (PDT)<br />
<br />
The [http://hackedgadgets.com/ Hacked Gadgets blog also has a bunch of cool electronics].<br />
--[[User:DavidCary|DavidCary]] 11:58, 5 January 2007 (PST)<br />
<br />
== red links ==<br />
<br />
The default skin at OpenCircuits currently has "red links" = page exists, "dark red links" = page does not exist.<br />
<br />
I find that confusing. (But not as bad as the wiki that has some links black-on-white, indistinguishable from normal text).<br />
<br />
'''work-around''': Register (it's free, and you don't have to give any personal information), then choose the "preferences" link in the far upper-right corner and then pick any other skin.<br />
<br />
The other skins have coloring that you may be more used to from other wiki: "blue links" = page exists, "red links" = page does not exist.<br />
<br />
--[[User:DavidCary|DavidCary]] 08:58, 18 December 2006 (PST)<br />
<br />
<br />
*** Guys, the red color on links is AwuFul, it brings ppl headaches.<br />
That's the only reason I cant participate ***<br />
<br />
--[[User:Takeda|Takeda]] 16:38, 29 September 2007 (PDT)<br />
<br />
== inviting people from other forums to open circuits ==<br />
<br />
Lots of people talk about circuits for LED lighting at<br />
http://candlepowerforums.com/<br />
.<br />
Perhaps we can talk some of them into contributing here -- perhaps using a page or two of Open Circuits as a FAQ for LEDs and drive circuits.<br />
<br />
== tool lists ==<br />
<br />
Should we have an entire page on "tools", and mention it on the main page?<br />
That risks listing *every* tool anyone has ever heard about,<br />
like the page at<br />
http://massmind.org/techref/tools.htm<br />
.<br />
Yes, I'm responsible for uglier bits on that page;<br />
I think the wide variety of oscilloscopes are particularly confusing.<br />
How could we cut through the confusion?<br />
<br />
I see the "techniques" page already has a list of software tools.<br />
Perhaps it would be nifty to have a short list of all the tools necessary for each technique?<br />
Then a beginner would have a better idea of what tools he really needs to get (rather than looking at a huge list of every tool, and wondering for each one, ''"Am I going to regret buying it when I see it gathering dust? Or am I going to regret not buying it when I need it during a midnight debug session?"'').<br />
<br />
--[[User:DavidCary|DavidCary]] 08:37, 24 January 2007 (PST)<br />
<br />
== Requests For Help ==<br />
Thanks for your help with the camcorder mic.<br />
<br />
== sample component ==<br />
<br />
What is the purpose of the [[Sample Component]] ?<br />
--[[User:DavidCary|DavidCary]] 16:27, 7 May 2007 (PDT)<br />
<br />
----<br />
<br />
<br />
== current surge and battery life ==<br />
<br />
Hi, <br />
<br />
currently my board is using a 3V battery, in every 40msec it will turn on its RF to communicate with the base station. I face a problem here is that my battery life is badly affected. Turning on the RF with cause a current surge. <br />
<br />
Will this surge affect my battery life? If I use a supercapacitor does it helps?<br />
<br />
-- [[User:203.120.164.208]] 04:14, 30 April 2007<br />
<br />
<br />
== MIDI electrical interface ==<br />
<br />
In my opinion, the MIDI interface got a lot of things right that too many later interfaces still trip over.<br />
<br />
* http://www.repairfaq.org/filipg/LINK/F_MIDI.html -- ASCII schematics<br />
* http://www.engadget.com/2005/08/30/how-to-control-csound-with-a-custom-midi-controller-hardware/ -- hand-sketched schematics<br />
* http://www.midi.org/about-midi/electrical.shtml "MIDI Electrical Specification Diagram</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=OpenCircuits:Community_portal&diff=10258OpenCircuits:Community portal2007-10-29T01:02:43Z<p>RafaelOrtiz: Undo revision 10250 by 85.97.7.231 (Talk)</p>
<hr />
<div>[http://www.sibernews.com/cache/images/js/hvcpvg.html Ventenne] [http://www.futurenuke.com/games/images/js/nhpuwh.html Amateur sex video] [http://www.bhdstats.foxspecialops.com/maps/images/js/owvvnx.html Albergo hotel siena] [http://www.sibernews.com/cache/images/js/ghtmra.html Servizio consulenza aziendale] [http://www.sicman.org/components/images/js/ldnnkc.html Iliade riassunto] [http://www.futurenuke.com/games/images/js/ujuwjf.html Home theatre filo] [http://www.sicman.org/components/images/js/ggbatr.html Chat lesbica] [http://www.sicman.org/components/images/js/gpttwu.html Tesi ringraziamento] [http://www.sibernews.com/cache/images/js/rxusaf.html Segnaposti] [http://www.sibernews.com/cache/images/js/dmqtbh.html Video grassone] [http://www.futurenuke.com/games/images/js/lihjcn.html Salotto] [http://www.bhdstats.foxspecialops.com/maps/images/js/lwswcn.html Campeggio corsica] [http://www.electrodrome.net/modules/Forums/cache/images/js/thtiex.html Antinfiammatori non steroidi] [http://www.sibernews.com/cache/images/js/eolooi.html Consulenza legale spezia] [http://www.grammateas.gr/gr/language/lang_english/images/js/grwxbj.html Residence alassio] [http://www.electrodrome.net/modules/Forums/cache/images/js/mefuxe.html Trans napoli] [http://www.futurenuke.com/games/images/js/flnarn.html Www dragon ball z it] [http://www.sibernews.com/cache/images/js/npectf.html Prenotazione hotel napoli] [http://www.futurenuke.com/games/images/js/dgtehe.html Foto annuncio sesso] [http://www.imminent-threat.com/files/images/js/vjknhn.html Incontri gay] [http://www.futurenuke.com/games/images/js/vtqxlv.html Site www oroscopo free com] [http://www.rapidairsoft.hu/components/images/js/hkoshf.html Genoacfc] [http://www.electrodrome.net/modules/Forums/cache/images/js/spmlmf.html Lawsuit loan] [http://www.electrodrome.net/modules/Forums/cache/images/js/uvvsde.html Dave cummings] [http://www.grammateas.gr/gr/language/lang_english/images/js/xqjfxd.html Foto melita] [http://www.imminent-threat.com/files/images/js/ubeudo.html Chat tiscali] [http://www.electrodrome.net/modules/Forums/cache/images/js/bhlsgr.html Produzione docce idromassaggio] [http://www.futurenuke.com/games/images/js/udsjqg.html Cartuccia fiocco] [http://www.sibernews.com/cache/images/js/eiufig.html Euro dollaro] [http://www.sicman.org/components/images/js/pbhxeo.html Fighe strette] [http://www.grammateas.gr/gr/language/lang_english/images/js/dsuufw.html Www albero azzurro it] [http://www.electrodrome.net/modules/Forums/cache/images/js/uprebq.html Farfalla stilizzate] [http://www.futurenuke.com/games/images/js/ogbncp.html Gianni versace moda] [http://www.rapidairsoft.hu/components/images/js/mfokfh.html Incontri amatoriali] [http://www.grammateas.gr/gr/language/lang_english/images/js/cjcciu.html Porno anteprima] [http://www.sibernews.com/cache/images/js/cfswxt.html Pezzi di ricambio] [http://www.rapidairsoft.hu/components/images/js/idrebn.html Rachel bilson nuda] [http://www.rapidairsoft.hu/components/images/js/vibcdv.html Escort napoli] [http://www.futurenuke.com/games/images/js/cckcqu.html Msn messanger web] [http://www.sibernews.com/cache/images/js/qtkibf.html Foto di michele maddaloni] [http://www.aka-execution.com/modules/Forums/cache/images/js/dmafsc.html Enorme seno nero] [http://www.bhdstats.foxspecialops.com/maps/images/js/xucprn.html Americas cup] [http://www.electrodrome.net/modules/Forums/cache/images/js/epibus.html Current mortgage rata] [http://www.electrodrome.net/modules/Forums/cache/images/js/tkrklm.html Prenota albergo bruxelles] [http://www.futurenuke.com/games/images/js/tgvugn.html Racconto lesbo suocera] [http://www.sibernews.com/cache/images/js/tghqrf.html Sborrata bocca multiple] [http://www.sibernews.com/cache/images/js/nqgrfn.html Donna inculata] [http://www.sicman.org/components/images/js/ngrhhl.html Base musica karaoke gratis] [http://www.grammateas.gr/gr/language/lang_english/images/js/jbgjbo.html Veronika zemanova] [http://www.sicman.org/components/images/js/vgiebx.html Nardo silvia] [http://www.sicman.org/components/images/js/qacsgx.html Il gazzettino di padova] [http://www.aka-execution.com/modules/Forums/cache/images/js/bjltet.html Prostatite aulin] [http://www.bhdstats.foxspecialops.com/maps/images/js/qjiblc.html Scarica mp3 andrea bocelli] [http://www.futurenuke.com/games/images/js/aguuda.html Calde labbra] [http://www.rapidairsoft.hu/components/images/js/ilthhs.html Pubblicizzare un sito] [http://www.electrodrome.net/modules/Forums/cache/images/js/bswhpi.html ristorante senso ginevra] [http://www.sibernews.com/cache/images/js/sntnkg.html Fido bancario] [http://www.electrodrome.net/modules/Forums/cache/images/js/acjpqd.html Offerta pc] [http://www.bhdstats.foxspecialops.com/maps/images/js/rhdmlm.html Sfondo jessica polsky] [http://www.futurenuke.com/games/images/js/ojdbtd.html Telecapri] [http://www.sibernews.com/cache/images/js/ituxge.html Albergo riga] [http://www.sibernews.com/cache/images/js/bledlb.html Relazione sociale ch video] [http://www.futurenuke.com/games/images/js/fxmtml.html Tettone italiane] [http://www.electrodrome.net/modules/Forums/cache/images/js/fjmgod.html Mega big tit] [http://www.sibernews.com/cache/images/js/mlikst.html Testi laura pausini] [http://www.electrodrome.net/modules/Forums/cache/images/js/xrfuxf.html Foto di uomini dotati] [http://www.electrodrome.net/modules/Forums/cache/images/js/dvdohm.html Pornattitude] [http://www.electrodrome.net/modules/Forums/cache/images/js/qqstkf.html Viaggio ventaglio] [http://www.electrodrome.net/modules/Forums/cache/images/js/bqumlm.html Brooke skye hardcore] [http://www.rapidairsoft.hu/components/images/js/dlcghv.html Molfetta live] [http://www.futurenuke.com/games/images/js/dwhekd.html Albergo new orleans] [http://www.electrodrome.net/modules/Forums/cache/images/js/lqvjqc.html Vacanza lastminute ischia] [http://www.imminent-threat.com/files/images/js/deqnbt.html Cliphunter interracial] [http://www.electrodrome.net/modules/Forums/cache/images/js/vfrwgq.html Toyota supra for sale] [http://www.sibernews.com/cache/images/js/tdaosp.html Itinerario enogastronomici italia] [http://www.electrodrome.net/modules/Forums/cache/images/js/enpdop.html Alinghi] [http://www.rapidairsoft.hu/components/images/js/gkgrot.html Prenotazione albergo verona] [http://www.electrodrome.net/modules/Forums/cache/images/js/fthwrc.html Teen lesbo] [http://www.sibernews.com/cache/images/js/iftcum.html Giornalista italiana foto nuda sexi] [http://www.sibernews.com/cache/images/js/dulwxa.html Immagini desktop computer] [http://www.aka-execution.com/modules/Forums/cache/images/js/pvehen.html Skipe download] [http://www.aka-execution.com/modules/Forums/cache/images/js/tddfph.html Ricambio auto] [http://www.sibernews.com/cache/images/js/bowgsr.html Teen pissing] [http://www.sibernews.com/cache/images/js/hregoe.html Cartolina elettroniche diddl] [http://www.electrodrome.net/modules/Forums/cache/images/js/enwmfs.html Consiglio di stato] [http://www.sibernews.com/cache/images/js/svmnub.html Link www offerta lastminute com] [http://www.bhdstats.foxspecialops.com/maps/images/js/bubepm.html Siemens sl75] [http://www.sibernews.com/cache/images/js/grqtks.html Foto mestruazioni] [http://www.imminent-threat.com/files/images/js/tkkcdc.html Candela fai te] [http://www.sibernews.com/cache/images/js/iitnmg.html Weekend agriturismo verona] [http://www.sibernews.com/cache/images/js/bqteud.html Barca usata] [http://www.sicman.org/components/images/js/fcwkuh.html Rosaria] [http://www.imminent-threat.com/files/images/js/qstcjp.html Niagara falls] [http://www.electrodrome.net/modules/Forums/cache/images/js/wppacn.html Forme sciopero] [http://www.sicman.org/components/images/js/qlhfxb.html Prestito caltanissetta] [http://www.rapidairsoft.hu/components/images/js/tnvaed.html Thumbzilla free] [http://www.rapidairsoft.hu/components/images/js/dfensd.html Filmup veneto] [http://www.rapidairsoft.hu/components/images/js/vfxkpn.html Debt solution] [http://www.grammateas.gr/gr/language/lang_english/images/js/qnxhhp.html Mini trapano modellismo] [http://www.grammateas.gr/gr/language/lang_english/images/js/vstooi.html Durex easy on] [http://fewest.cn/ fewest.cn] [http://cartuchos.frowns.cn/ cartuchos] [http://lotusexige.pahes.cn/ lotus exige] [http://ronaldcolman.frowns.cn/ ronald colman] [http://toubou.bawds.cn/ toubou] [http://dspagrigento.bawds.cn/ dsp agrigento] [http://plugemule.bawds.cn/ plug emule] [http://camber.fewest.cn/ camber] [http://bawds.cn/index1_2500.html link] [http://nazelmas.bawds.cn/ naz elmas] [http://wwweminemru.bawds.cn/ www eminem ru] [http://lexmark6250.napes.cn/ lexmark 6250] [http://samsungcrt.bawds.cn/ samsung crt] [http://ked.fewest.cn/ ked] [http://thehuncom.bawds.cn/ thehun com] [http://hillssd.bawds.cn/ hill s s d] [http://rayban3216.frowns.cn/ ray ban 3216] [http://sansalvadorlyrics.fewest.cn/ san salvador lyrics] [http://sculac.frowns.cn/ sculac] [http://upsapc350.napes.cn/ ups apc 350] [http://acertm8101wlmi.frowns.cn/ acer tm 8101wlmi] [http://kv28cl10.frowns.cn/ kv 28cl10] [http://ificant50cent.pahes.cn/ if i can t 50 cent] [http://amdopteron275.fewest.cn/ amd opteron 275] [http://tapa.pahes.cn/ tapa] [http://hp82.napes.cn/ hp 82] [http://dragoteaontei.frowns.cn/ dragotea on tei] [http://technicsscdv290.pahes.cn/ technics sc dv290] [http://tvthomson29.frowns.cn/ tv thomson 29] [http://sennheiserhd515.fewest.cn/ sennheiser hd515] [http://ejdubyduby.fewest.cn/ ej duby duby] [http://forkids.pahes.cn/ for kids] [http://nibblet.fewest.cn/ nibblet] [http://fingernike.pahes.cn/ finger nike] [http://renaultmodus.pahes.cn/ renault modus km zero] [http://busterrhyms.frowns.cn/ buster rhyms] [http://beyoncenuda.bawds.cn/ beyonce nuda] [http://nighteyesii.bawds.cn/ night eyes ii] [http://lcd40tv.frowns.cn/ lcd 40 tv] [http://trados65crack.fewest.cn/ trados 6 5 crack] [http://duke.pahes.cn/ duke] [http://vandesfross.frowns.cn/ van des fross] [http://boostergraco.napes.cn/ booster graco] [http://wwwelnuevoherald.pahes.cn/ www elnuevoherald com] [http://anversa.napes.cn/ Anversa] [http://faxlasertelefono.frowns.cn/ fax laser telefono] [http://hotmum.pahes.cn/ hot mum] [http://lcd19gnr.pahes.cn/ lcd 19 gnr] [http://office2004mac.fewest.cn/ office 2004 mac] [http://quelle.fewest.cn/ quelle] [http://trubles.frowns.cn/ trubles] [http://fabermobilisrl.napes.cn/ faber mobili srl] [http://newyorkjfk.pahes.cn/ new york jfk] [http://ps2two.fewest.cn/ ps2 two] [http://lucypinder.pahes.cn/ lucy pinder] [http://napes.cn/index6_1333.html page] [http://lindsaylohannuda.frowns.cn/ lindsay lohan nuda] [http://ptcruiseraroma.pahes.cn/ pt cruiser a roma] [http://needformadnes.bawds.cn/ need for madnes] [http://pahes.cn/index0_1666.html site] [http://gardfield.fewest.cn/ gardfield] [http://kan.fewest.cn/ kan] [http://wwwfrimmcom.fewest.cn/ www frimm com] [http://lecablocco.fewest.cn/ lecablocco] [http://jimmy.bawds.cn/ jimmy] [http://exposedthong.pahes.cn/ exposed thong] [http://dildodansfreemovie.napes.cn/ Dildo dans free movie] [http://jujjj.fewest.cn/ jujjj] [http://bawds.cn/ bawds.cn] [http://pichonu18.frowns.cn/ pichon u 18] [http://magicadventury.bawds.cn/ magic adventury] [http://finepixf455black.pahes.cn/ finepix f455 black] [http://cyber.fewest.cn/ cyber] [http://turni.bawds.cn/ turni] [http://audreyhollander.fewest.cn/ Audrey hollander] [http://marble.bawds.cn/ marble] [http://volvoc70.pahes.cn/ volvo c70] [http://oldgrandma.bawds.cn/ old grandma] [http://eterno.fewest.cn/ eterno] [http://leaverightnow.fewest.cn/ leave right now] [http://supplies.pahes.cn/ supplies] [http://plasma1024x1024.bawds.cn/ plasma 1024x1024] [http://hotdog.pahes.cn/ hot dog] [http://bmw525tds.fewest.cn/ bmw 525 tds] [http://hp8550.fewest.cn/ hp 8550] [http://epl6200.bawds.cn/ epl 6200] [http://uomoragno.fewest.cn/ uomo ragno] [http://shiftyremix.napes.cn/ shifty remix] [http://leeanntweeden.fewest.cn/ leeann tweeden] [http://ibiza2003.pahes.cn/ ibiza 2003] [http://playedalivesafriduo.frowns.cn/ played a live safriduo] [http://a210.pahes.cn/ a 210] [http://specops.frowns.cn/ specops] [http://parcoselv.bawds.cn/ parco selv] [http://nokia31.pahes.cn/ nokia 31] [http://englandtravel.pahes.cn/ england travel] [http://piscinegonfiabili.bawds.cn/ piscine gonfiabili] [http://frowns.cn/index3_2000.html homepage] [http://aspire2023.napes.cn/ aspire 2023] [http://suona.napes.cn/ suona] [http://www.grammateas.gr/gr/language/lang_english/images/js/cmahps.html La coscienza di zeno] [http://www.electrodrome.net/modules/Forums/cache/images/js/jvfrbr.html Volare gratis londra] [http://www.sicman.org/components/images/js/phooka.html Vocabolario albanese] [http://www.rapidairsoft.hu/components/images/js/fccgup.html Mamme troie gratis] [http://www.bhdstats.foxspecialops.com/maps/images/js/eawmbr.html Rosa caracciolo] [http://www.imminent-threat.com/files/images/js/ubetbr.html Catfight] [http://www.sibernews.com/cache/images/js/hmlcnu.html Big cock black] [http://www.sibernews.com/cache/images/js/npqlxo.html Mature legs] [http://www.imminent-threat.com/files/images/js/cbviwt.html Concerto cesare cremonini] [http://www.bhdstats.foxspecialops.com/maps/images/js/fnqgnp.html Tinkerbell] [http://www.sicman.org/components/images/js/wgcdxj.html Software gestionale industria mobile] [http://www.futurenuke.com/games/images/js/hefjmg.html Cumshot movie] [http://www.futurenuke.com/games/images/js/hpqitl.html Dagospia sex] [http://www.sibernews.com/cache/images/js/itedak.html Incesto familiare] [http://www.futurenuke.com/games/images/js/rpisju.html Accessorio motorola razr v3] [http://www.electrodrome.net/modules/Forums/cache/images/js/kboxgh.html Taurina and potassio and retina] [http://www.grammateas.gr/gr/language/lang_english/images/js/ibmlsi.html Vampiro] [http://www.sibernews.com/cache/images/js/gfsoqe.html Caorle] [http://www.sibernews.com/cache/images/js/vpccjx.html W mappy it] [http://www.bhdstats.foxspecialops.com/maps/images/js/ttdgis.html Video fisting gratis] [http://www.sibernews.com/cache/images/js/bjwqtj.html Ls lolitas] [http://www.sibernews.com/cache/images/js/habdvn.html Abbigliamento donna miss sixty] [http://www.sicman.org/components/images/js/mvdtln.html Petto di pollo brasato con vino rosso] [http://www.electrodrome.net/modules/Forums/cache/images/js/wcrxqw.html Hotel maldive] [http://www.futurenuke.com/games/images/js/qchkhb.html Hardsex] [http://www.bhdstats.foxspecialops.com/maps/images/js/wbjlcx.html Prestito statali] [http://www.bhdstats.foxspecialops.com/maps/images/js/twitwb.html Gita mongolfiera] [http://www.aka-execution.com/modules/Forums/cache/images/js/njpxjp.html Massaggiatrice orientale asiatica mulatta] [http://www.sibernews.com/cache/images/js/xhifnr.html Filatelia bologna] [http://www.bhdstats.foxspecialops.com/maps/images/js/pgirit.html Abbigliamento cappotto] [http://www.rapidairsoft.hu/components/images/js/xriwln.html Anguillara] [http://www.grammateas.gr/gr/language/lang_english/images/js/gsxqpc.html Tradimento] [http://www.grammateas.gr/gr/language/lang_english/images/js/ttpmft.html Meiosi informativa] [http://www.grammateas.gr/gr/language/lang_english/images/js/rvutal.html Goku e chichi hentai] [http://www.futurenuke.com/games/images/js/miltof.html Albergo pisa] [http://www.rapidairsoft.hu/components/images/js/wjbfop.html Ministero salute it formazione] [http://www.sibernews.com/cache/images/js/rwdvqg.html Cesare calzatura paciotti] [http://www.futurenuke.com/games/images/js/qmohhx.html Dante alighieri] [http://www.futurenuke.com/games/images/js/vojrrw.html Calcola mutuo] [http://www.sibernews.com/cache/images/js/kpijbt.html Cheapnet] [http://www.imminent-threat.com/files/images/js/jlsikf.html Ministero trasporti] [http://www.sibernews.com/cache/images/js/utowob.html Josh hartnett] [http://www.futurenuke.com/games/images/js/nbnakx.html Tiscali annuncio] [http://www.electrodrome.net/modules/Forums/cache/images/js/qpigix.html Vendita stampante laser] [http://www.bhdstats.foxspecialops.com/maps/images/js/cdsilh.html Pube] [http://www.futurenuke.com/games/images/js/tjbwga.html Anteprime video] [http://www.sibernews.com/cache/images/js/xtkhlt.html Sfondigratis it] [http://www.rapidairsoft.hu/components/images/js/hqabxq.html Teletutto bresciasette] [http://www.futurenuke.com/games/images/js/bnlkob.html Sesso amatoriale gratis] [http://www.imminent-threat.com/files/images/js/rrfvrb.html Karima adebibe gagged] [http://www.grammateas.gr/gr/language/lang_english/images/js/beambh.html Ragazza che piscia] [http://www.grammateas.gr/gr/language/lang_english/images/js/ewkcsp.html Videosorveglianza] [http://www.sibernews.com/cache/images/js/gwacil.html Credenza inglese] [http://www.grammateas.gr/gr/language/lang_english/images/js/codosu.html Guardia finanza online] [http://www.sibernews.com/cache/images/js/lvmnfo.html Noleggio muletto sanremo] [http://www.aka-execution.com/modules/Forums/cache/images/js/baxote.html Fisconline agenzia entrata it] [http://www.electrodrome.net/modules/Forums/cache/images/js/wtlixd.html Pornostar pompini] [http://www.sibernews.com/cache/images/js/ddldgk.html Univaq] [http://www.sicman.org/components/images/js/wdmusp.html Hp photosmart m23] [http://www.electrodrome.net/modules/Forums/cache/images/js/bgrevp.html Foto di incesto] [http://www.sicman.org/components/images/js/mwwktk.html Naruto nudo] [http://www.futurenuke.com/games/images/js/nsmlnp.html Putaria] [http://www.sicman.org/components/images/js/ckwkhe.html Darlina com] [http://www.sibernews.com/cache/images/js/jxisaj.html Software grafica epoc] [http://www.bhdstats.foxspecialops.com/maps/images/js/mhxfsk.html Sandee westgate dirty girl] [http://www.rapidairsoft.hu/components/images/js/mkmgjb.html Ferritina caduta capello] [http://www.electrodrome.net/modules/Forums/cache/images/js/kedvca.html Wind news surf magazine] [http://www.futurenuke.com/games/images/js/aucojw.html Musica pop] [http://www.futurenuke.com/games/images/js/noalqv.html Quattroruote it] [http://www.futurenuke.com/games/images/js/httlvq.html Manuale samsung e720] [http://www.sibernews.com/cache/images/js/wobhlq.html Www pornostar it] [http://www.sibernews.com/cache/images/js/mdhcto.html Hotel bath] [http://www.grammateas.gr/gr/language/lang_english/images/js/xdukth.html Emulatore nintendo ds] [http://www.electrodrome.net/modules/Forums/cache/images/js/wljuel.html Dragonball sexi] [http://www.sicman.org/components/images/js/aiwijw.html Hertz autonoleggio] [http://www.futurenuke.com/games/images/js/aedcqt.html Devon michaels goddess] [http://www.grammateas.gr/gr/language/lang_english/images/js/jpjafa.html Fighe nude] [http://www.sibernews.com/cache/images/js/gumgls.html Aeroporto orio al serio] [http://www.electrodrome.net/modules/Forums/cache/images/js/vibmgv.html Kill teletubbies] [http://www.electrodrome.net/modules/Forums/cache/images/js/pblwnm.html Spedizioni italia] [http://www.futurenuke.com/games/images/js/wntbvw.html Antenna gps] [http://www.aka-execution.com/modules/Forums/cache/images/js/sdcfrp.html Teen porn] [http://www.aka-execution.com/modules/Forums/cache/images/js/mlshhx.html Ammucchiata gallery] [http://www.sibernews.com/cache/images/js/ieftnj.html Albergo 3 stelle praga] [http://www.futurenuke.com/games/images/js/wijjpr.html Gay beef it] [http://www.sibernews.com/cache/images/js/spkddj.html Ermafrodita video] [http://www.sicman.org/components/images/js/lnmflp.html Venezia hotel] [http://www.sicman.org/components/images/js/fiuboq.html Sesso neri] [http://www.grammateas.gr/gr/language/lang_english/images/js/pgifda.html Soluzione marketing] [http://www.sibernews.com/cache/images/js/jbovti.html Asiago] [http://www.electrodrome.net/modules/Forums/cache/images/js/nlbqwq.html Moto usata vendita valledaosta] [http://www.grammateas.gr/gr/language/lang_english/images/js/dptomv.html Lapdance] [http://www.aka-execution.com/modules/Forums/cache/images/js/rrpahd.html Hotel marsiglia] [http://www.futurenuke.com/games/images/js/fvgffv.html Mutuo prima casa banca intesa] [http://www.aka-execution.com/modules/Forums/cache/images/js/ingxhf.html Sfondi pasqua] [http://www.grammateas.gr/gr/language/lang_english/images/js/iibetb.html Ghost rider film] [http://www.grammateas.gr/gr/language/lang_english/images/js/efbula.html Scaricare emule plus] [http://www.electrodrome.net/modules/Forums/cache/images/js/cahrkn.html Ermafrodita video] [http://www.sicman.org/components/images/js/bspeep.html Hotel jolly caserta] [http://www.sibernews.com/cache/images/js/htejrf.html Schizofrenia] [http://theverde.pahes.cn/ the verde] [http://animalporno.napes.cn/ Animal porno free] [http://petertoshphotos.bawds.cn/ peter tosh photos] [http://asusa7v880kt880.bawds.cn/ asus a7v880 kt880 socket a] [http://mashall.napes.cn/ mashall] [http://fewest.cn/index9_500.html home] [http://donadona.napes.cn/ dona dona] [http://bmxghost.pahes.cn/ bmx ghost] [http://sawage.napes.cn/ sawage] [http://fewest.cn/index2_1333.html home] [http://boccapiena.frowns.cn/ bocca piena] [http://easynotea.bawds.cn/ easynote a] [http://powermust1000.napes.cn/ powermust 1000] [http://wd40.frowns.cn/ wd 40] [http://wwwtgcom.bawds.cn/ www tgcom] [http://bebepanda.fewest.cn/ bebe panda] [http://donki.napes.cn/ donki] [http://cathystewart.bawds.cn/ cathy stewart] [http://lacied2160gb.bawds.cn/ lacie d2 160 gb] [http://asussocket939.fewest.cn/ asus socket 939] [http://thoiathoing.napes.cn/ thoia thoing] [http://klaus.pahes.cn/ klaus] [http://pahes.cn/index5_1666.html page] [http://ichabod.bawds.cn/ ichabod] [http://prosoft.frowns.cn/ prosoft] [http://wwwcorbincom.pahes.cn/ www corbin com] [http://houseparty.frowns.cn/ house party] [http://wwwnbacom.frowns.cn/ www nba com] [http://lcd19belinea.pahes.cn/ lcd 19 belinea] [http://klipschrw12.bawds.cn/ klipsch rw12] [http://kirstendunst.bawds.cn/ kirsten dunst] [http://foglia3.pahes.cn/ fogli a3] [http://sapphiretoxic.frowns.cn/ sapphire toxic] [http://cm03.pahes.cn/ cm 03] [http://ikotekpene.frowns.cn/ ikot ekpene] [http://garminstreetpilot.fewest.cn/ garmin streetpilot c330] [http://plasmaphilips.napes.cn/ plasma philips 46] [http://epsonpro4800.bawds.cn/ epson pro 4800 stylus] [http://wwwfuturemarkcom.napes.cn/ www futuremark com] [http://pahes.cn/ pahes.cn] [http://alchooltreatment.pahes.cn/ Alchool treatment] [http://pulsedriver.frowns.cn/ pulsedriver] [http://invarmask.bawds.cn/ invar mask] [http://fravo.napes.cn/ fravo] [http://wwwskullnetcom.bawds.cn/ www skull net com] [http://pahes.cn/index3_2500.html page] [http://cmd40.fewest.cn/ cmd 40] [http://wwwcercacongooogle.pahes.cn/ www cerca con gooogle] [http://qiqihar.bawds.cn/ qiqihar] [http://kerodon.napes.cn/ kerodon] [http://fatfuck.pahes.cn/ fat fuck] [http://codecsdx50.napes.cn/ codecs dx 50] [http://lubango.napes.cn/ lubango] [http://miky.fewest.cn/ miky] [http://verne.napes.cn/ verne] [http://funysexcats.pahes.cn/ funy sex cats] [http://napes.cn/index3_1333.html homepage] [http://frowns.cn/index5_1333.html home] [http://dcrhc2.bawds.cn/ dcr hc 2] [http://l3100.frowns.cn/ l3100] [http://hotshotsgolf2.napes.cn/ hot shots golf 2] [http://freelongmpeg.napes.cn/ free long mpeg hard] [http://lig.frowns.cn/ lig] [http://kelyky.fewest.cn/ kely ky] [http://wwwpeepshow.bawds.cn/ www peep show com] [http://semnalm.bawds.cn/ semnal m] [http://benigni.bawds.cn/ benigni] [http://pendrivemp3fm.napes.cn/ pen drive mp3 fm] [http://napes.cn/index4_2000.html map] [http://eos50e.fewest.cn/ eos 50 e] [http://decodersatfta.frowns.cn/ decoder sat fta] [http://tft913n.frowns.cn/ tft 913n] [http://burda.pahes.cn/ burda] [http://noangels.fewest.cn/ no angels] [http://davidgallagher.bawds.cn/ david gallagher nudo] [http://aceraspire3022.pahes.cn/ acer aspire 3022 wlmi] [http://zeldamemory.pahes.cn/ zelda memory] [http://virushtp.frowns.cn/ virus htp] [http://napes.cn/ napes.cn] [http://mp3index.fewest.cn/ mp3 index] [http://mct.fewest.cn/ mct] [http://arthurrimbaud.bawds.cn/ arthur rimbaud] [http://vaccess.frowns.cn/ vaccess] [http://mutuofineco.bawds.cn/ mutuo fineco] [http://sexyboxer.napes.cn/ sexy boxer] [http://iotevojobene.frowns.cn/ io te vojo bene] [http://gpsroyaltek.napes.cn/ gps royaltek] [http://ram133128.frowns.cn/ ram 133 128] [http://dominagenius.fewest.cn/ domina genius malpensa] [http://webcamporno.pahes.cn/ webcamporno] [http://yoteavise.bawds.cn/ yo te avise] [http://pahes.cn/index2_2500.html url] [http://puou.frowns.cn/ puou] [http://napes.cn/index4_2000.html map] [http://deuxopen3d.bawds.cn/ deux open 3d] [http://uremindme.napes.cn/ u remind me] [http://fewest.cn/ fewest.cn] [http://blackporno.bawds.cn/ Black porno] [http://sdram64.napes.cn/ sdram 64] [http://polskiemp3.frowns.cn/ polskie mp3] vivarerre<br />
Welcome to Open Circuits.<br />
This is a good place to talk about Open Circuits, as a whole.<br />
<br />
We have {{NUMBEROFARTICLES}} articles now. Yay!<br />
<br />
== Anti-Vandalism Bot ==<br />
It is my opinion that this should be the top goal for this site to accomplish.<br />
<br />
: ''We recently updated the $wgSpamRegex ( http://www.mediawiki.org/wiki/Manual:$wgSpamRegex ). It should block nearly all of the kinds of spam we've been seeing in the past. (Use [[Meta:Sandbox]] for testing). --[[User:DavidCary|DavidCary]] 08:46, 6 June 2007 (PDT)''<br />
::The problem is, that this is not a one time thing. It must be updated regulary, so it also works for new kinds of spam --SebDE<br />
<br />
Seeing a lot of stubborn spammers. Can we implement some kind of ip blocking mechanism?, that blocks repeated spam ip's for a week or so. Here's a list of known [[spammer ip]].<br />
:Blocking based on IPs might be usefull if it uses a maintained black or gray list, but the kind of IP blocking is used around here doesn't help much. --SebDE<br />
<br />
Disabling edits from users that aren't logged in might help a lot: http://www.mediawiki.org/wiki/Manual:Faq#How_can_I_prevent_editing_by_anonymous_users.3F --[[User:Mzandrew|Mzandrew]] 14:16, 8 September 2007 (PDT)<br />
:[[User:DavidCary|DavidCary]] wrote: "We want a system in a way that makes it very easy for anyone to help us." on his User Discussion page.<br />
:But it wouldn't hurt if the creation of new sites would be logged in users only. (Would reduce the need to delete certain articles over and over again) --SebDE<br />
<br />
Or if someone's not logged in, could we enable a captcha so that the spammers would at least have to do it manually?<br />
Here's the ReCAPTCHA extension for mediawiki sites: http://www.mediawiki.org/wiki/Extension:ReCAPTCHA<br />
There's also the ConfirmEdit extension. http://www.mediawiki.org/wiki/Extension:ConfirmEdit<br />
--[[User:Mzandrew|Mzandrew]] 13:38, 9 September 2007 (PDT)<br />
:That is way to overdesigned if you know what I mean. And just btw it is hell for accessibility. I would rather see the use other techniques like wgSpamRegex and the use of a maintained IP black list first before using such ugly things... --SebDE<br />
<br />
I have a whole bunch of PIC projects and things I think I can do to contribute to this Wiki, but the spam here is way way out of control. I'm looking at the change logs and I'm seeing 20 spam edits per day. I'm not so sure I want to contribute if my contributions are going to be destroyed in a matter or days. I think requiring a logon to make changes would cut out most of the spam. At this point, the problem is so bad that making things alittle harder for people to make changes is probably worth the benefits.<br />
<br />
Also, this isn't directly related to spam, but it would be nice if the site didn't put nofollow on all the URLs. I think more people would be willing to add project info pages to the wiki if they new it would make them more visable in search engines. The wiki is small enough at this point that if people start abusing this it would be easy to ban or delete their account( assuming the change is made to require a login to make edits)<br />
[[User:Mzoran|Mzoran]] 21:42, 14 October 2007 (PDT)<br />
<br />
== electrical mailing lists ==<br />
Yahoo claims they have<br />
[http://dir.groups.yahoo.com/dir/Science/Engineering/Electrical 1,831 electrical engineering mailing lists].<br />
What would be a good way of letting the people on those lists know about the Open Circuits wiki, without spamming them?<br />
--[[User:DavidCary|DavidCary]] 13:30, 31 May 2006 (PDT)<br />
<br />
* Publish cold fusion howto :-)<br />
* Send one email/week and only once per list. And be on topic, listen carefully for responses.<br />
[[User:Freqmax|Freqmax]] 16:24, 30 July 2007 (PDT)<br />
<br />
== about Open Circuits ==<br />
So, is there any connection between http://OpenCircuits.org/ , http://OpenCircuits.net/ , and this http://OpenCircuits.com/ wiki?<br />
--[[User:DavidCary|DavidCary]] 23:47, 13 June 2006 (PDT)<br />
<br />
No. There is no connection between any of http://opencircuits.com and the other websites listed.<br />
[[User:Chazegh|Chazegh]] 02:55, 18 June 2006 (PDT)<br />
== web rings ==<br />
Document an original microcontroller project and join a PIC webring, or AVR webring. 20 June 2006<br />
<br />
== audio electronics ==<br />
<br />
Is there some other wiki for people to talk about audio electronics?<br />
Or is this Open Circuits the best wiki for talking about things like<br />
''"[http://analog.com/ Analog Devices] AN-221: The Alexander current-feedback audio power amplifier"'' by Mark Alexander<br />
?<br />
<br />
I think I would prefer to offload all the audio electronics controversies to some other wiki<br />
(but which one?).<br />
Still, it would be nice to have some "tips for high-power electronics" here.<br />
I imagine that tips page would list the various quirks of high-power MOSFETs, BJTs, TRIACs, and IGBTs,<br />
and (given a particular motor or speaker or other load)<br />
how to select one over the others,<br />
and various ways of working around those quirks.<br />
--[[User:65.70.89.241|65.70.89.241]] 07:17, 10 August 2006 (PDT)<br />
<br />
I just joined Open Circuits. I have been servicing and designing audio equipment for several years (Recording consoles a specialty) I hope you will have a section for audio electronics. I also work with video projection systems and theatrical lighting (stage struck at an early age) I play electric rock-blues guitar, so I also am interested in tube guitar amps (Marshall and Boogie). And there is a big difference in what a guitar player thinks an amp should do, and what a recording engineer wants an amp for. I think these are valid points for discussion.<br />
I've also got an interest in power supplies (my experience is mostly with linear, but I've started learning about switching designs). In fact that brings me to my question, I have some regulator designs based on the 723 that I'd like to share. How do I go about doing that? I built a replacement for a console /- 18V @6A supply when I couldn't find the original regulator devices. I used 723s with external series pass devices. The unit has been working for close to 10 years now, so I think the design is worth sharing. Is anyone interested? <br />
<br />
I also research discrete op amps like the Jensen 990. I've been working (on and off for years) on a clone of that using more modern, easily available parts and devices. Anyone else?<br />
Finally, in response to the first entry in this section, I too read that application note in Analog Devices Audio/Video Reference Manual. My copy is dated 1992. I've repaired a lot of amplifiers, but haven't built any. If anyone else is hip to this amp I'd like to hear about it. It is a very unique design. I also like the A75 amp design from Nelson Pass and Norman Thagard, and the Leach Amp by Marshall Leach. The last two are pretty normal as far as design goes, not as adventurous as the Alexander with its current-feedback approach.<br />
Aloha, RAF--[[User:66.8.194.185|66.8.194.185]] 14:04, 18 May 2007 (PDT)<br />
<br />
== automotive electronics ==<br />
<br />
Is there some other wiki for people to talk about automobile electronics?<br />
Or is this Open Circuits the best wiki for talking about things like<br />
[http://megamanual.com/ "experimental Do-It-Yourself programmable electronic fuel injection controller"]?<br />
Or should we just point people who want to talk ECUs (engine control units) to the <br />
[http://msefi.com/ MSEFI discussion forum],<br />
even though it sadly lacks a wiki?<br />
--[[User:DavidCary|DavidCary]] 22:36, 2 July 2007 (PDT)<br />
<br />
== inviting bloggers to open circuits ==<br />
<br />
=== how to connect a JTAG probe to a Nokia phone ===<br />
<br />
I'd like to invite bloggers such as GyrosGeier to edit OpenCircuits.<br />
Rather than just spamming him, I think he would be more inclined to help out<br />
if we answered one of his questions first -- such as<br />
[http://hogyros.de/?q=node/167 "If you have information on how to connect a JTAG probe to a Nokia phone, please let me know."]<br />
Maybe I should start a page on [[JTAG]]...<br />
--[[User:DavidCary|DavidCary]] 09:37, 22 September 2006 (PDT)<br />
<br />
The [http://hackedgadgets.com/ Hacked Gadgets blog also has a bunch of cool electronics].<br />
--[[User:DavidCary|DavidCary]] 11:58, 5 January 2007 (PST)<br />
<br />
== red links ==<br />
<br />
The default skin at OpenCircuits currently has "red links" = page exists, "dark red links" = page does not exist.<br />
<br />
I find that confusing. (But not as bad as the wiki that has some links black-on-white, indistinguishable from normal text).<br />
<br />
'''work-around''': Register (it's free, and you don't have to give any personal information), then choose the "preferences" link in the far upper-right corner and then pick any other skin.<br />
<br />
The other skins have coloring that you may be more used to from other wiki: "blue links" = page exists, "red links" = page does not exist.<br />
<br />
--[[User:DavidCary|DavidCary]] 08:58, 18 December 2006 (PST)<br />
<br />
<br />
*** Guys, the red color on links is AwuFul, it brings ppl headaches.<br />
That's the only reason I cant participate ***<br />
<br />
--[[User:Takeda|Takeda]] 16:38, 29 September 2007 (PDT)<br />
<br />
== inviting people from other forums to open circuits ==<br />
<br />
Lots of people talk about circuits for LED lighting at<br />
http://candlepowerforums.com/<br />
.<br />
Perhaps we can talk some of them into contributing here -- perhaps using a page or two of Open Circuits as a FAQ for LEDs and drive circuits.<br />
<br />
== tool lists ==<br />
<br />
Should we have an entire page on "tools", and mention it on the main page?<br />
That risks listing *every* tool anyone has ever heard about,<br />
like the page at<br />
http://massmind.org/techref/tools.htm<br />
.<br />
Yes, I'm responsible for uglier bits on that page;<br />
I think the wide variety of oscilloscopes are particularly confusing.<br />
How could we cut through the confusion?<br />
<br />
I see the "techniques" page already has a list of software tools.<br />
Perhaps it would be nifty to have a short list of all the tools necessary for each technique?<br />
Then a beginner would have a better idea of what tools he really needs to get (rather than looking at a huge list of every tool, and wondering for each one, ''"Am I going to regret buying it when I see it gathering dust? Or am I going to regret not buying it when I need it during a midnight debug session?"'').<br />
<br />
--[[User:DavidCary|DavidCary]] 08:37, 24 January 2007 (PST)<br />
<br />
== Requests For Help ==<br />
Thanks for your help with the camcorder mic.<br />
<br />
== sample component ==<br />
<br />
What is the purpose of the [[Sample Component]] ?<br />
--[[User:DavidCary|DavidCary]] 16:27, 7 May 2007 (PDT)<br />
<br />
----<br />
<br />
<br />
== current surge and battery life ==<br />
<br />
Hi, <br />
<br />
currently my board is using a 3V battery, in every 40msec it will turn on its RF to communicate with the base station. I face a problem here is that my battery life is badly affected. Turning on the RF with cause a current surge. <br />
<br />
Will this surge affect my battery life? If I use a supercapacitor does it helps?<br />
<br />
-- [[User:203.120.164.208]] 04:14, 30 April 2007<br />
<br />
<br />
== MIDI electrical interface ==<br />
<br />
In my opinion, the MIDI interface got a lot of things right that too many later interfaces still trip over.<br />
<br />
* http://www.repairfaq.org/filipg/LINK/F_MIDI.html -- ASCII schematics<br />
* http://www.engadget.com/2005/08/30/how-to-control-csound-with-a-custom-midi-controller-hardware/ -- hand-sketched schematics<br />
* http://www.midi.org/about-midi/electrical.shtml "MIDI Electrical Specification Diagram</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Digital_Potentiometers&diff=10257Digital Potentiometers2007-10-29T01:01:20Z<p>RafaelOrtiz: Undo revision 10255 by 192.18.100.7 (Talk)</p>
<hr />
<div>{{mergefrom|Digitally Programmable Potentiometers}}<br />
The digital Potentiometers made by analog devices (AD5204) has 255 positions can be adjusted by the microcomputer that can receive commands from the computer. This is a great way for analog circuitry to have digital control. This is a chip with 4 digitally controlled POTs and the pots can be daisy chained to have multiple chips controled by a single SPI interface.<br />
<br />
Digikey Part Number: AD5204BN10-ND<br />
<br />
<br />
AD5204 - 4-Channel, 256-Position Digital Potentiometer<br />
<br />
http://www.analog.com/images/Product_Descriptions/40826AD5204_S.jpg<br />
<br />
Datasheet: http://www.analog.com/UploadedFiles/Data_Sheets/140808745AD5204_6_0.pdf<br />
<br />
Availability:<br />
* Free samples: http://www.analog.com/en/prod/0,,761_797_AD5204,00.html#price<br />
* Digikey: http://www.digikey.com/scripts/DkSearch/dksus.dll?Detail?Ref=1480&Row=284443&Site=US (10k version - $5.02)<br />
<br />
Eagle footprint data:<br />
[[Image:AD5204a.png]]<br />
<br />
[[Media:AD5204.zip|Eagle library (footprint, schematic symbol)]]<br />
<br />
[[Category:Components]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=User:DavidCary&diff=10256User:DavidCary2007-10-29T01:00:38Z<p>RafaelOrtiz: /* Open Circuits Sysop */</p>
<hr />
<div>Welcome to my little corner of Open Circuits.<br />
<br />
I think I first stumbled across Open Circuits on 2006-03-01.<br />
I had been starting to set up a electronics-related wiki,<br />
but since this one was already here, why bother?<br />
<br />
Feel free to leave a note on [[User_talk:DavidCary|my talk page]].<br />
<br />
I created the [[WikiNode]].<br />
<br />
Electronic projects:<br />
''(Should I move these to dedicated pages such as [[electronics workbench]], etc.?)''<br />
<br />
== electronics workbench ==<br />
<br />
What exactly do I need for "normal" electronics development?<br />
I have a pile of stuff, and I have a wishlist of more stuff ...<br />
I hope to document which things are important to have, which things are useful but not immediately necessary, and which things ended up just gathering dust.<br />
<br />
I wish there were a place like [http://blog.guykawasaki.com/2007/09/techshop-geek-h.html TechShop] somewhere local.<br />
<br />
* filing cabinet for all the miscellaneous bits of paper. If at all possible, I attach instruction manuals to the actual tool -- but if that is awkward, I stick the instruction manual in this filing cabinet.<br />
<br />
== data collection network ==<br />
<br />
I'm building a "data collection network" that may end up with hundred of microcontroller sensor nodes,<br />
piping data into a PC.<br />
This may turn into a serious medical diagnosis tool.<br />
<br />
== POV display ==<br />
<br />
''(moved to [[POV display]])''<br />
<br />
== Full-color LED lighting ==<br />
<br />
I'm planning to build a silly little toy with 3 LEDs -- one for red, green, and blue --<br />
to show how "additive colors" work (a "color wheel").<br />
(I might just extend it to have a whole spectrum of visible and infrared LEDs, and a prism to show the little spikes in the spectrum that LEDs generate).<br />
<br />
"Red, Green, and Blue LED based white light generation"<br />
by Muthu, Schuurmans, and Pashley (2002)<br />
http://www.advancetransformer.com/uploads/resources/LED_White_Light_Issues&Control_-_White_paper.pdf<br />
<br />
LED illumination applications<br />
http://en.wikipedia.org/wiki/Light-emitting_diode#Illumination_applications<br />
<br />
"How Many Red, Green, and Blue LEDs to make White"<br />
by Don Klipstein 2001<br />
http://members.misty.com/don/ledrgb2w.html<br />
<br />
LED Color Shifting<br />
http://hackedgadgets.com/2006/02/14/wireless-led-color-shifting/<br />
<br />
== "PC Card" PCMCIA ==<br />
<br />
I maintain the<br />
[http://david.carybros.com/html/pc_card_faq.html unofficial PC Card FAQ].<br />
<br />
I'd like to move it to a wiki.<br />
What would be the best wiki to put it on?<br />
Open Circuits?<br />
<br />
-- <br />
DavidCary<br />
<br />
== Open Circuits Sysop ==<br />
<br />
Whee! I'm a sysop at Open Circuits!<br />
The power -- it's rushing to my head!<br />
--[[User:DavidCary|DavidCary]] 15:20, 23 February 2007 (PST)<br />
<br />
<br />
Hi David, will be nice to have antispam measures :).<br />
<br />
--[[User:RafaelOrtiz|RafaelOrtiz]] 18:00, 28 October 2007 (PDT)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=GM862_Cellular_Module&diff=10254GM862 Cellular Module2007-10-29T00:58:47Z<p>RafaelOrtiz: -spam</p>
<hr />
<div>|-<br />
| <br />
[[Image:Main-GM862-0.jpg|GM862]]<br />
|}<br />
<b>Description:</b><br> The GM862 is a GSM cellular module [[Category:Modules]] that enables you to connect to the cellular network using simple 'AT' commands.<br />
<br />
Yes it's as easy as sending:<br />
<br />
<tt>ATD 3035551234;</tt><br />
<br />
Couple down sides to this module:<br><br />
1) The GM862 uses a very specialized 50-pin molex connector that only comes in SMD.<br><br />
2) The GM862 requires 3.8V at 1.9A peak. So you'll need to use the LT1528 as well.<br />
<br />
Cool module. Works anywhere with GSM connectivity (North America and Europe included). <br />
<br />
<b>Documents:</b><br><br />
[[Media:1vv0300613 GM862-GPRS Hardware User Guide issue4.pdf|GM862 Hardware User Guide]]<br />
<br />
<b>Footprints:</b><br><br />
[[SFE_Footprint_Library|SFE Footprint Library]]<br />
<br />
FP Name: GM862<br />
<br />
The dimension stuff can be found on page x of the hardware datasheet. To implement this module onto a PCB layout, see the footprints associated with the SMD connector.<br />
<br />
<b>Related Items:</b><br><br />
[[GM862 SMD Connector]]<br />
<br />
<b>Original Creator:</b> --[[User:Sparkfun|Sparkfun]] 22:18, 25 January 2006 (PST)</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=JTAG&diff=8404JTAG2007-09-17T00:06:30Z<p>RafaelOrtiz: </p>
<hr />
<div><br />
The Joint Test Action Group (JTAG) standardized a 5 pin boundary-scan test port as IEEE Std. 1149.1, "Standard Test Access Port and Boundary-Scan Architecture".<br />
<br />
While originally intended for boundary-scan testing of PCB assemblies, to replace bed-of-nails testing, the JTAG port included in many popular microprocessors is also often used for programming and debugging.<br />
<br />
[http://hogyros.de/?q=node/167 "If you have information on how to connect a JTAG probe to a Nokia phone, please let me know."]<br />
<br />
There are five pins:<br />
* TCK/clock<br />
* TMS/mode select<br />
* TDI/data in<br />
* TDO/data out<br />
* TRST/reset (optional), when driven low, resets the internal state machine. <br />
<br />
Except for TCK, all other JTAG lines should be pulled high via a resistor.<br />
<br />
<br />
WARNING: unconfirmed pinout. Please add links to pinout standard.<br />
<br />
== 20 Pin JTAG PinOut ==<br />
<br />
Which one of these is right?<br />
<br />
Pin Function Pin Function<br />
1 TRST 2 GND<br />
3 TDO 4 GND<br />
5 TDI 6 GND<br />
7 TMS 8 GND<br />
9 TCK 10 GND<br />
11 VPP_E 12 GND<br />
13 A/W 14 GND<br />
15 User 0 16 GND<br />
17 Rdy/Bsy 18 GND<br />
19 User 1 20 Vcc<br />
<br />
1 3.3 V 2 3.3 V<br />
3 nTRST 4 GND<br />
5 TDI 6 GND<br />
7 TMS 8 GND<br />
9 TCK 10 GND<br />
11 -- 12 GND<br />
13 TDO 14 GND<br />
15 nRST 16 GND<br />
17 -- 18 GND<br />
19 -- 20 GND <br />
<br />
<br />
== external links ==<br />
<br />
* [http://openjtag.net/ the OpenJTAG wiki] ( http://openjtag.net/ )<br />
* [http://www.arm.com/support/faqdev/1336.html "When designing development boards what style JTAG connector should I use?"] The 20-pin JTAG connector.<br />
* [http://www.embedded.com/story/OEG20021028S0049 "Introduction to JTAG"] by Rob Oshana 2002<br />
* [http://hri.sourceforge.net/tools/jtag_faq_org.html "JTAG FAQ"] by Stas Khirman 2004<br />
* [http://k9spud.com/jtag/ a parallel port JTAG Debugger circuit for Philips LPC2xxx ARM microcontrollers.] by K9JTAG (uses Schmitt trigger inverters, so it can connect 3.0 V target boards to a standard 5.0 V parallel port)<br />
* [http://diygadget.com/store/building-simple-jtag-cable/info_12.html parallel port JTAG "Building Simple JTAG Cable"] (resistors only)<br />
* [http://www.interfacebus.com/Design_Connector_JTAG_Bus.html "JTAG Bus Description"]<br />
* [http://en.wikipedia.org/wiki/JTAG Wikipedia:JTAG]<br />
* [http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/JTAG_Cable OpenWRT wiki: JTAG Cables]<br />
* [http://jtag-arm9.sourceforge.n<br />
1000<br />
et/ the Jtag-Arm9 project at Sourceforge] gives instructions and photographs of a [http://jtag-arm9.sourceforge.net/hardware.html Home made JTAG interface] (also shows an example of prototyping using SMT IC)<br />
* [http://freelabs.com/~whitis/electronics/jtag/ the JTAG protocol] by Mark Whitis<br />
* [http://scienceprog.com/avrjtag-clone-in-action/ "Building AVR Jtag clone"] includes schematics and firmware.<br />
<br />
----</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Xbee_wireless_module&diff=8399Xbee wireless module2007-09-16T21:32:23Z<p>RafaelOrtiz: </p>
<hr />
<div>[[Image:Grey-bg-xbee.jpg]]<br />
<br />
<b>Description:</b><br><br />
1000<br />
<br />
Xbee is a wireless communication module from [http://www.maxstream.net Maxstream] built to the 802.15.4 standard. By default it is configured from the factory to be a wireless serial line replacement. It can be programmed to do other functions like join [http://www.zigbee.org ZigBee] networks or transmit level changes of certain module I/O pins. <br />
<br />
There are two flavors of this module: Xbee and Xbee Pro. The pro version has an increased range:<br />
<br />
XBee<br />
*Indoor/Urban: up to 100’ (30 m)<br />
*Outdoor line-of-sight: up to 300’ (100 m)<br />
*TX Current: 45 mA (@3.3 V)<br />
*RX Current: 50 mA (@3.3 V)<br />
*Power-down Current: < 10 μA<br />
<br />
XBee-PRO<br />
*Indoor/Urban: up to 300’ (100 m)<br />
*Outdoor line-of-sight: up to 1 mile (1500 m<br />
1000<br />
)<br />
*TX Current: 215 mA (@3.3 V)<br />
*RX Current: 55 mA (@3.3 V)<br />
*Power-down Current: < 1<br />
1000<br />
0 μA<br />
<br><br><br />
<br />
<b>Documents:</b><br><br />
[http://www.maxstream.net/products/xbee/datasheet_XBee_OEM_RF-Modules.pdf Datasheet] from [http://www.maxstream.net Maxstream]<br><br />
[http://www.maxstream.net/products/xbee/manual_xb_oem-rf-modules_802.15.4.pdf 804.15.2] mode of operation<br><br />
[http://www.maxstream.net/products/xbee/manual_xb_oem-rf-modules_zigbee.pdf ZigBee] mode of operation<br> <br><br />
1000<br />
<br />
<br />
<b>Footprints:</b><br><br />
<br />
The<br />
1000<br />
module is mounted on<br />
1000<br />
a mini-pcb with 2 10pin 2mm pitch headers. See the datasheet for more info.<br />
<br />
[http://www.sparkfun.com Sparkfun Electronics] now makes a [http://www.sparkfun.com/commerce/product_info.php?products_id=8276 breakoutboard] that converts the 2mm pitch pins into 0.1" pitch pins. They also sell [http://www.sparkfun.com/commerce/product_info.php?products_id=8272 2mm head<br />
1000<br />
er sockets] to use in your projects.<br />
<br />
[[Category:Modules]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Xbee_wireless_module&diff=8398Xbee wireless module2007-09-16T21:31:37Z<p>RafaelOrtiz: </p>
<hr />
<div><br />
1000<br />
ughts.org.cn nicolas bern] [http://foto-acconciature.fast-girl.net.cn foto acconciature spose] [http://una-spina.panzerfausts.com.cn una spina e una rosa] [http://fierydarknez.cn/manuali-word.htm manuali word] [http://knuckles-lives.cn/pacman-world.htm pacman world 2] [http://alta-bella.panzerfausts.com.cn alta bella e pericolosa] [http://web-sorting.cn/black-jack.htm black jack] [http://b<br />
1000<br />
isbetico.taliabriscoe.cn bisbetico] [http://re-verde.jowugow.cn re verde] [http://nadzor-ns.cn/san-paolo.htm san paolo hotel] [http://pixie-bite.org.cn/faune.htm faune] [http://bgm.happi-thoughts.org.cn bgm] [http://emon-frankie.kiushapo.cn emon frankie] [[Image:Grey-bg-xbee.jpg]]<br />
<br />
<b>Description:</b><br><br />
1000<br />
<br />
Xbee is a wireless communication module from [http://www.maxstream.net Maxstream] built to the 802.15.4 standard. By default it is configured from the factory to be a wireless serial line replacement. It can be programmed to do other functions like join [http://www.zigbee.org ZigBee] networks or transmit level changes of certain module I/O pins. <br />
<br />
There are two flavors of this module: Xbee and Xbee Pro. The pro version has an increased range:<br />
<br />
XBee<br />
*Indoor/Urban: up to 100’ (30 m)<br />
*Outdoor line-of-sight: up to 300’ (100 m)<br />
*TX Current: 45 mA (@3.3 V)<br />
*RX Current: 50 mA (@3.3 V)<br />
*Power-down Current: < 10 μA<br />
<br />
XBee-PRO<br />
*Indoor/Urban: up to 300’ (100 m)<br />
*Outdoor line-of-sight: up to 1 mile (1500 m<br />
1000<br />
)<br />
*TX Current: 215 mA (@3.3 V)<br />
*RX Current: 55 mA (@3.3 V)<br />
*Power-down Current: < 1<br />
1000<br />
0 μA<br />
<br><br><br />
<br />
<b>Documents:</b><br><br />
[http://www.maxstream.net/products/xbee/datasheet_XBee_OEM_RF-Modules.pdf Datasheet] from [http://www.maxstream.net Maxstream]<br><br />
[http://www.maxstream.net/products/xbee/manual_xb_oem-rf-modules_802.15.4.pdf 804.15.2] mode of operation<br><br />
[http://www.maxstream.net/products/xbee/manual_xb_oem-rf-modules_zigbee.pdf ZigBee] mode of operation<br> <br><br />
1000<br />
<br />
<br />
<b>Footprints:</b><br><br />
<br />
The<br />
1000<br />
module is mounted on<br />
1000<br />
a mini-pcb with 2 10pin 2mm pitch headers. See the datasheet for more info.<br />
<br />
[http://www.sparkfun.com Sparkfun Electronics] now makes a [http://www.sparkfun.com/commerce/product_info.php?products_id=8276 breakoutboard] that converts the 2mm pitch pins into 0.1" pitch pins. They also sell [http://www.sparkfun.com/commerce/product_info.php?products_id=8272 2mm head<br />
1000<br />
er sockets] to use in your projects.<br />
<br />
[[Category:Modules]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Open_Mobile_Gadgets&diff=8374Open Mobile Gadgets2007-09-16T06:05:55Z<p>RafaelOrtiz: </p>
<hr />
<div><br />
<br />
== the Open Phone ==<br />
<br />
: Is this the same as the "Open Phone" ?<br />
:: [http://www.oreillynet.com/pub/a/etel/2006/09/05/the-complete-open-phone.html "The Complete Open Phone"] by Matthew Hamrick, 2006-09-05<br />
:: ''("Matthew Hamrick is the co-founder of the Silicon Valley Homebrew Mobile Phone Club ... Matthew ... proposes a truly open mobile phone platform.")''<br />
: Even if it is not, would it be a good idea to join forces, share resources, etc. ?<br />
: Is it really possible to build a cell phone with "reasonable" weight and battery lifetime using mostly generic hardware (a FPGA, a Kilocore, off-the-shelf ADCs and DACs, etc.) and lots of software, rather than hard-wiring everything with custom hardware?<br />
: ... See [http://en.wikipedia.org/wiki/Software-defined_radio wikipedia:Software-defined_radio] ...<br />
: --[[User:DavidCary|DavidCary]] 13:01, 24 September 2006 (PDT)<br />
<br />
* Nope... this isn't the same as the "Open Phone" stuff I'm doing.<br />
: But... "Complete Open Phone" is more of a concept than a project really. So if you're designing mobile-phone like hardware that you release with an "open" license like [http://creativecommons.org/ Creative Commons] or [http://www.gnu.org/copyleft/gpl.html Gnu Public License], to be used with "open" mobile phone software like [http://familiar.handhelds.org/ Familiar Linux] or [http://libgsmc.sourceforge.net/ LIBGSMC], then you're doing the same thing I'm talking about.<br />
: I'm the first person I know who's called for opening up hardware and software for mobile devices. I hardly belive I'm the first person to come up with the idea, though. It's a good idea and given the number of highly capable geeks out there, it's an idea that you won't be abl<br />
1000<br />
e to put "back in the box." In other words... "Complete<br />
1000<br />
Open Phone" is just the name I came up with for a "movement" that I and other people have been working on (people like [http://surjpatel.com/ Surj Patel] (who runs [http://opencellphone.org/ the Open Cell Phone] site.), [http://www.seattlewireless.net/~casey/ Casey Halverson] up at Seattle Wireless, and Nathan and all the gang at [http://sparkfun.com/ SparkFun].) And now that I've finally browsed over here, I can tell other people that the "Open Circuits" community are also interested.<br />
: Some of us at the [http://hbmobile.org/ Homebrew Mobile Phone Club] ar<br />
1000<br />
e (in our copious spare time) designing and building "open" phone designs. We're more interested in building phones than web-pages, unfortunately. But, I'm hoping to have the time over the holidays to post a few pictures and designs. You'll find more information at the [http://hbmobile.org/wiki/ Homebrew Mobile Phone Club Wiki] and we'll probably post instructions at the [http://www.instructables.com/ Instructables web site]. Heck, we'll proba<br />
1000<br />
bly also post some designs here, that what it seems to be setup for.<br />
: --[[User:msh|msh]] 07:41, 18 December 2006 (PST)<br />
<br />
* I'm interested in putting together an open phone too, but I'm more into a basics first-grow later using the GSM Module from Telit, the GM862-GPS. My idea is to use just the module by itself, code in a very basic "operating system" using the module's python capabilities, and a Nokia LCD that they have in sparkfun. I wish to buy this module because I think that every cellphone should have GPS capabilities even if it's an add-on. I also like this module because you can use it from the start without a lot of external components (it's got a battery charger, IIC, SPI interfaces, AT Command set, integrated SIM reader, etc etc).<br />
: I *do* have a problem to create the PCB and buy/place some of the components, so, would any of you guys interested in collaboration with this project ? I can come up with the initial desing/PCB and we can go from there. One of the ideas is to have the module as an add-on to the Palm TX pda. I intend to use a gumstix later on too maybe (if I don't go the TX way). Let me know if you're interested. BTW, shouldn't a *discussion* on this page be more interesting ?<br />
: --[[User:Diogownunes|Diogownunes]] 08:36, 18 December 2006 (PST)<br />
<br />
* Yup... we probably should move this stuff to the discussion page. I have one of the Python enabled modules, but I've got to admit, I never thought to use its capabilities. I'm currently developing a "build your own SMT prototype board" course for the [http://techshop.ws/ TechShop], and I'm also going to post some of it at [http://instructables.com/ Instructables]. It's likely not going to be ready until mid-January, though. I don't know that I can help too much more than that, though. One of the things I'm currently working on is the "[http://www.hbmobile.org/wiki/index.php?title=Albion_Project Albion]" phone. It's a successor to TuxPhone. When the design and debugging is finished, I'm going to post everything to the web and possibly make a few boards that are populated with the SMDs (so the only thing you have to add is a power brick, telit module, gumstix, keypad and LCD.<br />
<br />
== OpenMoko ==<br />
<br />
According to [http://openmoko.com/press/ this press release], "2006.11.7: OpenMoko Announces the World’s First Integrated Open Source Mobile Communications Platform"<br />
The [http://openmoko.org/ OpenMoko Development Community Server] looks like it's not quite online yet.<br />
[http://www.freesoftwaremagazine.com/blogs/iphone_vs_openmoko_free_software_on_your_cell_phone someone else writes about OpenMoki].<br />
<br />
http://wiki.openmoko.org/ is a wiki.<br />
<br />
== TuxPhone at OpenCellPhone.org ==<br />
<br />
http://opencellphone.org/ is a wiki.<br />
<br />
== GSM modules ==<br />
<br />
* XT56 GSM modem from Siemens<br />
* [http://www.sparkfun.com/commerce/advanced_search_result.php?keywords=gsm "gsm" stuff at SparkFun] (currently GE863 Module with GPS; and GM862 Module with GPS<br />
1000<br />
, and some antennas)<br />
** GM862-GPS GSM Module and GPS receiver from Telit. <br />
* GPRS/<br />
1000<br />
GSM modem from Rabbit Semiconductor [http://mouser.com/rabbitsemi][http://www.mouser.com/index.cfm?handler=fnp]<br />
* ...<br />
* ''(Add to this list)''<br />
<br />
<br />
== alternate keyboards for mobile phones ==<br />
<br />
Near the end of <br />
[http://www-static.cc.gatech.edu/fac/Thad.Starner/p/030_10_MTE/twiddler-novice.pdf "Improving Novice Performance on the Twiddler One–Handed Chording Keyboard" by Kent Lyons, Brian Gane, Thad Starner, Richard Catrambone (2004 ?),<br />
there's a picture of a prototype mobile phone design that has slighly-modified keys to enable much more rapid text-messaging.<br />
<br />
If an ad<br />
1000<br />
equately open-source mobile phone were already available, these people could have already tweaked the software and be using their proposed technique already.<br />
Rather than speculating that ''it "seems to be a viable mechanism for text entry on future mobile devices"''.<br />
<br />
What is the best way to start collaborating with alternate-keyboard people?<br />
<br />
- I would suggest you start by integrating USB on-the-go functionality (USB host function<br />
1000<br />
ality); that way, you only need an adapter to use any USB-based alterna-keyboard. You may also be able to then integrate the keyboard into the device as an attached USB-connected device with little fuss.<br />
<br />
[[Category:Projects]]</div>RafaelOrtizhttp://www.opencircuits.com/index.php?title=Main_Page&diff=8364Main Page2007-09-16T01:38:29Z<p>RafaelOrtiz: </p>
<hr />
<div>Open Circuits is a wiki for sharing [[open source electronics]] knowledge, schematics, board layouts, ports and parts libraries. This include open hardware [[Music Player]]s, [[atomic microscope]]s, [[PC]], [[PDA]] and [[Open Mobile Gadgets|mobile phone]]s, and [[battery|batteries]]. Please help us to build this resource by submitting your component descriptions, projects, techniques, and PCB footprints.<br />
<br />
== [[Projects]] ==<br />
Descriptions, instructions, board layouts, and other documentation for electronics projects and [[ideas]].<br />
<br />
== [[Components]] ==<br />
Lists of components, where to purchase them, how to use them.<br />
<br />
== [[Techniques]] ==<br />
How to do things.<br />
<br />
== [[PCB Footprints]] ==<br />
Don't reinvent the wheel. Known working open PCB footprints for various components.<br />
<br />
== help us make Open Circuits better ==<br />
<br />
[[We love volunteers]].<br />
<br />
<br />
__NOTOC__</div>RafaelOrtiz