-
Posts
34 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que Leonardo-SP postou
-
Saudações pessoal! É o segunte, estou com um projeto que necessita de comunicação entre dois 16F628A via RX/TX, onde o PIC master envia a variável "x" e o PIC slave recebe esta variável, e mostra o valor de "x" em um contador (três displays de 7 segmentos). A dúvida é a seguinte, comecei enviando "x" sendo o valor 5, o PIC slave recebia o valor correto e em seguida, dava um tempinho na contagem e acrescentava mais 5 ou 6 na contagem. Gostaria de saber se esse valor "a mais" é o buffer? Experimentalmente, fiz um código que, ao receber "x" descarrega em uma contagem primária onde o valor de "x" fica certinho, e em seguida abre uma contagem secundária onde é descarregado o buffer (eu acho) e é descartado. Abraço.
-
Rafael, não esqueça o AllDigital no seu código. Meu problema com o erro já foi resolvido, só comentei aqui para que se algum usuário do PSI, viesse a enfrentar o mesmo erro, já ter como base a minha experiência. A "omissão" do nível lógico no meu caso foi gerada por erro ao digitar, como mencionado anteriormente, eu não digitei o "1". Realmente é uma besteira, mas gera o erro, aí num programa grande a gente se perde procurando o "fantasma". O Programa foi eu que fiz, e já está finalizado. Jfeliciano, nesse projeto enfrentei o mesmo problema que você mencionou em posts anteriores, o reset dos posts durante o funcionamento do PIC. Vou descrever como eu fiz, veja o que você acha: ------------------------------ ... gosub resetports' ... end resetports led1=1 led2=1'' daí você estabelece o nível lógico de cada port ... Return -------------------------------- Dessa forma toda vez que precisar de "resetá-los" é só buscar "gosub resetports", note que não coloquei (entre o led1 e o led2) o waitus que o Paulo citou anteriormente, estou nos testes finais da placa, como não houve nenhum mal funcionamento, vou deixar assim. Tá uma beleza! PS: Em muitos exemplos citamos em nossos códigos um port sendo "led", mas isso é para facilitar a compreensão, na prática pode ser um NPN, PNP, fotoacoplador,..., acionando/interropendo o que desejar. Espero ter contribuído de alguma forma. Abraço.
-
Jfeliciano, o Paulo faz falta mesmo, gosto de ler até os posts dele em outros tópicos, sempre ajudando. Pessoal, se alguém estiver tendo problema com o PSI 6.91 Run-time error '5' O PSI não compila, dá o erro e fecha o programa, para eu descobrir isso levou um bom tempo, apaguei o valor lógico sem querer. A causa está na ausência do valor lógico como no exemplo abaixo: led=0 waitms 500 led= Fica aí a dica. Abraços...
-
Olá Binho11, Vou "tentar" explicar um dos motivos para o uso das variáveis. Imagine um projeto com o 16F877, são 33 I/O, as variáveis ajudam na identificação de cada PORT, facilitando a lógica e o desenvolvimento do programa. A princípio eu também estranhava e resumia tudo, da mesma forma que você citou, aí quando o número de PORTs aumenta vira uma salada! Passei por isso no mês passado! Use as variáveis e não esqueça dos comentários são muito importantes. Abraço e bons projetos.
-
Olá pessoal, Esses dias tava quebrando a cabeça para aumentar o valor do WaitMs, precisava de uma temporização de 2 horas para manter um LED aceso, resolvi da seguinte forma: '----------- Dim inicio As Byte Dim final As Byte final = 0 '----------- led: RB4 = 1 For inicio = 1 To 120 final = final + inicio WaitMs 60000 Next inicio RB4 = 0 End '------------ Pergunta: Tem outra forma de aumentar o WaitMs mais resumida? Estou trabalhando num projeto com o PIC 16F877, vou precisar de reproduzir mensagens de voz, serão quatro frases gravadas, alguém saberia indicar algum chip de voz com bom custo benefício? Abraços...
-
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]
-
[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!!! Abraço. [/Off-Topic]
-
Paulo, ontem mesmo fiz as modificações no programa que você sugeriu, simulei no PSI e ficou perfeito. Gravei o PIC, fiz as modificações na placa e funcionou certinho, porém, tive que aumentar o valor do WaitMs para evitar o funcionamento do pull-up nos "toques momentâneos". Não sei o que é, vou pesquisar. Obrigado pelos ensinamentos!!! [Edit] Pesquisando no Google, encontrei a informação "Rotina de Debounce / Debouncing": http://forum.clubedohardware.com.br/debouncing-iniciantes/712912 [Edit]
-
Mestre, no "Botão = 1 goto espera" eu modifico o estado dele para 1 clicando no pino correspondente RB3 no Microcontroller View do PSI, daí ele executa as rotinas e retorna a 0 aguardando o próximo clique. Se não clicar, o programa fica preso no laço. Se eu simular "Botão = 1 goto espera", o botão fica pressionado constantemente na simulação. Desulpe-me pela insistência, vou simular novamente e fazer um vídeo, aguarde. Mais uma vez obrigado por sua atenção. [Edit] Paulo, veja a simulação no PSI: YouTube - PSI.wmv Abraço. [Edit]
-
Então, o pessoal da " Ucontrol " usa essa nomenclatura RB3..., achei prático. Pessoal, estou pesquisando desde ontem e não encontro uma forma de resolver esse problema: PIC 16F84A Dim a As Byte Dim b As Byte Dim x As Byte Symbol botao = RB3 a = 1 x = 10 espera: If botao = 0 Then Goto espera [COLOR="Blue"]'botão foi pressionado (é só um clique)[/COLOR] If botao = 1 Then [COLOR="Red"]b = a + 1[/COLOR] If b > x Then Goto zerar If b < x Then Goto espera zerar: b = 0 Goto espera End Não sei como fazer o código para armazenar o valor "crescente" de b, estou pesquisando desde ontem, mas não encontrei nada a respeito, "acho" que tenho que usar o RA4 (timer/counter) Estou ficando igual criança quando o pai a ensina andar, é só trabalho! jfeliciano, gostei das "bagaças", parabéns!!! Abraço.
-
BINGO!!! Mestre, funcionou 100%, EXATAMENTE como eu queria, ou seja, seguindo a linha de raciocínio da apostila. Não fiz as modificações que você sugeriu no programa porque a simulação estava certinha no PSI, "porém", eu sabia que necessitava de alguns ajustes ou no soft ou no hard. Como você mesmo comentou, "há vários meios de atingir o objetivo, o importante é funcionar!" Segue o programa : PIC 16F84A ----------------------------- Define CONF_WORD = 0x3ff1 Define CLOCK_FREQUENCY = 4 TRISA = %00000 'todos como saída TRISB = %00001000 'RB3 entrada, demais saída Dim botao As Bit espera: 'aguarda botão ser pressionado botao = RB3 If botao = 1 Then Goto espera 'aguarda botão ser pressionado 'botão foi pressionado, somente um toque acende: RB6 = 1 'acende LED por 2 seg (no PSI 200ms) WaitMs 200 RB6 = 0 'apaga LED Goto espera End -------------------------------------- Considerações finais: 1° erro estava no circuito do "botão" RB3 tava ligado no 5V 2° erro: esqueci de modificar a lógica das portas quando fui gravar o PIC. Mais uma vez muito obrigado! [Editado] Resolvi deixar o programa pronto para rodar no PSI, quem quiser simular é só clicar no RB3 no "Microcontroller View" para executar as rotinas. Paulo, acho que assim ficou melhor.[Editado]
-
[Off-topic]Obrigado pelo convite!!! Eu pesco em duas modalidades esportiva e subaquática. [Off-topic] Voltando ao PSI, tomei uma surra ontem, passei o dia inteiro tentando fazer um LED acender (por 1seg) acionado por um botão. Veja o programa: PIC 16F84A Code Protection = OFF (por enquanto uso o CP desabilitado para verificar se o PIC foi gravado) --------------------- Define CONF_WORD = 0x3ff1 Define CLOCK_FREQUENCY = 4 TRISA = %00000 'todos como saída TRISB = %00001000 'RB3 entrada, demais saída Dim botao As Bit espera: 'aguarda botão ser pressionado botao = RB3 If botao = 0 Then Goto espera 'aguarda botão ser pressionado 'botão foi pressionado acende: RB6 = 1 'acende LED por 1 segundo( no PSI 200ms) WaitMs 200 RB6 = 0 'apaga LED Goto espera End ----------------------- A simulação está perfeita, depois do PIC gravado, e colocado na placa o LED não acende, acredito que o problema seja na tensão que estou aplicando no RB3. Em tempo, antes de gravar o PIC modifiquei a lógica das portas conforme a apostila. Coisas de iniciante...
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