Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   144 / 1319
(#) trudnai válasza AQLMGabor hozzászólására (») Feb 5, 2008 /
 
> egrosszabb esetben a 0.211 helyett 0.218-at ír ki.

Elso gondolat ezzel kapcsolatban:
- Ha a 0.211 valojaban 0.2110000 volt, a 0.218 pedig 0.2189999 akkor az kb 8ms...

Masodik gondolat:
- Windows alatt egy bonyolul uzenet kuldesi mechanizmus van, egy bonyas preemptiv multitaszkos kernelen futtatva az egeszet, es mindezek tetejen egy meg ennel is bonyolultabb Java futtato kornyezet (vagy flash meg sem neztem miben van megirva), szoval mire mindezen vegig megy egyszer es az a kis alkalmazas eszleli a gombnyomast, hol 0.211-et hol pedig 0.218-at mer 0.200 -ra - ha erted mire gondolok...

PIC-nel ilyen bonyas dolog nincs ami ilyen mertekben befolyasolhatna a merest, es valoban a 10ms, azaz a szazadmasodperces meres ide tokeletesnek tunik.
(#) watt válasza AQLMGabor hozzászólására (») Feb 5, 2008 /
 
Nem az a kérdés, hogy mit kéne beállítani, hanem az, hogy mit lehet! Persze lehet külső oszcit tenni a Timer1-re, meg lehet 1MHz-es kristályt is használni(meglepődnétek milyen drága!), de nincs sok értelme!
Tehát a legkisebb "olcsó" freki a 4MHz, és ebből 125KHz-et lehet leosztani. Ezután még bejöhet a Timer1 megszakításának számolgatása is, ha nem elég a fél másodperc.
(#) AQLMGabor válasza watt hozzászólására (») Feb 5, 2008 /
 
Természetesen elméleti síkon.
Amit te mondasz az a valóságban is megállja meg a helyét, és kivitelezhető, és megfelelő is.
(#) AQLMGabor válasza trudnai hozzászólására (») Feb 5, 2008 /
 
Értem, főleg a második gondolatnál az akár már 20%-os tévedés is lehet.
Szerncsére nem Win-ben kell megoldani a gondot.
(#) szilva válasza watt hozzászólására (») Feb 5, 2008 /
 
Valóban, az 1MHz mindig is drága volt. Viszont vannak szép "kerek" értékű kvarcok, fillérekért: pl. 3.2768MHz, 4.096Mhz. Ezekkel elég jól lehet a kettőhatványos osztású számlálóláncok segítségével előállítani 100 vagy 1000Hz-es interruptot, amit egy PIC-kel gyerekjáték lekezelni és szoftveres század- vagy ezredmásodperc-számlálót léptetni.

Én a PIC órajelének választanám ezt a frekit, és órajelről járó timer0-t, valamint timer0-hoz rendelt prescalert használnék. Az ezred- vagy századmásodperces felbontású számlálónál nem kell bonyolult számításokkal kiszámolni utólag a valóságos időt.

Sőt, ha a számlálólánc léptetését eleve BCD-ben csináljuk, akkor egyszerűen csak a helyiértékeket kell megfelelő helyen kiírni és készen is vagyunk.
(#) elektroláma válasza szilva hozzászólására (») Feb 5, 2008 /
 
Nekem lehet 40Mhz-en fog futni.
Nem ehhez kell, hanem a többi részéhez.
Most még elég a 4
(#) trudnai válasza elektroláma hozzászólására (») Feb 5, 2008 /
 
Milyen PIC is ez? Tudod benne valtoztatni az orajelet? Neha mikor nagy szamitas kell felcsavarhatod az orat "tovig" es mikor nem kell akkor pedig lelassitod - ezzel felvett aramot is sporolod, es esetleg ehhez a mereshez hasznalt kulso alkatreszek szamat is csokkentheted.

Amugy pedig vagy a kulso ora kvartz ami mar tobbszor elhangzott, vagy kenytelen leszel masik timert hasznalni aminel nagyobb osztast allithatsz be es egy interrupton logo tulcsordulas szamlalot bevezetni emelle. Az a bizonyos 125KHz aka ~0.5s az 4MHz orara volt kiszamolva...
(#) elektroláma válasza trudnai hozzászólására (») Feb 5, 2008 /
 
Tudom.
Most tanulmányozom, mit, hogyan kell beállítani.
Felfutóél, rb0-ra a gomb, stb...
Osztót is kiszámolgatom, melyik jó.
Ha túlcsorul egy*, megjegyzem, ha meg több, mint egy ciklusnyit ment timer1, akkor kiírja, hogy err, vagy 0, esetleg "Lassú vagy" )).
És mindezt mék mikroBasicben is meg kell keresgélnem, hogyan kell. Persze ott is lehet ASM, és lehet az a rész az is lesz.
PIC-et most nem tom. 18Fxxxx. De nem tom. 3 timer van benne. Szimulátoron is, meg mikrobasicben is be van állítva. Tesztpanelem meg a PICKit 2 van.
(#) elektroláma válasza trudnai hozzászólására (») Feb 5, 2008 /
 
A fogyija minden(még). Egy sleep mód max kell, de más nem.
(#) elektroláma válasza elektroláma hozzászólására (») Feb 5, 2008 /
 
minden=mindegy
(#) trudnai válasza elektroláma hozzászólására (») Feb 5, 2008 /
 
Nos, csak ugy a kivancsisag es a tortenet kereksege erdekeben a muegeremet beallitottam, hogy amint jon egy ACK hogy USB host vette a gomb allapotat mar kuldom is a kovetkezo csomagot... Egyik csomag gomb-lanyomas masik gomb-felengedes - mindez egy 4450-essel, ami 48MHz-en ketyeg a demo boardomban - gondoltam ez is erdekes lehet ahhoz, hogy mennyire gyorsan jut el a kuldesig attol a ponttol, hogy az USB dobja az ACK-t. Ja es assembly az egesz, azt hiszem eleg jol megirva sebesseg szempontjabol, szoval tenyleg nincs felesleges huzavona.

Ha nezitek az eredmeny tablat, vannak azert 2-3ms meresek is... nem tudom hova rakni most hirtelenjeben, hacsak nem egy veletlen egybeeses tortenik olyankor, nevezetesen, hogy eger gombja nyomodik, de meg mindig "Varj" van... es epp ugy jon ki, hogy mire az a gombnyomosdi uzenet eljut a kerneltol a web alkalmazas tudataig addigra epp valt...
(#) AQLMGabor válasza trudnai hozzászólására (») Feb 5, 2008 /
 
Látom nem hagy nyugodni. Jópofa.
Ha 8ms megy a vezérlő akkor a kernel+egyéb sebessége 2-3 ms lehet ebből ítélve.
így jön ki 8ms helyett a 11ms, illetve 0 helyett a 3.
Nem?
(#) elektroláma válasza trudnai hozzászólására (») Feb 5, 2008 /
 
Meg driver, windows, java, stb.
De érdekes teszt volt.
Na, mint kezdő, elkezdtem tanulmányozni jobban a dolgot
Itt ez akód:
sub procedure interrupt
cnt = cnt + 1 ' increment value of cnt on every interrupt
TMR0L = 96
INTCON = $20 ' set T0IE, claer T0IF
end sub

main:
T0CON = $C4 ' assign prescaler to TMR0
TRISB = 0 ' designate PORTB as output
PORTB = $FF ' initialize PORTB
cnt = 0 ' initialize cnt
TMR0L = 96
INTCON = $A0 ' enable TMRO interrupt

do
if cnt = 400 then ' if cnt is 400, then toggle PORTB leds and reset cnt
PORTB = not(PORTB)
cnt = 0
end if
loop until 0 = 1
end.

Erre azt írja, hogy minden másodpercben váltja a ledet.
8Mhz osc van megadva.
De számolgattam.
T0CON nekem 0:32-re jött ki.
Namost 8mhz/4/32 az 62500 HZ azaz 16us
TMR0L-el van gondom. Ott a 96 azt jelenti, hogy96-ig számol? Mert ugye 8 bitesre van állítva, azt megnéztem. Ha igen, akkor 1 túlcsordulásig 1,536ms telik el. A countert meg 400-ig nézi, de az 0,6144ms, h jólszámolom. Vagy elrontottam vmit?
Köszi!
(#) elektroláma válasza AQLMGabor hozzászólására (») Feb 5, 2008 /
 
Számoljuk bele a gép oldalt is. Hány Mhz a procija, mik futnak? ))
(#) elektroláma válasza elektroláma hozzászólására (») Feb 5, 2008 /
 
Mielőtt jönne watt:
1:32
(#) trudnai válasza elektroláma hozzászólására (») Feb 5, 2008 /
 
Nem, alulrol felfele szamol, es mikor atcsurran jon az interrupt. Tehat 255-96=159 *16us = 2,544ms * 400 = 1,017600s

Szoval jonak tunik nekem...
(#) elektroláma válasza elektroláma hozzászólására (») Feb 5, 2008 /
 
Megvan! a 96 hexában van(de akkor az elé nem kellene $?).
De akkor 0.96sec jön ki- 0.04 elmegy a nullázgatásokra?
(#) elektroláma válasza trudnai hozzászólására (») Feb 5, 2008 /
 
Opsz. Ezt nem tudtam. Köszi!
De azért kitaláltam vmi a másikra is, hogy jó legyen
(#) trudnai válasza AQLMGabor hozzászólására (») Feb 5, 2008 /
 
Ez is lehetseges magyarazat lenne, csak van meg egy kerdes akkor: A gombot fel is kell engedni hogy uj gombnyomasnak vegye, ezert egyik csomag felengedes, masik lenyomas... tehat ha 8ms-enkent kuldene csomagot, akkor 16ms-re kellene beallnia...
(#) trudnai válasza elektroláma hozzászólására (») Feb 5, 2008 /
 
A lenyeg latszik godolkodsz, ha melle bujnad a doksikat is akkor egybol tudnad ezekre a helyes valaszt -- Ezt most tenyleg joindulatbol irtam, nem bantaskepp.
(#) AQLMGabor válasza trudnai hozzászólására (») Feb 5, 2008 /
 

Uff, már nem jut eszembe semmi. Megállt a tudomány.
(#) elektroláma válasza trudnai hozzászólására (») Feb 5, 2008 /
 
Doksikkal az a bajom, hogy nem találtam egy összefoglalót, amiben röviden leirogatják a dolgokat, mit miért, hogyan. Már "régóta" programozok VB, SQL, néha C, stb. Csak a PICre rá kell hangolódni, meg kell érteni. De tetszik.
Ez a leirás pl tetszik
Én vhogy példákon keresztül szeretek tanulni. Csak a mikrobasic helpjében nem kommentezték agyon a dolgokat a példaprogik mellett.
És nem vettem bántásnak.
(#) elektroláma válasza trudnai hozzászólására (») Feb 5, 2008 /
 
Most már be tudom állítani a prescalert, hogy 0.5sec legyen a legnagyobb.
Timer meg csak pörög.
Ha megnyomódik a gomb, hogyan tudom kiolvasni timer értékét(ez most lehet, oltári hülye kérdés, de nekem így lenne logikus, és a szimulátorban látszik is az értéke)? Timer0 simán kiadja? Mert akkor
Ugye az kellene első lépésben, hogy gomb megnyom, timer eltárol, gomb megint megnyom, majd timer és eltárolt timer közti különbséget kell megnézni. Erre is bizti vmi egyserá módsze, mint hasonlítgassak, hogy kisebb, vagy nagyobb, és azt lekezelni. Egy xor, vagy hasonló. Nem árt ezeket újra átnéznem. Már régen voltak...
(#) elektroláma válasza elektroláma hozzászólására (») Feb 6, 2008 /
 
Na, találtam egy páldát
dim T1 as word absolute $FCE ' Timer1 Low and High
És akkor T1-et tudom olvasni.
Ok, ez 16F852-re van, majd megnézem, helyes-e a cím a sajátomnál. És ez timer1, nem 0, azt is látom.
Sőt, tólcordulásnál eleve adhatok neki egy értéket,és utána indítom el, így megvan a "pontos" egész mp is.
Ok, ezt is egy példaprogiról néztem le.
T1CON.TMR1ON = 0 ' stop Timer1
T1 = T1 + T1_Period ' reload Timer1 + zero-sum error
T1CON.TMR1ON = 1 ' start Timer1
a korrekcióba beveszi azt is, hogy 6 ciklus kell a reloadhoz.
Szimulátoron úgy is meg tudom nézni, mennyit, meg hol késik/siet.
Példákat eddig is találtam, de ti sokat segítettek, hogy elindulhassak! Köszönöm.
És tuti, ez után is mondok hülyeséget, de most már annyira talán értek hozzá, hogy a szimlátor segítségével észre tudom venni a hülyeségeimet.
Néztem ezt a watchdogos akármit is.
Ha már megvan a progi, nehéz beleírni. De a legolcsóbb picet mellé téve, nem kell átírni. Egy timer kifelé adja a jelet a másik picnek, ami bereszeteli ezt, ha nem ad jelet neki Tudom, azért építették be, hogy ne kelljen..
(#) trudnai válasza elektroláma hozzászólására (») Feb 6, 2008 /
 
Sajnos ezt a microbasicet nem ismerem - meg megboldogult fiatalkoromban basiceztem, aztan nagyon gyorsan raalltam az assemblyre mikor rajottem az mennyivel gyorsabb, mert azok a gepek meg lasabbak voltak mint ezek a PIC-ek De azok a basicek interpreteres nyelvek voltak (kb mint Java vagy .NET, csak ez utobbiak mar azert kisse virgoncabb hardveren futkorasznak, szoval itt mar mindegy a technolgia). Microbasic nyilvan compileres, tehat akar mindegynek is tekintheto - bar megjegyzem letezik interpreteres basic mikrokontrollereknel is - az Propeller ceg Basicstamp csaladja ilyen...

Na mindegy, a lenyeg, hogy a peldak gyakran nagy segitsegek, de hidd el, a DataSheet a PIC-ek bibliaja. Amit abban irnak az a szent torveny, amit a peldaban latsz az pedig vagy jo vagy nem jo. Erdemes jo sok peldat is megnezni, es tanulni beloluk ki hogy csinalja.

Mivel magas szintu nyelven csinalod, ezert ertekek osszehasonlitasanal ne nagyon torodj xor vagy kivonas vagy egyeb dolgokkal, hisz neked van IF utasitas... hasznald egeszseggel Ha assemblyzel akkor ilyenek nincsenek es akkor tanulhatod az IF mogotti matematikat is, de lehet neked ez nem kellene meg.

Ami a timert illeti: Amint egyszer elinditod az porog mint a veszedelem, szamlalo meg tulcsordul ha kell... Ha beallitasz neki interruptot, akkor tulcsordulasrol tudni fogsz, amugy csak van egy bit ami jelzi ezt (T0IF a timer0 eseten amit torol a peldad) es annak kezeleset akkor neked kell megoldanod. De abban a ledes peldaban gyonyoruen le van ez kezelve, timer tulcsordul, jon interrupt, novel egy szamlalot... Ez kell neked is ha tovabb szeretnel nyulni mint 0.5s vagy nagyobb orajellel akarod az alkalmazasod megvalositani.

Gomb nyomasanak figyeleset egyenlore egy ciklussal oldd meg - varsz amig meg nem nyomjak, aztan raersz kesobb gondolkodni, hogy hogyan irdd at interruptosra. Egyenlore foljon a fejed a perges miatt... itt mar elhangzott hogynan lehet kivedeni es ha azt koveted akkor nagyjabol oke vagy. Lenyomas pillanataban olvasd ki a szamlalot + timert (szamlalo*2 = ~1s) + a szamlalod ~0.5s/65536 felbontassal megmodja az idot... A fantaziadra van bizva hogyan szamolgatod ki ebbol a valos idot... mikor kesz vagy ezzel, es ugy erzed mukodik akkor irdd meg ide, csatold a kodod - a kod termeszetesen legyen reszletesen kommentezve mit miert csinaltal es miert ugy Szerintem itt sokan segitenek majd ha valami nem megy vagy nem jol oldottal meg.
(#) watt válasza elektroláma hozzászólására (») Feb 6, 2008 /
 
Idézet:
„Doksikkal az a bajom, hogy nem találtam egy összefoglalót, amiben röviden leirogatják a dolgokat, mit miért, hogyan.”

Az adatlapot próbáltad? Ez eddigi kérdéseidre abban megvan a válasz. Nála tömörebben sehol nem találsz infót. Én csak az adatlapokat használom, és abból tanultam meg a PIC-et, mivel akkoriban nem volt más, és nem is nagyon kellett.
A másik, hogy miért nem választasz egy olyan nyelvet, amit többen használnak? Ez a Basic mindenre jó, csak arra nem, hogy megértsd mi miért van. Ha egy komolyabb feladatba ütközöl, nem lesz benne köszönet.
(#) watt válasza elektroláma hozzászólására (») Feb 6, 2008 /
 
Idézet:
„Ugye az kellene első lépésben, hogy gomb megnyom, timer eltárol, gomb megint megnyom, majd timer és eltárolt timer közti különbséget kell megnézni.”

Ugye hogy hiába írogatunk? Aztán csodálkozol, hogy watt mumus morcos, még ijesztgetsz is vele!

Ahelyett, hogy teleírkálod a topicot felesleges kérdésekkel, olvass! Le van írva a módszer, direkt neked címezve! Három betű, meg egy szám...
(#) elektroláma válasza trudnai hozzászólására (») Feb 6, 2008 /
 
Csak ezek az interruptok bonyolultabbnak tűntek.
Az itteni cikk jó volt. Rövid, és leírta, mit miért.
A timer pörgését értem. A számlálót is.
Nekiállok, megírom. A gombnál gondolom arra gondoltok, hogy megnyomáskor egy egész elektronháború lesz az érintkezőnél. Ennek is utánaolvasok, bár most egy jelgenerátorral fogom szimulálni.
(#) elektroláma válasza watt hozzászólására (») Feb 6, 2008 /
 
Ok, megnézem.
Értem én, hogy jót akarsz, de én maradok Mikrobasicnél. Ahogy elnézekettem, nagy különbségek nincsenek. Mikroe oldalán van a mikroc is.
(#) elektroláma válasza watt hozzászólására (») Feb 6, 2008 /
 
Most már visszaolvasok. Akkor elsőre olyan volt, mint amikor angolul tudok 10-ig számolni, te meg levágsz nekem 4 mondatot.
Következő: »»   144 / 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