Ir ao conteúdo
  • Cadastre-se

Projeto com PIC ou AVR


lpdant

Posts recomendados

Ola amigos do fórum, estou com algumas duvidas em um projeto..

Eu trabalho com eletrônica a uns 4 anos, mas nunca me empenhei em

aprender programação de microcontroladores, estava procurando um pouco sobre o assunto e vi q tenho aqui no laboratório uns ATMEGA8 16pu,

então gostaria de utilizar eles no projeto porque não consegui fazer somente com CI.

agora vai a proposta do projeto.

Seria mais ou menos como um CRONOMETRO REGRESSIVO,

acredito q possa utilizar portas para emular os numeros em dois display de 7 segmentos.

Objetivo é mostras em segundos o tempo q o sinal na entrada ficou ligado,

esse sinal seria de um sensor, na hora que o objeto ficasse na frente o sensor mandaria um sinal para o AVR e o AVR começaria a contar o tempo que o objeto ficou ali, EX: 40 seg.

assim que tirasse o objeto da frente do sensor, pararia o sinal, e na próxima vez que um objeto fosse coloca na frente do sensor, o sinal voltaria para o AVR e ele mostraria em tempo REGRESSIVO aqueles 40 seg anteriores, assim se no segundo objeto o tempo for maior, o AVR assimila e na próxima vez ele volta com o tempo maior, e se for menor o tempo o AVR volta com o tempo menor.

Tenho a disposição tmb o CI 4511, q acredito q facilita na hora de leitura de código BINÁRIO, ou poderia ser feito tudo no AVR.

alguém tem uma base para esse programa??? Definições das portas, contrução desse relogio que guarda o ultimo tempo e na proxima vez q for acionado ele mostra o tempo guardado e ao mesmo tempo grava o novo tempo para mostra no proximo ciclo???

quanto a parte do circuito eletrônico é tranquilo, minha dificuldade é na programação, vou procurar um curso de programação em C no minimo.

Obrigado até o momento pessoal.

Link para o comentário
Compartilhar em outros sites

ja fiz algo assim para um contador de semafaro,onde o microcontrolador aprendia o tempo em que um sinal ficava ativo e depois quando ele recebia esse sinal novamente ele decrementava o mesmo.É bem parecido,so que usei um pic.

eu pensava q nos contadores de semaforos fossem estipulado o valor... então se ele assimila o valor oqq controla o semaforo?!

vixi...

bom mas você tem como me ajudar um pouco nisso? uma base da programação.. pode ser em pic... site o AVR porque tenho aqui...

obrigado

Link para o comentário
Compartilhar em outros sites

Com um atmega8 e um display lcd alfanumérico você faz isso e muito mais!

Recomendo que você baixe o Atmel Studio 6 para começar a programar!

http://www.atmel.com/tools/atmel_studio6.aspx

Agora fal escolher a linguagem que você quer programar! Eu posso ajudar você tanto com o C quanto com o assembly do AVR.

Link para o comentário
Compartilhar em outros sites

Com um atmega8 e um display lcd alfanumérico você faz isso e muito mais!

Recomendo que você baixe o Atmel Studio 6 para começar a programar!

http://www.atmel.com/tools/atmel_studio6.aspx

Agora fal escolher a linguagem que você quer programar! Eu posso ajudar você tanto com o C quanto com o assembly do AVR.

Ola amigo.. muito obrigado estou baixando o programa...

quanto a linguagem, eu nao tenho ideia.. pois como falei antes nao manjo nada de programação... aprendi um pouco em um CLP com blocos logicos etc... mas nao sei nada de linguagem C e nem ASSEMBLY, mas você poderia me dizer ql seria mais fácil de aprender? e se tem um tutorial de fácil aprendizado?! porque todos que eu li ate agora me deixaram meio confuso...

Link para o comentário
Compartilhar em outros sites

