Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

shunt, obrigado pela atenção! Entendi perfeitamente o que falou do LookUp, e etendi como sei quais segmanetos serão ligados... isso que eu não estava entendendo!

Estou mesmo dando uma lida em conversão de sistema de numeração, Hexadecimal, Binário e Decimal!

Entendi também a questão das Variáveis... então, antes de receber uma resposta mais clara o correto é eu ir usando variáveis mesmo né?

E meu objetivo é dominar bem o Basic, para ter uma noção maior em Microcontroladores e lógica na programação, depois pretendo migrar para o C, como o Paulo sugeriu na mensagem anterior!

Obrigado!

Link para o comentário
Compartilhar em outros sites

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!:muro:

Use as variáveis e não esqueça dos comentários são muito importantes.

Abraço e bons projetos.

Link para o comentário
Compartilhar em outros sites

Ola pessoal

Preciso de uma ajuda, :confused: alguém já tentou comunicação serial usando o Basic do PSI com o pic 12F629.

Não consigo enviar as mensagens corretamente.

segue programa exemplo;

AllDigital

Clock_Define = 4

TRISIO = %101110

DEFINE SEROUT_DELAYUS = 2000

Dim b1 As Word

b1=3

inicio:

if gpio.1=1 then

SeroutInv gpio.0, 1200, "estou aqui"

endif

waitms 250

if gpio.2=1 then

SeroutInv gpio.0, 1200, #b1

endif

waitms 250

"

"

goto inicio

end

Verifiquei atraves do programa de teste serial RComm da Rogercom que chega um sinal serial, mais não consigo entender o que está chegando.

Já tentei varias configurações com "" ,#, ( ), [ ] e velocidades baixas de 300,600,1200 e 2400 bps mais o recebimento esta confuso.

ex:

'''''' ou &&& @@@ e outros caracteres indecifraveis.

Desde já agradeço

JCDS

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Boa tarde, a todos...

Estive afastado um pouco do forum, por falta de tempo na vida corrida aqui...

Mas volto aqui com uma antiga duvida, que ainda etá forte....

Tenho um programa aqui, embassado no do tutorial do Paulo de PIC...

Do Relógio com RTC, incrementei ele para controle de temperatura em uma Estufa baseado em horas....

Porém ele tem uma parte que é controlada, por Serial RS232...

Eu queria montar essa parte principalmente a do acerto do relógio através de 3 botões

Mode, Set, e Increment, ou seja, em bom português, Modo, acertar e incrementar...

Só que não sei como criar isso dentro do programa, para que assim que eu aperte MODE, ele já entrena rotina para que eu escolha, o que quero acertar, Hora, minuto, segundo, dia, mês ou ano!

Se alguém tiver alguma dica, ou ideia, fico muito grato!

Abraços a todos!

Link para o comentário
Compartilhar em outros sites

  • mês depois...

caro amigo aphawk,

estou a varias semanas tentando escrever no lcd de 2x16, consegui mais so em uma linha, gostaria de aprveitar o espaso e ecrever as duas linhas, tem como me ajudar

abaixo coloquei o codico, por favor gente obrigado.

Define CONF_WORD = 0x3f02

Define CLOCK_FREQUENCY = 12

AllDigital

CMCON = 7

Define LCD_BITS = 8

Define LCD_DREG = PORTB

Define LCD_DBIT = 0

Define LCD_RSREG = PORTA

Define LCD_RSBIT = 1

Define LCD_EREG = PORTA

Define LCD_EBIT = 3

Define LCD_RWREG = PORTA

Define LCD_RWBIT = 2

loop:

Lcdinit LcdCurOff

Lcdout "vamos trabalhar!"

WaitMs 500

Lcdcmdout LcdClear

Lcdout "nesase assunto!"

WaitMs 500

Lcdcmdout LcdClear

Goto loop

a esqueci de informar o pic,

16f628a,

aguardo retorno,

obrigado.

Link para o comentário
Compartilhar em outros sites

Gente estou com algumas dúvidas;

Já fiz o gravador de PIC's, já tenho alguns projetos em mente.

Mas e quanto a produção?

Primeiro eu escrevo as linhas , compilo , transformo em .hex e mando pro gravador?

Quais programas uso para fazer isso...?

Depois vou baixar a apostila e ler.

Link para o comentário
Compartilhar em outros sites

caro amigo aphawk,

estou a varias semanas tentando escrever no lcd de 2x16, consegui mais so em uma linha, gostaria de aprveitar o espaso e ecrever as duas linhas O PIC QUE EU ESTOU USANDO E O 16F628A , peço a sua ajuda por favor, AGUARDO RETORNO

abaixo coloquei o codico, por favor obrigado.

Define CONF_WORD = 0x3f02

Define CLOCK_FREQUENCY = 12

AllDigital

CMCON = 7

Define LCD_BITS = 8

Define LCD_DREG = PORTB

Define LCD_DBIT = 0

Define LCD_RSREG = PORTA

Define LCD_RSBIT = 1

Define LCD_EREG = PORTA

Define LCD_EBIT = 3

Define LCD_RWREG = PORTA

Define LCD_RWBIT = 2

loop:

Lcdinit LcdCurOff

Lcdout "vamos trabalhar!"

WaitMs 500

Lcdcmdout LcdClear

Lcdout "nesase assunto!"

WaitMs 500

Lcdcmdout LcdClear

Goto loop

Link para o comentário
Compartilhar em outros sites

caro amigo aphawk,

estou a varias semanas tentando escrever no lcd de 2x16, consegui mais so em uma linha, gostaria de aprveitar o espaso e ecrever as duas linhas O PIC QUE EU ESTOU USANDO E O 16F628A , peço a sua ajuda por favor, AGUARDO RETORNO

abaixo coloquei o codico, por favor obrigado.

Define CONF_WORD = 0x3f02

Define CLOCK_FREQUENCY = 12

AllDigital

CMCON = 7

Define LCD_BITS = 8

Define LCD_DREG = PORTB

Define LCD_DBIT = 0

Define LCD_RSREG = PORTA

Define LCD_RSBIT = 1

Define LCD_EREG = PORTA

Define LCD_EBIT = 3

Define LCD_RWREG = PORTA

Define LCD_RWBIT = 2

loop:

Lcdinit LcdCurOff

Lcdout "vamos trabalhar!"

WaitMs 500

Lcdcmdout LcdClear

Lcdout "nesase assunto!"

WaitMs 500

Lcdcmdout LcdClear

Goto loop

Ola MA2008,

veja ai se é isto o que voce quer.

Deste jeito vai aarecer os dois texto em duas linhas

loop:

Lcdinit LcdCurOff

Lcdout "vamos trabalhar!"

WaitMs 500

'Lcdcmdout LcdClear 'limpa a primeira linha

Lcdcmdout LcdLine2Home 'escrever na segunda linha (1ªpos.)

Lcdout "nesase assunto!"

WaitMs 500

Lcdcmdout LcdClear

Goto loop

Abraço

jfeliciano

Link para o comentário
Compartilhar em outros sites

OLÁ PESSOAL

Estou precisando muito de um programa para esse PLL SAA1057 ,estou montando sintonizador scanner preciso travar o oscilador local da If do tuner na frequencia de 45,75 mhz estou querendo utilizar este PLL1057 para trabalhar nessa frequencia p PLL poderia começar em 45,75mhz ate 46.00 mhz ,mais existe um problema sou leigo em programação não entendo nada única coisa que sei e gravar o HEX no pic!

Alguém poderia me ajudar com esse programa?

Agradeço

Abraços a todos

Link para o comentário
Compartilhar em outros sites

Estou precisando muito de um programa para esse PLL SAA1057 ... na frequencia de 45,75 ... 46.00 mhz

Mrtchnology, se olhar o datasheet deste componente, verá que o mesmo não trabalha na faixa que precisa.

Em AM: 512KHz à 32MHz com passos de 1Khz ou 1,25Khz.

Em FM: 70MHz à 120MHz com passos de 10KHz ou 12,5KHz.

Terá que pesquisar algum outro para esta finalidade ou usar um prescaler para dividir esta frequencia (exemplo 46MHz / 2 = 23MHz aí é possível).

Existe um que divide a frequencia por 8 descontinuado pela Sanyo, mas pode-se encontrar em velhos autorradios (tape deck) que possuem o mostrador de frequencia através de displays de Leds. É o LB3500 (datasheet aqui).

Espero ter esclarecido uim pouco. Abraço.

Link para o comentário
Compartilhar em outros sites

Jfeliciano,

obrigado, por ter me ajudado,

caso precise novamente posso contar contigo?

MA2008,

Fico feliz que tenha sido util a minha ajuda,mas assim como voce tambem estou dando os primeiros passos na "ARTE" da programação.

Mas o que estiver ao meu alcance pode contar comigo.

Mas é bom ter em maos o manual do PSI, ajuda bastante

Boa sorte

jfeliciano

Link para o comentário
Compartilhar em outros sites

Olá pessoal, passei um tempo afastado novamente, curtindo um pouquinho as férias HEHEHE

Mas agora tive a ideia de mexer com uma coisa que já foi até comentada aqui no forum, a Matriz de Leds 4x4x4...

Mas não estou conseguindo imaginar como fazer a multiplexação, para poder controlar o acendimento dos leds, que deve ser feito, cada led acendendo de uma vez... tipo já sei como acendar cada led, mas como fazer a multipleação para isso não...

Se puderem me ajudar com essa multipleação ficarei grato!

Abraços!

Júlio

Link para o comentário
Compartilhar em outros sites

jfeliciano, Olá!

Vendo seu avatar, achei interessante, que placa é esta?

oiluj, 4x4x4 ? Nunca vi uma matriz deste tipo (tridimensional :confused: ?).

Apesar de ter 5 peças 8x8 bicolor, ainda não pude testar.

Até onde sei, você varre ela como se fosse um teclado, mas usando os pinos como saida.

Exemplo, carregas todas as linhas de uma vez com os leds necessário e liga a coluna correspondente, e assim por diante. Se tiver ideia melhor, repasse para nós.

abraço.

Link para o comentário
Compartilhar em outros sites

Tipo eu queria uma forma que deixasse o código mais enxuto... tipo eu fiz um esboço acendendo todos os leds de uma linha da matrix...

olha só o código em Basic:


Define CLOCK_FREQUENCY = 4
AllDigital
TRISA = 0x00
TRISB = 0x00
TRISC = 0x00
TRISD = 0x00
TRISE = 0x00
Symbol linha1 = PORTA.0
Symbol linha2 = PORTA.1
Symbol linha3 = PORTA.2
Symbol linha4 = PORTA.3
Symbol coluna1 = PORTB.0
Symbol coluna2 = PORTB.1
Symbol coluna3 = PORTB.2
Symbol coluna4 = PORTB.3
Symbol coluna5 = PORTB.4
Symbol coluna6 = PORTB.5
Symbol coluna7 = PORTB.6
Symbol coluna8 = PORTB.7
Symbol coluna9 = PORTB.0
Symbol coluna10 = PORTC.1
Symbol coluna11 = PORTC.2
Symbol coluna12 = PORTC.3
Symbol coluna13 = PORTC.4
Symbol coluna14 = PORTC.5
Symbol coluna15 = PORTC.6
Symbol coluna16 = PORTC.7
ciclo:
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 1
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 1
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 1
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 1
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 1
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 1
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 1
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 1
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 1
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 1
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 1
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 1
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 1
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 1
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 1
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 1
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 1
WaitMs 10
Goto ciclo
End
Define CONF_WORD = 0x3f71

Abraços e vou ver se posto um video de alguma!

Aqui está o link de alguns videos:

Aqui uma 4x4x4:

Aqui uma 8x8x8:

Link para o comentário
Compartilhar em outros sites

Valeu shunt, agora só uma dúvida, pra ver se eu entendi sua explicação direito...

o que você sugeriu foi que eu considere as linhas normal e as colunas como uma matriz?

É isso, ou eu estou te entendendo completamente errado??

Se não for isso e pensar em uma forma melhor de me explicar eu agradeço!

Desde já grato!

Pra elucidar o que eu disse olha se é isso

O codigo que eu postei antes é esse com algumas correções:


Define CLOCK_FREQUENCY = 4
AllDigital
TRISA = 0x00
TRISB = 0x00
TRISC = 0x00
TRISD = 0x00
TRISE = 0x00
Symbol linha1 = PORTA.0
Symbol linha2 = PORTA.1
Symbol linha3 = PORTA.2
Symbol linha4 = PORTA.3
Symbol coluna1 = PORTB.0
Symbol coluna2 = PORTB.1
Symbol coluna3 = PORTB.2
Symbol coluna4 = PORTB.3
Symbol coluna5 = PORTB.4
Symbol coluna6 = PORTB.5
Symbol coluna7 = PORTB.6
Symbol coluna8 = PORTB.7
Symbol coluna9 = PORTC.0
Symbol coluna10 = PORTC.1
Symbol coluna11 = PORTC.2
Symbol coluna12 = PORTC.3
Symbol coluna13 = PORTC.4
Symbol coluna14 = PORTC.5
Symbol coluna15 = PORTC.6
Symbol coluna16 = PORTC.7
ciclo:
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 1
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 1
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 1
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 1
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 1
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 1
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 1
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 1
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 1
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 1
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 1
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 1
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 1
coluna14 = 0
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 1
coluna15 = 0
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 1
coluna16 = 0
WaitMs 10
linha1 = 1
linha2 = 0
linha3 = 0
linha4 = 0
coluna1 = 0
coluna2 = 0
coluna3 = 0
coluna4 = 0
coluna5 = 0
coluna6 = 0
coluna7 = 0
coluna8 = 0
coluna9 = 0
coluna10 = 0
coluna11 = 0
coluna12 = 0
coluna13 = 0
coluna14 = 0
coluna15 = 0
coluna16 = 1
WaitMs 10
Goto ciclo
End
Define CONF_WORD = 0x3f71

e o código utilizando o lookup para a mesma aplicação anterior seri:


Define CLOCK_FREQUENCY = 4
AllDigital
TRISA = 0x00
TRISB = 0x00
TRISC = 0x00
TRISD = 0x00
TRISE = 0x00
Dim mask1 As Byte
Dim mask2 As Byte
Dim mask3 As Byte
Dim loop As Byte
Dim loop1 As Byte
ciclo:
For loop = 0 To 8
mask1 = LookUp(0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01), loop
PORTA = mask1
Gosub colunabb
WaitMs 10
Next loop
For loop1 = 0 To 8
mask1 = LookUp(0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01), loop1
PORTA = mask1
Gosub colunacc
WaitMs 10
Next loop1
Goto ciclo
End
colunabb:
mask2 = LookUp(0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00), loop
PORTB = mask2
Return
colunacc:
mask3 = LookUp(0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00), loop1
PORTC = mask3
Return
Define CONF_WORD = 0x3f71

Link para o comentário
Compartilhar em outros sites

jfeliciano, Olá!

Vendo seu avatar, achei interessante, que placa é esta?

oiluj, 4x4x4 ? Nunca vi uma matriz deste tipo (tridimensional :confused: ?).

Apesar de ter 5 peças 8x8 bicolor, ainda não pude testar.

Até onde sei, você varre ela como se fosse um teclado, mas usando os pinos como saida.

Exemplo, carregas todas as linhas de uma vez com os leds necessário e liga a coluna correspondente, e assim por diante. Se tiver ideia melhor, repasse para nós.

abraço.

Shunt,ola

Esta é uma placa de desenvolvimento para pics de 40 pinos que encontrei neste site aqui http://techniquebroadcast85.pagesperso-orange.fr/yvon.htm.

Construi uma para mim, é um dos meus "briquedos" favoritos.

Abraço

jfelciano

Link para o comentário
Compartilhar em outros sites

Valeu shunt, agora só uma dúvida, pra ver se eu entendi sua explicação direito... o que você sugeriu foi que eu considere as linhas normal e as colunas como uma matriz? É isso, ou eu estou te entendendo completamente errado?? Se não for isso e pensar em uma forma melhor de me explicar eu agradeço!

Considere a imagem:

matrizleds.png

Você escolhe um port do microcontrolador para saída de dados, ou seja os valores de sua matriz. Para cada indice da matriz, terá de ter um outro pino de qualquer outro port para poder ativar sua coluna, em nossa imagem, é o uln2803.

A matriz no seu código possui 8 indices. Então um loop de 0 à 7 contagens (totalizando 8) vai varrendo sua matriz. Em cada índice jogado no port de dados você tem que ligar um pino correspondente a este índice. Neste momento sua coluna será ligada e verá os leds correspondentes acesos.

Creio que já elucida como funciona (Expliquei 2x :) ).

.

Vamos criar a matriz de acordo com a imagem acima:

Começamos no quadrado amarelo (Considere o peso dos bits à direita e somente os "leds" que estão em "acesos"):

.

128+64+32+1 = 225 (indice 0 da matriz)

16+2 = 18 (indice 1 da matriz)

32+8+4 = 44 (indice 2 da matriz)

64+2 = 66 (indice 3 da matriz)

64+2 = 66 (indice 4 da matriz) << daqui p/ baixo repete veja a figura.

32+8+4 = 44 (indice 5 da matriz)

16+2 = 18 (indice 6 da matriz)

128+64+32+1 = 225 (indice 0 da matriz)

.

mascara = LookUp(225, 18, 44, 66, 66, 44, 18, 225), loop

Nossa mascara já está pronta! Em decimal mesmo! Se quiser use em hex.

Agora falta definirmos os pinos que irão ser associados com cada índice na mascara.

São os coloridos:

Preto = indice 0;

Bordô = indice 1;

Amarelo = indice 2;

Verde = indice 3;

Roxo = indice 4;

Vermelho = indice 5;

Cinza = indice 6;

Marron = indice 7;

.

Lembre-se: não defini pinos por não saber qual microcontrolador está usando. Fiz colorido para generalizar, com isso possibilita o uso em qualquer tipo de uC.

.

Seu código está quase completo. Só não definiu os pinos para cada índice.

.

Vamos em quase pseudo código explicar como funciona.

.

1 - Pega-se o indice 0 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 0 para acender os leds (é o preto).

3 - Aguarda um tempo (delay"zinho", determine o melhor tempo testando :)).

4 - Desliga o pino de controle (preto).

.

... e tudo se repete:

.

1 - Pega-se o indice 1 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 1 para acender os leds (é o bordô).

3 - Aguarda um tempo.

4 - Desliga o pino de controle (bordô).

.

... indice 2:

.

1 - Pega-se o indice 2 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 2 para acender os leds (amarelo).

3 - Aguarda um tempo.

4 - Desliga o pino de controle (amarelo).

.

... indice 3:

.

1 - Pega-se o indice 3 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 3 para acender os leds (verde).

3 - Aguarda um tempo.

4 - Desliga o pino de controle (verde).

.

... indice 4:

.

1 - Pega-se o indice 4 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 4 para acender os leds (roxo).

3 - Aguarda um tempo.

4 - Desliga o pino de controle (roxo).

.

... indice 5:

.

1 - Pega-se o indice 5 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 5 para acender os leds (vermelho).

3 - Aguarda um tempo.

4 - Desliga o pino de controle (vermelho).

.

... indice 6:

.

1 - Pega-se o indice 6 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 6 para acender os leds (cinza).

3 - Aguarda um tempo.

4 - Desliga o pino de controle (cinza).

.

... indice 7:

.

1 - Pega-se o indice 7 da matriz e escreve no port de dados.

2 - Liga o pino de controle correspondente ao indice 7 para acender os leds (marrom).

3 - Aguarda um tempo.

4 - Desliga o pino de controle (marrom).

.

Fica nesse loop infinitamente ou mesmo gere outros padrões, etc ...

Creio que isto ajuda elucidar um pouco.

Para controlar o cubo, digamos que terá que fazer isto em cada matriz dele, e mais pinos serão usados.

Teste este exemplo mais simples e quando estiver pronto, faça o mais avançado.

Espero ter contribuído um pouco.

Muito obrigado ao jfeliciano pelo link da devboard.

Abraço à todos.

Link para o comentário
Compartilhar em outros sites

Shunt, valeu mesmo, muito obrigado, muito bem explicado...

E desculpa ter feito você perder todo esse tempo digitando essa mensagem enorme...

Foi mais ou menos isso mesmo que eu entendi...

Tô montando aqui a matriz de leds, e tive a ideia de fazer o seguinte, a matriz terá 16 colunas, ou seja uma para cada led, e 4 linhas, ai resolvi fazer o seguinda, as colunas vou colocar nos PORT's B e C 8 colunas em cada PORT, e as linhas colocarei no PORT A, usarei o PIC 16F877A... Vou fazer o teste com aquele programinha ali mesmo, e ppelo que eu fiz, todos os leds da linha 1 tem que parecer acessos ao mesmo, tempo, depois vou aumentar o delay para 1 seg. para ver um acender de cada vez...

Se isso der certo, depois vai ser só começar a brincadeira...

hehehehe...

Valeu cara, abração!

Link para o comentário
Compartilhar em outros sites

Aqui mais uma duvidazinha, eu queria saber como eu posso fazer, para ligar uma chave tactil, a um PORT do PIC e para que a qualquer momento que ela seja precionada, seja realizada uma ação qualquer!

E eu ia postar o video mais cedo, mas o forum tava fora do ar o Dia todo...

Entãos aqui está o video:

Link para o comentário
Compartilhar em outros sites

Maravilha seu trabalho!

Quanto ao uso dos botões, em basic não sei como fica, mas o material do mestre Paulo, contido no link abaixo vai te mostrar o caminho das pedras:

http://forum.clubedohardware.com.br/microcontroladores-circuitos-linguagens/594329

Basicamente o que tem de fazer é:

Configurar no TRIS de qualquer PORT, o pino que deseja usar como entrada.

TRISx = 0b00000001 // Chamei o bit0 do tris de entrada, o restante é saída...

O restante já sabe como é (configurações iniciais: oscilador, lookup, etc.)

Em determinadas ocasiões, seu programa tem que analisar o estado do botão.

Se externamente deixar ele em pullup, terá que aterrar o pino ao pressionar o botão.

A analise fica assim:

Se o pino x == 0, faça isto ou aquilo.

--

Se externamente deixar em pulldown, terá que levar o pino à +VCC.

Analise:

Se o pino x == 1, faça isto ou aquilo.

Você terá apenas que descobrir como fazer isto em basic.

--

Em C, fica assim(fica evidente que algumas macros deverão ser usadas nisso):

if(!pinoX){

// Se o pino for de +Vcc para GND, faça isto.

}

if(pinoX){

// Se o pino for de GND para +Vcc, faça isto.

}

A lógica, você propõe. Dependendo da situação em que se encontra o seu programa, a varredura do botão deverá ocorrer sempre, caso contrario deverá trabalhar com interrupções.

O pessoal do basic pode te ajudar com isso, muito melhor que eu!

Excelente o cubo que montou! Deve ter dado mais trabalho fazer o cubo do que o software ;)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!