Piscar 8 leds em sequencia

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Piscar 8 leds em sequencia

Mensagempor wgc » 18 Jul 2007 14:17

Estou com um pequeno problema de memoria, tem uns 3 ou 4 anos que nao mecho com uC, hj fui pegar meu gravador de 8051 mas ele resolveu entrar de greve e nao funciona. Entao decidi usar os pics.
Tenho uma duvida ridicula mas necessito sana-la para recomecar a programar em uC.

Bom la vai...

Qual PIC e como eu faco para fazer 8 leds piscar em sequencia e com tempos diferentes um do outro?

Achei aqui nas minhas gavetas 4 pic 16f84a acredito que da para fazer esse mini projeto com ele nao?
wgc
Bit
 
Mensagens: 12
Registrado em: 18 Jul 2007 10:22

Mensagempor dennisviana » 18 Jul 2007 15:16

Prezado wgc,


Voce pode sim usar o PIC 16F84, desde que use os dois Ports(A e B), escreva mais sobre a sequência que deseja implementar e eu tenterei lhe ajudar.



Atenciosamente,





Dennis Viana
Automação e Eletrônica
dennisviana
Bit
 
Mensagens: 18
Registrado em: 21 Mar 2007 20:16
Localização: Salvador - BA

Mensagempor phophollety » 18 Jul 2007 18:18

Pode carregar 8 sequencias de bits...

assim:

movlw b'00000001'
movwf portb
call timer

movlw b'00000010
movwf portb
call timer

e assim vai...

Ou utilizar o comando de rotação de bits

RLF ou RRF
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor tcpipchip » 18 Jul 2007 18:45

Antes de rotacionar, zere o CARRY
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor phophollety » 18 Jul 2007 18:50

Humm verdade.. esqueci deste detalhe...

Amigo, pegue algum aplicattion note no site da microchip...
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor valmy » 18 Jul 2007 19:38

Tenho um projeto de sequencial com vários efeitos utilizando o 16f84.
valmy
Bit
 
Mensagens: 5
Registrado em: 26 Mar 2007 19:08

Mensagempor phophollety » 18 Jul 2007 20:15

Esse programinha foi um dos meus primeiros, faz um tempo já...

Se quiser testar.. ele é bem arcaico.. mas funcionava hhe

; PROGRAMA PARA CONTROLE DE LEDS COM 4 SEQUENCIAS DE EFEITOS


LIST P=PIC16F84 ; DEFINE O TIPO DE uC A SER UTILIZADO
INCLUDE P16F84.INC ; ARQUIVO PADRAO MICROCHIP PARA O uC DEFINIDO
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
; CONFIGURACOES DOS BITS INTERNOS, OSCILADOR XT (CRISTAL), WATCH DOG TIMER DESLIGADO
; POWER TIMER ON LIGADO E CODE PROTEC DESLIGADO

; ZONA DE ETIQUETAS
CNT500U EQU 0A ; 500uS CONTADOR
CNT1M EQU 0B ; 1mS CONTADOR
CNT100M EQU 0C ; 100mS CONTADOR
CNT500M EQU 0D ; 500mS CONTADOR
CNT1S EQU 0E ; 1S CONTADOR
#DEFINE BT0 PORTA,1 ; DEFINE BT0 EM PORTA 0
#DEFINE BT1 PORTA,2 ; DEFINE BT0 EM PORTA 1
#DEFINE BT2 PORTA,3 ; DEFINE BT0 EM PORTA 2
#DEFINE BT3 PORTA,4 ; DEFINE BT0 EM PORTA 3
#DEFINE CS0 FLAGS,0 ; DEFINE O FLAG CS 0
#DEFINE CS1 FLAGS,1 ; DEFINE O FLAG CS 1
#DEFINE CS2 FLAGS,2 ; DEFINE O FLAG CS 2

; COMBINACOES DE SAIDA PARA CONTROLE
;COMBINACAO 1
C0 EQU B'10000000'
C1 EQU B'01000000'
C2 EQU B'00100000'
C3 EQU B'00010000'
C4 EQU B'00001000'
C5 EQU B'00000100'
C6 EQU B'00000010'
C7 EQU B'00000001'

;COMBINACAO 2
C10 EQU B'00000001'
C11 EQU B'00000010'
C12 EQU B'00000100'
C13 EQU B'00001000'
C14 EQU B'00010000'
C15 EQU B'00100000'
C16 EQU B'01000000'
C17 EQU B'10000000'

;COBINAÇAO 3
C20 EQU B'10000001'
C21 EQU B'01000010'
C22 EQU B'00100100'
C23 EQU B'00011000'
C24 EQU B'00011000'
C25 EQU B'00100100'
C26 EQU B'01000010'
C27 EQU B'10000001'

; PROCESSOS INICIAIS

ORG 0X00 ;RESET VECTOR
GOTO INICIO ;VAI PARA INICIO
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMORIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MEMORIA
CBLOCK 0X20 ;ENDERECO INICIAL DA MEMORIA DO USUARIO
FLAGS ;INCLUI FLAGS NO BLOCO DE MEMORIA
ENDC ;FIM DO BLOCO DE MEMORIA
ORG 0X04 ;ENDERECO INICIAL DA INTERRUPCAO
RETFIE ;RETORNA DA INTERRUPCAO

INICIO BSF STATUS,RP0 ;ALTERA PARA O BANCO 1
MOVLW H'FF' ;SETA O MODO DE ENTRADA DE DADOS
MOVWF TRISA ;SETA PORTO A PARA O MODO ENTRADA
CLRF TRISB ;SETA PORTO B PARA O MODO SAIDA
BCF STATUS,RP0 ;ALTERA PARA O BANCO 0
MOVLW H'00' ;SETA DADO LED OFF
MOVWF PORTB ;DADO DE SAIDA
CLRF PORTA ;LIMPA TODA O PORTO A
CLRF PORTB ;LIMPA TODO O PORTO B
BCF CS0 ;IMPOE 0 NO FLAG CS0
BCF CS1 ;IMPOE 0 NO FLAG CS1
BCF CS2 ;IMPOE 0 NO FLAG CS2

; ROTINA PRINCIPAL

TESTA
BTFSS BT0 ;TESTA BT0 SE = 1 TESTA O BT1, SE = 0 VAI PARA CB0
GOTO CB0 ;VAI PARA CB0
BTFSS BT1 ;TESTA BT1 SE = 1 TESTA O BT2, SE = 0 VAI PARA CB1
GOTO CB1 ;VAI PARA CB1
BTFSS BT2 ;TESTA BT2 SE = 1 TESTA O BT3, SE = 0 VAI PARA CB2
GOTO CB2 ;VAI PARA CB2
BTFSC CS0 ;TESTA CS0 SE = 1 TESTA O BT1, SE = 0 VAI PARA CB0
GOTO CB0 ;VAI PARA CB0
BTFSC CS1 ;TESTA CS1 SE = 1 TESTA O BT2, SE = 0 VAI PARA CB1
GOTO CB1 ;VAI PARA CB1
BTFSC CS2 ;TESTA CS2 SE = 1 TESTA O BT3, SE = 0 VAI PARA CB2
GOTO CB2 ;VAI PARA CB2
GOTO TESTA ;VAI PARA TESTA PARA REINICIAR O CICLO

CB0 BSF CS0 ;IMPOE 1 NO FLAG CS0
BCF CS1 ;IMPOE 0 NO FLAG CS1
BCF CS2 ;IMPOE 0 NO FLAG CS2
MOVLW C0 ;CARREGA C0 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C1 ;CARREGA C1 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C2 ;CARREGA C2 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C3 ;CARREGA C3 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C4 ;CARREGA C4 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C5 ;CARREGA C5 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C6 ;CARREGA C5 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C7 ;CARREGA C5 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
CLRF PORTB ;LIMPA O PORTO B
GOTO TESTA ;VAI PARA TESTA

