Ir ao conteúdo
  • Cadastre-se

Iniciando com os Microcontroladores (Ajuda para escolher um modelo)


Posts recomendados

  • Membro VIP

o discípulo 'retorna' ao mestre kk

 

Bacana Paulo. Realmente o código basic é mais "humano" do que o c. E gostei do overlay! Além de ter alguns básicos prontos print() e hex(). Legal mesmo! Mas vejamos de outra ótica....

Perceba que acesso o hw do mc diretamente escrevendo nos seus registros, coisa que não percebo no seu fonte. Isso pode não ser totalmente ruim pois eventualmente com o basic posso fazer o mesmo com outros mc´s(*) sem saber o que está rolando nas suas entranhas. Mas também não é totalmente bom pois gosto de sujar as mãos pra ter um pouco mais de segurança (por isso não me dou bem com ccs´s  e  arduinos) além de aprender + um pouco. Paradoxalmente, não me dou bem também com asm. Então c creio ser o caminho do meio. Mais um paradoxo: acessar usb, wifi, bluetooth, tcpip e afins via registros e em baixo nível e hw, ninguém merece kk. Deve ser moleza no basic né? basic++

Não consegui ver no keyl a estatística de uso de rom mas ao carregar num programador vi a rom até 1288 ou seja neste quesito ganho do 6 kk. Também não consegui gerar arquivo .cof no keyl. Proteus debuga .cof. Como disse gerei com pic e foi aquele pi que identifiquei. Quem errou na conta foi o pic (pic--). Mas os mc´s não foram feitos pra cáculos complexos mesmo né.
A qualquer momento vejo se ajusto pra funcionar no avr studio onde posso debugar melhor e comparar o resultado

Quanto ao clock 'doido', me admira você não ter notado o erro de 0% no baudrate. Cristal com esta frequencia é comercial e feito pra isso

E chico, o paulo se sintonizou melhor fez o que eu queria com o fonte 'idêntico' ok?

 

(*)gostei do bascom. quase vou baixar pra ver. Agora me fale se ele contempla outros mc´s e como acessar os registros dos avr´s!

 

abç´s
 

post-528815-0-03227700-1434459355_thumb.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

 @Isadora Ferraz

Os registros você acessa no simulador enquanto está simulando linha a  linha.

 

Está saindo o Bascom para ARM.

http://avrhelp.mcselec.com/index.html?about_mcs_electronics.htm

 

Se baixar, saiba que pode compilar até até 4Kbytes, o suficiente pra simular qualquer rotina.

 

Ontem estava re-estudando o HELP e veja que interessante:

 

ENCRYPT

This option allows you to encrypt portions of your code.

 

Because the encryption can not be undone, you will get this warning:

post-387879-0-57377100-1434462101.jpg

 

If you chose YES, the selected code will be encrypted and will result in lines like :

 

$CRYPT 6288E522B4A1429A6F16D639BFB7405B

$CRYPT 7ABCF89E7F817EB166E03AFF2EB64C4B

$CRYPT 645C88E996A87BF94D34726AA1B1BCCC

$CRYPT 9405555D91FA3B51DEEC4C2186F09ED1

$CRYPT 6D4790DA2ADFF09DE0DA97C594C1B074

 

Only the compiler can decrypt and process these lines. There is no way you can change the $CRYPT lines back into source code !

So make a backup of your code before you use this option. Typically, it will only be used on finished projects.

If the encrypted code contains errors, you will get error messages pointing to the $CRYPT lines.

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz

O Paulo consegue implementar rotinas otimizados em ASM no BASCOM,isso o deixa em grande vantagem.

 

@_xyko_

Eu citei o formato de arquivo Intel Hex,pois alguns compiladores incluem várias "marcas" d'agua no arquivo hex,pois tudo que estiver depois de 00000001FF,não é considerado código,mesmo que esteja no arquivo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz,

 

Opa, que isso, estamos todos aqui nos ensinando uns aos outros !!!!

 

O Overlay é recente, tem uns dois anos que foi implementado, e ajuda uma barbaridade, permite criar vetores dentro de matrizes, que facilitam muito o acesso aos dados de mais de um byte.

 

Eu raramente precisei acessar direto os registros do AVR, porque tudo está prontinho em alto nível no Basic. Mas se precisar acessar diretamente, claro que pode !!!

 

Eles tem o mesmo nome que no PDF. 

 

Por exemplo, uma coisa que o Bascom não tem "prontinho"é um comando que já faça o modo FAST PWM existente em muitos AVR's. Para isso, temos de primeiro configurar o modo normal do PWM, e DEPOIS mudar um bit num dos registradores. Veja como é feito :

 

Config Timer1 = Pwm , Pwm = 8 , Compare_A_Pwm = Clear_Up , Compare_B_Pwm = Clear_Down , Prescale = 1

Set TCCR1B.WGM12

 

Repare que setamos apenas um determinado bit do registrador TCCR1B .

 

Mas existem outros comandos, alguns setam vários bits ao mesmo tempo :

 

TCCR1B = Bits(WGM13 , WGM12 , CS10)

 

 

O uso de ALIAS também ajuda bastante, transforma as coisas em nomes mais amigáveis :

 

Servopin Alias PortB.2
Config Servopin = Output

 

Essas coisas facilitam muito fazer o programa, melhor chamar de Servopin do que PortB.2 !

 

Se eu quiser mudar o valor do registrador de Compare, na saída A, do Timer1 , eu posso escrever :

 

Compare1a = 100

 

ou também pode ser 

 

Pwm1a = 100

 

Ou seja, pode sim fazer o controle total, acessando "na marra"os registradores, sem nenhum problema.

 

Até pode inserir direto código em ASM, acessando as variáveis do Bascom !

 

Outra coisa legal : 

 

Quando ocorre uma interrupção, voce pode escolher se quer que o Bascom salve todo o contexto para voce, ou pode deixar para voce mesma salvar apenas o que lhe interessa !

 

O Bascom perde uns 50 ciclos de máquina salvando todos os registradores e flags. Mas fazendo "na mão" posso perder apenas meia dúzia de ciclos, claro que sabendo como funciona internamente o compilador do Bascom.

 

Olha, baixar e dar uma olhadinha não vai te matar kkkkk é uma solução que permite fazer em bem menos tempo do que voce faria em C ou em Asm.

 

Sobre usar wifi , tem uns módulos novos que são simplesmente o máximo de facilidade !!! Procure o ESP 8266 . Comprei uns 10 deles, de tipos físicos diferentes, por menos de US$ 25 ....

 

Bastam alguns comando seriais para ele e pronto, ele faz tudo, nem precisa se preocupar com nada de nada . Adeus, trabalheira com TCP/IP !!

 

Existem alguns para Bluetooth que são muito parecidos, e alguns até permitem transferir dados de áudio. Mas de maneira muito simples !

 

Realmente, comunicar com esses novos módulos em serial, ou SPI, ou I2C, é a maior moleza no Bascom.

 

Sabe o porque eu falei "clock doido" ?

 

No Bascom, eu apenas coloco a frequência do clock, e escrevo qual o Baud eu quero obter. O próprio compilador vai procurar qual a melhor maneira de gerar esse Baud Rate com o menor erro possível ! Claro que se precisar de um erro de 0% , eu vou escolher um cristal que permita isso. Mas até hoje nunca tive problemas com até 2% de variação.

 

Aliás, algo que pouca gente sabia .... no Apple II , a interface de comunicação serial USART tinha algumas frequências com erros de até 3% ... Mas funcionava que era uma beleza kkkk.

 

 

 

@_xyko_,

 

Para mim só falta achar uns ARM's no formato DIP kkkkkk  se não tiver "pernas" estou fora....

 

Paulo

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@vtrx não só o paulo e o bascom fazem isso. Qualquer linguagem e qualquer pessoa podem fazê-lo. Só que a 'grande' vantagem se inverte se queira portar pra outro mc né. Sim, no mundo real tem destas coisas.

@_xyko_ acho que não me expressei direito. Pensei no acesso dos registro pelo basic tipo PORTB=0xff ou DDRB=0xff. Seria algo como PORTB=&HAA? ou algo como o horroroso ouputpin(xxx) do ccs? Mas acho que o @aphawk ilumimou legal! Só que estão contaminando o basic dos anos 80 que conhecia. Mas evoluir é preciso kk
Legal estarem migrando pra outros mc´s!

 

 

Link para o comentário
Compartilhar em outros sites

@vtrx,

 

Sim, isso ajuda muito !

 

Consigo também acessar direto no stack os dados passados pelas sub-rotinas, e acessar direto os registradores de SPI, e consigo uma velocidade muito alta na transferência de dados. Consegui melhorar muito a velocidade de escrita em um display colorido :

