Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nem valószínű, hogy érdemes foglalkozni a program visszafejtésével, egyszerűbb újat írni.
Mit kellene tudni annak a programnak?
Minden olyan típus, amiben nincs ANSEL és ANSELH és elég az ADCON-okat bizergálni!
Ez lenne az. Az eredeti két kimenetet is tud kapcsolni. Nekem elég ha csak egy kimenetet kapcsol. A másik változtatás az lenne, hogy ne csak távirányítóval tudjam kapcsolni a kimenetet, hanem közvetlen az IC egyik bemeneti lábán is egy nyomógombbal.
Belepillantottam a 16F877A és a 18F4550 adatlapjaikba, és ugyanaz szerepel a 11.3 és a 21.5 fejezetek alatt a bekeretezett részek első sorában:
Idézet: „When reading the port register, any pin configured as an analog input channel will read as cleared (a low level).” És megnéztem az ADCONx regisztereket is, alapból mind úgy áll be, hogy ami lehet analóg üzemű láb, az olyan helyzetben is indul. A hozzászólás módosítva: Dec 11, 2013
Szia! Tényleg nem érted mi okozta a félreértésem? Az említett PIC-ekben az ADCON-okkal állítod be a lábak jellegét. Miután az ADCON-okaban a 14K50-ben csak az volt, hogy AD off, így azt hittem, ezzel el van intézve. Utólag már én is értem mi hogyan van, de elsőre nem volt megszokott. Egyébként már sokkal többet beszéltünk róla, mint amennyi idő alatt a dolog kitisztult és megoldódott.
Ja hogy úgy, akkor értem már, min csúsztál el
Akkor van aki módosítana / megtervezne egy programot 629-be?
Ha kell, némi fizettség is járna érte
Hello!
A következő problémába ütköztem. DVD-ből kibányászott hétszegmenses kijelző vezérlőt vezérelni... SPI-n keresztül kell a chippel kommunikálni, ez eddig oké. Viszont az adatokat nem a legnagyobb, hanem a legkisebb helyi értékű bittől kell kiküldeni. A PIC18F252-ben van hardware SPI. Viszont nem találok olyan regisztert amivel meglehetne fordítani az adatok irányát. AVR-el sikerült megoldani a kommunikációt, mert van benne egy DORD regiszter, amivel meglehet fordítani a LSB-t, hogy MSB-vel kezdje a küldést és vice versa. DE PIC-ben nincs ilyen opció?! DVD DISPLAY DRIVER adatlapja A másik nagy kérdésem, hogyan lehet egy RAM tartalmát frissíteni úgy, hogy csak 1bit-hez nyúljon hozzá?! A többit ne módosítsa... Úgy kötötték be a mérnökök, hogy megszívassanak. Egy adott RAM területet kell a táblázatban frissíteni, de oszloponként. Mert egy oszlop adata tartalmazza, hogy melyik szegmens világítson. Biztos van megoldás bitenkénti frissítésre, de hogyan?! 14 byte a RAM tartalma. Egy adott cím frissítéséhez megadom, hogy mondjuk a 0x01 HEXA címet frissítse, de ki kell küldenem 8 bitnyi információt, és ha nekem csak az utolsó biten kell módosítani, akkor mivan? Törlődik az előtte lévő... A hozzászólás módosítva: Dec 12, 2013
Szia.
Ha hardveresen nem lehet megfordítani az adatot, akkor meg kell oldani szoftverből. pl: jobbra fordítasz egyet, utána pedig balra, de azt már egy másik regiszterbe. Ezt elismétled nyolcszor és már meg is van fordítva az adat. A második kérdést nem értem. Ha módosítasz egy bit-et, akttól a többi nem változik.
Az SSPBUF írása előtt megfordítod a bitek sorrendjét, itt találsz rá néhány módszert.
A bit frissítésével kapcsolatban pedig rossz hírem van, ki kell újra küldened az egész bájtot. De mivel az SPI eleve bájtokkal dolgozik, így ez nem különösebben probléma. Csinálsz egy 14 bájtos tömböt a kontrollerben, ahol tárolod ugyanazt, amit a kijelzővezérlő ic-be kell küldeni, és ha változtatás van, akkor megváltoztatod az adott bájt adott bitjét a tömbben, majd kiküldöd az egész bájtot, amiben változtattál a biten. A hozzászólás módosítva: Dec 12, 2013
Igen. A bit frissítéshez ki kell küldeni azt a byte-ot, így törlődne ami benne volt.
De Én is azon a tömbbön gondolkodtam pont most, mielőtt írtad volna, hogy mi lenne ha a mikrokontrollerbe hoznék létre 14byte-os tömböt és az egész adatot mindig kiküldeném ciklusonként. ÉS ha van változás akkor látszik a kijelzőn. De még sose csináltam ilyen tömböt De jó az elképzelés, és ezt találom az egyetlen járható útnak... Köszi! Idézet: Akkor mi van, ha nem az SPI-vel küldöd ki, hanem az USART modullal, szinkron módban? Lásd: adatlap 16.3 alfejezete. Az adatlap szerint ekkor RC7 láb az adatvonal, RC6 az órajel. A bitek sorrendje így jó lesz, csak azt nem tudom, hogy a display vezérlőnek jó-e ez a mód? Lehet, hogy a kimenő órajelet invertálni kell... „A PIC18F252-ben van hardware SPI. Viszont nem találok olyan regisztert amivel meglehetne fordítani az adatok irányát.”
Hahó!
Még mindig nem sikerült megoldanom a sleepből kiugrasztás problémámat.. RB7 IOC lábon sikeresen kihozom a sleepből, de RB2-INT1 lábbal nem megy. Bemenetre vannak konfigurálva, belső felhúzó ellenállás, és a lábakon egy momentary kapcsoló van a föld felé 470ohmmal. Bármi ötletet észrevételt szívesen veszek, mert már nem tudom mi lehet a gond... KÖSZI előre is!! kód:
Úgy látom, hogy a RPINR1 az EE7 címen van, ami Non-Access SFRs, azaz bankolni kellene(14-es Bank), ha be szeretnéd állítani 5-re. A többi regisztert is nézd meg, hogy melyik nem érhető el a szokásos bankváltás nélkül!
A hozzászólás módosítva: Dec 13, 2013
Fú köszi szépen! Hogy kell bankot váltani? Még nem nagyon csináltam ilyet...
Figyelj, halevo:
megszunteted a szamlad az egyiknel es ujat nyitsz a masiknal. De ez a kerdes VALOBAN a halado topicba valo szerinted?
Egy C fordítónak tudnia kellene, hogy melyik regisztert melyik bankban, milyen hozzáférési lehetőséggel kell kezelni...
Bocs... gondoltam megkérdezem, de utánanézek máshol.
C18-at használok, ezek szerint ő nem tudja :\
Nézd meg a View / Disassambly menüponttal, mit fordított a kódba. Keress rá az assembly ablakban a C forrás utasítására - ott lesz kommentben.
En abbol gondoltam, mivel a leirasban ugy szerepel, es ilyen sorrendben, hogy engedelyezeshez es letiltashoz szukseges a HV parancs, ergo alapbol nem engedelyezett.
Ha feltetelezzuk, hogy mindenkepp le kell tiltani eloszor, akkor a Microchip sajat peldaprogramja hibas amit az MCP46xx boardhoz adtak? Akkor miert mukodik hibatlanul a masik oldal minden esetben? Nem 1-2 darabrol van szo, mostmar kozel jarok a beepitett, hasznalatban levo 100-hoz. A tanacsot koszi, es megprobalom atirni a forraskodot, most egy kicsit "csendesebb" nalunk. "Azért azt kicsit furának találom, hogy mivel a project nem barkács jellegű, és hiba esetén senki sem kíváncsi a problémás alkatrész státuszára" Valo igaz, nem barkacs jellegu, de kisse tul vagyok terhelve, mivel egy szemelyben kell megoldanom egyenlore a tervezeset es manageleset nem csak ennek a gyartmanynak, valamint prototipus epitest es meg javitani RMA egysegeket. (Cegletszam 9 fo CEO-tol Admin-ig, lathatod az adatlapomrol a ceg nevet, mi is a profilunk tulajdonkepp)
Benéztem a forrást... Igazad van, elnézést a téves infóért!
Elnézést, más baj lesz ott!
Az INTEDG1-nél a "falling edge" szerintem inkább 0, mint 1.
semmi gond, csak segíteni akartál, viszont nem tudom mi lehet a baj! :\
Köszi az észrevételt, igen elfelejtettem átjavítani a kommentbe. Mint írtam momentary sw van rákötve szóval ez nem számít.
Nem látom, hogy az RPINR1 értékadása esetén kikapcsolod-e a PPSCON.IOLOCK-ot. Anélkül nem lehet változtatni a portokon.
Azt mondtad, minden észrevételt kérsz.
Viszont még egy kérdésem van. Miért van kikapcsolva a GIE? Úgy végképp nem megy semmilyen interrupt, az RB7 se. Mintha nem pontosan ez a kód lenne az, amivel a problémád van, úgy meg nehéz kitalálni, mi a hiba.
Valóban, ez kimaradt.
Beiktattam ezt: EECON2 = 0x55; EECON2 = 0xAA; PPSCONbits.IOLOCK = 0; De így sem megy. :\ |
Bejelentkezés
Hirdetés |