-
Posts
15 -
Cadastrado em
-
Última visita
Reputação
7-
não deu certo, não acende nenhum led, to fazendo um teste só com um led, na real serão 40 leds, mas preciso fazer com que fucnione com 1 led pra testar, talvez ate faça varredura pros 40 leds, mas preciso testar só um, mas obrigado por tentar ajudar, #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> //Define macros #define set_bit(adress,bit) (adress|=(1<<bit)) #define clr_bit(adress,bit) (adress&=~(1<<bit)) #define tst_bit(adress,bit) (adress&(1<<bit)) #define MAY_DELAY 5000 #define LIN0 PC0 #define COL0 PD0 #define LIN1 PC1 #define COL1 PD1 #define LIN2 PC2 #define COL2 PD2 #define LIN3 PC3 #define COL3 PD3 #define LIN4 PC4 #define COL4 PD4 #define LIN5 PC5 #define COL5 PD5 #define A 0x01 #define B 0x02 #define C 0x03 #define D 0x0F #define E 0x04 #define F 0x05 #define G 0x06 #define H 0x0E #define N1 0x07 #define N2 0x08 //matriz com as informações para decodificação do teclado const unsigned char teclado[4][4] PROGMEM = {{0x01, 0x02, 0x03, 0x0F}, {0x04, 0x05, 0x06, 0x0E}, {0x07, 0x08, 0x09, 0x0D}, {0x0A, 0x00, 0x0B, 0x0C}}; unsigned char nr; unsigned char nb; //------------------------------------------------------------------------------------ //Sub-rotina para leitura do teclado //------------------------------------------------------------------------------------ unsigned char ler_teclado() { unsigned char n, j, tecla, linha; for(n=0;n<4;n++) { clr_bit(PORTB,n); //apaga o bit da coluna (varredura) _delay_ms(10); //atraso para uma varredura mais lenta linha = PINB>>4; //lê o valor das linhas for(j=0;j<4;j++) //testa as linhas { if(!tst_bit(linha,j)) //se foi pressionada alguma tecla, decodifica tecla = pgm_read_byte(&teclado[j][n]); } set_bit(PORTB,n); //seta o bit zerado anteriormente } return tecla; //retorna o valor pressionado //se nenhuma tecla for pressionada, tecla tem o ultimo valor lido //inicialização por conta do usuário } //------------------------------------------------------------------------------------ int main() { DDRB = 0b00001111; //definições das entradas e saídas para o teclado DDRC = 0b11111111; //definições das entradas e saídas LINHAS LEDS 5 DDRD = 0b11111111; //definições das entradas e saídas COLUNAS LEDS 8 PORTB= 0xFF; //habilita os pull-ups da porta B PORTC= 0xFF; //habilita os pull-ups da porta C LINHAAAAAAAAAAAAA PORTD= 0x00; //habilita os pull-ups da porta B COLUNAAAAAAAAAAA while(1) { nr = ler_teclado(); //Lê constantemente o teclado //Sequencia do A nb = ler_teclado(); /// Lê constantemente o teclado /// Sequencia do A nr = nr * 10 + nb; /// digitando 0 e enter e 1 e enter eh igual 1 /// digitar 1 e enter e 0 e enter eh igual 10 if( nr == 0X01 ) { set_bit(PORTD,COL0); clr_bit(PORTC,LIN0); _delay_ms(MAY_DELAY); clr_bit(PORTD,COL0); } } } eu quero difitar a letra A, que corresponde o numero 1, depois o numero 7 que corresponde o numero 1 e por final da um enter que no meu caso é o numero 8, como mostra as letras ao lado do teclado. o teste é o seguinte, digitando tecla 0x01(tecla 1 ou A, que é a mesma coisa) + tecla 0x07(que é a minha tecla 7) + enter que eh o 0x08 faz o que ta dentro do if
-
não entendi o que é o nb
-
não deu certo, o led que acenderia digitando a tecla 1 e 2 ja fica aceso quando eu simulo. nr_1 vai no #define?
-
Ola decair, vou tentar isso, obrigado Devair
-
É normal um pendrive bootavel ficar bloqueado para gravação?
bigles21 respondeu ao tópico de justicebalatensa em Pen drives e cartões de memória
ola, eu já tive esse problema, até hj não consegui mais gravar nada nele, nem formatar, pode ser defeito mesmo, ou voce acabou ativando a proteção de gravação, alguns pen drivers tem uma chave pequena pra bloquear -
ganhei um Ipod morto
bigles21 respondeu ao tópico de Creepy_Vox em Smartphones, celulares, tablets e apps
Ola, as vezes cabo de má qualidade dá problema, tenta usar um cabo original. -
Ola pessoal, não manjo muita de progrmação, mas estou fazendo um jogo e queria ajuda, quem puder ajudar agradeço. tenho esse código abaixo, p que quero é o seguinte: quando eu digitar por exemplo a tecla 1, que no código corresponde o 0x01, que guarde esse numero, depois digito a segunda tecla, por exemplo a tecla 2 (0x02) e depois que digitei essas duas teclas, uso uma outra que sera o enter, tipo a tecla 6(0x06) e ai faz o que tá dentro do while, a parte que vai dentro do while que é acender os leds tranquilo, mas como faço pra guardar as duas teclas digitadas e finalizar com o enter, que no meu caso é a tecla 6? o teclado tá lendo certinho os numeros ja testei 1 a 1, o problema é que não sei como fazer pra guardar as duas teclas digitadas, agradeço se alguém puder me ajudar. na realidade, as primeiras 8 teclas serão Letras e o resto será numero de 1 a 5 e o 6 vai ser o enter, td bem, isso não muda nada porque o correspondente no progmen é o mesmo. //==================================================================================== // // LEITURA DE UM TECLADO 4x4 // //==================================================================================== // #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> //Define macros #define set_bit(adress,bit) (adress|=(1<<bit)) #define clr_bit(adress,bit) (adress&=~(1<<bit)) #define tst_bit(adress,bit) (adress&(1<<bit)) #define MAY_DELAY 5000 #define LIN0 PC0 #define COL0 PD0 //matriz com as informações para decodificação do teclado const unsigned char teclado[4][4] PROGMEM = {{0x01, 0x02, 0x03, 0x0F}, {0x04, 0x05, 0x06, 0x0E}, {0x07, 0x08, 0x09, 0x0D}, {0x0A, 0x00, 0x0B, 0x0C}}; unsigned char nr; //------------------------------------------------------------------------------------ //Sub-rotina para leitura do teclado //------------------------------------------------------------------------------------ unsigned char ler_teclado() { unsigned char n, j, tecla, linha; for(n=0;n<4;n++) { clr_bit(PORTB,n); //apaga o bit da coluna (varredura) _delay_ms(10); //atraso para uma varredura mais lenta linha = PINB>>4; //lê o valor das linhas for(j=0;j<4;j++) //testa as linhas { if(!tst_bit(linha,j)) //se foi pressionada alguma tecla, decodifica tecla = pgm_read_byte(&teclado[j][n]); } set_bit(PORTB,n); //seta o bit zerado anteriormente } return tecla; //retorna o valor pressionado //se nenhuma tecla for pressionada, tecla tem o ultimo valor lido //inicialização por conta do usuário } //------------------------------------------------------------------------------------ int main() { DDRB = 0b00001111; //definições das entradas e saídas para o teclado DDRC = 0b11111111; //definições das entradas e saídas LINHAS LEDS 5 DDRD = 0b11111111; //definições das entradas e saídas COLUNAS LEDS 8 PORTB= 0xFF; //habilita os pull-ups da porta B PORTC= 0xFF; //habilita os pull-ups da porta C LINHAAAAAAAAAAAAA PORTD= 0x00; //habilita os pull-ups da porta B COLUNAAAAAAAAAAA while(1) { nr = ler_teclado(); //Lê constantemente o teclado //Sequencia do A if (nr==0X01) { clr_bit(PORTC,LIN0); set_bit(PORTD,COL0); _delay_ms(MAY_DELAY); clr_bit(PORTD,COL0); } } }
-
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 respondeu ao tópico de bigles21 em Microcontroladores
@aphawk Ha sim, ensino... Mas a desaparecer ou ganhar dinheiro? kkk Dinheiro tá difícil;;; To fazendo aqui C pra ver que q dá... -
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 respondeu ao tópico de bigles21 em Microcontroladores
@Isadora Ferraz kkkk, ha sim, to tentando.... -
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 respondeu ao tópico de bigles21 em Microcontroladores
@aphawk Sim, o código no geral é meu, .hoje a noite vou tentar, obrigado! adicionado 1 minuto depois @Isadora Ferraz Dominar o mundo não é meu sonho de consumo, e sim, desaparecer dele -
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 respondeu ao tópico de bigles21 em Microcontroladores
@aphawk O problema está no nível de programação de cada um, não sou expert, por isso vim pedir ajuda.. Mas obrigado pela sua ajuda, vou ver se consigo com as suas dicas e a Izadora, valeu -
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 respondeu ao tópico de bigles21 em Microcontroladores
@aphawk Até pensei, mas se eu fizer um monte de if definindo uma margem de Distancia X pra acender o LED1 (Distancia aumentando) ou LED2 (Distancia diminuindo) o sistema não entenderá se a distancia está subindo ou descendo... -
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 respondeu ao tópico de bigles21 em Microcontroladores
@Isadora Ferraz Com case creio que não dê -
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 respondeu ao tópico de bigles21 em Microcontroladores
@Isadora Ferraz Já tenho a variavel Distancia sim, mas como funcionaria essa tua sugestão? porque sao muitas leituras, de 7 a 2 metros, mais ou menos, entao por exemplo, se a distancia tá em 10cm e passou pra 11 ou 12 ou até de 5 em 5cm. tipo tá em 10cm, depois 10 em 15cm seta um led... kkk isso até me deu uma possível solução... Talvez e possa usar "case" switch (Distancia) { case Distancia tal: set_bit(PORTD, PB2); break; case constante2: Instruções; break; default Instruções; } -
Outro monitorar tensão do adc se é ascendente ou descendente atmeg8
bigles21 postou um tópico em Microcontroladores
Se alguém puder me ajudar; to com um atmega8 lendo um sensor ultrasonico e acendendo leds de acordo com a distancia, até ai ok, mas eu queria que acendesse um led quando a distancia estiver aumentando e outro quando estiver se aproximando. Obrigado aí pessoal! ISR(TIMER1_CAPT_vect) { cpl_bit(TCCR1B,ICES1); //troca a borda de captura do sinal if(!tst_bit(TCCR1B,ICES1))//lê o valor de contagem do T/C1 na borda de subida do sinal Inicio_Sinal = ICR1; //salva a primeira contagem para determinar a largura do pul else Distancia = (ICR1 - Inicio_Sinal)/58; } int main() { DDRB = 0b11111110; DDRD = 0b11101111; PORTB =0b00000000; PORTD =0b00000000; TCCR1B = (1<<ICES1) | (1<<CS11); //T/C1 com prescaler = 8, captura na borda de subida TIMSK = 1<<TICIE1; //habilita a interrupção por captura sei(); //habilita a chave de interrupções globais //habilita interrupções globais while(1) { set_bit(PORTB,DISPARO); _delay_us(10); clr_bit(PORTB,DISPARO);
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