'******************************************************************************* '  Clear Display '*******************************************************************************  Sub Lcd_clear(byval Color As Word) #if Lcd_mode = 1    Call Lcd_set_window(0 , 0 , 239 , 319) #else    Call Lcd_set_window(0 , 0 , 319 , 239) #endif    Lcd_cs = 0    Lcd_dc = 1    $asm       LD XL, Y+0       LD XH, Y+1       ld r18,x+       LD R17,X       LDi R26,1                                                   LDI R19,241       LDi R27,1                                                   LDI R20,81       Spi_denovo:       Out Spdr , R17       Spi_wait:       sbis spsr,spif       rjmp spi_wait       Out Spdr , R18    ...   ...   ...   $end Asm   Lcd_cs = 1End Sub

A rotina usada é bem mmaior do que esse trecho que postei, é só um pequeno trecho para facilitar o entendimento.

 

Acessei o valor passado na chamada da subrotina direto do ASM, e controlei a passagem ao chip de vídeo por SPI, usando o modo mais rápido disponível no Atmega.

 

Isso em Bascom puro, sem assembler, era 7 vezes mais lento !

 

A maneira parametrizada que o Bascom empilha os valores quando é chamada uma função, ou uma subrotina, permite o acesso fácil e até a devolução de resultados direto do Asm.

 

Paulo

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Isadora Ferraz

"acho que não me expressei direito. Pensei no acesso dos registro pelo basic tipo PORTB=0xff ou DDRB=0xff. Seria algo como PORTB=&HAA?"

 E é:

Mas no caso DDRB é o registro da direção do port. Prefiro ele do que especificar:

Config portb=input ou output ou &bxxxxxxxx ou &hXX...

Questão de gosto mesmo.

 

A simulação:

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

ok chico. Também prefiro o modo de acesso ao reg. Sim, sabemos a função do DDRB.

Uma curiosidade (minha)... tente importar o .hex que publiquei na página anterior pra dentro do seu simulador pra ver que merdadá. Talvez tenha que: copiar, colar num editor de texto, salvar como .hex. Bom esquece, não vai dar pra ver as variáveis mesmo. Mas ao desassemblar talvez você intuitivamente localize a linha for( ; ; ); e pode colocar um break point nela. Pra que isso? pra ver quanto tempo leva pra rodar aquele loop. Mas talvez seja muito p pra pouca b

Também pode importar o .hex no proteus

 

Paulo, não agora, não hoje e talvez nem amanhã mas algum dia voce vai querer migrar prum arm. Afinal já tem bascom pra ele. Quiçá outros + virão. Dica ululantemente óbvia: não faça rotinas asm complexas.

 

abç

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz,

 

Ainda não tem o Bascom para Arm, está sendo terminado ainda .... Mas pode acreditar que assim que tiver, e claro, existir um chip Arm em DIP, ou quem sabe algum que eu possa soldar um adaptador, eu vou usar sim. 

 

Eu também não gosto de usar o ASM, só que mesmo a 20 Mhz tem horas que é preciso ... quem sabe com os ARM's isso não seja preciso.

 

Agora, sobre migrar .... nuncas precisei migrar nada até hoje. Hoje em dia, passam dois, tres anos, tudo muda, prá fazer o mesmo projeto uso coisas mais modernas. 

 

Minha preocupação é muito mais voltda à facilidade de uso do que a manter um produto por anos e anos. Afinal, temos AVR's já fazem uns 15 anos, e ainda encontro os modelos velhos de 2003, 2005 fácil.

 

Paulo

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

ok chico. Também prefiro o modo de acesso ao reg. Sim, sabemos a função do DDRB.

Uma curiosidade (minha)... tente importar o .hex que publiquei na página anterior pra dentro do seu simulador pra ver que merdadá. Talvez tenha que: copiar, colar num editor de texto, salvar como .hex. Bom esquece, não vai dar pra ver as variáveis mesmo. Mas ao desassemblar talvez você intuitivamente localize a linha for( ; ; ); e pode colocar um break point nela. Pra que isso? pra ver quanto tempo leva pra rodar aquele loop. Mas talvez seja muito p pra pouca b

Também pode importar o .hex no proteus

 

Paulo, não agora, não hoje e talvez nem amanhã mas algum dia voce vai querer migrar prum arm. Afinal já tem bascom pra ele. Quiçá outros + virão. Dica ululantemente óbvia: não faça rotinas asm complexas.

 

abç

Não vai dar certo.

Tem que ter o .OBJ e o .DBG gerados na compilação.

@aphawk

Conhece algum programa que depure o HEX ou o OBJ do bascom. Uma vez consegui,mas não lembro se foi no MiKROBASIC ou no AVRSTUDIO.

Link para o comentário
Compartilhar em outros sites

@_xyko_,

 

O novo Avr Studio depura sim, é compatível com o Bascom. Mas é enorme, e pelo menos prá mim me pareceu 10x mais complicado de usar.....

 

Eu cheguei a usar a versão antiga, que era bem rapidinha e simples, era a 4.1 . Mas desde 2013, o Bascom foi atualizado e agora só mesmo nas ultimas versões ...

 

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk

Rotinas de display colorido,realmente sempre precisam ser modificadas ou alteradas.

Quando experimentei o ARM,comprei um kitizinho que vinha um display colorido,aqueles do vídeo,as rotinas exemplo e encontradas na net,mesmo em C,ficaram umas 8x mais lentas das que eu reescrevi 'na mão',pois eram 'genéricas ' de mais.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu recomendo um PIC16F ou PIC18F ou ATMEGA 328, tanto a microchip e atmel são otimos  frabricantes, eu atualmente  estou focando nesses dois fabricantes de microcontroladores por causa que é mais fácil achar material, porém, também tem a Renesas que é muito boa também, resumindo tudo, a ATMEL E MICROCHIP são mais utilizadas nos crusos de eletrônica, entre tanto, isso não limita você ir para outros fabricantes.

Link para o comentário
Compartilhar em outros sites

É @MatheusLPS... Enquanto eu estudava me apaixonei por microcontroladores e dois amigos meus, que já trabalhavam há vários anos em uma grande empresa do setor energético, alertaram-me dizendo praticamente o mesmo que o cara do vídeo disse... Daí resolvi cair para a área da instrumentação (que também amo :D) e ter os microcontroladores como hobby!

 

O que eu disse é meio fora do tópico mas falei só para trocar ideia mesmo. Qualquer coisa pode apagar moderador.  :) 

 

õ/

Link para o comentário
Compartilhar em outros sites

@test man*~ e @MatheusLPS,

 

Infelizmente, no Brasil não temos nenhum espaço para projetos, os engenheiros acabam virando "técnicos de luxo" , fazendo apenas manutenções. 

 

Mas tem de sempre ter uma coisa em mente : toda a área de instrumentação usa os microcontroladores, de tudo que é família... e claro, todos são importados, até mesmo os das empresas nacionais , que dizem serem fabricados por elas ( sei ....... ).  

 

A área de controle de processo industrial também é a mesma coisa, e temos também os PLC, que podem ser programados também conforme a nossa necessidade.

 

Mas lembrem-se : da mesma maneira que eu ganho dinheiro nesta área com microcontroladores, todos podem ganhar também, é bom saber um pouco de várias áreas,  e se tiver contatos com várias empresas, sempre aparecem necessidades especiais que a gente mesmo pode resolver, montando, programando e fornecendo os produtos para eles !

 

 

 

 


@Lucas Pereira de Souza,

 

Eu recomendo Atmega, Attiny, Pic16, Pic18, PicDSP, Arm, enfim ANTES de recomendar algo tem de se saber para o que vai ser usado, certo ?

 

Tem aplicações onde um Pic minúsculo pode resolver muito bem, tem outras onde além de ser pequeno tem de ser muito potente, então tem de usar um Arm, tem outras onde o preço é o fator proibitivo, então se puder tem de usar um Attiny, e por aí vai !

 

O bom projetista tem POR OBRIGAÇÃO  saber qual é o processador certo, tanto técnicamente como comercialmente, antes de fazer o projeto. Nenhuma empresa quer gastar mais do que o necessário.

 

Já aqui no Fórum eu tenho a finalidade de ensinar, então sempre vou recomendar algo barato e que seja o suficiente para resolver. Pode ver que indico para muita gente comprar um Arduíno Uno R3, justamente porque é a melhor relação custo/benefício para quem está aprendendo. E claro, resolve muita coisa, sendo muito raro algum projeto onde ele não seja suficiente.

 

Paulo

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@densyy,

Esse termo se aplica a contatos mecânicos, como os existentes nas chaves e nos relés.

Quando voce aperta uma chave, voce está pondo em contato duas partes de metais. As duas superfícies não são perfeitas, então quando elas "começam" a se encostar, acontece uma série de eventos, em um instante ocorre um curto, e em outro instante esse curto some, e conforme aumenta a pressão entre as duas partes, ocorre uma rápida sequência desses curtos e circuitos abertos, até finalmente os contatos ficarem bem pressionados um contra o outro, e nesse instante o contato fica firmemente fechado e os ruidos cessam.

O mesmo se aplica aos contatos de um relé.

Resumindo, durante alguns milissegundos esse comportamento aleatório fica acontecendo, só que temos de lembrar que um microcontrolador é muito rápido, e para ele essa série de aberturas/fechamento de contatos pode ser interpretada como se a chave fosse fechada várias vezes em seguida, quando na verdade estamos apertando apenas uma vez !

Um bom tempo que é recomendado para esperar que a chave fique acionada "de vez" é de 20 milisegundos.

Esse efeito tem o nome em inglês de Boucing, e as técnicas para eliminá-lo chama-se Debounce.

Pode pesquisar aqui mesmo no Fórum, tem bastante informação sobre Debounce ou Debouncing.

Paulo

Link para o comentário
Compartilhar em outros sites

Muito boa sua explicação @aphawk
Obrigado!

Tenho mais uma dúvida.

Vi que os CLPs são amplamente utilizados na área industrial

Minha pergunta é: Por que? Os microcontroladores conseguiriam

acionar e controlar os componentes e ainda são infinitamente mais

portáveis por serem pequenos. Isso sem falar do preço... CLPs 

são absurdos de caros...

Link para o comentário
Compartilhar em outros sites

@densyy,

Em ambiente industrial, existem certas exigências, como por exemplo altíssima imunidade a ruídos; saidas em nível de corrente; alta confiabilidade de todo o equipamento; facilidade de programação independente do fabricante do microcontrolador usado no PLC.

Por exemplo, existe uma linguagem padrão para se programar os PLC's, e ela é independente do que existe dentro do PLC, pode ser um PIc, um AVR, um ARm, mas isso não altera em nada, porque voce programa o PLC na linguagem dele, não na linguagem do microcontrolador, entendeu ?

Imagina voce montar uma placa com um microcontrolador; aí você adiciona um fonte de alimentação que tem de ter muita imunidade a ruídos; aí você acrescenta uma série de entradas, todas com isolação e alta imunidade a ruídos; aí você acrescenta uma interface de comunicação RS232 ou RS485; mais um sistema de teclas de programação, mais um sistema de Leds, mais um sistema de de display; mais um sistema de entrada/saida por nível de corrente, mais uma série de saídas isoladas por relê, mais ....... Ufa !!!!!!

Resumindo, voce acabou de montar um PLC !!!!!!!! Já viu quanto que vai te custar fazer isso tudo ?

Entendeu ? O PLC é um microcontrolador com tudo isso acima dentro dele !

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@densyy,

Repare que em ambiente industrial, não pode ser aceitável algo cujo projeto seja falho, concorda ?

Pessoas podem morrer se algum processo ficar sem controle, se um ruído elétrico travar o microcontrolador, se alguém ligar um rádio HT perto dele, se um motor grande for acionado perto dele, isso tudo são riscos reais que devem ser previstos e solucionados no projeto !

Mas não existem só microcontroladores dentro de ambientes industriais !

Por exemplo, voce tem o seu celular, ele não precisa de toda a proteção e garantia de funcionamento !

O seu aparelho de TV a cabo, a sua televisão, o seu rádio-relógio, eles não tem nenhuma proteção do nível de um CLP.

Para cada tipo de aplicação, fazemos um tipo de projeto !

O mesmo microcontrolador que está, digamos, superprotegido dentro de um CLP pode estar dentro de um simples midia player , sem um monte de hardware de proteção, com uma fonte de alimentação simples, sujeita a queimar apenas ligando na tomada kkkk, o microcontrolador não tem culpa disso, concorda ?

É funcão do projetista garantir o funcionamento do produto, claro que sempre pensando no custo final, e chegando a um produto que atenda as normas de segurança e de funcionamento para o tipo do produto.

Nem tudo é software, meu amigo !

Paulo

Link para o comentário
Compartilhar em outros sites

Estou testando a nova versão do Bascom ( ainda beta teste ), tem uma boa novidade, agora padronizaram um monte de fontes ( Arial, Courier, etc ) que pode ser usadas em qualquer um dos tipos de displays gráficos suportados, ( e são bastantes ! ).

E algo bem legal agora existe uma lib para suportar o uso de chips Leds como o WS2811 e WS2812, que são muito usados em várias aplicações como por exemplo Leds Sticks :
 

 

adafruit-neopixel-ring-16-2.jpg


Agora podemos ligar vários deles em série , e vários conjuntos desses em pinos diferentes !

Paulo

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...