Ir ao conteúdo
  • Cadastre-se

Tutorial : Introdução ao uso de PIC´s em BASIC com o PIC Simulator IDE - Parte 1/2


Posts recomendados

Boa tarde a todos,

Alguem poderia me dar uma ajuda com esta operaçao:

P = PORTA.0 + PORTA.1 *2 + PORTA.2 *4 + PORTA.3 *8

if P = 0 then ' Programa “0000”

if P = 1 then ' programa "0001"

if P = 2 then ' programa "0002"

etc.........

Estou tentando modifica-la pra rodar no PSI, mas nao estou conseguindo

Abraço a todos

jfeliciano

Tente isto :

P = PORTA And %00001111

if P = 0 then goto Programa0

if P = 1 then goto Programa1

if P = 2 then goto Programa2

...

programa0:

...

Programa1:

...

Paulo

Link para o comentário
Compartilhar em outros sites

Estimado Professor,

Essa é boa acessando o forum às 5:00 da madruga e eu é que preciso casar ? KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK:D

Arrisco perder um amigo mas não posso deixar passar a oportunidade de uma boa piada.

O problema Professor é que eu preciso é trocar a nega véia por duas de 25:wub: e tá dificel pois nem o ferro velho quer a dita cuja.KKKKKKKKKKKKKKKKKKKKKKKKKKK

Um abraço e obrigado pela dica e desculpe as brincadeiras.:D

Link para o comentário
Compartilhar em outros sites

Pois é .... eu voltei ontem morto de cansaço, acabei dormindo cedo e não consigo dormir mais do que 6 horas.... acordei as 4:30 sem sono, fiquei rolando direto e não conseguia dormir, resolví levantar e responder alguns tópicos aqui no Fórum !

Esse é o lado BOM de estar sem compromisso .... dá para ficar ajudando a turma aqui.

Quando eu "desapareço" daqui, é que arrumei "encrenca" ! Aí tem um lado bom, mas para o fórum em geral é o lado ruim hihihihih!

Pelo menos não sonho com bits e bytes !!!!!

Mas voce tem razão, tem horas que só trocando a véia mesmo hahahah!

Aliás, já que voce está engraçadinho, será que adiante trocar a véia se o ferro está velho também ???????? :D

Um abraço, Tchêcara !!

Paulo

Link para o comentário
Compartilhar em outros sites

Fala Paulo, então daí eu descobri mesmo o erro, e confirmeio-o com você agora!

Agora a duvida é aquela cara do relógio lembra, a mesma antiga até hoje num solucionei...

Como acertar o relógio via os botões da forma como falei lembra?

Um botão de Up(Pra Acrescentar), um de Down(Pra Diminuir), um de Mode(Pra escolher o que vai ser acertado), e um de Select(Pra selecionar o que vai ser acertado).

Ja tentei algumas coisas mas num consigo nada, quando simulo nada dá certo!

Tem alguma luz aí ra eu pelo menos iniciar um programa e desenvolver a partir daí, um pontapé inicial??

Abraços, e Desde já grato!

EDIT:

ou então da forma dos botões desse video:

YouTube - Relógio de Tempo Real com PIC e DS1307

Abraços

Galera se algupem puder me ajudar aí eu agradeço, ta duro fazer essa lógica aí....

Tentei varias possibilidades e até agora não consegui nada!

Abraços!

Link para o comentário
Compartilhar em outros sites

Galera se algupem puder me ajudar aí eu agradeço, ta duro fazer essa lógica aí....

Tentei varias possibilidades e até agora não consegui nada!

Abraços!

Boa tarde,

Oiluj

De uma olhada neste link ai:http://www.picbasic.co.uk/forum/showthread.php?t=364

Talves te de uma luz, esta em BASIC (PicBasicPRO) mas talvez você consiga converter para o PSI.

Espero estar ajudando

Abraço

jfeliciano

Link para o comentário
Compartilhar em outros sites

Oiluj,

Eu fiz um relógio com AVR, usando o BASCOM, ele mostra em 4 displays LED's de 7 segmentos as horas e minutos, mas a lógica dos meus botões é um pouco diferente, eu uso os dois botões de acerto fazendo contagem para cima, isto é, um deles faz acerto rápido ( apertado faz passar 17 minutos a cada segundo ) , e o outro faz acerto lento ( apertado faz passar 2 minutos a cada segundo ).

O truque que eu faço é trocar o prescaler do AVR ( ou seja, normalmente ele gera um pulso por segundo, mas trocando o valor do prescaler faço 128 pulsos por segundo, ou 1024 pulsos por segundo ) .

voce pode usar o mesmo truque no PIC !

Modifiquei a rotina que trata a interrupçào do relógio de 1 segundo , assim posso chamar ela também como uma sub-rotina, já que ela trata a passagem de tempo desde unidade de minutos até dezena de hora, ou seja, trata tudo desde 00:00 até 23:59 .

Tenho um outro botão que determina o modo, isto é, se estamos acertando a hora normal do relógio, ou se estamos acertando a hora do alarme.

Se esse botão estiver apertado, quem sofre o aumento de horas e minutos são os registros de horas e minutos do alarme.

Se o botão não estiver apertado, o aumento das horas e minutos se dá nos registros de hora normal.

Fazendo assim, o código em Basic ficou bem simples, ok ?

Agora, no seu caso, para fazer as horas diminuirem é necessário uma rotina que decrementa o tempo, que trate corretamente o decremento de horas e minutos.

Como dica, use um cristal de 32768 Khz para gerar a base de tempo, sem precisar recarregar os valores do Timer ( ou seja, não use o PRELOAD !!! ), senão irão se acumular erros de temporização, pequenos, mas ao longo de alguns dias verá que seu relógio está mais lento do que deveria, ok ?

Boa sorte !

Paulo

Link para o comentário
Compartilhar em outros sites

Paulo cara isso me deu uma boa luz cara, mas agora vem a duvida maior!

Que é na hora de enviar os dados do acerto pro relógio tipo

eu já tentei varias rotinas aqui para fazer esse envio pro RTC em tempo real(apertei uma vez aqui aumentou uma unidade lá!) e não consigo, não sei como armazenar e enviar essa variavel pro RTC cara to apanhando, já até pensei em mudar pro C!

Abraços se tiver alguma luz aí!

valeu!

Link para o comentário
Compartilhar em outros sites

Oiluj,

Não sei se entendí direito a sua dúvida....

Bom, agora percebí que voce está usando um RTC para só pegar os dados do relógio e mostrar, correto ? Então o que falei antes não se aplica, pois não é o PIC que está gerando a sua base de tempo.

Mas do jeito que voce está fazendo, com um RTC externo, fica bem mais fácil !!!!

voce sempre tem que ler os dados do DS1307 para mostrar a hora no LCD. Portanto, nada te impede de voce manter na memória do PIC os dados de hora e minuto ( 4 bytes no total : minuto, dezena de minuto, hora e dezena de hora ) e mais 4 bytes para o alarme. Quando voce apertar o botão para aumentar, simplesmente incremente esses bytes sequencialmente ( digo, da unidade de minuto em diante ), trate os estouros da unidade de minuto para movimentar a dezena de minutos, e o estouro da dezena de minuto ( quando atingir 6 ) para incrementar a unidade de hora, e assim sucessivamente até atingir 23:59 ... e vai ao mesmo tempo mostrando no LCD o novo horário, usando os dados dessas 4 variáveis, até que chegue o horário desejado, e só então regrave os dados do novo horário no RTC.

A mesma lógica se aplica no botão de decremento.

Quanto ao botão de modo, ele vai fazer a mesma lógica mostrada acima, porém nos bytes referentes a minutos e horas DO ALARME !

Do jeito que eu falei aqui , é bem simples de se implementar !

Desenhe direitinho o fluxograma que vai ficar bem simples, ok ?

Um abraço !

Paulo

Link para o comentário
Compartilhar em outros sites

Paulo passei a noite aqui acordado e ão consegui fazer nada

Não consigo de jeito nenhum cara fazer isso...

Tipo a "chaves" lá que vão acertar o relógio são bits e tenho que trasformar em bites certo? então não consigo fazer essa transformação cara! Fiquei nervosasso aqui, perdi a noite toda de sono nao consegui fazer nada além do que já está pronto

Se for pra acertar via serial tá beleza agora pra acerta por botões num dá!

E aqui pra armazenar no PIC é só criar uma variavel coms os 11 bytes necessários lá do RTC num é?

cara como faço pra dar esse up por botão de pulso cara?

Dá uma luz aí com codigo porque aqui num tá dando não cara já tentei de tudo cara!

Entendi o que você disse ali, mas nao consigo por em prática!

Abraços!

Link para o comentário
Compartilhar em outros sites

Tente isto :

P = PORTA And %00001111

if P = 0 then goto Programa0

if P = 1 then goto Programa1

if P = 2 then goto Programa2

...

programa0:

...

Programa1:

...

Paulo

Ola Paulo,

obrigado pela dica ai, funcionou certinho.

mas agora resolvi modificar pra usar apenas duas teclas (up down) pra mudar os efeito e um display pra mostrar qual efeito esta sendo executado,usando exemplos que você colocou aqui no forum , consigo fazer as rotinas funcionar separadas mas na hora de juntar tudo estou me perdendo com a logica, sera que você poderia me dar uma ajuda.

Vou colocar o codigo pra você verificar onde estou errando.

E se possivel fazer a mesma coisa pra variar o valor da variavel "tp", pra variar a velocidade.

um abraço

jfeliciano

Define CONF_WORD = 0x3f72

AllDigital

TRISA = %11111111

TRISB = %00000000

TRISE = %11111111

TRISC = %00000000

Symbol up = PORTE.0

Symbol down = PORTE.1

Symbol contagem = PORTC

PORTE = %00000000

PORTC = %00000000

PORTB = %00000000

Dim conttecla As Byte

Dim tp As Byte

Dim pa As Byte

tp = 200

conttecla = 0

Gosub mostra

'Goto inicio

loop:

Gosub teclaup

Gosub tecladown

Goto loop

End

teclaup:

If up = 1 Then Goto saiup 'tecla UP apertada

up1:

conttecla = conttecla + 1

If conttecla > 6 Then

conttecla = 6

Endif

WaitMs 200

Gosub mostra

If up = 1 Then Goto saiup

Goto up1

saiup:

Return

tecladown:

If down = 1 Then Goto saidown

down1:

conttecla = conttecla - 1

If conttecla > 6 Then

conttecla = 0

Endif

WaitMs 400

Gosub mostra

If down = 1 Then Goto saidown

Goto down1

saidown:

Return

mostra:

contagem = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), conttecla

Gosub inicio

Return

'WaitMs 200

inicio:

'pa = PORTA And %00001111

pa = conttecla

If pa = 0 Then Goto programa00

If pa = 1 Then Goto programa01

If pa = 2 Then Goto programa02

If pa = 3 Then Goto programa03

If pa = 4 Then Goto programa04

If pa = 5 Then Goto programa05

If pa = 6 Then Goto programa06

'************************************************************************

programa00:

PORTB = %00000001

WaitMs tp

PORTB = %00000010

WaitMs tp

PORTB = %00000100

WaitMs tp

PORTB = %00001000

WaitMs tp

PORTB = %00010000

WaitMs tp

PORTB = %00100000

WaitMs tp

PORTB = %01000000

WaitMs tp

PORTB = %10000000

WaitMs tp

Return

'Gosub teclaup

'Goto mostra

'Goto inicio

'**********************************

programa01:

PORTB = %10000000

WaitMs tp

PORTB = %01000000

WaitMs tp

PORTB = %00100000

WaitMs tp

PORTB = %00010000

WaitMs tp

PORTB = %00001000

WaitMs tp

PORTB = %00000100

WaitMs tp

PORTB = %00000010

WaitMs tp

PORTB = %00000001

WaitMs tp

Return

'Goto inicio

'**********************************

programa02:

PORTB = %00000001

WaitMs tp

PORTB = %00000010

WaitMs tp

PORTB = %00000100

WaitMs tp

PORTB = %00001000

WaitMs tp

PORTB = %00010000

WaitMs tp

PORTB = %00100000

WaitMs tp

PORTB = %01000000

WaitMs tp

PORTB = %10000000

WaitMs tp

PORTB = %10000000

WaitMs tp

PORTB = %01000000

WaitMs tp

PORTB = %00100000

WaitMs tp

PORTB = %00010000

WaitMs tp

PORTB = %00001000

WaitMs tp

PORTB = %00000100

WaitMs tp

PORTB = %00000010

WaitMs tp

PORTB = %00000001

WaitMs tp

Return

'Goto inicio

'*************************************

programa03:

PORTB = %11111111

WaitMs tp

PORTB = %11111110

WaitMs tp

PORTB = %11111100

WaitMs tp

PORTB = %11111000

WaitMs tp

PORTB = %11110000

WaitMs tp

PORTB = %11100000

WaitMs tp

PORTB = %11000000

WaitMs tp

PORTB = %10000000

WaitMs tp

PORTB = %00000000

WaitMs tp

Return

'Goto inicio

'**************************************

programa04:

PORTB = %00000000

WaitMs tp

PORTB = %00000001

WaitMs tp

PORTB = %00000011

WaitMs tp

PORTB = %00000111

WaitMs tp

PORTB = %00001111

WaitMs tp

PORTB = %00011111

WaitMs tp

PORTB = %00111111

WaitMs tp

PORTB = %01111111

WaitMs tp

PORTB = %11111111

WaitMs tp

Return

'Goto inicio

'***********************************

programa05:

PORTB = %10000001

WaitMs tp

PORTB = %01000010

WaitMs tp

PORTB = %00100100

WaitMs tp

PORTB = %00011000

WaitMs tp

PORTB = %00000000

WaitMs tp

PORTB = %00011000

WaitMs tp

PORTB = %00100100

WaitMs tp

PORTB = %01000010

WaitMs tp

PORTB = %10000001

WaitMs tp

PORTB = %00000000

WaitMs tp

Return

'Goto inicio

'*************************************

programa06:

PORTB = %0000000

WaitMs tp

PORTB = %0001000

WaitMs tp

PORTB = %0011100

WaitMs tp

PORTB = %0111110

WaitMs tp

PORTB = %1111111

WaitMs tp

PORTB = %0111110

WaitMs tp

PORTB = %0011100

WaitMs tp

PORTB = %0001000

WaitMs tp

Return

'Goto inicio

Link para o comentário
Compartilhar em outros sites

Oiluj,

Pegue no tutorial, tem a explicação dos bytes do relógio, e tem também um programa que faz um relógio, mostra as horas no display LCD e acerta a hora via serial....

Preste atenção, não precisamos de todos os bytes do RTC, apenas pegue os bytes que tem os dados que queremos, que é a hora e minuto, eles estão nisturados no RTC, voce tem de separar eles, veja no programa que eu fiz no tutorial como voce pode fazer isto.

Neste mesmo programa também mostra como isolar os bits que queremos, e transformar em bytes , do tipo que eu te falei no tópico acima, tipo um byte para a unidade de minuto, um byte para a dezena de minuto, um byte para a unidade de hora, e por último um byte para dezena de hora.

Meu amigo, acho que voce está assustado com pouca coisa, o truque é voce LER BEM O TUTORIAL, PRINCIPALMENTE esse exemplo do relógio com RTC. É justamente o que voce precisa.

Vou postar aqui um trecho de código que serve para incrementar o tempo, a partir de um segundo.

Veja as minhas 6 variáveis : Segundouni, Segundodez, minutouni, minutodez, horauni, horadez. Embora eu apenas mostre no display hora e minuto, eu uso os segundos no meu código, pois eu uso o RTC embutido do AVR.

Cada vez que voce chamar esta rotina, ela incrementa um segundo, ok ?



Novosegundo:
Incr Segundouni
If Segundouni < 10 Then Goto Novo1
Segundouni = 0
Incr Segundodez

Novo1:
If Segundodez < 6 Then Goto Novo2
Segundodez = 0
Incr Minutouni

Novo2:
If Minutouni < 10 Then Goto Novo3
Minutouni = 0
Incr Minutodez

Novo3:
If Minutodez < 6 Then Goto Novo4
Minutodez = 0
Incr Horauni

Novo4:
If Horauni < 10 Then Goto Novo5
Horauni = 0
Incr Horadez

Novo5:
If Horadez = 2 And Horauni = 4 Then Goto Novo6

Novo7:
Return

Novo6:
Horadez = 0
Horauni = 0
Goto Novo7

É bem simples, foi escrito em Basic para AVR's, mas acho que é idêntico ao do PSI.

Como ler e gravar no RTC, está no tutorial no exemplo do relógio ! Veja que tem tanto a leitura da hora, como a gravação da hora correta no RTC, acho que é o que voce precisa.

Veja se agora vai !

Paulo

Link para o comentário
Compartilhar em outros sites

Jfeliciano,

Me desculpe, eu não faço nem ideia do que é que voce quer fazer exatamente, sem isso eu não consigo entender o seu programa.

Faz o seguinte, monte o programa por partes, isto é, compile e teste, se estiver bem, acrescente um outro trecho de programa, e continue testanto, assim voce vai pegar exatamente o trecho que está funcionando errado, ok ?

Meu amigo, no momento eu estou programando em um outro BASIC, para os processadores AVR's, e fica difícil me concentrar no programa do PSI, não tenho mais a facilidade de olhar e achar erros de lógica, precisaria de um tempo para isso, ok ?

Mas vou tentar te ajudar, me explique exatamente o que que é o seu projeto.

Paulo

Link para o comentário
Compartilhar em outros sites

Bom dia Paulo,:D

Gostaria de saber a tua opinião.

Estou trabalhando como sabes em um projeto de matriz 7 linhas X 5 colunas (o total será de 30 colunas). Estou desenvolvendo em cima de um projeto onde o 74HC595 coloca o byte nas colunas e o PIC coloca 1 para ascender o led correspondente a linha desejada. Existem projetos que fazem o contrário, o PIC coloca os bytes nas 7 linhas e um 4017 coloca 1 na coluna escolhida. À medida que vou trabalhando em meu projeto e os horizontes vão abrindo vejo que este projeto não é bom e a segunda forma é a mais viável e inclusive fecha com uma dica que tu me deu de fazer 7 ponteiros varrer os displays. Seria isto ai mestre ?

Um abraço e boa semana.:jump:

Link para o comentário
Compartilhar em outros sites

Paulo tá certo eu entendi o que você quis dizer ali e estou caminhando aqui minha duvida é só no seguinte1 o PSI não tem essa palavra chave "Incr" para incrementar +1 nos bytes como vou fazer pra criar essa opeção no PSI?

Pensei em fazer assim:

Novosegundo:
Incr Segundouni
If Segundouni < 10 Then Goto Novo1
Segundouni = 0
Incr Segundodez

Substirui isso por isso:

novosegundo:
segundouni=segundouni+1
If segundouni < 10 Then Goto Novo1
segundouni = 0
segundodez=segundodez+1

e outra coisa ao final de todas essas subrotinas eu teria que colocar "Return" não teria?

Desde já agradeço e obrigado pela atenção!

Júlio

Link para o comentário
Compartilhar em outros sites

Tchecara,

Bom, para falar a verdade, eu ainda não entendo o porque de se usar outros CI´s para auxiliar, pois bastaria apenas o PIC e alguns transistores para fornecer corrente para a coluna...

Eu ví um projeto na Elektor, só que usando AVR em vez de pic, onde foi montada uma matriz do tipo 5 x 5 x 5 , e achei muito inteligente e simples de se fazer. Só que era para efeitos de cubo, o que você quer é para letreiro luminoso.

Troque o 16F628 por um que tenha mais portas, tipo o 16F877A, voce terá muito mais recursos para crescer o seu projeto.

Assim, podemos ter uma matriz de 25 colunas e 7 linhas, a qual mostrará 5 caracteres ao mesmo tempo !

Se voce trabalhar com o TIMER do PIC, usando uma interrupção para fazer o shift , dá para voce manter o esquema de software que eu falei num post anterior, mas terá de usar o PIC na mais alta velocidade possível com o cristal correto.

A técnica de temporização pode ser a mesma do tutorial, onde ensina a fazer um display multiplexado de 4 dígitos ( colunas !!! ). Recalcule ela para 25 colunas, sendo que o mínimo é 30 vezes por segundo cada segmento, o que dá 30 * 25 = 750 Hz de interrupção de varredura do display.

Bole o programa de interrupção para que a rotina de varredura seja automática, apenas verificando um ponteiro que indicaria se a coluna que vai acender já tem os dados correspondentes prontos... se não tiver, termine essa interrupção e espere a próxima. Se voce aumentar a velocidade , para 1000 interrupções por segundo, voce pode perder algumas delas dessa maneira, sem efeito visível no display.

O programa principal fica preparando o shift de todos os 5 caracteres para ser mostrado, e ele pode usar uma segunda interrupção ( um outro timer ) para indicar se está na hora de fazer os shifts !

Bom, deixo o resto para voce, ok ?

Use o PIC com os transistores ( ou um CI do tipo ULN2003 ou parecido para servir de driver de corrente para as colunas ! ) , e mais nada !

Um abraço !

Paulo

Oiluj,

Certinho o que voce fez, pode fazer desse jeito sem nenhum problema : tipo = tipo +1 em vez de INCR tipo !

Não precisa mais de nenhum Return, repare que existe um único Return, quase ao final da rotina !

Cada vez que voce chamar essa rotina, ela aumenta o tempo em 1 segundo, e já trata todas as eventuais mudanças relativas quando o segundo chega a 60 !

Manda bala !

Paulo

Link para o comentário
Compartilhar em outros sites

Olá Paulo,

Veja bem se usar apenas um 16F877 o meu projeto fica limitado a um número máximo de colunas, já usando um 16F628 + outro CI para as colunas fica mais flexível caso futuramente quiser aumentar o número de colunas.

Esclarecido então a razão de usar o 16F628, qual seria a melhor opção em relação a pergunta que eu havia feito. È que existe tantas versões que confunde e acredito que uma destas é a mais viável tecnicamente oferecendo melhores resultados.

Um abraço.

Link para o comentário
Compartilhar em outros sites

Jfeliciano,

Me desculpe, eu não faço nem ideia do que é que voce quer fazer exatamente, sem isso eu não consigo entender o seu programa.

Faz o seguinte, monte o programa por partes, isto é, compile e teste, se estiver bem, acrescente um outro trecho de programa, e continue testanto, assim voce vai pegar exatamente o trecho que está funcionando errado, ok ?

Meu amigo, no momento eu estou programando em um outro BASIC, para os processadores AVR's, e fica difícil me concentrar no programa do PSI, não tenho mais a facilidade de olhar e achar erros de lógica, precisaria de um tempo para isso, ok ?

Mas vou tentar te ajudar, me explique exatamente o que que é o seu projeto.

Paulo

Ola Paulo,

Desculpe estar tomando seu tempo, mas aprediz de "feiticeiro" e fogo kakakakakak.

Estou praticando com um projeto de um sequencial de 8 saidas e varios efeitos.

Fiz o sequencial funcionar usando 4 chaves(Dip Switches) e 4 bits do portX, pra mudar o efeitos.

Aquela dica que você deu P=portA and 00001111, etc...lembra?

Usei uma variavel "tp" pra mudar a velocidade do efeito alterando manualmente dentro do programa, simulei no PSI e Proteus deu tudo certo.

Ai veio a ideia e usar aquele exemplo do incremento/decremnto com um display que você passou aqui no forum, compilei e testei esta rotina aqui tambem e tudo certo!

A ideia e quando selecianar um efeito usando as teclas inc./dec. tambem seja mostrado no display qual efeito esta selecionado e fique sendo executado indefinidamente, ate que um novo efeito seja chamado pelas teclas inc./ dec.

E talvez usar a mesma ideia pra variar o valor da variavel "tp" que modifica a velocidade do efeito, ou coisa parecida.

Acho que meu problema esta no hora de chamar as rotinas e retornar para o ponto certo.

obrigado

jfeliciano

Link para o comentário
Compartilhar em outros sites

Tchecara,

Usando 5 cd4017 voce cuida de todas as verticais, certo ?

Isso usaria 6 pinos de I/O ( reset comum a todos e um clock separado para cada um ) , assim voce demoraria no máximo 10 pulsos de clock para selecionar a coluna correta !

Evite a tentação de usar o carry out e ligar todos eles em cascata, voce pode ter problemas de timing para gerar até 45 pulsos em cada interrupção. Se tiver pinos de I/O sobrando, use da maneira acima. Se não tiver, paciência.... tente fazer o carry, mas acho que vai ter problemas com as interrupções.

Lembre-se de que a frequencia máxima do cd4017 é 5 Mhz, e verifique no datasheet qual a duração mínima de um pulso de clock, para poder otimizar o sistema como um todo.

Primeiro, faça um RESET, e só depois gere o clock , ok ?

Coloque um transistor para alimentar cada coluna, assim voce pode fornecer 20mA para cada linha, o PIC aguenta 200 mA no total, por exemplo, 180 mA nos I/O e uns 20 mA para o funcionamento do PIC. Se tiver 7 linhas, o consumo total seria de 160 mA .

Ou pode usar 0s ULN2003 como drivers, fica mais compacto, embra custe um pouco mais caro.

Paulo

Link para o comentário
Compartilhar em outros sites

Fala Paulo...

Então cara fiz lá mais ou menos da forma como você passou e consegui cara tá contando lá tudo direitinho de 0 a 9 nas unidades de 0 a 6 nas dezenas da forma como tem que ser!

Agora me apareceram algumas duvidas aqui cara do tipo, como faço pra a qualquer momento, enquanto o programa estiver rodando a tecla "MODE" for apertada(para falar que estou querendo acertar o relógio) e ele ir pra subrotina de acerto?

E tambem como fazer pra ele ficar preso tipo no minuto pra eu acertar, ai se apertar "MODE" de novo pra ele ficar preso na hora, depois no dia, mês, ano, alarme, até voltar para a marcação normal das horas?

Tem como você me dar alguma luz de como posso fazer isso!

Obrigado

Júlio!!

EDIT:

Só uma observação que esqueci de citar:

Na parte ali do mode de tipo apertar uma vez pra ir nos minutos, ai mais uma vez pras horas, mais uma pro dia, mais uma pro mes e assim por diante, pensei em criar uma variavel do tipo byte ascociada a variavel do tipo bit(no caso o botão que vai estar sendo apertado) e ssim, sempre que apertar ele somar 1 mas nao sei como fazer isso na pratica ali, pra por exemplo, apertei uma vez e estou lá acertando os minutos, aí beleza, cheguei no numero que queria, quero apertar mode pra ir pras horas e colocar no numero que preciso! aí não sei como fazer isso! Acho que consegui esclarecer com esse exemplo!

Espero que possa me ajudar!

T+

Abraços!

Júlio!

Link para o comentário
Compartilhar em outros sites

Bom dia....

queria lhe pedir uma ajuda para elaborar um programa de microcontroladores com as seguintes condições:

- Menu: (1) Login (2 )Primeiro Acesso

- Controle de acesso para 100 usuários

- Cada toque de tecla gera 1 bit

(1) Login

- Senha certa: mensagem : "bem vindo" (durante 3 segundos)

- Senha errada: mensagem: "tente novamente" (número máximo de tentativas 3- bloqueia 1 minuto e volta pra o menu principal)

(2) Primeiro Acesso

- Seu número é: ...... (gera um número de acesso)

- Sua senha é: ...... (gera senha)

permanece por 3 segundos

Isso tudo usando a EEPROM , usando programação C.

Obrigado, aguardo resposta!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!