ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 14.06.2025

Просмотров: 3147

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

132 10 AVR Development Board

C6

C20

VCC

IC1

C5

D1

S1

OUT IN

X1

LED1 R1

C7

GND

C15 C13 C12 C11

X100-9

R10

IC3

GND

R11-R18

C9

X100-8

9

RESET

ADC7

33

X100-7

RST

ADC6

34

X100-6

C14

XTAL2

ADC5

35

X100-5

12

ADC4

36

X100-4

13

XTAL1

ADC3

37

X100-3

ADC2

38

X100-2

C10 Q1 32

ADC1

39

X100-1

AREF

40

30

ADC0

R19-R26

AVCC

(SCK)PB7

8 SCK

C16-C19

31

AGND

10

VCC

(MISO)PB6

7 MISO

GND

X3-9

(MOSI)PB5

6 MOSI

11

GND

(SS)PB4

5 SS

9

GND CD+

10

X3-8

VCC

PB3

4

8

I8

O8

11

PB2

3

7

I7

O7

12

X3-7

PB1

2

6

I6

O6

13

X3-6

L1

PB0

1

5

I5

O5

14

X3-5

PC7

29 PC7

4

I4

O4

15

X3-4

3

I3

O3

16

X3-3

PC6

28 PC6

2

I2

O2

17

X3-2

PC5

27 PC5

1

I1

O1

18

X3-1

C8

PC4

26 PC4

SV2

IC4

PC3

25 PC3

10

GND

PC2

24 PC2

9 MISO

LED10-17

PC1

23 PC1

8

7 SCK

PC0

22 PC0

GND

6

5 RST

RN1

4

3 SS

20

VCC

2

1 MOSI

(ICP)PD6

LSP3

VCC

19

(OC1A)PD5

18

(OC1B)PD4

LSP1

PC0

X2-1

(INT1)PD3

17

R30

R29

(INT0)PD2

16

LSP2

R28

TXD

15

TX

R27

PC1

14

RX

X2-2

RXD

AT90S8535P

LED18

R31

LED19

PC2

X2-3

C3

IC2

VCC

Q3

X101-2

1 C1+

C4

X101-1

PC3

V+

2

R32

Q2

X2-4

3

C1-

X2-9

V-

6

PC4

4

C2+

GND

X2-5

C2

C1

10

9

X101-3

5

C2-

8

7

PC5

X2-6

TX

11

14

6

5 GND

T1IN

T1OUT

4

3

VCC 10

T2IN

T2OUT

7

2

1

PC6

X2-7

RX

12

R1OUT

R1IN

13

SV1

9

R2OUT

R2IN

8

JP1

MAX232

LED2-LED9

PC7

X2-8

R2-R9

Fig. 10.1. Schematic of the AVR development board

The idle status of the input lines is HIGH. An input line is active when pulled to GND (for example by the contact of a relay). In this case, the associated LED will light, indicating the active input.

The analog input lines use PORTA, and are provided with RC filters for noise rejection. Note that these lines can be programmed to work as digital I/O lines. When using the lines of PORTA for digital output, reduce the values of the filter capacitors C11–C19, or remove them completely.

For digital output, the system uses the eight lines of PORTB of the microcontroller. They are buffered with IC4 – ULN2803, an array of eight open collector transistors able to sink up to 300 mA, at 30 V. This allows driving higher current loads, like relays, lamps, coils, etc. Each output line is also provided with a LED-resistor group to indicate its active status.

The output lines OC1A, OC1B of the MCU are buffered with two 2N2222 transistors, Q2 and Q3. They can be programmed to work either with timer 1 in output compare mode, or can be used as PWM outputs. LED18 and LED19 indicate the status of these lines.


10.2 The Hardware

133

X2

LED1 C1

C2

C3

IC1

X1

LED2-LED9

R1

C4 C5

S1

IC2

1

C6

R2-R9

10

SV1

D1

JP1

C8

C9

LSP3

C7

LSP1

R10

C11

LSP2

RN1

L1

R11

C11-C19

R12

C10

R13

R14

IC3

R15

R16

C14

R17

R18

Q1

1 SV2

R19

R20

LED10-

R21

R22

R23

R24

LED17

R25

R26

IC4

10

R27

X100

R28

X3

R30 LED18

LED19

R31

R29

X101

Q3 C20

R32

Q2

Fig. 10.2. PCB layout of the AVR development board

The input lines INT0, INT1, and INPUT CAPTURE of the MCU are not available on the external connectors. Instead, they are connected to test points and can be used for extensions of the board in the custom area.

The ISP connector SV2 is configured to make the board compatible with AVRISP, for programming the internal flash memory of the microcontroller. The ISP uses the MOSI, MISO, SCK and RESET lines of the microcontroller. The SS (Slave Select) signal has been added on the ISP connector, to allow the use of the ISP connector for a standard SPI interface.

The RS232 interface is a typical MAX232 implementation, and uses the connector SV1. Note that all the projects and examples in this book use the same circuits and connector layouts for RS232 and ISP.

The power supply circuit comprises the diode D1, the voltage regulator IC1, and filter capacitors C5, C6, C20. LED1 indicates when the circuit is powered.

Figure 10.2 shows the component layout of the printed circuit board for this module. Detailed execution drawings of the printed circuit board, as well as the complete component list, are available on the accompanying CD.


134 10 AVR Development Board

10.3 Testing the Circuit

Once you have the board assembled and visually checked for short-circuits, execute the following steps to test the circuit. It is recommended to use appropriate sockets for all the ICs, except IC1.

1.Power up the circuit without having the ICs inserted in their sockets.

2.Check for a value of +5 V of Vcc .

3.LED1 must be ON.

4.The RESET line (pin 9 of IC3) must be around +5 V.

5.Pins 10, 30, and 32 of IC3 must be at +5 V.

6.Pins 31 and 11 of IC3 must be at GND.

If everything is OK, remove the power and insert the ICs in their sockets.

Using the ISP interface, load one of the test programs described in the following paragraphs into the MCU internal flash memory and check the behavior of the module on the LEDs associated with the I/O lines.

10.4 The Software

Atmel Corporation offers an excellent, free programming and debugging tool to support AVRs, called AVRStudio. The latest version of AVRStudio is available for download at the Atmel Corporation web site.

Step 1. Installing the Avrstudio

To install AVRSTUDIO, unzip the downloaded archive in a new folder on your hard disk, then launch SETUP.EXE and follow the instructions on screen.

Once the program has installed, read the detailed help file included, for an overview of the capabilities of the program. This help file also contains a good description of the instruction set of AVR microcontrollers.

Step 2. Creating a New Project

When launched, AVRStudio4 prompts the user whether to create a new project, or open an existing one. Figure 10.3 shows a snapshot of the first dialog window of AVRStudio.

If you choose the option Create new project, the following information is required:

the name for the new project,

the name of the initial file,

the working directory where the project will be placed.

10.4 The Software

135

Fig. 10.3. Snapshot of the first dialog window in AVRSTUDIO4

Fig. 10.4. Snapshot of the dialog window for Create new project in AVRSTUDIO4

See Fig. 10.4 for a snapshot of the dialog window for Create new project. Fill in the information required and press the Next button.

One final dialog window is presented, as shown in Fig. 10.5, where the user is prompted to choose the debugging platform and the device type. For this particular development board, choose AVR Simulator as the debugging platform, and AT90S8535 for the device, then press Finish to start writing the new program.

Step 3. Writing and Testing Simple Programs in AVRStudio4

Before starting, note a few syntax differences between the assembler included in AVRStudio and ASHC11, the assembler used for HC11.

136 10 AVR Development Board

Fig. 10.5. Snapshot of the dialog window for selecting the debug platform and device

For example, labels must be terminated with colon ‘:’ when they are defined:

Loop:

;note the ‘:’ in label definition

.....

Rjmp

Loop ;do not use ‘:’ when invoking

;the label

Another important difference is that all assembler directives start with a period ‘.’ and the filenames specified for Include must be delimited by double quotes: for example

.Include ‘‘8535def.inc’’

The directives that switch between DATA and CODE segments are now named

.DSEG and .CSEG, respectively.

Here is an example of a fragment of code illustrating these distinctive features:

.Include ‘‘8515def.inc’’

.CSEG

;select CODE segment

Ldi

R16,0xFF;load R16

with

;hex value

$FF

Out

Ddrb,R16;configure

PORTB

;as output

port

Loop:

In

R6,Pinc;read PORTC in R6

Com

R6

;complement R6

To assemble the program press [F7].The assembler creates several output files having the name chosen for the project, and the extensions .HEX (this is the executable


10.4 The Software

137

code), .LST (this is the list file), and .MAP (this contains all the symbols defined in the program, and the invoked include files)

The list file also contains the error messages (if any), so this is where you have to look for explanations, in case of errors.

Once you have your program assembled without errors, you can invoke the simulator to run it by pressing [Ctrl]+[F7].

If you want to run the program step by step, press [F11]. At each step, the whole status of the microcontroller (program counter, registers, memory, I/O lines, etc.) is updated, and displayed, or even modified by the user.

See Fig. 10.6. for a snapshot of the simulator screen. Notice the left window, which displays the status of hardware resources for that particular step. In the right window, a cursor indicates the current instruction.

You can also choose to run the program normally ([F5]), to break the current execution ([Ctrl]+[F5]), to add breakpoints in the program ([Ctrl]+[F9]), etc. All these options are offered in the Debug pull-down menu.

The AVRStudio simulator is an exceptional tool that lets you perform complex and detailed test and debug procedures on your program, without having to download the program into the microcontroller’s flash memory.

Explore for yourself the numerous features and tools available in AVRStudio, by launching the on-line help (Start>Programs>Atmel AVR Tools>AVR Tools Online Help).

Fig. 10.6. Snapshot of the AVRStudio simulator screen

138 10 AVR Development Board

Step 4. Loading the Executable Code into the Flash Memory

If the assembly process completes without errors, the assembler generates a file with the extension .HEX, which contains the actual executable code of the program. This code can be loaded into the microcontroller’s flash memory through the ISP interface, following the instructions in Appendix A9.

Step 5. Choosing a Structure for Your Application

The principles on how to organize a software application, described in Chap. 9 for HC11, can be entirely followed when writing AVR programs. The assembler built in AVRStudio accepts MACROs as well as the .INCLUDE directive. Although the macro capabilities of the AVR assembler are weaker than those of the HC11 assembler, you can still use MACROs to simplify your work.

The following examples illustrate what MACROs can do:

.MACRO LDXI ldi xh,high(@0) ldi xl,low(@0)

MACRO

TSX

out

SPH,XH

out

SPL,XL

.ENDM

.MACRO

LDX

lds

xh,@0

lds

xl,@0+1

.ENDM

.MACRO

TXS

in

XH,SPH

in

XL,SPL

.ENDM

Though very simple, the following example illustrates the concept on the general structure of a software application for microcontrollers. This program toggles the lines of port B every 500 milliseconds. Since each line of port B is connected to a LED, this program can be used to test the development board, without the need to measure any signal. Here is the listing of the main program module LEDMAIN.ASM.

.include ‘‘8535def.inc’’

.include ‘‘map.asm’’ ;application variables

.cseg

.org 0

reset:

;reset vector

rjmp

init

.org

9

vector_t0_ov:

;timer0 overflow vector

rjmp

isr_t0_ov

init:

.include ‘‘init.asm’’ ;all initializations here


10.4 The Software

139

sei

;enable interrupts

ldi

tmp1,time_s_timer0

sts

s_timer0,tmp1 ;start soft timer

main_loop:

lds

tmp1,s_timer0

tst

tmp1

;check if timer

expired

brne

main_loop

ldi

tmp1,time_s_timer0

sts

s_timer0,tmp0 ;restart timer

rcall

toggle

;toggle portb

rjmp

main_loop

.include ‘‘timer.asm’’ ;timer routines

.include ‘‘io.asm’’

;i/o routines

The definitions file 8535def.inc is provided by AVRStudio and contains a number of equation directives (.equ) that associate symbolic names to the addresses of all the ressources. Here is a fragment of the contents of this file:

.device AT90S8535

;***** I/O Register Definitions

.equ SREG

=$3f

.equ SPH

=$3e

.equ SPL

=$3d

....

.equ PORTA

=$1b

.equ DDRA

=$1a

.equ PINA

=$19

.equ PORTB

=$18

.equ DDRB

=$17

.equ PINB = $16

.....

The following Include file, MAP.ASM, contains application-specific variables and definitions. Below is the listing of MAP.ASM for this particular application:

.def rint=r1

;just change the names

.def rsav=r2

;of some registers

.def tmp1=r16

.def tmp2=r17

.def tmp3=r18

;define variables in data segment

.dseg

s_timer0:

.byte

1 ;software

timer0

s_timer1:

.byte

1 ;software

timer1

;constants used by timer

.equ prescaler_constant=5

.equ ft_div=177

.equ time_s_timer0=50