DADO ELETRÔNICO

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

DADO ELETRÔNICO

Mensagempor Pask » 10 Mai 2015 14:02

Amigos, vi num livro a sugestão de um autor para elaborar um "dado eletrônico" usando um display de leds de 7 segmentos apresentando números aleatórios de 1 a 6 e parando em um deles após pressionar o botão "JOGAR". Estou tentando desenvolver esse código em C mas ainda não consegui. O circuito já está montado e o display funciona perfeitamente com o Atmega8. O problema está na contagem do tempo após pressionar o botão para gerar os números aleatoriamente. Alguém teria uma ideia de como fazer isto?
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Re: DADO ELETRÔNICO

Mensagempor andre_luis » 10 Mai 2015 15:02

Pra ter um valor realmente aleatório, poderia fazer um contador cíclico de 0 até o valor limite estabelecido de 6 a uma velocidade de contagem muito alta. Como voce mencionou, se há o fator humano envolvido, ou seja, se o disparo é feito por botão isso garante que realmente não há nenhuma relação entre os valores, sendo realmente aleatórios.

Pra geração dos tempos, pode usar algum tipo de embaralhamento lógico, tipo um filtro digital( tipo, CRC ) pra gerar uma duração que parecesse aleatória.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: DADO ELETRÔNICO

Mensagempor Alexandro » 11 Mai 2015 11:22

Em C tem uma função chamada RAMD que faz isso.
Avatar do usuário
Alexandro
Byte
 
Mensagens: 436
Registrado em: 23 Out 2006 16:49
Localização: São José do Rio Preto - SP e Sao Paulo-SP

Re: DADO ELETRÔNICO

Mensagempor Pask » 11 Mai 2015 12:16

No MikroC esta função se chama rand( ), mas gera número muito grandes de até 16 bits de tamanho.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Re: DADO ELETRÔNICO

Mensagempor eletroinf » 11 Mai 2015 12:40

A solução mais fácil, no meu entender, é a sugestão do andre_teprom.

A função rand() que gere 16 bit é outra alternativa que poderia ser usada sem nenhum problema, bastando limitar o número de bit desejado e fazendo algum artifício qualquer como soma no caso do valor estar acima, embora dentro do limite de bits.
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: DADO ELETRÔNICO

Mensagempor andre_luis » 11 Mai 2015 13:14

A função rand() exige uma semente, que no caso do disparo manual já seria por si só um valor aleatório, pois é assincrono com o valor atual do contador.
Ou seja, o proprio 'dedo' do camarada após pressionar o botão "JOGAR" já é uma função randomica.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: DADO ELETRÔNICO

Mensagempor tcpipchip » 11 Mai 2015 18:39

implementa um press any key e acumula uma variavel...
usa ele como seed quando pressionar a tecla
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: DADO ELETRÔNICO

Mensagempor Pask » 12 Mai 2015 19:07

RESOLVIDO: Criei um laço while e incrementei uma variável entre 1 e 6 sem usar a função "random" e criei um jeito de sair do laço de forma imprevisível com um desses valores carregados na variável. Deu certo.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Re: DADO ELETRÔNICO

Mensagempor MOR_AL » 14 Mai 2015 10:40

Um pequeno detalhe.
No loop, a alteração do 6 para o 1, pode demorar mais que as outras alterações. Aí o dado pode ficar viciado. Tem que garantir as mesmas chances para todas as 6 opções.
Tente lançar o dado muitas vezes (algo maior que 100), para ver se ele distribui 1/6 de probabilidade para cada número e mostre o resultado para a gente acompanhar.

Um detalhe. Há muitos anos, na aula de estatística na faculdade, o professor tinha um recipiente com muitas bolinhas com apenas duas cores. Muitas, mas muitas mesmo, brancas e pouquíssimas azuis. Com uma colher para pegar apenas 6 dessas bolinhas ele mostrava que a chance de vir mais que uma bolinha azul, dentre as muito mais brancas era quase zero. A turma caiu na carótida do professor, quando na amostra vieram muitas azuis.

Moral da história.
Dados estatísticos são verdadeiros quando o número de amostras tende ao infinito, QUANDO DEIXA DE SER ESTATÍSTICA E SE TORNA UM FATO.

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: DADO ELETRÔNICO

Mensagempor Pask » 14 Mai 2015 12:37

Não. O dado não está viciado. Ele realmente apresenta todos os números entre 1 e 6 aleatoriamente. Ficou muito bom.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19


Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x