Autor Tópico: Tem algo estranho ... (matriz x portas) - RESOLVIDO  (Lida 5039 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Tem algo estranho ... (matriz x portas) - RESOLVIDO
« Online: 07 de Dezembro de 2012, 22:05 »
Estou no meio da programação de um projetinho onde preciso ver o estado de nada mais que 72 botões .. (matriz 8x9) ... estou usando o arduino Mega2560 ... eu perdi um tempo considerável para fazer a matriz ser entendida pelo Mega e isso acontecia quando eu colocava por exemplo tanto as rows qto as cols em sequencia nas portas .. tipo 22,23 até 30 e 32,33 até 39. Coloquei então as rows entre 22 e 36 (apenas nos pares) e as cols de 2 a 10 ... funcionou certinho.
Qual é o segredo de tostines? essa eu não entendi!! existe alguma regra dizendo que isso ou aquilo não pode ser feito com os ports no Arduino?

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Tem algo estranho ... (matriz x portas)
« Resposta #1 Online: 08 de Dezembro de 2012, 07:40 »
Estou no meio da programação de um projetinho onde preciso ver o estado de nada mais que 72 botões .. (matriz 8x9) ... estou usando o arduino Mega2560 ... eu perdi um tempo considerável para fazer a matriz ser entendida pelo Mega e isso acontecia quando eu colocava por exemplo tanto as rows qto as cols em sequencia nas portas .. tipo 22,23 até 30 e 32,33 até 39. Coloquei então as rows entre 22 e 36 (apenas nos pares) e as cols de 2 a 10 ... funcionou certinho.
Qual é o segredo de tostines? essa eu não entendi!! existe alguma regra dizendo que isso ou aquilo não pode ser feito com os ports no Arduino?

Cada pino da placa Arduino está associado a um bit de uma porta do ATMega. Assim, você poderia escrever seu programa de maneira a utilizar os sinais do Arduino em sequência, ou ler por porta do ATMega. Poderia postar o trecho de seu programa que varre as portas e bits do ATMega?

Offline linearactuator

  • Fuso
  • **
  • Posts: 242
  • Sexo: Masculino
Re:Tem algo estranho ... (matriz x portas)
« Resposta #2 Online: 08 de Dezembro de 2012, 08:40 »
http://arduino.cc/en/Hacking/PinMapping2560

As portas do arduino sao todas trocadas e os numeros nao corresponem em sequencia aos numeros dos pinos no programa.

O ideal seria voce escolher uma porta I/O e fazer rows e cols em sequencia nas portas corretas do AVR. Ai voce poderia ler a porta de uma vez so, lendo o registro correspondente a porta e nao pino por pino como e' feito no arduino.

 Fazendo isso vai te abrir um leque de possibilidades. Por exemplo voce poderia fazer a varredura do teclado escrevendo 00000001 na porta de saida e fazendo um deslocamento << ou >> do bit o que seria extremamente rapido.   Uma outra coisa que te permitiria e' escrever  11111111 na porta de saida e voce poderia connectar um pino de interrupt a todos os pinos de entrada com um diodo em cada pino esperando o acionamento do interrupt. (e quando o interrupt acionarai voce pode fazer a varredura no ISR.)  ao inves de usar timer para fazer isso, deixando o processador livre para outas coisas.

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re:Tem algo estranho ... (matriz x portas)
« Resposta #3 Online: 08 de Dezembro de 2012, 10:13 »
minilathe


Citar
Cada pino da placa Arduino está associado a um bit de uma porta do ATMega. Assim, você poderia escrever seu programa de maneira a utilizar os sinais do Arduino em sequência, ou ler por porta do ATMega.

Sim, eu tentei isso ... mas não funcionou e por isso minha dúvida

Citar
Poderia postar o trecho de seu programa que varre as portas e bits do ATMega?

Sim, está logo abaixo ... é um dos exemplos da biblioteca Keypad do próprio Arduino.

Código: [Selecionar]
#include <Keypad.h>

const byte ROWS = 8; //oito linhas
const byte COLS = 9; /nove colunas
//define os símbolos de cada uma das 72 teclas do keypad
char keys[ROWS][COLS] = {
  {'0','1','2','3','4','5','6','7','!!'},
  {'8','9','A','B','C','D','E','F','@'},
  {'G','H','I','J','K','L','M','N','#'},
  {'O','P','Q','R','S','T','U','V','$'},
  {'W','X','Y','Z','a','b','c','d','%'},
  {'e','f','g','h','i','j','k','l','&'},
  {'m','n','o','p','q','r','s','t','*'},
  {'u','v','w','x','y','z','=','+','-'}
};
byte rowPins[ROWS] = {22, 24, 26, 28, 30, 32, 34, 36};  //connect to the row pinouts of the keypad
byte colPins[COLS] = {2, 3, 4, 5, 6, 7, 8, 9,10};       //connect to the column pinouts of the keypad

//inicializa uma classe NewKeypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup(){
  Serial.begin(9600);
}
 
void loop(){
  char key = keypad.getKey();
 
  if (key){
    Serial.println(key);
  }
}

linearactuator

Citar
As portas do arduino sao todas trocadas e os numeros nao corresponem em sequencia aos numeros dos pinos no programa

sim ... o esquemático disponível mostra isso.

Citar
O ideal seria voce escolher uma porta I/O e fazer rows e cols em sequencia nas portas corretas do AVR.

tentei fazer isso e não funcionou.

Citar
Ai voce poderia ler a porta de uma vez so, lendo o registro correspondente a porta e nao pino por pino como e' feito no arduino...

No Atmega2560 tem muito mais ports que um pic 16f877 por exemplo (comparação injusta!! hahah), porém eu ainda não encontrei nos exemplos um comando que seja semelhante a output_b (0xFF) onde eu utilizava no compilador CCS para escrever um falor direto no port desejado ou mesmo para ler o port inteiro.

Citar
Por exemplo voce poderia fazer a varredura do teclado escrevendo 00000001 na porta de saida e fazendo um deslocamento << ou >> do bit o que seria extremamente rapido.   Uma outra coisa que te permitiria e' escrever  11111111 na porta de saida e voce poderia connectar um pino de interrupt a todos os pinos de entrada com um diodo em cada pino esperando o acionamento do interrupt. (e quando o interrupt acionarai voce pode fazer a varredura no ISR.)  ao inves de usar timer para fazer isso, deixando o processador livre para outas coisas.

era essa minha idéia .... mas estou começando a achar que programando na IDE do Arduino não vou conseguir agora ... terei que partir para o WinAVR dentro em breve ou começar do quase zero no PIC novamente .... aff.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Tem algo estranho ... (matriz x portas)
« Resposta #4 Online: 08 de Dezembro de 2012, 10:41 »
Acho que não entendi o seu objetivo.

Citar
Poderia postar o trecho de seu programa que varre as portas e bits do ATMega?

Sim, está logo abaixo ... é um dos exemplos da biblioteca Keypad do próprio Arduino.

Código: [Selecionar]
#include <Keypad.h>

const byte ROWS = 8; //oito linhas
const byte COLS = 9; /nove colunas
//define os símbolos de cada uma das 72 teclas do keypad
char keys[ROWS][COLS] = {
  {'0','1','2','3','4','5','6','7','!!'},
  {'8','9','A','B','C','D','E','F','@'},
  {'G','H','I','J','K','L','M','N','#'},
  {'O','P','Q','R','S','T','U','V','$'},
  {'W','X','Y','Z','a','b','c','d','%'},
  {'e','f','g','h','i','j','k','l','&'},
  {'m','n','o','p','q','r','s','t','*'},
  {'u','v','w','x','y','z','=','+','-'}
};
byte rowPins[ROWS] = {22, 24, 26, 28, 30, 32, 34, 36};  //connect to the row pinouts of the keypad
byte colPins[COLS] = {2, 3, 4, 5, 6, 7, 8, 9,10};       //connect to the column pinouts of the keypad

//inicializa uma classe NewKeypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup(){
  Serial.begin(9600);
}
 
void loop(){
  char key = keypad.getKey();
 
  if (key){
    Serial.println(key);
  }
}

O programa acima é simples e já não faz o que você espera?

Se quer acessar as portas (B, C, D, ...) do ATMega de um Arduino, o link a seguir mostra o "caminho das pedras".
http://www.arduino.cc/en/Reference/PortManipulation

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re:Tem algo estranho ... (matriz x portas)
« Resposta #5 Online: 08 de Dezembro de 2012, 11:15 »
minilathe

Citar
Acho que não entendi o seu objetivo.
saber se existe alguma limitação ou bug no compilador que não me permite fazer algo de uma certa maneira.

Citar
O programa acima é simples e já não faz o que você espera?
sim faz, aparentemente perfeito ... mas com base no pin map ( http://arduino.cc/en/Hacking/PinMapping2560 ) eu não entendo é porquê o circuito funcionou com:
Código: [Selecionar]
byte rowPins[ROWS] = {22, 24, 26, 28, 30, 32, 34, 36};  //connect to the row pinouts of the keypad
byte colPins[COLS] = {2, 3, 4, 5, 6, 7, 8, 9,10};               //connect to the column pinouts of the keypad
que são os ports PE, PG, PH e PB (misturados nas linhas) e PA+PC (nas colunas) e não funcionou com:
Código: [Selecionar]
byte rowPins[ROWS] = {22,23,24,25,26,27,28,29};            //connect to the row pinouts of the keypad
byte colPins[COLS] = {30, 31, 32, 33, 34, 35, 36, 37,38};   //connect to the column pinouts of the keypad
Penso que seria o mais certo apenas um port inteiro de uma vez sendo ... respectivamente PA nas linhas e PC+PD7 nas colunas no treco acima.
E eu gostaria de fazer da segunda maneira também para facilitar o desenho da placa para montagem, pois com todos os pinos misturados da forma que estão vai dar uma trabalheira chata daquelas rotear tudo!!
Entendeu mestre? as vezes sou meio enrolado para explicar as coisas ... mas uma hora a coisa acerta!! :)
Obrigado por mostrar o caminho das pedras, vou ver se consigo utilizar, pois agora ficou mais complexo!! hehehe

Obrigado pela atenção!
« Última modificação: 08 de Dezembro de 2012, 11:20 por Blackmore »

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Tem algo estranho ... (matriz x portas)
« Resposta #6 Online: 08 de Dezembro de 2012, 11:35 »
Ok, ficou claro. Já tentou estudar a biblioteca "keypad" e usá-la como ponto de partida?
http://playground.arduino.cc/Code/Keypad

Acho que uma das forças do conceito Arduino são as bibliotecas, que você pode usar ou adaptar ao seu gosto e sem ter que sair do zero.
« Última modificação: 08 de Dezembro de 2012, 11:37 por minilathe »

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re:Tem algo estranho ... (matriz x portas)
« Resposta #7 Online: 08 de Dezembro de 2012, 11:40 »
Citar
Ok, ficou claro, você quer. Já tentou estudar a biblioteca "keypad" e usá-la como ponto de partida?

sim, é dela este programa aí (veja o include)... a diferença é que ao invés de ser uma matriz 4x4 eu preciso de uma 8x9 e aí surgiu toda essa viajem !! hehehe  :)

Citar
Acho que uma das forças do conceito Arduino são as bibliotecas que você pode usar ou adaptar ao seu gosto. Sem ter que sair do zero.

eu estou tendendo a compartilhar de sua opnião, tem bastante coisa "open" ... diminui e muito o trabalho, e este é um dos motivos que estou deixando o PIC.

Abraço!

Offline linearactuator

  • Fuso
  • **
  • Posts: 242
  • Sexo: Masculino
Re:Tem algo estranho ... (matriz x portas)
« Resposta #8 Online: 08 de Dezembro de 2012, 16:43 »
eu pegaria o datasheet desse IC pois alguns pinos tem limitacao diferente de corrente, uns tem pull up outros tem pull up e pull down, uns tem uso exclusivo de I/O, outros tem mais de uma funcao...  (estou generalizando) mas tem umas frescuragens, nao e' tudo igual como a plataforma do arduino nos faz parecer.
« Última modificação: 08 de Dezembro de 2012, 16:48 por linearactuator »

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re:Tem algo estranho ... (matriz x portas)
« Resposta #9 Online: 17 de Dezembro de 2012, 11:12 »
linearactuator

Citar
eu pegaria o datasheet desse IC pois alguns pinos tem limitacao diferente de corrente, uns tem pull up outros tem pull up e pull down

eu até concordaria contigo SE eu estivesse tentando utilizar algo muito diferente do que as portas "são" ... quero usar como IN e OUT puro e simples ... (  Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.  ) ... sendo assim ela deveria atender como tal pois nem todos possuem ou querem tanto conhecimento em eletrônica para criar seus objetos ou ambientes interativos.

Neste momento o importante é que o circuito está funcionando do jeito que está, e futuramente eu vejo o que acontece ou deva melhorar ...
Obrigado pela ajuda e participação dos colegas foristas .. e até a próxima dúvida!! hahaha

Abraço!
« Última modificação: 17 de Dezembro de 2012, 11:14 por Blackmore »

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re:Tem algo estranho ... (matriz x portas)
« Resposta #10 Online: 09 de Fevereiro de 2013, 19:51 »
Resolvi deixar a preguiça de lado e fazer algo menos gambiarra ... tirei os botões e diodos da protoboard e soltei tudo em uma placa universal, coloquei conectores e liguei no arduino, realoquei os pinos deixando todos eles nas portas digitais ( 22 a 39 com excessão da porta 38) e pronto, o programa da matriz 9x8 funcionou certinho.

Entendo que o problema todo foi falta de atenção ao identificar os pinos da matriz corretamete

Código: [Selecionar]
byte rowPins[ROWS] = {22, 24, 26, 28, 30, 32, 34, 36};
byte colPins[COLS] = {39, 37, 35, 33, 31, 29, 27, 25, 23};

na linha da coluna sendo indicada "decrescentemente" foi a forma que funcionou tudo perfeitamente.
O próximo passo é identificar cada um dos botões com um valor de 3 números específicos e não com caracteres.

Obrigado a quem se dispôs e abraço!


Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Tem algo estranho ... (matriz x portas)
« Resposta #11 Online: 09 de Fevereiro de 2013, 23:02 »
== Problema Resolvido ==

Offline RAranda

  • CNCMASTER
  • ******
  • Posts: 2520
  • Sexo: Masculino
Re:Tem algo estranho ... (matriz x portas)
« Resposta #12 Online: 10 de Fevereiro de 2013, 09:30 »
Opaaa.

Resolvido, mas para mim é só o começo. rsrsrsr

Tenho umas plaquinhas desse Arduino e até agora nem imaginava para que serviam.

Vou ler com mais detalhe as informações e vou ver em que posso usa-las.

Abraços.

Rubens 

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Tem algo estranho ... (matriz x portas)
« Resposta #13 Online: 10 de Fevereiro de 2013, 10:05 »
Olá. Rubens,

Para alguns, esta é uma etapa finalizada, mas pode ser um ponto de partida.

Abraço,

 

/** * */