Ir ao conteúdo
  • Cadastre-se

Projetos com Avr : Design, Programação em Basic e Assembly


Ir à solução Resolvido por aphawk,

Posts recomendados

A ideia do Tutorial foi você montar os circuitos, estudar o funcionamento deles, e ver o que que o programa faz.

Existem muitas técnicas legais nele, o uso e interrupções como base de tempo e controle de saídas é bem esmiuçado nas montagens que utilizam displays de Leds de 7 segmentos.

Inclusive como se calcula os valores para se obter os valores e divisores dos timers... por isso que te perguntei de onde que você tirou aquele seu PRELOAD com valor decimal, lembra ?

Sei que é difícil seguir tudo o que tem lá, mas é justamente para evitar dúvidas como as que você postou nesse programa, entendeu ?

Se você reparar, a solução que eu fiz foi EXATAMENTE a dica que eu te dei...

Manda bala, meu amigo !

Paulo

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

  • 2 semanas depois...

Editado por Gabriel Torres:

 

Mensagem original continha um código-fonte gigantesco que estava impedindo este tópico de abrir.

 

Coloquei a mensagem original em um arquivo texto, em anexo.

 

Por favor, NÃO postem códigos-fontes gigantescos no fórum. Se precisarem postar algo muito grande, salve em um arquivo texto e anexe o arquivo texto.

 

Muito obrigado!

p5770274.txt

Link para o comentário
Compartilhar em outros sites

Caramba. O que achei mais interessante é como ele faz para ler o arquivo de som.

Se analisarmos preço a preço, realmente não tem como a os PIC alcançarem os AVR.

Para ter próximo aos 32 MIPS, só usando a família 24H/E para cima. O mais básico deles, o PIC 24HJ12GP201, encontra-se ele somente na Farnell a um preço de R$15 reais.

Dois pontos: Ele trabalha de 3 a 3.6V. Não li o datasheet dele, mas já teríamos um problema aí com a grande maioria dos sensores que são feitos de 0 a 5V. Fora a dificuldade de encontrar PICs de 16bits ou mais.

Falou

Link para o comentário
Compartilhar em outros sites

Pois é .... mas parece que só eu uso os AVRs ...... incrível a resistência que o pessoal tem de trocar....

Reparou que no programa tem uma implementação completa de FAT para cartão SD ????? Porisso que fica meio grande, o certo era compilar para uma LIB do Bascom e incluir ela.... e detalhe, tudo em Basic....

Tem muito cara doido no Fórum do Bascom, às vezes aparece uns projetos que eu tiro o chapéu .... Vou montar esse troço só para ver a qualidade do som.

Mas realmente em compatibilidade de tensões o AVR é fantástico, pode alimentar ele com 3,3 ou com 5V, e tem versões de 1,8 Volts ..... claro que quanto mais baixa a tensão, menor é a velocidade que ele pode rodar.

Paulo

Link para o comentário
Compartilhar em outros sites

Paulo.

Descobri este tópico agora.

Lí a primeira página e não atinei que já haviam outras 5!!!

Vou lê-las na medida do possível. Se minhas dúvidas já foram respondidas antes, peço que as desconsidere.

Grato.

Uso muito o uC PIC.

Para programas até 2k, uso o assembly do MPLAB.

Pode parecer pouco, mas já fiz alguma coisa interessante em ASM.

Minha relação é: Relação entre ocupação de RAM e Flash= 0,3 = Programa em ASM / Programa em C ou Mikrobasic.

Para programas mais complexos, cheguei a usar o MikroBasic, pois precisei de variáveis em ponto flutuante.

De tanto ouvir falar no Arduino, estou quase comprando um UNO para brincar.

Não gostaria de ocupar o kit UNO para os meus projetos, apenas em desenvolvimento. Depois usaria o ATMEGA 328P.

Quero migrar para o AVR por serem mais barato e com maiores capacidades que os PICs de mesmo preço.

Aí é que vem a minha dúvida.

Porque você usa o BASCOM, cujo free é limitado em 4KB? Minha suposição é que seria equivalente a uns 1k3 em asm, o que é pouco.

O Arduino não possui uma IDE própria, já sem limitação?

A ATMEL não possui uma IDE própria, que seja free?

Existe IDE com asm em AVR?

No momento estou com muitos projetinhos eletrônicos (hobby), mas gostaria de conhecer um pouco mais dos micros AVR com 8 bits.

Quais seriam suas considerações?

[]'s

MOR_AL

Link para o comentário
Compartilhar em outros sites

off-topic @ MOR

MOR, agora vi que você é de Mangaratiba. Já fui várias vezes aí na sua cidade. Tenho parentes que moram aí. Meu tio tem um kiosque na Praia do saco. Passei o último carnaval aí. Sem falar nas incontáveis vezes que visitei a cidade. Bem legal.... Já fui na Ilha Grande e tal....

Falou

Link para o comentário
Compartilhar em outros sites

off-topic @ MOR

MOR, agora vi que você é de Mangaratiba. Já fui várias vezes aí na sua cidade. Tenho parentes que moram aí. Meu tio tem um kiosque na Praia do saco. Passei o último carnaval aí. Sem falar nas incontáveis vezes que visitei a cidade. Bem legal.... Já fui na Ilha Grande e tal....

Falou

Para passear é ótimo, mas para morar, nem tanto. Faltam as infraestruturas básicas. Se você vier no carnaval me procura.

Moderador. Caso ache conveniente, sinta-se livre para apagar minha mensagem.

Grato.

MOR_AL

Link para o comentário
Compartilhar em outros sites

Mor,

Olha, eu uso no tutorial os programas que rodem na versão free, cujo tamanho do objeto é de 4 K. Mas eu tenho o meu licenciado mesmo, não foi caro, comprei direto pelo site da MCS, e saiu cerca de R$ 200,00 na época.

Existe sim uma IDE para os AVRs, é o AVR-STÚDIO, e é FREE, e existe um excelente C, também FREE, para toda a linha AVR. Porisso que tem essa aceitação toda no mundo. Integra Assembler e C numa mesma IDE.

Eu faço exatamente isso que voce quer fazer com o uno e os Atmega328P. Mas tudo usando o ambiente do Bascom, desde a compilação, passagem do programa pelo bootloader original do Arduíno, e interface serial para comunicação com o Uno, tudo está integrado no Bascom. Facilita demais !

Quanto aos programas em assembler e em high level, o que percebí é que para usar as coisas legais que existem hoje é muito complicado em assembler... Internet, I2C, SPI, RTC, tudo está ficando meio complicado de se usar na mão, tendo o controle completo em assembler.... e acabam ficando muito grandes e cada vez mais difícil de se debugar.

O Bascom não é um simples Basic.... se voce reparar no fórum oficial, verá que a grande maioria dos usuários são engenheiros eletrônicos mais "idosos", como eu e voce.... Mesmo com os 4K de limitação da versão Free, ele é muito poderoso, e o tamanho do código é bem enxuto, claro que se voce escrever o programa com alguns cuidados sempre consegue ficar ainda menor.

Quanto à IDE do Arduíno, ela é bem poderosa, muito usada, mas não é FREE para uso comercial. E é muito parecida com o C.

Quanto ao que eu posso te dizer sobre os Avrs .... olha, não dá para comparar com os Pics de jeito nenhum, são bem mais rápidos, e tem sempre muito mais recurso de RAM, FLASH e EEPROM pelo mesmo preço de um Pic. Veja que agora pouco fiquei sabendo que conseguimos tirar 32 Mips de um Atmega, contra 12 Mips de um PIC18F .... fora que eles são muito mais baratos e com muito mais recursos, e o hardware afinal de contas é muito parecido em termos de periféricos internos e funcionamento deles.

Eu era um usuário de Pics, pode ver que existe tutorial meu em Basic para eles também aqui no CDH :

http://forum.clubedohardware.com.br/showpost.php?p=3712305&postcount=3

Mas quando comprei um ATTiny2313 e programei ele com o Bascom Free, simplesmente me abriu um mundo de possibilidades novas, de repente todos os projetos que eu sonhava realizar estavam ao meu alcançe, com hardwares baratos e uma linguagem muito poderosa, facilitando muito o acesso aos recursos dos AVR's. Em menos de dois meses adquiri o Bascom Full.

Eu acredito que se voce experimentar baixar o tutorial, dar uma lidinha por cima, baixar o Bascom, e ver os recursos da linguagem, voce vai se apaixonar, ela funciona muito bem, é bem pensada, e tem um excelente suporte.

Experimente ! É o que eu posso te dizer de melhor, meu amigo !

Paulo

Link para o comentário
Compartilhar em outros sites

Paulo!

Já baixei o seu tutorial.

Para te ser sincero, já baixei tanta coisa sobre o Arduino que nem sei se terei tempo para ler tudo.

Gosto de usar o Assembler no PIC, porque sempre se tem maior controle do hardware, mas a complexidade dos projetos está aumentando tanto, que é chegada hora de migrar para outra linguagem de um pouco mais alto nível.

O problema é que realmente ainda não decidi, se Basic ou se C. Como já mencionei, Basic é mais fácil, mas muita gente usa C. Na hora de "conversar" sobre o firmware, a quantidade de usuários tende para o C.

Parece que quem entende C, vai entender um firmware em Basic, mas o contrário fica mais complicado.

