collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #75 em: 23 de Setembro de 2010, 22:28 »
Os picaxe correm um interpretador de basic dentro do pic, portanto se o interpretador for mais eficiente ficas com mais espaço para programas, dai teres tão pouca ram, porque o interpretador dos teus programas deve comer uma boa parte.
Tal como o arduino é bom para iniciar, mas quando começas a fazer algo mais a sério começas a ter n problemas devido ás limitações que são criadas para simplificar as coisas.
PROGMEM é guardar texto ou variaveis na flash, ou seja na memória ou se aloja o programa em si e não na ram, porque tens por exemplo só 2Kb de ram, o que com texto se acaba bastante depressa ou então tens 32Kb de flash e ai dá para meter muito, mas muito mais texto sem atrofiar com o programa.

sabes se existe a tal memoria  flash no picaxe?

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #76 em: 23 de Setembro de 2010, 22:29 »
se estao a referir-se a eeprom que tem interna penso que isso seja baseado na memoria flash, é isso?!
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #77 em: 23 de Setembro de 2010, 22:31 »
PROGMEM é o nome que a atmel/avr-gcc dá, e tu estás a usar pic, logo deve ter outro nome.
Eia tanta ram, isso era dia de festa, isso não dá para ver que estás a usar quando programas o picaxe?
Não, não é a eeprom.
Avr fanboy

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #78 em: 23 de Setembro de 2010, 22:31 »
se estao a referir-se a eeprom que tem interna penso que isso seja baseado na memoria flash, é isso?!

mas a eeprom interna n é usada só para guardar variáveis, words e ect?

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #79 em: 23 de Setembro de 2010, 22:33 »
podes usar, sem afectar qualquer variavel, simplesmente se cortares a alimentação no pic quando voltares a dar ele não perde esses valores
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 #80 em: 23 de Setembro de 2010, 22:34 »
PROGMEM é o nome que a atmel/avr-gcc dá, e tu estás a usar pic, logo deve ter outro nome.
Eia tanta ram, isso era dia de festa, isso não dá para ver que estás a usar quando programas o picaxe?
Não, não é a eeprom.

quando estou a programar o picaxe com o 40x1 aparece lá no syntax um maximo de 4096 bytes, dai eu perguntar se eram 8192 bytes, pq o fre_deri_co disse que tinha o dobro no 40x2

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #81 em: 23 de Setembro de 2010, 22:35 »
podes usar, sem afectar qualquer variavel, simplesmente se cortares a alimentação no pic quando voltares a dar ele não perde esses valores

como é que a utilizas?

eu desconhecia essa eeprom

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #82 em: 23 de Setembro de 2010, 22:39 »
atraves dos comandos "read" e "write"

exemplo

Citar
read 1, b0

no lugar do um podes variar de 0 a 255
em vez de b0 podes dar directamente o valor
se enviares uma word por exemplo
write 0, w0

no lugar 0 da eeprom fica memorizado o b0, no 1 fica b1, fazendo assim a word
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 #83 em: 23 de Setembro de 2010, 22:41 »
atraves dos comandos "read" e "write"

exemplo

Citar
read 1, b0

no lugar do um podes variar de 0 a 255
em vez de b0 podes dar directamente o valor
se enviares uma word por exemplo
write 0, w0



no lugar 0 da eeprom fica memorizado o b0, no 1 fica b1, fazendo assim a word

mas esses b0 e b1 interferem com os b's do programa

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #84 em: 23 de Setembro de 2010, 22:44 »
não... nada
so usas simplesmente a word para enviar o valor que la se encontra... de resto ele faz tudo sozinho..... quando quiseres por exemplo retirar de la o valor para uma word apos reiniciar o sistema por exemplo

fazes:
Citar
write 0, w1
apos reiniciares para obteres o valor entao:
Citar
read 0, b2
read 1 , b3
assim teras novamente o valor na w1
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 #85 em: 23 de Setembro de 2010, 22:48 »
não... nada
so usas simplesmente a word para enviar o valor que la se encontra... de resto ele faz tudo sozinho..... quando quiseres por exemplo retirar de la o valor para uma word apos reiniciar o sistema por exemplo

fazes:
Citar
write 0, w1
apos reiniciares para obteres o valor entao:
Citar
read 0, b2
read 1 , b3
assim teras novamente o valor na w1

isso é capaz de dar jeito nalgumas partes do meu programa, agora não ajuda a ter espaço na memoria do picaxe por causa de tanto texto, n conseguir resolver esta parte terei de andar a remover partes do programa para caber o resto

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #86 em: 23 de Setembro de 2010, 22:51 »
os comandos "read" e "write" ainda ocupam um bocado, mas por exemplo eu uso para memorizar temperaturas mínimas e máximas  :D
quanto ao programa se quiseres algumas dicas sobre o programa que tens para se compactar um pouco é so dizer
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #87 em: 23 de Setembro de 2010, 23:06 »
Se tivesses ponteiros podias meter o texto na eeprom, ou então fazer algo do género:
for(i=0, i<tamanho_linha_texto,i++){
funcao_i2c_que_escreve_no_lc(read i);
}
algo assim, depois tinhas era de criar uma função igual para meter primeiro o texto na eeprom e já sou capaz de te estar a atrofiar a cabeça toda.
Avr fanboy

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #88 em: 23 de Setembro de 2010, 23:07 »
já é a 3º que escrevo isto  >:( .

bem, a parte do srcoll do menu principal é que ocupa espaço a farta, tenho em anexo o  programa, se houver outra forma de fazer o tal scroll se ocupar muito espaço (n sei outra forma sem ser esta), desta parte como aproveitarias memoria?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: [Ajuda]lcd serial 4x20 (ligação i2c)+ picaxe 40x1
« Responder #89 em: 23 de Setembro de 2010, 23:16 »
Quando alteras uma linha no lcd não tens de as reescrever todas, para além de ocupar espaço não é necessário, porque é que defines a seta e depois usas o - para indicar que linha está selecionada?

Código: [Seleccione]
init:
    pause 500'inicialização do lcd
    i2cslave $c6, i2cslow, i2cbyte'inicialização do lcd
    writei2c 0,(12,4)
'--------------------------------------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")
    writei2c 0,(0,2,76)
    writei2c 0,("v1.0")
   
    for b8 = 1 to 40'visivel durante 5 segundos ou ok para fazer skip
    if pin4=1 then menu5
    pause 125
    if pin4=1 then menu5
    next b8
'------------------------------------menu pincipal--------------------------------
menu5:
    if pin4=1 then menu5
    if pin2=1 then menu5 
    if pin3=1 then menu5
    writei2c 0,(12,4)
    writei2c 0,(0,2,21)
    writei2c 0,("-Temperatura")
    b6=5
    b7=5
menu5_1:
    if pin2=1 then menu1 
    if pin3=1 then menu6

    goto menu5_1
menu6:
    if pin2=1 then menu6 
    if pin3=1 then menu6
    writei2c 0,(12,4)
    writei2c 0,(0,2,41)
    writei2c 0,("-Calendario")
    b6=6
    b7=6
menu6_1:
    if pin2=1 then menu5 
    if pin3=1 then menu7

    goto menu6_1
menu7:
    if pin2=1 then menu7
    if pin3=1 then menu7
    writei2c 0,(12,4)
    writei2c 0,(0,2,61)
    writei2c 0,("-Estacionamento")
    b6=7
    b7=7
menu7_1:
    if pin2=1 then menu6
    if pin3=1 then menu8

    goto menu7_1
menu8:
    if pin2=1 then menu8 
    if pin3=1 then menu8
    writei2c 0,(12,4)
    writei2c 0,(0,2,61)
    writei2c 0,("-Configuracao")
    b6=8
    b7=8
menu8_1:
    if pin2=1 then menu7 
    if pin3=1 then menu1

    goto menu8_1
menu1:
    if pin2=1 then menu1 
    if pin3=1 then menu1
    writei2c 0,(12,4)
    writei2c 0,(0,2,61)
    writei2c 0,("-Info")
    b6=1
    b7=1
menu1_1:
    if pin2=1 then menu2 
    if pin3=1 then menu5

    goto menu1_1
menu2:
    if pin2=1 then menu2 
    if 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

    goto menu2_1
menu3:
    if pin2=1 then menu3
    if pin3=1 then menu3
    writei2c 0,(12,4)
    writei2c 0,(0,2,21)
    writei2c 0,("-Estacionamento")

    b6=3
    b7=3
menu3_1:
    if pin2=1 then menu4 
    if pin3=1 then menu2
    goto menu3_1
menu4:
    if pin2=1 then menu4
    if pin3=1 then menu4
    writei2c 0,(12,4)
    writei2c 0,(0,2,21)
    writei2c 0,("-Calendario")

    b6=4
    b7=4
menu4_1:
    if pin2=1 then menu5 
    if pin3=1 then menu3
    goto menu4_1

Só te fica é a faltar ai uma linha a escrever o menu todo.
Ou então se calhar o que ainda ficava melhor, imagina que isto é o teu lcd:
------------------------------------------
|                      Menu                    |
| Temperatura                             |
| Calendario                                |
| Estacionamento                        |
------------------------------------------
e depois entre no primeiro caracter de cala linha é que fazes o - andar para cima e para baixo, poupavas muito espaço e tempo de execução.
Avr fanboy