Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Organizacija programa za uro

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Sob Jan 03, 2009 8:18 pm    Naslov sporočila: Organizacija programa za uro Odgovori s citatom

Nikakor nimam ideje kako bi si v mikroprocesorju izvajal ukaze vezane na določen čas, kjer morem ob uri izključiti in vključiti določen pin.
Ne vem kako voditi in dopolnjevati tabelo podatkov z uro in ukazom, vklop ali izklop.

Podatke bi bilo dobro zapisati v eeprom…

Mi lahko samo nakažete idejo kako ste se Vi lotili tega problema.

Hvala

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Sob Jan 03, 2009 8:39 pm    Naslov sporočila: Odgovori s citatom

Tole me še zanima
Ali je smiselno te podatke nenehno brati iz eeproma ali jih prenesti v spremenljivke tipa polje.
Hitrost ni problem saj se bo branje izvršilo vsako minuto.


Ali lahko nenehno branje podatkov iz eeproma škodi AVR-ju tako kot pisanje vanj.

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jan 04, 2009 9:56 am    Naslov sporočila: Nekaj podbnega Odgovori s citatom

Nekaj podobnega sem počel, ko sem delal napravo za vodenje centralne kurjave.
Centralna kurjava se vodi po urniku, ki ga predpiše uporabnik. Ta urnik je drugačen za delavnik, drugačen za praznik. Poleg tega pa dopušča tudi izjeme, ki si jih zaželi uporabnik. Uporabnik lahko tudi kadarkoli ta urnik spremeni po svoji želji.

Ko je urnik v eepromu, je potrebno seveda vedeti, kateri dan je danes in koliko je ura. To je zapisano v RTC PCF čipu.

Naprava vsako minuto pogleda kateri dančas je, in na osnovi le tega dobi parametre za vodenje centralne kurjave.

Naprava nima tipkovnice. Vse upravljanje in spraševanje je zamišljeno preko GSM SMS-ov.

Glede na tri precej obsežne komponente - vodenje urnikov, komuniciranje z GSM-om in vodenje naprav centralne kurjave, (Odtipavanje temperatur, upravljanje z mešalnim ventilom, črpalkami in kotlom) je program narasel preko 16K in sem moral preskočiti na ATMEGA32. Ampak sedaj so vsi zadovoljni.

Kaj bi pa ti rad naredil?

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Ned Jan 04, 2009 11:32 am    Naslov sporočila: Odgovori s citatom

Imam napravo z 8 izhodi.
Izhode postavljam ON/OFF.
Imam tudi časovne vklope (vklop in avtomatski izklop čez npr. 2 uri)
Intervalno delovanje (npr 15 min ON – 30 min OFF)
Manjka mi še vklop in izklop na uro.

Časi vklopov in izklopov bi se programirali na daljavo – torej bi se zapisali v eeprom AtMega32.

Nimam ideje kako bi organiziral ta del programa.

Jaz morem zapisati v uro in podatek vklop ali izklop in po možnosti tudi dan.
Problem je ker v ee prom ne moram spraviti spremenjivko tipa Word. Ampak samo Byte.
312501
3 - izhod 3
12 - ura
50 – min
1 – vklop

Ta del mi ni jasen kako narediti

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jan 04, 2009 11:59 am    Naslov sporočila: Seveda Odgovori s citatom

Seveda lahko definiraš v eepromu spremenljivke tipa word. Le računati ne moreš znjimi direktno, temveč jih moraš najprej prenesti v spremenljivko tipa word v ramu in potem lahko z njo računaš

dim ew as ERAM WORD
dim w as word

Prenos iz eeproma v ram:
w = ew
račun
w = w * 2

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Ned Jan 04, 2009 12:07 pm    Naslov sporočila: Odgovori s citatom

Mislim da se bom poslužil kr stringov
$eeprom
Dim Ee As String * 6
Dim Rr As String * 6
Dim Aa As String * 6
Dim Gg As String * 6

Ee = "abcdef"
Rr = "123456"
Aa = "a1b2c3"

Writeeeprom Ee , 1
Writeeeprom Rr , 10
Writeeeprom Aa , 20


Readeeprom Gg , 1
Print Gg
Readeeprom Gg , 10
Print Gg
Readeeprom Gg , 20
Print Gg


'prints 1
End

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Jan 04, 2009 12:53 pm    Naslov sporočila: Odgovori s citatom

Nasvet glede hardwera. Vzemi philipsov PCF8583. V nejmu imaš vse RTC, eeprom, poganjaš ga z lastnim oscilatorjem. Zelo mala poraba - ni problema glede rezervnega napajanja - zadostuje že večji elektrolit. Na mikrokontrolerju porabiš le dva pina (I2C).
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jan 04, 2009 2:16 pm    Naslov sporočila: osebno Odgovori s citatom

No, osebno smatram writeeeprom in readeeprom za precej nerodne ukaze. Osebno bi to naredil tako:

Koda:
Dim Ee As Eram String * 6
Dim Rr As Eram String * 6
Dim Aa As Eram String * 6
Dim Gg As eram String * 6

Ee = "abcdef"
Rr = "123456"
Aa = "a1b2c3"
' je že vse v eepromu.
' ko hočem s stringom delati ga prenesem v string v ramu:

dim xx as string *6

xx = ee ' s tem prenesem v ram
print xx
' itd


Je pa seveda res, da lahko uporabiš tudi ram v rtc čipu, kot svetuje silvo in ki ga je kar precej, a dostop do njega ni tako enostaven, je pač treba uporabljati nize ukazov ki veljajo za I2C protokol.

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
dragoon
Novinec


Pridružen/-a: Ned Sep 2007 5:42
Prispevkov: 5

PrispevekObjavljeno: Čet Jan 29, 2009 11:38 am    Naslov sporočila: Odgovori s citatom

uporabi 32 khz kristal na tosc pinih, timer2 nastavi kot asinhroni števec, preskaler na 128. vklopi interrupt.
s tem dobiš interupt na vsako sekundo, po mojih izkušnjah zelo točno, mora pa bit kristal čisto blizu pinov, lahko pa malo korigiraš z zunanjim kondenzatorjem.

nastavitve za timer2
Koda:
// Timer/Counter 2 initialization
// Clock source: TOSC1 pin
// Clock value: PCK2/128
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x08;
TCCR2=0x05;
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;


v interrutp rutini uporabi tole kodo, sicer je za c, pa boš že predelal v basic:

Koda:
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
 if (++t.second==60)         //keep track of time, date, month, and year
    {
        t.second=0;
        if (++t.minute==60)
        {
            t.minute=0;
            if (++t.hour==24)
            {
                t.hour=0;
                if (++t.date==32)
                {
                    t.month++;
                    t.date=1;
                }
                else if (t.date==31)
                {                   
                    if ((t.month==4) || (t.month==6) || (t.month==9) || (t.month==11))
                    {
                        t.month++;
                        t.date=1;
                    }
                }
                else if (t.date==30)
                {
                    if(t.month==2)
                    {
                       t.month++;
                       t.date=1;
                    }
                }             
                else if (t.date==29)
                {
                    if((t.month==2) && (not_leap()))
                    {
                        t.month++;
                        t.date=1;
                    }               
                }                         
                if (t.month==13)
                {
                    t.month=1;
                    t.year++;
                }
            }
        }
    }
    sprintf(lcd_buffer,"%02d:%02d:%02d  %02d/%02d/%04d",t.hour, t.minute, t.second, t.date, t.month, t.year);
    lcd_gotoxy(0,3);
    lcd_puts(lcd_buffer);         
}
   
char not_leap(void)      //check for leap year
{
    if (!(t.year%100))
        return (char)(t.year%400);
    else
        return (char)(t.year%4);
}   
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Bojan
Profesionalec


Pridružen/-a: Ned Mar 2004 22:24
Prispevkov: 70

PrispevekObjavljeno: Ned Feb 01, 2009 10:12 am    Naslov sporočila: Odgovori s citatom

Uporabi 32KHz kristal, brez dodatne ure, razen če misliš da boš imel težave z napajanjem. Skoraj vsak (skoraj) ima nortanjo uro. SW ti že vse omogoča.
Jaz sem samo enkrat v eni aplikaciji dal zunanjo uro, pa mi je bilo kar malo žal. Nikakor pa se stvari ne loti s stringi.
Pojdi v bascom help in si potem poglej ukaze pod "DATETIME
"
Tam boš izvedel vse.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
RudiP
Profesionalec


Pridružen/-a: Sre Jul 2008 8:39
Prispevkov: 128
Kraj: KOPER

PrispevekObjavljeno: Pet Maj 03, 2013 11:57 am    Naslov sporočila: Odgovori s citatom

Bojan je napisal/a:
Uporabi 32KHz kristal, brez dodatne ure, razen če misliš da boš imel težave z napajanjem. Skoraj vsak (skoraj) ima nortanjo uro. SW ti že vse omogoča.
Jaz sem samo enkrat v eni aplikaciji dal zunanjo uro, pa mi je bilo kar malo žal. Nikakor pa se stvari ne loti s stringi.
Pojdi v bascom help in si potem poglej ukaze pod "DATETIME
"
Tam boš izvedel vse.


Naredil sem tako uro, vendar mi v tem projektu malo nagaja. Pravilno mi pokaže uro, namesto datuma pa kaže samo 0.

Koda:

Config Date = Mdy , Separator = Slash       ' ANSI-Format
Config Clock = Soft           'this is how simple it is
Date$ = "11/11/00"
Time$ = "23:59:50"



A mi zna kdo pomagati ?

_________________
Lep pozdrav !
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Sob Maj 04, 2013 10:19 am    Naslov sporočila: Odgovori s citatom

Rudi,
nisem prepričan ampak poskusi v program dodati še:
$lib "eurotimedate.lbx"

Interne ure nisem nikoli uporabljal iz preprostega razloga, če se izklopi napajanje je potrebno na novo nastavljati uro/datum.
Jaz osebno uporabljam DS1307, v konfigu ure uporabim
Config Clock = User
Potem ne moram klicati podprograma za uro dovolj je da napišem LCD Time$, vse ostalo opravi Bascom. Enako je tudi pri uporabi spremenljivk _min, _sec, _hour .
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
RudiP
Profesionalec


Pridružen/-a: Sre Jul 2008 8:39
Prispevkov: 128
Kraj: KOPER

PrispevekObjavljeno: Ned Maj 05, 2013 3:27 pm    Naslov sporočila: Odgovori s citatom

Vlado je napisal/a:
Rudi,
nisem prepričan ampak poskusi v program dodati še:
$lib "eurotimedate.lbx"

Interne ure nisem nikoli uporabljal iz preprostega razloga, če se izklopi napajanje je potrebno na novo nastavljati uro/datum.
Jaz osebno uporabljam DS1307, v konfigu ure uporabim
Config Clock = User
Potem ne moram klicati podprograma za uro dovolj je da napišem LCD Time$, vse ostalo opravi Bascom. Enako je tudi pri uporabi spremenljivk _min, _sec, _hour .


Zadeva dela na Mega in Mini pin. Na tej moji stvaritvi uporabljam 3 timerje (eden je za RTC), 2 uarta za serijsko komunikacijo z PC in GSM modulom, i2c lcd in tastatura, SD kartico, rfm12 in še nekaj drugih stvari. Vse dela po pričakovanjih razen prikaz datuma, Uro kaže lepo datum pa 0(nulo) namesto 5.5.13. Uro ažuriram preko gsm, tako da mi ta način RTC v startu ni bil problematičen. Verjetno se kaj prekriva v knjižnicah. Bom videl kako bom rešil . Vlado hvala za odgovor.

_________________
Lep pozdrav !
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Ned Maj 05, 2013 5:57 pm    Naslov sporočila: Odgovori s citatom

Rudi, malo čudno je,
ali si prepričan da si datum vnesel v pravilni obliki (mm/dd/yy)?
Kaj če tvoj GSM datum daje v drugi obliki in ti "povozi" prvotno nastavitev.
Če pogledaš v report zadnji dve spremnljivki bi morali biti date$ in time$, ali imaš dovolj ram-a?
Kaj pa stack, ali je dovolj velik?

Skoraj enako konfiguracijo uporabljam (ne interne ure Config clock=User) ampak spremenljivke so enake in dela v redu.
Vem da mi je malo nagajalo zaporedje pri datumu (mm/dd/yy), nikakor ni šlo v (dd/mm/yy), potem sem uporabil eurotime.lbx in je zdaj v redu.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group