Pages: 1 [2]   Go Down
Author Topic: Duvidas sobre COL-ROW scanning  (Read 2503 times)
0 Members and 1 Guest are viewing this topic.
Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bem, o projeto final ficou assim:

http://picasaweb.google.com/scorninpc/ScornInLed#5500797634401570546

e a placa assim:

http://picasaweb.google.com/scorninpc/ScornInLed#5500797632244553378

Vou tentar confecciona-la hoje, vai ser minha primeira confecção 2 faves, não sei se vai dar muito certo.

Então, é do mais para o menos mesmo, pelos meus testes, e confirmando, tanto faz o ultimo bit controlar a primeira coluna, por que vai tudo num binário só, então tanto faz né.

Sobre a alimentação externa, eu já havia desconfiado, mas ai é duro, tudo que vou fazer preciso testar com 2 fontes. Quais os riscos de eu usar os 5v do arduino? Simplesmente não funcionar e esquentar o regulador?

Uso uma fonte de 12v 1000mA, se eu colocar um regulador na placa, e usar a mesma fonte, tem risco é? 100mA para o arduino, sobra 900mA para a placa, sei la smiley-razz

Ja vi que vou ter muito trabalho no código, e eu no começo de tudo achei que o código seria o mais simples, mas to vendo que o código pega forte também =)
Logged

Curitiba PR, Brazil
Offline Offline
Full Member
***
Karma: 0
Posts: 234
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Como já disse uma vez, não é nem um pouco aconselhável trabalhar em cima da especificação, se o regulador do Arduino fornece 100mA, tente trabalhar no máximo com uns 80mA, no caso deste projeto, a corrente de consumo será por volta 600 a 900mA então sem chances usar a alimentação do Arduino.

Com esta fonte que você tem , você pode montar um regulador com LM317 ou algum similar (LM350, LM117, LM 338, etc) que fornece uma corrente legal.

Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Certo, vou providenciar o LM, mas por enquanto vou usando outra fonte que tenho aqui mesmo então.

Poxa, por enquanto, obrigado mesmo ao pessoal que ajudou, e muito hem =D

Vou queimar a placa, dai volto as duvidas ^^
« Last Edit: August 02, 2010, 09:21:48 am by scorninpc » Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ai pessoal, adicionei novas fotos da confecção da placa. Teve algumas falhinhas, por que na queima do primeiro lado, acho que o outro nao ficou coberto 100%, mas coisa simples, da pra resolver muito facil, e teve outras que ficou meio grosinha pq passei a caneta pra retocar, mas só por estética =)

http://picasaweb.google.com/scorninpc/ScornInLed

Do mais, ficou uns 97% bom, o que tinha mais medo era de nao acertar os lados, mas consegui.

Não vou poder furar hoje, pq fui furar para dar a medida para o outro lado, minha broca ja "estufou" a placa, entao vou pedir brocas novas para nao haver erro.

Volto a dar noticias, e assim que monta-la, eu posto os arquivos do eagle e tudo mais =)
« Last Edit: August 02, 2010, 07:34:50 pm by scorninpc » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 32
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

êee brunão, ta ficando bom a bagaça.....boa sorte!!!
Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Postei novas fotos, da placa montada, mas nao funcionou, ficou a ultima linha acesa direto, com ou sem os pinos do arduino =/

vou aproveitar a placa, e tentar montar os CIs na protoboard, to achando que é as trilhas da placa =/

Mas vamo que vamo =)

http://picasaweb.google.com/scorninpc/ScornInLed
Logged

Rio de janeiro
Offline Offline
Full Member
***
Karma: 0
Posts: 104
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Parabéns Bruno! Suas placas são muito boas. Quanto ao erro, relaxa que fazer pci é assim mesmo...
Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Poxa Italo, obrigado =)

Bom, liguei na proto, e aparentemente funcionou, liguei 7x9, 2 shifts, mas nao estou conseguindo controla-los nao!

Veja só

Code:
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

void setup()
{
  Serial.begin(9600);
  
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
  Serial.println("Iniciado!");
}

