quarta-feira, junho 30, 2010
Problemas com o blog
Estou editando o layout do blog por isso está tudo desconfigurado. Peço um pouco de paciência, em alguns dias eu resolverei o problema.
Fotos do meu último experimento
Aí estão as fotos da montagem do meu último experimento (nada científico) com o PIC 16F628A da Microchip.
Mas não se anime, pois não está funcionando :(
Vou dar uma debugada depois, com calma, pois no Proteus está funcionando. Devo ter feito alguma barberagem na hora de montar, sei lá.
O que acontece é que quando o botão é pressionado os dois LEDs vermelhos apagam e o verde não liga.
Eis as fotos:
Mas não se anime, pois não está funcionando :(
Vou dar uma debugada depois, com calma, pois no Proteus está funcionando. Devo ter feito alguma barberagem na hora de montar, sei lá.
O que acontece é que quando o botão é pressionado os dois LEDs vermelhos apagam e o verde não liga.
Eis as fotos:
Marcadores:
16F268A,
assembly,
eletronic,
eletrônica,
microchip,
microcontrolador,
pic
quarta-feira, junho 09, 2010
Mais um experimento com PIC 16F628A e Assembly
Seguindo a minha saga pelo mundo dos microcontroladores, hoje fiz mais um exemplo em Assembly usando o PIC 16F628A da Microchip.
A brincadeira é permutar entre o acendimento de um ou outro LED via chave táctil.
O fluxo do programa é este:
Aqui estão as imagens da simulação do circuito feita no Proteus:
Circuito desligado.
Circuito ligado.
Chave pressionada.
E aqui está o código Assembly:
;******************************************************************************;
; Processor: PIC16F628 at 4 MHz using internal RC oscillator ;
; Function : When the circuit is energized two LEDs will turn on, the power ;
; indicator and LED_D1. Every time the button is pressed the LED_D1 ;
; will turn off and the LED_D2 will turn on, the opposite occurs ;
; when the button is released, turning off the LED_D2 and turning ;
; on the LED_D1 again. ;
; Hardware : Protoboard ;
; Filename : main.asm ;
; Author : Jean J. Míchel <jeanjmichel-at-gmail.com> ;
; Website : http://www.jeanjmichel.blogspot.com ;
; Credit : ;
;******************************************************************************;
; Wiring diagram +-/\/\/--|>|--o GND ;
; +---v---+ | R2 LED_PWR ;
; -<|º 1 |>--+ ;
; -<| 6 |>----/\/\/--|>|--o GND ;
; -<| F |>--+ R3 D1 ;
; -<| 6 |>- | ;
; -<| 2 |>- +-/\/\/--|>|--o GND ;
; -<| 8 |>- R4 D2 ;
; -<| A |>- ;
; -<| |>--+----o¯o----o VDD 5v ;
; +-------+ | R1 ;
; +---/\/\/---o GND ;
;******************************************************************************;
#include <p16f628a.inc>
list p=16f628a
ERRORLEVEL 0, -302;, -224, -302, -305, -207
__config (_INTOSC_OSC_NOCLKOUT & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF)
#define select_bank0 bcf STATUS,RP0
#define select_bank1 bsf STATUS,RP0
#define LED_PWR PORTA,1
#define LED_D1 PORTA,0
#define LED_D2 PORTA,7
#define BUTTON PORTB,4
org 0x00
goto setup ;Perform the initial settings ;
main btfsc BUTTON ;Monitors the action of the button;
goto turn_on_d2 ;Turns on LED_D2 ;
goto turn_on_d1 ;Turns on LED_D1 ;
turn_on_d1 bcf LED_D2 ;Turns off LED_D2 ;
bsf LED_D1 ;Turns on LED_D1 ;
goto main
turn_on_d2 bcf LED_D1 ;Turns off LED_D1 ;
bsf LED_D2 ;Turns on LED_D2 ;
goto main
setup select_bank1
movlw B'00000000' ;Defines all pins of the PORTA ;
movwf TRISA ;registrator as output ;
movlw B'00010000' ;Defines all pins of the PORTB ;
movwf TRISB ;registrator as output except the ;
;the pin 4 - push button ;
bsf PCON, OSCF ;Sets 16F628 to operate at 4MHz ;
select_bank0
movlw 0x07
movwf CMCON ;Turns off the comparator ;
clrf PORTA ;Clears all pins of the PORTA ;
;registrator ;
clrf PORTB ;Clears all pins of the PORTB ;
;registrator ;
bsf LED_PWR ;Turns on LED_PWR - power LED ;
goto main ;Loop forever ;) ;
end
Enjoy!
A brincadeira é permutar entre o acendimento de um ou outro LED via chave táctil.
O fluxo do programa é este:
Aqui estão as imagens da simulação do circuito feita no Proteus:
Circuito desligado.
Circuito ligado.
Chave pressionada.
E aqui está o código Assembly:
;******************************************************************************;
; Processor: PIC16F628 at 4 MHz using internal RC oscillator ;
; Function : When the circuit is energized two LEDs will turn on, the power ;
; indicator and LED_D1. Every time the button is pressed the LED_D1 ;
; will turn off and the LED_D2 will turn on, the opposite occurs ;
; when the button is released, turning off the LED_D2 and turning ;
; on the LED_D1 again. ;
; Hardware : Protoboard ;
; Filename : main.asm ;
; Author : Jean J. Míchel <jeanjmichel-at-gmail.com> ;
; Website : http://www.jeanjmichel.blogspot.com ;
; Credit : ;
;******************************************************************************;
; Wiring diagram +-/\/\/--|>|--o GND ;
; +---v---+ | R2 LED_PWR ;
; -<|º 1 |>--+ ;
; -<| 6 |>----/\/\/--|>|--o GND ;
; -<| F |>--+ R3 D1 ;
; -<| 6 |>- | ;
; -<| 2 |>- +-/\/\/--|>|--o GND ;
; -<| 8 |>- R4 D2 ;
; -<| A |>- ;
; -<| |>--+----o¯o----o VDD 5v ;
; +-------+ | R1 ;
; +---/\/\/---o GND ;
;******************************************************************************;
#include <p16f628a.inc>
list p=16f628a
ERRORLEVEL 0, -302;, -224, -302, -305, -207
__config (_INTOSC_OSC_NOCLKOUT & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF)
#define select_bank0 bcf STATUS,RP0
#define select_bank1 bsf STATUS,RP0
#define LED_PWR PORTA,1
#define LED_D1 PORTA,0
#define LED_D2 PORTA,7
#define BUTTON PORTB,4
org 0x00
goto setup ;Perform the initial settings ;
main btfsc BUTTON ;Monitors the action of the button;
goto turn_on_d2 ;Turns on LED_D2 ;
goto turn_on_d1 ;Turns on LED_D1 ;
turn_on_d1 bcf LED_D2 ;Turns off LED_D2 ;
bsf LED_D1 ;Turns on LED_D1 ;
goto main
turn_on_d2 bcf LED_D1 ;Turns off LED_D1 ;
bsf LED_D2 ;Turns on LED_D2 ;
goto main
setup select_bank1
movlw B'00000000' ;Defines all pins of the PORTA ;
movwf TRISA ;registrator as output ;
movlw B'00010000' ;Defines all pins of the PORTB ;
movwf TRISB ;registrator as output except the ;
;the pin 4 - push button ;
bsf PCON, OSCF ;Sets 16F628 to operate at 4MHz ;
select_bank0
movlw 0x07
movwf CMCON ;Turns off the comparator ;
clrf PORTA ;Clears all pins of the PORTA ;
;registrator ;
clrf PORTB ;Clears all pins of the PORTB ;
;registrator ;
bsf LED_PWR ;Turns on LED_PWR - power LED ;
goto main ;Loop forever ;) ;
end
Enjoy!
Marcadores:
16F268A,
assembly,
eletronic,
eletrônica,
microchip,
microcontrolador,
pic
segunda-feira, junho 07, 2010
Pequeno jogo em JavaScript
Estava lendo o material do blog Elétron Livre sobre um dojo de programação com o Program-ME, onde o pessoal da Globalcode criou uma réplica do jogo Genius.
Parei para pensar como seria o algoritmo (sem antes ler o deles claro) e comecei a esboçar em JavaScript algo parecido.
Quando inicializa a tela são sorteados quatro números inteiros e positivos, esses números aparecem por 1,5 segundo nos quatro campos dispostos em forma de matriz 2x2 na tela e depois são apagados.
Ao jogador resta preencher os quatro campos novamente com os valores correspondente a cada um deles antes exibido. No final ao pressionar o único botão da tela, as respostas do usuário são confrontadas com os números sorteados e exibido o resultado indicando se o jogador acertou ou não a combinação de números.
Segue uma seqüência de imagens do jogo:
Números sorteados.
Hora de jogar :-)
Conferindo meu chute.
Jogar novamente?
Agora sim!
Jogar novamente?
Bye-bye
Claro que isso é uma bobeira, e para simular corretamente o jogo Genius eu deveria ter usado imagens nas cores que o jogo utilizava e não campos numéricos, mas como fiz isso somente para ver como seria... ta ai o resultado. :-) Foi uma hora de almoço gasta em nome da ciência :-)
Para aumentar a dificuldade bastas mudar o tempo em que permanecem exibidos os números sorteados.
Eis o fonte da página:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script language="JavaScript" type="text/javascript">
<!--
var ramdom = new Array();
var answers = new Array();
var ports = new Array();
function allocate() {
ports[0] = document.getElementById("portA");
ports[1] = document.getElementById("portB");
ports[2] = document.getElementById("portC");
ports[3] = document.getElementById("portD");
for(i = 0; i < 4; i++) {
ramdom[i] = Math.floor(Math.random()* 11);
ports[i].value = ramdom[i];
}
setTimeout(clearForm, 1500);
ports[0].focus();
}
function clearForm() {
for(i = 0; i < 4; i++) {
ports[i].value = "";
}
}
function checkAnswers() {
var result = true;
var tryAgain;
for(i = 0; i < 4; i++) {
answers[i] = ports[i].value;
if(answers[i] != ramdom[i]) {
result = false;
}
}
var message = "Ramdom numbers: " + ramdom + "\n" +
"Your answers: " + answers
if(result) {
alert("You win! :-) \n\n" + message);
}
else {
alert("You lose! :-( \n\n" + message);
}
tryAgain = prompt("Do you would like play again?", "Type Y or N");
if(tryAgain == "Y") {
allocate();
}
else {
document.getElementById("gameForm").style.display = "none";
document.getElementById("message").style.display = "block";
}
}
//-->
</script>
</head>
<body>
<div id="gameForm">
<input type="text" id="portA" name="portA" size="2" />
<input type="text" id="portB" name="portB" size="2" /> <br/>
<input type="text" id="portC" name="portC" size="2" />
<input type="text" id="portD" name="portD" size="2" /> <br/><br/>
<input type="button" id="check" name="check" value="Check my answers!" onclick="checkAnswers()" />
</div>
<div id="message" style="display: none;">
<p>Thanks for play my game! :-)</p>
</div>
<script>
allocate();
</script>
</body>
</html>
Parei para pensar como seria o algoritmo (sem antes ler o deles claro) e comecei a esboçar em JavaScript algo parecido.
Quando inicializa a tela são sorteados quatro números inteiros e positivos, esses números aparecem por 1,5 segundo nos quatro campos dispostos em forma de matriz 2x2 na tela e depois são apagados.
Ao jogador resta preencher os quatro campos novamente com os valores correspondente a cada um deles antes exibido. No final ao pressionar o único botão da tela, as respostas do usuário são confrontadas com os números sorteados e exibido o resultado indicando se o jogador acertou ou não a combinação de números.
Segue uma seqüência de imagens do jogo:
Números sorteados.
Hora de jogar :-)
Conferindo meu chute.
Jogar novamente?
Agora sim!
Jogar novamente?
Bye-bye
Claro que isso é uma bobeira, e para simular corretamente o jogo Genius eu deveria ter usado imagens nas cores que o jogo utilizava e não campos numéricos, mas como fiz isso somente para ver como seria... ta ai o resultado. :-) Foi uma hora de almoço gasta em nome da ciência :-)
Para aumentar a dificuldade bastas mudar o tempo em que permanecem exibidos os números sorteados.
Eis o fonte da página:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script language="JavaScript" type="text/javascript">
<!--
var ramdom = new Array();
var answers = new Array();
var ports = new Array();
function allocate() {
ports[0] = document.getElementById("portA");
ports[1] = document.getElementById("portB");
ports[2] = document.getElementById("portC");
ports[3] = document.getElementById("portD");
for(i = 0; i < 4; i++) {
ramdom[i] = Math.floor(Math.random()* 11);
ports[i].value = ramdom[i];
}
setTimeout(clearForm, 1500);
ports[0].focus();
}
function clearForm() {
for(i = 0; i < 4; i++) {
ports[i].value = "";
}
}
function checkAnswers() {
var result = true;
var tryAgain;
for(i = 0; i < 4; i++) {
answers[i] = ports[i].value;
if(answers[i] != ramdom[i]) {
result = false;
}
}
var message = "Ramdom numbers: " + ramdom + "\n" +
"Your answers: " + answers
if(result) {
alert("You win! :-) \n\n" + message);
}
else {
alert("You lose! :-( \n\n" + message);
}
tryAgain = prompt("Do you would like play again?", "Type Y or N");
if(tryAgain == "Y") {
allocate();
}
else {
document.getElementById("gameForm").style.display = "none";
document.getElementById("message").style.display = "block";
}
}
//-->
</script>
</head>
<body>
<div id="gameForm">
<input type="text" id="portA" name="portA" size="2" />
<input type="text" id="portB" name="portB" size="2" /> <br/>
<input type="text" id="portC" name="portC" size="2" />
<input type="text" id="portD" name="portD" size="2" /> <br/><br/>
<input type="button" id="check" name="check" value="Check my answers!" onclick="checkAnswers()" />
</div>
<div id="message" style="display: none;">
<p>Thanks for play my game! :-)</p>
</div>
<script>
allocate();
</script>
</body>
</html>
Marcadores:
adivinhação,
genius,
javascript,
jogo
sábado, junho 05, 2010
Eletrônica - micro controlador Microchip 16F628A + Assembly [fotos]
Tinha ficado devendo as fotos do meu experimento com o PIC 16F628A da Microchip, bem aqui estão elas:
Ficou bem legal, funcionou conforme o simulado, mas dei algumas mancadas na hora de construir o circuito, falta de prática :-D.
Ficou bem legal, funcionou conforme o simulado, mas dei algumas mancadas na hora de construir o circuito, falta de prática :-D.
Marcadores:
16f628A,
assembly,
eletronic,
eletrônica,
micro controladores,
microchip,
microcontroller,
pic,
protoboard
terça-feira, junho 01, 2010
Eletrônica - micro controlador Microchip 16F628A + Assembly
Quem, assim como eu, trabalha com TI está acostumado a ver sistemas transformando informações em informações =P, ou seja, dados vem daqui e vão para lá. Isso me deixa um pouco frustrado, pois não construo nada, não vejo nada acontecer, etc. (não me diga que ver um gráfico em um relatório é "ver" as coisas acontecerem em um sistema ;) ) então voltei para os meus primórdios sonhos infantis de construir alguma coisa (na verdade um robô) e para isso invoquei meus conhecimentos de quando tinha 15 anos e estudei na Escola Estadual Técnica Parobé (hoje Centro Tecnológico Estadual Parobé), onde cursei eletrônica.
Junte a vontade de fazer algo "se mexer" a ter um colega com skills do Professor Pardal a muitas conversas sobre automação na hora do almoço e um passeio pela Rua República do Líbano (onde estão as lojas de componentes eletrônicos aqui no Rio de Janeiro) e então terás nas mãos uma protoboard, um punhado de componentes e muita diversão ;)
Comecei leve: um micro controlador da Microchip (16F628A), dois LEDs, um botão e um programa escrito em Assembly. Assembly ao invés de C porque é o mais próximo que podemos chegar de ver os elétrons passando pela placa ;).
A brincadeira é muito simples, mas com ela tive contato com Assembly para micro controladores, o que não conhecia.
Vamos lá, o negócio é ter dois LEDs ligados no PIC, um ficará permanentemente aceso (indicando que o circuito está ligado) e o outro LED ficará desligado até que se pressione o botão, que o ligará.
Eis a simulação do circuito (as imagens podem ser vistas direto no Flickr: http://www.flickr.com/photos/jeanjmichel/sets/72157624156071640/):
Circuito desligado:
Circuito ligado:
Circuito em uso (botão pressionado):
Eis o código Assembly:
;******************************************************************************;
; Processor: PIC16F628 at 4 MHz using internal RC oscillator ;
; Function : Switch on two LEDs. The first LED (D1), conenected to RB0, turns ;
; on when the circuit is energized (power LED), while the second ;
; LED (D2), connected to RA1, just turns on when the push button ;
; (PB1) is pressed. ;
; Hardware : Protoboard ;
; Filename : main.asm ;
; Author : Jean J. Míchel <jeanjmichel-at-gmail.com> ;
; Website : http://www.jeanjmichel.blogspot.com ;
; Credit : Eduardo Bekman ;
;******************************************************************************;
; Wiring diagram ;
; +---v---+ R1 D1 ;
; -<|º 1 |>--/\/\/--|>|--o GND ;
; -<| 6 |>--+ ;
; -<| F |>- +----o¯o----o VDD 5v ;
; -<| 6 |>- | PB1 ;
; D2 R3 -<| 2 |>- | ;
; GND o--|<|--/\/\/--<| 8 |>- +---/\/\/---o GND ;
; -<| A |>- R2 ;
; -<| |>- ;
; +-------+ ;
; ;
;******************************************************************************;
#include <p16f628a.inc>
list p=16f628a
ERRORLEVEL 0, -302;, -224, -302, -305, -207
__config (_INTOSC_OSC_NOCLKOUT & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF)
#define select_bank0 bcf STATUS,RP0
#define select_bank1 bsf STATUS,RP0
#define BUTTON PORTA,0
#define LED_D1 PORTA,1
#define LED_D2 PORTB,0
org 0x00
goto setup ;Perform the initial settings ;
main btfsc BUTTON ;Monitors the action of the button;
goto turn_on_led ;Turns on LED_D1 ;
goto turn_off_led ;Turns off LED_D1 ;
turn_on_led bsf LED_D1 ;Turns on LED_D1 ;
goto main
turn_off_led bcf LED_D1 ;Turns off LED_D1 ;
goto main
setup select_bank1
movlw B'00000001' ;Defines all pins of the PORTA ;
movwf TRISA ;registrator as output except ;
;pin 0 - push button ;
movlw B'00000000' ;Defines all pins of the PORTB ;
movwf TRISB ;registrator as output ;
bsf PCON, OSCF ;Sets 16F628 to operate at 4MHz ;
select_bank0
movlw 0x07
movwf CMCON ;Turns off the comparator ;
clrf PORTA ;Clears all pins of the PORTA ;
;registrator ;
clrf PORTB ;Clears all pins of the PORTB ;
;registrator ;
bsf LED_D2 ;Turns on LED_D2 - power LED ;
goto main ;Loop forever ;) ;
end
Ainda não consegui monta-lo na protoboard para postar fotos e vídeos do projeto funcionando, mas assim que o fizer eu posto.
Junte a vontade de fazer algo "se mexer" a ter um colega com skills do Professor Pardal a muitas conversas sobre automação na hora do almoço e um passeio pela Rua República do Líbano (onde estão as lojas de componentes eletrônicos aqui no Rio de Janeiro) e então terás nas mãos uma protoboard, um punhado de componentes e muita diversão ;)
Comecei leve: um micro controlador da Microchip (16F628A), dois LEDs, um botão e um programa escrito em Assembly. Assembly ao invés de C porque é o mais próximo que podemos chegar de ver os elétrons passando pela placa ;).
A brincadeira é muito simples, mas com ela tive contato com Assembly para micro controladores, o que não conhecia.
Vamos lá, o negócio é ter dois LEDs ligados no PIC, um ficará permanentemente aceso (indicando que o circuito está ligado) e o outro LED ficará desligado até que se pressione o botão, que o ligará.
Eis a simulação do circuito (as imagens podem ser vistas direto no Flickr: http://www.flickr.com/photos/jeanjmichel/sets/72157624156071640/):
Circuito desligado:
Circuito ligado:
Circuito em uso (botão pressionado):
Eis o código Assembly:
;******************************************************************************;
; Processor: PIC16F628 at 4 MHz using internal RC oscillator ;
; Function : Switch on two LEDs. The first LED (D1), conenected to RB0, turns ;
; on when the circuit is energized (power LED), while the second ;
; LED (D2), connected to RA1, just turns on when the push button ;
; (PB1) is pressed. ;
; Hardware : Protoboard ;
; Filename : main.asm ;
; Author : Jean J. Míchel <jeanjmichel-at-gmail.com> ;
; Website : http://www.jeanjmichel.blogspot.com ;
; Credit : Eduardo Bekman ;
;******************************************************************************;
; Wiring diagram ;
; +---v---+ R1 D1 ;
; -<|º 1 |>--/\/\/--|>|--o GND ;
; -<| 6 |>--+ ;
; -<| F |>- +----o¯o----o VDD 5v ;
; -<| 6 |>- | PB1 ;
; D2 R3 -<| 2 |>- | ;
; GND o--|<|--/\/\/--<| 8 |>- +---/\/\/---o GND ;
; -<| A |>- R2 ;
; -<| |>- ;
; +-------+ ;
; ;
;******************************************************************************;
#include <p16f628a.inc>
list p=16f628a
ERRORLEVEL 0, -302;, -224, -302, -305, -207
__config (_INTOSC_OSC_NOCLKOUT & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF)
#define select_bank0 bcf STATUS,RP0
#define select_bank1 bsf STATUS,RP0
#define BUTTON PORTA,0
#define LED_D1 PORTA,1
#define LED_D2 PORTB,0
org 0x00
goto setup ;Perform the initial settings ;
main btfsc BUTTON ;Monitors the action of the button;
goto turn_on_led ;Turns on LED_D1 ;
goto turn_off_led ;Turns off LED_D1 ;
turn_on_led bsf LED_D1 ;Turns on LED_D1 ;
goto main
turn_off_led bcf LED_D1 ;Turns off LED_D1 ;
goto main
setup select_bank1
movlw B'00000001' ;Defines all pins of the PORTA ;
movwf TRISA ;registrator as output except ;
;pin 0 - push button ;
movlw B'00000000' ;Defines all pins of the PORTB ;
movwf TRISB ;registrator as output ;
bsf PCON, OSCF ;Sets 16F628 to operate at 4MHz ;
select_bank0
movlw 0x07
movwf CMCON ;Turns off the comparator ;
clrf PORTA ;Clears all pins of the PORTA ;
;registrator ;
clrf PORTB ;Clears all pins of the PORTB ;
;registrator ;
bsf LED_D2 ;Turns on LED_D2 - power LED ;
goto main ;Loop forever ;) ;
end
Ainda não consegui monta-lo na protoboard para postar fotos e vídeos do projeto funcionando, mas assim que o fizer eu posto.
Marcadores:
16f628A,
assembly,
eletronic,
eletrônica,
micro controladores,
microchip,
microcontroller,
pic,
protoboard
Assinar:
Postagens (Atom)