Páginas: 1 [2] 3   Ir para o fundo
  Imprimir  
Autor Tópico: [Ajuda Programar]-pic16f....  (Lida 769 vezes)
resinba
Moderador Global
Cristal
*****
Offline Offline

Mensagens: 449


« Responder #15 em: Agosto 10, 2008, 00:51:46 »

Como me sinto mais há vontade com assembler, é com ele mesmo que estou a fazer o código... e claro que vou tentar explicar ao máximo o como lá cheguei, e passo a passo como o código foi desenvolvido...

Mas olha, posso levar ate ao fim da semana que vem... ou precisas do programa para ontem?
Registado

Por favor, alterem o meu email no msn pois tenho outro email dedicado aos foruns, e vou bloquear todos os que se encontram no antigo email.
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #16 em: Agosto 10, 2008, 00:56:33 »

não querendo abusar da sua boa vontade, gostaria de ter isso lá para terça feira... Mas se so poderes para daqui a 1 mes  Grin Grin Grin Grin Grin vou ter de esperar  Grin Grin Grin  Wink Contente
Registado
resinba
Moderador Global
Cristal
*****
Offline Offline

Mensagens: 449


« Responder #17 em: Agosto 10, 2008, 01:03:43 »

Olha não te quero enganar mas para terça feira vai ser muito difícil... é que só vou para minha casa no final de segunda feira...
e não vou me por a instalar o MPLAB neste pc que não é meu.
Mas até ao fim da proxima semana que vem, prometo que tenho o código feito, e simulado
Registado

Por favor, alterem o meu email no msn pois tenho outro email dedicado aos foruns, e vou bloquear todos os que se encontram no antigo email.
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #18 em: Agosto 10, 2008, 01:04:57 »

ok, fico a espera
Obrigado....
Registado
resinba
Moderador Global
Cristal
*****
Offline Offline

Mensagens: 449


« Responder #19 em: Agosto 13, 2008, 23:36:34 »

Bem aqui está o código...
espero que seja isto que precisas, uma nota muito importante...
- os pinos de entrada são os pinos do porto b, mais precisamente do RB0 ao RB5
- os pinos são activos low
- o programa só aceita um botão de cada vez, assim se estiverem mais que um botão a low esse define sempre o de menor peso.
- as saídas são no porto a mais precisamente RA0 a RA3
de resto não me lembro de mais.

aqui está o código em Assembler (com calma irei dizer o que cada parte faz).


   list      p=16F84A            ; list directive to define processor
   #include <p16F84A.inc>        ; processor specific variable definitions

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.




;***** VARIABLE DEFINITIONS
tempo        EQU     0x0C        ; variable used for context saving
flag   EQU     0x0D        ; variable used for context saving








;**********************************************************************
      ORG     0x000             ; processor reset vector
        call PIC_CONFIG
      goto    MAIN              ; go to beginning of program

;********************************
TEMPO ;*** Rotina que gera 5s ***
;********************************
   movlw d'100'
   movwf tempo
   return

;**************************************************
DELAY ;*** Rotina que provoca um atraso de 50ms ***
;**************************************************
   clrf TMR0
   clrf INTCON
   movlw d'60'
   movwf TMR0
LOOP_DELAY
   btfss INTCON, T0IF
      goto LOOP_DELAY
      decfsz tempo, 1
         goto LOOP_DELAY_1
   bsf flag,6
LOOP_DELAY_1
   clrf INTCON
   return

;**********************************
UM ;*** Rotina que gera o BCD 1 ***
;**********************************
   call DELAY
   btfsc PORTB, 0
      goto LOOP_UM_1
      movlw d'1'
   movwf PORTA
LOOP_UM
   btfss PORTB,0
      goto LOOP_UM
      call TEMPO
   goto MAIN
LOOP_UM_1
   bsf flag, 0
   goto MAIN

;************************************
DOIS ;*** Rotina que gera o BCD 2 ***
;************************************
   call DELAY
   btfsc PORTB, 1
      goto LOOP_DOIS_1
      movlw d'2'
   movwf PORTA
LOOP_DOIS
   btfss PORTB,1
      goto LOOP_DOIS
      call TEMPO
   goto MAIN
LOOP_DOIS_1
   bsf flag, 0
   goto MAIN

;************************************
TRES ;*** Rotina que gera o BCD 3 ***
;************************************
   call DELAY
   btfsc PORTB, 2
      goto LOOP_TRES_1
      movlw d'3'
   movwf PORTA
LOOP_TRES
   btfss PORTB,2
      goto LOOP_TRES
      call TEMPO
   goto MAIN
LOOP_TRES_1
   bsf flag, 0
   goto MAIN

;**************************************
QUATRO ;*** Rotina que gera o BCD 4 ***
;**************************************
   call DELAY
   btfsc PORTB, 3
      goto LOOP_QUATRO_1
      movlw d'4'
   movwf PORTA
LOOP_QUATRO
   btfss PORTB,3
      goto LOOP_QUATRO
      call TEMPO
   goto MAIN
LOOP_QUATRO_1
   bsf flag, 0
   goto MAIN

;*************************************
CINCO ;*** Rotina que gera o BCD 5 ***
;*************************************
   call DELAY
   btfsc PORTB, 4
      goto LOOP_CINCO_1
      movlw d'5'
   movwf PORTA
LOOP_CINCO
   btfss PORTB,4
      goto LOOP_UM
      call TEMPO
   goto MAIN
LOOP_CINCO_1
   bsf flag, 0
   goto MAIN

;************************************
SEIS ;*** Rotina que gera o BCD 6 ***
;************************************
   call DELAY
   btfsc PORTB, 5
      goto LOOP_SEIS_1
      movlw d'6'
   movwf PORTA
LOOP_SEIS
   btfss PORTB,5
      goto LOOP_SEIS
      call TEMPO
   goto MAIN
LOOP_SEIS_1
   bsf flag, 0
   goto MAIN

;**********************************************   
TESTA_TECLA ;*** Rotina que testa as teclas ***
;**********************************************
      btfss PORTB,0
         goto UM
         btfss PORTB,1
            goto DOIS
            btfss PORTB,2
               goto TRES
               btfss PORTB,3
                  goto QUATRO
                  btfss PORTB,4
                     goto CINCO
                     btfss PORTB,5
                        goto SEIS
                        bsf flag, 0
      goto MAIN   

;************************      
MAIN ;*** Rotina MAIN ***
;************************
   btfss flag, 0
      goto TESTA_TECLA
      bcf flag, 0
   btfss flag,6
      call DELAY
      btfss flag,6
         goto MAIN
         call TEMPO
   clrf flag
   clrf PORTA
   goto MAIN

;************************************************
PIC_CONFIG ;*** Rotina de configuração do PIC ***
;************************************************
   clrf PORTA
   clrf PORTB
   clrf flag
   clrf tempo
   clrf STATUS
   bsf STATUS, RP0
   movlw b'11111111'
   movwf TRISB
   movlw b'11110000'
   movwf TRISA
   movlw b'11000111'
   movwf OPTION_REG
   bcf STATUS, RP0
   call TEMPO
   return
      
;***************************
END ;*** Fim do programa ***                 
;***************************



e aqui fica o código em hexadecimal...

:020000040000FA
:100000006B20602864308C00080081018B013C303B
:1000100081000B1D09288C0B0E280D178B01080081
:1000200005200618192801308500061C1528022015
:1000300060280D14602805208618242802308500C9
:10004000861C2028022060280D146028052006192F
:100050002F2803308500061D2B28022060280D1450
:100060006028052086193A2804308500861D362828
:10007000022060280D1460280520061A4528053046
:100080008500061E1528022060280D146028052012
:10009000861A502806308500861E4C2802206028CB
:1000A0000D146028061C1028861C1B28061D2628F7
:1000B000861D3128061E3C28861E47280D14602800
:1000C0000D1C52280D100D1F05200D1F6028022049
:1000D0008D0185016028850186018D018C018301D8
:1000E0008316FF308600F0308500C7308100831210
:0400F00002200800E2
:02400E00F23F7F
:00000001FF


NÃO TE ESQUEÇAS DE LER A NOTA COM ATENÇÃO

Reporta depois os resultados.
« Última modificação: Agosto 14, 2008, 20:00:44 por resinba » Registado

Por favor, alterem o meu email no msn pois tenho outro email dedicado aos foruns, e vou bloquear todos os que se encontram no antigo email.
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #20 em: Agosto 14, 2008, 00:52:45 »

muito obrigado....

depois ei de por duvidas correspondente ao codigo e simulação no mplab

amanha vou testar o codigo n o faço agora porque ja estou muito cansado de lixar e pintar
Registado
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #21 em: Agosto 14, 2008, 23:03:03 »

boas,tive a testar o codio e ate agora nada Triste

tou a ligar as cenas como disseste, tpo o 7448 ao porto a, neste momento so tenhum um interruptor ligado ao porto b para n geral muita confusão com fios.

tou a utilizar o pic16f84a com um oscilador de 10M ja experimentei tambem com um de 12
e tou a utilizar os dois condensadores de 27pf

ao programar o pic da tudo bem sem erros


já agora estou a utilizar o programador por usb, estava com dificuldades em comunicar com ele, o problema era das drives...

