 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Odisej Član


Pridružen-a: Tor 25 Apr 2006 20:24 Prispevkov: 95 Aktiv.: 0.41
|
Objavljeno: Pet Nov 23, 2007 9:59 pm Naslov sporočila: En projekt na Š-Armu (ARM7) |
|
|
Živjo!
Pred kratkim sem se lotil enega programčka. Ideja je: timer in termostat v enem, tako da ko bo tipka pritisnjena bo timer začel odštevat, in termostat bo vklapljal grelec na nastavljeno temperaturo. Priklopljenih pride pet tipk, +- čas, +- nastavljena temperatura in tipka za proženje.
Tako malo za ilustracijo, zdaj pa k vprašanjem: Ker moj temperaturni senzor ne spreminja upornosti (ampak napetost) in ga ne morem priklopiti direktno na AD pretvornik v šarmu. Žal. Tako da sem preko maxim-ic naročil en sample pretvornika MAX6675 (link na datasheet), zdaj pa se moje znanje dopovedovanja šarmu, kaj bi rad od njega, neha. Tako da bi bil zelo vesel pomoči, kako tole spariti s šarmom, ker ne vem čisto, kaj kam priklopit, kako spraviti clock na neko nogico in kako potem to uporabiti v programu...
Sicer sem pa eno temo odprl tudi že tukaj, pa se premikam sem, da ne bo izven konteksta
Hvala za pomoč,
Peter |
|
Nazaj na vrh |
|
 |
dpavli Član

Pridružen-a: Čet 25 Jan 2007 9:19 Prispevkov: 121 Aktiv.: 0.54
|
Objavljeno: Sob Nov 24, 2007 8:57 pm Naslov sporočila: Re: En projekt na Š-Armu (ARM7) |
|
|
Odisej je napisal/a: |
Ker moj temperaturni senzor ne spreminja upornosti (ampak napetost) in ga ne morem priklopiti direktno na AD pretvornik v šarmu. |
AD pretvornik pretvarja napetost v informacijo.
Morda tebe moti, da je na razvojni plati priklopljen trimmer na AD? Trimmer deluje kot napetostni delilnik in AD dobi konec koncev še vedno napetost med 0 in 3.3V tako da je možno dvoje:
1.) jaz nisem razumel tvojega problema
2.) ti preveč kompliciraš in bo zadeva OK
LPD |
|
Nazaj na vrh |
|
 |
Odisej Član


Pridružen-a: Tor 25 Apr 2006 20:24 Prispevkov: 95 Aktiv.: 0.41
|
Objavljeno: Sob Nov 24, 2007 9:09 pm Naslov sporočila: |
|
|
Ja, to vem da ad pretvornik pretvarja napetost v neko dvojiško vrednost. Ampak moj problem je, da temperaturni senzor daje prenizko napetost, da bi lahko to priklopil direktno na ad pretvornik (dobim nekje med 1-7mV, v odvisnosti od temperature), zato sem "dobil" za to pretvorbo MAX6675, ki pa sicer že ima vgrajen da pretvornik (polek operacijskega ojačevalnika če prav razumem shemo), katerega izhod bi zdaj rad pripeljal v šarm.
Upam da sem bolj jasno napisal tole?  |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.52
|
Objavljeno: Sob Nov 24, 2007 9:19 pm Naslov sporočila: |
|
|
Odisej, ni nam razumljivo; signale iz MAX6675 prikljuci kamor te je volja, potem pa ze koncno preberi datasheet od MAX6675 (diagrami za komunikacijo so narisani), pa ti bo vse jasno ... ce ti se kar ne bo, potem elektronika res ni zate  _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
Odisej Član


Pridružen-a: Tor 25 Apr 2006 20:24 Prispevkov: 95 Aktiv.: 0.41
|
Objavljeno: Sob Nov 24, 2007 9:34 pm Naslov sporočila: |
|
|
No, gremo pa lepo od začetka: Kje dobim na šarmu clock da ga peljem na tega maxa? Lahko clock speljem na katerokoli nogico (kot _setpindir(X, 1); ali ne?) in kako potem izvedem to v programu?
Sem prebral in razumem da priklop kot tak je simpl - clock na clock, signal na vhod, pa še nekaj na nulo če se prav spomnim... |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.52
|
Objavljeno: Sob Nov 24, 2007 10:15 pm Naslov sporočila: |
|
|
Na kateremkoli I/O pinu (dovolj je samo output).
V programu to izvedes tocno tako, kakor je narisano v tistem diagramu v datasheetu, ki kaze prenos enega odcitka. Upostevaj zamike (lahko so tudi daljsi, ne smejo pa biti krajsi), pa bo. Potrebujes tri linije, ce me spomin ne vara (clock, data in reset). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
Odisej Član


Pridružen-a: Tor 25 Apr 2006 20:24 Prispevkov: 95 Aktiv.: 0.41
|
Objavljeno: Sob Nov 24, 2007 10:40 pm Naslov sporočila: |
|
|
Ja, prav imaš... tri linije pridejo, reset sem spregledal.
Slučajno veš, če je kje kak sample program, kako točno se izvede tako branje? Ker moje znanje programiranja je na dokaj nizkem nivoju, znam praktično tisto, kar smo delali na faksu, torej en semester. Tako da, upam da razumeš, da po nekaj mesecih učenja jezika C, ne morem vedeti vsega, zato so moja vprašanja mogoče nekoliko bizarna. (in ne bi rad odkrival tople vode in izumljal kompromisnih rešitev, če slučajno obstaja neka ustaljena praksa, kako se delajo te stvari)
Če prav razmišljam... clock daš na en pin (se clock pojavi na outputu samo po sebi, ko definiraš pin kot izhodni ali...?), enega bereš in na vsakih 16 ciklov (oziroma več, za vsak slučaj mogoče?) daš reset na 1 in ko gre reset na 0, se sekvenca ponovi... to sekvenco potem bereš in shranjuješ v eno spremenljivko, potem pa preračunaš v temperaturo (oziroma, pretvoriš v desetiško vrednost)
lp
Peter |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.52
|
Objavljeno: Ned Nov 25, 2007 2:19 am Naslov sporočila: |
|
|
Odisej je napisal/a: |
Ja, prav imaš... tri linije pridejo, reset sem spregledal.
Slučajno veš, če je kje kak sample program, kako točno se izvede tako branje? |
Seveda vem - sem ga napisal, pa ni bilo prevec tezko. Ce jaz to naredim namesto tebe, bo nesmiselno.
Citiram: |
Ker moje znanje programiranja je na dokaj nizkem nivoju, znam praktično tisto, kar smo delali na faksu, torej en semester. Tako da, upam da razumeš, da po nekaj mesecih učenja jezika C, ne morem vedeti vsega, zato so moja vprašanja mogoče nekoliko bizarna. |
To so osnove programiranja in to "toplo vodo" bos - tako kot pisanje latinice - moral tudi sam razumeti, sicer ne bo od tebe nikoli nic. Algoritem je sestavljen iz elementarnih blokov (en za zacetek prenosa, preostali za prenos posameznih bitov) in to je vse. Ravno za to gre, da sam pokapiras to stvar - to je vredno najvec.
Citiram: |
Če prav razmišljam... clock daš na en pin (se clock pojavi na outputu samo po sebi, ko definiraš pin kot izhodni ali...?), enega bereš in na vsakih 16 ciklov (oziroma več, za vsak slučaj mogoče?) daš reset na 1 in ko gre reset na 0, se sekvenca ponovi... to sekvenco potem bereš in shranjuješ v eno spremenljivko, potem pa preračunaš v temperaturo (oziroma, pretvoriš v desetiško vrednost) |
Priblizno tako, kakor razmisljas. Zdaj pocisti ven tvoje cudne ideje ("mogoce") in preberi datasheet in naredi tocno tako, kot tam pise, pa bo delalo. Nic ni "mogoce", vse deluje tocno tako, kot je narisano.
Da lahko nekaj pocnes s stanjem na I/O pinu, mora biti ta najbrz res definiran kot izhod. Analogno, ce zelis prebrati podatek z nekega pina, mora biti definiran kot vhod. Precej ocitno, kajne ?  _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
Odisej Član


Pridružen-a: Tor 25 Apr 2006 20:24 Prispevkov: 95 Aktiv.: 0.41
|
Objavljeno: Ned Nov 25, 2007 12:09 pm Naslov sporočila: |
|
|
Očitno ste vsi že tako dolgo v programiranju, da se nihče več ne spomne, kako je dejansko težko na začetku idejo spratiti v matematično formo.
Še vedno se mi ne sanja, kako spraviti clock na output, najboljše kar se spomnim je, da bi ga naredil s timerjem, ki kolikor vem šteje milisekunde, torej dobim v najboljšem primeru 1kHz. Bo to dovolj, ali obstaja kaka druga opcija da bi dobil višjo frekvenco? |
|
Nazaj na vrh |
|
 |
Domenius Član



Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.00 Kraj: Medvode
|
Objavljeno: Ned Nov 25, 2007 12:39 pm Naslov sporočila: |
|
|
Timer šteje urine cikle in ne ms (kje si to dobil?), tako da boš v najboljšem primeru dobil MHz (številka je odvisna od kristala). _________________ It's electric! |
|
Nazaj na vrh |
|
 |
Odisej Član


Pridružen-a: Tor 25 Apr 2006 20:24 Prispevkov: 95 Aktiv.: 0.41
|
Objavljeno: Ned Nov 25, 2007 12:49 pm Naslov sporočila: |
|
|
Hm, če na začetku naredim _timerinit(); in potem v spremenljivko vpišem clock() / 1000 dobim sekunde, right? |
|
Nazaj na vrh |
|
 |
Schatzi Član

Pridružen-a: Pon 05 Nov 2007 18:58 Prispevkov: 17 Aktiv.: 0.08 Kraj: Tržič
|
Objavljeno: Ned Nov 25, 2007 1:10 pm Naslov sporočila: |
|
|
jp res je |
|
Nazaj na vrh |
|
 |
Benjamin Član

Pridružen-a: Tor 10 Jul 2007 11:23 Prispevkov: 116 Aktiv.: 0.53 Kraj: Trebnje, Ljubljana
|
Objavljeno: Ned Nov 25, 2007 1:10 pm Naslov sporočila: |
|
|
Predvidevam, da uporabljaš io.h, io.c od predmeta računalništvo II (ali podobnega).
Poglej si ti dve datoteki, in boš našel naslednjo kodo:
Koda: |
unsigned long clock(void)
//return number of milliseconds since CPU start
{
return T0TC;
} |
clock() ti torej vrne pretečene ms od zagona programa.
Kaj pa če bi uporabil delay()?
Koda: |
IOCLR0 = output_clock;
delay(1); // 1 ms
IOSET0 = output_clock;
delay(1); |
Seveda lahko tudi sam spišeš inicializacijo za Timer1 in tako dobiš možno bistveno večjo frekvenco.
LP |
|
Nazaj na vrh |
|
 |
dpavli Član

Pridružen-a: Čet 25 Jan 2007 9:19 Prispevkov: 121 Aktiv.: 0.54
|
Objavljeno: Sre Nov 28, 2007 9:15 am Naslov sporočila: |
|
|
Odisej je napisal/a: |
Hm, če na začetku naredim _timerinit(); in potem v spremenljivko vpišem clock() / 1000 dobim sekunde, right? |
Ampak to je zato, ker je prescaler nastavljen na takšno vrednost, da se vračajo s clock() funkcijo milisekunde. Lahko na nastaviš tudi na mikrosekunde ali whatever...
Odisej je napisal/a: |
Očitno ste vsi že tako dolgo v programiranju, da se nihče več ne spomne, kako je dejansko težko na začetku idejo spratiti v matematično formo.
Še vedno se mi ne sanja, kako spraviti clock na output, najboljše kar se spomnim je, da bi ga naredil s timerjem, ki kolikor vem šteje milisekunde, torej dobim v najboljšem primeru 1kHz. Bo to dovolj, ali obstaja kaka druga opcija da bi dobil višjo frekvenco? |
Sem ti že odgovoril, pa tudi Benjamin ti je.
LPD |
|
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 Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|