Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nincs valami infó az építőtől, ahonnan a forrás származik, hogy milyen konfig kell? Nem hiszem, hogy csupa 1-es!
Vaklárma!
WDT on, minden más Off, és RC oszci. Ez bizony 0x3FFFh
Nekem ez sem tetszik a kodban:
Minimum egy NOP-ot tennek a ket port cimzes koze (es mindenhova a kodban ahol ket egymast koveto port cimzes van - ugyanarra a portra)
Lényeg, hogy a konfig jól van beállítva a belinkelt kapcsoláshoz, azaz működni fog a PLL áramkör, ha megépíted és az égető is jól működik.
Egyébként jó kis kapcsolás, még hasznos lehet. Tovább lehetne bővíteni egy LCD, vagy 7szegmenses LED-es kijelzővel, és némi gombokkal, de ahhoz más PIC kéne és átírni a progit...
A CLBH és a CLBL is 5uS. Ha jól számolom(f=1/(R*C*pi), (10k(10000ohm), 2,2n(2,2E-9 F))), akkor az oszci 15KHz körül rezeg, ami 69uS periódusidő. Ez bőven lassú, úgy hogy még működhet is NOP nélkül. Persze a PIC-et csak arra használni, hogy egy buta számot átküldjön reset után(olvasd el a cikket), igen nagy marhaság.
Ja latom, hat vannak ebben a kodban furcsasagok A HW reszehez valoszinuleg ertett a ficko, de a firmware-hez nem igazan - lehet erdemes lenne ujra irni ha valaki hasznalni szeretne - no meg a 84 helyett valami jobb chipet hasznalni aminek van belso oraja meg aludni is tud. Pl ha megnezed ez 30 percig varakozik aztan valamit csinal - fogalmam sincs ebbol a teszta kodbol ki kellene bogozni mi a fenet csinal, de 30 percig csak onmagaban ketyeg feleslegesen ahelyett alukalna.
Amugy nem lenne egy utolso ezt LCD-sre atalakitani es akkor +- vagy szam billentyus bevitellel csinalni a freki kijelolest a dip kapcsolok helyett.
Egyetértek. Egy egysoros LCD-vel, és elég lenne a 16F627A is, mert szerintem beleférne a kód...
"tészta kód..." ... Ez tetszik! Idézet: „"tészta kód..." ... Ez tetszik! ” Jol van na, spagetti kod Csak en mindig tesztanak mondom Bar letezik teszta elmelet is sokfajta tesztaval Ahhoz csak annyit tennek hozza, hogy van meg a betu teszta kod, ami a sok ossze-visszasagarol ismeretes es nem lehet kiolvasni belole semmit sem meg akkor is ha az osszes betut ismered Es van a csiga teszta kod, amit barhogy probalsz a szadhoz venni mindig a tanyeron marad, magyaran nem birod kiszedni belole a lenyeget Ja es van a leves teszta kod is ami annyira hosszu, hogy az elejen jol megszivod a vegen pedig pofon is csap
Nem-nem! Jó az a tészta, de a spagetti még jobb, mert kifejezőbb. Mindkettő nyúlik, de az egyik ráadásul hosszában vékony!
A többi is jó hasonlat, kétségtelen!
Üdv mindenkinek!
Tudna nekem segíteni valaki hogy hogyan lehetne egy másodperces megszakításokat kivenni a timer0-ból? Nem értem az előosztó beállítást teljesen... Egy relét kellene nagyon pontosan vezérelnem 60s-ig nincs behúzva aztán 1s-ra behúz és aztán előről minden. Egy végtelen while ciklusra gondoltam de már egy hete nem tok egyről a kettőre jutni már sokat olvastam a timer0 előosztóról de nemértem hogy lehet mondjuk egy külső 32.768KHz-s jelet először 256-al majd 128-al osztani. És ugye ekkor túlcsordulna és egyel növelné egy változó értékét eggyel. Majd a 60. után lépne tovább és a 61.után előről mindent. Esetleg egy végtelen while ciklust 2db for ciklussal egymásba ágyazi gondoltam még de akkorsem tudnám a timert beállítani. köszi előre is mindent
Két fontos dolgot nem írtál:
1. milyen PIC(még akkor is jó tudni, ha netán a Timer0-k egyformák) 2. Milyen C? (hogy C azt is a while-ből következtetem) A Timer0 jól írod egy 8bites előosztóból és egy 8bites számlálóból áll. A megszakítás akkor jön, ha a számláló(TMR0) túlcsordul. Ha a PIC 32768Hz-el ketyeg egy külső kristályról, akkor a Timer0 bemenete ennek az 1/4 részét, azaz 8192-t kap. Ha ezt elosztjuk a TMR0 256-os osztásával, akkor 32Hz-et kapunk. Ebből látszik, hogy az előosztót 32-es osztásra kéne beállítani. Ezt a PS2 : PS0 bitekkel lehet beállítani az OPTION regiszterben úgy, hogy a Bit2 : Bit0 helyekre 100 értéket írsz. Az OPTION-ban még be kell állítani a Timer0 forrását, ami legyen CLKOUT(T0CS=0). Engedélyezni kell a Timer0 megszakítását, és el kell indítani a számlálót. Ennyi.
Szia cpumaster,
Igy van ahogy mondod, 15 bitnyit kell shiftelni a 32768 Hz kristalyt, hogy 1s-t kapj. Ha egy 16 bites szamlalot teszel ra (pl. timer1-nek lehet adni egy ilyan ora kristalyt) akkor ugye az pontosan 2s-kent fog neked megszakitast okozni, vagy felebreszteni a PIC-et alvo allapotbol. Akkor csak 30-ig kell elszamlalgatni. Ha megvan a 30, akkor bekapcsolod a relet, majd a 16 bites szamlalo legfelso bitjet kell figyeln mikor all be 1-be, ez lesz az 1s amikor a relet kikapcsolod. Timer0-val is meg lehet csinalni ahogy watt irta, kb ugyanaz a helyzet, hogy 256-os eloosztassal 256-ig szamlalgat a 8 bites szamlalod. Ha mindenkepp 1s megszakitasokat szeretnel akkor pedig 128-as eloosztot hasznalva 256-ig szamlalgat...
Köszönöm mindkettőtöknek a hogy írtatok és h ilyen gyorsan.
Van itt a HE-n is 3 PIC-es rovat... itt volt téma a timer használata...kiemelnék egy sort ha lehet ami nekem kell sztem: setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); ez most egy 256os előosztás ha jól értelmezem. Az órajel ebben a progiban 4mhz volt. Ennek a 1/4 része lesz 256-al osztva tehát 1000/256=3,90625Hz (igen én mondjuk egy külsőről akarom a jelet küldeni amit 2hatványaként választok h pontos legyen mint amit említettem is már) de akkor ezt hogy kell átírnom hogy mondjuk amit beszéltünk ha nem is 1Hz jön ki hogy 128 mondjuk az előosztó(ok ezt átírom a 256ot) de azt hogy ezt meddig számolgatja hová írom? Ez nem világos csak még... ja és igen...ccs a nyelv és most egy 16f877-en és 16f628-on gyakorlok...
Üdv!
Ha 32768 Hz-es kristályt használva, Timer0-val, 1 mp-ként akarsz megszakítást, ccs-ben megírva, az kb. így néz ki:
1. Van a ccs-nek jó kis felhasználói leírása, a timer megszakítás is benne van. 2. Ha végképp nem megy, a ccs pcwh... -ban van egy varázsló, ami könnyedén segít a szükséges beállítások, funkciók programzásában. 3. Végül is PIC, de van a ccs-nek külön topicja... És még egy dolog. Topi 3 részes cikkében a megszakításokról is szó van és ccs példákkal azokat be is mutatja. Idézet: „ez most egy 256os előosztás ha jól értelmezem. Az órajel ebben a progiban 4mhz volt. Ennek a 1/4 része lesz 256-al osztva tehát 1000/256=3,90625Hz” Azt hiszem egy 1000-es nagysagrendnyit tevedtel 4MHz azaz 4 millio Hz, azaz az FOSC/4 az 1millio lesz, ezt osztva a 256-tal kapsz 3906.25 Hz-nek megfelelo idozitest. Amint a szambol mar ki lehet ovetkeztetni ebbol eleg nehezkes pontos 1s idozitest kifaragni, megkozelitot lehet es sok esetben az elegendo is. Amikor nem akkor vagy nagy trukkozesek aran, vagy ora kvartz-al (32768Hz) oldjak meg a dolgot, hisz ha bele gondolsz ez az ertek a 2^15 szoval egyszeru szamolni vele. Amit MPi-c irt peldat az azt feltetelezi, hogy a core is errol a 32768 kristalyrol ketyeg, azaz a timer0 az 32768/4 orajelen inkrementalodik igy elegendo a 32-es osztas, hogy a timer0 256-os osztasabol adodo megszakitas pontosan 1s legyen. Ha elegendo szmodra ez a sebesseg a program vegrehajtasara akkor ez egy jo kiindulasi alap lehet.
Igen elszámoltam picit... Maradjunk MPi-c példájánál bár nem ezen az elven megy majd hanem az interruptos külső pinről kapja majd a pulzust. Értem hogy ha belsőről akarom akk osztódik 4-gyel meg aztis hogy ha külsőről akk nem. Értem hogy most ebben a példában 32768-at osztjuk előbb 4-gyel mivel ez a pic órajele is. Ez 8192Hz. Akkor a timer előosztót beállítom 32-essre. Kapok 256-ot. Oks értem. De csak eddig. Most azt hol állítom be hogy ezt még 256-al osztja hogy kijőjjön az 1. Vagyis tom eddig számol el hogy túlcsorduljon. De ezt a végét hogy? Ez az érték mindig 256 már? Vagy mi határozza meg? Mert addig értem hogy előosztom max 256-al a TMR0-nál. Akkor a számolás mindig 256-ig történik az előosztás után már?
A TMR0 egy nyolcbites számláló az előosztó után. Ennek a számlálónak a tartalmát ki tudod olvasni és be is tudod írni.
Ha viszont nem csinálsz vele semmit, akkor az az előosztóról kapott impulzusokat rendületlenül számolja és számolja, majd 0xFF után 0x00 következik, azaz túlcsordul. Tehát minden 256 impulzus után kapsz egy túlcsordulási eseményt, ha nem nyúlsz hozzá. Ha sűrűbben akarod a túlcsordulásokat megkapni, mondjuk 100 impulzusonként, akkor a túlcsordulást lekezelő programrészben fel kell tölteni a számlálót egy olyan értékkel (ha jól tévedek, -100, azaz 0x9C kell oda ilyenkor), amiről felfelé számolva 100 impulzus után következik be a túlcsordulás.
Kicsit morcos vagyok, hogy amit írtam nem olvastad el! Abban benne van a válasz!
Idézet: „De ezt a végét hogy? Ez az érték mindig 256 már? Vagy mi határozza meg?” Ahogy szilva mondja: Idézet: „akkor a túlcsordulást lekezelő programrészben fel kell tölteni a számlálót egy olyan értékkel..., amiről felfelé számolva... következik be a túlcsordulás.” Ennek módja (mint írtam, benne van a kezelői leírásban! ) mivel itt megszakítás szerepel a példában, a megszakítást kezelő rutinban a Timer0 kezdőértékét a "set_timer0(érték);" utasítással állítod be, tehát ez az RTCC_isr-ben legyen. (Ez mostmár elég szájbarágós lett.)
Jó reggelt Mindenkinek.
MPLAB- SIM. Egy kicsit rendezgettem a memóriát, és utána a Watch táblázatban azt jelzi, hogy egy-két változót nem talál, és a változó neve előtt egy nagy zöld "P" betű van. Mit jelent ez? Köszönettel
Több oka lehet, hogy nem találja a watch a változót.
1. időközben átnevezted... 2. C esetén, nem globális a változó, és az a rutin amiben deklarálod éppen nem fut. 3. ? ezt majd más bővíti
A zöld P betű mintha a programmemóriára mutató pointert jelezné. De nem vagyok benne biztos, nincs előttem mplab.
Mit jelent, hogy "kicsit rendezgetted a memoriat"?
Es amugy akkor most hogy nez ki vagy mit kell tudni rola mert igy ez nekem most elegge kodos - ccs-ben csinalod, jol emlekszem?
sziasztok!
akarok csinálni egy egyszerü időzítőt. de nem tudom megcsinálni azt, hogy egy LCD-n írja ki az időt, mert byteot nem be tenni, csak szöveget. mikropascalban csinálom. pl.: Var bekapcs:byte; begin bekapcs := 15; lcd_out(1, 1, beakpcs); end. nem jó, mert byteot nem lehet berakni. valaki tud segíteni?
At kell alakitani szovegge elobb, es azt kitenni az lcd-re. Nem ismerem a mikropascalt, de a lenyeg hozz letre egy string tipusu valtozot, nezd ki melyik fuggvennyel vagy eljarassal lehet a stringet atalakitani szovegge, es utana ezt a sztringet rakd ki. Lehet van kozvetlen fuggveny is ami neked ezt automatan megcsinalja, pl write writeln ugrik be hirtelen pascalos korszakombol (PC-s Turbo Pascal) de ilyen helyen is kotorasznek hogy ezek mukodnek-e a mikropascalban az LCD-re.
Helló Trudnai, helló Potyó.
A tudatlanok magabiztosságával rendezgettem a memóriát. (asm-ben) Ez azt jelenti, hogy sok az ide-oda ugrálás a programon belül, ezért a megfelelő program részeket megpróbáltam azonos memória lapra, lapokra szervezni. Közben megtaláltam a hiba okát. A prg. elején a változók, címekhez voltak kötve. Én kitöröltem a címeket, hogy automatikusan configurálja őket a prg. De ilyenkor ugye elé kellett volna irni a 'cblock' és utána meg az 'endc'-t Ezek hiányoztak, és a fordító nem reklamált. Köszönettel, kellemes hétvégét.
Wan hasonlóhoz. wattmep.tvn.hu
|
Bejelentkezés
Hirdetés |