Se você ir procurando no google você encontra muito material para programar o AVR em C. Mas como você não tem noção da linguagem, então tenho um pequeno tutorial para entender a estrutura do C. Estou me baseando no livro Microcotroladores PIC - Programação em C do Fábio pereira. Alguns pedaços eu adapto para o AVR, mas o grosso é igual para qualquer plataforma.

Princípios de programação

Se você já mexeu com CLP provavelmente já entende como funciona a lógica básica de traduzir um pensamento em uma sequência de comandos que possam ser compreendidos por um processador.

A linguagem C assim como qualquer outra linguagem de programação é um intermédio entre o pensamento do programador e o código final, que são zeros e uns (o que o processador entende).

É interessante você colocar seus algoritmos em fluxogramas para ter uma visualização melhor do problema a ser resolvido.

Ambiente Atmel Studio 6

atmelstudiologo.png

Eu não posso me aprofundar muito sobre a plataforma, pois ela sofreu significativas modificações desde o AVR Studio 4. Essa nova plataforma basicamente permite programar uma boa parte dos microcontroladores da Atmel, abrange todas as linhas AVR e também tem a linha ARM da Atmel.

Aqui vai um tutorial de como criar um novo projeto no Atmel Studio:

1º Passo: Clique em new project, irá aparecer uma janela para você configurar o seu novo projeto:

criandoumprojeto.png

Como estamos programando em C, escolhemos o compilador GCC C. Estamos fazendo um programa prático, as outras opções servem para o desenvolvimento de drivers.

2º Passo: Selecione o dispositivo que você vai programar:

escolhendoodispositivo.png

Estamos usando o atmega8.

Depois de configurar o projeto, é criado automaticamente um template para a programação:

oprojeto1.png

No próximo post eu começo a introduzir a linguagem C.

Link para o comentário
Compartilhar em outros sites

Bom .... sei que sou a minoria, mas fazer isso que voce quer, é muito fácil, em Basic do BASCOM mesmo.

Só é necessário o ATMEGA e um display qualquer que voce desejar... Eu sugiro utilizar um display LCD mesmo, tipo 16 linhas por 2 colunas, e mais nada !

Até sábado, estarei postando um Tutorial novo sobre Projetos com AVR - Design, Programação com Bascom e Simulação com o ISIS, creio que vai te ajudar muito a fazer seu programa da maneira mais simples possível.

Paulo

Link para o comentário
Compartilhar em outros sites

Se você ir procurando no google você encontra muito material para programar o AVR em C. Mas como você não tem noção da linguagem, então tenho um pequeno tutorial para entender a estrutura do C. Estou me baseando no livro Microcotroladores PIC - Programação em C do Fábio pereira. Alguns pedaços eu adapto para o AVR, mas o grosso é igual para qualquer plataforma.

Princípios de programação

Se você já mexeu com CLP provavelmente já entende como funciona a lógica básica de traduzir um pensamento em uma sequência de comandos que possam ser compreendidos por um processador.

A linguagem C assim como qualquer outra linguagem de programação é um intermédio entre o pensamento do programador e o código final, que são zeros e uns (o que o processador entende).

É interessante você colocar seus algoritmos em fluxogramas para ter uma visualização melhor do problema a ser resolvido.

Ambiente Atmel Studio 6

atmelstudiologo.png

Eu não posso me aprofundar muito sobre a plataforma, pois ela sofreu significativas modificações desde o AVR Studio 4. Essa nova plataforma basicamente permite programar uma boa parte dos microcontroladores da Atmel, abrange todas as linhas AVR e também tem a linha ARM da Atmel.

Aqui vai um tutorial de como criar um novo projeto no Atmel Studio:

1º Passo: Clique em new project, irá aparecer uma janela para você configurar o seu novo projeto:

criandoumprojeto.png

Como estamos programando em C, escolhemos o compilador GCC C. Estamos fazendo um programa prático, as outras opções servem para o desenvolvimento de drivers.

2º Passo: Selecione o dispositivo que você vai programar:

escolhendoodispositivo.png

Estamos usando o atmega8.

Depois de configurar o projeto, é criado automaticamente um template para a programação:

oprojeto1.png

No próximo post eu começo a introduzir a linguagem C.

muito obrigado, ja dei uma lida em algumas coisas sobre programação em AVR, o q nao achei ainda alem de nao ter entendido muita coisa, é que no caso "vou ter que usar a EEPROM do AVR para armazenar o tempo que ficou acionado e para verificar o novo tempo depois de reacionado", a maior duvida é, como sera feito a leitura disso e a conversão do valor que encontra-se na eeprom para 2 displays de 7 segmentos, UNIDADE E DEZENA, e como transforma as portas em saidas BCD!?

mas no momento muito obrigado...

Bom .... sei que sou a minoria, mas fazer isso que voce quer, é muito fácil, em Basic do BASCOM mesmo.

Só é necessário o ATMEGA e um display qualquer que voce desejar... Eu sugiro utilizar um display LCD mesmo, tipo 16 linhas por 2 colunas, e mais nada !

Até sábado, estarei postando um Tutorial novo sobre Projetos com AVR - Design, Programação com Bascom e Simulação com o ISIS, creio que vai te ajudar muito a fazer seu programa da maneira mais simples possível.

Paulo

Ola amigo do forum, bom pelo nome da pra imaginar que esse tipo de programação é muito mais simples e fácil de entender e trabalhar, mas creditoque nao tenha muitas funções, mas se realmente for fácil e usual para o meu caso, gostaria sim de ter esse conhecimento, alem de aprender c parender tmb basic, porque pelo q li em um tutorial, a melhor forma de programação é aquela q você compreende melhor e consegue trabalhar com facilidade, tem pessoas que tem facilidade em c, outras em assembly, então vamos aprender as 2 ou 3 e ver qual eu me saio melhor...

Alias eu nao tenho display LCD em mãos, mas tenho de 7 seg, e tenho uns 10 aqui... dai quero utilizar esses mesmo para nao ter gastos.. HDUASHUDAS

obrigado pela ajuda...

Link para o comentário
Compartilhar em outros sites

Ola amigo do forum, bom pelo nome da pra imaginar que esse tipo de programação é muito mais simples e fácil de entender e trabalhar, mas creditoque não tenha muitas funções, mas se realmente for fácil e usual para o meu caso, gostaria sim de ter esse conhecimento, alem de aprender c parender tmb basic, porque pelo q li em um tutorial, a melhor forma de programação é aquela q você compreende melhor e consegue trabalhar com facilidade, tem pessoas que tem facilidade em c, outras em assembly, então vamos aprender as 2 ou 3 e ver qual eu me saio melhor...

Alias eu não tenho display LCD em mãos, mas tenho de 7 seg, e tenho uns 10 aqui... dai quero utilizar esses mesmo para não ter gastos.. HDUASHUDAS

obrigado pela ajuda...

Olha, quando a gente já programa em duas ou três linguagens, realmente podemos escolher aquela que a gente se sente mais à vontade; mas quando voce ainda não conhece nenhuma, e não pretende trabalhar profissionalmente com ela, a mais fácil de se entender é o BASIC. Quanto a comandos, é a que tem mais comandos prontos com certeza. Pode usar os seus displays de 7 segmentos sim, sem nenhum problema !

Aguarde o Tutorial, estou enviando ele agora mesmo ao moderador, e ver se está tudo ok.

Um abraço !

Paulo

Link para o comentário
Compartilhar em outros sites

Bom, vou postar também o tutorial para o C, você escolhe a linguagem que você achar melhor!

Programação em C

Variáveis e Tipos de dados

