MSP430 Microchip PIC 8051 / 89C52 Programador EC-PIC 8051 - Login
| | Datas importantes
Data |
Dia da Semana |
Local |
Atividade |
03/07/2008 |
5a |
Lab |
Última data para atividades |
09/07/2008 |
4a |
Lab |
Final |
Contrato pedagógico: pegue aqui
Calendário de atividades: pegue aqui
Projeto semestral: Projeto
Robô
Veja aqui os robôs desenvolvidos pelos alunos (com vídeo):
2o sem 2007 |
Francesco Jacomel, Gustavo de Faro Colen Nunes, João Paulo da Silva,
Rafael Augusto Giliczynski e Welinton Canelo |
Vídeo |
2o sem 2006 |
Alexandre Perin;
Klystofer Ortega; Luciano Motti; Victor Villela Serta |
Vídeo |
Cézar
Augusto Gonçalves Barboza; Francisco Wolff Leal; Paulo Ricardo Lopes de
Faria; Roger Kenji Tanaka |
Vídeo |
Evandro
Fonseca; Franz Gustav Niederheitmann; Teresa Winter |
Vídeo |
1o sem 2006 |
Lauro Wolf
Valente; Michel Tomson Kalil Sphair;Wellington Corrêa Bianchini |
Vídeo |
Eduardo
Dalazen; Fernando Sulzbacher ;Marcos Campana |
|
Tatiana Pereira Filgueiras; Sergio Kenzo Wojitani; Diego Cezar Celli; I
Jen Fan |
Vídeo |
André Gelasco
Malschitzky, Joffer José Novak de Albuquerque |
|
2o sem 2005 |
Diogo
Rodrigues de Jesus,Emerson Antônio Pitlak,Samuel Alessandro Camargo |
Vídeo |
Anderson
Trindade Venturini, Barbara
Martinazzo,Bruno
de Souza |
Vídeo |
Adroaldo Martins Filho, Leandro Diogo Vazatta, Roberto Eliud Marks Farias,
Thiago Kendi Shiono |
Vídeo |
Adriano de Miranda,
Flávio José de Freitas,Michael Henrique Siegwarth |
Vídeo |
Dennis
Carnelossi Furlaneto, Guilherme Spyra Gubert, Hood Wilson Gusso Silva |
Vídeo |
João Pedro
Antunes Fontes, Rodolfo E. Rickli Neto, Rafael Girotto |
Vídeo |
Rodrigo Dyck,
Zoroastro Santana |
Vídeo |
Peter
Marik, Luciano Daniel Amarante e Daniel Rubel |
Vídeo |
D’Olivo, Gustavo
Madruga e João Victor Gonçalves |
Vídeo |
1o sem 2005 |
Margareth Suchÿ,
Fábio Henrique Mazarotto, Luiz Teruhiko Akagi |
Vídeo |
FERNANDO
HABITZREUTER,RAFAEL CARLECE SERRATO |
Vídeo |
2o sem 2004 |
Paula, Rafael e
Darlan |
Vídeo |
Juarez, Rafael e
Rhenyo |
Vídeo |
Alexandre e
Henrique |
Vídeo |
Carlos, José e
Kimar |
|
Felipe, Fernando
e Rafael |
Vídeo |
Alan, Álvaro e
Bernando |
|
Vinicius e
Roberto |
|
Veja também os
projetos integrados
Bibliografia
 |
Hamacher,
V. Carl; Computer Organization; Forth Edition; McGraw-Hill, 1996. |
 |
Heuring,
Vincent, JORDAN, Harry; Computer
Systems Design and Architecture. Addison Wesley, 1997. |
 |
Tanembaum,
Andrew; Organização Estruturada de Computadores; Prentice Hall do Brasil,
1998. |
 |
Goor,
A. Van Der; Computer Architecture and Design; Addison Wesley, 1989. |
Material
 | PIC
|
 | 8051
|
Outros
Atividades
Atividade 1 - Criar um
programa assembly que jogue para a saída P1 do 89C52 um valor de
contagem BCD incrementado a cada interrupção nos terminais INT0 do 89C52
(conectar um gerador de funções externo). Esta saída deverá ser conectada
aos dois displays da mesa digital. Como programa principal, implementar um
contador seqüencial "ping-pong" que acenda sempre apenas um led das oito
saídas de P2. |
Atividade 2: Modificar a
atividade 1 para apresentar o valor da contagem da interrupção INT0 em
dois displays de 7 segmentos multiplexados pela saída P1. Utilizar o bit
P1.7 para selecionar o display a ser aceso. Utilizar como clock a mesa
digital em 72kHz e fazer a atualização de cada display em 60Hz. Fazer o
seqüencial atualizar seu deslocamento a cada 1Hz. |
Atividade 3:
Implemente um sistema de alarme que ao ser ligado, envie ao PC (pela porta
serial) a mensagem "DESATIVADO". Ao digitar uma senha de 4 dígitos, o
alarme deverá exibir a mensagem "ATIVADO". Para voltar a situação inicial,
basta digitar novamente a mesma senha.
Enquanto estiver ativado, o sistema deverá monitorar um bit, e caso
neste bit ocorra uma rampa descendente (por interrupção), um LED deve acender indicando que
o alarme está soando, voltando a ser desligado apenas quando o usuário
digitar a senha correta (voltando então a situação inicial). |
Atividade 4: Modificar
a atividade anterior para que cada digito recebido venha e um teclado
matricial, tratado por interrupção. |
Atividade 5: Fazer do
PIC um contador binário de 8 bits. Utilizar o clock da mesa digital; |
Atividade 6: Implementar o
circuito ON-OFF com o PIC, utilizando clock externo ou a cristal:
PORTB.0 (entrada) |
PORTC.1(saída) |
PORTC.0(saída) |
0 |
0 |
1 |
1 |
1 |
0 |
|
Atividade 7: Implementar um decodificador BINÁRIO-7 segmentos
utilizando a técnica de tabela (comando RETLW). Trazer um display
de 7 segmentos e 7 resistores de 330 ohms; |
Atividade 8: Fazer um contador de dois dígitos decimal (deve
contar de 00 até 99 voltando a 00). Estes dois dígitos devem ser
apresentados no display BCD da mesa digital. Utilizar como saída do
dígito da unidade os bits PORTC.[3..0], como saída do dígito da
dezena os bits PORTC.[7..4] e como sincronismo (rampa ascendente) o PORTB.1;
|
Atividade 9:Ao ligar o circuito, este deverá
exibir em um display LCD o valor 00. Ao ocorrer uma interrupção externa em
RB0/INT o valor do display deverá ser incrementado. Conectar os pinos de
dados do display em RC[7..0] e os sinais E e RS nos pinos RB1 e RB2
respectivamente. Dica:
 | leia atentamente o item 12.10.1 do manual do PIC; |
 | verifique a função dos bits do registrador INTCON. |
 | Part I: descrição do funcionamento
do display. |
|
Atividade 10: retomar a Aplicação 8 onde a
dezena e a unidade são apresentadas na porta C (RC7:RC4 = Dezena e
RC3:RC0 = Unidade). Corrija o código para que o incremento e
atualização destes valores (PORTC) ocorra dentro de uma interrupção
requisitada de um em um segundo através do overflow do TIMER2.
Faça como processo principal, a chave ON-OFF (Aplicação 6) funcionar em
dois leds (led1 e led0) a partir de uma chave (sw0) no PORTB (RB1) .
 | Restrições:
 | ajustar a freqüência de clock do PIC para 16kHz. |
|
 | Dicas:
 | leia atentamente o item 7.0 do manual do PIC; |
 | ajustar prescaler para 1:16 e postscaler para 1:1; |
 | o valor do PR2 é por sua conta; |
 | para habilitar a interrupção do TIMER2 você precisa ligar o
INTCON.PEIE; |
 | registradores envolvidos para configuração do TIMER2: PIR1;INTCON;T2CON;PIE1;PR2. |
|
|
Atividade 11: Implementar um sistema de alarme que monitore um
sensor de temperatura (LM35). Caso a temperatura fique inferior a 40ºC, um LED verde deverá acender. Se a temperatura ficar superior a 40ºC e
inferior a 50ºC um LED vermelho e um beep deverão pulsar na freqüência de
2Hz. Por fim, se
a temperatura ficar superior a 50ºC o LED e o sonalarme deverão soar
ininterruptamente.
 | Pegue aqui o dataheet do LM35; |
 | Observem que o CAD permite medir tensões entre 0 e Vcc; |
 | Estudar e colocar para funcionar o conversor analógico-digital do
PIC16F876. O funcionamento deste CAD está descrito no capítulo 11 (a
partir da página 111) do manual do CI. Clique aqui para pegar um
código de exemplo para teste do CAD; |
 | Para aquecer o sensor, aproximar um ferro de soldar.
|
|
Atividade 12: Implementar um
circuito onde um microcontrolador posicione um Servo Motor em um ângulo de
0o a aproximadamente 180o em função
de mensagens recebidas pela serial. Inicialmente o servo pode ser
posicionado em 0o e, a cada
caractere "+" recebido, o ângulo aumenta em aproximadamente 18o.
Cada vez que o ângulo é atualizado, o microcontrolador deverá enviar um
caractere "!". Se o servo estiver com seu ângulo máximo (aproximadamente
180o), caso seja digitado "+", o
caractere "#" deve ser enviado pela serial e o comando recebido é
ignorado. A cada caractere "-" recebido, o ângulo diminui em
aproximadamente 18o. Cada vez que o
ângulo é atualizado, o microcontrolador deverá enviar um caractere "!". Se
o servo estiver com seu ângulo mínimo (aproximadamente 0o),
caso seja digitado "-", o caractere "#" deve ser enviado pela serial e o
comando recebido é ignorado.
Veja: Material Eletro Mecânicos (.ppt)
|
Atividade 13: Implementar as
seguintes funções em C para o MSP430 Kit Universitário:
 | Display16x2() : configura o display para duas
linhas sem cursor; |
 | Clear() : limpa o display e posiciona o cursor na 1a posição; |
 | SetPosition(int linha,int coluna): posiciona o cursor do display em uma
linha/coluna; |
 | ShowCursor(): exibe o cursor; |
 | HideCursor(): apaga o cursor; |
 | Print(char* str): imprime a string str no cursor. |
Testá-la no kit e apresentá-la ao professor. Para isto, implementar um
programa que teste todas estas funções e executá-lo passo a passo na
presença do professor.
Conexões no kit ao display LCD:
Sinal do display |
Pino do MSP430 |
D[7..0] |
P5 |
E |
P2.7 |
RS |
P2.6 |
Os sinais de alimentação do display já está conectados na placa. |
Atividade 14: Implementar um
relógio digital (HH:MM:SS) no display LCD do MSP430, sincronizado pela
interrupção do TIMERA. Entre cada interrupção, a CPU do microcontrolador
deverá ficar desligada (baixo consumo). Empacotar as funções da atividade
anterior em uma classe chamada Display16x2. |
Atividade 15: Implementar em C++
com MSP430 um programa que controle o LED conectado ao bit 0 da porta P2,
através da porta serial. Ao iniciar o programa, o software deverá
solicitar uma senha (previamente gravada no código; Exemplo: “1234”),
conforme o exemplo abaixo:
Login:
Ao digitá-la corretamente (preencher com * cada tecla recebida), será
exibido para o usuário o seguinte menu:
LED = Apagado Digite:
1) Para inverter o estado do LED;
2) Para mudar a senha;
3) Para logoff;
Ao digitar 1, o estado do LED deve inverter e o menu precisa ser
atualizado.
Ao digitar 2, será pedida uma nova senha que alterará o valor original.
Ao digitar 3, o programa volta a situação inicial (Login).
|
Atividade 13: Implementar a
atividade 5, porem transmitindo as palavras ON/OFF dos pela porta
serial, sendo exibidas no Hyperterminal.
Observações:
1. antes de enviar as strings ON ou OFF enviar o caracter 12
(decimal). Este caracter faz apagar a tela do Hyperterminal;
2. Clique aqui
para fazer download do arquivo com código de exemplo de
recepção e transmissão serial (implementado pelo aluno André Guilherme
Linarth). Neste código, há uma rotina para transmissão e uma para
recepção com a taxa de 57600 bps (para um cristal de 3.58MHz).
|
Atividade 17: Implementar um osciloscópio digital utilizando PIC
e um microcomputador. Para isto, os seguintes recursos deverão ser
utilizados:
1. utilizar o conversor analógico-digital para aquisição dos
sinais. Clique aqui para pegar
um código de exemplo para teste do CAD; 2. utilizar o módulo de comunicação serial (do PIC) para
transmitir cada valor convertido (utilizar a maior taxa de comunicação
possível); 3. implementar um programa
em C/C++ que pegue os dados da serial e exiba-os na tela (na forma de
gráfico tensão x tempo). 4. devido a dificuldade
para ajustar uma taxa de transmissão, utilizar o PIC com um cristal oscilador de 3,58MHz.
Este cristal é encontrado nas lojas de eletrônica (para outros valores de
cristal, ajustar os correspondentes parâmetros no programa).
Observações importantes:
1. os sinais de entrada deverão estar entre 0
e 5 Volts; 2. será avaliado apenas a exibição da forma de onda correta
(não será necessário ajustar nem a escala de tensão nem a escala de tempo
adequadamente); 3. Mecanismos para sincronismo devem ser implementados,
evitando que os sinais fiquem aparecendo na tela em posições
aleatórias; 4.
Clique aqui
para fazer download do arquivo com código de exemplo de
recepção e transmissão serial (implementado pelo aluno André Guilherme
Linarth). Neste código, há uma rotina para transmissão e uma para
recepção com a taxa de 57600 bps (para um cristal de 3.58MHz); 5. Para
maiores informações, consultar o datasheet do microcontrolador PIC utilizado.
Como referência, podem consultar o projeto PIC-Based Dual-Channel Virtual
Oscilloscope contido na edição de outubro (pegue aqui - 6,75Mbytes).
|
Atividade
11: Implementar um circuito de alarme com display LCD e teclado
matricial.

 | Ao ligar o sistema, o display deverá apresentar a msg: "Alarme
