Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentedjdanielb » 19 mar 2012, 18:40

Salve ragazzi ho finalmente ralizzato il modulo orologio di cui vi chiesi un aiuto di compilazione ( vedi altro topic aperto )

ora arriva il bello.

dunque vorrei sfruttare l'uscita I2C proveniente dal DS1307 ( è presente una apposita piedinatura sulla scheda per prelevare il segnale ) per utilizzarla in ingresso di un PIC 16f84 al quale vorrei collegare due transistor bc337 e quindi due relè. il PIC dovrebbe semplicemente "ascoltare in I2C lo scoccare dei 60 secondi ed eccitare quindi una volta il relè A ( un secondo o anche meno ) e dopo altri 60 secondi il relè B ( un secondo o anche meno )

in pratica dovrebbe ripetere un ciclo di 120 secondi dopo i primi 60 relè A e dopo 120 secondi relè B

domanda: è fattibile ?

ora vi chiedo di astenersi da risposte del tipo "ma fai così oppure era meglio cosà "

mi chiedo il PIC 16f84 ha la capacità per fare quel che richiedo ?

inoltre se aggiungessi due pulsanti al PIC potrei fargli richiamare un mini programma per avanzare di un ora oppure di 23 ore ? ( in pratica per avanzare di un ora dovrebbe compiere 30 cicli di impulsi di relè A e B e così per le 23 ore)

posto un piccolo schema tirato giù in eagle mancano delle cosucci come diodi e resistenze ma rende già l'idea

grazie a chi mi aiuterà

Daniele
Immagine.jpg
Immagine.jpg (35.34 KiB) Osservato 7201 volte
Avatar utente
Foto Utentedjdanielb
3 4
New entry
New entry
 
Messaggi: 93
Iscritto il: 10 mar 2010, 20:18

0
voti

[2] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentesimo85 » 19 mar 2012, 18:46

Non conosco il circuito DS che hai citato e non capisco bene la tecnica che vuoi usare, però la temporizzazione di 120s di per se mi sembra fattibile.. Quanti timer ha il PIC in questione? E da quanti bit sono?

Cosa dice il datasheet?

EDIT: allo schema manca il diodo di protezione per il transistore.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentedjdanielb » 19 mar 2012, 20:05

grazie mille per la risposta

sapevo del diodo ho tirato giù una bozza per siegare il mio desiderio

questo è l'orologio di cui parlo viewtopic.php?f=17&t=33366

ti spiego meglio
funziona con una DS1307 che è un RTC in I2C in pratica passa via I2C i dati di data ed ora alla 16F877 la quale si occupa di gestire questa visualizzazione sul display 16x2

ora nel contempo passa i dati anche ad una uscita piedinata sotto la PIC in modo da poterci collegare altre schede.

io vorrei appunto realizzare una di queste per pilotare questi due relè

mi chiedo riesco a decodificare il segnale I2C del DS1307 con una PIC 16F84 ?

se scrivessi il programma su arduino poi potrei compilarlo per 16F84 ?

grazie mille

Daniele
Avatar utente
Foto Utentedjdanielb
3 4
New entry
New entry
 
Messaggi: 93
Iscritto il: 10 mar 2010, 20:18

0
voti

[4] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentedjdanielb » 19 mar 2012, 20:08

ecco le caratteristiche del DS1307
2688.gif
2688.gif (6.43 KiB) Osservato 7187 volte

Description
The DS1307 serial real-time clock (RTC) is a low-power, full binary-coded decimal (BCD) clock/calendar plus 56 bytes of NV SRAM. Address and data are transferred serially through an I²C, bidirectional bus. The clock/calendar provides seconds, minutes, hours, day, date, month, and year information. The end of the month date is automatically adjusted for months with fewer than 31 days, including corrections for leap year. The clock operates in either the 24-hour or 12-hour format with AM/PM indicator. The DS1307 has a built-in power-sense circuit that detects power failures and automatically switches to the backup supply. Timekeeping operation continues while the part operates from the backup supply. Data Sheet

Download Rev 5 (PDF, 148kB)
E-Mail


Key Features
Real-Time Clock (RTC) Counts Seconds, Minutes, Hours, Date of the Month, Month, Day of the week, and Year with Leap-Year Compensation Valid Up to 2100
56-Byte, Battery-Backed, General-Purpose RAM with Unlimited Writes
I²C Serial Interface
Programmable Square-Wave Output Signal
Automatic Power-Fail Detect and Switch Circuitry
Consumes Less than 500nA in Battery-Backup Mode with Oscillator Running
Optional Industrial Temperature Range: -40°C to +85°C
Available in 8-Pin Plastic DIP or SO
Underwriters Laboratories (UL) Recognized
Avatar utente
Foto Utentedjdanielb
3 4
New entry
New entry
 
Messaggi: 93
Iscritto il: 10 mar 2010, 20:18

0
voti

[5] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentesimo85 » 19 mar 2012, 21:15

djdanielb ha scritto:in pratica passa via I2C i dati di data ed ora alla 16F877

Stai usando un PIC16F84 o un PIC16F877?
mi chiedo riesco a decodificare il segnale I2C del DS1307 con una PIC 16F84?

Il DS1307 ha l'output Open Drain, se lo vuoi interfacciare con il PIC consiglio di usare l'IOC, con resistenza di pull-up sull'output del DS o perché no usare la resistenza di pull-up interna..

Lo puoi usare salvo complicazioni aggiuntive, ma perché non implementare un orologio direttamente con il PIC?

se scrivessi il programma su arduino poi potrei compilarlo per 16F84?

I don't think so..
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[6] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentedjdanielb » 19 mar 2012, 21:22

grazie per la risposta ma forse non sono riuscito a spiegarmi ci riprovo:

le schede sono 2 quindi le PIC sono 2

su ogni scheda c'è una PIC

sulla prima già pronta e funzionante c'è il DS1307 la PIC 16F877 e il display 16x2
oltre a questo è presente l'uscita CLOCK E DATA proveniente dal DS1307

sulla seconda scheda ci andrebbe una seconda PIC ( 16 f84 ) che prendendo i dati provenienti dalla prima scheda dovrebbe SOLO contare 60 secondi per eccitare il primo relè e poi ricontare 60 secondi per eccitare il secondo releè

spero di esser stato chiaro

ora cercando in giro e googlando ho travato una seconda soluzione fatta sfruttando quello che io ho già applicandolo ad un chip ATMEL168 che è lo stesso usato da arduino
Build-the-circuit.jpg
Build-the-circuit.jpg (26.39 KiB) Osservato 7180 volte


mi sembra che questo faccia esattamente quel che volgio io:

ovvero prende dal chip ds1307 il clock e il data e lo sfrutta per pilotare due bc557 e 547

ora però il problema è che io per eccitare i due relè ho bisogno di 12 volt

che ne dite ?

grazie mille

Daniele
Avatar utente
Foto Utentedjdanielb
3 4
New entry
New entry
 
Messaggi: 93
Iscritto il: 10 mar 2010, 20:18

0
voti

[7] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentedjdanielb » 19 mar 2012, 21:26

dunque visto che per programmarlo si è deciso di usare arduino ecco lo sketch per farlo funzionare

Codice: Seleziona tutto
// Lunchtime Clock
// by Randy Sarafan
//
// Slows down 20% at 11 and speeds up 20% at 11:48 until it hits 1.
// The rest of the time the clock goes at normal speed
//
// Do what you want with this code. Just make certain that whatever you do, it is awesome.
//

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

int clockpin = 9;
int clockpin1 = 10;

void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();
}

void loop () {

DateTime now = RTC.now();

TurnTurnTurn(1000);


if (now.hour() == 11) {
for (int i = 0; i < 1800; i++) {
TurnTurnTurn(800);
}

for (int i = 0; i < 1800; i++) {
TurnTurnTurn(1200);
}
}
}

int TurnTurnTurn(int TimeToWait){

analogWrite(clockpin, 0);
analogWrite(clockpin1, 124); // sets the value (range from 0 to 255)
delay(TimeToWait);

analogWrite(clockpin, 124);
analogWrite(clockpin1, 0);
delay(TimeToWait);

}


quello che non capisco è

dove c'è l'uscita per il pin 15 e 16 che in figura si vede vanno ai transistor ?
Avatar utente
Foto Utentedjdanielb
3 4
New entry
New entry
 
Messaggi: 93
Iscritto il: 10 mar 2010, 20:18

1
voti

[8] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentesimo85 » 19 mar 2012, 21:53

Allora. Se usi un PIC16F84 perché programmare un ATmega?
Stai facendo molta confusione. Gli schemi falli in Fidocad ed il circuito stile fumetto con i transistori, non mi piace per niente...

Se solo vuoi interfacciare il DS1307 con il PIC16F84, collega l'output del DS ad un pin con l'IOC, conti le interruzioni tenendo presente che l'interruzione dell'IOC avviene sia per una transizione T_\text{HL} (NGT) come T_\text{LH} (PGT), dopo un tot di numero di interruzioni saranno passati tot secondi e lì commuti i transistori per i relé. Se questo è il problema questa dovrebbe essere la soluzione.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

1
voti

[9] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto UtentePaolino » 19 mar 2012, 22:02

Tieni conto che il PIC16F84 non dispone di un'interfaccia I2C hardware: la dovrai simulare via firmware.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[10] Re: 16F84 e I2C ds1307 eccitare due relè ogni 60 secondi

Messaggioda Foto Utentesimo85 » 19 mar 2012, 22:08

Ciao Foto UtentePaolino, una domanda.

La soluzione con l'IOC proposta l'ho pensata adesso al volo facendo anche altro. Mi sembra fattibile, confermi? È quello che intendi anche tu col simulare l'I2C?
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti