Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1154 / 1320
(#) nedudgi válasza jdani hozzászólására (») Dec 11, 2013 /
 
Nem valószínű, hogy érdemes foglalkozni a program visszafejtésével, egyszerűbb újat írni.
Mit kellene tudni annak a programnak?
(#) watt válasza potyo hozzászólására (») Dec 11, 2013 /
 
Minden olyan típus, amiben nincs ANSEL és ANSELH és elég az ADCON-okat bizergálni!
(#) jdani válasza nedudgi hozzászólására (») Dec 11, 2013 /
 
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.
(#) potyo válasza watt hozzászólására (») Dec 11, 2013 /
 
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
(#) watt válasza potyo hozzászólására (») 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.
(#) potyo válasza watt hozzászólására (») Dec 11, 2013 /
 
Ja hogy úgy, akkor értem már, min csúsztál el
(#) jdani hozzászólása Dec 12, 2013 /
 
Akkor van aki módosítana / megtervezne egy programot 629-be?
Ha kell, némi fizettség is járna érte
(#) usane válasza jdani hozzászólására (») Dec 12, 2013 /
 
Írj a tervezőnek, hogy módosítsa neked.
(#) pepe1125 hozzászólása Dec 12, 2013 /
 
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
(#) mrobi válasza pepe1125 hozzászólására (») 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.
(#) potyo válasza pepe1125 hozzászólására (») Dec 12, 2013 / 1
 
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
(#) pepe1125 válasza potyo hozzászólására (») 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!
(#) icserny válasza pepe1125 hozzászólására (») Dec 13, 2013 / 1
 
Idézet:
„A PIC18F252-ben van hardware SPI. Viszont nem találok olyan regisztert amivel meglehetne fordítani az adatok irányát.”
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...
(#) Ichthyophagy hozzászólása Dec 13, 2013 /
 
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:
  1. TRISBbits.TRISB7 = 1;        
  2. ANCON1bits.PCFG8=1;   //disable the ADC      
  3. INTCONbits.GIE_GIEH = 0;
  4.  
  5. RPINR1 = 5; // INT1 mapped to RB2  
  6. RCONbits.IPEN = 0;   //No priority      
  7. INTCON2bits.RBIP = 0;        
  8. INTCON3bits.INT1IP = 0;        
  9. INTCONbits.RBIE = 1;        
  10. INTCON3bits.INT1IE = 1;        
  11. INTCON2bits.INTEDG1 = 1; //falling edge  
  12.  
  13. tmp=PORTB;        
  14. Nop();
  15.  
  16. INTCONbits.RBIF = 0;        
  17. INTCON3bits.INT1IF = 0;
  18.  
  19. Sleep();
(#) watt válasza Ichthyophagy hozzászólására (») Dec 13, 2013 /
 
Ú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
(#) Ichthyophagy válasza watt hozzászólására (») Dec 13, 2013 /
 
Fú köszi szépen! Hogy kell bankot váltani? Még nem nagyon csináltam ilyet...
(#) bbalazs_ válasza Ichthyophagy hozzászólására (») Dec 13, 2013 /
 
Figyelj, halevo:
megszunteted a szamlad az egyiknel es ujat nyitsz a masiknal.

De ez a kerdes VALOBAN a halado topicba valo szerinted?
(#) Hp41C válasza bbalazs_ hozzászólására (») Dec 13, 2013 /
 
Egy C fordítónak tudnia kellene, hogy melyik regisztert melyik bankban, milyen hozzáférési lehetőséggel kell kezelni...
(#) Ichthyophagy válasza bbalazs_ hozzászólására (») Dec 13, 2013 /
 
Bocs... gondoltam megkérdezem, de utánanézek máshol.
(#) Ichthyophagy válasza Hp41C hozzászólására (») Dec 13, 2013 /
 
C18-at használok, ezek szerint ő nem tudja :\
(#) Hp41C válasza Ichthyophagy hozzászólására (») Dec 13, 2013 /
 
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.
(#) Saggitarius válasza tikiss hozzászólására (») Dec 13, 2013 /
 
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)
(#) watt válasza Hp41C hozzászólására (») Dec 13, 2013 /
 
Benéztem a forrást... Igazad van, elnézést a téves infóért!
(#) watt válasza Ichthyophagy hozzászólására (») Dec 13, 2013 /
 
Elnézést, más baj lesz ott!
(#) Prendick válasza Ichthyophagy hozzászólására (») Dec 13, 2013 /
 
Az INTEDG1-nél a "falling edge" szerintem inkább 0, mint 1.
(#) Ichthyophagy válasza watt hozzászólására (») Dec 13, 2013 /
 
semmi gond, csak segíteni akartál, viszont nem tudom mi lehet a baj! :\
(#) Ichthyophagy válasza Prendick hozzászólására (») Dec 13, 2013 /
 
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.
(#) Prendick válasza Prendick hozzászólására (») Dec 13, 2013 /
 
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.
(#) Prendick válasza Ichthyophagy hozzászólására (») Dec 13, 2013 /
 
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.
(#) Ichthyophagy válasza Prendick hozzászólására (») Dec 13, 2013 /
 
Valóban, ez kimaradt.

Beiktattam ezt:

EECON2 = 0x55;
EECON2 = 0xAA;
PPSCONbits.IOLOCK = 0;

De így sem megy. :\
Következő: »»   1154 / 1320
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