Make: AVR Programming – Learningto WriteSoftwarefor Hardware

Make: AVR Programming – Learningto WriteSoftwarefor Hardware
اسم المؤلف
Elliot Williams
التاريخ
4 مارس 2024
المشاهدات
176
التقييم
(لا توجد تقييمات)
Loading...

Make: AVR Programming – Learningto WriteSoftwarefor Hardware
Elliot Williams
Table of Contents
The Arduino: Hardware or Software? Both! . 23
The Arduino Is an AVR . 23
The Arduino Is an AVR Programmer 25
Other Hardware Programmers . 28
Flash Programmers I Have Known and Loved . 28
Getting Started: Blinking LEDs . 29
Hookup . 30
ISP Headers . 33
AVRDUDE . 35
Configuring Your Makefile . 38
Flash 40
Troubleshooting . 40

  1. Digital Output . 43
    blinkLED Redux 44
    The Structure of AVR C Code . 45
    Hardware Registers 46
    blinkLED Summary 49
    POV Toy . 49
    Building the Circuit 50
    Pretty Patterns: The POV Toy Code . 54
    Experiment! . 56
  2. Bit Twiddling 59
    Working Through the Code: Cylon Eyes . 60
    Bit Twiddling and Cylon Eyes . 61
    Bit Shifting 62
    Advanced Bit Twiddling: Above and Beyond Cylon Eyes . 64
    Setting Bits with OR . 67
    Toggling Bits with XOR . 69
    Clearing a Bit with AND and NOT . 70
    Showing Off . 71
    Summary 75
  3. Serial I/O 77
    Serial Communication . 77
    Implementing Serial Communication on the AVR: Loopback Project 81
    Setup: Configuring the AVR 81
    Setup: Your Computer . 83
    Setup: USB-Serial Adapter . 83
    Putting It All Together: Test Out Your Loopback . 86
    Troubleshooting Serial Connections 87
    Configuring USART: The Nitty-Gritty Details 88
    AVR Square-Wave Organ . 95
    Making Music with Your Micro . 96
    iv Make: AVR ProgrammingThe Organ Library . 98
    The Code 99
    Extra Goodies 102
    Summary 103
  4. Digital Input 105
    Pushbuttons, Switches, Etc 105
    Configuring Input: DDRs, PORTs, and PINs . 108
    Interpreting Button Presses . 109
    Changing State . 112
    Debouncing . 113
    Debounce Example 115
    AVR Music Box . 117
    The Code 117
    Boss Button 119
    Desktop-side Scripting . 120
    Extensions . 124
  5. Analog-to-Digital Conversion I . 125
    ADC Hardware Overview . 126
    Light Meter 129
    The Circuit . 129
    The Code 135
    ADC Initialization . 137
    Extensions . 139
    Slowscope . 140
    The AVR Code 141
    The Desktop Code 143
    Synergies 145
    AVR Night Light and the Multiplexer 145
    Multiplexing . 145
    Setting the Mux Bits 146
    The Circuit . 148
    The Code 148
    Summary 150
    Part II. Intermediate AVR
  6. Hardware Interrupts . 153
    External Interrupts 101: Real-time Button Pressing Examples . 155
    External Interrupt 0 Example 156
    Pin-Change Interrupt Example 161
    Capacitive Sensor 164
    The Sensor . 165
    Table of Contents vThe Code 168
    Global, Volatile Variables 170
    Debugging the Circuit 173
  7. Introduction to the Timer/Counter Hardware 175
    Timer/Counters: Why and How? . 175
    Test Your Reaction Time 178
    Using Timer 0 for a Better 8-Bit Organ . 182
    AM Radio 186
    The Circuit . 188
    CPU Speed . 189
    AM Radio: The Code 190
    Summary 196
  8. Pulse-Width Modulation . 199
    Bright and Dim LEDs: PWM . 200
    Brute-Force PWM Demo 202
    Timers PWM Demo . 204
    Initializing Timers for PWM Mode . 206
    PWM on Any Pin 208
    PWM on Any Pin Demo . 209
    Closing: Alternatives to PWM and a Timer Checklist 211
  9. Driving Servo Motors 215
    Servos . 216
    The Secret Life of Servos 217
    The Circuit . 218
    The Code 219
    Servo Sundial 223
    The Build . 224
    Ready the Lasers! . 227
    The Code 229
    Servo Sundial Calibration . 236
  10. Analog-to-Digital Conversion II 243
    Voltage Meter 244
    The Circuit . 245
    The Code 248
    The Footstep Detector 252
    The Circuit . 253
    The Theory . 258
    Exponentially Weighted Moving Averages 259
    The Code 262
    vi Make: AVR ProgrammingSummary 266
    Part III. Advanced AVR Topics
  11. Advanced PWM Tricks 269
    Direct-Digital Synthesis . 270
    Making a Sine Wave 274
    Next Steps: Mixing and Volume . 277
    Mixing . 277
    Dynamic Volume Control . 280
    Polling USART 283
    ADSR Envelope . 283
    Auxiliary Files 284
  12. Switches . 287
    Controlling Big Loads: Switches . 288
    Bipolar-Junction Transistors 290
    MOSFETs . 291
    Power MOSFETs 293
    Relays 294
    Triacs and SSRs . 295
    Switches: Summary 296
    DC Motors . 297
  13. Advanced Motors 305
    Going in Reverse: H-Bridges 306
    Code: Taking Your H-Bridge Out for a Spin . 309
    Experts-Only H-Bridge 312
    PWM and the H-Bridge . 313
    Drive Modes: Sign-Magnitude 314
    Drive Modes: Locked Anti-phase 314
    Drive Modes: Comparison 315
    Stepper Motors 318
    Kinds of Stepper Motors 319
    Full Stepping and Half Stepping 320
    Identification of Stepper Motor Wires . 323
    Too Many Wires! 323
    Dual H-Bridge Chips: The SN754410 . 325
    The Code 327
    Acceleration Control 331
    Microstepping . 334
  14. SPI . 337
    How SPI Works . 338
    Table of Contents viiBit Trading Example 340
    Shift Registers 340
    EEPROM External Memory 343
    External Memory . 344
    SPI Demo Hookup 347
    SPI Demo Code . 348
    SPI EEPROM Library Header . 350
    SPI EEPROM Library C Code . 352
    initSPI 354
    SPI_tradeByte 355
    Convenience Functions . 356
    Summary 357
  15. I2C . 359
    How I2C Works . 360
    I2C Demo Hookup 364
    I2C Demo Library . 365
    I2C Thermometer Demo 369
    SPI and I2C Data Logger 371
    Pointers in EEPROM 375
    The UART Serial Menu 376
    The Logger’s Event Loop 377
  16. Using Flash Program Memory 379
    Using Flash Program Memory . 379
    Memory Addresses . 381
    The Address-Of Operator: & . 382
    Pointers 385
    Pointers in Brief 385
    Pointers as Arguments to Functions . 388
    Summary 392
    Optional: Dereferencing Pointers . 393
    Talking Voltmeter 394
    PROGMEM Data Structures and the Header File . 395
    Sound Playback and Voltage Reading: The .c File 400
    Generating the Audio Data . 404
    Differential Pulse-Code Modulation . 404
    Encoding Two-bit DPCM 405
    Encoding DPCM: wave2DPCM.py . 408
  17. EEPROM . 413
    Using EEPROM . 414
    Storing in Memory . 414
    Reading from Memory . 419
    Saving and Loading EEPROM . 422
    viii Make: AVR ProgrammingOrganizing Data in EEPROM 423
    Project: Vigenère Cipher Encoder/Decoder 426
  18. Conclusion, Parting Words, and Encouragement
    Learning AVR: The Missing Chapters 437
    The Watchdog Timer . 437
    Power Savings . 438
    Crystals and Alternate Clock Sources 438
    Bootloaders 438
    Analog Comparator 439
    Debugging . 439
    Put This Book Down and Build! 440
    Index 441
    xbenefits of, 20
    breadboard connections,
    30
    diagram of flash wiring, 26
    drawbacks of, xii, 20
    flashing as a target, 25
    hardware programming in,
    27
    pin diagram, 21
    portpins.h bug, 25
    programming toolchain, 18
    terminal emulator software,
    84
    vs. other IDEs, 23
    writing C in, 23
    arrays, 388
    Atmel AVRISP mkII flash programmer, 28
    Atmel Studio, 15
    attack-decay-sustain-release
    (ADSR) volume envelopes,
    280, 284
    ATtiny44/45, 12
    attributions, xvii
    averaging vs. oversampling,
    246
    AVR ATmega microcontrollers
    benefits of, xi
    built-in pull-up resistor, 107
    built-in USART device, 80
    C code structure in, 45
    configuring serial communication in, 81
    driving large loads with,
    287
    hardware overview, 8
    hardware registers in, 47
    interfacing over serial, 239
    internal clock speed, 189
    internal EEPROM on, 414
    limited memory in, 4
    naming conventions, 12
    pin overview, 5
    programming in Arduino,
    26
    (see also programming)
    selection of, 12
    timer/counters in, 177
    voltage reference in, 248
    avr-gcc code compiler, 15, 280
    avr-size utility program, 385
    avr/eeprom.h library, 414, 418
    avr/io.h file , 91
    AVRDUDE
    common configurations, 38
    error messages, 36
    fuse-bit settings, 191, 426
    options for, 36
    programmers supported,
    16
    reading/writing to EEPROM,
    417
    saving/loading EEPROM,
    422
    starting, 35
    avrMusicBox.c listing, 117
    B
    back voltage, 298
    base resistance, 292
    battery power, 57, 248
    (see also DC motors)
    baud rate, definition of, 78
    bipolar-junction transistors
    (BJTs), 290
    bit trading in SPI, 340
    bit twiddling
    advanced application of, 64
    bit shifting, 62, 181
    bit-shift roll, 64
    bitwise logical operators,
    66
    clearing bits with AND/NOT,
    70
    Cylon eyes project, 59, 64
    overview of, 74
    pin numbering and, 63
    project supplies, 60
    setting bits with OR, 67
    toggling bits with XOR, 69
    usefulness of, 59, 71
    _BV() macro, 65
    bitmasks, 68, 70, 110
    bitwise logical operations, 59
    blinkenlights, 50
    blocking capacitors, 96, 97
    Boss Button project
    bossButton.c listing, 123
    bossButton.py listing, 121
    button bounce, 113
    buttons, 106, 156
    (see also digital input)
    (see also interrupt programming)
    C
    C language
    arrays in, 388
    ASCII and, 86
    AVR code structure, 45
    benefits of, xii
    bit shifting instructions, 62
    code reuse with modules,
    94, 240
    coding in Arduino IDE, 24
    compiler errors, 40
    dereferencing operator, 393
    functions in, 56
    integer division in, 261
    memory addresses, 381
    naming conventions, 83
    zero-indexing in, 63, 102
    C99 integer types, ISO standard for, 419
    cadmium-sulfide lightdependent resistor (LDR),
    129, 140
    calibrateTime.py listing, 237
    capacitive sensors
    circuit for, 166
    code for, 168
    debugging, 173
    global variables and, 170
    principle behind, 164
    442 Indexsensor for, 165
    timing of, 164
    capacitors, 96
    capSense.c listing, 168
    Central Limit Theorem, 246
    central processing unit (CPU)
    basics of, 8
    CPU clock, 8, 189, 191, 237
    noise reduction, 245, 251
    setting speed in code, 190
    character-to-ASCII converter,
    87
    clearing bits, 70
    cli() function, 161
    CLKPR (Clock Prescale Register), 192
    clocks
    accuracy of, 237, 241
    alternate sources for, 438
    as timebase, 176
    double-speed mode, 92
    enabling high-speed, 191
    noise reduction and, 245,
    251
    prescalers for, 8, 137, 185,
    189
    types of, 8
    code editors, 14
    code examples, permission to
    use, xvii
    comparators, 217, 439
    compare events, 177
    compiler errors, 40, 46, 386
    computer-side scripting, 121
    configuration registers, inputoutput, 48
    const keyword, 384
    constants, human-friendly
    synonyms for, 62
    control pulse frequency, 222
    cross-platform compatibility,
    16, 84
    crystal radios, 187
    crystals, 438
    CTC waveform mode, 178, 184
    Cylon eyes project, 59, 64
    D
    Darlington transistors, 291
    data
    organization in EEPROM,
    423
    serial vs. parallel, 340
    types of, 419
    data framing, 338
    data logging, 371, 377
    data smoothing, 244
    data-direction register (DDR),
    47
    Data-Direction Register (DDR),
    108
    datasheets
    accessing, 7
    External Interrupts section,
    161
    macro definitions, 90
    Power Management and
    Sleep Modes, 252
    Power Management section, 438
    Register Description section, 92
    System Control and Reset
    section, 438
    UCSR0B functions, 90
    DC motors
    back voltage in, 298
    basics of, 297
    dcMotorWorkout.c listing,
    300
    diagram of beadboard, 298
    diagram of circuit, 297
    flyback diode in, 300
    running in reverse, 305
    specification for, 303
    torque in, 303
    vs. stepper motors, 318
    DDRx (see data-direction register)
    dead band in servo motor, 218
    debouncer.c listing, 115
    debouncing, 113
    debugging
    ADC code, 137, 145
    ADC output, 139
    basic steps to, 439
    button press interpretation,
    112
    capacitive sensors, 173
    EEPROM chip installation,
    348
    global variables, 173
    hardware registers, 49, 91
    I2C initialization, 368
    pin output, 49
    pointer initialization, 386
    portpins.h bug, 25
    programmer-to-AVR communication, 52
    sampling frequency, 280
    serial port loopback testing,
    86
    with USART, 95
    decomposing-to-pointer rule,
    388

define statements, 62, 376

dependencies, keeping track
of, 19
dereferencing operator, 393
desktop-side scripting, 121
differential pulse-code modulation (DPCM)
basics of, 405
encoding two-bit data, 405
wave2DPCM.py encoding,
408
digital input
Boss Button project, 119
button presses, 110
configuration of, 108
debouncing, 113
music box project, 117
project supplies, 105
pushbutton checklist, 120
pushbuttons/switches, 106
state change indicators,
112
Index 443digital library, access to, xvii
digital output
AVR C code structure, 45
blinking LED project, 44, 49
configuration of, 48
hardware registers, 46
POV pattern generator, 43
POV toy, 49
project supplies, 43
digital signal processing (DSP)
chip, 280
digital thermometer project,
361, 369
(see also I2C protocol)
digital-to-analog converters
(DACs), 127, 211
direct digital synthesis (DDS)
accumulators, 273
ADSR envelopes, 284
auxiliary files for, 284
basics of, 270
code for, 274
debugging for speed, 280
digital signal processing
chip and, 280
dynamic volume control,
280
fatSaw.c listing, 277
lowpass filter and, 276
mixing, 277
project overview, 269
project supplies, 269
pseudocode for, 271
PWM frequency and, 270
sample rate and, 276
sine wave creation, 274
summary of, 273
DRAM (dynamic random access memory), 344
drive modes, h-bridge
coasting, 316
comparison of, 315
locked anti-phase, 314
sign-magnitude, 314
states available, 313
drivers, for Windows, 35
duty cycles, 201
dynamic volume control, 280
E
EEPROM (electrically erasable
programmable read-only
memory)
automatic erase settings,
426
AVRDUDE terminal mode,
417
benefits of external, 344
block update command,
415
convenience functions, 356
data organization in, 423
defining memory locations,
375
detecting a write completion, 418
float type variables and,
415
hookup of external, 347
initialization of, 425
initSPI function, 354
internal size limits, 376, 414
lifespan of, 415
quickDemo.c listing, 416
reading from, 419
saving and loading, 422
utility functions for, 414
write cycle limits, 414
electro-motive force (EMF),
298
encryption/decryption project
encryption used in, 427
vigenereCipher.h listing,
428
vigenereCipher_outline.c
listing, 431
errors
AVRDUDE errors, 36
compiler errors, 40, 386
I2C error codes, 368
PB1 undeclared, 25
programming errors, 40
(see also debugging)
event loops, 46, 56, 154, 377,
437
exponentially weighted moving averages (EWMA), 259
F
fatSaw.c listing, 277
fixed-width variable type
names, 419
flash memory
basics of, 345
determining file size, 385
memory addresses, 381
overview of, 392
pointers and, 384
PROGMEM variables, 384
progmemDemo1.c listing,
382
talking voltmeter project,
394
flash programmers, 16, 25, 28
floating-point math, 249, 415
flyback diodes, 300
footstep detector project
bias voltage in, 259
circuit for, 254
code for, 262
components used, 252
exponentially weighted
moving averages and,
259
integer division in, 261
overview of, 266
theory behind, 258
for() loops, 73, 172
free-running ADC mode, 136,
143
frequency
control pulse frequency,
222
cutoff frequency, 276
444 IndexPWM voltage level and, 270
sampling frequency, 280
selection of in PWM, 201
FTDI cables, pinout summary,
83
functions
in C language, 56
naming conventions for, 83
pointers as arguments to,
388
prototyping of, 94
scope of, 56
fuse bits, 190, 426
G
GCC code compiler, 15, 46, 110
gearmotors, 303
gedit text editor, 14
global variables, 170
H
H-bridges
alternatives to, 324
avoiding shoot-through in,
308, 316
avoiding short-circuit
mode, 309, 316
chip for dual, 325
chip selection, 317
coasting mode, 316
diagrams of, 308, 309, 312
digital logic control in, 310
DIY vs. ready-made, 306
drive state comparison, 315
drive states available, 313
four-wire control of, 312
hBridgeWorout.c listing,
310
locked anti-phase drive
mode, 314
project supplies, 306
sign-magnitude drive
mode, 314
stepper motors and, 318
hardware flash programmers
Arduino, 27
Atmel AVRISP mkII, 28
LadyAda’s USBTinyISP, 29
Parallel Port, 28
USBTiny/USBasp, 29
hardware peripherals
analog/digital converters
(ADCs), 10
benefits of, xiii, 5
clocks for, 8
configuration of, 89
interrupt service routines,
10
interrupt system, 153
power saving and, 438
serial communication with,
9
timer/counters, 11, 22, 175
hardware registers, 46, 48, 62,
63, 91
helloInterrupt.c listing, 157
human-readable code, 62, 83,
181
I
I/O registers, 7
I2C protocol
addressing scheme in, 361
benefits of, 359
bus speeds in, 368
byte acknowledgement,
362
code for, 366
data logging in, 371
data timing in, 361
demo hookup, 364
demo library, 365
EEPROM configuration, 375
error codes in, 368
event loops in, 377
function of, 361
initialization of, 367
overview of, 364
project supplies, 359
speed limits in, 364
thermometer project, 369
UART serial menu and, 376
vs. two-wire interface, 360
initI2C function, 366
initInterrupt0() function, 158
initSPI function, 354
initTimers() function, 206
initUSART() function, 82, 88
input-output configuration
registers, 48
inputs, 9
(see also digital input)
INT0/INT1 external interrupts,
156
integers
division in C language, 261
floating-point math, 249,
415
pre-C99 types, 419
signed, 275
unsigned, 74
using 32-bit, 4
integrated development environment (IDE), 15
internally triggered interrupts,
155
interrupt programming
AVR pinouts/PCINT names,
163
capacitive sensors, 164
externally triggered, 155
function of, 159
INT0/INT1 external interrupts, 156
internally triggered, 155
interrupt vector names, 159
ISR() function, 158, 251
pin-change interrupts, 161
polling-style programming,
154
real-time response, 156
Index 445sleep-mode interrupts, 438
turning interrupts on/off,
161
usefulness of, 153, 155
Interrupt Service Routines
(ISRs), 10, 155, 251
interrupt vector names, 159,
160
ISP headers, 33
ISR() function, 158, 170, 251
L
LadyAda’s USBTinyISP flash
programmer, 29
LDR (see cadmium-sulfide
light-dependent resistor)
LEDs
connection of, 31
current-limiting resistors
for, 50
dimming with PWM, 200
naming with zero-indexing,
63
less-than-or-equal-to construction, 102
light meter project
ADC initialization, 137
ADC power pins, 133
circuit for, 129
code for, 135
potentiometer, 134
uses for, 129, 139
lightSensor.c listing, 135
Linux
AVRDUDE errors, 38
programming toolchain, 16
Python installation, 121
terminal emulator software,
84
locked anti-phase drive mode,
314
logging digital thermometer
project, 361, 369
lowpass filters, 276
M
Mac OS
programming toolchain, 18
Python installation, 121
terminal emulator software,
84
macros
datasheet definitions of, 90
GCC convenience macros,
110
power minimizing with, 190
PROGMEM macro, 381
_BV() macro, 65
main loop, 46
main() function, 45, 55
make/makefiles
configuration of, 38
dependency tracking, 19
determining file size, 385
function of, 16
master SPI device, 339
math coprocessors, 4
memory
chip selection and, 12
flash memory, 379
interfacing with external,
337
memory addresses, 381
types of, 8
types of external, 344
waveform storage and, 285
microcontroller projects
AM radio, 186
basic kit for, xiv
blinking LEDs, 29, 44, 49
Boss Button, 119
capacitive sensor, 164
Cylon eyes, 59
footstep detector, 252
light meter, 129
logging accelerometer, 156
logging digital thermometer, 361
loopbacks, 81
music box, 117
night light, 145
oscilloscope project, 140
permission for code use,
xvii
servo sundial, 224
software vs. hardware approach to, xii
square-wave organ, 95, 182
talking voltmeter, 394
Vigenère cipher encoder/
decoder, 427
voltage meter, 244
microcontroller-controlled resistance, 140
microcontroller-specific library
routines, 61
microcontrollers
basics of, 3
built-in peripherals for, 5
function of, xi, 5
interfacing with desktop
computer, 77, 124
limitations on, 4
similarities among brands,
xii, xiii
user interaction with, 106
uses for, xi, 5
microstepping, 334
mixing digital audio, 277
modules, 94, 240
MOSFETs (metal oxide silicon
field-effect) transistors
2N7000, 53, 291
gate charge, 295
gate driver chips, 294
motion detector (see footstep
detector project)
motors
back voltage in, 298
DC motors, 297
H-bridges for, 305
project supplies, 306
stepper motors, 305, 318
unipolar, 324
446 Indexmoving averages
EWMA implementation,
259
usefulness of, 244
multiplexing
analog comparator and,
439
multiplexer (mux) switch,
128
nightlight project and, 145
setting mux bits, 146
music (see direct digital synthesis; music box project;
square-wave organ project)
music box project, 117
N
negative numbers, 419
night light project
circuit for, 148
code for, 148
multiplexing and, 145
noise reduction, 245, 251, 252
NOT operator, 70
Notepad text editor, 14
O
OCRn (Output Compare Register), 177
OR operator, 67
oscilloscope project
AVR code for, 141
desktop code for, 143
synergies and, 145
uses for, 140
outputs, 8
(see also digital output)
oversampling
basics of, 245
practical limit on, 251
usefulness of, 243
vs. averaging, 246
P
Parallel Port flash programmer,
28
PCINT (pin-change interrupts),
161
persistence-of-vision (POV)
toy
basis of, 49
building the circuit, 50
code for, 54
creating patterns, 56
POVDisplay function, 55
simplest version of, 51
switch for, 53
persistence-of-vision (POV),
pattern generation with, 43
phase, SPI protocol, 355
photocells/photoresistors, 130
piezoelectric disks, 252
pinout diagram, 6
pins
accessing with I/O registers,
7
ADC power pins, 133
analog output from, 208
arrangement of, 6
dedicated to PWM, 204
default state of, 48
define statements for, 62
diagram of, 5
diagram of Arduino labels,
21
diagram of ISP connectors,
30
diagram of PCINT names,
163
diagram of SN754410, 325
digital inputs of, 9, 108
digital outputs of, 8, 46
FTD cable pinout summary,
83
function of, 5
naming conventions, 6, 85
pin masks, 161
pin-change interrupts, 161
RESET pin, 53
serial pin connection, 85
zero-indexing and, 63
PINx hardware register, 48
playNote() function, 98, 117,
175
pointers
address storage in, 388
address-of operator, 382
arrays and, 388
as arguments to functions,
388
basics of, 385
dereferencing operator, 393
progmemDemo2.c listing,
386
polarity, SPI protocol, 355
polling-style program, 154,
283
port x data registers, 48
port x input pins address, 48
portpins.h bug, 25
potentiometers (pots), 134,
140
POVDisplay function, 55
power down mode, 252
power management, 438
power supply
ADC power pins, 133
battery power, 57, 248
connection of, 30
LED indicator for, 31
minimizing use with macros, 190
printBinaryByte() function, 87,
93
printByte() function, 93
printString() function, 82, 93
PROGMEM macro
data structures, 395
data variables, 384
function of, 381
pointer arrays, 398
progmemDemo1.c listing,
382
Index 447program memory, size limitations on, 4
(see also flash memory)
Programmer’s Notepad, 14
programming
Arduino environment, 20
basic steps of, 16
basic supplies needed, 14
checking installation with
AVRDUDE, 35
flashing, 40
hookup, 30
ISP headers, 33
overview of, 13
software toolchain, 16
toolchain overview, 14
troubleshooting, 40
pull-up resistors, 107, 348
pulse-code modulation, 405
pulse-width modulation
(PWM)
advanced techniques using
(see direct digital synthesis)
alternatives to, 211
average value control, 200
basics of, 199
differential pulse-code
modulation, 405
duty cycle specification,
201
fast mode, 206
frequency selection, 201
H-bridges and, 313
LED dimming with, 200
manual routine for, 202
on non-dedicated pins, 208
overview of, 211
project supplies, 199
pwm.c listing, 202
pwmOnAnyPin.c listing,
209
pwmTimers.c listing, 204
ripple tolerance, 201
timer initialization, 206
timers demo, 204
Vactrols and, 140
pushbuttons, 105, 120, 156
(see also digital input)
(see also interrupt programming)
Python
benefits of, 102
code modules, 240
debugging with serialScope.py, 137, 330
DPCM encoding with, 408
installation of, 121
pyserial library, 144
readTime() function, 239
terminal emulator software,
84
wavetable pre-calculation
with, 285
Q
quickDemo.c listing, 416
R
RAM
limitations on, 4
single-bit memory networks in, 47
random toggling, 75
rated voltage, 303
RC oscillators, 438
reactance, 132
reaction time, testing, 178
readTime() function, 239
real-time responses, 156
receiveByte() function, 82
Register Description section,
91
relays, 294
RESET pin, 53
resistance, microcontrollercontrolled, 140
resistor tolerance, 247
return(0), 46
ripple voltage, 201
RX-TX hookup, 85
S
Safari Books Online, access to,
xvii
sample and hold circuit, 128
sample rate, 276
scope, of variables in C language, 56
SD/MMC cards, 345
sei() function, 161
sensors
analog, 126
capacitive touch, 164
voltage, 126
serial communication
AVR configuration, 81
built-in peripherals for, 9
computer setup, 83
implementation of, 81
local echo, 86
loopback testing, 86
project supplies, 77
servo motor I/O, 235
SPI protocol for, 337
square-wave organ project,
95
synchronous vs. asynchronous, 81, 338, 361
terminal emulator software,
84
troubleshooting, 87
USART basics, 78
USART overview, 103
USB-serial adapter, 83
serial communications
USART polling, 283
serial library, installation of,
121
serial pins, connection of, 85
serial protocols, 78
serial-to-TCP/IP bridge, 124
448 IndexserialLoopback.c listing, 82
serialOrgan.c listing, 99
serialScope.py listing, 143
servo motors
code for, 219
connecting to AVR, 218
control pulse frequency,
222
control signal in, 217
function of, 217
position controls in, 216
project supplies, 216
servoWorkout.c listing, 219
sundial project, 224
uses for, 216
servoClockFunctions.c listing,
233
servoSerialHelpers.c listing,
235
servoSundial.c listing, 229
servoSundial.h listing, 232
setting bits, 78
shift registers, 340
shoot-through, in H-bridges,
308, 316
sign-magnitude H-bridge
drive mode, 314
simpleButton.c listing, 111
sine waves, using DDS (directdigital synthesis), 274
single-conversion triggering,
136
sizeof(), 392
slave devices, in SPI protocol,
339
slave-select pin, in SPI protocol, 354
sleep mode, 251, 438
(see also noise reduction)
slowscope, 140
slowScope.c listing, 141
SN754410 dual H-bridge chips,
325
software toolchain
Arduino setup, 18
Linux setup, 16
Mac setup, 18
make/makefiles, 19
Windows setup, 18
solid state relays (SSRs), 296
sound (see direct digital synthesis) (see square-wave organ project) (see talking
voltmeter project)
speech playback (see talking
voltmeter project)
speed
debugging high-speed issues, 280
limitations on, 4
setting in code, 190
speed profiles, 332
SPI (serial peripheral interface)
benefits of, 337
bit trading in, 340
bus setup, 339
clock phase/polarity, 355
configuration overview, 357
convenience functions, 356
data framing in, 338
data logging in, 371
EEPROM hookup, 347
EEPROM library C code, 352
EEPROM memory chip and,
344
function of, 338
initSPI function, 354
output pins and, 354
shift registers in, 340
SPI demo code, 348
SPI library header, 350
SPI_tradeByte function, 355
square-wave organ project
additional files for, 102
amplification for, 97
code for, 99
keyboard for, 95
keypress conversion, 102
library for, 98
speaker capacitor, 96
timer/counters and, 182
SRAM (static random access
memory), 344
stall current, 303
start bits, UART serial, 78
state change, testing for, 112
stepper motors
acceleration control, 331
basics of, 318
bifilar stepper motors, 324
code for, 328
diagrams of, 319, 323, 334
dual H-bridge chip, 325
full/half stepping, 320
H-bridges for, 318
half-stepping coil currents,
322
kinds of, 319
microstepping, 334
project supplies, 306
trapezoid speed profile, 332
usefulness of, 305
vs. brushed DC motors, 318
wire identification, 323
stop bits, USART serial, 78
successive approximation
DAC, 128
sundial project
calibrateTime.py listing, 237
calibration, 237
circuit for, 228
clock for, 233
code for, 229
laser attachment, 224
laser preparation, 227
positioning, 226
range of motion for, 226
serial I/O for, 235
servoClockFunctions.c listing, 233
servoSerialHelpers.c listing,
235
servoSundial.c listing, 229
servoSundial.h listing, 232
Index 449T
talking voltmeter project
audio data generation, 404
diagram of flash memory
pointers, 399
differential pulse-code
modulation, 405
ISR() function, 402
main() function, 403
overview of, 394
pointer arrays, 398
sound playback, 400
speech generation for, 395
talkingVoltmeter.c listing,
400
talkingVoltmeter.h listing,
395
TCNTn (timer/counter register), 176
terminal emulator software,
83, 84
text editors, 14
TextMate, 14
thermometer project, 361, 369
timebases, 438
timer/counters
AM radio project, 186
basics of, 11
block diagram, 176
clock prescaler settings, 185
configuration checklist, 213
overview of, 196
project supplies, 175
PWM demo, 204
PWM initialization, 206
reaction time testing, 178
servo motor configuration,
221
square-wave organ, 182
timerAudio.c listing, 182
types included, 177
usefulness of, 175
watchdog timer, 22, 437
waveform generation
modes, 178
toggleButton.c listing, 112
toggling bits, 69
torque, 303
touch sensors, 164
transistor switches
bipolar-junction transistors,
290
Darlington transistors, 291
driving large loads with,
288
high- vs. low-side, 289
metal oxide silicon fieldeffect transistors (MOSFETs), 291
overview of, 296
project supplies, 288
relays, 294
summary of, 296
triacs/SSRs, 296
transistors
bipolar-junction transistors,
290
Darlington transistors, 291
driving large loads with,
287
selecting base resistor, 292
transmitByte() function, 82
trapezoid speed profile, 332
triacs, 296
troubleshooting, 40, 87
(see also debugging)
(see also errors)
TWI (two-wire interface) protocol, 360
two’s complement order, 419
U
UART/USART serial
additional uses for, 95
configuration of, 81, 88
data logging with, 371
difference between, 81
I2C protocol, 376
overview of, 103
polled serial input, 283
synchronous vs. asynchronous communication,
338
transmitting/receiving with,
92
UART serial basics, 78
UART.c file, 88
UCSR0B register, 90
UDRE0 (USART0 Data Register
Empty), 92
USB-serial adapter, setup of, 83
USBTiny/USBasp flash programmers, 29
V
Vactrols, 140
variables
definition of, 56
float-type, 415
global variables, 170
naming conventions, 83
pointers and, 385
PROGMEM variables, 384
variable types, 381
Vigenère cipher, 427
volatile keyword, 171
voltage dividers, 129, 211, 245
voltage meter project
circuit for, 245
code for, 249
design specifications, 244
oversampling in, 245
overview of, 266
resistor tolerance, 247
sleep modes, 251
supplies needed, 244
voltage scaling in, 247
voltage sensors, 126
voltmeter.c listing, 249
volume control, 280
450 IndexW
watchdog timer, 22, 437
wave2DPCM.py program, 408
waveform modes, PWM hardware, 177, 206, 285
wear leveling, 415
while() loops, 46, 65
Windows
drivers for, 35
programming toolchain, 18
Python installation, 121
terminal emulator software,
84
X
XOR operator, 69
Z
zero-indexing, 63, 102

كلمة سر فك الضغط : books-world.net
The Unzip Password : books-world.net

تحميل

يجب عليك التسجيل في الموقع لكي تتمكن من التحميل
تسجيل | تسجيل الدخول

التعليقات

اترك تعليقاً