Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   241 / 1319
(#) watt válasza AMD hozzászólására (») Júl 8, 2008 /
 
Nincs valami infó az építőtől, ahonnan a forrás származik, hogy milyen konfig kell? Nem hiszem, hogy csupa 1-es!
(#) watt válasza watt hozzászólására (») Júl 8, 2008 /
 
Vaklárma!
WDT on, minden más Off, és RC oszci. Ez bizony 0x3FFFh
(#) AMD válasza watt hozzászólására (») Júl 8, 2008 /
 
Én elvesztettem a fonalat.
Bővebben: Link
Bővebben: Link
(#) trudnai válasza AMD hozzászólására (») Júl 9, 2008 /
 
Nekem ez sem tetszik a kodban:

  1. PULS    BSF     PORTA,CLB
  2.         BCF     PORTA,CLB
  3.         RETURN


Minimum egy NOP-ot tennek a ket port cimzes koze (es mindenhova a kodban ahol ket egymast koveto port cimzes van - ugyanarra a portra)
(#) watt válasza AMD hozzászólására (») Júl 9, 2008 /
 
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...
(#) watt válasza trudnai hozzászólására (») Júl 9, 2008 /
 
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.
(#) trudnai válasza watt hozzászólására (») Júl 9, 2008 /
 
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.
(#) watt válasza trudnai hozzászólására (») Júl 9, 2008 /
 
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!
(#) trudnai válasza watt hozzászólására (») Júl 9, 2008 /
 
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
(#) watt válasza trudnai hozzászólására (») Júl 9, 2008 /
 
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!
(#) cpumaster hozzászólása Júl 9, 2008 /
 
Ü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
(#) watt válasza cpumaster hozzászólására (») Júl 9, 2008 /
 
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.
(#) trudnai válasza cpumaster hozzászólására (») Júl 9, 2008 /
 
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...
(#) cpumaster válasza trudnai hozzászólására (») Júl 9, 2008 /
 
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...
(#) MPi-c válasza cpumaster hozzászólására (») Júl 9, 2008 /
 
Ü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. #include <16F628A.h>
  2.  
  3. #FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, MCLR, LVP, NOCPD
  4. #use delay(clock=32768)
  5.  
  6. void main(){
  7.         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  8.         set_timer0(0);
  9.         enable_interrupts(INT_RTCC);
  10.         enable_interrupts(GLOBAL);
  11.        
  12.         for(;;);
  13. }
  14. #int_RTCC
  15. void  RTCC_isr(void) {
  16. // ide írd, amit a megszakításban kell végrehajtani
  17. }


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.
(#) trudnai válasza cpumaster hozzászólására (») Júl 10, 2008 /
 
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.
(#) cpumaster válasza trudnai hozzászólására (») Júl 10, 2008 /
 
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?
(#) szilva válasza cpumaster hozzászólására (») Júl 10, 2008 /
 
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.
(#) watt válasza cpumaster hozzászólására (») Júl 10, 2008 /
 
Kicsit morcos vagyok, hogy amit írtam nem olvastad el! Abban benne van a válasz!
(#) MPi-c válasza cpumaster hozzászólására (») Júl 10, 2008 /
 
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.)
(#) Sendi hozzászólása Júl 11, 2008 /
 
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
(#) watt válasza Sendi hozzászólására (») Júl 11, 2008 /
 
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
(#) potyo válasza Sendi hozzászólására (») Júl 11, 2008 /
 
A zöld P betű mintha a programmemóriára mutató pointert jelezné. De nem vagyok benne biztos, nincs előttem mplab.
(#) trudnai válasza Sendi hozzászólására (») Júl 11, 2008 /
 
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?
(#) ZLED hozzászólása Júl 11, 2008 /
 
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?
(#) trudnai válasza ZLED hozzászólására (») Júl 11, 2008 /
 
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.
(#) Sendi válasza trudnai hozzászólására (») Júl 11, 2008 /
 
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.
(#) gtk hozzászólása Júl 11, 2008 /
 
Sziasztok !

Van valakinek >>ehhez<<, vagy valami hasonlo egetohoz PCB terve?

Udv.

(#) watt válasza gtk hozzászólására (») Júl 11, 2008 /
 
Wan hasonlóhoz. wattmep.tvn.hu
(#) gtk válasza watt hozzászólására (») Júl 11, 2008 /
 
Koszi, de nekem tul bonyolultak. Egesz egyszeru kellene amit hamar ossze tudok rakni, csak nehany 16F84-et kellene beegetnem,..nem celom picre fejleszteni..
Következő: »»   241 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem