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   1067 / 1203
(#) gyoran hozzászólása Jan 15, 2019 /
 
Sziasztok
Mint a versenyfutásnál: beragadtam az indítóállásba
Játszogatok.
MPLAB X
XC8
MCC
Minden csak "virtuális" egy MAC-en
18f25k50 projekt, kicsit USB-znék
Projekt legenerálva.
Semmit nem csináltam, csak easy setup, 48 MHz. PLL enabled, generate, fordítás debugra, minden rám mosolyog, aztán a PLLRDY sosem megy magasba. Az init erre vár.
Ha jól látom az órajel sem stabil (OSCCON =0x70, OSCCON2=0x00)
Minden default. Egy darab sort nem írtam.
Mit hagytam ki? Valaki belemászott már ebbe?
Ha nagyon bonyolult lenne, akkor hagyjatok még küzdeni! Csak akkor öljetek időt bele, ha valaki átment ezen és van kész tippje.
A hozzászólás módosítva: Jan 15, 2019
(#) Bakman válasza laci_w hozzászólására (») Jan 15, 2019 / 1
 
Nem bit, bájt. Pl. a kijelző által küldött adat "34". Ez két bájt. Úgy küldd el az adatot, hogy eléje biggyesztesz pl. egy "x" karaktert. Ekkor a kijelző ezt küldi: "x34". Start bájtnak olyat kell választani, amit biztosan nem küldesz egyéb helyről. Pl. start bájtnak nem jó az "5", ha a küldött értékek "0" - "9" terjednek.

A kontrollerben hozz létre három változót, pl.: b2, b1 és b0. Képzeletben tedd ezt a három bájtot egymás mellé. A bal oldali legyen b2, a jobb oldali legyen b0. Az RX megszakításba kell pár lépés. Elöször is a változók értékeit "elcsúsztatod" balra:

b2=b1
b1=b0

Másdoszor fogadod az érkezett bájtot b0-ba. Ezután már csak egy feltételvizsgálat kell. Ha b2="x", akkor a b1 és a b0 tartalmazza a hasznos adatot. Az "x" a harmadik fogadásnál fog a b2-be kerülni.

A módszer kevés adat esetén használható és akkor, ha az adatsor hossza mindig fix.
(#) MPi-c válasza laci_w hozzászólására (») Jan 15, 2019 / 1
 
"Queue" mechanizmus
(#) gyoran válasza gyoran hozzászólására (») Jan 16, 2019 /
 
Köszi, túllendültem rajta...
(#) Lamprologus válasza laci_w hozzászólására (») Jan 16, 2019 /
 
Milyen programnyelvet használsz?
(#) laci_w válasza Lamprologus hozzászólására (») Jan 16, 2019 /
 
MPLAB X 5.1, XC8 fordító, a proci amivel gyakorlok PIC16F18855
(#) cross51 válasza laci_w hozzászólására (») Jan 16, 2019 /
 
Én PIC32(MZ)-re írtam/írok egy stack-et aminek egy lényege volt, hogy non-blocking módba fusson ellentétben az arudinos stack-el.
A harmony-t sokan utálják, de ebből nekem kényelmes volt, hogy az UART-ra semmi ilyennel nem kellet foglalkozzak be állítom hány darab queue akarok onnantól kezdbe mondhatni csak írok a megadott függvénnyel és a többit meg vezérli a software.

Az első szerintem mindenképp valami ilyesmi lenne, hogy ezt meglegyen.

Ugye írni és olvasni kell a nextion-ról,
Írás: az aíró függvénybe be jövő adatot vagy dinamikus vagy statikus tömbben eltárolod + 3db 0xFF (mind a kettőnek megvan az előnye és hátránya is) majd meghívod az UART-ra "író" függvényt (nem azonnal kezd el írni, hanem be rakja a queue-be és mikor oda ér csak akkor ír)

Olvasás:
Vagy egy nagyobb buffer amibe meghívod az "olvasó" függvényt a MCP stack tudja, hogy hány byte került beolvasásra (ez fontos)., ha elérte a buffer méretet újra befűzöd olvasásra a buffer-t.
Azt tudjuk, hogyha a nextion valamit küld annak mindig van egy header-je, hogy mit küld ez nagy segítség mivel ebből az esetek nagy részében el tudod dönteni mennyi adatot kell olvasni a bufferből.
Tehát minden adat ki van olvasva a bufferből és te küldes egy GET b0.pco-t mondjuk erre a vebő buffer-ben az első bájt a 0x71-lesz ebből már tudja a kód, hogy egy int-et olvasol ami 4 byte + 3*0xFF és amig ez az adatmennyéség nem jött be az olvasás -1-el tér vissza így nem kell egy while-ben rostokolni amíg beérkezik az adott adat mennyiség.
Ha stringet olvasol annak nem ismert a hossza ott meg amíg nem érkezik be a 3db 0xFF addig -1-el térsz vissza.

És persze itt én még nem beszéltem azokról a problémákról, hogy figyelni kell a queue túlírásra, vagy ha nincs elég adat kiolvasba akkor nem küldök adatot a nextion felé, meg a nextion-nak is van egy-két nyűgje.

Ez most lehet bonyolultnak hangzik, de ezt egyszer megírod és bármikor a leg több esetben tudod használni ezt a stack-et, tovább fejleszteni nekem csak a button, radioButton, text van megírva mint objektum, de bármikor, ha lesz időm megírni az egészet majdnem ctrl+c,ctrl+v-vel hozzá tudok írni bármilyen objektumot.
(#) gyoran válasza gyoran hozzászólására (») Jan 17, 2019 /
 
Csak azt hittem túllendültem rajta. de nem.
Szóval:
Konfig = MAC MOJAVE, MPLAB X, XC8, saját szimulátora, MCC.
PIC=18F25k50, semmi extra beállítás
Semmi hiba nincs generálás közben
Most éppen EC oscillator medium 4-16 MHz kényelmes 10 MHZ-ra állítva
PLL nélkül szépen elér a main várakozó ciklusba.
Amint bekapcsolom a PLLENABLE-t, mondjuk 3xPLL-lel, (írja is a 30 MHz System Clock-ot), generálás+ fordítás debugra, futtatás: PLLRDY-ra vár örökké.
Vagy én vagyok a hü..e vagy az MPLAB SIM (vagy mindketten)
Ja és: 1 hete túrom az Internetet, de a GOOGLE nem mosolyog rám.
Van valakinek tippje?
A hozzászólás módosítva: Jan 17, 2019
(#) Bakman válasza gyoran hozzászólására (») Jan 17, 2019 /
 
Szerintem itt a gond, lásd melléklet.

000490.jpg
    
(#) gyoran válasza Bakman hozzászólására (») Jan 17, 2019 /
 
Szia, na pont ezt a táblát nem bírtam eddig (sem?) értelmezni
De most:
CONFIG1H=0x24 azaz FOSC=0100

CONFIG1L=0X22 azaz PLLSEL=0 és CFGPLLEN=Enabled (1)

Ezzel a 2 sor van beállítva (40 MHz)
generál, fordit debug-ra és továbbra is a PLLRDY-ra vár.
OSCCON tényleg 0x70 amivel kicsit azt jelzi, mintha belső oszcillátorról menne.
A hozzászólás módosítva: Jan 17, 2019
(#) Bakman válasza gyoran hozzászólására (») Jan 17, 2019 /
 
3xPLL csak és kizárólag akkor használható, ha az órajel forrása 16 MHz valamint a jelzett források vannak kiválasztva.
4xPLL csak 8 vagy 16 MHz-es forrás órajelnél használható.

Az OSCCON regisztert neked kell beállítani, független a konfigurációtól. Már ha jól értem a problémát.
(#) gyoran válasza Bakman hozzászólására (») Jan 17, 2019 /
 
Köszönöm, akkor lehet hogy félreértettem A becsatolt oldalon 8 to 12 MHz nekem belefoglalta a 10 MHz-t is.
Megpróbáltam 8 MHz-cel. Ott is beakadt.
OSCCON-ba 0x70 van írva, itt releváns annyi - ha jól értem - hogy a primary oscillator megy.
Ennyi t....lés után, arra gondoltam, hátha az MPLAB X-nek kell elmagyarázni, hogy a PLL menjen.
Ha lenne ilyen ic-m kipróbálnám élőben.
Mondjuk van más K-s, lehet hogy kipróbálom vele.
Ami zavar csak az, hogy generálok egy projektet, MCC-ben semmi hibaüzenet, nem igazából csinálok semmit csak az órajelet állítom PLL-re. Indítva, olyan, mintha a stabil PLL-re várna.
A hozzászólás módosítva: Jan 17, 2019
(#) Bakman válasza gyoran hozzászólására (») Jan 17, 2019 /
 
Igazad van, 8 - 12 MHz a jó. Viszont, az elején 3xPLL -ről volt szó.
(#) gyoran válasza Bakman hozzászólására (») Jan 17, 2019 /
 
Igen,
Próbálkozom mindennel, most az utóbbi konfigurációval.
Bocsánat, ha félrevezettelek.

Most valamikor legyalulom, és kipróbálom egy 18f26k22-vel, azt akár élőben is megtehetem.
A hozzászólás módosítva: Jan 17, 2019
(#) gyoran válasza gyoran hozzászólására (») Jan 17, 2019 /
 
Ezzel sem megy. Akkor bennem van a hiba.
Ugyanakkor furcsa, hogy órajel van, mert a kódot végrehajtja. Csak nem kapom vissza a PLLRDY jelet
(#) Bakman válasza gyoran hozzászólására (») Jan 18, 2019 /
 
0.5 Hz-es LED villogtatással tudod ellenőrizni, hogy jó-e a frekvencia. A végén kiderül, hogy minden jó, kivéve a PLLRDY bit...
(#) Bakman hozzászólása Jan 18, 2019 /
 
Estét!

Lehet egy kontrollerben két külön "programot" futtatni úgy, hogy a Main függvény elején kiválasztom, melyik kódrészlet fusson? Univerzális NYÁK lenne, kiválasztható módon az, hogy melyik típusú kijelző van a NYÁK-ra csatlakoztatva. Pl. az egyik bemenetet a GND-re húzva az 'A', Vcc-re kövte a 'B' részlet futna (lásd melléklet). Programmemória van, azzal nincs gond. Van ennek valami buktatója, ami elsőre nem tűnhet fel nekem?

A dolog egyszerűbbnek tűnik, mint a teljes programot teletűzdelni feltételekkel. Nextion HMI vagy MAX7219.
(#) gyoran válasza Bakman hozzászólására (») Jan 18, 2019 /
 
A tipp az jó, mondjuk egy lábon akár szkóppal vagy frekimérővel is meg tudom mérni direktben az órajelet.
Viszont valahol mélyen elásva azt olvastam hajnalban, hogy az MPLAB X nem tud PLL-t.
Ami magyarázat lehet, de durva egy kicsit. Mert egyébként relatív nem rossz.
(#) gyoran válasza Bakman hozzászólására (») Jan 18, 2019 /
 
Én eléggé assembler közeli gondolkodású vagyok, de szerintem menne.
A RESET és az interrupt belépési pontoknál kell feltételesen elágaznod. Ha ez utóbbiból több is van, akkor persze többször.
Nem tudom milyenPIC-et használnál, ill. hogy a kellően "okos" PIC-nél van-e más belépési pont. Az ábrádat nem nagyon tudtam dekódolni, mert az A kód után törvényszerűen lefut szerintem a B, de hát lehet, az én agyam másként jár.
A hozzászólás módosítva: Jan 18, 2019
(#) Bakman válasza gyoran hozzászólására (») Jan 18, 2019 /
 
Idézet:
„az MPLAB X nem tud PLL-t”
Ez fura lenne. Konfiguráció és/vagy regiszter kérdése a dolog.
(#) Bakman válasza gyoran hozzászólására (») Jan 18, 2019 /
 
A két verzó más-más megszakításokat használna (inícializálási részek). Elméletben nincs átjárás a két részlet között, az "Amíg 1" loop végén tulajdonképpen egy goto utasítás van, ami a loop elejére mutat. Már ha jól értelmezem a fordítást. PIC18F26K22
(#) sonajkniz válasza Bakman hozzászólására (») Jan 18, 2019 /
 
Én ezt egy kissé másként oldottam meg. Bár jó eséllyel babrásabban.
A Nextionhoz is és az LCD-hez is tartozik egy-egy PIC. Különös tekintettel arra, hogy a Nextion magában is kezel gombokat, az LCD-hez meg külön tartozik billentyűzet. A kijelzők saját programot futtatnak, és csak adatcsere van.
1-Wire kommunikáció van PIC-ek között, és a vezérlőt nem is érdekli, melyik képernyő van rácsatlakoztatva.
(#) Bakman válasza sonajkniz hozzászólására (») Jan 18, 2019 /
 
Érdekes módszer! Ennyire azért nem akarom túltolni.
(#) usane válasza Bakman hozzászólására (») Jan 18, 2019 /
 
Miért ne lehetne, ha egyszerre csak az egyik fut? Persze nyilván konfigurációs bitek nem változhatnak, de ha a kontroller tud oszcillátort váltani akár két különböző frekvencián is tud menni a két programrész.

Szerk. Eszembe jutott egy kérdés. A választás ugye csak inditás előtt történik nem közben?

Tárgytalan, látom a folyamatábrádról a választ.
A hozzászólás módosítva: Jan 18, 2019
(#) gyoran válasza Bakman hozzászólására (») Jan 18, 2019 /
 
Visszanézve: elég régi bejegyzés vot.
Ettől kezdve viszont már nem tudom mi lehet.
A PLLRDY feltételt megfordítva a szimulátor pont azt csinálja, amit kell.
A vicc az, hogy próbáltam két típust, mcc alap beállításokkal és amint a PLL-t bekapcsolom, rögtön megáll ott.
Néztem a manualt, de azt követve sem jobb.
A hozzászólás módosítva: Jan 18, 2019
(#) eSDi válasza gyoran hozzászólására (») Jan 19, 2019 /
 
Hali!

Jó látom, hogy szimulátorban próbálod és nem valós hardveren debug-olva? Nem tudtam végig követni a szálat.
Nem lehet, hogy ez a szimulátor hibája? Ha kézzel bebillented a bitet működik?
(#) eSDi válasza gyoran hozzászólására (») Jan 19, 2019 / 1
 
Végig próbálgattam én is pár módot.

Szerintem a szimuláció nem képes erre. Ha belső oszcira kapcsolom, akkor annak a státusz bitje sem jön meg. Szóval szerintem ne szivasd magad tovább vele. Vagy hagyd ki az ellenőrzést, vagy debugold hardveren.
(#) Hp41C válasza eSDi hozzászólására (») Jan 19, 2019 /
 
A szimulátor korlátozásának áttekintése segíthet. Sajnos nem rendelkezem MpLabX tapasztalatokkal, de az MpLab 8 -ban volt egy külön lap a Simulator beállításainál, ahol fel volt sorolva mi mindent nem kezel a szimulátor: UART, SPI, oszcillátor T1 gateing, stb.

Mplab 8.90 -ben szimulálva a 16F1455 esetében sem áll be a PLLRDY, de a program a chip -ben fut.
A hozzászólás módosítva: Jan 19, 2019
(#) eSDi válasza Hp41C hozzászólására (») Jan 19, 2019 /
 
Nagyjából ugyan ez a lista az X-ben is.
(#) gyoran válasza eSDi hozzászólására (») Jan 19, 2019 /
 
Köszönöm, Neked és eSDi-nek hogy időt töltöttetek vele.
A következtetés eszerint, hogy az egyébként nem rossz MPLABX szimulátor itt még tehet egyet és mást.
Mondjuk én a PLL megvalósítását valami borzasztó egyszerű dolognak gondolom: számold ki mennyinek kellene lennie (meg is teszi) indulás vagy SW paraméter változás után várj 2
x időt és csinálj úgy mintha..
De hát nem én csinálom, lehet, hogy ez sokkal bonyolultabb.
Következő: »»   1067 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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