collapse

* Posts Recentes

Arame de Estendal por almamater
[Ontem às 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: [Ajuda] Picaxe 40x2 + ds18b20 +ds1307 + lcd03(i2c)  (Lida 63224 vezes)

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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #120 em: 27 de Setembro de 2010, 22:15 »
Sim, teres um pic master a tratar da fechadura e um slave a falar com o pc usando uma conexão lan.
Ou então lê isto tambem:
http://188.65.57.204/showthread.php?s=d2d2edb943bcbc20edc0ea58782900b7&t=14529&highlight=sd+card
Avr fanboy

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #121 em: 27 de Setembro de 2010, 22:18 »
boas, em relação ao keypad, cheguei a usar um teclado alfanumérico (0+1 a 9, + e #) caso queiras uma forma de usar o teclado com o picaxe é só dizer, tens é de ter 7 inputs para que seja feita a leitura do teclado, ou numa forma mais radical, podes usar o teclado ps2 de um pc para fazer a escrita (existe programas base disso para picaxe, mas num experimentei), ou uma outra forma com o tal teclado é só necessário uma adc e vais vendo os valores para cada tecla,
eu já experimentei um teclado ps2, mas para a função que pretendo penso que não seja a melhor, pois andar com um teclado atras de mim cada vez que pretendo uma alteração penso que não seja a melhor maneira...
quanto ao keypad eu só utilizo 3 pin ADC onde na qual destingo todos os botões sem qualquer problema, pensei por num so pin mas nao quis complicar tanto por agora.... quanto ao problema do keypad é que estou a tentar utilizado da mesma forma que um teclado de tel (botao 2 = A, B e C conforme o nº de vezes clicado, acabo de o fazer e so mesmo as letras de momento esta a ocupar cerca de 500 bytes) ;D
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #122 em: 27 de Setembro de 2010, 22:23 »
boas, em relação ao keypad, cheguei a usar um teclado alfanumérico (0+1 a 9, + e #) caso queiras uma forma de usar o teclado com o picaxe é só dizer, tens é de ter 7 inputs para que seja feita a leitura do teclado, ou numa forma mais radical, podes usar o teclado ps2 de um pc para fazer a escrita (existe programas base disso para picaxe, mas num experimentei), ou uma outra forma com o tal teclado é só necessário uma adc e vais vendo os valores para cada tecla,
eu já experimentei um teclado ps2, mas para a função que pretendo penso que não seja a melhor, pois andar com um teclado atras de mim cada vez que pretendo uma alteração penso que não seja a melhor maneira...
quanto ao keypad eu só utilizo 3 pin ADC onde na qual destingo todos os botões sem qualquer problema, pensei por num so pin mas nao quis complicar tanto por agora.... quanto ao problema do keypad é que estou a tentar utilizado da mesma forma que um teclado de tel (botao 2 = A, B e C conforme o nº de vezes clicado, acabo de o fazer e so mesmo as letras de momento esta a ocupar cerca de 500 bytes) ;D
pois espaço ocupa com fartura xD

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #123 em: 27 de Setembro de 2010, 22:26 »
so para memorizar numa variável qual o botão pressionado 100 bytes ainda deve sobrar, mas para o que estou a fazer ja me esta a comer o cérebro  :P
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #124 em: 27 de Setembro de 2010, 22:27 »
so para memorizar numa variável qual o botão pressionado 100 bytes ainda deve sobrar, mas para o que estou a fazer ja me esta a comer o cérebro  :P

lol eu sei o que isso é, também estive assim quando criei o alarme com o tal teclado

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #125 em: 27 de Setembro de 2010, 22:27 »
sim, os pins spi são os mesmos que i2c, tendo o 3 pin spi de momento disponível... uma das soluções que metia era um pic so a fazer essa conversão para evitar qualquer falha... quanto a isso meto em causa pois isso da forma que penso implementar requeria uma ligação de vários pic a um servidor ou então de portátil na mão de porta a porta a copiar dados... assim com o cartão conectava-o, passava o identificador "mestre" (administrador) para autorizar uma copia para esse mesmo cartão...

Vou fazer uma sugestão:
pelo que viste no outro tópico, programar de forma a poder escrever/ler de um cartão de memória SD com sistemas de ficheiros, é uma coisa complicada tanto em termos de programação como de RAM.
Se o que queres fazer é comunicar com o PC, não tens a hipótese de criar um pequeno dispositivo (picaxe/arduino/AVR, ...) que comunicasse com essas fechaduras, fazendo uma pequena ligação (provavelmente consegues implementar comunicação I2C ou serial), e guardasse os dados numa EEPROM ou SD sem sistema de ficheiros. Depois, esse pequeno dispositivo comunicaria com o PC por serial (se conseguires, instalas um conversor USB-Serial no próprio dispositivo), de forma a transmitir os dados. Assim resolves o problema de guardar os dados e de ter de levar o portátil a todas as portas (e assim tens mais segurança a guardar os dados, visto necessitares de uma aplicação própria no PC, e podes inventar qualquer sistema de autenticação que queiras, e qualquer formato de dados :P).


de uma certa forma vai de acordo com que Senso disse correcto?!
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #126 em: 27 de Setembro de 2010, 22:30 »
yah... também já fiz... no fim ate da gosto quando se consegue ^^
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #127 em: 27 de Setembro de 2010, 23:54 »
sim, os pins spi são os mesmos que i2c, tendo o 3 pin spi de momento disponível... uma das soluções que metia era um pic so a fazer essa conversão para evitar qualquer falha... quanto a isso meto em causa pois isso da forma que penso implementar requeria uma ligação de vários pic a um servidor ou então de portátil na mão de porta a porta a copiar dados... assim com o cartão conectava-o, passava o identificador "mestre" (administrador) para autorizar uma copia para esse mesmo cartão...

Vou fazer uma sugestão:
pelo que viste no outro tópico, programar de forma a poder escrever/ler de um cartão de memória SD com sistemas de ficheiros, é uma coisa complicada tanto em termos de programação como de RAM.
Se o que queres fazer é comunicar com o PC, não tens a hipótese de criar um pequeno dispositivo (picaxe/arduino/AVR, ...) que comunicasse com essas fechaduras, fazendo uma pequena ligação (provavelmente consegues implementar comunicação I2C ou serial), e guardasse os dados numa EEPROM ou SD sem sistema de ficheiros. Depois, esse pequeno dispositivo comunicaria com o PC por serial (se conseguires, instalas um conversor USB-Serial no próprio dispositivo), de forma a transmitir os dados. Assim resolves o problema de guardar os dados e de ter de levar o portátil a todas as portas (e assim tens mais segurança a guardar os dados, visto necessitares de uma aplicação própria no PC, e podes inventar qualquer sistema de autenticação que queiras, e qualquer formato de dados :P).


de uma certa forma vai de acordo com que Senso disse correcto?!

Em parte vai ...
Pelo que percebi, podes usar mais do que uma porta.
A sugestão do senso é ligar um pic à rede LAN. Para isso tens duas opções: ou uma confusão de cabos todos a ligar para o mesmo PIC (se tiveres pinos suficientes), e esse a ligar à rede LAN, ou um PIC em cada porta a ligar à rede LAN (e novamente o problema da confusão de cabos, mas sem o dos pinos). O ideal é uma combinação destes dois .. não deixa de haver o problema de confusão de cabos xD
O que sugiro é criares um aparelho de armazenamento próprio para este mecanismo. Vai dar ao que querias: ir de porta a porta, ligar o aparelho -- o que sugeriste foi um cartão SD --, clicar num botão e guardar -- até podes fazer com que o aparelho peça para ligar assim que ligas, sem necessidade de botão, e depois ligar ao computador para descarregar os dados -- em vez de copiares um ficheiro, arranjas um programa que comunica com o aparelho e descarrega; esse programa até pode guardar num TXT ou mostrar um gráfico se quiseres. No entanto, tens um pouco mais de despesa, mas é menos complexo.
Outra sugestão: Pelo que percebi queres usar um keypad em cada porta para controlar o aparelho ... uma alternativa seria usar um comando wireless, do tipo dos da TV. Tens dois tutoriais excelentes neste fórum sobre como fazer isso, se tiveres tempo para experimentar:
http://lusorobotica.com/index.php?topic=527.0
http://lusorobotica.com/index.php/topic,1726.0.html

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #128 em: 07 de Outubro de 2010, 21:43 »
boas,

depois de um tempo sem escrever aqui nada, já consegui reduzir bastante parte do programa com a ajuda do fre_deri_co , mas o meu problema agora é outro, tenho usado as memorias "b" em algumas situações, mas não me têm corrido bem, sendo que por exemplo tenho usado uma memoria num menu para guiar para a secção certa, mas mesmo quando volto atraz para o menu ele vai para a secção errada, como esta no vídeo que eu inseri, onde eu entro a temperatura e ao sair vai para o info, mesmo sem utilizar a memoria ele vai para a secção errada

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #129 em: 07 de Outubro de 2010, 21:50 »
não utilizas as variáveis para "memorizar" o menu onde te encontras?! depois num possível retorno o valor das mesmas convém retornar não?! 
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #130 em: 07 de Outubro de 2010, 22:02 »
não utilizas as variáveis para "memorizar" o menu onde te encontras?! depois num possível retorno o valor das mesmas convém retornar não?!

não percebi  o que disseste, mas tipo eu defino a b7=5 e ao voltar a trás ele vai para separador com b7=1

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #131 em: 07 de Outubro de 2010, 22:04 »
mas ele volta por defeito ou porque defines?!
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #132 em: 07 de Outubro de 2010, 22:07 »
tipo criei um separador a dizer voltar e tem tipo if b7=5 then vai para o local isto com vários b7=1...2...3...4..5.. e por ai

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #133 em: 07 de Outubro de 2010, 22:09 »
Podes mostrar o código actual?
Avr fanboy

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #134 em: 07 de Outubro de 2010, 22:11 »
Código: [Seleccione]
init:
    pause 500'inicialização do lcd
    i2cslave $c6, i2cslow, i2cbyte'inicialização do lcd
    writei2c 0,(12,4)
'b's a zero (0)
    b6=0
    b7=0
    b8=0
    b9=0
    b13=0
    b14=0
    b15=0
    b16=0
    b17=0
'--------------------------------------definir caracteres-------------------------
writei2c 0,(27,128,140,146,146,140,131,132,132,131)'carácter ºc
writei2c 0,(27,129,128,132,134,159,159,134,132,128)'carácter seta direita
'--------------------------------------menssagem inicial do lcd-------------------
prin:
    writei2c 0,(12,4)
    writei2c 0,(0,2,3)
    writei2c 0,(".:Ultimate Box:.")
    writei2c 0,(0,2,23)
    writei2c 0,("andre_f_carvalho")
    writei2c 0,(0,2,68)
    writei2c 0,("2010    v1.0")
   
    do
    inc b17
    pause 50
    loop while b17 < 100 and pin4 = 0 ; ou seja faz este ciclo enquanto b8 é menor que 40 e o pin4 não é acionado
'------------------------------------menu pincipal--------------------------------
menu5:
    if pin4=1 or pin2=1 or pin3=1 then menu5   
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,("-Temperatura")
    writei2c 0,(0,2,41)
    writei2c 0,(" Calendario")
    writei2c 0,(0,2,61)
    writei2c 0,(" Estacionamento")
    b6=5
    b7=5
menu5_1:
    if pin2=1 then menu1 
    if pin3=1 then menu6
    if pin4=1 then ok
    goto menu5_1
menu6:
    if pin2=1 or pin3=1 then menu6 
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,(" Temperatura")
    writei2c 0,(0,2,41)
    writei2c 0,("-Calendario")
    writei2c 0,(0,2,61)
    writei2c 0,(" Estacionamento")
    b6=6
    b7=6
menu6_1:
    if pin2=1 then menu5 
    if pin3=1 then menu7
    if pin4=1 then ok
    goto menu6_1
menu7:
    if pin2=1 or pin3=1 then menu7
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,(" Temperatura")
    writei2c 0,(0,2,41)
    writei2c 0,(" Calendario")
    writei2c 0,(0,2,61)
    writei2c 0,("-Estacionamento")
    b6=7
    b7=7
menu7_1:
    if pin2=1 then menu6
    if pin3=1 then menu8
    if pin4=1 then ok
    goto menu7_1
menu8:
    if pin2=1 then menu8 
    if pin3=1 then menu8
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,(" Calendario")
    writei2c 0,(0,2,41)
    writei2c 0,(" Estacionamento")
    writei2c 0,(0,2,61)
    writei2c 0,("-Configuracao")
    b6=8
    b7=8
menu8_1:
    if pin2=1 then menu7 
    if pin3=1 then menu1
    if pin4=1 then ok
    goto menu8_1
menu1:
    if pin2=1 or pin3=1 then menu1
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,(" Estacionamento")
    writei2c 0,(0,2,41)
    writei2c 0,(" Configuracao")
    writei2c 0,(0,2,61)
    writei2c 0,("-Info")
    b6=1
    b7=1
menu1_1:
    if pin2=1 then menu2 
    if pin3=1 then menu5
    if pin4=1 then ok
    goto menu1_1
menu2:
    if pin2=1 or pin3=1 then menu2
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,(" Estacionamento")
    writei2c 0,(0,2,41)
    writei2c 0,("-Configuracao")
    writei2c 0,(0,2,61)
    writei2c 0,(" Info")
    b6=2
    b7=2
menu2_1:
    if pin2=1 then menu3 
    if pin3=1 then menu1
    if pin4=1 then ok
    goto menu2_1
menu3:
    if pin2=1 or pin3=1 then menu3
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,("-Estacionamento")
    writei2c 0,(0,2,41)
    writei2c 0,(" Configuracao")
    writei2c 0,(0,2,61)
    writei2c 0,(" Info")
    b6=3
    b7=3
menu3_1:
    if pin2=1 then menu4 
    if pin3=1 then menu2
    if pin4=1 then ok
    goto menu3_1
menu4:
    if pin2=1 or pin3=1 then menu4
    writei2c 0,(12,4)
    writei2c 0,(0,2,7)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,("-Calendario")
    writei2c 0,(0,2,41)
    writei2c 0,(" Estacionamento")
    writei2c 0,(0,2,61)
    writei2c 0,(" Configuracao")
    b6=4
    b7=4
menu4_1:
    if pin2=1 then menu5 
    if pin3=1 then menu3
    if pin4=1 then ok
    goto menu4_1
'--------------------------------------selecionador do menu prncipal------------   
ok:
    if pin4=1 then ok'bloqueio para não avançar
    writei2c 0,(12,4)'limpar lcd
    if b6=1 then info'info
    if b6=2 then conf'configuração
    if b6=3 then estac'Estacionamento
    if b6=4 then calend'calendário
    if b6=5 then ler_temp'temperatura
    if b6=6 then calend'Calendário
    if b6=7 then estac'Estacionamento
    if b6=8 then conf'configuração
'--------------------------------------voltar ao menu principal pela ordem que saio-------

voltar:
    if pin5=1 then voltar'bloqueio para não avançar
    writei2c 0,(12,4)'limpar lcd
    if b7=1 then menu1
    if b7=2 then menu2
    if b7=3 then menu3
    if b7=4 then menu4
    if b7=5 then menu5
    if b7=6 then menu6
    if b7=7 then menu7
    if b7=8 then menu8
'--------------------------------------Menu temperatura-----------------------------------   
ler_temp:'temperatura

'escrever no lcd   
    writei2c 0,(0,2,3)
    writei2c 0,(".:Temperatura:.")
    writei2c (0,2,21)
    writei2c (" Interior",129)
    writei2c (0,2,41)
    writei2c (" Exterior",129)
       
ler_tempx:
    b7=5
    if pin5=1 then voltar'volta ao menu anterior
'ler temperatura
    readtemp12 0,w1
    readtemp12 1,w3

temp1:
    if pin5=1 then voltar'volta ao menu anterior   
    if w1>= 64656 then'caso o valor seja negativo
   
        let w1 =  65535-w1+1*10/16'calculos para valores negativos
        debug w1   
        writei2c (0,2,32)
        bintoascii w1,b0,b1,b2
        hi2cout("-",b0,b1,".",b2,128)
    else
        let w1 = w1*10/16'calculo para valores positivos
        debug w1   
        writei2c (0,2,32)
        bintoascii w1,b0,b1,b2
        hi2cout("",b0,b1,".",b2,128)
   
    endif   
    pause 10
   
temp2:
    if pin5=1 then voltar'volta ao menu anterior
    if w3>= 64656 then'caso o valor seja negativo
   
        let w1 =  65535-w1+1*10/16'calculos para valores negativos
        debug w1   
        writei2c (0,2,52)
        bintoascii w1,b0,b1,b2
        hi2cout("-",b0,b1,".",b2,128)
    else
        let w3 = w3*10/16'calculo para valores positivos
        debug w3
        writei2c (0,2,52)
        bintoascii w3,b3,b4,b5
        hi2cout("",b3,b4,".",b5,128)
   
    end if
        if pin5=1 then voltar'volta ao menu anterior
    goto ler_tempx