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

É isto ai Professor,

A euforia é tão grande em atingir os objetivos após tanto quebrar cabeça que a satisfação em divulgar e ajudar aos outros é enorme.

Quanto as suas ponderações eu tenho a dizer que no meu caso a comunicação entre PC e PIC será "Simplex" com o uso de um transistor apenas no sentido RX do PIC. E usarei um software no PC onde após digitada a frase pressiona-se uma tecla de envio onde os dados serão enviados de uma só vez. É possivel que nos testes eu tenha que adequar um tempo viável, vou mudar então de 2 para 5 ms.

Um abraço,

Enio.

Bom dia meus amigos,

O seguinte:

a=00010101

b=10000001

c=00001000

Qual seria a maneira de juntar esses bytes em uma unica variavel conforme abaixo

fila=000101011000000100001000

Agradeço desde já a atenção dispensada.

Link para o comentário
Compartilhar em outros sites

Olá Felipe,

Encontrei isso aqui,

JUNTAR BYTES

Tanto na função fk como na função f é necessário, no fim, "juntar" secções de 8 bits numa só sequência de 32 bits.

SOLUÇÃO:

- definir uma variavel de tamanho apropriado;

- deslocar cada uma das secções para a sua posição correta;

- combinar todas as secções numa sequnecia só.

(X0 << 24) | (X1 << 16) | (X2 << 8) | X3 ;

X0 = 11100101; X1 = 11010101; X2 = 11110010; X3 = 10101010

X0 << 24 11100101 00000000 00000000 00000000

X1 << 16 00000000 11010101 00000000 00000000

X2 << 8...00000000 00000000 11110010 00000000

X3..........00000000 00000000 00000000 10101010

|............11100101 11010101 11110010 10101010

====> Talvez minha solução esteja por algo parecido se não for esta.

=======> TERIA QUE SHIFAR PARA COLOCAR ZEROS A DIREITA E DEPOIS SOMAR TODOS ==

==========Seria isso ????????????? Complicado não!!!!!!!!!! Mas não é dificel.

=====> O codigo mostrado acima seria em ASM se é fica simples porque em basic ficaria mais complicado pelo numero de operações.

Assim:

1- Eu leio um dado na eeprom digamos letra A

case 65 que corresponde a letra A então,

digito1(0) = 1010101 ' corresponde a linha 1 da matriz de leds

digito2(0) = 0010010

digito7(0) = xxxxxxxx ' corresponde a linha 7 da matriz de leds

2 - Eu leio novo dado na eeprom digamos letra B

case 66 que corresponde a letra B então,

digito1(1) = 1110101

digito2(1) = 0010110

digito7(1) = xxxxxxxx

Após ler todas as letra de uma palavra eu terei então:

digamos ABRAÇO

digito1 (0) = 1010101 1110101 xxxxxxx xxxxxxx xxxxxxx xxxxxxx A,B,R,A,Ç,O

digito7 (0) = ....................................................................A,B,R,A,Ç,O

Apos todas as linhas preenchidas eu dou inicio as operações de escrita.

É isso ai meu amigo.

Link para o comentário
Compartilhar em outros sites

Nossa mãe do céu ...... hahahahah quem vê essa última explicação desiste na hora ...... :D

Felipe, ele quer apenas deslocar os padrões dos bits, simulando a "passagem" das letras através da matriz LED dele, entendeu ?

Tchecara :

Uma dica : declare uma matriz, guarde seus bytes nela, e movimente os bytes de uma posição para outra da matriz, sempre em sequência, descartando o primeiro e avancando todos os outros.

é algo como isto aqui :

for n= 0 to 6

temp = matriz(n+1)

matriz(n)=temp

next n

Isto desloca todos os bytes da direita para a esquerda ( maior para o menor)

Mas pelo que eu percebo, voce algumas vezes precisa mostrar uma parte de um dado e uma parte de outro dado, portanto voce sempre vai ter de ter 2 dados a serem mostrados, e quando um sai totalmente da matriz de LEDS, um outro deve ser pego e colocado ao final daquele que está sendo mostrado.

Por exemplo, se o elemento n estiver no display, e houver um deslocamento, voce tem de deslocar o elemento n primeiro para a esquerda, e pegar o elemento n+1 e mostrar a primeira parte dele.

Sempre voce deve ter uma variavel chamado MOSTRAR, que voce tem de montar na mão a partir dos elementos n e n+1 , conforme os deslocamentos vão acontecendo.

Não é difícl fazer isto, Tchê, se voce seguir a lógica acima. Mas confesso que em Assembler fica mais intuitivo devido à facilidade dos Shifts ou Rotates.

Um abraço a todos !

Paulo

Link para o comentário
Compartilhar em outros sites

Saudações mestre,

Veja só em uma palavra tenho letras justapostas lado a lado, razão pela qual não posso pegar letra por letra e deslocar para a esquerda pois ai estarão se afastando uma da outra. Tenho que ter os bytes de todas juntas e ai deslocar o conjunto. Ficará mais fácil fazer em ASM. Vamos a luta.

Abraço.

Link para o comentário
Compartilhar em outros sites

Só por curiosidade estou olhando esse tópico, e apesar de programar microcontroladores PIC a mais de 2 anos eu olho essas explicações e fico perdidaço, kkkkk

Tchecara, o que exatamente quer fazer? eu poderia explicar em C e alguém traduz para BASIC depois (praticamente a mesma coisa no final)

Link para o comentário
Compartilhar em outros sites

Bem vindo meu amigo lucas,

Estou trabalhando numa matriz de leds onde o objetivo é mostrar uma mensagem se deslocando da direita para a esquerda. Comecei apenas com uma letra para testar, matriz de 5 x 7 . Ao aumentar o numero de displays para compor por exemplo uma palavra ai as coisas complicaram e o basic começa a ficar mais trabalhoso e então a ideia é implementar em ASM as operações mais complexas. Estou trabalhado com o PIC SIMULATOR IDE que aceita codigos ASM junto com o basic.

Para dar inicio ao deslocamento por exemplo de uma palavra eu tenho que ter em uma unica variavel os bytes lado a lado de cada letra ex.: a b c

Ao deslocar a primeira letra a aparecer seria o "a" logo vem o "b" e em seguida o "c'.

letra a = 11111

letra b = 10101

letra c = 00010

variavel = 111111010100010 ==> esta variavel seria deslocada para esquerda.

Um abraço.

Link para o comentário
Compartilhar em outros sites

Galera Tô com uma grande dúvida aqui no seguinte....

É duvida de iniciante mesmo...

auhdiauhdahsid

Eu tenho esse trecho aqui pro PIC16F877:

Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 4
AllDigital
OPTION_REG = 0x07
'DEFINIÇÃO DO LCD
Define LCD_BITS = 4
Define LCD_DREG = PORTD
Define LCD_DBIT = 4
Define LCD_RSREG = PORTD
Define LCD_RSBIT = 0
Define LCD_RWREG = PORTD
Define LCD_RWBIT = 1
Define LCD_EREG = PORTD
Define LCD_EBIT = 2
Define LCD_READ_BUSY_FLAG = 1
TRISD = 0x00

Aí tentei trocar o PORTD por PORTB pra poder usar o PIC16F84 e dá erro....

O que é que tá errado nisso aí??

Abraços a todos!!

Link para o comentário
Compartilhar em outros sites

Olá meus amigos,:D

Ao fazer ensaios no Pic basic Simulator constatei que a minha ideia de juntar todos os bytes de cada letra que compõe uma frase em uma única variável para depois processar não é possível pois extrapola a capacidade máxima de uma variável long.:muro:

Abandonei a ideia e comecei a pensar diferente e ai percebi que eu deveria pegar uma letra e deslocar uma casa para esquerda, pegar a segunda letra e fazer o mesmo e assim sucessivamente até novamente pegar a primeira letra e recomeçar o processo e ai teria a frase se deslocando na tela. O espaço do deslocamento entre uma letra e outra seria nada mais que o espaço necessário para separar um caracter do outro.

Ufa!!!!!! Custei mas acho que agora estou no caminho certo, valeu vamos a luta.:tantan:

Um abraço turma.

Link para o comentário
Compartilhar em outros sites

Tchecara,

Acho que voce não entendeu o que eu falei sobre tratar apenas 2 letras....

é muito fácil voce fazer o shift de cada letra, pegando todos os bytes dela.

E o seu display sempre vai mostrar no máximo 2 letras ao mesmo tempo, sendo partes da primeira e partes da segunda.

Portanto, divida o problema em dois !!!!!

Fazer o shift do caracter INTEIRO usando as matrizes em Basic é bem simples, certo ? Assim voce sempre vai saber qual é a letra que está na matriz, e qual é a letra que VAI estar também na matriz. Vamos dar o nome dessa matriz de MENSAGEM, que contém todas as letras da mensagem ( ou melhor todos os 5 BYTES correspondentes para cada letra, todos em sequência ) .

Traduzindo o que eu falei acima, voce sempre sabe quais são as letras MENSAGEM(n) e MENSAGEM (n+1), que são sempre as duas letras que estão sendo mostradas no display.

Agora, crie uma matriz menor, com todos os 10 bytes a serem mostrados dessas 2 letras. Chame de MOSTRADOR . Teremos, por exemplo , 10 elementos nessa matriz, supondo que seu display mostra 5 colunas de cada letra.

Quando voce fizer os shifts dessa matriz MOSTRADOR, verifique se o todos os dados da primeira letra já foram mostrados ( a cada 5 shifts corresponde uma letra ), então nesse instante voce tem na matriz MOSTRADOR apenas os dados da segunda letra, correto ?

Neste instante, vce faz o shift da matriz MENSAGEM, pega a próxima letra dela ( os 5 bytes da letra ) , e armazena na matriz MOSTRADOR, na posição ORIGINAL da segunda letra, pois a posição da primeira letra já estará ocupada,correto ?

Assim, suas duas matrizes funcionam desta maneira, a matriz MOSTRADOR faz 5 shifts, e só neste instante a matriz MENSAGEM faz um novo shift, daí teremos mais 5 shifts de MOSTRADOR, e assim por diante.

Em tempo : quando acima eu falo um shift de letra, na verdade significam 5 shifts , um para cada byte da letra, ok ?

Caramba, me parece tão fácil isso , e o código também fica bem simples.

Lembre-se da máxima romana : dividir para conquistar !

Se depois disso voce não conseguir fazer, vai perder o diploma !!!!! :D

Um abraço !

Paulo

Link para o comentário
Compartilhar em outros sites

Meu querido Professor,

:eek:

Genial essa, a agente tem mania de procurar soluções difíceis quando as bem simples resolvem o problema. Fazendo uma analogia, seria como armazenar 500 lt de água e você só dispõe de caixas de 100 lt. Basta interligar 5 caixas uma a outra e você terá os 500 l disponíveis ao uso.:D

Como diz o velho ditado, "cabeça não é só para usar chapéu".:eek:

Valeu meu amigo, vamos a luta.

Link para o comentário
Compartilhar em outros sites

Heheheh exatamente , muitas vezes as coisas não são vistas por nós da maneira correta, não é mesmo ?

Eu tive um professor de programação na faculdade chamado Rui Campos, o cara era fera, e foi o fundador da famosa Microtec, um dos primeiros fabricantes de PCs do Brasil. Ele sempre dizia para a a gente : Quando a programação parece muito difícil é porque voce tomou o caminho errado para resolver, tente dividir o problema em partes menores, fica bem mais fácil de resolver cada parte !

Esse é um conceito que eu faço até hoje, tente sempre manter isso em sua mente quando resolver fazer um programa, ok ?

Agora acho que vai ..... acho que como eu tem muita gente querendo ver a sua solução para aprender, assim que voce terminar poste o código para a turma !

Valeu meu amigo !

Paulo

Link para o comentário
Compartilhar em outros sites

Meus Amigos,

Estou postando mais um exercício envolvendo a porta serial RS 232.

- Enviaremos a palavra "FORUM" pela porta serial e vamos grava-la em uma memória eeprom. Feito isso, vamos ler a eeprom e identificar cada letra e fazer acender o led correspondente a esta.

Segue link com vídeo demonstrativo.

Um abraço e bom proveito.

http://rapidshare.com/files/377811011/Exercicio_RS_232.FLV.html

'09/03/10

'PIC: 16F628A - matriz 7 X 5

Define CONF_WORD = 0x3f70

Define CLOCK_FREQUENCY = 4

AllDigital

TRISA.2 = 1 'entrada sda

TRISA.3 = 0 'Saida scl

TRISA.5 = 1

TRISB.1 = 1

TRISB.2 = 0

TRISB.3 = 0

TRISB.4 = 0

TRISB.5 = 0

TRISB.6 = 0

TRISB.7 = 0

TRISB.1 = 1 'entrada RS 232

Symbol sda = PORTA.2

Symbol scl = PORTA.3

Dim addr As Word

Dim data As Byte

Dim valor As Byte

Dim rxbuff(7) As Byte

'************BUS_I2C ******************

read_eeprom: 'Vamos escrever "FORUM"

Hseropen 9600

For addr = 0 To 4

roda:

Hserget data

If data = 0 Then Goto roda

rxbuff(addr) = data

WaitMs 5

I2CWrite sda, scl, 0xa0, addr, data 'escrevendo dado na memória

If addr = 5 Then

Goto le_eeprom

Endif

Next addr

le_eeprom:

For addr = 0 To 4

I2CRead sda, scl, 0xa0, addr, data 'lê eeprom

WaitMs 5

valor = data

Select Case valor

Case %01000110 'F

PORTB.3 = 1

WaitMs 100

PORTB.3 = 0

Case %01001111 'O

PORTB.4 = 1

WaitMs 100

PORTB.4 = 0

Case %01010010 'R

PORTB.5 = 1

WaitMs 100

PORTB.5 = 0

Case %01010101 'U

PORTB.6 = 1

WaitMs 100

PORTB.6 = 0

Case %01001101 'M

PORTB.7 = 1

WaitMs 100

PORTB.7 = 0

EndSelect

Next addr

Link para o comentário
Compartilhar em outros sites

Olá Jorge,

Amigo por enquanto estou só no virtual mas tenho o que você quer.:D

A minha ideia é usar este software para editar as mensagens via PC.

http://www.enterupload.com/7xq9q3uuphte/LED_MSG.exe.html

Quanto ao esquema elétrico eu ainda não testei mas ele está aqui.

http://www.enterupload.com/1gpdcfinlupq/RS_232.jpg.html

Tenha bons estudos, um abraço.

Link para o comentário
Compartilhar em outros sites

Fala Paulo, então daí eu descobri mesmo o erro, e confirmeio-o com você agora!

Agora a duvida é aquela cara do relógio lembra, a mesma antiga até hoje num solucionei...

Como acertar o relógio via os botões da forma como falei lembra?

Um botão de Up(Pra Acrescentar), um de Down(Pra Diminuir), um de Mode(Pra escolher o que vai ser acertado), e um de Select(Pra selecionar o que vai ser acertado).

Ja tentei algumas coisas mas num consigo nada, quando simulo nada dá certo!

Tem alguma luz aí ra eu pelo menos iniciar um programa e desenvolver a partir daí, um pontapé inicial??

Abraços, e Desde já grato!

EDIT:

ou então da forma dos botões desse video:

YouTube - Relógio de Tempo Real com PIC e DS1307

Abraços

Link para o comentário
Compartilhar em outros sites

Olá Galera,:aplausos:

A medida que vou implementando o meu projeto, faço pequenos ensaios para observar o funcionamento e fazer as devidas correções necessárias para atingir o meu objetivo.

Estou postando aqui o exercicio para quem quiser experimentar.

Desta vez trata-se do uso ShiftLeft para endereçar os dados à porta serial do CI 74HC595 e observar como se comporta a sua saida paralela. Estou disponibilizando arquivos do PSI e do PROTEUS.

Bom proveito aos amigos.:D

Abraço.

http://serv43.enterupload.com/files/8/oyxbsi99gitd2r/shiftleft.rar

Link para o comentário
Compartilhar em outros sites

Boa tarde a todos,

Alguem poderia me dar uma ajuda com esta operaçao:

P = PORTA.0 + PORTA.1 *2 + PORTA.2 *4 + PORTA.3 *8

if P = 0 then ' Programa “0000”

if P = 1 then ' programa "0001"

if P = 2 then ' programa "0002"

etc.........

Estou tentando modifica-la pra rodar no PSI, mas nao estou conseguindo

Abraço a todos

jfeliciano

Link para o comentário
Compartilhar em outros sites

E ai turma, tudo numa boa.

Gurizada de uns tempos pra cá já não conto mais carneirinhos para dormir, agora so consigo dormir contando bits. Será normal !!!!!!!!!!!!!!!!

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Só arrumo pepino vejam só, agora estou tentando um meio de inverter uma sequência de bits em uma variável. É coisa de louco não ? kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

B = 01001101 ====> quero assim B = 10110010

Seria reinscrever a variável de forma inversa.

Alguém teria uma ideia de como fazer ?:D

Link para o comentário
Compartilhar em outros sites

Tchecara,

Olha, não sei não, mas acho que voce está precisando é casar ... :D

Quanto à sua dúvida :

Fazendo B a sua variável antiga, e criando uma chamada TEMP para armazenar os novos dados

Se B for tipo BYTE :

TEMP.0 = B.7

TEMP.1 = B.6

e assim por diante.

Se B for do tipo WORD :

TEMP.0=B.15

TEMP.1=B.14

e assim por diante.

Agora, ve se volta a dormir !

Um abraço !

Paulo

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!