void loop()
{  
 // digitalWrite(latchPin, LOW);
 // sendBytes(0);
 // digitalWrite(latchPin, HIGH);
 
 
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, B00000000+B01111111);
  digitalWrite(latchPin, HIGH);
  
  Serial.println("Loop!");
  delay(800);
}

Deveria ligar tudo, ou seria B1111110+B00000000? (apesar de ja ter tentado tambem)

Estou meio confuso ainda, tem algo errado ai?

EDITED:  uma duvida morteira: se eu mandar isso:

Code:
 digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0xFF);
  shiftOut(dataPin, clockPin, MSBFIRST, 0x00);
  digitalWrite(latchPin, HIGH);

Qual o valor do primeiro SR e o valor do segundo? Ou seja, ja sei que o mais significativo vem primeiro, mas qual a ordem entre os shift registers? =)
« Last Edit: August 04, 2010, 04:07:22 pm by scorninpc » Logged

Rio de janeiro
Offline Offline
Full Member
***
Karma: 0
Posts: 104
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Num SR tudo que entra primeiro, sai primeiro.
Imagina o SR como uma fila de 8 bits. Cada vez que vc manda um bit, ele é empurrado pra próxima posição. Quando não cabe mais, ela expulsa aquele bit que entrou lá no começo e, se tiver outro SR conectado, esse bit expulso entra nesse novo SR.
Code:
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
 2   1

....

[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]   ->   [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
 9   8   7   6  5   4   3   2           1
Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cara, esse negocio vai me deixar doido. Consegui, em partes, liguei 9 colunas e 7 linhas em 2 595, e fiquei quase o dia todo tentando fazer um código funcionar, enfim, consegui achar um LSB primeiro, e funcionou, muito estranho, achei que o SR quem "ditava" se era MSB ou LSB, enfim, funcionou, to até mandando o códgo, vou fazer um videozinho e ja posto tambem.

agora é ligar o resto das colunas, e se firmar, refazer a PCI =/
Depois disso tudo, preciso bolar um jeito de deixar isso tudo mais claro, pq imaginar qual coluna e qual linha acender e "desenhar" uma letra, nao vi ser facil =)


Code:
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

void setup()
{
  Serial.begin(9600);
  
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
  // digitalWrite(latchPin, 0);
  // shiftIt(B11111111); // C2, C3, C4, C5, C6, C7, C8, C9
  // shiftIt(B00000001); // L1, L2, L3, L4, L5, L6, L7, C1
  // digitalWrite(latchPin, 1);
    
  Serial.println("Iniciado!");
}

void loop()
{
  digitalWrite(latchPin, 0);
  shiftIt(B00000000);
  shiftIt(B00000001);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B10000000);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B01000000);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B00100000);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B00010000);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B00001000);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B00000100);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B00000010);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
  
  digitalWrite(latchPin, 0);
  shiftIt(B00000001);
  shiftIt(B00000000);
  digitalWrite(latchPin, 1);
  Serial.println("Loop!");
  delay(500);
}


// Estudar/Entender =)
void shiftIt(byte dataOut) {
  // Shift out 8 bits LSB first,
  // on rising edge of clock
  boolean pinState;
  //clear shift register read for sending data
  digitalWrite(dataPin, LOW);
  // for each bit in dataOut send out a bit
  for (int i=0; i<8; i++) {
    //set clockPin to LOW prior to sending bit
    digitalWrite(clockPin, LOW);
    // if the value of DataOut and (logical AND) a bitmask
    // are true, set pinState to 1 (HIGH)
    if ( dataOut & (1<<i) ) {
      pinState = HIGH;
    }
    else {
        pinState = LOW;
    }
    //sets dataPin to HIGH or LOW depending on pinState
    digitalWrite(dataPin, pinState);
    //send bit out on rising edge of clock
    digitalWrite(clockPin, HIGH);
    digitalWrite(dataPin, LOW);
  }
  //stop shifting
  digitalWrite(clockPin, LOW);
}


EDITED
: Estou usando os 5v do arduino mesmo, sem problemas até agora, nem esta esquentando direito, estou usando resistores de 150R =)

