Fórum témák
» Több friss téma |
Sziasztok. A napokban keztem el foglalkozni PIC-el, eddig AVR-t hasznaltam. Egy furcsasagban utkoztem es sehogy sem kapok jo megoldast, ezert a segitsegeteket kernem. Egy 7 szegmenses kijelzot szeretnek multiplexelni. Az idozito megszakitasa mukodi, viszont a szegmens-kivalaszto biteteket nem tudom egyenkent modositan, csak ha a teljes portot irom. Itt van a kodreszlet, amelyet most mukodit:
Ez igy mukodik. A vagy muvelet 1-re allitja az osszes szegmens kivalaszto bitjet, ezutan kikuldom az adatot, es kigyujtom a megfelelo szegmenset (csakhogy igy azt is felul irja amit nem kene). Probaltam mar az alabbi ket fele modszerrel is, de mindkettore lenullazta az osszej kivalaszto bitet es kigyult minden szegmnes:
Van valakinek otlete, hogy miert nem megy a fenti ket sor, vagy milyen mas megoldast lehet alkamazni? UI: Mplab 8.7-et hasznalot XC8-as forditoval A hozzászólás módosítva: Okt 4, 2014
Kár, hogy a kérdezők mindig elfelejtik megmondani, hogy milyen típuscsaládról van szó!
PIC18 esetén PORTA helyett a LATA regisztert kell írni. Sima PORTA = valami; írásnál nincs gond, de a PORTAbits.RA0 = 0; Read-modify-write ciklusban dolgozva esetleg rossz értéket olvas be (mert az előző utasítás hatása még nem érvényesült a kimeneten). A LATAbits.RA0 (vagy mit hell a végére írni CX8-ban, nem tudom?) esetén nincs ilyen probléma. PIC16 esetén pedig szoftveresen kell megoldani kettős bufferelést. A bitműveleteket egy belső változón (legyen mondjuk LATA a neve...) kell elvégezni, majd az eredményt egy PORTA = LATA; paranccsal lehet ténylegesen kiküldeni.
Koszonom a segitseget, meglodotta a prblemat. A PIC tipusat valoban elfeljetettem emliteni, 18F242-rol van szo.
Sziasztok!
Foxi készített nekem egy programot.
Ezt csak be kellett másoljam, átírtam a bemeneteket és a kimeneteket arra amire nekem szükségem van, de nem működik a program, rátölti, de aztán semmit nem csinál ha nyomogatom a gombokat. Szerintetek mi a baj?
PIC12F1xxx, PIC16F161xxx esetén is használható a LATx.
Talan probald meg MPLAB alatt leforditani, majd a SIM segitsegevel szimulalni. Sok minden kiderulhet.
Üdv. A PIC18F46K22 programmemória hányszor írható újra? Pickit2-vel csinálom. Nem találom a leírásában. Olyat tapasztaltam, hogy kb. 50 újraírás után fura jelenséget produkált. Minden esetben csak írás volt. Ezután "Erase", és utána írás, jó lett. Esetleg mindig "Erase" is kell, vagy ilyen gond nincs, csak én valami mást rosszul csináltam?
Köszönöm.
337.oldal "endurance" alatt keresd !
Sokkal több, mint 50 ! A hozzászólás módosítva: Okt 5, 2014
Köszönöm megvan, 10K erase/write cycles a program memória. Akkor én hibáztam valami mást.
A leírás "erase/write" ciklust ír, ezek szerint erase mindig kellhet. Illetve erase esetén nem törli végig a memóriát, mert egy pillanat alatt megvan, lehet mégsem kell erase. Majd meglátom újra, mit tesz erase nélkül. A hozzászólás módosítva: Okt 5, 2014
A PicKit2 azt hiszem minden írás előtt töröl is szóval ez együtt jár.
A grafikus kijelzőnél volt ez a gond, amivel együtt szórakoztunk. Helyenként kihagyott 3-4 pixelnyi vonalszakaszokat, sokat. Másik kijelzővel ugyanez a jelenség. Minden forrasztás csatlakozás jó, és erase, majd újraírás után (semmi más nem változtatva) jó lett. De persze lehet más ok is amire nem jöttem rá, majd kiderül.
Nekem is van néha benne zaj.
Szerintem itt inkább a vezetékezésből jön valami zavar. Pár pixel hiba néha becsúszik nálam is.. Illetve ahogy olvasom nagyon fontosak az időzítések, hogy minden flottul működjön. Nem hiszem, hogy a PicKit2 törlés/írással lenne gond.
Szia!
Hiányoznak a konfig bitek. Ez okozhat némi problémát...
Köszönöm a válaszod!
Mit kéne és hova beírnom ahhoz hogy működjön végre?
Most sajnos nincs időm, de ha MPLAB-ból programozod, akkor a "Configure->Configuration Bits" menüből is be lehet állítani. A jelölőnégyzetben ne legyen pipa, és a beállításokat menüből be tudod állítani. De lehet be is van.. Viszont így látatlanba nem tudom Neked miket kellene beállítani. Ha feltöltenéd a projektet akkor meg tudnánk nézni.
A Te szamitogepeden talalsz a program alkonyvtarban, a MPASM peldak kozott minden letezo procira template ASM mintafileket. Abbol lathatod hogyan is nez ki a config resz. Ezt mindig be kell irni, hogy a uC megfelelo konfiguracioban mukodjon. Itt beallitasra kerul az oszci tipusa, PLL, kodvedelem.... Ezek nelkul nem szeret elindulni a PIC.
Bemásoltam ezeket a beállításokat de ugyanúgy nem csinál semmit
Nem feltétlenül csak bemásolni kell! Olvasd el a pic-ed adatlapját, 258-tól kezdődően vannak leírva, hogy config bit mit állít.
Egyébként is jó lenne egy kapcsirajz is, hogy lássuk miről van szó. A hozzászólás módosítva: Okt 5, 2014
Szoval esetleg bovebben mi az amit nem csinal. Mert pl gondolom vegigleptetted a SIM--ben es ott nem talaltal semmi erdekeset. Mert ott kell kezdeni a hibakeresest. Pl nekem szurja a szemem egy-ket sor.
Namost ez igy nem mukodhet, mert Te kimenetnek allitod a PORTB 4. bitet, viszont a defben a PORTB.5 a LED kimenet. Na akkor a ketto uti egymast. Hiaba valtod a LED allapotat, mert egy bemenetnek allitot port labon probalsz kicsikarni aramot, ami fizikailag lehetetlen. Ja meg masik problema is agodik, mert a 18Fxxx sorozatnal nem PORTx.x bitet irunk hanem LATx.x bitet. Igy roviden 1-2 hiba elso ranezesre, de lehet hogy van meg egy par benne. Megyegyszer: szimulald le SIM alatt a programot, es ugy kiderulhet a nem mukodes oka.
Uraim, adott egy 16F690 QFN tokozású PIC-em. (MPLAB, Hi-Tech C)
Mivel csak 20 kivezetése van és legtöbbjére alapból szükségem lenne (gombok, ledek...stb) nem marad egy kijelző meghajtására is elegendő láb. Arra gondoltam, hogy egy 74HC595-ős shift regiszter közbe iktatásával már megoldódna a lábhiány. Sima HD44780-as kijelzőről lenne szó és csak kiírásra. 7láb, RS, RW, E, D4-D7-ig. Abban szeretném kérni a segítségeteket, hogy ezt miképpen tudnám megoldani. A projekttel addig nem mozdulnék előrébb ameddig a kijelző meghajtása nem oldódik meg minimális láb használatból ami véleményem szerint 3. Láttam a neten ilyen megvalósításokat szóval talán megoldható ez a kis probléma. Egy elmélet is sokat segítene.. Előre is köszi..
Szerintem meg lehet oldani soros-be párhuzamos-kimenettel rendelkező léptető regiszterrel, de csak azzal aminek van Output Enable (vagy Output Latch) engedélyező lába, mert annak aktiválásával egyszerre kerülnek ki az adatok a lábakra. Ha nincs az OE akkor minden órajelnél változnak a kimeneten az értékek (ami egy egyszerű LED-es kijelzőnél nem gond, de az LCD-nél igen).
Az általad említett regiszter megfelelő így első ránézésre, de nem árt ellenőrizni a feszültség szinteket is (PIC-SR és SR-LCD). Lehet, hogy egyszerűbb lenne lecserélni a LED-eket az LCD-vel, ha olyan sok led van akkor könnyebb azokat vezérelni a léptető regiszterrel
Szia, ha találsz olyan programot ami neked hex-ből C-be fordít akkor kérlek szólj, mert tudtommal olyan még nem létezik
Hex-ből esetleg ASM-be lehet alakítani de az se lesz egy lenyűgöző látvány, nem hogy még abból C-t... Ezt nevezik reverse-engineering-nek... Ha csak a hex állományod van akkor abban kellene valamiket átírni szerintem, ha nem akkor esetleg asm-be és azt módosítani, de lehet, hogy úgy is működik, ha csak egyszerűen azt a hex-et írod be, mert tudtommal a 628 a 84-es nagyobb testvére, lábszám megegyezik, csak újabb perifériák vannak benne.
Ha asm-re visszafordítod és az include fájlt és config biteket átírod a megfelelőre, nagy valószínűséggel működni fog. Persze nem 100%...
LCD-re is működik, de LED-re egyszerűbb: Shift1 System
Sajna, nem a LED-ek eszik meg a lábakat.
Amire szükségem van és a lábakat lefoglalja: SPI (4láb), Gombok: Min. 3láb, 2 láb alapból csak inputnak használható, 1 láb VSS 1 láb VDD 2 láb a kristály 1 láb MCLR Ez eddig 14láb és még jó lenne egy állapot jelző LED is. Szóval marad 5 de maximálisan csak 6láb. 74HC595 meghajtásához elegendő 3 láb. Kell 1 órajel, 1 adat, és 1 chip enable. Tehát akkor maradna még 2, legfeljebb 3 szabadon felhasználható láb. Azt még nem tudom, hogy a 2 csak bemenetnek használható lábra köthetek e gombot mert ha igen akkor nyilván azokkal +2-vel nőne a lehetőség. (RC2, RC6) Szóval mivel van ChipEnable láb így egyszerre ki lehet küldeni a szükséges 7Bit-et, de ennek elméletét még nem tudom. Szóval kérném segítségeteket...
Szerintem azt a két bemeneti lábat használhatod nyugodtan bemenetnek (gomb + felhúzó ellenállás), sőt ha kikapcsolod a MCLR-t akkor azt is használhatod bemenetnek, ha nem annyira fontos a pontos időzítés akkor használhatsz belső órajelet és így a két clk lábat is használhatod IO-ként.
Röviden a ShiftRegiszter (SR) annyit csinál, hogy a bemenetén lévő értéket továbblépteti az úrajel felfutó élénél, így sorra kihelyezed az adott bit-et majd küldesz egy-egy impulzust az CLK bemenetére, ha megvagy minddel akkor megvezérled a latch-et is, melynek hatására kikerülnek az adatok a SR lábaira. Bővebben: Link Bővebben: Link
Ohh elfelejtettem említeni, hogy a shift regiszter működését már valamelyest ismerem és meg is írtam rá a szükséges rutint ami egy Makró és egy kis függvényből áll.
Arra gondolok itt, hogy előbb létre kellene hoznom egy 8bites, bitenként különálló struktúrát amelyben az LCD vezérlő bitjeit tárolnám és amelyet majd a későbbiek során töltök fel. Aztán valahogy ezzel haladni illetve ... szóval ez a része érdekes a dolognak
HD44780 ha csak írásra használod, az írás-olvasás lábat fixre kötheted, így 7 helyett 6 lábat kell megoldani.
|
Bejelentkezés
Hirdetés |