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

Arquivado

Este tópico foi arquivado e está fechado para 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...