aulas_atmega128_1_.pdf
TRANSCRIPT
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 1
SSIISSTTEEMMAASS DDIIGGIITTAAIISS 22
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 2
AATTmmeeggaa112288
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 3
Características do ATmega128:
Arquitectura RISC 133 instruções (a maior parte executada num único ciclo de execução) 32 registos de trabalho de 8 bits (arquitectura de registos) Até 16 MIPS (@16MHz) – 62.5ns / instrução 64K palavras de programa de 16 bits – 128K bytes FLASH 4K bytes de RAM interna 4K bytes de E2PROM de dados Ciclos de escrita / leitura – FLASH=10000, E2PROM=100000 7 Portos de IO
6 x 8 bits (Portos A .. F) 1 x 5 bits (Porto G)
2 x Timer / Counter de 8 bits 2 x Timer / Counter de 16 bits 1 x Real Time Counter ( com oscilador independente) 2 x PWM de 8 bits 6 x PWM de 16 bits ADC de 10 bits (8 canais) 2 x USART SPI TWI (I2C)
Tensão de alimentação: ATmega128L - 2.7V a 5.5V (0 a 8MHz) ATmega128 - 4.5V a 5.5V (0 a 16MHz) Software de Desenvolvimento:
AVR Studio 4 (http://www.atmel.com) WINAVR (http://winavr.souceforge.net) PonyProg (http://www.lancos.com/prog.html)
Boards ATmega128:
FUTURLEC (http://www.futurlec.com)
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 4
AATTmmeeggaa112288 –– DDiiaaggrraammaa ddee bbllooccooss
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 5
AATTmmeeggaa 112288 –– AArrqquuiitteeccttuurraa
AArrqquuiitteeccttuurraa ddee HHaarrvvaarrdd
•• MMeemmóórriiaass iinnddeeppeennddeenntteess ppaarraa pprrooggrraammaa ee ddaaddooss
•• BBaarrrraammeennttooss iinnddeeppeennddeenntteess ((eennddeerreeççooss ee ddaaddooss)) ppaarraa aacceessssoo ààss mmeemmóórriiaass ddee
pprrooggrraammaa ee ddaaddooss
•• EExxeeccuuççããoo ddoo pprrooggrraammaa ccoomm ssoobbrreeppoossiiççããoo
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 6
Arquitectura de Von Newman - execução sequencial (sem sobreposição)
Arquitectura de Harvard – execução com sobreposição
RReeggiissttoo ddee EEssttaaddooss ((SSttaattuuss RREEGGiisstteerr))
C Carry Flag Z Zero Flag N Negative Flag V Two’s Complement Overflow Flag S Sign Bit H Half Carry Flag T Bit Copy Storage I Global Interrupt Enable
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 7
RReeggiissttooss ddee UUssoo GGeerraall
7 0 Addr R0 0x00 R1 0x01 R2 0x02 ….. R13 0x0D
Registos R14 0x0E de uso R15 0x0F geral R16 0x10
R17 0x11 ….. R26 0x1A Byte –sig registo X R27 0x1B Byte +sig registo X R28 0x1C Byte –sig registo Y R29 0x1D Byte +sig registo Y R30 0x1E Byte –sig registo Z R31 0x1F Byte +sig registo Z
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 8
PPoonntteeiirroo ddaa SSttaacckk (( SSttaacckk PPooiinntteerr))
MMeemmóórriiaa ddee PPrrooggrraammaa
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 9
VVeeccttoorreess ddee IInntteerrrruuppççããoo
Vector nº Endereço Fonte Definição 1 0x0000 RESET Operação de RESET 2 0x0002 INT0 Interrupção externa 0 3 0x0004 INT1 Interrupção externa 1 4 0x0006 INT2 Interrupção externa 2 5 0x0008 INT3 Interrupção externa 3 6 0x000A INT4 Interrupção externa 4 7 0x000C INT5 Interrupção externa 5 8 0x000E INT6 Interrupção externa 6 9 0x0010 INT7 Interrupção externa 7
10 0x0012 TIMER2 COMP T/C2 comparação 11 0x0014 TIMER2 OVF T/C2 overflow 12 0x0016 TIMER1 CAPT T/C1 captura 13 0x0018 TIMER1 COMPA T/C1 comparação A 14 0x001A TIMER1 COMPB T/C1 comparação B 15 0x001C TIMER1 OVF T/C1 overflow 16 0x001E TIMER0 COMP T/C0 comparação 17 0x0020 TIMER0 OVF T/C0 overflow 18 0x0022 SPI, STC SPI, transferência terminada 19 0x0024 USART0, RX USART0, recepção terminada 20 0x0026 USART0, UDRE USART0, registo de dados vazio 21 0x0028 USART0, TX USART0, transmissão terminada 22 0x002A ADC ADC, conversão terminada 23 0x002C EE READY EEPROM ready 24 0x002E ANALOG COMP Comparador analógico 25 0x0030 TIMER1 COMPC T/C1 comparação C 26 0x0032 TIMER3 CAPT T/C3 captura 27 0x0034 TIMER3 COMPA T/C3 comparação A 28 0x0036 TIMER3 COMPB T/C3 comparação B 29 0x0038 TIMER3 COMPC T/C3 comparação C 30 0x003A TIMER3 OVF T/C3 overflow 31 0x003C USART1, RX USART1, recepção terminada 32 0x003E USART1, UDRE USART1, registo de dados vazio 33 0x0040 USART1, TX USART1, transmissão terminada 34 0x0042 TWI Two Wire Interface 35 0x0044 SPM READY Store Program Memory Ready
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 10
MMeemmóórriiaa ddee DDaaddooss ((RRAAMM))
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 11
SSiisstteemmaa ddee SSiinnaaiiss ddee RReellóóggiioo
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 12
Sinais de Relógio no ATmega128 • Fontes de Sinal de Relógio
o Oscilador a cristal
Opções possíveis: 0.4 MHz a 16 MHz
o Oscilador a cristal de baixa frequência Utilização de um cristal de 32.768 KHz
o Oscilador RC externo
o Oscilador interno RC
Frequências fixas: 1, 2, 4 ou 8 MHz (@5 V, 25°C) Com calibração é possível conseguir uma precisão de ±1% para qualquer valor de Vcc e de temperatura.
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 13
Registo de calibração
o Sinal de relógio externo
o Divisão da frequência de relógio
É possível efetuar a divisão da frequência do sinal de relógio de maneira a conseguir uma frequência de funcionamento menor
d = 0b (XDIV6 .. XDIV0)
. ó
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 14
PPoorrttoo ddee II//OO ((rreepprreesseennttaaddoo uumm úúnniiccoo bbiitt ddee uumm ppoorrttoo))
1 – Registo de direção de dados do porto de E/S (DDRx). Para cada um dos bits do porto, a escrita de um ‘0’ neste registo programa o porto com entrada de dados. A escrita de um ‘1’ programa o bit do porto como saída de dados.
2 – Registo de saída de dados do porto de E/S (PORTx). Se o bit do porto estiver
programado como saída de dados, a escrita de um ‘0’ ou um ‘1’ neste registo faz com que esse valor apareça no pino de saída (5). Se o bit estiver programado como entrada de dados, a escrita de um ‘0’ desactiva o pull-up interno, a escrita de um ‘1’ activa o pull-up interno.
3 – Registo de entrada de dados do porto de E/S (PINx). Se o bit do porto estiver programado como entrada, os valores presentes no pino exterior (5) podem ser lidos para o registo PINx.
4 – Resistência de pull-up interna. No caso do bit do porto estar programado como entrada de dados, podemos optar por inserir esta resistência de pull-up caso o dispositivo exterior não consiga definir o valor lógico ‘1’.
5 – Pino exterior para entrada / saída de dados.
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 15
• Registos dos Portos (Porto A)
• Registo Especial de IO
PUD – Pull Up Disable. O valor ‘1’ escrito neste bit desactiva todos os pull up internos dos diferentes portos do ATmega128
Exemplo 1 Programar o Porto A como entrada de dados, activando os pull-ups internos
Linguagem Assembly Linguagem C clr r16 ; escreve 0s em DDRA para DDRA = 0; out DDRA ; programar o porto como entrada ser r16 ; escreve 1s em PORTA para PORTA = 0xFF; out PORTA ; activar os pull-ups internos
AAuullaass SSiisstteemmaass DDiiggiittaaiiss 22 22001122//22001133
ATmega 128 Página 16
Exemplo 2 Programar o Porto C como saída de dados e inicializá-lo com o valor 8(0b00001000)
Linguagem Assembly Linguagem C ldi r16,0b00001000 ; escreve 8 em PORTC PORTA = 0b00001000; out PORTC ; programar o porto como saída ser r16 ; escreve 1s em DDRC para DDRA = 0xFF; out DDRC ; programar o porto como saída
Exemplo 3 Programar os 6 bits –sig do Porto A como entrada de dados e os 2 bits +sig como saída de dados. Desactivar os pull-ups internos das entradas e inicializar os bits de saída com ‘11’
Linguagem Assembly Linguagem C ldi r16,0xC0 ; programa o DDRA DDRA = 0xC0; out DDRA ldi r16,0b11000000 ; bits de saída a 1 e pull_ups PORTA = 0xC0; out PORTA ; internos desactivados