thegoodfellas/blogset-br huggingface dataset:
PxIN e PxOUT como tendo x o nome da porta correspondente a que se quer configurar e usar. No nosso exemplo, x fica como PxADDR em PAADDR, pois estamos utilizando a porta A. Acessando sub-registros atraves de PxCTL (PACTL) Existem 5 perguntas a se fazer, antes de configurar cada porta, para que, nessa sequencia, se tenha um bom desenvolvimento de projeto ou programacao, tanto em C quanto em ASM, que sao elas : A porta ou pino e de entrada de dados ou de saida de dados ?A porta sera usada como de uso geral ou com funcao especifica, como UART, Timer e etc ?Se for usada como saida, e em operacao normal ou open drain ? Se for usada como saida, e em modo normal ou driver de alta corrente (high drive) ? Se for usada como entrada, habilito o modo acordar de um STOP e queremos ou nao usar o A/D, se usado em modo funcao alternativa ? Como visto na tabela acima, referente ao enderecamento que da acesso aos sub - registros atraves de PxCTL ( no caso PACTL), teriamos um total de 5 diferentes registros para cada porta, somando os registros de entrada e de saida, teriamos um total de 7 registros para cada porta. Para um microcontrolador maior em recursos, mais um se somaria, o que te daria uma enorme quantidade de enderecos para memorizar e poder usar, ficando dispendioso o aprendizado e, consequentemente, dificil de trabalhar. Entao a Zilog, criou este metodo de usar so dois registros de enderecamento, o PxADDR, e o registro de controle de portas, o PxCTL, onde x e o valor da porta de A~H correspondente a porta que se quer usar, facilitando o trabalho do programador e deixando que o compilador e o microcontrolador se encarreguem desse monte de enderecos de registros e sub registros. As 5 perguntas, acima feitas, sao configuradas escrevendo valores no registro PxCTL, onde x e um nome de A~H da porta correspondente. Por exemplo, se colocarmos um valor de 0x04H em PAADDR, estamos selecionando o sub-registro "High drive" e podemos configurar ele atravez de PxCTL colocando um valor que corresponda aos pinos de 0~7 da porta x. assim se coloco 0x0F em PxCTL, estou habilitando todos pinos de 0~3 como sendo high drive da porta x e de 4~7 como sendo saida padrao. Configurando porta A como saida em alta corrente eletrica. Agora temos subsidios para fazer o LED acender e mais adiante, fazer ele piscar. E bom lembrar que configurando os pinos do microcontrolador para saida em modo normal ele ira drenar corrente de aproximadamente 2mA, o que e muito pouco para acender um LED sem queimar o micro ou nem fazer acender, ja que o microcontrolador possui protecao interna contra sobrecorrente. Para isso, configuramos o pino correspondente aos LEDs em modo High drive que nos permite acessar perto de 20mA de corrente eletrica a ser drenada para o circuito do LED. Nao devemos colocar todos os pinos como high drive se desejarmos um uso mais economico do consumo de energia, principalmente se estiver usando
pilhas ou baterias, o que esgotaria essa energia em pouco tempo. Como estamos em modo apresentacao, vamos colocar todos os pinos em high drive para o leitor poder ver seu LED acender desta vez e, assim ter uma visao melhor de como funciona o processo de programacao. Vamos acrescentar mais algumas linhas de codigo no nosso programa e ver o que acontece depois. Com o programa ja aberto, acrescente as linha que estao faltando, nao precisa reescrever tudo novamente, como se segue : #include void main( void ) { PAADDR = 4 ; // selecionamos high drive. PACTL = 0xFF ; // colocamos 1 no sub-registro PHDEA[7:0], habilitando todos os pinos em High drive. PAADDR = 0x01 ; // selecionamos direcao dos dados. PACTL = 0x00 ; // todos como saida, 0's no registro DDA[7:0] PAADDR = 0x00 ; // prevencao contra ma configuracao. PAOUT = 0xFF ; // porta A em nivel 1 // PAOUT = 0x00 ; // Porta A em zero. // PAOUT = 0xFF ; // Porta A em 1, novamente. return; } Escrevemos o valor 4 no registro PAADDR para selecionar o sub-registro High Drive de nome PHDEA[7:0] e com PACTL com um valor de 0xFF, colocamos todos os bits de PHDEA[7:0] habilitados para high drive. Note que em direcao dos dados, 0 e saida e 1 entrada. Agora compilamos e montamos o programa com F7 ou clicando em montar e compilar e vemos o resultado de sucesso da compilacao, enviamos o arquivo ou baixamos o programa compilado para o microcontrolador e temos o LED aceso, ou seja, funcionando o programa, caso isso nao ocorra, sera necessario resetar o microcontrolador fisicamente, aterrando, momentaneamente o pino de reset.. Como se pode ver, programar em C para os microcontroladores da Zilog e muito facil e divertido, muito diferente de muitas linhas de microcontroladores que dificultam com selecao de banco de memorias e outras dificuldades. Em Z8 Encore, isso e mais facil e rapido. Consideracoes Finais (ate o proximo post da serie ) Quando conectamos cargas como LED, buzzers ou qualquer carga entre a saida de um pino do microcontrolador e o Vcc, estamos fazendo de forma usual e explicamos por que : A saida de sinal de algum pino do microcontrolador tem um valor mais proximo de 0 Vcc que Vcc acionado, onde ha uma tensao positiva bem baixa dos 3.3V da fonte de alimentacao.Na linha Z8 Encore, o maximo de queda de tensao eletrica e de 0.6V, o que nos da (3.3 - 0.6) 2.7V na sua saida.O minimo de tensao eletrica e de 2.4V quando se liga um LED em serie com resistor e o conjunto ligado ao terra ou gnd.Resumindo, se tem mais brilho no LED com ele ligado ao 3.3Vcc da fonte de alimentacao, em serie com um resistor limitador e a outra ponta ao pino do microcontrolador. Pois se tem 2.7V e nao 2.4V, se ligado ao gnd. Continua ....
Comunicacao serial com java - Arduino e microcontroladores diversos.Introducao bb_bid = "1674044"; bb_lang = "pt-BR"; bb_keywords = "GLCD,microcontrolador, TI, RENESAS, zilog,microchip,PLC,elevador, CD, programacao,matematica,IC,LCD."; bb_name = "custom"; bb_limit = "8"; bb_format = "bbb"; Ja pensou em fazer seus projetos com linguagem de programacao JAVA ? Poder controlar ou ler dados do seu arduino ou qualquer microcontrolador e uma tarefa um pouco confusa para quem nao tem muita experiencia com microcontroladores ou com programacao de computadores. Isso se tornou um impedimento do passado, uma vez que as duas coisas andam juntas nos dias de hoje e poder ver, controlar e medir variaveis e mostrar na tela do computador ou tablet e, ate mesmo, em smartphones e um desafio um tanto animador e prazeroso, visto que e a pessoa a idealizadora dos seus projetos. Vamos comecar por apresentar a IDE que vamos usar, que e www.netbeans.org, que vamos usar para escrever nossos codigos e telas. Uma vez com o netbeans instalado, vamos tentar baixar alguns componentes que nos ajudarao a compor nossa tela de supervisorio ou uma simples IHM, que sao as telas de medidores com ponteiros, lampadas, LEDs, sinaleiras e muito mais em http://grepcode.com/project/repo1.maven.org/maven2/eu.hansolo/SteelSeries/ , prefira sempre as versoes acima de 25, baixe ate o 30 e guarde em uma pasta renomeada para pasta de JAR ou um nome que possa ser facil de lembrar ou na pasta lib onde esta instalado seu jre7 ou jre8, que no meu caso e na pasta java em C:/ no windows. O proprio netbeans se encarrega de criar a classpath, que e uma configuracao de localizacao dessa jre no computador, se isso nao acontecer, procure na internet como configurar uma classpath. Depois de baixar os arquivos da steelseries, vamos baixar a API RXTX em http://java2s.com/Code/Jar/r/Downloadrxtx22pre2jar.htm e colocar na mesma pasta onde foram baixados os arquivos JAR do steelseries. Agora precisamos abrir o netbeans e esperar ele se estabilizar, feito isso, vamos criar um novo projeto, seguindo as telas a seguir : Escolhemos JAVA e depois aplicacao JAVA, como se segue, depois clique em proximo : Damos um nome sugestivo ao nosso projeto e a localizacao de onde ele sera alocado. Lembrando que as classes terao o nome do projeto, assim como a pasta do projeto, tera o nome do mesm. Desmarque "criar pasta principal" pois o netbeans vai fazer esse trabalho depois quando for criar um frame. Clique em finalizar. A tela seguinte e o projeto ja pronto para comecar seus codigos em java, mas falta acrescentar os componentes que usaremos para efetuar a comunicacao serial e isso vem logo a seguir. Clique no sinal de + no lado esquerdo do projeto e o abra ate aparecer as subpastas. Apos isso, na sub pasta default, clique com o botao direito do mouse em cima e selecione Novo, depois FormJFrame. Damos um nome ao form e definimos um pacote. Pacote e o mesmo que pasta ou diretorio onde colocamos nossos arquivos. Na maioria das vezes, somente estas duas definicoes sao suficientes para a gente comecar, que e dar nome ao form e definir o pacote. Clique em concluir
. Agora temos a tela do nosso projeto : Agora, neste ponto, seu netbeans esta com um projeto esqueleto, ou seja, sem nada. Voce vai usar sua imaginacao para definir ou idealizar uma tela que possa ser condizente com o que pretende fazer nos seus projetos. Coloque o mouse no lado direito, perto da area livre da paleta e tecle com o botao direito do mouse e escolha "gerenciador de palheta", depois clique em "Adicionar do JAR" em instalar componentes da paleta, escolha o arquivo jar que voce baixou na pasta de sua escolha, conforme a figura, clique em proximo e selecione cada item que aparecer. Antes de mais nada, vamos dar um nome ao novo componente que queremos acrescentar : Agora devemos escolher em qual categoria vamos associar nosso componente e depois disso falta apenas associar a lib de RXTX na pasta do projeto e pronto para comecar : Agora associamos os componentes a paleta da direita com o nome que voce criou para a categoria e pronto, nesta parte : Falta , agora inserir a API de RXTX do java no projeto em questao para a gente poder usar a porta serial como queremos. O arquivo jar com nome tridente.jar pode ser conseguido aqui https://kenai.com/projects/trident/downloads ,ele serve para fazer os componentes da palheta funcionarem adequadamente. Pronto! Nos proximos posts, tentarei comecar com essa biblioteca toda e apresentar um apanhado de como conectar e desconectar a porta serial com arduino, pinguino, ziloguito, renesas e etc. para verem a facilidade de se poder criar uma IHM funcional e pratica.Bons estudos e ate la !Considere doar qualquer quantia como incentivo a escrever este blog, nao e obrigado, nao e isso. So para saber se meu trabalho esta sendo bem recebido e sendo util. E so clicar nos botoes doar. Obrigado.
Zilog - Acendendo um LED com Z8 encore XP! - Parte 3 bb_bid = "1674044"; bb_lang = "pt-BR"; bb_keywords = "GLCD,microcontrolador, TI, RENESAS, zilog,microchip,PLC,elevador, CD, programacao,matematica,IC,LCD."; bb_name = "custom"; bb_limit = "8"; bb_format = "bbb";Configurando as PORTAS do Z8 Encore corretamente. Vamos continuar nossa serie com uma implementacao mais completa e mais avancada. Nesta parte vamos falar de operacoes logicas que facilitam a vida de programadores C que e a operacao de mudar bits individualmente ou em bytes para mudar o status de um pino ou bit de algum registrador, o que facilita e muito no uso de registradores como I/Os em modo geral e em funcao alternativa. Observe a tabela a seguir, com relacao a manipulacao de bits com operacao logica e aritmetica : ( & ) AND ( | ) OR BIT1 0 1 0 1 0 1 0 1 BIT2 0 0 1 1 0 0 1 1 RESULTADO 0 0 0 1 0 1 1 1 Neste caso, BIT1 tem 4bits e em hexadecimal tem valor 5 e o BIT2, tem valor em hexadecimalde 3. Lembrando que de 0 a 9 os valores decimais e hexadecimais saoos mesmos. A simbologia ( ~ ) em qualquer bit representa um complemento 2 que e inverter o sinal do bit. Nesta terceira parte, vamos manipular bits e bytes. Nosso foco maior sera com bits. Esta parte do artigo e necessaria para compreender como e mais seguro e comodo usar manipulacao binaria para um ou quais bits especificos sem comprometer os demais bits que nao queremos mexer. Controlando e configurando BIT0 do port A Vamos comecar com um pequeno circuito composto com um LED de 3.3V e um resistor de 100R em serie para mostrar ligados ao pino PA0 do port A, siga o circuito e faca as modificacoes conforme exemplo para ver o LED acender e permitir que so este seja manipulado, deixando os demais sem manipular. Vamos abrir o ZDSII e criar um novo programa para a linha Z8F0822 e criar um arquivo com o nome que achar pertinente e copie e cole ou reescreva nesse arquivo as linhas de codigo a seguir : # include void main(void) { PAOUT = 0x01 ; // zeramos os pinos do port A. PAADDR = 4 ; // habilita o modo alta corrente.Registro PHDEx. PACTL = 0x01 ; // mas selecionamos o PA0 somente nesse modo PAADDR = 1 ; // selecionamos o registro de direcao de dados DDx, PACTL = 0xFE ; // 0xFE = 11111110b - 0 e saida e 1 e entrada. PAADDR = 0x00 ; //desligamos qualquer funcao extra por seguranca. PAOUT = 0x00 ; port A em zero. PAOUT = 0x01 ; Somente pino PA0 em nivel alto. return ; } Aqui foi iniciado o port A, pino PA0 em nivel um, justamente para poder manter o LED nesse pino desligado e permitir fazer as devidas configuracoes nos demais pinos. Configuramos o pino no modo alta corrente que e o mesmo que manipular o registro PHDEx, onde x e um valor de 0 a 7 selecionavel pelo registro
PAADDR e manipulado com valores impressos por PACTL. Depois definimos a direcao dos dados, com o pino PA0 como saida colocando o bit 0 do registrados DDx em zero, onde x e um valor de 0 a 7. Para acessar o registrador DDx, usamos valores em hexadecimal, com valor de 0xFE que, em binario e o mesmo que 11111110b, notamos que o registro DDx tem o bit zero em DD0 com valor zero, ou seja, em modo saida. Colocamos PAADDR = 0x00 por ultimo para proteger o microcontrolador de qualquer configuracao acidental. No final, colocamos PAOUT em 0, acendendo o LED e em seguida em um, apagando o LED. Salve, compile e baixe para o microcontrolador o programa compilado. Se perceber, e provavel que seu LED nao acenda, nao se preocupe, isso e normal, vamos resolver isso a seguir nos proximas linhas. Porem se usar o conceito de breakpoint no programa, podera ver que o LED, na teoria, acende e apaga nas ultimas linhas. Toda vez que formos mudar o nivel logico desse pino, estaremos mudando tambem dos demais pinos simplesmente manipulando eles em bytes. Para que isso nao ocorra teremos de usar recursos da linguagem C para manipular apenas o bit que queremos e para isso vamos dispor da tabela acima, dada no inicio deste artigo. Na tabela temos o BIT1, BIT2 e resultado. demos um valor de 0101b ( 0x05 em hexa) e 0011b ( 0x03 em hexa ) assim, fizemos uma operacao logica AND (& ) tendo como resultado 0001b ( 0x01 em hexa ) e outra operacao logica OR ( | ), tendo como resultado o valor 0111b ( 0x07 em hexa). Nessa linha podemos fazer uso de operacoes logicas para mudar bits individuais de registros e portas com os operadores & e | , que sao, respectivamente, os simbolos de AND e OR. Nao confundir com os operadores logicos de bytes && e || , que sao AND e OR entre bytes e nao entre bits individuais. No exemplo a seguir vamos usar uma das formas de manipular os bits do pino PA0 sem mexer nos demais, usando o conceito de operacao logica. { unsigned char temp; // criamos uma variavel de nome 'temp'. temp = PAOUT ; // colocamos os valores de PAOUT em tempo. temp = temp | 0x01 ; // fazemos um OR com 00000001b e recolocamos em temp. PAOUT = temp ; // colocamos em PAOUT os valores de temp. } Lemos o port A e colocamos seu valor em 'temp', logo depois fazemos um OR logico com um valor binario de 0001b com temp e recolocamos o resultado em temp, depois recolocamos em PAOUT. Como podemos ver, para manipular um bit do port A temos de escrever quatro linhas de codigo, o que seria dispendioso para um programa mais elaborado, entao usamos uma maneira mais eficiente e com o mesmo resultado, so escrevendo : { PAOUT = PAOUT | 0x01 ; } Ou muito mais eficiente ainda, podemos usar os recursos da linguagem C : { PAOUT |= 0x01 ; } Agora
que aprendemos a usar a operacao logica para manipular bits, podemos reescrever nosso codigo que foi apresentado no inicio de uma maneira mais eficiente e ter um codigo mais enxuto e rapido na compilacao do mesmo. Assim, podemos ter o que se segue : #include void main (void) { PAOUT = 0x01; // colocamos o bit 0 em um. PAADDR = 4 ; // selecionamos modo de saida de alta corrente PACTL |= 0x01 ; // selecionamos apenas o PA0 como alta corrente, colocando o registro PHDE0 em um. PAADDR = 1 ; // selecionamos o registro de direcao de dados. PACTL &= ~0x01 // colocamos apenas o PA0 como saida, deixando os demais como estao. PAADDR = 0x00 ; // desativamos o registrador PACTL para nao haver configuracao acidental. PAOUT &= ~0x01 ; // zeramos o bit PA0 e acendemos o LED. PAOUT |= 0x01 ; // setamos o bit PA0 e apagamos o LED. return ; } Com isso, ainda nao conseguimos acender nosso LED no mundo fisico, porem, conseguimos ver as mudancas de valores de bits na simulacao dentro do programa com breakpoints. Se voce nao sabe debugar programas com o uso de breakpoints, sugiro ler a documentacao referente ao ZDSII e o microcontrolador que esteja utilizando. Com o que aprendeu, faca alteracoes para ver o que acontece. Para fazer nosso LED piscar no mundo real, vamos agora criar uma funcao chamada atraso para controlar o tempo de acender e apagar o LED e ver nosso programa funcionar. Controlando o tempo de piscar do LED. Desde o primeiro momento o termo usado era piscar led e ate agora nao vimos isso de verdade e foi de proposito para que pudessemos passar o maximo de conhecimento a fim de ter ferramentas de manipulacao de dados e ter um trabalho eficiente. #include void main ( void ) { PAOUT |= 0x01 ; // colocamos o pino PA0 em um para apagar o LED. PAADDR = 4 ; // selecionamos modo alta corrente. PACTL |= 0x01 ; // selecionamos apenas o pino PA0 nesse modo. PAADDR = 1 ; // selecionamos o modo de direcao dos dados PACTL &= ~0x01 ; // colocamos o pino PA0 como saida. PAADDR = 0x00 ; // evita configuracao acidental while ( 1 ) { atraso() ; PAOUT &= ~0x01 ; // zera o bit PA0 e acende o LED atraso() ; PAOUT |= 0x01 ; // seta o bit PA0 e apaga o LED. } return ; } Desde que a constante seja 1 sempre, while ( 1 ), o valor do pino PA0 muda a cada tempo o que permite apagar e acender nesse tempo de atraso(). Agora vamos escrever, logo depois de main() a funcao atraso(). Para achar o valor de contador basta usar contador = (atraso em segundos) * (frequencia de clock em Hz)/86, pois while() leva 86 ciclos de clock, assim, 0.25 segundos sao achados por contador = 0.25 * 20000000/86 o que da, para um micro com 20Mhz de cristal, um valor de contador = 58139 static void atraso (void)
{ unsigned int long contador = 58139 ; while (contador > 0 ) { contador -= 1 ; } return ; } Assim teremos o programa completo e pronto para ser compilado e transferido ao microcontrolador e, ai sim, conseguimos ver nosso LED piscar como prometido, mas tinhamos que prover ferramentas que facilitassem a compreensao de todo o processo. Pegue o programa abaixo, salve, compile e transfira. #include void atraso(void) ; void main ( void ) { PAOUT |= 0x01 ; // colocamos o pino PA0 em um para apagar o LED. PAADDR = 4 ; // selecionamos modo alta corrente. PACTL |= 0x01 ; // selecionamos apenas o pino PA0 nesse modo. PAADDR = 1 ; // selecionamos o modo de direcao dos dados PACTL &= ~0x01 ; // colocamos o pino PA0 como saida. PAADDR = 0x00 ; // evita configuracao acidental while ( 1 ) { atraso() ; PAOUT &= ~0x01 ; // zera o bit PA0 e acende o LED atraso() ; PAOUT |= 0x01 ; // seta o bit PA0 e apaga o LED. } return ; } static void atraso (void) { unsigned int long contador = 58139 ; while (contador > 0 ) { contador -= 1 ; } return ; } Terminamos aqui a nossa parte de fazer um LED piscar, esperamos poder ter mais exemplos de uso dos perifericos do microcontrolador Z8 encore!, especialmente a linha Z8F0822, que e nosso foco neste artigo e que e aplicavel para as outras linhas dessa empresa. Ate a proxima e muito obrigado, nobres leitores.
Modulo de som para projetos - Arduino ou qualquer MCU Que tal colocar voz e som nas suas aplicacoes ? (andrepereira@ig.com.br - 21 991267264 - RJ ) bb_bid = "1674044"; bb_lang = "pt-BR"; bb_keywords = "GLCD,microcontrolador, TI, RENESAS, zilog,microchip,PLC,elevador, CD, programacao,matematica,IC,LCD."; bb_name = "custom"; bb_limit = "8"; bb_format = "bbb";Ola pessoal, quanto tempo a gente nao se fala, ou seja, nao se le ?Pois bem ! Voces pediram e serao atendidos. O tempo parado foi para poder criar um projeto que atendessem a alguns de voces e se voce se identificou com o assunto, obrigado, voce e a pessoa que tornou isso possivel com sua sugestao, sua ideia e sua critica.Estamos lancando um modulo de som que pode ser usado para reproduzir sons diversos, desde um musica, um aviso, uma criacao para festas ou avisos sonoros de alerta ou uma secretaria eletronica microcontrolada, o importante e a sua imaginacao onde usar e isso e com voce. Cabe a mim, criar o produto e ele esta pronto.Modulo de som WT588D_arduinoO modulo foi criado para ser acionado por microcontroladores, computadores pela saida paralela ou sozinho, pelos botoes que nele estao. O uso e simples. Em modo standalone, ou como esta, basta plugar na USB de algum computador, baixar o arquivo de som e apertar os botoes que se encontram no modulo e ver o som tocar. Nesse caso, se for usar alimentacao externa de 5V, esta devera estar ausente durante o processo de gravacao, onde se retira o cabo USB e se conecta a alimentacao de 5V externa. No modo microcontrolador, pode usar o arduino ou QUALQUER outro microcontrolador para acionamento das vozes ou sons que tenha baixado. Os modos de botoes so aceitam 4 vozes, mas e possivel usar o modo MP3 e ter mais vozes apenas incrementando ou decrementando o scan interno. O software com a funcao MP3 nao esta mais disponivel no site do fabricante, ate onde sei, so eu tenho oficialmente e autorizado a ter. Pode ser fornecido a todos que adquirem os produtos da waytronic china comigo. Esse modulo da foto tem capacidade de tocar ate 120 segundos de som e voz que pode variar em funcao do sample rate do arquivo de som. O valor desse modulo e dado a quem interesse tenha em adquirir pois ele pode variar no tempo, pois e comprado os chips em dolar e nao da para fechar um valor fixo em tempo longo de mais de 4 meses ou 5 meses. A maioria das aplicacoes se encontram nessas combis e vans que fazem o anuncio de rotas, em metro e trens, anunciando as estacoes, em brinquedos que falam, secretarias eletronicas e onde se precise de som e voz.Deixo alguns videos abaixo para mostrar o modulo funcionando e como e gravado e posto para funcionar. Lembrando que, tanto a versao stick, ou seja, a pequenininha chamada WT588d-U quanto a tipo arduino, sao gravadas do mesmo jeito e funcionam do mesmo jeito.No desenho abaixo temos o diagrama de ligacoes do modulo stick ou placa de 28pinos : Agora, a ligacao eletrica do modulo acima,
do inicio do post, da placa azul, segue a seguir : O diagrama completo esta aqui. O diagrama completo contempla as duas placas, a do arduino e a pequena.Com isso em mente, acho que ficou claro a funcao dos modulos de som e vamos a exemplos de aplicacoes ou de como eles funcionam. Modulo som Obrigado por assistirem mais este post, a sua contribuicao e muito importante. Participe!