como fazer duas contagens em velocidades diferentes?

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

como fazer duas contagens em velocidades diferentes?

Mensagempor renan-papaco » 24 Out 2013 15:49

de acordo com o programa aqui abaixo, eu preciso que P0 faça uma contagem binária rápida enquanto P1 faça uma varredura binária de 0 a 3 e de 3 a 0... só que só funciona ou uma ou outra parte do programa...nunca as duas e já tentei de tudo...parece que os comandos delay e for no mesmo código dão conflito...se eu incluir a função TONE no código, só essa que funciona, a função main fica totalmente sem ação.

Código: Selecionar todos
#include<at89x52.h>
#include<delay.h>
int cont;
char saida;

 void tone(){
 
      for(cont=0;cont<10;cont++);
     
     P0=saida;
     saida++;     
           
            }
void main(){

    while(1){
    tone();
   
    P1=0;
    delay_ms(1000);
    P1=1;
    delay_ms(1000);
    P1=2;
    delay_ms(1000);
    P1=0;
    delay_ms(1000);
    P1=1;
    delay_ms(1000);         
             }
 
           }


como eu separo essas duas funções pra que uma funcione independe da outra?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor ze2 » 24 Out 2013 16:08

ao mesmo tempo literalmente só por hw. tipo 1 pelo pwm e outro pela serial. ou usando interrupt (o que pode abalar o loop). mas ve se isso dá diferença:
Código: Selecionar todos
void tone(){
for(cont=0;cont<10;cont++) //;<- //e não precisa ser int. mc de 8 bits gosta + de... unsigned char.
{
P0=saida;
saida++;
}
}
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor renan-papaco » 24 Out 2013 16:28

ze escreveu:ao mesmo tempo literalmente só por hw. tipo 1 pelo pwm e outro pela serial. ou usando interrupt (o que pode abalar o loop). mas ve se isso dá diferença:
Código: Selecionar todos
void tone(){
for(cont=0;cont<10;cont++) //;<- //e não precisa ser int. mc de 8 bits gosta + de... unsigned char.
{
P0=saida;
saida++;
}
}

não adiantou nada... P0 está fazendo a contagem enquanto que P1 está toda inativa.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor cfreund » 24 Out 2013 16:32

Pesquise sobre TIMERS.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor renan-papaco » 24 Out 2013 16:34

cfreund escreveu:Pesquise sobre TIMERS.

só preciso de um código pra usar como exemplo...só isso.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor cfreund » 24 Out 2013 16:48

Qual uC? IDE?

Para o 8051, veja o manual:


89s52|: https://www.google.com.br/search?q=89s5 ... r&safe=off
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor renan-papaco » 24 Out 2013 16:59

cfreund escreveu:Qual uC? IDE?

Para o 8051, veja o manual: http://www.atmel.com/Images/doc4316.pdf

89s52|: https://www.google.com.br/search?q=89s5 ... r&safe=off

cara...sinceramente num tá ajudando. não é problema de hardware e nem to programando em assembly, e sim em C no SDCC. só quero um jeito pra fazer dois ports do 8051 contarem simultaneamente em velocidades diferentes, sendo um fazendo contagem incrementada e a outra, aleatória como vc pode ver no código.

podem até postar um código pronto pra mim q procuro estuda-lo e ver oq eu posso aprender com ele...mas me ajudem por favor!
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor cfreund » 24 Out 2013 18:08

Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor renan-papaco » 24 Out 2013 21:35

mais uma vez não adiantou nada...
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor Red Neck Guy » 24 Out 2013 22:25

Tipo, fazendo em loop....

cpp code
unsigned int contadorA=100,contadorB=10;
for(;;){
if(!--contadorA){
contadorA = 100;
PINO_1 ^= 1;
}
if(!--contadorB){
contadorB = 10;
PINO_2 ^= 2;
}
delay_ms(1);
}


se te assustar com if(!--variavel), faz assim:

variavel--;
if(!variavel){
//teu código aqui
// lembra de recarregar a contagem
}

se ainda te assustar, faz assim

variavel--;
if(variavel==0){
// o código ainda vai aqui
// e ainda precisa recarregar a contagem.
}
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor renan-papaco » 24 Out 2013 23:17

olha... não dá mesmo... não posso entender nada... é grego pra mim!!! nunca fui bom em programação...admito! melhor entregar meus pontos e desistir...vender tudo q já investi... eu não aguento mais !!

não consigo assimilar nada com nada! isso chega a ser grotesco! eu estudo, leio livros, procuro ajuda em foruns mas isso é coisa pra gênio...eu não tenho o dom de criar nada em software... não consigo entender nada!! absolutamente nada... em circuitos lógicos já até cheguei a montar um jogo de pong usando matriz de leds...se tá dificil eu fazer um tone generator de multiplas frequencias no 8051 imagine um circuito desses com matriz de leds?

é pra acabar mesmo... melhor vender td q comprei... eu sou muito burro pra isso. :cry:
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor Red Neck Guy » 25 Out 2013 06:08

Se é oque queres ñ desiste ñ.
Esses livros de microcontroladore são todos péssimos em didática dá parte de programação. Talvez busar um método e legal e começar a brincar de programar fazendo coisas bobas no console e utilizando o depurador para ver como a lógica que implementaste se comporta seja um começo.
Eu por exemplo nunca sei quando colocar virgulas ou quando se inicia uma nova frase mas nao desisto de escrever por conta disso.
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor ze2 » 25 Out 2013 07:02

desistir (de você) é fácil demais e vai de encontro com meus princípios (e talvez deste forum). por partes, foquemos... "só quero um jeito pra fazer dois ports do 8051 contarem simultaneamente em velocidades diferentes"
cpp code
void main(void)
{
unsigned char a;
for (;;)
{
P0=a;
P1=a/2;// /3 /4 /5 *2 *3 etc. pra sacanear com o mc, faça float a e P1=a*0.765432
delay(xxx);
}
}

por sorte sua tenho doutorado e sou phd em pisca leds para mc´s
dicas:
-use led (óbvio com resistor, xute 1k) com catodo na saída pois portas podem ser coletor aberto. Neste caso faça P0=~a; ~=inverte bit
-use proteus para simular. é trilegal e trifácil
Apesar de vc ser um mala(gradecido. note-se nos seus posts reposta) se conseguir avise que cogito a possibilidade de lhe explicar com exemplos o hw do pwm do mc. (antes tenho que fazer uma revisão). Pré condição: mostre progresso
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor xultz » 25 Out 2013 07:25

Renan Papaco:
Imagem

Agora se acalme, você não é burro não. Se eu consigo fazer um programa, qualquer pessoa consegue, acredite.
No começo é F*** prá caramba mesmo. De verdade. Quase todo mundo passou exatamente por isso. A diferença está em quem desistiu e quem insistiu.

Vamos começar então pelo começo: especifique em riqueza de detalhes o que você quer fazer no teu projeto. Quanto menos abstrato e mais claro, melhor, por exemplo:
"eu quero fazer um projeto, que terá 10 botões. Eu terei uma saída, e para cada botão pressionado, quero que num pino saia uma nota musical: o primeiro botão será 'dó' (342Hz), o segundo será 'ré' (354Hz) e assim por diante. Ao mesmo tempo quero que em outro pino fique oscilando em 150Hz por causa deste motivo ou aquele. Um terceiro pino terá um led quero que fique piscando com 3Hz enquanto o programa estiver rodando, e um quarto pino terá um led que ficará aceso por no máximo meio segundo quando um botão for pressionado".

(aquelas frequências ali eu inventei, eu não sei quais são as frequências das notas musicais). (ah, e aquela especificação ali é só um exemplo que inventei também).

Então, a primeira coisa que deve fazer e escrever aqui: especifique o que você fazer, que resultado espera do teu projeto, com a maior riqueza de detalhes possível, para então passar prá famigerada segunda etapa: fazer um fluxograma.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: como fazer duas contagens em velocidades diferentes?

Mensagempor vtrx » 25 Out 2013 07:39

Voce quer fazer um som polifonico,e atravez de Looping encaixado é preciso calcular bem o código.
Este tipo de código é chatinho mesmo de fazer.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Próximo

Voltar para 8051

Quem está online

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

x