Todo compilador de linguagens de médio a alto nível possui alguns tipos de variáveis para o armazenamento de algumas informações (como números, caracteres ou texto). Em suma, todos os tipos de variáveis são uma sequência de bits (normalmente organizados em bytes). Em linguagens de baixo nível, cabe ao programador diferenciar os tipos da variáveis, já que do ponto de vista do processador são somente uns e zeros.

Variáveis numéricas inteiras:

char: Variável de 8 bits, domínio -128 até +127.

unsigned char: Variável de 8 bits, domínio 0 a 255

short int: Variável de 16 bits, domínio -32768 a +32767

unsigned short: Variável de 16 bits, domínio 0 a 65536

long int: Variável de 32 bits, domínio -2^31 a +2^31 - 1

unsigned long: Variável de 32 bits, domínio -0 a +2^32 - 1

long long: Variável de 64 bits, domínio -2^63 a 2^63-1

unsigned long long: Variável de 64 bits, domínio 0 a 2^64-1

Variáveis de ponto flutuante: São variáveis especiais que permitem cálculos com números reais.

float: Variável de 32 bits, domínio 1,18*10^-38 até 3,4*10^38. Tem 7 casas decimais de precisão.

double: Variável de 64 bits, domínio 5,56*10^-309 até 1,79*10^308. Tem 16 casas decimais de precisão.

Declarando variáveis:

char Variavel1, Variavel2; //Declara duas variáveis

Declara 2 variáveis do mesmo tipo (char). O ";" sempre vai no final de uma definição ou um comando na linguagem C. O "//" indica o começo de um comentário.

Próximo post, strings e as funções básicas.

Link para o comentário
Compartilhar em outros sites

aphawk agora comecei o projeto no bascom

mas assim, o prinipal objetivo é armazenar o tempo de contagem q passou no ultimo ciclo.. como faz isso? como eu utilizo a eeprom para armazenar.. de uma olhada ser for possivel no meu programa inicial, onde

Entrada = Sinal do sensor onde deve ser calculado o tempo de q ficou o sinal na entrada e mandar para eeprom;

TEMPO = tempo gravado na eeprom no ultimo ciclo, (e que eu não sei como mandar a eeprom gravar).

mas me diga se o prinicipio esta correto..

'--------------------------------------------------------------

'

'TITULO: Programa Coronometro regressivo variavel

'CRIADOR: Lpdant

'DATA: 23/04/2012

'NOME DO ARQUIVO: contadortempo.bas

'

'--------------------------------------------------------------

' DESCRIÇÃO DO PROGRAMA

'

' Projeto que conta tempo que o sensor ficou ligado e motra

'em tempo real em um display de Dezesna e Unidade

'e se o tempo for diferente ele registra para que no proximo

'regressivamente de XX até chegar a 0.

'ciclo, comece a partir do ultimo tempo registrado.

'

'--------------------------------------------------------------

'DIRETIVAS DO COMPILADOR (informam ao BASCOM sobre o hadrware)

'

$regfile = "m8def.dat" 'modelo correspondente a atmega8

$crystal = 8000000 'velocidadde do clock

'

'--------------------------------------------------------------

'SETUP DO HADWARE

'Configura a direção de todos os Ports do AVR

'

Config Portb = Output

Config Portd = Output

Config Portc = Input

'

'Aliases do hadware (apelidos)

Entrada Alias Portc.0

'

'Inicializa os ports assim o hardware começa corretamente

Portd = &B00000000 'Desliga as saídas (nivel 0 nas saídas)

Portb = &B00000000

'

'------------------------------------------------------------------

'DECLARAÇÃO DE VARIAVEIS

'

Dim Contagem As Byte

Dim Tempo As Byte 'tempo que ficou sinal em ENTRADA e gravado pela eeprom

'

'INICIALIZA AS VARIAVEIS

'

Contagem = 0

'

'DECLARAÇÂO DAS CONTANTES

'

'------------------------------------------------------------------

'CODIGO PRINCIPAL DO PROGRAMA

Do