EDITED:
« Last Edit: August 04, 2010, 08:50:11 pm by scorninpc » Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ai pessoal, só pra constar e eu poder ir dormir hoje depois de 1 semana uaheuhae

Consegui ligar os 25x7 leds numa boa, a zica ficou na placa mesmo, confirmado, vou desenhar outra, ja que ja até achei uns erros de layout que eu posso melhorar =)

Showw!!

Só falta codar agora smiley-wink
Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pessoal, show de bola, a coisa ta ficando melhor a cada momento =)

Consegui escrever, texto fixo, proximo passo é achar um jeito de conseguir montar texto dinamico, por que o interessante é ser dinamico, como mostrar hora, temperatura, sei la, vamo que vamo

ps: segue novas fotos, e até o print de um programinha que eu fiz com php-gtk smiley-wink

Fotos: http://picasaweb.google.com/scorninpc/ScornInLed
Código: http://pastebin.com/GMwLS7Zz
« Last Edit: August 05, 2010, 03:43:59 pm by scorninpc » Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ai pessoal, grandes progressos =)

Bem, segue o ultimo código, ja consegui converter a matrix para binarios e mandar para o display, assim, posso ter um vetor bidimensional, e fazer ele aparecer no display. Preciso agora de ideias para poder criar esse vetor dinamicamente, por exemplo, quero fazer um relogio, dai mostro 10:35, ja ja, 10:36, entao preciso montar as letras, esse é o proximo passo, e espero que alguem ja tenha pensado nisso =D

Bem pessoal, vou montar uma sessão sobre arduino no meu blog, e ja vou postar os eagles e os fontes, para o pessoal poder confeccionar tambem smiley-wink

Posto o link assim que pronto =)

Code:
// Modo debug
boolean DEBUG_MODE=false;

// Pinos do shift register
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

// Tamanho do display
int screenWidth = 25;
int screenHeight = 7;

// Tela
char screenPixels[7][26] = {
  {"0111000000000000000000000"},
  {"0100100000000000000000000"},
  {"0100100000000000000000000"},
  {"0111000000000000000000000"},
  {"0100100110100100110011100"},
  {"0100101000100101001010100"},
  {"0111001000011001001011100"}
};

// Configura o arduino
void setup()
{
  Serial.begin(9600);
  
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
  printDebug("Iniciado", true);
}

// Main inicial
void loop()
{
  printScreen();
}

// Função para atualizar o display
void printScreen()
{
  // Percorre as linhas/atualizações da tela
  for(int i=0; i<screenHeight; i++)
  {
    digitalWrite(latchPin, 0);
    digitalWrite(dataPin, LOW);
    
    // Percorre as colunas enviando a bitagem
    for(int j=(screenWidth-1); j>=0; j--)
    {
      if(screenPixels[i][j] == '1')
      {
        sendBit(HIGH);
        printDebug("1", false);
      }
      else
      {
        sendBit(LOW);
        printDebug("0", false);
      }
    }
    
    // Cria os bits das linhas
    for(int j=screenHeight-1; j>=0; j--)
    {
      
      if(j == i)
      {
        sendBit(LOW);
        printDebug("0", false);
      }
      else
      {
        sendBit(HIGH);
        printDebug("1", false);
      }
    }
    
    // Termina a atualização da tela
    digitalWrite(clockPin, LOW);
    digitalWrite(latchPin, 1);
    printDebug("", true);
  }
}

// Função para enviar o bit ao shift register
void sendBit(boolean pinState)
{
  digitalWrite(clockPin, LOW);
  digitalWrite(dataPin, pinState);
  digitalWrite(clockPin, HIGH);
  digitalWrite(dataPin, LOW);
}

// Função para enviar mensagens para debug
void printDebug(char *msg, boolean newLine)
{
  if( DEBUG_MODE )  
  {
    if(newLine)
    {
      Serial.println(msg);
    }
    else
    {
      Serial.print(msg);
    }
  }
}
Logged

Andradina/SP
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
2º steep
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pois é pessoa, não consegui =/

Se alguém tiver ideia de como juntar letras, seria muito bem vindo smiley-razz

Ja to até de vagar ...
Logged

Pages: 1 [2]   Go Up
Jump to: