Ir ao conteúdo

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


aphawk

Posts recomendados

Postado
[Off-topic]Colega Leonardo-SP!, Você não tem ideia de como seu retorno foi importante ao tópico! Obrigado![/Off-Topic] Méritos ao mestre Paulo!...

[Off-topic]

Caro Bcpetronzio, gostei do seu comentário, por um momento "pensei" estar confundindo o leitor com minhas confusões nos programas.

Fiquei ausente porque estou montando umas placas, assim dou uma folga para o tópico e o Mestre.

Esse tópico mudou a minha vida, literalmente!!! :D

Abraço.

[/Off-Topic]

Postado

Camarada IAS..

Não esqueceu nada não, é isto mesmo!

Não tenho mais problemas com a questão simulação e gerar o arquivo .HEX

Agora meu problema está em fazer de fato o PIC funcionar!

Testei rotinas do PIC12F628 e PIC16F628 no PSI e simulou ok, porém depois de gravar o PIC nada acontece!

Pensei que poderia ser a alimentação do circuito que estou usando os 5V da porta USB mas coloquei o condensador de 100nF proximo ao VDD e VSS e nada! Nada acontece! O LED não pisca como na simulação! Tempo ajustado para WaitMs 500 e nada!

:(

Postado
Camarada IAS..

Não esqueceu nada não, é isto mesmo!

Não tenho mais problemas com a questão simulação e gerar o arquivo .HEX

Agora meu problema está em fazer de fato o PIC funcionar!

Testei rotinas do PIC12F628 e PIC16F628 no PSI e simulou ok, porém depois de gravar o PIC nada acontece!

Pensei que poderia ser a alimentação do circuito que estou usando os 5V da porta USB mas coloquei o condensador de 100nF proximo ao VDD e VSS e nada! Nada acontece! O LED não pisca como na simulação! Tempo ajustado para WaitMs 500 e nada!

:(

Caro Rodrigo, você está fazendo o 1° projeto da apostila?

Quanto ao PIC 16F628, gravei o 1° programa da apostila e não funcionou nada, em seguida tentei apagá-lo sem sucesso, enfim, o bicho não apaga mais. Pesquisei na net e encontrei vários relatos descrevendo o mesmo problema.

Gravei um 16F84 e funcionou perfeitamente.

Espero ter ajudado.

[Edit]

Em tempo, não esqueça de confirmar as CONF_WORD antes de gravar o PIC.

[Edit]

Postado

Caro Rodrigo,

São inúmeras as possibilidade para o não funcionar....comece checando a alimentação nos pinos do PIC com um mutímetro, confira o circuito conexão à conexão (se montado em protoboard), substitua o PIC (se tiver outro disponível), o cristal (se estiver usando), confira se o reset está realmente conectado ao +5v.....enfim, são incontaveis possibilidades inclusive em relação ao proprio gravador, em alguns que usam a tensão

"roubada" da porta serial, nem sempre conseguem programar o pic por se encontrar no limite (varia de pc para pc) - teóricamente as tensãoes presentes nas portas COM deveriam ser de +15V e -15V, porém na maioria dos casos estão abaixo. Já vi alguns cometários na NET referindo-se ao fato de alguns PIC's poderem ser programados nestas condições e outros não.

Amigo Paulo e Felipe....

Se puderem, olhem a versão do MikroBasic Pro PIC 2010.....saiu com alguns recursos novos muito interessantes - um deles é a rotina de botão incluindo a função debouncing, semelhante ao Bascom - AVR.

Abraços....

IAS

Postado

ola amigos,

me ajudem,

tenho um leptop amazon pc, meu gravador de pic veio com uma saida db9, porém quando vou copilar o codico da erro, será que essa saida minha ta ruim, ou tenho que comprar um gravador com usb? obrigado aguardo retorno

Postado

ma2008,

Se o seu problema é ao compilar (converter o código BASIC em .HEX), bom, ai não tem jeito: o erro provavelmente é no seu código, porém se você já converteu o seu código BASIC no arquivo .HEX e o que deseja é gravar no PIC, e já configurou a porta do seu PC de acordo com o seu gravador, estabelecendo a comunicação entre os dois e não consegue gravar, veja a resposta acima; um outro detalhe é que se você está usando o WINXP, para acessar o hardware, é necessário um driver específico para o WINXP na maioria dos programadores. Espero ter sido de alguma ajuda...

IAS

Postado

ma2008,

Se o seu problema é ao compilar (converter o código BASIC em .HEX), bom, ai não tem jeito: o erro provavelmente é no seu código, porém se você já converteu o seu código BASIC no arquivo .HEX e o que deseja é gravar no PIC, e já configurou a porta do seu PC de acordo com o seu gravador, estabelecendo a comunicação entre os dois e não consegue gravar, veja a resposta acima; um outro detalhe é que se você está usando o WINXP, para acessar o hardware, é necessário um driver específico para o WINXP na maioria dos programadores. Espero ter sido de alguma ajuda...

IAS

Postado

ma2008,

Se o seu problema é ao compilar (converter o código BASIC em .HEX), bom, ai não tem jeito: o erro provavelmente é no seu código, porém se você já converteu o seu código BASIC no arquivo .HEX e o que deseja é gravar no PIC, e já configurou a porta do seu PC de acordo com o seu gravador, estabelecendo a comunicação entre os dois e não consegue gravar, veja a resposta acima; um outro detalhe é que se você está usando o WINXP, para acessar o hardware, é necessário um driver específico para o WINXP na maioria dos programadores. Espero ter sido de alguma ajuda...

IAS

Postado

amigos boa noite,

me ajudem.

fiz um sequencial usando os cinco pinos de saida do pic12f675 no simulador funciona tudo bem, mas depois que eu copi-lo para o pic12f675 e vou testa-lo fazendo todas as

ligaçoes, somente tres leds funcionam na sequencia gpo,gp1,gp2, acho que o problema e na hora de fazer o configuration bits, detalhe so funcina com o crystal conectado

peço a colaboração de todos.

Define CONF_WORD = 0x31e2

AllDigital

TRISIO = 00000000 'b

Symbol led0 = GP0

Symbol led1 = GP1

Symbol led2 = GP2

Symbol led4 = GP4

Symbol led5 = GP5

main:

led0 = 1

WaitMs 100

led0 = 0

led1 = 1

WaitMs 100

led1 = 0

led2 = 1

WaitMs 100

led2 = 0

led4 = 1

WaitMs 100

led4 = 0

led5 = 1

WaitMs 100

led5 = 0

Goto main

End

Postado

amigos boa noite,

me ajudem.

fiz um sequencial usando os cinco pinos de saida do pic12f675 no simulador funciona tudo bem, mas depois que eu copi-lo para o pic12f675 e vou testa-lo fazendo todas as

ligaçoes, somente tres leds funcionam na sequencia gpo,gp1,gp2, acho que o problema e na hora de fazer o configuration bits, detalhe so funcina com o crystal conectado

peço a colaboração de todos.

Define CONF_WORD = 0x31e2

AllDigital

TRISIO = 00000000 'b

Symbol led0 = GP0

Symbol led1 = GP1

Symbol led2 = GP2

Symbol led4 = GP4

Symbol led5 = GP5

main:

led0 = 1

WaitMs 100

led0 = 0

led1 = 1

WaitMs 100

led1 = 0

led2 = 1

WaitMs 100

led2 = 0

led4 = 1

WaitMs 100

led4 = 0

led5 = 1

WaitMs 100

led5 = 0

Goto main

End

Postado

amigos boa noite,

me ajudem.

fiz um sequencial usando os cinco pinos de saida do pic12f675 no simulador funciona tudo bem, mas depois que eu copi-lo para o pic12f675 e vou testa-lo fazendo todas as

ligaçoes, somente tres leds funcionam na sequencia gpo,gp1,gp2, acho que o problema e na hora de fazer o configuration bits, detalhe so funcina com o crystal conectado

peço a colaboração de todos.

Define CONF_WORD = 0x31e2

AllDigital

TRISIO = 00000000 'b

Symbol led0 = GP0

Symbol led1 = GP1

Symbol led2 = GP2

Symbol led4 = GP4

Symbol led5 = GP5

main:

led0 = 1

WaitMs 100

led0 = 0

led1 = 1

WaitMs 100

led1 = 0

led2 = 1

WaitMs 100

led2 = 0

led4 = 1

WaitMs 100

led4 = 0

led5 = 1

WaitMs 100

led5 = 0

Goto main

End

Postado

Ma2008,

De onde voce tirou esse seu CONFIG WORD 0X31e2 ? Se voce está querendo mesmo usar o RESET , tem de implementar o famoso circuito RC para isso, senão fica inconfiável, é melhor desabilitar esse pino e transformarem puro I/O ( isto é, entrada pois não serve como saída... )

Sempre que iniciar um programa, coloque estes comandos fundamentais :

[COLOR=Blue]Define CONF_WORD = 0x31c4[/COLOR]
'configurado para clock interno de 4 Mhz
'e GP3 como I/O em vez de Reset.
'sempre verifique pois aqui é onde muita gente erra e na pratica o programa nao roda direito
[COLOR=Blue]Define CLOCK_FREQUENCY = 4[/COLOR]
[COLOR=Blue]AllDigital [/COLOR]
'fundamental, nunca esqueça esse comando pois ele configura o hardware inteiro do PIC para nós ...

E que história é essa de cristal ????????????? Use o oscilador interno, e pronto ! Retire ele do circuito.

Agora, o restante do seu código :

[COLOR=Red]TRISIO = 00000000b[/COLOR] ' essa e a maneira correta desse comando!
Symbol led0 = GP0
Symbol led1 = GP1
Symbol led2 = GP2
Symbol led4 = GP4
Symbol led5 = GP5

led0=0
led1=0
led2=0
led4=0
led5=0

main:
led0 = 1
WaitMs 100
led0 = 0

led1 = 1
WaitMs 100
led1 = 0

led2 = 1
WaitMs 100
led2 = 0

led4 = 1
WaitMs 100
led4 = 0

led5 = 1
WaitMs 100
led5 = 0
Goto main
End

Ve se resolveu.

Paulo

Postado

Ola Paulo,

Tenho quebrado a cabeça aqui pra tentar achar uma sulução pra fazer fucionar o 7hc595 sem o pino do RESET, mas ate agora nada!

Modifiquei aquele codigo ,ate prece que ia funcionar mas dependendo da ordem que aperta as teclas ate vai, mas depois vira uma bagunça.

acho que tem que fazer uma formula pra simular um "reset" onde sempre retorne a contagem pro 0.

vou colocar o codigo aqui pra voce dar uma olhada e ver se e possivel.

Desde ja um abraço

jfeliciano

'Controle de volume 5.1 e Seletor de Entradas'

Define CONF_WORD = 0x3f31

Define CLOCK_FREQUENCY = 4

AllDigital

ADCON1 = 0x0e

TRISB = 00000011b

TRISD = 0x00

TRISC = 0x00

PORTC = 0

PORTB = 0

PORTD = 0

'Symbol enc = PORTB.0 'B0 E B1 PINOS DO ENCODER

'Symbol enc = PORTB.1 'B0 E B1 PINOS DO ENCODER

'Symbol mr = PORTC.3 'RESET PIN 10 (MR) 74HC595

Symbol ds = PORTC.0 'DATA PIN 14 (DS) 74HC595

Symbol stcp = PORTC.1 'LATCH PIN 12 (ST_CP) 74HC595

Symbol shcp = PORTC.2 'CLOCK PIN 11 (SH_CP)74HC595

Dim acled As Byte

Dim vtemp As Byte

Dim an0 As Word

Dim ledaceso As Byte

Define LCD_LINES = 2

Define LCD_CHARS = 20

Define LCD_BITS = 4

Define LCD_DREG = PORTD

Define LCD_DBIT = 4

Define LCD_RSREG = PORTD

Define LCD_RSBIT = 2

Define LCD_RWREG = PORTD

Define LCD_RWBIT = 1

Define LCD_EREG = PORTD

Define LCD_EBIT = 3

Define LCD_READ_BUSY_FLAG = 1

Lcdinit 0

Goto dvd2

loop:

Adcin 0, an0

If an0 < 45 Then Goto loop

'If an0 < 55 Then Goto'STBY (51)

If an0 < 120 Then Goto dvd2 '(109)

If an0 < 188 Then Goto dvd5 '(171)

If an0 < 259 Then Goto cd '(236)

If an0 < 319 Then Goto sat '(292)

'IF AN0 < 386 THEN GOT '(351)

'IF AN0 <451 THEN GOTO '(410)

'IF AN0 < 517 THEN GOTO '(470)

'IF AN0 <579 THEN GOTO '(527)

'IF AN0 < 650 THEN GOTO '(591)

'IF AN0 < 713 THEN GOTO "(649)

If an0 > 1000 Then Goto loop

'------------------------------

dvd2:

ledaceso = 0

Gosub sn74hc595

Lcdcmdout LcdLine1Clear

Lcdout " Pre-Amplifier"

Lcdcmdout LcdLine2Clear

Lcdcmdout LcdLine2Home

Lcdout " Source: ", "DVD2.0"

Goto loop

'------------------------------

dvd5:

ledaceso = 1

Gosub sn74hc595

Lcdcmdout LcdLine1Clear

Lcdout " Pre-Amplifier"

Lcdcmdout LcdLine2Clear

Lcdcmdout LcdLine2Home

Lcdout " Source: ", "DVD5.1"

Goto loop

'-----------------------------

cd:

ledaceso = 2

Gosub sn74hc595

Lcdcmdout LcdLine1Clear

Lcdout " Pre-Amplifier"

Lcdcmdout LcdLine2Clear

Lcdcmdout LcdLine2Home

Lcdout " Source: ", "CD"

Goto loop

'-----------------------------

sat:

ledaceso = 3

Gosub sn74hc595

Lcdcmdout LcdLine1Clear

Lcdout " Pre-Amplifier"

Lcdcmdout LcdLine2Clear

Lcdcmdout LcdLine2Home

Lcdout " Source: ", "SAT"

Goto loop

End

sn74hc595:

If ledaceso = 0 Then acled = 0

If ledaceso = 1 Then acled = 1

If ledaceso = 2 Then acled = 2

If ledaceso = 3 Then acled = 3

ds = 1

WaitMs 1

For vtemp = 0 To acled

shcp = 0 'CLOCK

WaitMs 1

shcp = 1 'CLOCK

WaitMs 1

If ds = 1 Then ds = 0 'DATA

Next vtemp

WaitMs 1

stcp = 0 'LATCH

WaitMs 2

stcp = 1 'LATCH

WaitMs 1

Return

Postado

Jfeliciano,

Bom, agora que voce quebrou bastante a cabeça ( e aprendeu mais algumas coisas com certeza ... ) , vamos fazer o código da rotina sem usar o /MR .

Truque : o que que acontece se fizermos a entrada DS =0 e fazer 8 shifts seguidos ? - Colocaremos 0 nas 8 saidas, que é o mesmo efeito do /MR !

Portanto, faremos o seguinte :

1 - Fazemos 8 shifts seguidos de valor DS=0

2 - Agora, é a mesma coisa que fizemos no código anterior que funcionava, entendeu ?

sn74hc595:
'vamos fazer os 8 shifts de valor 0
ds = 0 'gostou dessa né ???????????????
WaitMs 1
For vtemp = 0 To 8 ' para garantir... 7 já serviria
shcp = 0 'CLOCK
WaitMs 1
shcp = 1 'CLOCK
WaitMs 1
Next vtemp
WaitMs 1
' garantimos que todas as saidas do CI são 0 !
' agora é o velho código que já funcionou !
ds = 1
WaitMs 1
For vtemp = 0 To ledaceso
shcp = 0 'CLOCK
WaitMs 1
shcp = 1 'CLOCK
WaitMs 1
If ds = 1 Then ds = 0 'DATA
Next vtemp
WaitMs 1
stcp = 0 'LATCH
WaitMs 2
stcp = 1 'LATCH
WaitMs 1
Return

Veja se resolveu, ok ?

Paulo

Postado
Jfeliciano,

Bom, agora que voce quebrou bastante a cabeça ( e aprendeu mais algumas coisas com certeza ... ) , vamos fazer o código da rotina sem usar o /MR .

Truque : o que que acontece se fizermos a entrada DS =0 e fazer 8 shifts seguidos ? - Colocaremos 0 nas 8 saidas, que é o mesmo efeito do /MR !

Portanto, faremos o seguinte :

1 - Fazemos 8 shifts seguidos de valor DS=0

2 - Agora, é a mesma coisa que fizemos no código anterior que funcionava, entendeu ?

sn74hc595:
'vamos fazer os 8 shifts de valor 0
ds = 0 'gostou dessa né ???????????????
WaitMs 1
For vtemp = 0 To 8 ' para garantir... 7 já serviria
shcp = 0 'CLOCK
WaitMs 1
shcp = 1 'CLOCK
WaitMs 1
Next vtemp
WaitMs 1
' garantimos que todas as saidas do CI são 0 !
' agora é o velho código que já funcionou !
ds = 1
WaitMs 1
For vtemp = 0 To ledaceso
shcp = 0 'CLOCK
WaitMs 1
shcp = 1 'CLOCK
WaitMs 1
If ds = 1 Then ds = 0 'DATA
Next vtemp
WaitMs 1
stcp = 0 'LATCH
WaitMs 2
stcp = 1 'LATCH
WaitMs 1
Return

Veja se resolveu, ok ?

Paulo

Beleza Paulo,

com certeza gostei sim, e quebrar a cabeça ensina muito, mas tem um custo alto, menos cabela na cabeça, olha que ja nao tenho muitos. kakakakakaka

Eu ate imaginei uma stuaçao parecida , mas nao consegui colocar em pratica.

Vou fazer os teste aqui e depois posto os resultados.

Mais uma coisa, posso aplicar este mesmo codigo pro UCN5821?

Como o projeto tem 1 74HC595 mais 2 UCN5821 com os "DATAS" ligados em serie,basta fazer "VTEMP" 8x3? isto vai de zero ate 23?

Até breve

jfeliciano

Postado
Ma2008,

Sempre que iniciar um programa, coloque estes comandos fundamentais :

[COLOR=Blue]
AllDigital [/COLOR]
'fundamental, nunca esqueça esse comando pois ele configura o hardware inteiro do PIC para nós ...

Mestre, não resisti, tenho que perguntar, por que nos dois primeiros projetos da apostila o comando AllDigital não foi usado?:confused:

Abraço.

Postado

Jfeliciano,

Caramba .... eu me livro de uma e nem passam 24 horas voce já arruma uma pior e mais complicada ?????????????????????????????????????

Heheheh estou fazendo 3 projetos com AVR ao mesmo tempo, a cabeça tá entrando em curto cada vez que tenho de pensar nos seus "casos" !!!!!

Me dê um tempo, depois eu vejo esse seu "novo" caso, ok ?

Leonardo,

Bom ..... quando usava o 16F84, ele não tinha nenhum hardware ANALÓGICO para eu me preocupar, portanto não precisava usar o ALLDIGITAL.

Mas logo depois passei a usar um PIC que tem circuitos analógicos, e nesses casos temos de inicializar o ALLDIGITAL, e habilitar apenas a parte analógica indispensável para o uso em nosso programa.

Como depois verifiquei que esse comando não causava nenhum problema se o PIC não tiver nada analógico, fiz o famoso " o uso do cachimbo deixa a boca torta " .... nada melhor do que criar um HÁBITO, assim nunca me esqueço e evito alguns problemas que já me deixaram louco para resolver.

E desta maneira, como acontece muito, acabei passando batido na revisão do texto da apostila !

Porisso que falo que preciso de um revisor sempre que escrevo algo.... !

Gostou dessa enrolada toda em vez de dizer simplesmente :

ESQUECÍ ! ???????????

Um abraço a todos !

Paulo

Postado
Jfeliciano,

Gostou dessa enrolada toda em vez de dizer simplesmente :

ESQUECÍ ! ???????????

Essa foi boa mesmo!!! Morri de rir :D , esperava uma resposta diferente!

Tenho outra pergunta, vou fazer depois.

[Off-topic]

Estou saindo pra pescar.:lol:

[Off-topic]

Abraço

Postado
Jfeliciano,

Caramba .... eu me livro de uma e nem passam 24 horas voce já arruma uma pior e mais complicada ?????????????????????????????????????

Heheheh estou fazendo 3 projetos com AVR ao mesmo tempo, a cabeça tá entrando em curto cada vez que tenho de pensar nos seus "casos" !!!!!

Me dê um tempo, depois eu vejo esse seu "novo" caso, ok ?

Leonardo,

Bom ..... quando usava o 16F84, ele não tinha nenhum hardware ANALÓGICO para eu me preocupar, portanto não precisava usar o ALLDIGITAL.

Mas logo depois passei a usar um PIC que tem circuitos analógicos, e nesses casos temos de inicializar o ALLDIGITAL, e habilitar apenas a parte analógica indispensável para o uso em nosso programa.

Como depois verifiquei que esse comando não causava nenhum problema se o PIC não tiver nada analógico, fiz o famoso " o uso do cachimbo deixa a boca torta " .... nada melhor do que criar um HÁBITO, assim nunca me esqueço e evito alguns problemas que já me deixaram louco para resolver.

E desta maneira, como acontece muito, acabei passando batido na revisão do texto da apostila !

Porisso que falo que preciso de um revisor sempre que escrevo algo.... !

Gostou dessa enrolada toda em vez de dizer simplesmente :

ESQUECÍ ! ???????????

Um abraço a todos !

Paulo

PAULO,

Pega leve com os projetos ai, se nao vai fundir a cuca, e a turma ainda vai precisar muito de voce. kakakakakaka

Fiz os teste aqui com a nova versão e foi tranquilo.

E que sou muito ansioso, ai ja viu!!!!!

Mas quanto ao meu "novo" caso fique tranquilo, isto ja dura mais de cinco anos , posso esperar mais alguns.

Enquanto isso vou quebrando a cabeça aqui, e boa sorte ai com os AVRs.

E se não for segredo de "Estado" mostra ai depois pra turma.

Mas alguem ai que estiver acompanhando a 'novela' quiser ajudar fique a vontade,ficarei muito grato

Abraço

jfeliciano

  • 2 semanas depois...
Postado

Amigos do forum,

estou trabalhando a varios dias, nesse progeto, mais nÃo consigo avamÇar

conciste no seguinte, com um unico botÃo eu acendo o led e apago com o mesmo botÃo, estou usando o pic 12f675, aguardo retorno,

obrigado

  • 2 semanas depois...
Postado

Ola Paulo,

Depois do ultimo contato, as coisas por aqui deu uma pequena evoluida.

Ate que em fim aprendi a usar os shift registers, e consegui resolver aqueles "casos" dos 74hc595 e dos ucn5821, agora esta funcionando os leds juntamente com os reles, ja tenho um "seletor de entradas".

Agora ja estou me aventurando com o rotarys encoders.

Depois de muita pesquisas na rede, consegui encontrar um pequeno codigo para encoders em basic de um outro compilador, com pequenas modificaçoes consegui fazer funcionar no PSI.

Mas ai surgiu um problema,quando uso somente a rotina do encoder funciona de forma aceitavel, mas quando junto ela com o resto do programa, depedendo da posiçao que o encoder parar trava o resto do programa, so sai desta condição se movimentar o dito cujo, vou postar o codigo pra voce dar uma olhada e se puder me dar mais uma de suas preciosas ajuda.

Abraço

jfeliciano

"codigo para rotary encoders"

AllDigital

'ADCON1 = 0x0e

TRISB = 11111111b

TRISD = 0x00

'TRISC = 0x00

PORTB = 0

PORTD = 0

Symbol enc1 = PORTB.3 'PINO 1 DO ENCODER

Symbol enc2 = PORTB.4 'PINO 3DO ENCODER

Dim counter As Byte

counter = 0

Define LCD_LINES = 2

Define LCD_CHARS = 20

Define LCD_BITS = 8

Define LCD_DREG = PORTD

Define LCD_DBIT = 4

Define LCD_RSREG = PORTC

Define LCD_RSBIT = 5

Define LCD_RWREG = PORTC

Define LCD_RWBIT = 6

Define LCD_EREG = PORTC

Define LCD_EBIT = 7

Define LCD_READ_BUSY_FLAG = 1

Lcdinit 0

'--------------------------------------------------

Lcdcmdout LcdClear

Lcdout " USANDO UM ENCODER "

WaitMs 1000

Goto lcd

'INICIO LEITURA DO ENCODER

'----------------------------------------------------

encoder:

If enc1 = 0 Then

counter = counter + 1

If counter > 50 Then counter = 50

Goto lcd

Endif

If enc2 = 0 Then

counter = counter - 1

If counter < 0 Or counter > 50 Then counter = 0

Goto lcd

Endif

Goto encoder 'loop

'--------------------------------------

lcd:

Lcdcmdout LcdClear

Lcdout "VOLUME ", #counter

While enc1 = 0 Or enc2 = 0

WaitMs 10

Wend

Goto encoder

'FIM LEITURA DO ECONDER

Postado

PAULO, amigo

Amigos do forum,

estou trabalhando a varios dias, nesse progeto, mais nÃo consigo avamÇar

sei que pra muitos que tem facilidades de um aprendizado rápido,é tranquilo, mas no meu caso e um pouco devagar por isso que estou pedindo ajuda a todos, tres semanas estudando.

conciste no seguinte, com um unico botÃo eu acendo o led e apago com o mesmo botÃo, estou usando o pic 12f675, aguardo retorno,

obrigado

Postado

Grande amigo ma2008,nao e muito complicado fazer isso ,vamos pensar :confused: ...........

Eu faria assim:Eu ficaria lendo o valor do botao,no caso estaria em 1 botao solto(isso porque no hardware teria um resistor pull up ligado ao botao deixando ele sempre em nivel 1 quando solto).quando ele fosse pressionado iria pra zero o nivel logico então ligaria o led ,nisso eu setaria um sinalizador q iria ser meu guia agora, leria novamente o botao se ele fosse novamente a zero e o sinalizador estivesse setado eu apagaria o led e o sinalizador,e voltaria a ler novamente entendeu? seria assim:

repete:

botao =0 ?

goto le sinalizador

sinalizador =0?

nao

acende led

sim

apaga led

limpa sinalizador

goto repete

Postado

MA2008,

Segue este código, simulei e funcionou :

Define CONF_WORD = 0x31c4
'configurado para clock interno de 4 Mhz
'e GP3 como I/O em vez de Reset
Define CLOCK_FREQUENCY = 4
AllDigital

TRISIO = 00000010b 'essa e a maneira correta desse comando!
Symbol led = GP0
Symbol botao = GP1

led = 0

main:
If botao = 0 Then
led = Not led
Else
Goto main
Endif
main1:
WaitMs 50
If botao = 0 Then Goto main1
WaitMs 50
Goto main
End

Boa diversão !

Paulo

Arquivado

Este tópico foi arquivado e está fechado para 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...