Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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.

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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?

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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ç

Link para o comentário
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

Link para o comentário
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. 

 

 

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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ç

 

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...