Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   512 / 1222
(#) Chipmunk1960 hozzászólása Ápr 11, 2014 /
 
Sziasztok, Lenne egy kérdésem a tapasztaltabb PIC-es kollégákhoz. Adott egy futópad kontrollere PIC16F723 vezérli a motorokat. Valaki már piszkálta előttem, cserélt benne látszólag PIC-et + kvarc-ot ??? van egy etalon panelem ICSP konnectorral, meg K150 égetőm. Viszont a jó-ból sem tudom a PIC tartalmát kiolvasni. Az látszólag legalább működik, mert bekapcsoláskor behúzza a reléket, hallatszik. Akkor is, ha a programozóval megszólítom, viszont csak 0000-k vannak mindenhol. Minden ötletet köszönök! Üdv: Mike
(#) Bakman válasza Chipmunk1960 hozzászólására (») Ápr 11, 2014 /
 
Minden bizonnyal azért nem tudod kiolvasni a tartalmát, mert a kódvédelem be van kapcsolva. Ennyi, nincs tovább. Bár, mintha valahol azt olvastam volna, hogy valahogy ki lehet kényszeríteni belőle a programot, de lehet, hogy csak hallucinálok.
(#) don_peter válasza nedudgi hozzászólására (») Ápr 11, 2014 /
 
Lehet, hogy viccnek gondolod, de én teljesen komolyan kérdezem.
Biztosan létezik valamilyen számolási mód mellyel meg lehet állapítani, hogy mennyi memóriára van szükségem az esetleges adataim tárolására.
Mivel az adatok rugalmasak és változnak így nem tudom meghatározni mekkora memóriát kellene használnom, hogy elég legyen mindenre.

De, hogy képbe kerüljetek milyen adatokat akarok tárolni egy példát mondanék:
Egy hőprofilt szeretnék tárolni aminek több mezője is lenne:
1. név, 2. 150, 3. 320 . . . 8. 660
Tehát számokat és betűket egyaránt kellene tárolnom nyilván egy meghatározott sorrendben.
Ennek kapcsán kérdezném, hogy van e valami számolási módszer amit alkalmazhatnék, hogy a memória pontos vagy kisebb nagyobb pontossággal meghatározzam a méretét.
Tehát, hogy egy karakter mennyi helyet foglal, 1 szám mennyi helyet foglal, 1kb-ba mennyi karakter vagy szám fér el...stb
Biztos van erre egy egyetemes szabály... vagy nincs?
(#) Bakman válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
A mikrokontrollerek igazábol csak számokkal tudnak dolgozni.
Nézzük például a nevet. Ha megelégszel három karakterrel, akkor minden karaktert helyettesítesz egy számmal. Mivel a magyar ABC 44 betűből áll, így egy betűre max. a 43-as szám jut (0-val kezdődik). Ezt egy bájton már el lehet tárolni, három karakterhez három bájt kell.
Most jönnek a számok. Ha egy szám meghaladhatja a 255-öt de kissebb, mint 65 281, akkor annak tárolásához két bájtot kell felhasználnod, mivel a mikrokontrollerek EEPROM-jai bájtonkénti elrendezésűek. Egy bájt max. értéke 255 lehet. Ha van nyolc számadatod egy névhez, akkor 16 bájtnyi hely kell neked.
A karakterek három bájtja, plusz az értékek 16 bájtja = 19.
Egy középkategóriás mikrokontrollerben 256 bájtnyi EEPROM található, tehát ebbe 13 adatsor fér bele, plusz marad egy kicsi.

Az EEPROM-hoz hozátartozik az a tény is, hogy nem lehet végtelenszer írni, viszont cserébe megtartja a tartalmát akkor is, ha kikapcsolod a kontollert. Ha a RAM-ban tárolod az adatot, akkor nagyságrendekkel tovább bírja a kontroller (elméletileg végtelenszer), cserébe viszont csak addig, amíg ki nem kapcsolod az egészet. Viszont, viszonylag olcsón lehet kapni viszonylag nagy RAM-mal rendelkező mikrokontrollereket, pl.: PIC18F14K22. Természetesen vannak ettől jóval nagyobb memóriájú PIC-ek is.
A hozzászólás módosítva: Ápr 11, 2014
(#) nedudgi válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
Már értem a problémádat.
Egy karakter, alapesetben egy bájt. Mostanában ASCII kódolást használunk, főleg mikrokontrolleres környezetben. Hátránya, hogy legfeljebb 256 különböző karakterből állhat a szöveg. A számokat binárisan, vagy szövegként tároljuk. A bináris tárolás a pontosságtól, illetve a legnagyobb értéktől függ, így lehet 1,2,3,4,8 bájt. A kihagyott számok gyakorlatilag nem használtak. Ha szöveget akarsz tárolni, két lehetőséged van. Fix hosszúságú, vagy változó hosszúságú szöveg a választék.
Fix hosszúság esetén annyi bájt kell egy szövegnek, amennyi a leghosszabb szöveg hossza. Ezt meg kell szorozni a a szövegek számával. A módszer előnye, hogy egyszerűen programozható. Akkor érdemes használni, ha nagyjából azonos hosszúságú szövegeid vannak.
Változó hosszúság esetén vagy a szöveg hosszát tárolod, vagy a szöveg végére teszel jelölést. Ilyenkor 1-két bájt többlet kell szövegenként.
(#) don_peter válasza nedudgi hozzászólására (») Ápr 11, 2014 /
 
A környezet amiben majd használom mert ezt elfelejtettem megemlíteni: PIC18F4550 és ehhez menne valami SPI memória aminek majd a méretét akarom kiszámolni, hogy ne legyen se túl nagy se túl kicsi.
Ha ilyen külső memóriát használok pl: 25LC640A-I/P ahhoz, hogy megtartsa a memóriát kell hozzá elem?
A PIC memóriáját nem akarom használni mert elég nagy programot tervezek és kell a hely..
Tehát ha jól értem.
1 bájt = 8bit számban maximum 256-ot tud tárolni karakterben (betűben) meg csak 1-et?
Ha viszont a szám nagyobb mint 256 de kisebb mint 512 akkor már 2bájt-ot fog foglalni?
A PIC nem fog magának le a memóriából az olvasás és írás miatt?

ui: a szövegek mivel max 20karakteres az LCD méretem így maximum 20karakternyiek lesznek.
A számok pedig 1-től maximum 500-ig fog menni, hogy 2bájt-ba beleférjek és felesleges is több.
A hozzászólás módosítva: Ápr 11, 2014
(#) Chipmunk1960 válasza Bakman hozzászólására (») Ápr 11, 2014 /
 
Szia, Rémlik nekem is valami az olvasásvédelemről, megpróbálok komolyabban rákeresni. Köszi! Üdv: Mike
(#) icserny válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
- Két bájt az nem 512-ig számol, hanem 0-65535-ig (he előjel nélküli...)
- 20 karakteres litániákat nem hiszem, hogy érdemes lenne eltárolni. Ha program állította elő (máshonnan honnan is lenne?) akkor elég visszaolvasáskor generálni.
- Ha EEPROM-ot akarsz venni, akkor 1 Mbit (128 kB) a plafon a Microchip kínálatában. Ha eldöntöd. hogy milyen gyakorisággal tárolsz és egy feljegyzéshez hány bájt kell, akkor kiderül, hogy mennyi idő alatt telik meg.
- Megfontolandó, hogy SPI vagy I2C legyen (ha más soros eszközt is használsz, ahhoz kell igazodni...)
(#) don_peter válasza icserny hozzászólására (») Ápr 11, 2014 /
 
Köszönöm a kiigazítást.

20karakter:
Itt előre kell majd beállítani az egyes programokat.
A programok opcionálisak lesznek, tehát aki használja majd annak kell beállítani egy 4x4-es matrix gombsorral az értékeket.
Minden egyes programnak lesz egy neve és ahhoz sorakoznak az adatok.
A beírás követően elmenti a beállítást vagy is elmentődik a memóriába a beállított profil és ez így fog szépen majd egymás után tárolódni egészen addig ameddig én akarom vagy amíg a memória el nem fogy. (nyilván itt lesz korlát)
Tehát kellene a 20karakteres név.

Az eltárolási folyamat jó esetben egyszer lesz, de nyilván ha nem jó a beállított érték akkor szükség lesz majd a szerkesztésre vagy törlésre.
Gondolom itt a szerkesztés lesz majd a jobb mert a törlés után megüresedik az a rész és az összes többi utánit feljebb kellene helyezni.
Nah mindegy ez már majd kiderül és le lehet programozni ha muszáj.

SPI porton keresztül lenne használva, de persze emellett még majd a szenzorok is azon fognak lógni szóval itt kell majd a chip select.
Vagy nem jó a gondolat menetem?

Úgy számolom, hogy kb. elnagyolva is 400bajt-ra lesz szükségem, így még sem kell félnem, hogy nem férek bele egy kisebb memóriába
(#) nedudgi válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
Nem tudjuk még, hány különböző nevet akarsz eltárolni, és az honnan kerül a kontrollerbe.
Az biztos, én nem számolgatnék, a legnagyobb, a büdzsébe még beleférő EEPROMot venném. Az adatfelépítés is érdekes, pont túllépi a kerek számokat. 20 karakteres névhez 6 darab szám tárolható 32 bájton. Ha kettővel rövidebb lesz a név, akkor 32 bájtos adatsorokkal szépen ki lehet használni a memóriát. Ha kell a 20 karakter, akkor lehet, hogy az egyszerűség, és rugalmas struktúra érdekében 64 bájtos darabokra osztanám fel, így a 20 karakter mellé még 22 darab szám elfér. Ha a nevet szépen léptetjük,forgatjuk , mondjuk másodpercenként, akkor a 20 karakter lehet több is.
(#) don_peter válasza nedudgi hozzászólására (») Ápr 11, 2014 /
 
A program helyet 10-re akarom lekorlátozni mert felesleges több.
Tehát 10 név és a hozzátartozó adatok (6 szám) lesznek.

Igen ez igaz..lehetne léptetni, forgatni is egy sorban.

Had kérdezzem meg, miért irtóztok a karakterek mentésétől?
1 karakter 1 bájt, ha 20 karaktert akarok eltárolni az 20bájt lesz vagy is 20x8bit.
A pazarlás miatt mondjátok, hogy inkább itt valami olyasmi jön képbe amit én még nem tudok vagy nem értek?
Tehát itt a 8-16-32-64 bájtos blokkokra kellene beállítani az adatsorokat?
Még egyelőre csak az elmélet olyan fázisban létezik a fejembe, hogy szeretném memóriában tárolni az adatokat, de a hogyan még nem ismerem így minden tanácsot szívesen veszek.
Igazából soha nem csináltam még ilyesmit, de mindent el kell egyszer kezdeni

Ez lehet alap kérdés, de nem értem miért számít, hogy 32 vagy 64bájtos legyen az egy adatsor?
Könnyebb kezelni, ha 8-16-32-64-es struktúrákban van eltárólva?
(#) Bakman válasza don_peter hozzászólására (») Ápr 11, 2014 /
 
Valószínűleg a pazarlásnak gondolják a 20 karaktert, de ha a vevő ezt kéri, ezt kell neki adni. 20 karakter, 20 bájt, 6 szám, 12 bájt. Összesen 32 bájt / adatösszeg. Nem számít, hány bájtos egy adatsor, lehet 13 is, ha neked úgy tetszik. Felesleges felkerekíteni 16-ra, mert így minden egyes adatsoron 3 bájtot buksz a semmibe.
(#) nedudgi válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
A tárolási cím kiszámítása egy nagyságrenddel könnyebb, gyorsabb, ha szorzás helyett mondjuk léptetéssel, vagy összeadással állítjuk elő. Én ezért preferálom a 2 hatványait rekordhosszúságnak. Engem nem zavar a karakterek mentése!
A nagyobb memória előnye, hogy a később előjövő probléma nem okoz olyan fejtörést, amit hardver módosításával lehet orvosolni. Egy kétszeres tárhely nem sokkal drágább. Ez főleg akkor érvényes, ha nem látod a folyamat végét. Később, ha már lesz gyakorlatod, jobban tudsz spórolni, az első projekteknél szerintem nem érdemes. Még az is lehet, a hardver egészen más célra lesz felhasználva, amikor jól jön a tartalék.
(#) don_peter válasza nedudgi hozzászólására (») Ápr 11, 2014 /
 
Bakman: köszi, hogy tisztába vágtad a dolgot. Kicsit át kell állni az agyamnak erre bájtos dologra.

nedudgi:
Igen én is úgy vélem, hogy talán a 2 hatványos számolás talán tényleg egyszerűbb lenne mint sem össze vissza számolgatni és úgy meghatározni a következő címzést.
Bár ez szerintem megoldható csak mondjuk egy picivel több programozással.

64KB-os memóriát rendeltem szóval ebbe fér adat bőven és majd a későbbiekben lehet szűkíteni bár, ahogy az árakat nézem teljesen felesleges a kisebb még akkor is ha nem használom ki.
Köszönöm az infókat és a segítséget.

Ja még annyi, hogy ezekhez a memóriákhoz kell elem, hogy megtartás az adatokat?
Pl: 25LC640A-I/P
A hozzászólás módosítva: Ápr 11, 2014
(#) Bakman válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
Nem kell hozzá elem, ez EEPROM.
(#) nedudgi válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
Az EEPROM memória nem felejt, csak ha törlik, erre a célra szolgáló paranccsal. Nem kell feszültség az adatok megőrzésőre.
(#) nedudgi válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
Ilyen esetben nem csak a picivel több programozásról van szó. A szorzás, főleg az egyszerűbb kontrollereknél, (ahol nincs szorzó utasítás) időigényes művelet lehet, ami a többí azámítástól veheti el az időt. Jelen esetben valószínűleg nem számít.
(#) don_peter válasza (Felhasználó 15355) hozzászólására (») Ápr 11, 2014 /
 
Nem tudom, nem néztem még utána, de ha el is férne akkor is azt szeretném másra tartogatni.
Ezeket az adatokat minden kép külső memóriába akarom vezetni, hogy kellőképpen rugalmas legyen és ne keljen szűkölködnöm.
Nem mellesleg külső memória használatával lehetőségem adódik megtanulni az SPI port kezelését és memória programozását.

Közben még is megnéztem és 256bájt a memóriája ami kevés lenne nekem.
(#) vicsys válasza don_peter hozzászólására (») Ápr 11, 2014 /
 
SD kártya?
(#) don_peter válasza nedudgi hozzászólására (») Ápr 11, 2014 /
 
Igen igazad van az időre nem is gondoltam.
Ez igen csak okozhat gondot mármint a számításokkal vesztett idő, ha nem is most, de később mindenképp.
Szerintem a te gondolatmeneted alapján fogok elindulni és 2-es hatványával fogom megoldani az adatstruktúra felépítését.
Köszi..
(#) icserny válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
Idézet:
„Nem mellesleg külső memória használatával lehetőségem adódik megtanulni az SPI port kezelését és memória programozását.”
Nem nagy kihívás, főleg hogy a honlapomon már részletesen le van írva!

Az SPI vagy I2C választást csak azért feszegettem, mert ha jól emlékszem, akkor a PIC18F4550-nél nem megy egyszerre a kettő...
(#) don_peter válasza vicsys hozzászólására (») Ápr 11, 2014 /
 
Húhúúú az már nekem kicsit húzós lenne nem?
Mármint még az SPI sem lesz egyszerű mert mindent nulláról kell megírjak előzetes tudás nélkül.
Bár ha az SD kártya is soros SPI porton tud működni akkor gondolom nem lehet az sem gond.
De ezt még nem tudom elképzelni.

Persze majd kelleni fog valami ilyesmi is, ha akarok logolni és utána a logolt adatokat menteni egy fájlba, de ez már hosszabb távú elképzelés..

Más:
Mi a véleményetek a C18-as fügevénykönyvtárakról.
Szerintetek érdemes és jó ötlet használni a benne lévő függvényeket?
Mint pl: timerek, pwmek, spi...stb.
Vagy jobb, ha mindent magunk írunk meg és magunk állítunk be a regiszterekbe?
(#) vicsys válasza don_peter hozzászólására (») Ápr 11, 2014 /
 
Mennyi időd van a projektre? Ha van 1-2 hónapod, menni fog biztosan. Ha nincs, akkor keress egy programozót.
Az SD előnye, hogy hordozható és tényleg nagy a kapacitása. Egy jól működő rutint, egyszer kell csak megírni...
(#) don_peter válasza icserny hozzászólására (») Ápr 11, 2014 /
 
Igen-igen nagyon sokat tanulok az oldaladról.
Eszméletlen segítséget nyújt csak van hogy 10szer kell átolvasnom mert az agyam is túlcsordul.
Eddig az analóg portokban és a megszakításoknál segített a legtöbbet.
A PWM-et már nekem kellett kibogozni mert azt még nem fejezted be pedig jól jött volna.
Közben már megírtam

Itt is köszönöm a befektetett energiát, hogylétre hoztad ezt az oldalt.
Bárkinek bátran ajánlom mert nagyon jól tanulható belőle...
És most fényesre nyaltam a hátsód
A hozzászólás módosítva: Ápr 11, 2014
(#) don_peter válasza vicsys hozzászólására (») Ápr 11, 2014 /
 
Én nem másnak csinálom a cuccot.
Nem profitálok belőle.
Magam szórakoztatására és a tudásom szélesítése miatt kezdtem el a C nyelvet tanulni és a PIC programozást is.
Nem mellesleg nagyon érdekel a téma így van bennem nem kevés kitartás...
Szóval van időm mindenre bár nem tudok állandóan ezzel foglalkozni csak max a szabadidőmbe...
(#) vicsys válasza don_peter hozzászólására (») Ápr 11, 2014 /
 
Akkor már (elvileg) tök mindegy mivel kezdesz. Hasonló az SD kártya kezelés is és általában van is kéznél...
(#) don_peter válasza vicsys hozzászólására (») Ápr 11, 2014 /
 
Ő is SPI-n megy?
Vagy az már I2C porton?

Egyébként, hogy tiszta legyen:
SPI == soros port
I2C == párhuzamos port
Jól értem?
(#) nedudgi válasza don_peter hozzászólására (») Ápr 11, 2014 / 1
 
Az I2C két vezetéken kommunikál (adat és óra), a protokollban szerepel a periféria címzése, az SPI pedig 3+1 vezetéken (adat ki, adat be, órajel, és a megcímzett eszköz engedélyező jele).
A hozzászólás módosítva: Ápr 11, 2014
(#) Hp41C válasza don_peter hozzászólására (») Ápr 12, 2014 /
 
Azért egy 20 -szal való szorzás sem olyan bonyolult: 20 = 16 + 4 = 4 * (4 + 1). M'sr;syt egz 18F már rendelkezik szorzó utasítással.
(#) Chipmunk1960 válasza Chipmunk1960 hozzászólására (») Ápr 12, 2014 /
 
Szia, keresgéltem, de nem találtam semmi használhatót, ha esetleg mégis lenne valakinek ötlete, esetleg más kommunikációs csatornán keresztül megköszönném. Így össze sem tudom hasonlítani a PIC-et, hogy legalább azt kizárhatnám a hibakeresésben. Köszi :Mike
Következő: »»   512 / 1222
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