×
Ir ao conteúdo
  • Cadastre-se

Alimentador Programado em Linguagem C


rafaelberbare

Posts recomendados

Bom sou novo aqui, e tenho uma dúvida, que não consegui achar a resposta de forma clara.

Vou fazer um alimentador para animais de grande porte, como bois e vacas. Ele também será um misturador. Até então tudo Ok. Vou usar horários já pré-estabelecidos, que será controlado pelo RTC Ds1307. O microcontrolador, como muitos usam, é o PIC, vou usar o 16F628A. Porém estou tendo problema com duas coisas. Como eu consegui pegar essa informação do DS e passar para o PIC?

Eu utilizo Linguagem C, o software é o MikroC

#define DS1307_SDA  PIN_B1
#define DS1307_SCL PIN_B0
#use i2c(master, sda=DS1307_SDA, scl=DS1307_SCL)




//==========================
// initial DS1307
//==========================
void init_DS1307()
{
output_float(DS1307_SCL);
output_float(DS1307_SDA);
}
//==========================
// write data one byte to
// DS1307
//==========================
void write_DS1307(byte address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xd0);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xd0);
while(status==1)
{
i2c_start();
status=i2c_write(0xd0);
}
}
//==========================
// read data one byte from DS1307
//==========================
BYTE read_DS1307(byte address)
{
BYTE data;
i2c_start();
i2c_write(0xd0);
i2c_write(address);
i2c_start();
i2c_write(0xd1);
data=i2c_read(0);
i2c_stop();
return(data);
}

#include "16F84A.h"
#use delay(clock=4000000)
#fuses NOWDT,XT, NOPUT, NOPROTECT
#use rs232(baud=9600, xmit=PIN_A0, rcv=PIN_A1)
#include "ds1307.c"

void main(void)
{
int8 sec,min,hour,day,date,month,year;

delay_ms(50);
init_ds1307(); // initial DS1307
sec=read_ds1307(0);
write_ds1307(0,sec & 0x7F); // enable oscillator(bit 7 =0)

while(true)
{
sec=read_ds1307(0); // read second
min=read_ds1307(1); // read minute
hour=read_ds1307(2); // read hour
day=read_ds1307(3); // read day
date=read_ds1307(4); // read date
month=read_ds1307(5); // read month
year=read_ds1307(6); // read year
putc(0x0c);
printf("Time : %02X:%02X:%02X\r\n",hour,min,sec);
printf("Day : %02X\r\n",day);
printf("Date : %02X/%02X/20%02X\r\n",date,month,year);
delay_ms(500);
}
}

Eu tenho essas duas páginas! Alguém pode dizer se isso funciona normalmente? E corretamente?

Qual o melhor sensor para esses tipos de trabalho? Quero usar apenas um para controle de nível! Não sei qual o melhor, se o capacitivo ou o infravermelho!?

Desculpe qualquer coisa, mas se puderem ajudar, agradeço! ^_^

Link para o comentário
Compartilhar em outros sites

Bom vamos a pequenos detalhes que voce deve ficar mais atento:

o primeiro de tudo, conheca qual microcontrolador está usando, pois o PIC16F628A não tem conversor analógico digital, logo como vais fazer um controle de nível sem isso?

segundo, quanto ao DS de nada adianta teres o código se não souber como funciona o protocolo de comunicação dele (no caso o I2C)

leia um pouco o datasheet, em especial a explicação do protocolo:

http://www.alldatasheet.com/view.jsp?Searchword=DS1307

Outro ponto importante é, veja bem de onde pega os códigos fonte, pois como espera que isso funcione se até o PIC está declarado errado:

#include "16f84.h" onde o certo seria : #include "16f628A.h"

So mais uma coisa:

Por favor não use negrito de forma desnecessária pois é desagradavel, soa como se quisesse chamar a atenção, na duvida leia as regras

não me leve a mal, é pro seu bem, e pra garantir que não resolva seu problema com um simples ctrl +c , ctrl +v.

abs.

Link para o comentário
Compartilhar em outros sites

Olha cara... desculpa, não sabia essa coisa de Negrito ai!

Eu sei que o código usa outro PIC (_(

Eu só queria saber se o 16F628A poderia exercer essa função! Mas pelo que eu vi ontem, não exerce. Mas você sabe se o código esta certo? Porque eu já vi que vou ter que utilizar outro PIC ^_^

Mas desculpa quaisquer motivos que deu a entender outra coisa!

E eu sei qual o protocolo de comunicação do DS, eu só queria saber se daria certo com o 628A, mas você já respondeu! -_-

Agora como eu sei que não dá, vou utilizar outro PIC, mas quero saber se o corpo tem alguma concordancia!

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

Curso de Hacker Ético

LANÇAMENTO!

CLIQUE AQUI E CONFIRA!

* Este curso não é ministrado pela equipe do Clube do Hardware.