Página 1 de 1
Simples Pisca com 12F629 , não funciona ..

Enviado:
02 Abr 2007 05:12
por geraldomelo
Pessoal , qq tem de errado com esse código hein ? num pisca de jeito nenhum ... o led fica aceso ..
#include <12F629.h>
#fuses INTRC,NOWDT,NOPROTECT, NOMCLR
#use fast _io (A)
#use delay(clock=4000000)
#include <regs_12F6xx.h>
main()
{
osccal=0x48;
trisio=0;
cmcon = 7 ;
gpio=0;
while (1)
{gpio=0;
delay_ms(500);
gpio=1;
}
}
Obrigado
Geraldo

Enviado:
02 Abr 2007 07:49
por fabim
while (1)
{gpio=0;
delay_ms(500);
gpio=1;
}
mais qual GPIO

.....
Use esta logica.
While true do
begin
SetBit(Gpio,0); // porta zero como pisca "GP0" em pascal.
delaymS(500);
clearBit(Gpio,0);
delaymS(500);
End;
Fabim

Enviado:
02 Abr 2007 11:07
por J.lius
#include <12F629.h>
Ou assim, no CCS
#use delay (clock=4000000)
#fuses INTRC_IO, NOWDT, PROTECT, NOBROWNOUT, MCLR, NOCPD, NOPUT
main ()
{
while (1)
{
output_high (PIN_A0);
delay_ms (500);
output_low (PIN_A0);
delay_ms (500);
}
}

Enviado:
02 Abr 2007 12:27
por Fábio Pereira
Geraldo,
Considerando que com GPIO=0 você estará apagando todas as saídas do chip e com GPIO=1 você estará setando o pino 0, ainda assim o seu programa contém um erro grave:
while (1)
{gpio=0;
delay_ms(500);
gpio=1;
}
Veja que após o comando GPIO=1 o programa retorna imediatamente para o início do while, fazendo novamente GPIO=0. Desta forma, o bit 0 permanecerá setado por apenas alguns ciclos de clock.
O correto seria fazer:
while (1)
{gpio=0;
delay_ms(500); // aguarda 500ms com as saídas apagadas
gpio=1;
delay_ms(500); // aguarda 500ms com a saída 0 ativada
}
Até +

Enviado:
02 Abr 2007 22:14
por microeletronica
Exato,
while (1)
{gpio=0;
delay_ms(500);
gpio=1;
delay_ms(500);
}

Enviado:
02 Abr 2007 22:31
por geraldomelo
Ok pessoal , muito obrigado a todos , o problema era esse mesmo que o Fábio mensionou e o microeletronica . Agora tá tudo funcionando , mas tem uma coisa que ainda não , voltando ao novo programa abaixo :
#include <12F629.h>
#fuses INTRC,NOWDT,NOPROTECT, NOMCLR
#use fast _io (A)
#use delay(clock=4000000)
#include <regs_12F6xx.h>
main()
{
osccal=0x5B; // osccal .. valor que vem de fábrica , mas aqui
// no caso , eu fui atribuindo valores e medindo
// no frequencimetro para um valor melhor ..
trisio=0; // trisio zerado .. todos os gpios para saida
cmcon = 7 ; // todas as enradas como digitais
gpio=0; // iniciando o port gpio --> todo zerado
while (true) // enquando verdade , looping infinito
{
gpio=0; // clear byte gpio
gpio=0b00000001; // byte gpio.0 setado
gpio=0; // clear gpio
gpio=0b00000010; // gpio.1 setado
gpio=0; // clear
gpio=0b00000100; // gpio.2 setado
gpio=0; // clear
gpio=0b00010000; // gpio.4 setado
gpio=0; // clear
gpio=0b00100000; // gpio.5 setado
// obs: o gpio.3 é o master clear ,
// por isso não foi usado , pois é só entrada
}
}
, temos que todos os pinos funcionam com uma frequencia de 58,98 khz , com exceção do pino 3 que é só entrada , mas acontece uma coisa estranha no pinos 4 , ele me dá a saida de clock /4 , que tá em 1,002Mhz , ou seja , ele tá me dando o fosc/4 , que tá descrito no datasheet , que ele é também clkout , mas eu não configurei ele como clkout, e também não sei como "desconfiguro" isso , pois queria que ele se comportasse como os pinos restantes ...
abraços + 1 vez pessoal ..
Geraldo .

Enviado:
02 Abr 2007 22:38
por microeletronica
no config, pagina 54 de
http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf
bit2-0
110 = RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
Voce esta em 111, nos bits 0-2 como no power reset!!!!
Nao use INTRC em fuses, utilize o correspondente ao 110


Enviado:
02 Abr 2007 23:07
por microeletronica
#include <12F629.h>
#fuses INTRC_IO,NOWDT,NOPROTECT, NOMCLR
Tenta ai

Enviado:
04 Abr 2007 21:28
por geraldomelo
Pessoal , muito obrigado novamente .. Tudo resolvido .. Microeletronica , bingo , foi oque vc falou mesmo .. só que na verdade eu estava em 101 no fosc2:fosc0 , e eu tinha que tá em 100 ...... Bom , ai , substituindo a sintaxe "INTRC" , pela que vc mandou "INTRC_IO" , ai deu tudo certo , e como vc mesmo disse , é o correspondente ao 100 , no caso : "100 = INTOSC oscillator : i/o function on gp4..... , i/o function on gp5 ..... " .
Exatamente como vc disse , mas agora é que vem ... heheheh onde vc viu que tem que ser essa sintaxe ???? "INTRC_IO" , pq eu não achei em lugar nenhum no sheet, e nem no Help do CCs ... Considerando que só tem essa forma de mexer no endereço 2007h que é além do espaço de memória , como bem diz a "nota" nessa mesma página em cima no canto direito , e diz também que o jeito para gravar nesse endereço , e só durante a programaçõa do chip ... ... então , onde tem essa informação ? mesmo porque , se amanhã eu quiser usar o 011 ? ...
e asim , o tópico também fica bem completo hehehhe ...
abraços novamente a todos ...
valeu microeletronica
Geraldo

Enviado:
05 Abr 2007 09:04
por hemasc
ele viu no arquivo 12F629.h, abra ele e verá nos fuses
Fuses:LP,XT,HS,EC_IO,NOWDT,WDT,CPD,NOCPD,PROTECT,NOPROTECT,NOMCLR
Fuses:MCLR,PUT,NOPUT,INTRC_IO,INTRC,RC_IO,RC,BROWNOUT,NOBROWNOUT