CB1 BSF CS1 ;IMPOE 1 NO FLAG CS1
BCF CS0 ;IMPOE 0 NO FLAG CS0
BCF CS2 ;IMPOE 0 NO FLAG CS2
MOVLW C10 ;CARREGA C0 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C11 ;CARREGA C11 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C12 ;CARREGA C12 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C13 ;CARREGA C13 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C14 ;CARREGA C14 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C15 ;CARREGA C15 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C16 ;CARREGA C16 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C17 ;CARREGA C17 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
CLRF PORTB ;LIMPA O PORTO B
GOTO TESTA ;VAI PARA TESTA

CB2 BSF CS2 ;IMPOE 1 NO FLAG CS2
BCF CS1 ;IMPOE 0 NO FLAG CS1
BCF CS0 ;IMPOE 0 NO FLAG CS0
MOVLW C20 ;CARREGA C0 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C21 ;CARREGA C21 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C22 ;CARREGA C22 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C23 ;CARREGA C23 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C24 ;CARREGA C24 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C25 ;CARREGA C25 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C26 ;CARREGA C26 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
MOVLW C27 ;CARREGA C27 EM WORK
MOVWF PORTB ;MOVE O DADO DE WORK PARA O PORTO B
CALL T100M ;CHAMA T100M
CLRF PORTB ;LIMPA O PORTO B
GOTO TESTA ;VAI PARA TESTA

; TEMPORIZADOR DE 1mSEC
T1M MOVLW D'2' ;(1) SETA LOOP CNT1
MOVWF CNT1M ;(1) SALVA LOOP CNT1
TM1LP1 MOVLW D'249' ;(1)*2 SETA LOOP CNT2
MOVWF CNT500U ;(1)*2 SALV LOOP CNT2
TM1LP2 NOP ;(1)*249*2 CICLO INOPERANTE PARA COMPENSACAO
NOP ;(1)*249*2 CICLO INOPERANTE PARA COMPENSACAO
DECFSZ CNT500U,CNT500U;F ;(1)*249*2 CNT500U-1=0 ?
GOTO TM1LP2 ;(2)*248*2 NAO, CONTINUE
DECFSZ CNT500U,CNT500U;F ;(1)*2 CNT1M-1=0 ?
GOTO TM1LP1 ;(2) NAO. CONTINUE
RETURN ;(2) SIM. CNT END
;TOTAL 2501*0.4USEC=1MSEC

; TEMPORIZADOR DE 100mSEC
T100M MOVLW D'249' ;SETA LOOP COUNTER
MOVWF CNT100M ;SALVA LOOP COUNTER
TM2LP CALL T1M ;1MSEC SUBROTINA
DECFSZ CNT100M,CNT100M;CNT100MCNT100MF ;CNT100M - 1 = 0 ?
GOTO TM2LP ;NAO, CONTINUE
RETURN ;SIM, COUNT END

END ;FIM DE PROGRAMA
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor ze » 20 Jul 2007 13:37

pode tentar algo como:

unsigned char const tabled[]={
0b10000000,
0b01000000,
0b00100000,
0b00010000,
0b00001000,
0b00000100,
0b00000010,
0b00000001,

0b00000001,
0b00000010,
0b00000100,
0b00001000,
0b00010000,
0b00100000,
0b01000000,
0b10000000,

0b10000001,
0b01000010,
0b00100100,
0b00011000,
0b00011000,
0b00100100,
0b01000010,
0b10000001,

};
void main (void)
{
unsined char x;
//inicialização das portas, registros, etc...
TRISB=0; //tudo saída
//loop
//* ou PORTB=1; //só desloca leds - não precisa da tabela
for(;;)
{
PORTB=tabled[x];
//rotinas de delay, teclas, etc...
if (x++>23) x=0; //constante = num. de padrões de leds da tabela-1(no caso acima 23)
//* ou PORTB<<=1; if (!PORTB) PORTB=1; //só desloca leds
}
}

não testei este programa. digitei-o aqui.
apenas para ilustrar.
se alguém achar algum erro e quiser mencionar, sinta-se a vontade...

abraço...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor icaro51 » 20 Jul 2007 20:16

nao se esqueca que para algumas portas do pic 84 vc vai precisar colocar resistores de pull up, se nao me engano nesse pic e a A4, de qualquer meneira, o que eu faco quando tento fazer alguma coisa do tipo e nao funciona antes de arrancar os cabelos eu coloco em resistor pro vcc e vejo se nao era esse o problema, se era beleza, se nao eu sento e choro :-)