For Contagem = Tempo To 0 'inicia contador, de 0 até 9 incr de 1

Gosub Mostra 'chama a sub-rotina que mostra contador do display.

Waitms 1000 'espera 1 seg antes de mudar

Next Contagem 'incremente a contagem e teste se passou de 0

Loop

End 'fim do programa

'------------------------------------------------------------------

'SUB-ROTINA

Mostra: ' sub-rotina responsavel por mostra no display

Select Case Contagem ' faz teste com a variavel contagem

Case 0 : Portb = &B00111111 , Portd = &B00000000

Case 1 : Portb = &B00000110 , Portd = &B00000000

Case 2 : Portb = &B01011011 , Portd = &B00000000

Case 3 : Portb = &B01001111 , Portd = &B00000000

Case 4 : Portb = &B01100110 , Portd = &B00000000

Case 5 : Portb = &B01101101 , Portd = &B00000000

Case 6 : Portb = &B01111101 , Portd = &B00000000

Case 7 : Portb = &B00000111 , Portd = &B00000000

Case 8 : Portb = &B01111111 , Portd = &B00000000

Case 9 : Portb = &B01101111 , Portd = &B00000000

Case 10 : Portb = &B00111111 , Portd = &B00111111

Case 11 : Portb = &B00000110 , Portd = &B00111111

Case 12 : Portb = &B01011011 , Portd = &B00111111

Case 13 : Portb = &B01001111 , Portd = &B00111111

Case 14 : Portb = &B01100110 , Portd = &B00111111

Case 15 : Portb = &B01101101 , Portd = &B00111111

Case 16 : Portb = &B01111101 , Portd = &B00111111

Case 17 : Portb = &B00000111 , Portd = &B00111111

Case 18 : Portb = &B01111111 , Portd = &B00111111

Case 19 : Portb = &B01101111 , Portd = &B00111111

Case 20 : Portb = &B00111111 , Portd = &B01011011

Case 21 : Portb = &B00000110 , Portd = &B01011011

Case 22 : Portb = &B01011011 , Portd = &B01011011

Case 23 : Portb = &B01001111 , Portd = &B01011011

Case 24 : Portb = &B01100110 , Portd = &B01011011

Case 25 : Portb = &B01101101 , Portd = &B01011011

Case 26 : Portb = &B01111101 , Portd = &B01011011

Case 27 : Portb = &B00000111 , Portd = &B01011011

Case 28 : Portb = &B01111111 , Portd = &B01011011

Case 29 : Portb = &B01101111 , Portd = &B01011011

Case 30 : Portb = &B00111111 , Portd = &B01001111

Case 31 : Portb = &B00000110 , Portd = &B01001111

Case 32 : Portb = &B01011011 , Portd = &B01001111

Case 33 : Portb = &B01001111 , Portd = &B01001111

Case 34 : Portb = &B01100110 , Portd = &B01001111

Case 35 : Portb = &B01101101 , Portd = &B01001111

Case 36 : Portb = &B01111101 , Portd = &B01001111

Case 37 : Portb = &B00000111 , Portd = &B01001111

Case 38 : Portb = &B01111111 , Portd = &B01001111

Case 39 : Portb = &B01101111 , Portd = &B01001111

Case 40 : Portb = &B00111111 , Portd = &B01100110

Case 41 : Portb = &B00000110 , Portd = &B01100110

Case 42 : Portb = &B01011011 , Portd = &B01100110

Case 43 : Portb = &B01001111 , Portd = &B01100110

Case 44 : Portb = &B01100110 , Portd = &B01100110

Case 45 : Portb = &B01101101 , Portd = &B01100110

Case 46 : Portb = &B01111101 , Portd = &B01100110

Case 47 : Portb = &B00000111 , Portd = &B01100110

Case 48 : Portb = &B01111111 , Portd = &B01100110

Case 49 : Portb = &B01101111 , Portd = &B01100110

Case 50 : Portb = &B00111111 , Portd = &B01101101

Case 51 : Portb = &B00000110 , Portd = &B01101101

Case 52 : Portb = &B01011011 , Portd = &B01101101

Case 53 : Portb = &B01001111 , Portd = &B01101101

Case 54 : Portb = &B01100110 , Portd = &B01101101

Case 55 : Portb = &B01101101 , Portd = &B01101101

Case 56 : Portb = &B01111101 , Portd = &B01101101

Case 57 : Portb = &B00000111 , Portd = &B01101101

Case 58 : Portb = &B01111111 , Portd = &B01101101

Case 59 : Portb = &B01101111 , Portd = &B01101101

Case 60 : Portb = &B00111111 , Portd = &B01111101

Case 61 : Portb = &B00000110 , Portd = &B01111101

Case 62 : Portb = &B01011011 , Portd = &B01111101

Case 63 : Portb = &B01001111 , Portd = &B01111101

Case 64 : Portb = &B01100110 , Portd = &B01111101

Case 65 : Portb = &B01101101 , Portd = &B01111101

Case 66 : Portb = &B01111101 , Portd = &B01111101

Case 67 : Portb = &B00000111 , Portd = &B01111101

Case 68 : Portb = &B01111111 , Portd = &B01111101

Case 69 : Portb = &B01101111 , Portd = &B01111101

Case 70 : Portb = &B00111111 , Portd = &B00000111

Case 71 : Portb = &B00000110 , Portd = &B00000111

Case 72 : Portb = &B01011011 , Portd = &B00000111

Case 73 : Portb = &B01001111 , Portd = &B00000111

Case 74 : Portb = &B01100110 , Portd = &B00000111

Case 75 : Portb = &B01101101 , Portd = &B00000111

Case 76 : Portb = &B01111101 , Portd = &B00000111

Case 77 : Portb = &B00000111 , Portd = &B00000111

Case 78 : Portb = &B01111111 , Portd = &B00000111

Case 79 : Portb = &B01101111 , Portd = &B00000111

Case 80 : Portb = &B00111111 , Portd = &B01111111

Case 81 : Portb = &B00000110 , Portd = &B01111111

Case 82 : Portb = &B01011011 , Portd = &B01111111

Case 83 : Portb = &B01001111 , Portd = &B01111111

Case 84 : Portb = &B01100110 , Portd = &B01111111

Case 85 : Portb = &B01101101 , Portd = &B01111111

Case 86 : Portb = &B01111101 , Portd = &B01111111

Case 87 : Portb = &B00000111 , Portd = &B01111111

Case 88 : Portb = &B01111111 , Portd = &B01111111

Case 89 : Portb = &B01101111 , Portd = &B01111111

Case 90 : Portb = &B00111111 , Portd = &B01101111

Case 91 : Portb = &B00000110 , Portd = &B01101111

Case 92 : Portb = &B01011011 , Portd = &B01101111

Case 93 : Portb = &B01001111 , Portd = &B01101111

Case 94 : Portb = &B01100110 , Portd = &B01101111

Case 95 : Portb = &B01101101 , Portd = &B01101111

Case 96 : Portb = &B01111101 , Portd = &B01101111

Case 97 : Portb = &B00000111 , Portd = &B01101111

Case 98 : Portb = &B01111111 , Portd = &B01101111

Case 99 : Portb = &B01101111 , Portd = &B01101111

Link para o comentário
Compartilhar em outros sites

Opa !!!! Olha só o programa saíndo !!!!

Bom, vamos primeiro ao hardware de sua ideia. voce está colocando dois displays SEM MULTIPLEX, ou seja, os dois vão estar acesos ao mesmo tempo, certo ?

Problema : temos 14 segmentos, que podem acender juntos, por exemplo, contagem = 88 , certo ? Lembre-se de que a corrente máxima no AVR é de 200ma , ou seja, voce vai ter de limitar a corrente em no máximo uns 12 ma em cada segmento !!!!! Vai precisar de 14 resistores !

Se usar display vermelho, Vled = 1,8 , com 5 volts de alimentação tem de usar R= (5-1,8)/0,012 = 266 OHMS, use o valor comercial de 270 Ohms e voce estará seguro !

Agora, olhando o programa, voce poderia fazer uma única tabela que traduz numero x segmentos, assim para saber como acender os segmentos para um determinado número, bastaria uma consulta à tabela ( função LOCKUP do BASCOM , ou uma estrutura tipo CASE, consulte o projeto 2 ).

Assim ele ficaria bem menor !

Para usar dados na memória EEPROM, é só dimensionar a variável da maneira correta. Por exemplo :

DIM Tempo AS Eram BYTE

Isto já prepara o seu programa para guardar a variável Tempo na memória EEPROM ( o BASCOM chama de ERAM) , ok ?

Se precisar armazenar números maiores que 255, pode utilizar variável tipo WORD ( 2 bytes = até 1023 ) .

Vai lá, meu amigo, falta pouco hehehe ! Acerta os dados na EEPROM, e testa. Lembre-se de que voce tem de bolar uma maneira para ver se existe algum tempo válido gravado, certo ?

Depois voce otimiza o programa para tirar esses 100 CASES !!!!!

Paulo

Link para o comentário
Compartilhar em outros sites

agora estou começando a compreender melhor

Eram então beleza, no caso de sobre carregar eu posso usar 2 CIs que possuo aqui

o 4511, eles são decodificadores binarios, precisaria de 4 saidas para cada numero

do display 0000 0000 = 00 , 0000 0001 = 01 etc...

agora as coisas vão engrenar....

vou tentar fazer primeiro a gravação do numero na Eram, e tentar rodar

v c funciona.. dai depois posto aqui...

Link para o comentário
Compartilhar em outros sites

Modifiquei a sua sub-rotina MOSTRA, por este código aqui, isso resolveu aquele montão de CASE ...


Mostra: ' sub-rotina responsavel por mostra no display
If Contagem < 10 then
portd = 0
valor = contagem
gosub CONVERTE
portb = valor
Else
Dezena = contagem / 10
unidade = dezena * 10
unidade = contagem - unidade
valor = unidade
gosub converte
PORTB = VALOR
valor = dezena
gosub converte
PORTD = valor
endif
return

converte:
Select Case valor ' faz teste com a variavel contagem
Case 0 : valor = &B00111111
Case 1 : valor = &B00000110
Case 2 : valor = &B01011011
Case 3 : valor = &B01001111
Case 4 : valor = &B01100110
Case 5 : valor = &B01101101
Case 6 : valor = &B01111101
Case 7 : valor = &B00000111
Case 8 : valor = &B01111111
Case 9 : valor = &B01101111
END SELECT
Return

Acrescente as declarações abaixo no programa :

DIM unidade AS BYTE

DIM dezena AS BYTE

DIM valor AS BYTE

agora é com voce !!!!

( Fiz a simulação com a correção acima e deu pau.... a lógica do tempo armazenado está errada ! )

Paulo

Link para o comentário
Compartilhar em outros sites

Dei uma acertada no seu programa para tirar os erros da compilação. Agora, voce tem de acertar a lógica, pois ainda está errada, ok ?

Esse seu loop FOR Contagem = Tempo to 0 não está certo, voce tem de ficar sempre atualizando os tempos, e não está fazendo isso.


'--------------------------------------------------------------
'
'TITULO: Programa Coronometro regressivo variavel
'CRIADOR: Lpdant
'DATA: 23/04/2012
'NOME DO ARQUIVO: contadortempo.bas
'
'--------------------------------------------------------------
' DESCRIÇÃO DO PROGRAMA
'
' Projeto que conta tempo que o sensor ficou ligado e motra
'em tempo real em um display de Dezesna e Unidade
'e se o tempo for diferente ele registra para que no proximo
'regressivamente de XX até chegar a 0.
'ciclo, comece a partir do ultimo tempo registrado.
'
'--------------------------------------------------------------
'DIRETIVAS DO COMPILADOR (informam ao BASCOM sobre o hadrware)
'
$regfile = "m8def.dat" 'modelo correspondente a atmega8
$crystal = 8000000 'velocidadde do clock
'
'--------------------------------------------------------------
'SETUP DO HADWARE
'Configura a direção de todos os Ports do AVR
'
Config Portb = Output
Config Portd = Output
Config Portc = Input
'
'Aliases do hadware (apelidos)
Entrada Alias Portc.0
'
'Inicializa os ports assim o hardware começa corretamente
Portd = &B00000000 'Desliga as saídas (nivel 0 nas saídas)
Portb = &B00000000
'
'------------------------------------------------------------------
'DECLARAÇÃO DE VARIAVEIS
'
Dim Contagem As Byte
Dim Tempo As Eram Byte 'tempo que ficou sinal em ENTRADA e gravado pela eeprom
Dim valor as byte
dim unidade as byte
dim dezena as byte

'
'INICIALIZA AS VARIAVEIS
'
Contagem = 0
'
'DECLARAÇÂO DAS CONTANTES
'
'------------------------------------------------------------------
'CODIGO PRINCIPAL DO PROGRAMA
Do
For Contagem = Tempo To 0 'inicia contador, de 0 até 9 incr de 1
Gosub Mostra 'chama a sub-rotina que mostra contador do display.
Waitms 1000 'espera 1 seg antes de mudar
Next Contagem 'incremente a contagem e teste se passou de 0
Loop

End 'fim do programa
'------------------------------------------------------------------
'SUB-ROTINA
Mostra: ' sub-rotina responsavel por mostra no display
If Contagem < 10 then
portd = 0
valor = contagem
gosub CONVERTE
portb = valor
Else
Dezena = contagem / 10
unidade = dezena * 10
unidade = contagem - unidade
valor = unidade
gosub converte
PORTB = VALOR
valor = dezena
gosub converte
PORTD = valor
endif
return

converte:
Select Case valor ' faz teste com a variavel contagem
Case 0 : valor = &B00111111
Case 1 : valor = &B00000110
Case 2 : valor = &B01011011
Case 3 : valor = &B01001111
Case 4 : valor = &B01100110
Case 5 : valor = &B01101101
Case 6 : valor = &B01111101
Case 7 : valor = &B00000111
Case 8 : valor = &B01111111
Case 9 : valor = &B01101111
END SELECT
Return

Paulo

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

Olá Amigos do Foram!

Preciso de uma ajuda, estou desenvolvendo um projeto de um Gerador de Síntese Musicais polifonica.

com microcontrolador AVR em Assembly.

A minha dificuldade é em acessar uma Tabela: com 255 valores via ponteiros, Eu já fiz isso com o pic, mas estou migrando para a linha AVR pois esse projeto requer muita velocidade e o pic é meio lento.

Eu já tenho esperiencia com microcontrolador PIC em assembly.

Muito grato:Raimundo

Link para o comentário
Compartilhar em outros sites

Olá Amigos do Foram!

Preciso de uma ajuda, estou desenvolvendo um projeto de um Gerador de Síntese Musicais polifonica.

com microcontrolador AVR em Assembly.

A minha dificuldade é em acessar uma Tabela: com 255 valores via ponteiros, Eu já fiz isso com o pic, mas estou migrando para a linha AVR pois esse projeto requer muita velocidade e o pic é meio lento.

Eu já tenho esperiencia com microcontrolador PIC em assembly.

Muito grato:Raimundo

Amigo, cria um novo tópico para deixar o fórum mais organizado, ai eu te ajudo, tenho experiência com o PIC e o AVR em assembly.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...