desligado/# para armar". Ao pressionar a tecla #
o alarme armará mostrando a msg: "Alarme armado!/Digite a
senha". Para desarmá-lo, o usuário deverá digitar uma seqüência
de 4 dígitos (senha). Caso uma entrada de sensor (PA) vá
para nível lógico 1, o alarme deverá soar (utilizar um sonalarme) e
mostrar a msg "*** Alarme ***". Se o alarme estiver
soando, este só será desativado se for digitada a senha correta,
voltando ao estado inicial.
 | Para quem não sabe, sonalarme é uma pequena sirene (bem barata). Veja a
foto: |
|

Comprem um modelo que funcione a partir de 3V (os modelos que funcionam
só com 30V não servem).
 | Dica: para utilizar o PORTA como entrada/saída digital, leia o item
3.1 do datasheet e certifique-se de que o registrador ADCON1
(página 112) esteja corretamente configurado. |
|
Atividade 18: utilizando
89C52,
fazer um contador de dois dígitos decimal (deve contar de 00 até 99
voltando a 00) com sincronismo(rampa ascendente) pelo bit P3.0 e saída na
porta P1. Estes dois dígitos devem ser apresentados no display BCD
da mesa digital. Este programa deverá ser feito em C, porém durante a
apresentação, a equipe deverá explicar o código em assembly.
O software para assembly/C do 8031 da Keil (versão para teste que atende
nossas necessidades) pode ser baixado aqui.
Pegue aqui o arquivo com o programa
do emulador de EPROM.
Recomendo a
utilização do emulador de EPROM. A PUC possui 20 emuladores e estão a
disposição de vocês (com o manual). Na utilização deste emulador,
recomendo que simulem a 27512, pois esta foi a memória que testei com a
placa e funcionou corretamente. |
Atividade 12: Implementar um voltímetro digital.
Este voltímetro deve medir tensões de 0 até 25,5V com 8 bits. O valor deve
ser enviado pela porta serial e exibido no Hyper Terminal. A atualização do valor na
tela deve ser feita a
cada 1 segundo.
 | Observem que o CAD permite medir tensões entre 0 e Vcc. Para medir
tensões maiores, utilizar um divisor resistivo. |
Importante:
Codificar uma função que converta um número
de 8 bits (obtido a partir do CAD) para BCD (divisão por DEZ), permitindo a exibição do valor na
tela.
A figura abaixo mostra o fluxograma desta função:

Esta função foi originalmente projetada para outro
processador, porém pode ser facilmente adaptada ao PIC.
Para executá-la, passar para esta função em R2 o valor a ser dividido por 10.
Ao terminar sua execução, teremos o resultado em R3 e o resto em AC.
Clique aqui
para fazer download do arquivo com código de exemplo de
recepção e transmissão serial (implementado pelo aluno André Guilherme
Linarth). Neste código, há uma rotina para transmissão e uma para
recepção com a taxa de 57600 bps (para um cristal de 3.58MHz).
|
Atividade 13 Implementar um
circuito onde um microcontrlador faça, a cada 30s, uma varredura em um
ângulo de aproximadamente 180º (com servo motor) localizando o ângulo de
maior incidência de luz em um LDR.
Após a varredura, o servo deverá ser posicionado no ângulo encontrado,
aguardando até o início da próxima varredura. Para referência de luz,
utilizar uma lanterna ou LED de alta intensidade. |
|