Tenho o kit EasyPIC 4 e o MikroBasic free. Com eles eu escrevo o firmware, edito, gravo e debugo, apesar de nunca ter debugado.

Prefiro incluir rotinas em asm para localizar os erros, mas isso é outra história.

Sua resposta foi muito esclarecedora.

Grato.

MOR_AL

Link para o comentário
Compartilhar em outros sites

  • 5 semanas depois...

Opa, nova aparência do Fórum ficou legal, mas vou ter de instalar um programa anti-anúncios no Ipad, tá muito difícil de ler ou postar, toda hora aprece um maldito anuncio que só some se clicar nele.... Que saco !

Tenho algumas novidades para postar, assim que resolver isso....

Paulo

Link para o comentário
Compartilhar em outros sites

Pessoal,

 

Reparei que muita gente tem interesse em fazer um sistema que decodifique sinais Infravermelhos ( IR ) padrão NEC. Aliás, como curiosidade, tenho 6 controles remotos aqui no quarto, e os 6 usam esse padrão, tanto a Panasonic, como Samsung, e a LG , entre outros usam esse padrão.

 

Assim, disponibilizo o codigo fonte no Bascom, de um programa que serve de início para qualquer aplicação, pois ele pode executar qualquer operação que voce colocar no programa. Chamei isto de um pequeno processador de comandos.

 

Pode também rodar em um Arduíno , sem problemas.

 

Basta ligar um receptor do tipo TSOP 1838 ou qualquer equivalente, desde que seja para 38 Khz.

 

O sensor tem de ser ligado ao pino 4 ( INT0) do microprocessador, diretamente, sem nenhuma resistencia. Apenas faça um pequeno filtro RC na alimentação do TSOP, verifique a documentação fartamente encontrada na Internet.

 

Se quiser, pode ligar um display LCD também, o programa prevê um modo de DEBUG, onde voce vai ver qual o código que cada tecla gera ao ser pressionada, assim fica fácil escolher qual tecla vai fazer qual função.

 

Se usar um display em pinagem diferente à que eu usei, basta mudar os pinos no programa.

 

Por último, se voce usar outro microprocessador tipo ATMEGA , basta modificar e recompilar para ele. Como é usado a INT0 e o Timer0, presentes em quase todos microprocessadores AVR, pode-se usar até mesmo a família ATtiny para isso !

 

Segue o programa :

 

Spoiler


'--- Programa decodificador de código IR NEC normal ----------------------------
'
' Este programa é uma melhora de um programa publicado no site do BASCOM,
' em um Application Notes.
' Fiz algumas melhoras para corrigir algumas temporizações e para tratar
' melhor o caso de uma tecla mantida apertada.
' E aproveitei e coloquei uma estrutura de processador de comandos
'
' O padrão NEC normal envia duas informações : a primeira é um código fixo
' determinado no controle remoto; e a segunda, que é a que nos interessa,
' é o código único de uma determinada tecla do controle remoto.
' Aqui, ignoro o código do controle remoto, uso apenas o das teclas.
'
' Existe uma variante do NEC, que envia dois bytes para cada tecla, mas até
' hoje não encontrei nenhum controle desse tipo.
' Porém este programa pode ser fácilmente modificado para esse padrão, ou
' para se obter o código do controle remoto.
'
$regfile = "m328pdef.dat"
$crystal = 8000000                      '8 MHz Interno
$hwstack = 64
$swstack = 64
$framesize = 100

'---- Declaração de sub-rotinas ------------------------------------------------
Declare Sub Processa_comando

'---(LCD)-----------------------------------------------------------------------
' usado para o modo TESTE
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pd.5 , Db5 = Pd.4 , Db6 = Pd.3 , Db7 = Pd.1 , E = Pd.6 , Rs = Pd.7

'---( hardware)-----------------------------------------------------------------
Config Portd.2 = Input
' O sensor IR vai ligado ao pino Portb.2
Config Portb.0 = Output
Led Alias Portb.0
' usei um Led no Portb.0 que fica aceso e pisca quando recebe sinal IR
' Facilita para ver se tá recebendo algum comando....

'--- DIMENSIONAMENTO DAS VARIÁVEIS ---------------------------------------------
Dim Teste_codigo As Byte
Dim Tik As Word                         'counter of teaks of timer
Dim Byt As Byte                         'counter accepted bit
Dim Repeat_flag As Bit                  'flag of repetition
Dim Start_flag As Bit                   'flag of start condition
Dim Flag_dado As Bit                    'flag indica que tem dado valido recebido
Dim Address As Byte                     'byte of address
Dim Command As Byte                     'byte of command
Dim Address_1 As Byte                   'direct byte of address
Dim Command_1 As Byte                   'direct byte of command
Dim Address_0 As Byte                   'indirect byte of address
Dim Command_0 As Byte                   'indirect byte of command
Dim Summa As Word
Dim Ult_command As Byte
Dim Dado_valido As Bit
Dim Last_command As Byte

'---- Tabela de comandos a serem decodificados ---------------------------------
' Adicione tantos quantos forem necessários
Const Inc_vol = 98
Const Dec_vol = 162
Const Inc_tr = 168

'---- DEBUG --------------------------------------------------------------------
Const Teste = 0                         ' NORMAL OU MOSTRAR CODIGOS DO IR NEC
' 0 é o processamento normal, 1 mostra dado recebido no display

'--- INICIO PROGRAMA -----------------------------------------------------------
Teste_codigo = Teste
Led = 1
Waitms 200
Initlcd
Cls
Cursor Off
Config Timer0 = Timer , Prescale = 256  
'16000000/256=62500 Hz
Config Int0 = Falling                   'Interruption on Falling
Stop Timer0
Enable Timer0
Enable Int0
Timer0 = 253
Enable Interrupts
On Timer0 Tikers
On Int0 Infrared                        'work on interruption
Cursor Off
Cls
Dado_valido = 0
Command = 0
Last_command = 0

'###############################################################################

Do
'Main cycle
If Dado_valido = 1 Then  
  If Repeat_flag = 0 Then
    If Teste_codigo = 0 Then
      Dado_valido = 0
      Processa_comando
    Else
      Locate 1 , 1
      Lcd Space(16)
      Locate 1 , 1
      Lcd Command
    End If
    Waitms 200
  Else
    Command = Last_command
    If Teste_codigo = 0 Then
      Dado_valido = 0
      Repeat_flag = 0
      Processa_comando
    Else
      Locate 1 , 1
      Lcd Space(16)
      Locate 1 , 1
      Lcd Command
'     não usei o Wait senão fica muito lenta a repetição devido ao LCD...
    End If
  End If
End If
Loop
End

'###############################################################################
Tikers:                                'work on timer
Timer0 = 253                           '31250/(256-253)=10416,66 Hz
Incr Tik
If Tik >= 1150 Then
                    'if 1200 teaks, have thrown all in source condition
  Tik = 0
  Repeat_flag = 0
  Start_flag = 0
  Address_1 = 0
  Command_1 = 0
  Address_0 = 0
  Command_0 = 0
  Address = 0
  Command = 0
  Led = 1
  Stop Timer0
End If
Return

'##############################################################################
Infrared:                              'work on interruption
Start Timer0
Toggle Led

If Tik >= 130 And Tik < 145 Then       'if has happenned from 139 before 150 teaks - "START"
  Address = 1
  Repeat_flag = 0
  Start_flag = 1
  Address_1 = 0
  Command_1 = 0
  Address_0 = 0
  Command_0 = 0
End If

If Tik >= 110 And Tik < 125 Then       'if has happenned from 116 before 138 teaks - "REPETITION"
  Address = 2
  Repeat_flag = 1
  Start_flag = 0
  Dado_valido = 1
End If

If Tik >= 18 And Tik < 26 And Start_flag = 1 Then       'if has happenned from 22 before 115 teaks - have taken "1"
  Incr Byt
  If Byt < 9 Then
    Shift Address_1 , Left     Address_1 = Address_1 + 1
  End If
  If Byt >= 9 And Byt < 17 Then
    Shift Address_0 , Left
    Address_0 = Address_0 + 1
  End If
  If Byt >= 17 And Byt < 25 Then
    Shift Command_1 , Left
    Command_1 = Command_1 + 1
  End If
  If Byt >= 25 Then
    Shift Command_0 , Left
    Command_0 = Command_0 + 1
  End If
End If

If Tik >= 8 And Tik < 18 And Start_flag = 1 Then       'if has happenned from 10 before 21 teaks - have taken "0"
  Incr Byt
  If Byt < 9 Then
    Shift Address_1 , Left
  End If
  If Byt >= 9 And Byt < 17 Then
    Shift Address_0 , Left
  End If
  If Byt >= 17 And Byt < 25 Then
    Shift Command_1 , Left
  End If
  If Byt >= 25 Then
    Shift Command_0 , Left
  End If
End If
Tik = 0

If Byt = 32 Then                       'if have taken 4 bytes, check correctness a receiving a command
'                                       If Address Or Command 16 -bit , Check Does Not Pass
  Summa = Address_0 + Address_1
  If Summa = 255 Then
    Address = Address_1
    Dado_valido = 1
  Else
    Dado_valido = 0
    Start_flag = 0
    Repeat_flag = 0
    Dado_valido = 0
    Command = 0
    Address = 0
  End If
  Summa = Command_0 + Command_1
  If Summa = 255 And Dado_valido = 1 Then
    Command = Command_1
    Last_command = Command
    Dado_valido = 1
  Else
    Start_flag = 0
    Repeat_flag = 0
    Dado_valido = 0
    Command = 0
    Address = 0
  End If
  Byt = 0
  Repeat_flag = 0
  Start_flag = 0
  Stop Timer0
  Led = 1
End If
Return

'###############################################################################
'---------  SUB ROTINAS -------------------------------------------------------
Sub Processa_comando     ' Aqui é processado o codigo recebido
                         ' Basta acrescentar estruturas IF para cada código a processar.
If Command = Inc_vol Then
' se foi recebido o código 98
' coloque aqui o seu código
End If

If Command = Dec_vol Then
' se foi recebido o código 162
' coloque aqui o seu código
End If

If Command = Inc_tr Then
' se foi recebido o código 168
' coloque aqui o seu código
End If
End Sub

 

'--- Programa decodificador de código IR NEC normal ----------------------------'' Este programa é uma melhora de um programa publicado no site do BASCOM,' em um Application Notes.' Fiz algumas melhoras para corrigir algumas temporizações e para tratar' melhor o caso de uma tecla mantida apertada.' E aproveitei e coloquei uma estrutura de processador de comandos'' O padrão NEC normal envia duas informações : a primeira é um código fixo' determinado no controle remoto; e a segunda, que é a que nos interessa,' é o código único de uma determinada tecla do controle remoto.' Aqui, ignoro o código do controle remoto, uso apenas o das teclas.'' Existe uma variante do NEC, que envia dois bytes para cada tecla, mas até' hoje não encontrei nenhum controle desse tipo.' Porém este programa pode ser fácilmente modificado para esse padrão, ou' para se obter o código do controle remoto.'$regfile = "m328pdef.dat"$crystal = 8000000                      '8 MHz Interno$hwstack = 64$swstack = 64$framesize = 100'---- Declaração de sub-rotinas ------------------------------------------------Declare Sub Processa_comando'---(LCD)-----------------------------------------------------------------------' usado para o modo TESTEConfig Lcd = 16 * 2Config Lcdpin = Pin , Db4 = Pd.5 , Db5 = Pd.4 , Db6 = Pd.3 , Db7 = Pd.1 , E = Pd.6 , Rs = Pd.7'---( hardware)-----------------------------------------------------------------Config Portd.2 = Input' O sensor IR vai ligado ao pino Portb.2Config Portb.0 = OutputLed Alias Portb.0' usei um Led no Portb.0 que fica aceso e pisca quando recebe sinal IR' Facilita para ver se tá recebendo algum comando....'--- DIMENSIONAMENTO DAS VARIÁVEIS ---------------------------------------------Dim Teste_codigo As ByteDim Tik As Word                         'counter of teaks of timerDim Byt As Byte                         'counter accepted bitDim Repeat_flag As Bit                  'flag of repetitionDim Start_flag As Bit                   'flag of start conditionDim Flag_dado As Bit                    'flag indica que tem dado valido recebidoDim Address As Byte                     'byte of addressDim Command As Byte                     'byte of commandDim Address_1 As Byte                   'direct byte of addressDim Command_1 As Byte                   'direct byte of commandDim Address_0 As Byte                   'indirect byte of addressDim Command_0 As Byte                   'indirect byte of commandDim Summa As WordDim Ult_command As ByteDim Dado_valido As BitDim Last_command As Byte'---- Tabela de comandos a serem decodificados ---------------------------------' Adicione tantos quantos forem necessáriosConst Inc_vol = 98Const Dec_vol = 162Const Inc_tr = 168'---- DEBUG --------------------------------------------------------------------Const Teste = 0                         ' NORMAL OU MOSTRAR CODIGOS DO IR NEC' 0 é o processamento normal, 1 mostra dado recebido no display'--- INICIO PROGRAMA -----------------------------------------------------------Teste_codigo = TesteLed = 1Waitms 200InitlcdClsCursor OffConfig Timer0 = Timer , Prescale = 256  '16000000/256=62500 HzConfig Int0 = Falling                   'Interruption on FallingStop Timer0Enable Timer0Enable Int0Timer0 = 253Enable InterruptsOn Timer0 TikersOn Int0 Infrared                        'work on interruptionCursor OffClsDado_valido = 0Command = 0Last_command = 0'###############################################################################Do                                      'Main cycleIf Dado_valido = 1 Then  If Repeat_flag = 0 Then    If Teste_codigo = 0 Then      Dado_valido = 0      Processa_comando    Else      Locate 1 , 1      Lcd Space(16)      Locate 1 , 1      Lcd Command    End If    Waitms 200  Else    Command = Last_command    If Teste_codigo = 0 Then      Dado_valido = 0      Repeat_flag = 0      Processa_comando    Else      Locate 1 , 1      Lcd Space(16)      Locate 1 , 1      Lcd Command'     não usei o Wait senão fica muito lenta a repetição devido ao LCD...    End If  End IfEnd IfLoopEnd'############################################################################### Tikers:                                'work on timer Timer0 = 253                           '31250/(256-253)=10416,66 Hz (96 e(e;n') Incr Tik If Tik >= 1150 Then                    'if 1200 teaks, have thrown all in source condition Tik = 0 Repeat_flag = 0 Start_flag = 0 Address_1 = 0 Command_1 = 0 Address_0 = 0 Command_0 = 0 Address = 0 Command = 0 Led = 1 Stop Timer0 End If Return '############################################################################## Infrared:                              'work on interruption Start Timer0 Toggle Led If Tik >= 130 And Tik < 145 Then       'if has happenned from 139 before 150 teaks - "START"  Address = 1  Repeat_flag = 0  Start_flag = 1  Address_1 = 0  Command_1 = 0  Address_0 = 0  Command_0 = 0 End If If Tik >= 110 And Tik < 125 Then       'if has happenned from 116 before 138 teaks - "REPETITION"  Address = 2  Repeat_flag = 1  Start_flag = 0  Dado_valido = 1 End If If Tik >= 18 And Tik < 26 And Start_flag = 1 Then       'if has happenned from 22 before 115 teaks - have taken "1"   Incr Byt   If Byt < 9 Then     Shift Address_1 , Left     Address_1 = Address_1 + 1   End If   If Byt >= 9 And Byt < 17 Then     Shift Address_0 , Left     Address_0 = Address_0 + 1   End If   If Byt >= 17 And Byt < 25 Then     Shift Command_1 , Left     Command_1 = Command_1 + 1   End If   If Byt >= 25 Then     Shift Command_0 , Left     Command_0 = Command_0 + 1   End If End If If Tik >= 8 And Tik < 18 And Start_flag = 1 Then       'if has happenned from 10 before 21 teaks - have taken "0"   Incr Byt   If Byt < 9 Then     Shift Address_1 , Left   End If   If Byt >= 9 And Byt < 17 Then     Shift Address_0 , Left   End If   If Byt >= 17 And Byt < 25 Then     Shift Command_1 , Left   End If   If Byt >= 25 Then     Shift Command_0 , Left   End If End If Tik = 0 If Byt = 32 Then                       'if have taken 4 bytes, check correctness a receiving a command 'If Address Or Command 16 -bit , Check Does Not Pass   Summa = Address_0 + Address_1   If Summa = 255 Then     Address = Address_1     Dado_valido = 1   Else     Dado_valido = 0     Start_flag = 0     Repeat_flag = 0     Dado_valido = 0     Command = 0     Address = 0   End If   Summa = Command_0 + Command_1   If Summa = 255 And Dado_valido = 1 Then    Command = Command_1    Last_command = Command    Dado_valido = 1   Else    Start_flag = 0    Repeat_flag = 0    Dado_valido = 0    Command = 0    Address = 0   End If   Byt = 0   Repeat_flag = 0   Start_flag = 0   Stop Timer0   Led = 1 End If Return'###############################################################################'---------  SUB ROTINAS -------------------------------------------------------Sub Processa_comando' Aqui é processado o codigo recebido' Basta acrescentar estruturas IF para cada código a processar.If Command = Inc_vol Then' se foi recebido o código 98' coloque aqui o seu códigoEnd IfIf Command = Dec_vol Then' se foi recebido o código 162' coloque aqui o seu códigoEnd IfIf Command = Inc_tr Then' se foi recebido o código 168' coloque aqui o seu códigoEnd IfEnd Sub

 

