Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1171 / 1318
(#) foxi63 válasza AZoli hozzászólására (») Ápr 12, 2014 / 1
 
Az a 0.65V lehet egy si dióda, ekkor együtt melegedik a "referencia" is, tehát kvázi hőkompenzálva van...
egyébként ha jól emlékszem 2,5K lehet az osztó maximális ellenállása.
A hozzászólás módosítva: Ápr 12, 2014
(#) AZoli válasza foxi63 hozzászólására (») Ápr 12, 2014 /
 
Köszönöm a segítséget, közben találtam 470ohm-os potit, amit terheletlenül beállítottam 3V-ra, ezt már csak 0,03V-al húzza lejjebb a Vref+ láb. Megpróbálom majd 220+330 ohm-os ellenállásokkal, mert ahhoz nem kell nyákot módosítani.
Persze lehet hogy vak vagyok, de továbbra sem találok erről semmi infót. Én most használok először külső referenciát, de nem hiszem hogy más még nem futott bele ebbe...
(#) ktamas66 válasza AZoli hozzászólására (») Ápr 12, 2014 / 1
 
Használj TS431-et (SOT-23). Más PIC-nél találtam ilyet (16F887):
Idézet:
„AD09* IREF VREF Input Current 10 — 1000 μA During VAIN acquisition. Based on differential of VHOLD to VAIN. — — 50 μA During A/D conversion cycle.”
(#) AZoli válasza ktamas66 hozzászólására (») Ápr 12, 2014 /
 
Köszi, így meg is találtam:
AD08: IREF Current Drain 10 / 600 uA ADC off / ADC on
Hát persze hogy itt nem szerepelt a "Vref" szó, csak amit te néztél.. különben még meg is találtam volna..
Köszönöm!
TS431-et SOT-23 -ban eddig nem találtam Mo.-on.
(#) ktamas66 válasza AZoli hozzászólására (») Ápr 12, 2014 /
 
Bár úgy látom REVERSE, tehát fordított bekötésű vagy TL431
A hozzászólás módosítva: Ápr 12, 2014
(#) usane hozzászólása Ápr 14, 2014 /
 
Üdv!

Sikerült időt szakítanom a ws2812B projectemre. Egyenlőre egy LEDel szenvedek. Be tudom kapcsolni, de valamiért nem tudom a színeket módosítani. Mindíg fehéren világít. Játszott már valaki ilyennel?
Bitbillegtetéses módszerrel próbálom vezérelni.
A kódot innen implementáltam, és egy PIC16F1459-essel hajtom RB-6-on.
Szkópom sajna most nincs ezért nem tudom megnézni a valós kimenő jelet, de szimulátoron jó volt a jel.
Van valakinek tapasztalata ezzel a leddel, hátha valamit rosszul értelmezek?
Bár nem egy bonyolult protocoll, de mégsem megy valamiért.
A hozzászólás módosítva: Ápr 14, 2014
(#) vicsys válasza usane hozzászólására (») Ápr 14, 2014 /
 
Szerintem kevés a 20MHz a rövid impulzusokhoz. Nálam még éppen elindult, de továbbléptetni már nem tudtam. Számításaim szerint 48MHz-es kell minimum...
Bővebben: Link
(#) proba válasza usane hozzászólására (») Ápr 14, 2014 /
 
Én egy primitívebb módon oldottam meg, 16Mhz órajel esetén kb 5 utasítás fér bele az időzítésbe.Sajnos el kellet tárolni az egész szalag képét, ez után kimeneti port a PORTC 0
Sajna így a portot teljesen lefoglalja, de több utasításra nincs idő.
Az FSR regiszterrel címzett területről teszi ki a képet.

  1. BRA IND2                            ;indításnál beugrik
  2. IND
  3.         BCF PORTC,0
  4. IND2
  5.         BSF PORTC,0                     ;1 BIT
  6.         RLF INDF1                               ;BIT_1 
  7.         RLF PORTC                       ;KIKÜLDVE A PORTRA
  8.         RLF INDF1                               ;BIT_2  KIOLVASÁSA                                            
  9.         BCF PORTC,0                     ;ADAT VÉGE
  10.         NOP                                     ;A BÉKE KEDVÉÉRT
  11.  
  12.         BSF PORTC,0                     ;2. BIT
  13.         RLF PORTC                       ;BIT KIKÜLDÉSE
  14.         RLF INDF1                               ;3.bit  KIOLVASÁSA
  15.         BCF PORTC,0
  16.         NOP
  17. .
  18. .
  19. .
  20.  
  21.         BSF PORTC,0                     ;8. BIT
  22.         RLF PORTC                       ;BIT KIKÜLDÉSE       
  23.         DECFSZ FSR1L
  24.         BRA IND
A hozzászólás módosítva: Ápr 14, 2014
(#) usane válasza vicsys hozzászólására (») Ápr 14, 2014 /
 
Elégnek kellene lennie.
200ns-os utasitásonként, és az LED adatlapján +-150ns egy bitidő tűrése.
Persze a port ki-be kapcsolását nem számoltam, de az minimális.

proba: Ez hasonló ahhoz a módszerhez amit alkalmaztam, valamit mégis elrontottam.
Kipróbálom ezt is.
(#) proba válasza usane hozzászólására (») Ápr 14, 2014 /
 
Már a szín beolvasás tárolás, utána a feltételes ugrás megette az egy impulzusra jutó időt. Ilyen alacsony órajellel csak előre teljesen kiszámolt képet lehet kiírni szerintem.(a port kiírás ugyan úgy 4 órajel ciklus mint a többi.Sajna az ugrók meg 2*4 így az én rutinomba is van egy túl hosszú idő, a byte váltásnál, de ez az én szalagomon nem okozott gondot. A 60.ledet is úgy állítottam ahogy akartam.
A hozzászólás módosítva: Ápr 14, 2014
(#) usane válasza proba hozzászólására (») Ápr 14, 2014 /
 
Az utasítások ciklusidejével tisztában vagyok, így utólag belegondolva a 3 szín közötti kapcsolatot nem számoltam át, azt csak átemeltem, mondván ha neki jó volt nekem is jó lesz, átszámolom, de nem hiszem, hogy ott lesz a hiba. Lehet, hogy megemelem az órajelet a végén, és akkor mahinálhatok is benne, a PIC tud 48MHz-t is belső órajelről.
A hozzászólás módosítva: Ápr 14, 2014
(#) usane hozzászólása Ápr 15, 2014 /
 
Hello!

Tudtok mondani olyan PIC-et ami a 16f1459-el kompatibilis digital I/O, és utasításkészlet szemponjából?
(#) potyo válasza usane hozzászólására (») Ápr 15, 2014 /
 
Itt kiválasztod a Family-nál az Enhanced mid range-t, Pin Count-nál kiválasztod a 20-at, és akkor kapsz egy listát.
(#) usane válasza potyo hozzászólására (») Ápr 15, 2014 /
 
Épp azon ütyködöm
(#) usane válasza usane hozzászólására (») Ápr 15, 2014 /
 
Új kérdés.
A BANKSEL utasítás mennyi ciklusidő, 1 vagy 2?
Ezt nem találtam meg sehol.
Mert ez eredetileg ugye az RP0 és RP1 biteket állítaná, ami 2 ciklus , de nem tudom, hogy mint kibővített utasításkészletet hogyan kezeli a PIC.
A hozzászólás módosítva: Ápr 15, 2014
(#) nedudgi válasza usane hozzászólására (») Ápr 15, 2014 /
 
A banksel nem utasítás, hanem makró. Kontrollere válogatja, minek fordul le.
(#) usane válasza nedudgi hozzászólására (») Ápr 15, 2014 /
 
Megtaláltam köszönöm.
MOVLB és 1 ciklus.
(#) potyo válasza usane hozzászólására (») Ápr 15, 2014 /
 
18F-nél MOVLB és 1 ciklus. 16F-nél inkább két BCF/BSF utasítás (BCF/BSF STATUS, RP0/RP1), vagyis két ciklus.
(#) usane válasza potyo hozzászólására (») Ápr 15, 2014 /
 
Valóban, de ez bővített készlettel rendelkezik, megnéztem az adatlapját is meg a disassembly listingben is MOVLB-nek fordítja.

Tegnap olvasgattam az edaboardot és meglepődve tapasztaltalak.
(#) Hp41C válasza potyo hozzászólására (») Ápr 16, 2014 /
 
Eladhatatlan lenne az Advanced Midrange, ha a 32 lapjának váltását 5 darab bitállítgató utasítással lehetne csak elvégezni.
A hozzászólás módosítva: Ápr 16, 2014
(#) Attila86 hozzászólása Ápr 17, 2014 /
 
Az MCP4922-nél az működhet, ha a chip select lábat fixen lekötöm nullára? Az SPI ponton csak ő van, szóval ha bezsél hozzá a PIC az biztos hogy csak neki szól nem másnak. Viszont spórolnék egy lábat.
(#) Hp41C válasza Attila86 hozzászólására (») Ápr 17, 2014 /
 
Nem. Az SPI kommunikációját a CE lefutó éle indítja.
Idézet:
„The write command is initiated by driving the CS pin low,...”
(#) Attila86 válasza Hp41C hozzászólására (») Ápr 17, 2014 /
 
Igen, közben rájöttem.
(#) Attila86 hozzászólása Ápr 18, 2014 /
 
Szeretném kicsit átvariálni a programomnak a programmemóriában való elhelyezkedését. Alább bemásoltam az ide vágó részt. Ahol "..." van ott egy tonna utasítás van csak azokat kitöröltem mert most feleslegesek. A mikrovezérlő programja két részből áll: egyrészt az érdemi szoftverből ami a lelke az egész áramkörnek és van egy legalább ekkora rész amin pedig adatokat tárolok. Nagyon-nagyon sok adatot. Azt szeretném, hogy a program érdemi része a programmemória elejétől kezdődjön, az adatok pedig utána legyenek. Ezt az alábbi kódrészletből láthatóan úgy oldottam meg hogy a szoftver a 0x0030-as címről kezdődik, az adatok pedig a 0x7530-tól. Ez tulajdonképpen nekem már jó, csak ha később a szoftvert tovább bővítem és hosszabb lesz, akkor esetleg lehet hogy eléri majd a 0x7530-as címet. Hogyan lehetne megoldani hogy ez ne történhessen meg, és hogy az adatok közvetlen a főprogram után legyenek a memóriában? Azaz ne fixen a 0x7530-tól kezdődjenek hanem dinamikusan változzon a kezdetük.
(A szoftver szempontjából mindegy hogy hol vannak az adatok a programmemóriában mert táblamutatókkal dolgozom amik a "TESZTPROGRAMOK" címkére állnak rá és onnan kezdik el kiolvasni az adatokat a programmemóriából.)


  1. ;*************** VEKTOROK ******************   
  2. RST CODE 0x0000
  3.         goto    START1          ;melyik program fusson?
  4. ;       goto    TESZT1          ;melyik program fusson?
  5.  
  6. HI_VEC  CODE 0x0008             ;megszakítási cím
  7.     goto        hi_isr
  8. LO_VEC  CODE 0x0018
  9.     goto        hi_isr
  10.  
  11. CODE 0x7530
  12. TESZTPROGRAMOK: db      0x00, 0x00
  13. #include        "Tesztprogramok.inc"
  14. ...
  15. db      Programadatbázis_vége
  16.  
  17. ;**************** MEGSZAKÍTÁSOK ***********************
  18. PGM     CODE 0x0030
  19. lo_isr
  20.         retfie
  21. hi_isr
  22. ...
  23.         RETFIE
  24. ;-------------------------------------------------------------------------------
  25. ;----------------------TESZT1---------------------------------------------------
  26. ;-------------------------------------------------------------------------------
  27. TESZT1
  28. ...
  29.         goto$
  30. ;-------------------------------------------------------------------------------
  31. ;----------------------START1---------------------------------------------------
  32. ;-------------------------------------------------------------------------------
  33. START1
  34. ...
  35. #include        "LCD rutinok.inc"
  36. #include        "Menurendszer.inc"
  37. ...
  38.  
  39.         goto    $
  40.         END
(#) kissi válasza Attila86 hozzászólására (») Ápr 18, 2014 /
 
Miért nem írod akkor a programod végére egyszerűen az adatokat?
(#) Attila86 válasza kissi hozzászólására (») Ápr 18, 2014 /
 
Igen, ez egy nagyon logikus kérdés.
Azért mert így jobban olvasható a kód mert a fejlécben lenne a vektoroknál megadva az egész. Igazából csak a megvalósításának lehetősége érdekelne mert mondom, tulajdonképpen nekem ez így is jó. Ha esetleg elérné a főprogram az adatok kezdeti címét, akkor úgy is visít a fordító.
(#) kissi válasza kissi hozzászólására (») Ápr 18, 2014 /
 
Úgy értettem, hogy 'ORG' nélkül !
(#) kissi válasza Attila86 hozzászólására (») Ápr 18, 2014 /
 
Akkor tegyél a programod végére egy címkét és azt írd az adatbázishoz tartozó ORG után ( nem próbáltam, de jó lehet ! ) !

  1. CODE vege
  2. TESZTPROGRAMOK: db      0x00, 0x00
  3. #include        "Tesztprogramok.inc"
  4.  prog
  5.  
  6. vege
A hozzászólás módosítva: Ápr 18, 2014
(#) Attila86 hozzászólása Ápr 18, 2014 /
 
Közben lett egy másik, sokkal fontosabb kérdésem is.
Meghívok egy szubrutint (CALL utasítással) ami nagyon hosszú ideig, akár órákig is eltarthat míg benne szaladgál a mikrovezérlő. Viszont van egy nyomógomb a PIC int lábára kötve és azt szeretném hogyha ezt a gombbot megnyomják akkor azonnal kilépjen a szubrutinból. Tulajdonképpen egy vészgomb funkciójához hasonló dolog megvalósítása miatt kell ez. Meg lehet ezt valahogyan oldani? A veremtárral kellene valahogyan játszani szerintem, de még nem jöttem rá hogy pontosan hogyan... Valahogy a PUSH/POP utasításokkal kellene manipulálni a vermet. Viszont nehezíti a dolgot hogy a nyomógomb megnyomását is a PIC megszakításban kezeli azaz a gomb megnyomása is új címet rak a verembe. Illetve a kérdéses szubrutinból is lehet hogy meg van épp hívva egy másik szubrutin, ez esetben kettővel kellene feljebb ugrania a mikrovezérlőnek.

Arra gondoltam hogy annak a szubrutinnak az elejére amelyikből ilyen módon "kényszerítve" szeretném kiugrasztani a mikrovezérlőt, tehát ennek a szubrutinnak vagy szubrutinoknak az elején bebillentenék egy erre kijelölt bitet és amikor megnyomják a gombbot akkor a megszakításban ellenőrizném hogy ez a bit 1-be van-e állítva. Ha igen akkor végrehajtódna ez a móka, ha meg nem akkor nem. Ezzel nagyon egyszerűen ki tudnám jelölni hogy mely szubrutinokból akarom erőszakkal kirángatni a PIC-et. (Természetesen a szubrutin végén a RETURN előtt pedig 0-ba állítanám ezt a bitet.)
Csak honnan tudjam hogy a veremtár tetejéről hány visszatérési címet kell eldobálnom? Mert mondom; lehet hogy a szubrutinban egy másik szubrutint is meghívok, vagy akár azon belül is egyet stb.
(#) watt válasza Attila86 hozzászólására (») Ápr 18, 2014 /
 
Szerintem nem jól szervezed a programot, ha valahol ilyen sokat időzik és onnan kell kitépni. Javaslom az állapotgépek tanulmányozását!
Következő: »»   1171 / 1318
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