Ir ao conteúdo
  • Cadastre-se

aphawk

Membro Pleno
  • Posts

    8.277
  • Cadastrado em

  • Última visita

Tudo que aphawk postou

  1. Pois é, cansei de pegar matrinxãs ... mas as pirararas nem quiseram saber de morder nenhuma isca, enfim, nem tudo é perfeito ! Dani, faz tempo mesmo, realmente esses modem gsm custam os olhos, mesmo na China estão na faixa de US$ 55 cada. O problema em fazer ele é só um : onde que arrumamos o transceptor gsm ( receptor e transmissor ) ? O protocolo até não é difícil, eu já fiz um modem para falar com os flightfones dos avioes ( 1989..... ) , no fundo é apenas mais um modem com um subset específico de comandos "AT" ( que saudades dos modens Hayes ... ), pode ser feito tudo em basic mesmo. Mas o hardware .......... Acho que por enquanto é melhor comprar o conjunto pronto viu Dani !!! Tche, o RESET é uma sequência de comandos, começa com uma leitura, depois vem algumas escritas com dados específicos, e finaliza com uma leitura. Veja essa sequência naquela figura do datasheet ok ? Depois, é só ficar lendo, mas para evitar surpresas lendo um bit de cada vez, eu preferí ler todos os bits e isolar apenas os que nos interessam. Isso foi feito para evitar que por um acaso daqueles quase impossíveis, quando voce estivesse lendo um bit o dado tenha mudado para um outro tom... tá certo que a chance é quase zero, mas existe ! Bom, testa num protoboard e ve o que acontece ok ? Um abraço a todos, e hoje vou pescar novamente bem cedinho ( daqui umas 4 horas .... ) Paulo
  2. Tche, Sem inicializar as variáveis, nada ia funcionar mesmo ... E a sequência de RESET está errada. Abaixo segue o programa corrigido, mas os valores de WAITMS estão todos grandes, apenas para rodar a simulação. Antes de gravar o PIC, coloque os valores corretos ok ? 'TRANSMISSÃO E RECEPÇAO DTMF 'PIC 16F628A Define CONF_WORD = 0x3f70 Define CLOCK_FREQUENCY = 4 Dim k As Byte Dim cs As Bit Dim rso As Bit Dim rw As Bit Dim fi2 As Bit Dim d0 As Bit Dim d1 As Bit Dim d2 As Bit Dim d3 As Bit Dim dados As Byte TRISA.6 = 0 TRISB.4 = 0 TRISB.7 = 0 TRISB.5 = 0 TRISA.0 = 0 fi2 = 0 reset: WaitMs 100 'ESPERA 100 MSEG ANTES DO RESET Gosub viraentrada cs = 0 rso = 1 Gosub le Gosub virasaida d0 = 0 d1 = 0 d2 = 0 d3 = 0 Gosub escreve d0 = 0 d1 = 0 d2 = 0 d3 = 0 Gosub escreve d0 = 0 d1 = 0 d2 = 0 d3 = 1 Gosub escreve d0 = 0 d1 = 0 d2 = 0 d3 = 0 Gosub escreve Gosub viraentrada cs = 0 rso = 1 Gosub le 'PRONTO , AQUI ACABOU O RESET pic_le_dados: 'ler do, d1, d2 e d3 dados = PORTB 'LE OS 8 BITS DE UMA VEZ dados = dados And 00001111b 'FILTRA OS 4 BITS DESEJADOS If dados = 9 Then 'tecla 9 PORTA.0 = 1 WaitMs 100 PORTA.0 = 0 Endif Goto pic_le_dados End escreve: 'faz a gravação no MT8880 PORTB.0 = d0 PORTB.1 = d1 PORTB.2 = d2 PORTB.3 = d3 PORTA.6 = cs PORTB.4 = rso PORTB.7 = 0 fi2 = 1 PORTB.5 = fi2 WaitMs 50 fi2 = 0 PORTB.5 = fi2 WaitMs 50 Return le: 'faz a leitura no MT8880 PORTA.6 = cs PORTB.4 = rso PORTB.7 = 1 fi2 = 1 PORTB.5 = fi2 WaitMs 50 fi2 = 0 PORTB.5 = fi2 WaitMs 50 dados = PORTB dados = dados And 00001111b Return virasaida: 'TRANSFORMA OS PINOS DO PIC EM SAIDA TRISB.0 = 0 'D0 TRISB.1 = 0 'D1 TRISB.2 = 0 'D2 TRISB.3 = 0 'D3 Return viraentrada: 'TRANSFORMA OS PINOS DO PIC EM ENTRADA TRISB.0 = 1 'D0 TRISB.1 = 1 'D1 TRISB.2 = 1 'D2 TRISB.3 = 1 'D3 Return Veja se agora deu certo, ok ? Paulo
  3. Tchecara, Na verdade, a informação toda está no datasheet... e interpretar o texto é algo em que é necessário ler bem literatura técnica em Inglês ! Usar o Google não ajuda muito nisso. O funcionamento está mais elucidado nos desenhos de temporização, e é nele que olhamos para termos uma ideia mais clara da sequência de operações que teremos de fazer para "conversar" com o CI desejado. Quanto ao que voce falou sobre a minha explicação, eu tento fazer um bom uso da experiência que eu acumulei e estou disposto a pelo menos tentar transmitir para quem , como você, está disposto a aprender. Existem algumas pessoas que me procuram apenas para resolver um problema de trabalho, e outras que eu percebo que querem mesmo aprender. Quanto maior o esforço que me mostram, maior vai ser o meu emprenho em que consigam realizar o que desejam ! Sou adepto do velho ditado : É melhor ensinar a pescar, do que dar o peixe já pego ! Manda bala no projeto, eu estou indo pescar e só volto amanhã de tarde. Boa diversão, Enio ! Paulo
  4. Oi Enio, não, a coisa funciona um pouco diferente : Em primeiro lugar, quem controla o sinal IRQ/CP é o MT8880, e não o PIC !!!!!!!!! Ou seja, voce vai ligar uma entrada do PIC nesse pino, entendeu ? é só de leitura, não é de escrita ! O PIC controla o sinal de clock (fi)2, e os outros sinais citados anteriormente. Lembre-se de que voce tem de primeiro sinalizar ao MT8880 se voce vai ler ou escrever, e só então voce pode mudar os pinos do PIC que estão ligados nos bits d0,d1,d2 e d3 do MT8880, pois quando voce quer gravar dados no MT8880 os pinos do PIC vão virar pinos de saida, e assim que voce gravar os dados, voce tem de transformar novamente os pinos do PIC em entradas, para poder receber os dados do MT8880 em uma operação de leitura, entendeu ? Na operação em que o PIC vai ler os dados do MT8880 : - normalmente voce já está mantendo o sinal de clock (fi)2 = 0 - Assim que voce perceber que o pino IRQ/CP foi para zero, voce pode ler os dados dos bits d0,d1,d2 e d3. Não precisa esperar tempo nenhum neste caso. Mas imagine que voce deseja transmitir um DTMF imediatamente após ter recebido um DTMF, voce tem de esperar os tais 2 milisegundos após o sinal INT/CP ir novamente para o nivel 1 , para garantir que não haja nenhum problema. Só aí voce pode fazer as operações de escrita no MT8880. Mas, para as operações de escrita, voce tem de simular o clock da maneira que eu descreví, com a temporização de 2 milisegundos. Na verdade, se voce fizer com o tempo de meio milisegundo também já dá, mas é melhor ter uma margem boa de segurança. Veja se entendeu ok ? Paulo
  5. Veja neste datasheet : http://pdf1.alldatasheet.com/datasheet-pdf/view/77086/MITEL/MT8880.html Repare a figura 16 . lá deixa bem claro 2 exemplos de sequência que voce tem de fazer. A primeira é o RESET do chip, e isto tem de ser feito uma vez, ANTES de voce fazer qualquer coisa, e lembre-se de esperar pelo menos 100 milisegundos antes de voce conversar com o chip. Esta sequência tem de ser feita apenas 1 vez ok ? Quanto voce conversa com o chip, voce tem de simular um clock, é para isso que serve o sinal (fi)2 !!!!! Veja agora o exemplo 2 dessa mesma figura 16, é um exemplo de uso do chip. Do jeito que está escrito, assume-se que voce vai ficar lendo toda hora o registro de status do chip, mas nada impede de voce ficar apenas esperando uma interrupção, repare a observação entre os passos 3 e 4 do exemplo 2 ! Na prática, voce PRIMEIRO define os valores de CS , RS0 e R/W, e só então voce simula o clock (fi)2 da seguinte maneira : - normalmente sempre deixe (fi)2 em nivel 0 . - Após voce colocar os valores de CS, RS0 e R/W, espere 1 milisegundo, depois coloque (fi)2 em nivel 1 por 1 milisegundo, e finalmente volte (fi)2 para o nivel 0. - Espere 2 milisegundos para usar os valores dos bits d0. d1, d2 e d3 . Pronto, operação concluida !!! Esta é a maneira de voce conversar com o chip. A sequência de dados da conversa está no próprio exemplo 2. Monte o circuito básico da figura 13 e mande bala ok ? Paulo
  6. Oi meu amigo, tudo bem sim, só descansando esperando prá engordar uns kilos até o dia 1 heheheheh ! Use o sinal CP/IRQ, pois quando ele vai para 0 significa que voce pode ler o sinal nos 4 pinos de saida. Aí, enquanto esse sinal não voltar para 1, voce simplesmente ignora qualquer leitura dos 4 bits de saida do MT8880. Quando o sinal voltar para 0, significa que tem um novo dado válido , ok ? Ainda acho que a maneira mais simples é usar um PIC, com um display 7 segmentos, assim você visualiza o dígito DTMF fácil. Primeiro, faça polling ( ou seja, fique sempre lendo o pino, sem usar interrupção ) do sinal CP/IRQ, depois, quando funcionar e voce tirar suas dúvidas com o 8880, mude seu programa e use uma interrupção do PIC, toda vez que tiver a transição de 1 para 0 no pino do PIC onde está ligado o CP/IRQ, voce le os 4 bits do MT8880 e armazena o DTMF lido numa variável, e use um flag para sinalizar que voce já leu ou não esse dado. Essa é a maneira mais correta de voce trabalhar ok ? Manda bala que é tranquilo isso ! Um abraço, Enio, e aguardamos novidades ! Paulo
  7. Opa, agora entendí o que voce quis dizer ! É uma boa ideia programar os números no PIC diretamente usando um telefone, sem dúvida ! Repare que o autor do projeto usou uma chave específica para esta função, assim fica bem mais fácil o programa. Olha, esse projeto é bem fácil de ser programado em Basic mesmo, e eu ainda faria algo diferente para incrementar : Quase sempre, os ladrões cortam a linha telefônica ANTES de fazer o assalto, faça um circuito detetor de tensão para medir a tensão da linha, caso ela seja menor do que 3 volts acione um alarme sonoro, tipo buzzer, para alertar o usuário de que a linha está sem funcionamento ! E também acione um relê para fazer algo diferente, por exemplo, acender todas as luzes de um local, ligar um aparelho de som, algo assim. Falo isso porque onde trabalhava aconteceu exatamente isso, os caras cortaram a linha e o alarme ficou inútil..... A próxima etapa é voce implementar um modem GSM , assim basta voce colocar um chip nele, e caso a discagem pela linha normal seja impossível, disque direto via celular, que tal ? Veja este site aqui : http://www.tato.ind.br/detalhesproduto.asp?id=94 Eles tem esses módulos que permitem tanto discar como atender via celular !!!! E o melhor, são fácilmente programáveis em Basic ! Bom, agora tá com voce ! Boa diversão, e depois conte como ficou o projeto. Paulo
  8. Hehehe voce gosta de coisa complicada ein ???? Não consegui entender o que que tem o teclado do telefone com o MT8880 e o PIC, mas posso te ajudar no Mitel MT8880. IRQ/CP - No modo de recepção, quando o CI detectar um tom válido, ele vai colocar essa linha em 0 volts durante algum tempo, sinalizando que existe um dado válido para ser lido. Ф2 - É uma entrada tipo CLOCK , voce precisa gerar esse clock quando quiser acessar o CI para ler ou gravar alguma informação. Mas fora disto, TEM DE ESTAR INATIVO ok ? RS0 - Seleciona o registrador a ser acessado na escrita ou na leitura. O CI possui 2 registradores internos, um é o Control Register, e o outro é o Data Register. Veja detalhes no datasheet, página 4-41, tabela 2. Achei um circuito com o MT8880 e um PIC, que é EXATAMENTE o que voce está querendo fazer : http://electronics-diy.com/electronic_schematic.php?id=597 Ainda acho bem mais simples o CI da Holtek .... Paulo
  9. Opa, não tem nada de brilhante não, é que nessas horas anos de experiência fazem a diferença, Tchecara, e é essa experiência que eu tento passar aqui para facilitar aos amigos que estejam precisando. O que foi o mais importante para mim é que voce não está pedindo uma solução pronta, e sim apenas um caminho para voce mesmo trilhar e aprender com a solução ! Isso já me mostra que voce vai longe com os microcontroladores, pois vontade voce tem, porisso que fiz questão de te passar os links para ter a certeza de que voce vai seguir o caminho correto ! Mais uma vez, estou ä disposição para qualquer dúvida, ok ? Boa diversão !!!! Paulo
  10. Tchecara, voce pode fazer isto de maneira bem fácil, já que as frequências envolvidas são baixas. O DTMF nada mais é do que duas freqências sobrepostas, e voce pode fazer isto simplesmente com duas redes R/2R, cada uma delas ligada a 4 saidas do PIC, gerando um sinal ANALÓGICO que tem 16 níveis de tensão diferentes, controlados pelo TIMER1 do PIC que servirá de base de tempo para sintetizarmos as 2 frequências ao mesmo tempo, e somando as duas saidas usando um simples amplificador operacional e um filtro passa-baixas. Embora seja a maneira mais barata, é a mais complexa de se fazer também a nivel de software, e não acho este o melhor caminho para quem está iniciando com microcontroladores. O caminho mais simples é voce utilizar um CI próprio para isto, aqui no Brasil encontramos fácil estes dois CI's da Holtek, que são geradores de DTMF : HT9200A - usa apenas interface serial de 5 bits. HT9200B - usa tanto serial como PARALELA ( bem simples !!!! ) Segue o link do datasheet : http://www.digchip.com/datasheets/parts/datasheet/196/HT9200A-pdf.php E para o teclado, use um teclado matricial de 12 teclas, codificado como matrix 4X3 ( vai precisar de 7 pinos de entrada ) que voce já compra prontinho, próprio para uso em microprocessadpres, a um custo bem baixo. A rotina em BASIC para tratamento deste teclado está na própria página de exemplos do fabricante do programa PIC SIMULATOR IDE, voce pode copiar e mudar para o seu uso. Segue o link para voce visualizar, o que eu cito aqui está no EXAMPLE 5 ( aqui o teclado é de 16 teclas, tipo 4X4, mas é só voce alterar para 4X3 ) : http://www.oshonsoft.com/picbasiccompilerexamples.html Se voce optar pelo ci HT9200B, basta usar 5 pinos de saida do PIC para fazer todo o controle, e isto fica muiiiito simples. Quanto a usar a EPROM do PIC, basta ler com atenção o tutorial que eu escreví, ou apenas olhar direto a página onde encontramos a explicação do uso da linguagem do PSI , reproduzo aqui o que te interessa, e veja que não poderia ser mais simples ● Using internal EEPROM memory Access to EEPROM data memory can be programmed using READ and WRITE statements. The first argument is the address of a byte in EEPROM memory and can be a constant or Byte variable. The second argument is data that is read or written (for READ statement it must be a Byte variable). It is suggested to keep interrupts disabled during the execution of WRITE statement. Dim x As Byte Dim y As Byte x = 10 Read x, y Write 11, y Viu como é simples ? Como dica, tanto o teclado como os CI's da Holtek podem ser encontrados no Mercado Livre ok ? Boa montagem ! Paulo
  11. Legal, Tchê !!!! Dá uma olhada no tutorial, tem um exemplo que usa 2 displays de 7 segmentos que são multiplexados , usando interrupção. Dá para ver o funcionamento na simulação, e é muito bom para ilustrar o funcionamento do programa principal e das interrupções. Agora, este programa que estamos discutindo nos tópicos anteriores é um excelente uso do TIMER1, grande maioria das pessoas sabe apenas como usar o TIMER0. Só para lembrar, nada impede que sejam usados OS DOIS TIMERS ao mesmo tempo, cada um deles gerando uma interrupção com finalidade diferentes. Por exemplo, voce poderia fazer o TIMER0 gerar uma base de tempo tipo um relógio, e o TIMER1 fica responsável por fazer várias tarefas com horário programado. Uma ideia bem poderosa é essa aqui : - TIMER0 gerando uma base de tempo para relógio, mantendo hora, minuto e segundo. Esta interrupção seria ativada 100 vezes por segundo ( a cada 10 milisegundos) . - TIMER1 ativado a cada 1 segundo , e que atenderia uma tabela de horários pré-definidos. Por exemplo, uma tabela de vários dispositivs a serem ligados em um horário e desligados em outro. Essa rotina simplesmente lê a hora, e ve se é para ativar ou desativar algum dispositivo em função da tabela. A um processo desse tipo damos o nome de ESCALADOR DE TAREFAS. É bem fácil de ser feito usando uma máquina de estados ( sugiro pesquisar o funcionamento disto, será muito útil no futuro ! ) . E o programa principal estaria cuidando de outras tarefas, por exemplo, interface com o usuário via teclado e display, e tratamento de dispositivos de segurança. Enfim, para usar um PIC, independente da linguagem, temos de saber também conceitos de programação, e por mais que voce leia, pode acreditar que só com a prática que voce vai saber resolver os problemas . Sabe, fico cahteado de ver que hoje em dia, quando temos hardwares como os PIC´s e os AVR´s , tão poderosos e fáceis de programar, eu esteja velho demais para fazer projetos realmente grandiosos..... mas estou tentando passar isso para a nova geração, que são vocês que estão lendo este fórum ! Bons projetos, amigo Tchê ! Paulo
  12. Pois é exatamente esse o poder das interrupções !!!!!Veja, o nosso programa principal fica simplesmente testando o valor de flag a todo instante, e se ele lê flag=1 ele aciona a saida GP0. Mais nada ! Agora, quem controla o valor de flag ? É a rotina de interrupção ! A cada 500 mseg, o programa principal é interronpido, e o controle é passado para a rotina de interrupção. Essa rotina simplesmente incrementa o contador, e verifica se ele atingiu o valor desejado ( 120 ) . Se não atingiu, a rotina de interrupção prepara de novo o valor para o timer1, ( ou seja, ele esperar mais 500 mseg antes de interromper novamente ) , e encerra a rotina , devolvendo o controle ao programa principal, que vai continuar a mesma tarefa que ele estava fazendo, que é o tal do loop início. Caso a rotina de interrupção tenha incrementado o contador 120 vezes, ela faz flag = 1 , e assim que a rotina terminar e o programa principal continuar, ele vai perceber que mudou o valor de flag. Simples, não é ? Agora, caso voce tenha de ficar mudando o valor de GP0, pode ser feito tanto na rotina de interrupção, mediante mudança no conteúdo de contador, ou até mesmo no programa principal ( no loop início ). Veja se conseguiu entender, meu amigo, sugiro ler mais um pouco na apostila do tutorial sobre os usos das interrupções nos outros exemplos, isso vai te abrir novas idéias ok ? A resposta certa para a sua pergunta é esta : o programa nunca sai daquele loop ( ciclo início ), do jeito que está escrito ! Mas quando ocorre uma interrupção, o programa pára, e quem é executada é a rotina de interrupção. Quando esta rotina termina, o programa volta no mesmo ponto onde ele estava, que é executar o loop infinitas vezes ! Mas qualquer variável do programa pode ter seu valor alterado dentro da rotina de interrupção , e é graças a isto que o programa funciona ! Paulo
  13. Tche, Alguma coisa está errada em sua simulação, aqui funcionou direitinho, eu só mudei os valores de TIMER1 e de CONTADOR para fazer a simulação, e logo o LED acendeu em GP0. Não montei o circuito no protoboard, mas é tão simples que não tem como dar errado ! Segue o programa alterado para testar a simulação, repare no que está na cor Vermelha : 'PIC 12F629 Define CONF_WORD = 0x31c5 'int osc clock out Define CLOCK_FREQUENCY = 4 TRISIO = 111100b Dim contador As Word Dim flag As Bit flag = 0 contador = 0 GP0 = 0 'saida inicialmente em nivel 0 '"configuração tmr1" 500 ms X 120 = 1 minuto T1CON.TMR1CS = 0 'usar o clock interno T1CON.T1CKPS0 = 1 'Prescaler 1:8 T1CON.T1CKPS1 = 1 [COLOR=Red]TMR1H = 0xff[/COLOR] TMR1L = 0xdc T1CON.TMR1ON = 1 'habilita a contagem do TIMER1 PIE1.TMR1IE = 1 'habilita a interrupção do TIMER1 INTCON.PEIE = 1 'habilita todas as interrupções não mascaradas INTCON.GIE = 1 'habilita interrupçao global Enable 'agora, o programa fica esperando passar o tempo, 'observando o valor de flag. 'quando passar o tempo determinado, liga a saida GP0 inicio: If flag = 1 Then GP0 = 1 'liga a saida GP0 ( passou 1 minuto ! ) Endif Goto inicio End On Interrupt 'Rotina de tratamento de interrupção Save System 'salva o contexto, use sempre contador = contador + 1 [COLOR=Red]If contador = 5 Then[/COLOR] flag = 1 Endif [COLOR=Red]TMR1H = 0xff 'reinicializa o timer 1 !!!![/COLOR] TMR1L = 0xdc PIR1.TMR1IF = 0 'hsbilita a interrupção novamente Resume Veja se você selecionou o modelo do PIC correto, e coloque um LED na saida GP0 para você ver. Use a simulação no modo ULTIMATE, minimize a janela do compilador Basic para rodar mais rápido. Use a opção WATCH VARIABLES para ver o incremento de CONTADOR ok ? Paulo
  14. Tche, tá mais fácil do que voce imagina. Veja o código correto : 'PIC 12F629 Define CONF_WORD =[COLOR=Red] 0x31c5[/COLOR] 'int osc clock out Define CLOCK_FREQUENCY = 4 TRISIO = 111100b Dim contador As Word Dim flag As Bit flag = 0 contador = 0 [COLOR=Red]GP0 = 0[/COLOR] 'saida inicialmente em nivel 0 '"configuração tmr1" 500 ms X 120 = 1 minuto T1CON.TMR1CS = 0 'usar o clock interno T1CON.T1CKPS0 = 1 'Prescaler 1:8 T1CON.T1CKPS1 = 1 TMR1H = 0x0b TMR1L = 0xdc T1CON.TMR1ON = 1 'habilita a contagem do TIMER1 PIE1.TMR1IE = 1 'habilita a interrupção do TIMER1 INTCON.PEIE = 1 'habilita todas as interrupções não mascaradas INTCON.GIE = 1 'habilita interrupçao global Enable [COLOR=Red]'agora, o programa fica esperando passar o tempo, 'observando o valor de flag. 'quando passar o tempo determinado, liga a saida GP0 inicio: If flag = 1 Then GP0 = 1 'liga a saida GP0 ( passou 1 minuto ! ) Endif Goto inicio [/COLOR] End On Interrupt 'Rotina de tratamento de interrupção Save System 'salva o contexto, use sempre contador = contador + 1 If contador = 120 Then flag = 1 Endif [COLOR=Red]TMR1H = 0x0b 'reinicializa o timer 1 !!!! TMR1L = 0xdc[/COLOR] PIR1.TMR1IF = 0 'habilita a interrupção novamente Resume Return Em vermelho tem as alterações que eu fiz. O programa espera 1 minuto, e só então liga a saida GP0 com nivel lógico 1. Cuidado na simulação, ou voce vai esperar um tempãoooo no seu micro ! Para simular, mude os valores dos timers e o valor de contador ( por exemplo, 5 em vez de 120 ) . Cuidado que sua CONFIG WORD estava errada ok ? Veja se resolveu ! Paulo
  15. É isso aí Jorge !!!! Só que tem um truque quando usamos mais de uma interrupção : TEMOS DE SABER QUEM ( qual hardware do PIC ) QUE GEROU A INTERRUPÇÃO, DESVIANDO PARA CADA UMA DAS ROTINAS RESPECTIVAS ! Ou seja, temos de analisar o registrador que mostra qual a interrupção que está ativa no momento ok ? Ah, Tchê, os valores que o Jorge passou no Timer0 devem ser recalculados caso voce use ele para gerar o "trem de pulsos" ok ? Manda bala Tchê ! Paulo
  16. Po.... vou ter de tentar entender esse rolo mesmo né ........ Bom, a maneira certá é mesmo usando interrupção do TIMER1 .... o Jorge tá certinho ! A ideia é fazer um relógio usando as interrupções, assim quando for começar os tais 2 minutos, voce fica checando se o tempo passou e checando o nível da porta, em um loop, que se repete enquanto os 2 minutos não acabam .... Se precisar mesmo fazer o trem de pulso, sugiro usar também o TIMER0 para isso, controlado por um flag que é setado FORA das interrupções. Já pensou um programinha usando os 2 timers, por interrupção ??? ( isso se esse PIC tem os 2 timers .... ) Agora, TCHECARA, sugiro ler o tutorial, para entender o uso do TIMER com interrupção ok ? Paulo
  17. Nossa mãe do Céu ..... já que o Jorge tá te ajudando, vou fingir que nem ví este tópico ...... Eita código meio maluco hihihihihihihihi Manda bala Jorge !!!!!!!!!!!!! Paulo
  18. Eu também comprei exatamente esse, e veio com uma placa de fenolite comum, bem simples, sem verniz, e eu mesmo dei uma "ajeitada" nela. Também fiquei maluco com os Jumpers, e o vendedor me respondeu e mandou uns arquivos de documentação ( ???? ) e os programas de gravação. Mas infelizmente não funcionou de jeito nenhum no Windows 7, tive de instalar um Windows XP numa partição para usar ele. No XP funcionou perfeitamente com o ATMEGA8 e ATMEGA16. Paulo
  19. Caramba, que azar, infelizmente essas coisas acontecem. Olha, embora tinha aquele erro de descrição no texto, o projeto funciona sim, eu mesmo simulei e montei todos os circuitos em protoboard, porisso sei que eles estão corretos. Pode ser que eu tenha me enganado em algum texto explicativo, mas que funcionam, funcionam !!!!! Tche, pode perguntar o que quiser, não fique encabulado não... é para isso que o tutorial foi escrito, para que vocês aprendam, peguem experiência, e claro que as dúvidas são sempre naturais ! Só peço que tenham um pouco de paciência, pois eu tenho de "voltar" a minha cabeça para o tutorial novamente, para entender qual a dúvida, e poder esclarecer da melhor forma possível, e isso às vezes pode demorar um ou mais dias, dependendo do que que eu esteja envolvido no momento. Um abraço a todos ! Paulo
  20. Tche, Acabei de ler a sua dúvida, e a resposta do Jorge. voce tem razão, eu errei quando falei dos bits 0 a 6 serem saida e o 7 ser enrtrada ! Na verdade, esse erro o corre porque eu mudei o circuito e esqueci de mudar o programa .... mas o funcionamento do programa não é alterado, mas realmente o comentário está errado. Vou corrigir o trecho abaixo , e pedir ao amigo BCPetronzio para mudar o tutorial. O texto correto é o que se segue: Quanto ao que voce falou : Eu não disse que a sequencia binária de um byte é rb0rb1......rb7 !!! Como o texto estava errado, voce intuiu isso a partir dos meus comentários. Mas temos sempre de representar um numero, não importa qual a base dele, tendo os maiores pesos colocados à esquerda dos menores pesos. Para deixar claro, sempre escrevemos um numero binário com o menor bit à direita, e o maior bit à esquerda. Exemplo : o numero 169 ( em decimal ) se escreve assim em binário : 10101001, e em termos de bits, temos : b7- 1 b6- 0 b5- 1 b4- 0 b3- 1 b2- 0 b1- 0 b0- 1 Valeu , amigo Tche !!!!!!!! Isso mostra que voce está mesmo lendo e entendendo os passos corretamente ! Paulo
  21. Ok, Dani, achei um monte de coisa errada.... já te enviei uma versão que a meu ver está funcionando. Mas vou te pedir uma coisa, não fique colocando aqui no Fórum esse programa, pois voce está fazendo tipo TENTATIVA E ERRO ! Cara, leia primeiro o TUTORIAL, siga os exemplos, leia as dicas, assim ficará bem mais fácil para voce acertar. Lembre-se que este tópico é para iniciantes em PIC e programação com o PSI ; se voce continuar com dúvida em seu programa, crie um novo tópico, assim poderemos te ajudar diretamente no seu tópico, evitando aumentar muito as páginas deste tópico enquanto solucionamos o seu problema ok ? Desculpe pedir isto, mas se continuarmos postando aqui um monte de códigos, fica complicado para o pessoal mais novo seguir as dicas ok ? Paulo
  22. Dani, Hahahaha meu, tá pensando que eu sou Einstein é ????? Mais tarde, quando eu estiver em casa eu dou uma olhada e te falo. Mas adianta o que que esse programa tem de fazer ok ? Paulo
  23. Legal, não é, Jorge ??? Eu já tive de apelar para isso também ....... e deu certo !!!! Porisso que insisto no PSI, para quem quer mesmo aprender a usar Pics ! Paulo
  24. Dani, te mandei uma msg privada , é melhor falarmos via MSN senão vai longe aqui heheheh. Paulo
  25. Dehsantana, Tem algumas "feras" aqui no Fórum que estão escrevendo um tutorial em Assembler, e olha que a turma aqui entende bem disso ! Teremos de esperar mais algum tempo, até ficar pronto, mas vaivaler a pena ! Eu não entendo quase nada de Assembler, porisso que faço tudo em Basic, usando o PIC SIMULATOR IDE, se quiser dar uma olhada, quem sabe te ajuda , veja aqui as duas partes : http://www.4shared.com/file/117938802/8f95b920/INTRODUO_AO_USO_DE_PIC.html http://www.4shared.com/file/134451544/3759fe56/INTRODUO_AO_USO_DE_PIC_-_PARTE_2.html Boa sorte meu amigo! Paulo

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!