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

1
voti

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

Messaggioda Foto Utentesimo85 » 20 mar 2012, 3:18

djdanielb ha scritto:l'atmel si limita ad usare solo per prendersi il riferimento del minuto e lo tramuta ofni minuto in un impulso a polarità invertita.

Per cambiare lo stato logico di un pin non ti servono due transistori.
Quel modulo è un perfetto derivato di arduino uno
.
Lo schema dell'Arduino Uno mi sembra diverso. Quel circuito è semplicemente un microcontrollore collegato all'alimentazione, che usa un quarzo da 16MHz..
Tra l'altro il pin di AREF non mi sembra collegato come dovrebbe.. Vedi il datasheet a pagina 250 cosa dice:

"AVCC is connected to the ADC through a passive switch. The internal 1.1V reference is generated from the internal bandgap reference (VBG) through an internal amplifier. In either case, the external AREF pin is directly connected to the ADC, and the reference voltage can be made more immune to noise by connecting a capacitor between the AREF pin and ground. VREF can also be measured at the AREF pin with a high impedance voltmeter. Note that VREF is a high impedance source, and only a capacitive load should be connected in a system."

Quello schema comunque perché dite che non funziona?

Perché non è quella la maniera di collegare i transistori, sia per pilotare uno o due relé (se sono due bastano un NPN ed un PNP, o se vuoi solo uno usando i contatti), tantomeno per pilotare una entrata di clock (se è quello il significato del collegamento "To Clock")! La stupidaggine di pilotare una entrata di clock con un bipolare è qualcosa che ha già fatto il sottoscritto a suo tempo sia per provare sia per non dare la giusta attenzione ai buoni consigli che gli erano stati dati in precendenza. Se vuoi commettere anche tu lo stesso errore sei libero di farlo. Sicuramente impareresti qualcosa, però come dice il proverbio, "uomo avvisato mezzo salvato".

Ma anche se li volessi usare per commutare qualcosa, così come sono messi direi che non vanno bene.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

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

Messaggioda Foto UtentePaolino » 20 mar 2012, 8:52

Ma che precisione temporale necessiti?

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

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

Messaggioda Foto Utentedjdanielb » 20 mar 2012, 10:52

Salve prima di realizzarlo lo proverei con arduino. Comunque in rete è pieno di schemi che usano arduino e il dd 1307. Per il tipo do precisione cerco una buonissima precisione tanta quanta il ds 1307 ne dà. Certo so bene che non è termostatato ne tantomeno radiocontrollato
Grazie mille
Daniele
Avatar utente
Foto Utentedjdanielb
3 4
New entry
New entry
 
Messaggi: 93
Iscritto il: 10 mar 2010, 20:18

0
voti

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

Messaggioda Foto Utentedjdanielb » 20 mar 2012, 12:30

dunque come promesso ( sperando di non infrangere regole altrimente togliete il link ) posto il link da dove è stato preso il progetto

http://www.instructables.com/id/Lunchti ... /?ALLSTEPS

ora io non sono un genio, ma non credo che questo abbia fatto tutto sto accrocco e poi alla fine dopo averlo pubblicato NON FUNZIONI. non voglio dubitare di voi semmai più colpa mia se non sono riuscito a spiegarmi

per completezza metto il mio progetto già realizzato
image (2).jpeg
image (2).jpeg (69.36 KiB) Osservato 5447 volte


e qui lo schema in fodcad dove si vede sotto la PIC i 4 pin di uscita due alimentazione e due CLOCK e DATA
ScreenShot001.jpg
ScreenShot001.jpg (93.07 KiB) Osservato 5447 volte


spero di poter ricevere maggior aiuto

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

0
voti

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

Messaggioda Foto Utentedjdanielb » 20 mar 2012, 12:55

aggiungo schema NON A FUMETTO
c'è da sistemare la linea di alimentazione dei relè poiché così sarebbero alimentata a 5 volt

chiederei aiuto sulla fattibilità in relazione al fatto che secondo me qauello schema è stato realizzato e ha funzionato. ( voi postereste una cosa come quella se poi non funzionasse e vi prenderebbero tutti per i fondelli ?? )

frazie mille

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

0
voti

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

Messaggioda Foto UtenteDryden » 20 mar 2012, 13:49

Ciao, dallo schema da te postato non si vede dove sono le uscite CLOCK E DATA, comunque se sono collegate all'RTC, quello che chiedi non puoi farlo.

Non puoi leggere il DS1307 con 2 micro in parallelo perché se nello stesso istante entrambi i micro leggono l'RTC che succede? Succede che si pianta tutto.

Se eplicavi il progetto completo nell'altro TOPIC (dove chiedevi di compilarti il progetto in PBP) ti avremo subito detto, perche vuoi usare 2 micro per fare il lavoro di 1 (in realtà basta 1/2 micro...)?

Se non conosci i componenti che usi non puoi sperare di fare copia/incolla di 2 progetti diversi, e sperare che funzionino.

Visto che sembri pratico di arduino, io farei a pezzi il primo PCB e ingloberei tutto, cosi usi un micro solo ed è tutto più semplice da gestire, metterci una pezza adesso non è facile, ma non impossibile.
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano

0
voti

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

Messaggioda Foto Utentedjdanielb » 20 mar 2012, 14:25

bena ma llora mi chiedo e vi chiedo:

questo è il sorgente in basic del primo progetto,

chi me lo modifica per abilitare due pin di uscita che servano al caso mio ?
Codice: Seleziona tutto
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : tommaso vincenti                                  *
'*  Notice  : Copyright (c) 2009 2009                           *
'*          : All Rights Reserved                               *
'*  Date    : 24/10/2009                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************


   '   DS1307 RTC Program
   '   Includes Setting the Date and Time
   '      3 Buttons Control Setting...
   '      12/24 hour Clock Mode
   '      Year
   '      Month
   '      Day of Month (also accounting for Leap Years)
   '      Hour
   '      Minute
   '      Second
   '
   '   Written for 2 line 16 Character LCD
   '
   '   This program is designed to "hold your hand" and prevent you
   '      from setting any invalid data combinations into the DS1307
   '
   '   It's a crude program, but demonstrates how to set the clock
   '      with control buttons
   '
   '   You will be automatically returned to the Time & Date display if
   '      you are in the Setup and don't touch any Buttons for 20 seconds
   
    include "modedefs.bas"

   DEFINE OSC 4   
   Define LCD_DREG PORTB   ' Port for LCD Data
   Define LCD_DBIT 4   ' Use lower 4 bits of Port
   Define LCD_RSREG PORTB   ' Port for RegisterSelect (RS) bit
   Define LCD_RSBIT 1   ' Port Pin for RS bit
   Define LCD_EREG PORTB   ' Port for Enable (E) bit
   Define LCD_EBIT 3   ' Port Pin for E bit
   DEFINE LCD_RWREG PORTB
    DEFINE LCD_RWBIT 2
    Define LCB_BITS 4   ' Using 4-bit bus
   Define LCD_LINES 2   ' Using 2 line Display
   Define LCD_COMMANDUS 2000
    Define LCD_DATAUS 100   ' Data Delay (uS)

   SCLpin var PORTD.0
   SDApin var PORTD.1

   
   DecButton var PORTD.3   ' Press to Decrement Button
   SetButton var PORTC.4   ' Press to Set/memorise Button
   IncButton var PORTC.5   ' Press to Increment Button

   
   '   EEPROM Locations

   Data @0,71,101,110,70,101,98,77,97,114,65,112,114
      ' Gen Feb Mar Apr
   Data 77,97,103,71,105,117,76,117,103,65,103,111
      ' Mag Giu Lug Ago
   Data 83,101,116,79,116,116,78,111,118,68,105,99
      ' Set Ott Nov Dic
   Data 77,97,114,77,101,114,71,105,111,86,101,110
      ' Mar Mer Gio Ven
   Data 83,97,98,68,111,109,76,117,110
      ' Sab Dom Lun


   '   RAM Assignments and Variables
   
   CounterA var byte   ' General purpose Variable
   CounterB var byte   ' General purpose Variable
   CounterC var byte   ' General purpose Variable
   CounterD var byte   ' General purpose Variable
   RTCSec var byte      ' Seconds
   RTCMin var byte      ' Minutes
   RTCHour var byte   ' Hours
   RTCWDay var byte   ' Weekday
   RTCDay var byte      ' Day
   RTCMonth var byte   ' Months
   RTCYear var byte   ' Year
   RTCCtrl var byte   ' Control
   SetTime var byte   ' 12/24 Hour Clock
   SetSec var byte      ' Seconds
   SetMin var byte      ' Minutes
   SetHour var byte   ' Hours
   SetDay var byte      ' Day
   SetMonth var byte   ' Months
   SetYear var byte   ' Year
   TimeOut var word   ' Variable for SetUp Menu Time-Out


   ButtonRepeat con 200   

    char    var     byte            ' Storage for serial character
    mode    var     byte            ' Storage for serial mode
    rcv     var  PORTD.6         ' Serial receive pin
    tx      var  PORTD.7
    mode = 2
   
   goto JumpStart


   '
   '   Subroutine Nest Area
   '   ====================

   '
   '   Subroutine Converts back to BCD
   '   -------------------------------
      ' CounterA is the entry variable
      ' CounterB holds the converted BCD result on exit
ConvertBCD:
   CounterB=CounterA DIG 1
   CounterB=CounterB<<4
   CounterB=CounterB+CounterA DIG 0
   Return

   '
   '   Subroutine Displays Month at current Cursor Position
   '   ----------------------------------------------------
      ' CounterB holds Month (1-12) this value is destroyed by the routine
      ' additionally uses CounterA and CounterD variables
DisplayMonth:
   CounterB=CounterB*3-3   ' Convert BCD Month to EEPROM Start Address
DisplaySequence:
   For CounterA=CounterB to CounterB+2
            ' Read and Display Month
      Read CounterA,CounterD
      LCDOut CounterD
      Next CounterA
   Return

   '
   '   Subroutine works out Number of Days in the Month
   '   ------------------------------------------------
      ' SetYear - entry variable containing year (0-99)
      ' SetMonth - entry Variable Containing Month (1-12)
      ' CounterA - exits with number of days
FindDays:
   LookUp SetMonth-1,[31,28,31,30,31,30,31,31,30,31,30,31],CounterA
      ' Above line gives the 'usual' days of the Month
      ' Section below adjusts for Leap-Year
   If SetMonth=2 then
      If (SetYear&$03)=0 then CounterA=29
      endif
   Return
   
   '
   '   Subroutine waits until user reseases Set Button
   '   -----------------------------------------------
SetButtonRelease:
   LCDOut $FE,1
   While SetButton=0:Wend
   Pause 250   ' Small pause to kill any Key-Bounce
   Return

   '
   '   End of Subroutine Nest Area
   '   ---------------------------

   '
   '   Actual Start of Real Program
   '   ============================
JumpStart:

   '
   '   Reset Hardware
   '   --------------
   Pause 200      ' Timeout for LCD to settle

   '
   '   Time & Date Display Loop
   '   ========================
ReDisplay:
   LCDOut $FE,1      ' Clear LCD
ReDisplayLoop:
      '
      '   Read RTC
      '   --------
   I2CRead SDApin,SCLpin,$D0,$00,[RTCSec,RTCMin,RTCHour,RTCWDay,RTCDay,RTCMonth,RTCYear,RTCCtrl]
      '
      '   Decide if Setup Required/Wanted
      '   -------------------------------
   If RTCSec.7=1 then goto SetUpPreset
            ' Hands-Up who noticed the fact that when the DS1307
            ' powers-up initially from cold, and all it's
            ' registers are potentially "unpredictable", that
            ' Seconds bit 7 is always high?
            ' We can use this feature to automatically jump to
            ' our 'Setup' routine on initial power-up if the user
            ' forgets to keep 'Setup' depressed and so prevent
            ' any 'undesriable' Time & Date displays...
   If SetButton=0 then
            ' If Set Button is pressed, User will be taken to
            ' the Setup Menu.  If the Set Button is pressed at
            ' Power-Up, then the User will be taken to the Setup
            ' Menu directly without any intermediate display
      Gosub SetButtonRelease
      goto Setup
      endif   
   '
   '   Display RTC
   '   -----------
   '   Displayed on 2-line 16 character LCD in the form...
   '      10:15:00 AM
   '      Wed 12 Jun 2002
   '   Note - AM/PM indicator only shows in 12 hour mode.
   '   Additionally there is Hours leading Zero Surpression in 12-Hour Mode
   '      after-all, you don't display 07pm do you?
   '
      '
      '   Display Time on Line 1
      '   ----------------------
   LCDOut $FE,$80
   If RTCHour.6=1 then
         ' Work-Out 12 or 24 hour Display for Hours
      CounterA=(RTCHour>>4)&$01
      else
      CounterA=(RTCHour>>4)&$03
      endif
   CounterA=CounterA*10+(RTCHour&$0F)
   If RTCHour.6=1 then
         ' Display Hours appropriately for 12 or 24 hour Mode
      LCDOut #CounterA
      else
      LCDOut #CounterA Dig 1,#CounterA Dig 0
      endif
   LCDOut ":",#(RTCMin>>4)&$0F,#RTCMin&$0F,":"
   LCDOut #(RTCSec>>4)&$0F,#RTCSec&$0F," "
   IF RTCHour.6=1 then
      If RTCHour.5=1 then
         LCDOut "PM"
         else
         LCDOut "AM"
         endif
      endif
      '
      '   Display Day of Week on Line 2
      '   -----------------------------
         ' Let's face it... the DS1307 doesn't calculate the Day of Week,
         ' all it does is increment a number at each mignight from
         ' 1 thru 7 and roll back to start from 1 all over again.
         ' It's really up to you to work out the DOW and program it in.
         ' This is a tough nut for integer math to do... see the
         ' 'Calculate Day of Week' routine in the setup section.
   LCDOut " ",$FE,$C0
   CounterB=RTCWDay*3+33   ' Convert BCD WeekDay to EEPROM Start Address
   Gosub DisplaySequence   ' Display 3 character sequence from EEPROM
      '
      '   Display Date on Line 2
      '   ----------------------
   LCDOut " ",#(RTCDay>>4)&$0F,#RTCDay&$0F," "
   CounterB=((RTCMonth>>4)&$0F)*10+(RTCMonth&$0F)
   Gosub DisplayMonth
   LCDOut " 20",#(RTCYear>>4)&$0F,#RTCYear&$0F,$FE,$80
   '
   Pause 250      ' Repeat about 4 times/sec
   Goto ReDisplayLoop

   '
   '   Clock and Calandar Settings
   '   ===========================
      '
      '   Initial Default Settings
      '   ------------------------
      ' Default setting preset to the moment this program first born
      '
SetupPreset:
   RTCSec=$00      ' Seconds preset to 00
   RTCMin=$15      ' Minutes preset to 15
   RTCHour=$13      ' Hours preset to 13'00
   RTCWDay=$01      ' Weekday preset to 01
   RTCDay=$12      ' Day preset 12
   RTCMonth=$06      ' Months preset to June
   RTCYear=$02      ' Year preset to 2002
   RTCCtrl=$10      ' Control preset to output 1 second 'Tick' on SQWpin
      '
      '   Convert the Current BCD Data to Something easier to Edit
      '   --------------------------------------------------------
Setup:
   SetTime=RTCHour.6   ' Determines 12/24 Hour mode
   If SetTime=1 then
            ' Regardless of 12/24 options, SetHour always
            ' contains the hours in 24 hour clock format
            ' otherwise there's twice the amount of work
            ' to keep track in the edit routines
      SetHour=(RTCHour>>4)&$01
            ' if 12-hour mode
      else
      SetHour=(RTCHour>>4)&$03
            ' if 24 hour mode
      endif
   SetHour=SetHour*10+(RTCHour&$0F)
   If SetTime=1 then
      If RTCHour.5=1 then
         If SetHour<12 then SetHour=SetHour+12
            ' Add-in the AM/PM indicator
         else
         If SetHour=12 then SetHour=0
         endif
      endif
   SetMin=((RTCMin>>4)&$0F)*10+(RTCMin&$0F)
   SetSec=((RTCSec>>4)&$0F)*10+(RTCSec&$0F)
   SetYear=((RTCYear>>4)&$0F)*10+(RTCYear&$0F)
   SetMonth=((RTCMonth>>4)&$0F)*10+(RTCMonth&$0F)
   SetDay=((RTCDay>>4)&$0F)*10+(RTCDay&$0F)
      '
      '   Setup Menu Loop
      '   ---------------
   CounterC=0      ' Set to Start of Setup (seven steps from 0 to 6)
   TimeOut=0      ' Zero the Time-Out counter
SetupLoop:
   LCDOut $FE,1,"Imp "
      '
      '   First Display the Menu Prompts
      '   ------------------------------
      '   This is a crude way of doing the entry Menu's but it was
      '   pretty fast and quite mindless to program this lunch-hour
      '
   If CounterC=0 then
      LCDOut "AM/PM"
      endif
   If CounterC=1 then
      LCDOut "Ora"
      endif
   If CounterC=2 then
      LCDOut "Min"
      endif
   If CounterC=3 then
      LCDOut "Sec"
      endif
   If CounterC=4 then
      LCDOut "AA   : 20"
      endif
   If CounterC=5 then
      LCDOut " MM"
      endif
   If CounterC=6 then
      LCDOut " GG"
      endif
   If CounterC<>4 then LCDOut " :"
      '
      '   Now Display the Data
      '   --------------------
SetupDisplayLoop:
         '
         '    12/24 Hour Option
         '   -----------------
   If CounterC=0 then
      LCDOut $FE,$8B
      If SetTime=0 then
         LCDOut "24HR"
         else
         LCDOut "12HR"
         endif
      LCDOut $FE,$8B
      endif
         '   Hours
         '   -----
         '   Hours are tricky because of the 12/24 & AM/PM bit
         '   so we have to reconvert 1-24 back to 1-12 plus AM/PM
   If CounterC=1 then
      CounterA=SetHour
      If SetTime=1 then
         LCDOut $FE,$8E
            ' Display AM/PM bit
         If CounterA<12 then
            LCDOut "AM"
            else
            LCDOut "PM"
            endif
         If CounterA=0 then CounterA=12
         If CounterA>12 then CounterA=CounterA-12
         endif
      LCDOut $FE,$8C,#CounterA
      If CounterA<10 then LCDOut " "         
      LCDOut $FE,$8C
      endif
         '
         '   Minutes
         '   -------
   If CounterC=2 then
      LCDOut $FE,$8E,#SetMin
      If SetMin<10 then LCDOut " "
      LCDOut $FE,$8E
      endif
         '
         '   Seconds
         '   -------
   If CounterC=3 then
      LCDOut $FE,$8E,#SetSec
      If SetSec<10 then LCDOut " "
      LCDOut $FE,$8E
      endif
         '
         '   Year
         '   ----
   If CounterC=4 then
      LCDOut $FE,$8D,#SetYear DIG 1,#SetYear Dig 0
      LCDOut $FE,$8D
      endif
         '
         '   Month
         '   -----
         '   Here's a nice touch to setting the month rather
         '   than the usual number entry method...
         '
   If CounterC=5 then
      LCDOut $FE,$8C
      CounterB=SetMonth
      Gosub DisplayMonth
      LCDOut $FE,$8C
      endif
         '
         '   Day
         '   ---
   If CounterC=6 then
      LCDOut $FE,$8A,#SetDay
      If SetDay<10 then LCDOut " "
      LCDOut $FE,$8A
      endif
      '
      '   The Data-Entry Bit
      '   ------------------
SetupEntryLoop:
         '
         '   Decrement Button Pressed
         '   ------------------------
   If DecButton=0 then
            '
            '   12/24 Clock Selection
            '   ---------------------
      If CounterC=0 then
         If SetTime=0 then
            SetTime=1
            else
            SetTime=0
            endif
         endif
            '
            '   Decrement Hours
            '   ---------------
      If CounterC=1 then
         If SetHour=0 then
            SetHour=23
            else
            SetHour=SetHour-1
            endif
         endif
            '
            '   Decrement Minutes
            '   -----------------
      If CounterC=2 then
         If SetMin=0 then
            SetMin=59
            else
            SetMin=SetMin-1
            endif
         endif
            '
            '   Decrement Seconds
            '   -----------------
            '   Kinda overkill to include setting seconds,
            '   but if you got codespace to burn...
      If CounterC=3 then
         If SetSec=0 then
            SetSec=59
            else
            SetSec=SetSec-1
            endif
         endif
            '
            '   Decrement Years
            '   ---------------
      If CounterC=4 then
         If SetYear=0 then
            SetYear=99
            else
            SetYear=SetYear-1
            endif
         endif
            '
            '   Decrement Month
            '   ---------------
      If CounterC=5 then
         If SetMonth=1 then
            SetMonth=12
            else
            SetMonth=SetMonth-1
            endif
               '
               ' Changing the Month has a bearing on the
               ' days, especially if you've got days preset
               ' to 31 and you now select a month with fewer
               ' days... so this bit here just prevents that
         Gosub FindDays
         If SetDay>CounterA then SetDay=CounterA
         endif
            '
            '   Decrement Days
            '   --------------
            '   Tricky one here... go work-out the days
            '   of the month first...
      If CounterC=6 then
         Gosub FindDays
         If SetDay=1 then
            SetDay=CounterA
            else
            SetDay=SetDay-1
            endif
         endif
      Pause ButtonRepeat
      TimeOut=0
      Goto SetUpDisplayLoop
      endif
         '
         '   Increment Button Pressed
         '   ------------------------
         '    This is just like Decrement but opposite...
   If IncButton=0 then
            '
            '   12/24 Clock Selection
            '   ---------------------
      If CounterC=0 then
         If SetTime=1 then
            SetTime=0
            else
            SetTime=1
            endif
         endif
            '
            '   Increment Hours
            '   ---------------
      If CounterC=1 then
         If SetHour=23 then
            SetHour=0
            else
            SetHour=SetHour+1
            endif
         endif
            '
            '   Increment Minutes
            '   -----------------
      If CounterC=2 then
         If SetMin=59 then
            SetMin=0
            else
            SetMin=SetMin+1
            endif
         endif
            '
            '   Increment Seconds
            '   -----------------
            '   Kinda overkill to include setting seconds,
            '   but if you got codespace to burn...
      If CounterC=3 then
         If SetSec=59 then
            SetSec=0
            else
            SetSec=SetSec+1
            endif
         endif
            '
            '   Increment Years
            '   ---------------
      If CounterC=4 then
         If SetYear=99 then
            SetYear=0
            else
            SetYear=SetYear+1
            endif
         endif
            '
            '   Increment Month
            '   ---------------
      If CounterC=5 then
         If SetMonth=12 then
            SetMonth=1
            else
            SetMonth=SetMonth+1
            endif
               '
               ' Changing the Month has a bearing on the
               ' days, especially if you've got days preset
               ' to 31 and you now select a month with fewer
               ' days... so this bit here just prevents that
         Gosub FindDays
         If SetDay>CounterA then SetDay=CounterA
         endif
            '
            '   Increment Days
            '   --------------
            '   Tricky one here... go work-out the days
            '   of the month first...
      If CounterC=6 then
         Gosub FindDays
         If SetDay=>CounterA then
            SetDay=1
            else
            SetDay=SetDay+1
            endif
         endif
      Pause ButtonRepeat
      TimeOut=0
      Goto SetupDisplayLoop
      endif
         '
         '   Set Button Pressed
         '   ------------------
   If SetButton=0 then
      CounterC=CounterC+1
            ' Increment Menu Item
      TimeOut=0
      If CounterC>6 then
            ' Save Data if all edit items exhaused
         LCDOut $FE,1,"Memorizzato"
            ' Make the User feel happy
            '
            '   Save 12/24 Hours to BCD DS1307's Format
            '   ---------------------------------------
         CounterA=SetHour
         If SetTime=1 then
            If CounterA>12 then CounterA=CounterA-12
            If CounterA=0 then CounterA=12
            endif
         Gosub ConvertBCD
         RTCHour=CounterB
               ' Save the Hours Value
         If SetTime=1 then
            RTCHour.6=1
               ' Save the 12 Hour Mode Flag
            If SetHour=>12 then RTCHour.5=1
               ' Save the 'PM' Flag
            endif
            '
            '   Save Minutes
            '   ------------
         CounterA=SetMin
         Gosub ConvertBCD
         RTCMin=CounterB
            '
            '   Save Seconds
            '   ------------
         CounterA=SetSec
         Gosub ConvertBCD
         RTCSec=CounterB
            '
            '   Save Year
            '   ---------
         CounterA=SetYear
         Gosub ConvertBCD
         RTCYear=CounterB
            '
            '   Save Month
            '   ----------
         CounterA=SetMonth
         Gosub ConvertBCD
         RTCMonth=CounterB
            '
            '   Save Day
            '   --------
         CounterA=SetDay
         Gosub ConvertBCD
         RTCDay=CounterB
            '
            '   Calculate Day of Week & Save
            '   ----------------------------
               ' Melanie's fudge for calculating Days of Week
               ' using PBP's integer math...
               ' by the time someone's clock displays the
               ' the wrong Day of Week, I'll hopefully have long
               ' retired and be past caring...
               ' I wouldn't however go stick this routine in a
               ' Nuclear Power Station to purge the reactor
               ' every Monday morning without checking how far it
               ' will work before the integer math overflows...
               ' In my routine RTCWDay=1 is a Tuesday (the
               ' start of my week) and continues sequentially
               ' until RTCWDay=7 which is a Monday
         CounterA=SetYear+4
         CounterB=SetMonth
         If SetMonth<3 then
            CounterA=CounterA-1
            CounterB=CounterB+12
            endif
         CounterD=(SetDay+(153*CounterB-457)/5+365*CounterA+CounterA/4-CounterA/100+CounterA/400+2) MOD 7
         RTCWDay=CounterD+1
            '
            '   Do the Business
            '   ---------------

         I2CWrite SDApin,SCLpin,$D0,$00,[RTCSec,RTCMin,RTCHour,RTCWDay,RTCDay,RTCMonth,RTCYear,RTCCtrl]
         Pause 1000
         Gosub SetButtonRelease
         Goto ReDisplay
         endif
      Gosub SetButtonRelease
      Goto SetupLoop   ' Loop for Next Menu Item
      endif
      '
      '   Menu TimeOut Counter
      '   --------------------
   Pause 1         ' Kill 1mS
   TimeOut=TimeOut+1
   If TimeOut>20000 then goto ReDisplay
            ' User paused too long
            ' Return User to Time & Date Display
            ' This will however bounce the User to the original
            ' Setup Menu start point if the DS1307 has not
            ' been initialised
   Goto SetupEntryLoop   ' Loop for Button Press

   '
   End


infine solo per curiosità

il protocollo I2C sbaglio o consente di comunicare tra un master e più slave ? perché qui non potrebbe essere master il primo e slave il secondo ?

del resto guardate chi progettò questo orologio cosa fece

Immag0024.jpg
Immag0024.jpg (60.2 KiB) Osservato 5436 volte


qui si vede benissimo che è stato alloggiato su una piastra che aveva bisogno dell'ora in I2C

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

0
voti

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

Messaggioda Foto Utentedjdanielb » 20 mar 2012, 22:39

ragazzi scusatemi ma dovete permettermi questo sfogo.

Io credo che qui sul forum ci siano molte persone che parlano giusto perché hanno una tastiera.

Non voglio mettere in discussione le competenze e le conoscenze di chi mi ha gentilmente risposto, però una cosa è strana: se chiedo come modificare un circuito anzichè trovare una soluzione si incomincia a dire " ma qui ma lì " lo schema è incompleto o scemnze simili. Poi postato uno schema fatto a dovere si incomincia a dubitare sulla funzionalità.
Allora posto il link di chi lo ha fatto e le varie foto del funzionamento.
Quando alla fine si dovrebbe solo dare la soluzione NESSUNO SI FA PIù SENTIRE.

Lo chiamate aiuto ?

chi ieri ha detto che il progetto non avrebbe funzionato dov'è ora ? ho postato foto e link NON CHIACCHIERE come se lo spiega ? oppure l'elettronica funziona diversamente per gli altri ?

Preferirei che i ciarlatani e basta stiano zitti perché di chiacchier enon me ne faccio nulla. Altrimenti non scirvete baggianate, perché per quelle già ci penso io, altrimenti non starei qui a chiedere.

Pertanto se le persone che vorranno aiutarmi di qui in avanti sono sciettici o contrari del funzionamento sono pregati VISTE le evidente prove che FUNZIONA il tutto di parlare con cognizione di causa.

Grazie mille di cuore a tutti coloro che mi aiuteranno

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

2
voti

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

Messaggioda Foto Utentesimo85 » 21 mar 2012, 2:42

djdanielb ha scritto:Ragazzi scusatemi ma dovete permettermi questo sfogo.
se chiedo come modificare un circuito anzichè trovare una soluzione si incomincia a dire " ma qui ma lì " lo schema è incompleto o scemnze simili.

NESSUNO SI FA PIù SENTIRE.

Lo chiamate aiuto ?
Chi ieri ha detto che il progetto non avrebbe funzionato dov'è ora ?

È qui. Nessuno si fa più sentire cosa? Cosa vuol dire? Per caso credi che siamo tutti qui per stare dietro a te? Qui nessuno deve niente a qualcuno... Ringrazia che qualcuno ti ha suggerito che lo schema postato con l'ATmega168 non è il massimo. Ringrazia che qualcuno si è offerto di darti una mano, qualcun altro ha anche suggerito una soluzione. L'hai presa in considerazione? Non mi sembra, sei passato da parlare di PIC a Arduino per finire con un ATmega.
Sai quello che vuoi fare oppure no? Se non ti chiarisci tu non lo possiamo fare noi per te. FYI, io lavoro di notte e durante il giorno faccio anche altro, ma non il veggente.

Preferirei che i ciarlatani e basta stiano zitti perché di chiacchier enon me ne faccio nulla. Altrimenti non scirvete baggianate, perché per quelle già ci penso io, altrimenti non starei qui a chiedere.

Visto che i consigli che ti ho riportato io riguardo alla polarizzazione dei transistori le consideri solo chiacchiere, vado a chiacchierare con la mia amica, che almeno per qualcosa mi ringrazia. :mrgreen:

Visto che tu sei più bravo di me mi sembra inutile che io mi preoccupi per te, tantomeno a quest'ora. Questo è il mio sfogo.

O_/
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

3
voti

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

Messaggioda Foto UtentePaolino » 21 mar 2012, 9:15

La soluzione proposta da [user]gohan[/user] nel post [13] sembra essere adeguata, ma va elaborata. Ovviamente se vuoi usare un PIC. Se vuoi usare altro, allora... #-o #-o #-o

Ora, se non vuoi che 4 ciarlatani vadano in confusione, è meglio che tu chiarisca a te stesso e ai 4 ciarlatani le idee. A mio avviso, nell'ordine:
1. devi stendere una specifica su quello che deve fare il tuo sistema;
2. dalla specifica passi ad uno schema a blocchi, includendo TUTTO: display, pulsanti, transistor e quant'altro. Aggiungere qualcosa dopo significa che le specifiche non erano chiare quindi riparti dal punto 1.
3. scegli i dispositivi che vorresti usare, a partire dal microcontrollore, leggendo i datasheet

Fatti questi tre passi, avranno tutti le idee più chiare!

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)

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti