|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Sob Jan 03, 2009 8:18 pm Naslov sporočila: Organizacija programa za uro |
|
|
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 |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Sob Jan 03, 2009 8:39 pm Naslov sporočila: |
|
|
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 |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Ned Jan 04, 2009 9:56 am Naslov sporočila: Nekaj podbnega |
|
|
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 |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Ned Jan 04, 2009 11:32 am Naslov sporočila: |
|
|
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 |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Ned Jan 04, 2009 11:59 am Naslov sporočila: Seveda |
|
|
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 |
|
|
malix Profesionalec
Pridružen/-a: Sre Jan 2004 16:11 Prispevkov: 100 Kraj: Maribor
|
Objavljeno: Ned Jan 04, 2009 12:07 pm Naslov sporočila: |
|
|
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 |
|
|
Silvo Profesionalec
Pridružen/-a: Tor Jan 2004 19:06 Prispevkov: 234
|
Objavljeno: Ned Jan 04, 2009 12:53 pm Naslov sporočila: |
|
|
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 |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Ned Jan 04, 2009 2:16 pm Naslov sporočila: osebno |
|
|
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 |
|
|
dragoon Novinec
Pridružen/-a: Ned Sep 2007 5:42 Prispevkov: 5
|
Objavljeno: Čet Jan 29, 2009 11:38 am Naslov sporočila: |
|
|
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 |
|
|
Bojan Profesionalec
Pridružen/-a: Ned Mar 2004 22:24 Prispevkov: 70
|
Objavljeno: Ned Feb 01, 2009 10:12 am Naslov sporočila: |
|
|
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 |
|
|
RudiP Profesionalec
Pridružen/-a: Sre Jul 2008 8:39 Prispevkov: 128 Kraj: KOPER
|
Objavljeno: Pet Maj 03, 2013 11:57 am Naslov sporočila: |
|
|
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 |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Sob Maj 04, 2013 10:19 am Naslov sporočila: |
|
|
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 |
|
|
RudiP Profesionalec
Pridružen/-a: Sre Jul 2008 8:39 Prispevkov: 128 Kraj: KOPER
|
Objavljeno: Ned Maj 05, 2013 3:27 pm Naslov sporočila: |
|
|
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 |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Ned Maj 05, 2013 5:57 pm Naslov sporočila: |
|
|
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 |
|
|
|
|
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
|