Abraco
icaro51
Byte
 
Mensagens: 119
Registrado em: 09 Dez 2006 21:56

Mensagempor caferninha » 25 Set 2007 00:28

;************************************************************
; Processor: PIC16F628 at 4 MHz using internal RC oscillator
; Function: Flash a LED connected to RA2
; Hardware: Testboard K4
; Filename: 628LED.asm
; Author: Lars Petersen, oz1bxm@qsl.net
; Website: www.qsl.net/oz1bxm/PIC/pic.htm
; Credit: Tony Nixon's LED flasher
;************************************************************

LIST P=16F628, R=DEC ; Use the PIC16F628 and decimal system

#include "P16F628.INC" ; Include header file

__config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON

CBLOCK 0x20 ; Declare variable addresses starting at 0x20
Loop1,Loop2
ENDC
;
; -----------
; INITIALIZE
; -----------
;
ORG 0x000 ; Program starts at 0x000

CLRF PORTA ; Initialize port A
CLRF PORTB ; Initialize port B

BSF STATUS,RP0 ; RAM bank 1

CLRF TRISA ; All pins port A output
CLRF TRISB ; All pins port B output

BCF STATUS,RP0 ; RAM bank 0

;***** VARIABLE DEFINITIONS
W_TEMP EQU 0X28
STATUS_TEMP EQU 0X29
COUNTERA EQU 0X2A
COUNTERB EQU 0X2B
COUNTERC EQU 0X27

;
; ------------------------
; FUNCTION OF PORT A PINS
; ------------------------
;
MOVLW 7
MOVWF CMCON ; Comparators off, all pins digital I/O

;
; ----------
; MAIN LOOP
; ----------
;
Main BSF PORTA,0 ; Turn on LED connected to RA2 VErmelho 1
BSF PORTA,1 ; Turn on LED connected to RA3 Azul 2
CALL delay

BCF PORTA,1 ; Turn off LED connected to RA3 Azul 2
BSF PORTA,2 ; Turn on LED connected to RA5 VERDE 2
CALL delay
CALL delay

CALL delay
BCF PORTA,2 ; Turn off LED connected to RA5 Verde 2
BSF PORTA,3 ; Liga LED connected to RA5 Amarelo 2
CALL delay

CALL delay
BCF PORTA,3 ; Turn off LED connected to RA5
BCF PORTA,0 ; Turn off LED connected to RA2



BSF PORTB,2 ; Turn on LED connected to RA2 VErmelho 1
BSF PORTB,3 ; Turn on LED connected to RA3 Azul 2
CALL delay

CALL delay
BCF PORTB,3 ; Turn off LED connected to RA3 azul 2
BSF PORTB,4 ; Turn on LED connected to RA5 VERDE 2
CALL delay
CALL delay

CALL delay
BCF PORTB,4 ; Turn off LED connected to RA5 Verde 2
BSF PORTB,5 ; Liga LED connected to RA5 Amarelo 2
CALL delay

CALL delay
BCF PORTB,5 ; Turn off LED connected to RA5
BCF PORTB,2 ; Turn off LED connected to RA2

GOTO Main





;PIC Time Delay = 0.5000000 s with Osc = 4.000000 MHz


delay MOVLW D'3'
MOVWF COUNTERC
MOVLW D'140'
MOVWF COUNTERB
MOVLW D'83'
MOVWF COUNTERA
LOOP DECFSZ COUNTERA,1
GOTO LOOP
DECFSZ COUNTERB,1
GOTO LOOP
DECFSZ COUNTERC,1
GOTO LOOP
RETURN
END



Achei esse codigo na net, funciona perfeitamente. Muito bom para trabalhos de faculdade. :)

So sobrar um tempo deixo ele mais didatico, mesmo pq ate o final do ano tenho quer apresentar os codigos na faculdade. :)

O Circuito.

Imagem
caferninha
 
Mensagens: 1
Registrado em: 12 Jul 2007 11:10

Mensagempor fabim » 25 Set 2007 08:37

PASCAL.
PortX := Random(portX)+1;

rsrs..

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x