Boa diversão.

 

Paulo

Minha inclusão aqui...

Link para o comentário
Compartilhar em outros sites

Postado po MOR_AL :

 

Aí é que vem a minha dúvida.

 

Porque você usa o BASCOM, cujo free é limitado em 4KB? Minha suposição é que seria equivalente a uns 1k3 em asm, o que é pouco.

MOR_AL

 

 

 

 

Bom, nao tinha reparado nisto que voce perguntou.

 

Não é essa a comparação de tamanho que voce imagina.... Se voce quiser escrever um programa complexo, com I2C, Internet, e coisa parecida, vai ver que não é o tamanho do código gerado que importa. é a facilidade em escrever e debugar que vale !

 

voce lembra do Windows 3.11 ???? O kernel dele era todo puro Assembler ! O bicho voava mesmo com processadores a 40 Mhz. E para instalar, usava 13 disquetes de 1.2 Mb, e ocupava menos de 5 Mb instalado.

 

Quando surgiu o Windows 95, ele já usava um kernel misto, muita coisa em C. voce reparou a diferença de tamanho que os dois programas instalados ocupavam ?

De 5 Mb passou para mais de 350 Mb , e virou uma carroça de tão lento que ficou.

 

Se ficou tão lento, e tão grande, porque que a Microsoft não fez tudo em Assembler ??????????????

 

Hehehe voce já sabe a resposta ! Iria demorar muito mais tempo para debugar, e não poderiam dividir a "escrita" do programa em tantos programadores , iria ser um caos fazer o debugger.

 

Lembro que o Windows95 não tinha nada de Internet !

 

Isso que eu escreví acima é o que realmente importa. Tempo, hoje, é muito mais caro do que um microprocessador um pouco maior.

 

Mais um exemplo :

 

Desenvolví em 4 dias um aparelho de som que ficou fantástico, usando um Atmega328P, um TDA8425 como circuito controlador de áudio, com duas entradas selecionáveis, controle de volume, grave e agudo; um amplificador para fones de ouvido hi-fi feito apenas com operacionais, coloquei um módulo de FM TEA5767, um display 16x2 e tudo controlado por IR !

 

A conversa com o TDA e o TEA é feita em I2C. Fui escrevendo o código, sem otimizar nada, e o programa final ocupou 32% da memória Flash. Como sobrou espaço, estou querendo implementar também um relógio de tempo real com um RTC, e um receptor de áudio via Bluetooth, para eliminar cabos de conexão. Detalhe, o receptor Bluetooth usa interface serial, e o RTC também usa I2C.

 

Já imaginou fazer isto em Assembler ? Em 4 dias eu idealizei o hardware, montei tudo numa placa padrão, escreví o software em Bascom, fiz o debug, e está funcionando que é uma beleza ! Claro que partí de outros projetos que eu já havia feito.

 

O programa feito até o momento, que não tem relógio nem Bluetooth, tem tamanho menor do que 12K. Poderia usar um Atmega16 que ainda daria para fazer o relógio e o Bluetooth.

 

Segue esquema :

amplificador.thumb.png.d57f27fb39f53cccf5a6f23dd2865d96.png

 

Como eu não pretendo fabricar nada, para mim não importa o processador, importa o tempo. Creio que para quase todos aqui no Fórum, isto é o que mais importa : a facilidade de atingir o seu objetivo.

 

Paulo

Link para o comentário
Compartilhar em outros sites

Ok!

Documento muito bem e com muitos detalhes todos os meus projetos, a maioria em assembly.

 

Quando decido revê-los, passados alguns poucos meses, fica um pouco difícil acompanhar os detalhes das decisões tomadas em muitos fluxogramas que fiz.

A programação em si é quase que imediata, pois os fluxogramas seguem uma sequência progressiva; o seguinte com maiores detalhes que o anterior, até que cada bloco possa ser realizado com uma ou duas instruções em assembly.

Apesar deste fato, concluí que mesmo com uma linguagem de um pouco mais alto nível, é imperativo se conhecer os blocos do hardware do microprocessador.

Parece que a combinação que mais se aproxima dos requisitos ideais de "tempo de projeto" como de "controle das funções" do microprocessador, é a utilização de linguagem de nivel superior à assembly e conhecimento do hardware do microprocessador.

Em razão disso, estou terminando os meus projetos, já iniciados em assembly, para migrar para linguagem de mais alto nível.

Quanto ao fabricante do microprocessador, ainda usarei os da Microchip, que já possuo e iniciarei o estudo dos Atmel, com ênfase no Atmega 328, que inclusive já os comprei.

MOR

Link para o comentário
Compartilhar em outros sites

MOR,

Perfeito ! É muito importante um bom conhecimento do hardware do microcontrolador, e eu indico também pesquisas sobre usos em condições fora das espeçificadas no datasheet !

Sempre existe algum jeitinho de se contornar limitações, abrindo mão de bits de resolução ou de velocidade, ou com experimentação na bancada.

Por exemplo, nos casos dos Atmega328, temos overclock com cristal externo de 32 Mhz, temos PWMs de 250 Khz com 5 bits, temos conversão A/D com velocidade de 250 Khz em 8 bits, temos conversor A/D com 12 ( ???? !!!!!! ) bits de resolução...... E nada disso consta como possível no datasheet !

O caminho que voce está seguindo vai ser perfeito.

Paulo

Link para o comentário
Compartilhar em outros sites

Paulo,

Estou interessado em adquirir um Arduino DUE ( http://arduino.cc/en/Main/ArduinoBoardDue ) cujo processador é um Atmel SAM3X8E ARM Cortex-M3 de 32 bits ( http://www.atmel.com/devices/sam3x8e.aspx?tab=overview ), que está a venda no ebay ( http://www.ebay.com/itm/DUE-Board-SAM3X8E-32bit-CortexM3-ARM-compatible-For-Arduino-Due-USB-Cable-/400601875507?pt=LH_DefaultDomain_0&hash=item5d45bb8433 ).

Mas será que ele é suportado pelo Bascom ?

Eu só embarcaria nessa se não precisasse aprender C, pois estou muito velho para aprender uma nova linguagem (e C é muito enrolado para mim). Pelo Bascom ficaria muito mais simples.

Link para o comentário
Compartilhar em outros sites

Infelizmente, é uma arquitetura ARM, não AVR, e não tem suporte no momento. Talvez pelo MikroBasic, tem de olhar no site deles. 

 

O máximo que voce pegar para usar o BASCOM é um Arduino MEGA2560, que embora tenha a mesma performance dos AVRs tradicionais, tem um baita monte de memória RAM e FLASH para programar. Muito mais do que eu teria saco para escrever, com certeza !

 

Paulo

Link para o comentário
Compartilhar em outros sites

Infelizmente, é uma arquitetura ARM, não AVR, e não tem suporte no momento. Talvez pelo MikroBasic, tem de olhar no site deles. 

 

O máximo que voce pegar para usar o BASCOM é um Arduino MEGA2560, que embora tenha a mesma performance dos AVRs tradicionais, tem um baita monte de memória RAM e FLASH para programar. Muito mais do que eu teria saco para escrever, com certeza !

 

Paulo

 

 

É uma pena pois se depender de aprender a programar C para usar um ARM, vou continuar sem. O hardware dele é bem interessante, vou ficar com água na boca. Já sou macaco velho, tenho dificuldades de aprender truques novos (e nem interesse).

 

Mas quem sabe se em algum momento não sai uma atualização com suporte a ARM para o Bascom (com bem mais recursos que o basic do Bascom). Acho que seria divertido programar em assembler para um ARM, mas dá muito trabalho fazer o código todo. Para fazer algumas subrotinas eu até consigo encarar, mas fazer tudo é complicado demais, não tenho mais tempo e nem saco para isto.

Link para o comentário
Compartilhar em outros sites

@Intrudera6,

 

Caramba, mais recursos ? Já tem muito mais comandos do que deveria, tem várias maneiras de se fazer a mesma coisa, até confunde um pouco hehehe.

 

O que que você acha que está faltando ? Eu posso passar para Mark, ele sempre pede sugestões para a melhoria.

 

Infelizmente, a estrutura de Hardware dos ARMS não é nem um pouco parecida, e teria de ser criada uma versão diferente, apenas para os Arm's mesmo.

 

Preste atenção nisto : existem sim um bom compilador basic para os ARM's !!! E suporta um montão de kits que você encontra baratinhos no Ebay !

 

Dá uma olhada aqui :

 

http://www.mikroe.com/mikrobasic/arm/

 

 

Paulo

Link para o comentário
Compartilhar em outros sites

2 i2c por hardware por exemplo (foi o que eu percebi logo de cara e que é bastante útil quando se quer pendurar um periférico lento numa i2c usando interrupção, sem afetar a leitura dos outros), mais contadores (se não me falha a memória, ele tem contadores de 32 bits), processador mais rápido, DMA e provavelmente suporte a divisão por hardware e calculo em 32 bits (para cálculos matemáticos mais complexos é útil).

 

Eu certamente estou muito longe de esgotar os recursos do Arduino MEGA, mas eu estou muito curioso para usar um Arduino DUE, e estou realmente querendo experimentar um ARM (sem precisar programar em C).

 

Vou dar uma olhada no mikrobasic.

Link para o comentário
Compartilhar em outros sites

Bom, do jeito que tá num é melhor você usar um microprocessador clássico ??????? kkkk Que tal um Intel CoreI5 ???

 

Tem tudo o que você quer, menos os dois I2c .... bate qualquer desses Arms da vida em performance, cálculos em 64 bits ( ajuda muito mais que os de 32 bits... ), co-processador matemático embutido no hardware, DMA de tudo que é jeito, clocks de 2 Gigahertz, caches fantásticos onde você poe o seu código e roda 10 vezes mais rápido do que em qualquer ARM top de linha  ..... KKKKKK   Calma, é brincadeira !

 

Teste o MikroBasic, ele é uma excelente alternativa ao Bascom, e suporta um montão de hardwares muito mais poderosos.

 

Eu pretendo migrar para ele em alguns anos, ou caso aparece algum projeto muito complicado onde precise de performance.

 

Boa diversão !

 

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...