Mudanças entre as edições de "Microcontroladores"
Linha 542: | Linha 542: | ||
Alarme e rastreador veicular (muito interessante este, necessita de placa GPRS e GPS) | Alarme e rastreador veicular (muito interessante este, necessita de placa GPRS e GPS) | ||
Semáforo | Semáforo | ||
+ | |||
+ | '''Kit arduino''' | ||
+ | |||
+ | 1x Protoboard 840 | ||
+ | 1x Cabo USB AB | ||
+ | 1x Sensor de Temperatura (Termistor NTC 10k) | ||
+ | 1x Sensor de Luminosidade (LDR 5mm) | ||
+ | 1x Potenciômetro 10k? | ||
+ | 4x Chave Momentânea (PushButton) | ||
+ | 5x LEDs Amarelos | ||
+ | 5x LEDs Verdes | ||
+ | 5x LEDs Vermelhos | ||
+ | 1x LED alto brilho | ||
+ | 15x Resistores 300? | ||
+ | 5x Resistores 10k? | ||
+ | 1x Buzzer | ||
+ | 1x Display de LCD 16x2 com conector soldado (s/ bl) | ||
+ | 20x fios Jumper Premium de 20 cm | ||
+ | 10x fios Jumper Premium de 10 cm | ||
+ | 1x Caixa Organizadora | ||
+ | Preço: R$ 89,00 sem placa arduino | ||
+ | |||
+ | '''8051''' | ||
+ | |||
+ | Freqüência de clock de 12 MHz, com algumas versões que alcançam os 40 MHz | ||
+ | Até 64 kB de memória de dados externa | ||
+ | 128 bytes de RAM interna | ||
+ | Até 64 kB de memória de programa configurável de duas formas mutuamente excludentes: | ||
+ | 4 kB internos (ROM no 8051 e EPROM no 8751) e mais 60 kB externos; | ||
+ | 64 kB externos; | ||
+ | 4 portas bidirecionais de I/O, cada uma com 8 bits individualmente endereçáveis; duas dessas | ||
+ | portas (P0 e P2) e parte de uma terceira (P3) ficam comprometidas no caso de se utilizar qualquer tipo de memória externa; | ||
+ | 2 temporizadores /contadores de 16 bits; | ||
+ | 1 canal de comunicação serial; | ||
+ | 5 fontes de interrupção (dois timers, dois pinosexternos e o canal de comunicação serial) com 2níveis de prioridade selecionáveis por software; | ||
+ | Oscilador de clock interno. | ||
=Tarefas da semana 13/05/2013= | =Tarefas da semana 13/05/2013= |
Edição das 23h57min de 1 de julho de 2013
Bibliografia sobre Microcontroladores
http://www.ebah.com.br/content/ABAAAA8T8AK/microcontrolador-8051
Implementações em Assembly no MIC 8051
Zerando área de memória de 50h até 7Fh
mov A,50h loop: mov R0,A mov @R0,#00 inc A cjne R0,7Fh,loop loop2: jmp loop2
Contador em display LED, apenas um dígito e sem utilizar o ponto
Faltam os temporizadores ainda não entendi como funcionam, estou trabalhando nisso
Portas e bits correspondentes a cada LED. A=P0.1 B=P1.2 C=P2.2 D=P3.2 E=P3.1 F=P2.1 G=P1.1
loop:
setb P1.1
CLR P2.1
CLR P3.1
CLR P0.1
CLR P1.2
CLR P2.2
CLR P3.2
setb P0.1
setb P2.1
setb P3.1
setb P3.2
setb P2.2
CLR P0.1
CLR P1.1
CLR P3.1
CLR P3.2
setb P3.1
CLR P2.2
setb P0.1
setb P3.2
CLR P2.1
setb P1.2
CLR P0.1
CLR P3.2
CLR P3.1
setb P1.1
setb P2.1
setb P3.1
setb P3.2
CLR P1.2
CLR P1.1
CLR P2.1
CLR P3.1
CLR P3.2
setb P3.1
jmp loop
</syntaxhighlight>
Pilhas - Exercício 1
Neste exercício observei as intruções push(insere item no início da pilha) e pop(remove intem do início da pilha)
loop:
mov A,#65H
mov B,#87H
push ACC
push B
mov A,#00H
mov B,#00H
pop B
pop ACC
sjmp loop
END
</syntaxhighlight>
Pilhas - Exercício 2
Neste Exercício observei o contador de programa(PC) e o apontador de pilha(Stack Pointer)
ORG 000h
main: ljmp ponto1
ORG 1E5H
ponto1:
mov R0,#55H
mov R1,#5
acall setar_mem
mov R0,#77H
mov R1,#10
acall setar_mem
loop: sjmp loop
ORG 315h
setar_mem:
mov @R0,#0FFh
inc R0
djnz R1,setar_mem
ret
END
</syntaxhighlight>
Contador de um dígito com interrupção
PORT EQU P1
org 0000h
jmp main
org 001Bh
jmp INT_TIMER1
org 0100h ; entry address for main
main:
mov R1,#09h
mov A,R1
mov DPTR,#num
mov TMOD, #00010000b ; timer 1 em modo 1
mov TH1, #0FEh
mov TL1, #0FDh
mov IE, #10001000b ; habilita interrupcao
setb TR1
loop: ljmp loop
INT_TIMER1:
clr TR1 ; para o timer
mov TH1, #0FEh ; recarrega valores no timer
mov TL1, #0FFh
LCALL envia_num ; aciona uma saida
setb TR1 ; religa o timer
reti
envia_num:
mov A,R1
movc A,@A+DPTR
mov PORT,A
mov A,R1
JZ reset
dec R1
ret
reset:
mov R1,#09h
ret
org 0200h
num: DB 021h, 01h, 0F1h, 05h, 25h, 33h, 61h, 49h, 0F3h, 81h
END
</syntaxhighlight>
Contador de um dígito com delay por software
loop:
mov P1,#81h
lcall delay_1ms
mov P1,#0F3h
lcall delay_1ms
mov P1,#49h
lcall delay_1ms
mov P1,#61h
lcall delay_1ms
mov P1,#33h
lcall delay_1ms
mov P1,#25h
lcall delay_1ms
mov P1,#05h
lcall delay_1ms
mov P1,#0F1h
lcall delay_1ms
mov P1,#01h
lcall delay_1ms
mov P1,#21h
lcall delay_1ms
ljmp loop
delay_1ms:
push 7
mov R7,#50
loop1:
nop ; 1 ciclo de maquina
nop ; 1 ciclo de maquina
djnz R7,loop1 ; 2 ciclo de maquina
fim_delay_1ms:
nop
nop
nop
pop 7
ret
</syntaxhighlight>
Contador com 4 dígitos e delay por software fazendo varredura das portas
Postas e bits correspontndes
P0=P2.0
P1=P2.1
P2=P2.2
P3=P2.3
A=P1.1
B=P1.2
C=P1.3
D=P1.4
E=P1.5
F=P1.6
G=P1.7
PONTO=P1.0
org 0000h
S1 EQU P2.0
S2 EQU P2.1
S3 EQU P2.2
S4 EQU P2.3
PORT EQU P1
main:
mov DPTR,#num
mov R0,#00
mov R1,#00
mov R2,#00
mov R3,#00
mov R7,#00
loop:
setb S4
mov A,R0
ACALL envia_num
clr S1
setb S1
mov A,R1
ACALL envia_num
clr S2
setb S2
mov A,R2
ACALL envia_num
clr S3
setb S3
mov A,R3
ACALL envia_num
clr S4
inc R7
cjne R7,#01h,loop
ACALL contadores
ljmp loop
envia_num:
movc A,@A+DPTR
mov PORT,A
clr A
ret
contadores:
mov R7,#00
inc R0
cjne R3,#0Ah,03Fh
mov R3,#00h
cjne R0,#0Ah,045h
inc R1
mov R0,#00
cjne R1,#0Ah,04Bh
inc R2
mov R1,#00
cjne R2,#0Ah,051h
inc R3
mov R2,#00
ret
org 0300h
num: DB 81h, 0F3h, 49h, 61h, 33h, 25h, 05h, 0F1h, 01h, 021h
END
</syntaxhighlight>
Contador 4 dígitos com interrupção e varredura das portas
Postas e bits correspontndes
P0=P2.0
P1=P2.1
P2=P2.2
P3=P2.3
A=P1.1
B=P1.2
C=P1.3
D=P1.4
E=P1.5
F=P1.6
G=P1.7
PONTO=P1.0
org 0000h
S1 EQU P2.0
S2 EQU P2.1
S3 EQU P2.2
S4 EQU P2.3
PORT EQU P1
main:
mov DPTR,#num
mov R0,#00
mov R1,#00
mov R2,#00
mov R3,#00
mov R7,#00
loop:
setb S4
mov A,R0
ACALL envia_num
clr S1
setb S1
mov A,R1
ACALL envia_num
clr S2
setb S2
mov A,R2
ACALL envia_num
clr S3
setb S3
mov A,R3
ACALL envia_num
clr S4
inc R7
cjne R7,#05h,loop
ACALL contadores
ljmp loop
envia_num:
movc A,@A+DPTR
mov PORT,A
clr A
ret
contadores:
mov R7,#00
inc R0
cjne R3,#0Ah,03Fh
mov R3,#00h
cjne R0,#0Ah,045h
inc R1
mov R0,#00
cjne R1,#0Ah,04Bh
inc R2
mov R1,#00
cjne R2,#0Ah,051h
inc R3
mov R2,#00
ret
org 0300h
num: DB 81h, 0F3h, 49h, 61h, 33h, 25h, 05h, 0F1h, 01h, 021h
END
</syntaxhighlight>
Implementaçao do contador com 4 dígitos e display led sete segmentos em C
#include <8051.h>
static long miliSegundos;
volatile unsigned char UmSeg;
int num[10];
int i=0;
int j=0;
int k=0;
int l=0;
void init_contadores(){
num[0]=0x81;
num[1]=0xF3;
num[2]=0x49;
num[3]=0x61;
num[4]=0x33;
num[5]=0x25;
num[6]=0x05;
num[7]=0xF1;
num[8]=0x01;
num[9]=0x21;
}
void varredura(){
P1=0xff;
P2_0=0x0;
P1=num[i];
P2_0=0x1;
P1=0xff;
P2_1=0x0;
P1=num[j];
P2_1=0x1;
P1=0xff;
P2_2=0x0;
P1=num[k];
P2_2=0x1;
P1=0xff;
P2_3=0x0;
P1=num[l];
P2_3=0x1;
P1=0xff;
i++;
if(i==10){
i=0;
j++;
}
if(j==10){
j=0;
k++;
}
if(k==10){
k=0;
l++;
}
if(l==10)
l=0;
return;
}
void delay(){
ET0=0x0;
miliSegundos=0;
UmSeg=0;
ET0=0x1;
while (UmSeg==0);
return;
}
void ClockIrqHandler (void) interrupt 1 using 3 {
TL0 = 0xFE;
TH0 = 0xFE;
miliSegundos++;
if (miliSegundos==2)
UmSeg = 1;
}
void init_timer() {
TR0=0;
TH0=0xFE;
TL0=0xFE;
TR0=0x1;
ET0=1;
EA=1;
return;
}
void main(){
init_timer();
init_contadores();
for (;;){
varredura();
delay();
}
}
Informações sobre alguns microcontroladores
Arduino Uno R3
Características
Tamanho: 5,3cm x 6,8cm x 1,0cm
Microcontrolador: ATmega328
Tensão de operação: 5V
Tensão de entrada (recomendada): 7-12V
Tensão de entrada (limites): 6-20V
Pinos de entrada/saída (I/O) digitais: 14 (dos quais 6 podem ser saídas PWM)
Pinos de entrada analógicas: 6
Corrente DC por pino I/O: 40mA
Corrente DC para pino de 3,3V: 50mA
Memória Flash: 32KB (dos quais, 0,5KB são usados pelo bootloader)
SRAM: 2KB
EEPROM: 1KB
Velocidade de Clock: 16MHz
Temperatura de operação: de 10º a 60º
Preço R$ 69,00
Link para compra: http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=120
Possui ambiente próprio para desenvolvimento e implementa a linguagem C
Arduino Mega 2560 R3
Características:
Tamanho: 5,3cm x 10,2cm x 1,0cm
Microcontrolador: ATmega2560
Tensão de operação: 5V
Tensão de entrada (recomendada): 7-12V
Tensão de entrada (limites): 6-20V
Pinos de entrada/saída (I/O) digitais: 54 (dos quais 14 podem ser saídas PWM)
Pinos de entrada analógicas: 16
Corrente DC por pino I/O: 40mA
Corrente DC para pino de 3,3V: 50mA
Memória Flash: 256KB (dos quais, 8KB são usados pelo bootloader
SRAM: 8KB
EEPROM: 4KB
Velocidade de Clock: 16MHz
Link para comprar: http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=121
Possui ambiente próprio para desenvolvimento e implementa a linguagem C
Exemplos de projetos com arduino
Automação residencial com android e comando de voz
Alarme e rastreador veicular (muito interessante este, necessita de placa GPRS e GPS)
Semáforo
Kit arduino
1x Protoboard 840
1x Cabo USB AB
1x Sensor de Temperatura (Termistor NTC 10k)
1x Sensor de Luminosidade (LDR 5mm)
1x Potenciômetro 10k?
4x Chave Momentânea (PushButton)
5x LEDs Amarelos
5x LEDs Verdes
5x LEDs Vermelhos
1x LED alto brilho
15x Resistores 300?
5x Resistores 10k?
1x Buzzer
1x Display de LCD 16x2 com conector soldado (s/ bl)
20x fios Jumper Premium de 20 cm
10x fios Jumper Premium de 10 cm
1x Caixa Organizadora
Preço: R$ 89,00 sem placa arduino
8051
Freqüência de clock de 12 MHz, com algumas versões que alcançam os 40 MHz
Até 64 kB de memória de dados externa
128 bytes de RAM interna
Até 64 kB de memória de programa configurável de duas formas mutuamente excludentes:
4 kB internos (ROM no 8051 e EPROM no 8751) e mais 60 kB externos;
64 kB externos;
4 portas bidirecionais de I/O, cada uma com 8 bits individualmente endereçáveis; duas dessas
portas (P0 e P2) e parte de uma terceira (P3) ficam comprometidas no caso de se utilizar qualquer tipo de memória externa;
2 temporizadores /contadores de 16 bits;
1 canal de comunicação serial;
5 fontes de interrupção (dois timers, dois pinosexternos e o canal de comunicação serial) com 2níveis de prioridade selecionáveis por software;
Oscilador de clock interno.
Tarefas da semana 13/05/2013
- Temporizador por software
- Estudar pilha
- Temporizador por hardware (sem interrupção)
- Temporizador por hardware (com interrupção)
Tarefas da semana 03/06/2013
- Separar as lógicas de contagem e varedura no contador com display led
- Procurar um simulador para arduíno
- Tentar implementar o contador com display led em C
Tarefas da semana 17/06/2013
- Iniciar estudos sobre alguns microcontroladores, quais as principais diferenças e vantagens de cada um
- Exportar o código implementado em C do contador de 4 dígitos para um simulador Arduíno
- Procurar simuladores para Arduíno
Tarefas da semana 27/06/2013
- Criar uma tabelas com informações sobre alguns microcontroladores
- Estudar Motor de passo
- Estudar Arduino