Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   84 / 1318
(#) gyengus hozzászólása Okt 24, 2007 /
 
Sziasztok!

18F4550-re szeretnék órát írni, de belebonyolódtam a timerbe.
Ha jól gondolom úgy van, h órajel/előosztó-nként növeli a regiszter értékét és ha az túlcsordul, megszakítást okoz.
Úgy csináltam, h segédváltozót növelek, és akkor növelem a másodpercek értékét, ha elér 1 bizonyos értéket. Már össze-vissza
állítgattam az előosztót, a regiszter értékét és a másodperc növelését. De vagy gyors lett, vagy lassú. Osztogattam az órajel
frekit az előosztóval és a regiszter hosszával, de nem vezetett eredményre. Már azt se tom, h a külső 20MHz-es kristállyal
vagy a belső 48MHz-vel számoljak. Megköszönném, ha vki legalább 1 képlet félét írna, h lehet számolni a másodperceket.
Láttam már óra kódot, csak assemblyben, az viszont nem az erősségem, C-ben próbálkozom, MCC18 doksi és adatlap alapján.
Fentebb olvastam, h tranyó erősen ajánlott a 7szegmenses kijelzőkhöz. Nekem közös katódos van, bekötéskor kimaradtak a tranyók,
de úgy tűnik, bírja a pic. A végleges áramkörből viszont a biztonság kedvéért nem szeretném őket kihagyni. Milyet és hogy kössek
be, ha csak a katódokhoz szeretnék, így elég lenne 4. (ezek vannak itthon: BC337 BC557B BC547B S9012 F240 9014BH S8550 C945 S9013 S9014 S9012 BC548B 9012 C3199, jó vmelyik?)
Később az áramkör elemről működne, a kijelző mindig világítani fog. 9Vos elemre és 7805-re gondoltam. Jó lenne, ha sokáig bírná. Szerintetek így jó lesz?

Bocs a sok kérdésért.
(#) jhonny hozzászólása Okt 24, 2007 /
 
Sziasztok. PIC-kel szeretnék csinálni egy stoppert és visszaszámlálót egyben. Valahogy ugy, hogy elöször a stoppert inditja egy jel, majd megállítja. Az eredmény eltárolódik és következő megszakításnál ebböl az eredményböl számol vissza 0-ig. 99mp elég. Esetleg nincs valakinek kölön stopper vagy visszaszámláló kapcsolása/programja? Az légyszives küldje el az e-mailemre. sznorby@freemail.hu Kösz!
(#) Norberto válasza jhonny hozzászólására (») Okt 24, 2007 /
 
Idézet:
„Esetleg nincs valakinek kölön stopper vagy visszaszámláló kapcsolása/programja? Az légyszives küldje el az e-mailemre.”


És lehetőség szerint az oldalon is tegye közzé ez a bizonyos "valaki"
(#) watt válasza gyengus hozzászólására (») Okt 24, 2007 /
 
Nos igen, a kérdések száma nem kevés! Próbálok sorban:
Ha 20MHz-es a kristályod, akkor HS oscit kell beállítani PLL nélkül. Csak 12MHz-es kaviccsal lehet a 48MHz-es PLL-es max frekit kihasználni.
Így ha helyesen állítottad be, akkor 20MHz-el kell számolni, azaz annak negyedével, mivel ezt az adatlap is írja, hogy az előosztóra az órajel negyede jut!
Egyszerűség kedvéért 5MHz-el kell számolni(kihagyva egy felesleges osztást a képletből).
Ha a Timer1-et használod(kár, hogy ez nem említed!), akkor annak előosztója 1,2,4,8 lehet. Nézzük 1-el(azaz nincs osztás). Ekkor a túlcsordulás 76,2939453125Hz-enként lesz. Nos ebből kerek számot készíteni nem is olyan könnyű!
Ha előosztunk 8-al akkor 625000Hz-et kapunk. Ezt osztjuk 62500-al és kapunk 10Hz-et. No ez már egész jó, mert ebből lehet segédszámlálóval 1Hz-et készíteni.
Az állítási lehetőség a 62500-ban rejlik. Ezt a kezdőértéket változtatva elég jó felbontással lehet hangolni az órát.
Megjegyzem, hogy a megszakítás lekezelése is elég sok idő, ezt ki kell vonni a Timer idejéből. Végül elég macerával, de nagyjából pontos órát lehet kreálni.
A pontosítást a végén kell megtenni, mikor már minden működik, mert bármilyen változtatás a megszakításban elhangolhatja.

Tranyónak bármelyik jó, amelyik PNP-s. A PIC-et pedig vedd le a katódokról, mert tönkre fogod tenni! (1láb max 20mA!)
(#) gyengus válasza watt hozzászólására (») Okt 24, 2007 /
 
Köszi a válaszokat.
A frekin nem állítgattam, Timer0-t használom. Honnan tudom, hogy mennyi a megszakításkezelés ideje? Nem szeretnék találgatni, mert akkor tuti, pontatlan lesz.
Így nagyon bonyolultnak hangzik, azt hittem, könnyebb összehozni 1 órát.
A tranyót légyszíves részletezd! Amim van azok közül melyik PNP ill, h tom megállapítani, melyik az? Pontosan, hogyan kössem be?
(#) watt válasza gyengus hozzászólására (») Okt 24, 2007 /
 
A tranyókat szépen beírod a google-ba és máris látod melyik milyen.
A bekötés: Kollektor testre, emiter a katódra, bázis a PIC lábára(nem kell ellenállás).

Idézet:
„A frekin nem állítgattam”

Ez alatt mit értesz? A frekit nem is lehet állítani!

Idézet:
„Honnan tudom, hogy mennyi a megszakításkezelés ideje? Nem szeretnék találgatni, mert akkor tuti, pontatlan lesz.”

Onnan, hogy minden utasításnak megvan az ideje. Szépen összszámolgatod és kész.
Egyébként próbálgatással is lehet eredményt elérni.

Idézet:
„azt hittem, könnyebb összehozni 1 órát.”

Neked, vagy nekem? Egyébként nem nehéz, csak végig kell gondolni, mi hogyan működik.

Idézet:
„Timer0-t használom”

A Timer1 és a Timer0 majdnem egyforma, csak nagyobb előosztást is lehet kérni.


(#) gulasoft hozzászólása Okt 24, 2007 /
 
Találtam egy ilyen zip-et a neten.
Elméletileg egy pong játék, de ha ilyet tud a 16f84, akkor mi fenének szarakodunk itt lcd-kkel?? A leírás szerint jön ki egy video jel, meg egy audio is.
Mellékelem a zip-et.

pongcopy.zip
    
(#) gyengus válasza watt hozzászólására (») Okt 24, 2007 /
 
Pontatlan voltam, az oscit és pllt nem állítgattam.
Úgy gondoltam először, h a megfelelő timer beállítás után egyszerűen növelek 1 változót és majd abból kijön a másodperc .
Köszi a segítséget!
(#) gyengus válasza watt hozzászólására (») Okt 24, 2007 /
 
Számolgattam, de még mindig nem értem. A 625000Hz-ig világos. De azt miért osztjuk 62500-al? A megszakítás nem akkor van, ha túlcsordul a regiszter? Ez 256 vagy 65536 lehet ugye?
(#) potyo válasza watt hozzászólására (») Okt 24, 2007 /
 
Gondolom elnézted, mert itt egy 18F4550-ről van szó, egy kicsit bonyolultabb az órajelképzés tekintetében.
(#) potyo válasza gyengus hozzászólására (») Okt 24, 2007 /
 
A megszakításkezelés pontos hossza nem számít, ha nem túl hosszú ahhoz, hogy a Timer0 regisztere túlcsorduljon. Ebben az esetben csak hozzá kell adni mindig egy konstanst a megszakítási rutin legelején a TMR0 regiszterhez. Ez a konstans számítás alapján 6, de lehet hogy 5 kell, szimulátorban pontosan meg kell nézni, mennyi kell, hogy legyen (ennek a szimulációjakor érdemes az asm listát nézni, és a breakpoint-ot rögtön az első utasításra tenni a megszakítási cím után). A lényeg, hogy a Timernek úgy kell számolnia, mintha 250-ig menne fel, vagyis 250 utasításciklus után okozzon megszakítást. Célszerű még a program írásának elején ezt a Timert belőni, és a szimuláció idejére a főprogramot megtömni NOP utasításokkal, hogy még véletlenül se tolja el a szimuláció folyamán a látottakat az, hogy épp egy kétciklusos utasítást hajtott végre a processzor a megszakítás megjelenésekor. Persze nem célszerű az előosztót 1:1-en hagyni, legyen inkább 1:8 arányú, ekkor egy 48 körüli értéket kell a TMR0 regiszterhez hozzáadni a megszakítási rutin legelején, mert csak egyszer adunk hozzá, de nyolcszor megy egy 256-ig. Ha megvan, és mondjuk 48MHz-en ketyeg a processzor, akkor Timer0 megszakítás 6000-szer történik meg egy másodperc alatt. Ezután már C-ben egy unsigned segédváltozót csökkentesz minden megszakításkor, és amikor leért nullára, akkor visszadobod 6000-re, valamint növeled 1-el a másodperceidet.
(#) watt válasza gyengus hozzászólására (») Okt 24, 2007 /
 
Idézet:
„Számolgattam, de még mindig nem értem. A 625000Hz-ig világos. De azt miért osztjuk 62500-al?”
Mert akkor 10Hz-et kapsz kereken, amit már elég jól lehet számlálgatni segéd számlálóval.


Idézet:
„A megszakítás nem akkor van, ha túlcsordul a regiszter? Ez 256 vagy 65536 lehet ugye?”

Igen, de ha a megszakításkor feltöltöd a Timer regisztereit 65536-62500-al(plusz a korrekciókkal), akkor rögtön hamarabb lesz a következő megszakítás!
(#) watt válasza potyo hozzászólására (») Okt 24, 2007 /
 
Upsz, igen bizony! Sima 18F-ek működnek a leírt módon az USB-s PIC-ek igen meg vannak cifrázva!
(#) benjami hozzászólása Okt 24, 2007 /
 
Látom hogy mostanában felvetődött az LCD kijelzőre történő számok kiírásához a konverzió. Régebben írtam egy univerzálisan használható macro-t 8 és 16 bites, előjeles és előjel nélküli számok szöveggé konvertálására.
Plusz tudománya a Kónya könyvben is megjelenthez képest, hogy képes a kezdő nullák szóközzel (vagy bármivel) történő helyettesítésére valamint a szám elejének csonkolására (pl. ha tudjuk hogy csak kétjegyű szám lehet) , no meg persze a 16bit és az előjel.
A felhasználás mikéntjéhez mellékelek egy asm példafile-t is. Ez 18f4550-re készült, de valszeg bármely 18as sorozathoz használható. 16f sorozathoz aki akarja írja át magának.
A macro file-ban vannak más macrok is amik nem kapcsolódnak a számkonverzióhoz, az ne zavarjon titeket.
Használjátok egészséggel.

String.zip
    
(#) zsozso hozzászólása Okt 25, 2007 /
 
Csak felraktam egy alap windózert + az mplab+c18 as fordítót.
18f452 es olimexes pic-web kártyáról van szó. Alap microchipes tcp-stack csak nem akar lefordulni!
Mplab-ban ugye beállítom a configba az eszközt 18f452, beolvasom a projectbe a 452es lkr fájlt.
fordítás megtörténik de amikor a linker dolgozna hibát ír:
"could not find definition of symbol 'TickUpdate' in file MainDemo.o "

És a sor (1550) a MainDemo.c -ben: TickUpdate();

Mit csinálok rosszul?

Köszi
Zsolt
(#) watt válasza zsozso hozzászólására (») Okt 25, 2007 /
 
A project beállításainál(zöld fogaskerekes ikon, vagy mi), be kell állítani a könyvtárakat, hogy honnan és hová fordítson. Most is van valami beállítás, de valószínű nem egyezik az elérés a mostani felmásolt hellyel. Állítsd be annak alapján értelemszerűen és elvileg jó lesz.
(#) menyus válasza benjami hozzászólására (») Okt 25, 2007 /
 
Köszönet érte, még mindíg szenvedek ezzel az LCD s dologgal. Minél több példát látok annál közelebb jutok a megoldáshoz. (remélem...

:dead

(#) bbalazs_ hozzászólása Okt 25, 2007 /
 
Udv!

Van egy PIC24HJxxxx mikrokontrollerem es keptelen vagyok ra programozot irni. Nem most kezdtem a dolgot, 16f84, 16f876a, 18F sorozat mar a hatam mogott van, de ez kifogott rajtam, a neten is pontosan ezt panaszoljak sokan, hogy korabbi pic-eket siman programoztak (irtak ra programozot), ezt meg nem tudjak. Egyszeruen fel sem ismeri, hogy progizni akarom, meg a config regisztereket sem tudom olvasni. Mindent szazszor ellenoriztem, megprobaltam az osszes letezo PGC/PGD labon. A pic biztosan jo, mert egy gyari programozo siman programozza ugyanabban a kartyaban. A jelszintek ugyanolyanok, mint nalam.

Valoszinuleg az inicializalasi szekvencia nem jo, de a programozasi adatlapja(i) altal emlitett ket kulonbozot! is probaltam, egyikkel sem megy.
Probaltam kulonbozo kesleltetesekkel, jelszelesseggel, frekvenciaval, semmi.

Kuzdott-e mas ilyennel es sikerrel jart-e?
Vagy valaki fel tudna-e tenni gyari iro/olvaso szekvenciat, ha rendelkezik megfelelo muszerrel?
Elore is koszi.
(#) watt válasza bbalazs_ hozzászólására (») Okt 25, 2007 /
 
Idézet:
„egy gyari programozo siman programozza ugyanabban a kartyaban. A jelszintek ugyanolyanok, mint nalam.”

Engedd meg, hogy kételkedjem, hogy a jelek ugyanolyanok. Egyébként ez a téma kicsit túlmutat a mindennapi kérdéseken, nem hiszem, hogy valaki fog tudni segíteni, hacsak meg nem várod, amíg nekem is lesz egy 24HJ és írok rá progit! Jelenleg fogalmam sincs miért nem mehet, ha mindent az adatlapok szerint csinálsz!
(#) Sendi hozzászólása Okt 25, 2007 /
 
Üdv Mindenkinek.

Segítséget szeretnék kérni, mert nem boldogulok egyedül.
PIC terén kezdő vagyok.
Vettem 2db. EW162G0YMY 2x16 karakteres kijelzőt tanulás céljából.
Többféle kijelzős-pic-es kapcsolást is megépítettem, de a kijelző mindig üres maradt.
A bekötése biztos jó,hiszen csak táp ,poti és adatok vannak.

A pic 16F877-re van test programom, be is programoztam. A pic kimeneteire (LCD bemeneteire)
LED-ket kötöttem.
A LED-ek futás közben villognak is, de a kijelzőn semmi nem történik.
Fogalmam nincs hogy miért.
Megköszönném ha valaki tudna tanácsot adni.

Köszönettel

LCD.ASM
    
(#) Norberto válasza Sendi hozzászólására (») Okt 25, 2007 /
 
Hali!

El se fogod hinni, hányan buktak már el a kontraszt-állításon

Meg kéne nézned, hogy rendesen be van-e kötve a kontrasztot állító rész, illetve finoman tekergetni működés közben a kontraszt-állító potit!
(#) watt válasza Sendi hozzászólására (») Okt 25, 2007 /
 
Csatlakozom Norberto ötletéhez!
A 3-as lábat(kontraszt) test felé 470ohm-al, 5V felé 8,2k-val kösd be, vagy így állítsd be a potit, ha poti van rajta.
(#) gulasoft hozzászólása Okt 25, 2007 /
 
Hát mivel a pongos zip-emre nem jött válasz, ezért megépíytem, mert a forráskód alapján ennek működnie kell. Elektronikailag ugyan nem tudom, hogy a fenébe fogy egy 12Mhz-s quartz meghajtani egy adatlap alapján 10MHz-vel hajtható ic-t, de majd kiderül.
(#) watt válasza gulasoft hozzászólására (») Okt 25, 2007 /
 
Simán megy 12MHz-el!
Egyébként néztem a programot, de ne kívánd, hogy meg is értsem!
(#) bbalazs_ válasza watt hozzászólására (») Okt 25, 2007 /
 
A jeleket egy 100MHz-s digitalis szkoppal ellenoriztem.
A jelalak es az amplitudo stimmel, ami elterhet, az a tovabbi jelekben (jelfolyamban) lehet, hiszen ez a digit szkop sajnos nem kepes akkora minta tarolasara.
EZERT kerdeztem, hatha valakinek van valami logikai analizatora vagy monitora erre.

Pl. azert lehet az adatlap szerint hiba, mert KET EGYMASTOL ELTERO adatlapot is talaltam (az inicializalasi szekvencia vonatkozasaban) ugyanarrol a PICrol.

De ha nem, hat nem, en megprobaltam...

(#) bbalazs_ válasza Sendi hozzászólására (») Okt 25, 2007 /
 
A varakozasi idok rendben vannak?

Probalj meg a busy flag ellenorzese nelkul irni, csak kis varakozassal, kb parszor 10ms-t minden adat kuldese kozott. Ha igy jo, csokkentsd az idot.

Inicializalas utan az LCD kisse elsotetul. Ez latszik a kijelzon?

(#) watt válasza bbalazs_ hozzászólására (») Okt 25, 2007 /
 
Adatlap hibákkalmár én is találkoztam, de ekkorával nem. Egyik szekvencia sem működik?
Neked melyik égetési infód van meg? Nekem a DS70152E
(#) Sendi hozzászólása Okt 25, 2007 /
 
Üdv mindenkinek

Köszönöm a gyors válaszokat.
A kontrasztot természetesen állítottam, és semmi.
Csak a háttér világitás megy, és nem sötétül el a kijelző.
Próbáltam másik,ugyanolyan kijelzővel is, de az eredmény ugyan az. (mindkettő új)
Időzítések? Nem tudom, kezdő vagyok, de az előbbi kérésemnél ott a prg. nem én írtam tehát valószínüleg jó.
Ha esetleg valaki átnézné, vagy ha van egy 2x16 -s kijelző vezérlő prg.-ja 16F877-re, azt megköszönném.

Köszönettel.
(#) gulasoft válasza watt hozzászólására (») Okt 25, 2007 /
 
A programban használt karaktereke le vannak definiálva, van benne vertikális szinkronizálás, meg horizontális, a sorok nem véletlenszámgenerátorral készültek, ennyi melót meg csak nem feccölt bele fake-ből valaki.
Ha megy, akkor kis módosítással kiváltható az lcd, nekem van egy vga-monitor konvertálóm, azt rádugom a 17"-os lcd monitoromra.
Ha megy.
(#) Norberto válasza Sendi hozzászólására (») Okt 25, 2007 /
 
Idézet:
„Csak a háttér világitás megy, és nem sötétül el a kijelző.”


Akkor bizony ott kontraszt-beállítási gondok lesznek. Ugyanis a kontrasztot állító potméter egyik végső helyzetében teljesen elsötétült kijelzőt kell látnia a próbálkozó delikvensnek. Ilyenkor minden egyes pixelnek "látszódnia" kell.
Következő: »»   84 / 1318
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