Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
anderson oli

Outro problemas na programação Mikroc usando microcontrolador 18F1320

Recommended Posts

Boa noite.

Estou aprendendo a utilizar o programa MikroC para a família 18F

com um projeto básico pra teste cheguei em um ponto que não encontrei a solução

não consigo achar o comando certo para usar uma uma porta B como entrada.

Peço uma ajuda com este problema.

o programa que montei para teste foi este:

 

void main()
{
  ADCON1 = 0x0f;       //define como digitais
  TRISB = 0b11110011 ;
  TRISA = 0b11111101 ;
  osccon = 0b01101110 ;     //valor da frequência trabalhar 4 mhz

  RB0_bit = 0x00;
  RA7_bit = 0x00;
 
 // piscar led indicando inicio programa
 delay_ms(900);
 lata.Ra1 = 1;
 delay_ms(100);
 lata.RA1 = 0;
 latb.RB3 = 1;

 //inicio loop infinito


        while(1)
        {
        if(RA7_bit == 1) //quando botão 1 acionado alterar estado das saídas
          {                            
              lata.RA1 = ~ lata.RA1;
              latb.RB3 = ~ latb.RB3;
              delay_ms(500);
          }
          if(RB0_bit == 1) //quando botão 2 acionado alterar estado das saídas
          {                            
              lata.RA1 = 1;
              latb.RB3 = 1;
              delay_ms(1000);
              lata.RA1 = 0;
              latb.RB3 = 0;
          }
        }
}

//fim do programa.

 

No botão 1 o programa funciona perfeitamente.

Mas no botão 2 não consigo que ele execute a função.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, anderson oli disse:

o comando certo para usar uma uma porta B como entrada

Amigo isso é simples. O registro TRISB controla: em 1: entrada, em 0: saída. Se achar que deve dê uma olhadela no datasheet e confirme,... por gentileza.

Publique também teu esquema. Pode ser hw e não só sw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, dá uma olhada no projeto (anexo).

Pela programação assim que o botão do portB for acionado deveria executar a função que está definida. 

Mas não funcionou no portB, apenas no portA. 

IMG_20180418_130052595.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fácil amigo. você esqueceu do pullup. Use as conexões vcc e gnd  - aí do lado esquerdo tem algo como power e gnd  - e não vdd e vss que você criou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então fiz o teste aqui mas ainda não funcionou, dá uma olhada 

IMG_20180418_172236705.jpg

adicionado 4 minutos depois

Já verifiquei a entrada de energia e dos sinais. 

IMG_20180418_172703664.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bateu na trave amigo. Mas ainda não é isso. Talvez o sistema esteja meio perdido (=nós) .

 

Veja os símbolos gnd e vcc

proteus.jpg

São: o triângolozinho cortado apontando pra cima e as barrinhas underline decrescentes. Acho que estão naquele botão debaixo da setinha de seleção.

Ou tenta abrir um exemplo que vem com o proteus.

 

 

adicionado 4 minutos depois

Ah e verifique se RA1 é saída push pull. Pode ser que seja só open colector aí tem que tem ter um pullup, you understood?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Isadora Ferraz tá certa...

 

Isso de U1_VDD não vai funcionar porque não existe essa fonte em nenhum lugar de seu esquema !

 

Use apenas o simbolo do Power, que é o simbolo verde que a Isa tá se referindo.

 

Ah, e o GND também está errado.... tem de ser esse simbolo de terra mesmo que está no exemplo do Proteus...

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótimo galera, fiz as alterações assim me indicaram, mas mesmo assim não funciona o botão no portB. 

Esta chegando os 5 volts , então não é mais falta de energia. 

Ainda acho que o programação em linguagem C está faltando algo .

Agradeço qualquer ajuda que me derem.

IMG_20180419_184029254.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 horas atrás, anderson oli disse:

galera,

Aff isso já é perseguição ...

Dica derradeira: pegue o exemplo pisca led ou blinking led ou algo do gênero que vem junto com algum compilador do seu mc .

+1... nunca usei este tal de lat. Sempre escrevi/li diretamente no pino RB0=0; RB1^=1; a=RA0; b=~RA1 e etc

Na prática: pulldown 330 ta 1/2 baixo. Use 1K. Ou prefira 10K pullup.

abç

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Isadora Ferraz disse:

Aff isso já é perseguição ...

 

É, Isa .... tamos velhos demais para aguentar esse novo “palavreado” da juventude kkkkkk .

 

Mas podia ser pior: tem gente que escreve um monte de palavras erradas em um só post... e dizem que estão fazendo curso técnico ou até faculdade !

 

Mas “galera” .... deveria ser um barco grande, cheio de gente remando, quando na verdade o nosso barco tem só nós dois  remando e de vez em quando aparece um ou outro que dá três remadas e se cansa kkkk !

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, peço desculpas por usar o termo "galera".

Estou apenas interessado em descobrir a forma de corrigir o problema que se apresenta em neste simples circuito 

onde o micro-controlador tem que reconhecer que o pino RB7 recebe nível alto (5v) e execute a função destinada a essa confirmação, onde o pino RA7 recebe nível alto (5v) e execute a função perfeitamente e não apresenta falha independente dos nomes que uso para os pontos de alimentação.

23 horas atrás, aphawk disse:

U1_VDD não vai funcionar

independente do nome que dou para os pinos a tensão sempre esteve com o valor de 5v, é so observar a foto onde tem um medidor, indicando que tem os 5v.   

 

Compreendo que me indicarão varias possibilidades de erro como (Power) ou (Ground), ou que os resistores que estou usando esta errado, mas com todos estes ajustes possiveis o esquema ainda não esta funcionando.

 

 

4 horas atrás, Isadora Ferraz disse:

nunca usei este tal de lat. Sempre escrevi/li diretamente no pino RB0=0; RB1^=1; a=RA0; b=~RA1 e

 Referente a esta afirmação, infelizmente não funciona esta linguagem, Pois no PIC 18f1320 já tentei usar e o próprio MikroC aponta que a programação esta errada e não compila, me indicado falha (assingning to non-lvalue 'RA7').

 

Esperava que aqui no Clube do hardware, pudessem me ajudar e não me julgar. 

4 horas atrás, Isadora Ferraz disse:

Aff isso já é perseguição .

   

Com outros micro controladores como PIC 16f628 consegui realizar os testes com estes LEDs usando o esquema que esta na primeira foto, apenas este  18f1320 que não estou conseguindo que execute a programação que foi compilada. 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
44 minutos atrás, anderson oli disse:

Esperava que aqui no Clube do Hardware, pudessem me ajudar e não me julgar. 

 

Opa ninguém está te julgando, meu amigo, é que o uso do termo “galera” fica meio estranho, pois somos poucos aqui a ajudar, e no meu caso, muito pouco posso fazer pois não entendo a linguagem C e não mexo com P-I-C-s ( maldito corretor do Fórum... ) desde 2009.

 

Mas tento dar alguns pitacos, como te abrir os olhos sobre a necessidade ou não de uso de Float no caso de cálculos decimais.

 

Quanto ao "galera", sei que é algo que sai naturalmente. Espero que compreenda que a Isa é pré-histórica, e eu com 58 anos estou chegando lá também  :lol:. E velhos sempre são ranzinzas !

 

Me diga uma coisa : teve a curiosidade de ver os exemplos de programação no site do Mikro C ?

 

Pois tem muitos exemplos com as sintaxes corretas de comandos , como os que você citou que o compilador acusa erros .... veja este aqui por exemplo :

 

https://www.mikroe.com/ebooks/pic-microcontrollers-programming-in-c/example-13

 

Não podemos resolver tudo por você, podemos ajudar, mas a parte básica sempre dependerá de você, ok ?

 

Paulo

Editado por aphawk

Compartilhar este post


Link para o post
Compartilhar em outros sites
30 minutos atrás, anderson oli disse:

ajudar e não me julgar

Perdão amigo mas foi só zoação light de minha (minha) parte e não de todo o cdh ok? Mas considere que nenhum de sua 'galera' se manifestou... só os 2 velhotes aqui kk.  esquece (mas não repita! kk)

 

32 minutos atrás, anderson oli disse:

Referente a esta afirmação, infelizmente não funciona esta linguagem, Pois no PIC 18f1320 já tentei usar e o próprio MikroC aponta que a programação esta errada e não compila, me indicado falha (assingning to non-lvalue 'RA7').

Infelizmente isso não é inerente à linguagem e sim ao compilador. mikcro c me lembro vagamente que pode ser algo como PORTA.F7 ou PORTA.RA7 ou algo do gênero. Como sempre, sugiro que de novo dê uma olhadela nos exemplos que vêm com o compilador...

5 horas atrás, Isadora Ferraz disse:

pegue o exemplo pisca led ou blinking led ou algo do gênero que vem junto com algum compilador do seu mc .

 

Opcionalmente você pode tentar escrever direto no port inteiro algo como
PORTB|=0b000001000;//seta bit 3

PORTB&=0b11110111;//reseta bit 3

 

PORTA|=0b00000010; //seta bit 1

PORTA&=~0b00000010;//reseta

 

Agora se você acabou de almoçar e não quer uma indigestão de informação nem clique em mostrar conteúdo!

 



#define setbit(var,bitno) ((var) |= 1 << (bitno))
#define clrbit(var,bitno) ((var) &= ~(1 << (bitno)))
#define xorbit(var,bitno) ((var) ^= 1 << (bitno))

setbit(PORTA,1);

clrbit(PORTA,1);

xorbit(PORTB,3);

ugh uuggg.... ughhhhlóssssshhhh .. ! kk

abç

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, aphawk disse:

Pois tem muitos exemplos

Verifique os exemplos mas nenhum tinha uma citação sobre usar uma entrada, tinham apenas como usar a saída assim como foi o exemplo abaixo

 

3 horas atrás, Isadora Ferraz disse:

ORTA|=0b00000010; //seta bit 1

PORTA&=~0b00000010;//reseta

 

 

Mas vou continuar na pesquisa. 

Agradeço pela colaboração. 

  • Triste 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@anderson oli ,

 

Repare o uso do comando Button() .... dentro tem o uso das entradas.

 

Mas nada te impede de usar esse comando Button no seu caso também.

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apanhando de 1bit.... fala sério. Se o que te publiquei não for suficiente (fala sério) ... com menos de 1 clique tu encontras a solução... Veja aqui...

:mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×