resinba o que sugeres que faça? :S
Registado
resinba
Moderador Global
Cristal
*****
Offline Offline

Mensagens: 449


« Responder #22 em: Agosto 15, 2008, 01:08:20 »

o código foi feito para 4mhz (cristal), tenta usar uma malha rc em vez de cristal
verás os valores no datasheet do 16f84a
Registado

Por favor, alterem o meu email no msn pois tenho outro email dedicado aos foruns, e vou bloquear todos os que se encontram no antigo email.
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #23 em: Agosto 15, 2008, 11:54:14 »

tou a procura em placas velhas de elecrodomesticos de cristal de 4M se n encontrar vou tentar fazer como disseste com malha RC.

+ uma X obrigado pela ajuda a desenvolver esta aplicação  Wink Contente
Registado
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #24 em: Agosto 15, 2008, 15:58:47 »

 Grin Grin Grin Contente Contente Contente Grin Grin Grin a funcionar  Grin Grin Contente Contente Grin Grin

tava a comer um grave erro, n tava a ligar o mclr a nada
encontrei 3 cristais de 4M

Testes:

Au apicar  cristal de 4M e    um condensador e resistencai ao pino MCLR funcionou como esperado.. Contente
 tempo de 5seg é que é muito.
tive a inventar um pouco e com um cristal de 20M e dois condensadores de 47pf ficou a funcionar +/- como se pretende.
ao aplicar o cristal de 20M tive de por resistencias 10k a fazer um pullup ao porto b, se não comessava a mostrar numeros aliatorios.

agora falta testar o circuito no respectivo lugar. Já agora este circuito é para aplicar na caixa de velocidades de um carro, + propriamente no peugeot 106XSI

Já agora em relação ao codigo, comessando pelo tempo, percebo que metes os 100 que "multiplicar" com os 50 vai dar 5s certo? Mas n tou a perceber bem como é que é feito,  Hein
Registado
resinba
Moderador Global
Cristal
*****
Offline Offline

Mensagens: 449


« Responder #25 em: Agosto 15, 2008, 21:08:11 »

quais foram o problemas que te deparas-te com o código...
porque o que custou foi desenvolve-lo, agora é só alterações nada de mais...

Quanto há explicação irei fazê-la dentro de pouco tempo...
Abrirei um tópico na subsecção código, convém depois é o pessoal por duvidas sobre o que não perceber, pois posso não explicar bem certos pontos, não é por maldade... é mesmo por julgar ser banal... 

EDIT:
É para informar que o tópico já foi iniciado, aqui em baixo:

http://www.electronicapt.com/forum/index.php?topic=1464.0
« Última modificação: Agosto 15, 2008, 23:42:43 por resinba » Registado

Por favor, alterem o meu email no msn pois tenho outro email dedicado aos foruns, e vou bloquear todos os que se encontram no antigo email.
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #26 em: Agosto 16, 2008, 10:45:41 »

boas já tive a ver o codigo que esplicaste... mas mais logo vou imprimir e ver melhor...
Tou a deparar que a minha maior dificuldade é não saber determinadas instruçoes especificas do fic tal vomo o  movlw    movwf   btfss etc...
O pouco que sei de assembly foi que aprendi para o 8051 o que é um pouco diferente deste
Depois ei de por duvidas na outra secção
Registado
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #27 em: Agosto 17, 2008, 10:41:21 »

boas
respondendo a pergunta de problemas com o codigo,não é bem um problema é mais um ajuste

para funcionar bem com um cristal de 4M é preciso alterar o tempo para +/-1.5 2 segundos
Registado
bettencourt
Moderador Global
Chip
*****
Offline Offline

Mensagens: 608



« Responder #28 em: Agosto 17, 2008, 11:31:10 »

montagem em bradbord para fazer testes


caixa de velocidades onde vem um cena branca por baixo tem interruptores designados por micro switsh.


a caixa é igual citroen saxo, citroen AX
Registado
resinba
Moderador Global
Cristal
*****
Offline Offline

Mensagens: 449


« Responder #29 em: Agosto 17, 2008, 11:40:48 »

Olha agarras no wordpad e editas a seguinte linha do codigo:

:100000006B20602864308C00080081018B013C303B

alteras para:

:100000006B2060281E308C00080081018B013C303B

salvas, e gravas de novo no pic, com esta alteração ficas com o tempo reduzido para 1,5s quando usado um cristal de 4MHz, para o baucing ele usa um retardo de 50ms, mas isso já tu descobriste.
Registado

Por favor, alterem o meu email no msn pois tenho outro email dedicado aos foruns, e vou bloquear todos os que se encontram no antigo email.
Páginas: 1 [2] 3   Ir para o topo
  Imprimir  
 
Ir para: