Fórum témák
» Több friss téma |
Rosszul írtam boccs. Nem a visszaverődő fény idejét mentem el, hanem azt a feszültség értéket amit a fototranzisztoron eredményez. Ez lesz a referencia feszültség amihez a következőt hasonlítom. Mint egy komparátor, csak szoftveresen.
Van egy ultrahangos terv is ami hasonlóan működne és azzal kevertem össze egy kicsit. Ott kell az időt mérni, itt a feszültséget mérem. Ezért kell az analóg bemenet.
Amivel jobban jarnal mozgas erzekelonek azt PIR senzornak hivjak.
Passiv Infra Red sensor. Par dollaros eszkoz , kimenete mar logikai jel a .... lesd meg adatlapjat a hestoreban .
Sziasztok,
Egy PIC32MM-el szeretnék egy olyat megvalósítani, hogy az UART-on kapot byte-okat egy state-machine-al szétválogatom a beolvasás során. Én polling-ra gondoltam, hogy figyelem az URXDA bit-et és ha van elérhető karakter, akkor eldöntöm mit kezdjek vele. Tehát így nem egy bufferbe olvasnám be az adatot, hanem minden egyes byte-ot figyelnék, hogy éppen ami jött, mit kezdjek vele. A kérdésem annyi, hogy az URXDA bit mikor kerül törlésre? Tegyük fel, hogy érkezett egy karakter, majd kiolvasom az UxRXREG-ből, ekkor törlődik az URXDA bit? Vagy erre az alkalmazásra a megszakítás jobb lenne? Igazából elég lenne a polling is, a lényeg hogy a beérkező byte-okon eltudjam végezni a hozzá tartozó műveletet. Idézet: „URXDA: UARTx Receive Buffer Data Available bit (read-only)” Valami azt súgja nekem, hogy automatikusan törlődik.
Sziasztok,
Pic32MX530F128H epprom írás nem sikerül 25AA256 eepromal 3,3V 2MHz. Ha 32 vagy 64 byte-ot írok akkor visszaolvasásnál megvan az adat, ha kevesebbet, vagy csak 1bytot magában akkor nem változik az eeprom tartalma. Ha debugger módban végig léptetem az írás lépésein akkor elmenti az adatokat. Levettem a sebességet 300KHz-re is akkor is ez a jelenség. Van valakinek ötlete hol a hiba? Itt vannak az írási program részek Piccoló project alapján, az inicializálás MCC generálta: A System és PCB clock 48MHz.
Próbáltam késleltetéseket is belerakni, SS lábak váltá az sem haszált Idézet: Első ránézésre és az idézett mondatod alapján arra tippelnék, hogy előbb kerül H szintre a CS láb, mint hogy az SPI kommunikáció véget érne. Az utolsó (42. sor) SLAVE_DISABLE(); elé tegyél várakozást. Én a 35. és 36. sor közé is raknék. „Ha debugger módban végig léptetem az írás lépésein akkor elmenti az adatokat.”
Köszi a segítséget!
Azt hiszem megvan a hiba! a WP és a HOLD lábak lebegtek, csoda hogy így is ment.
Sziasztok!
A mellékelt képen a regiszter bankválasztó biteknél nem értek valamit. Ha a 01 = bank1 akkor hogy lehet hogy bank2 is 01? Ott nem 10 -nak kellene lennie? Előre is köszi a segítséget.
Szia!
Ennél a kontroller családnál max.512 regiszter címzésére van lehetőség, melyek 9 bites címzést igényelnek ( 9 biten tudsz 512 kombinációt létrehozni!). Az utasítás gépi kódjába viszont csak 7 bitet tettek bele ( valószínűleg rendszerszervezési okokból !), így kell még további két bit a tényleges címzésnél! Regisztert kétféleképpen címezhetsz: közvetlenül (direkt) vagy közvetve (indirekt). Indirekt címzésnél egy regiszter (FSR regiszter) mondja meg, hogy igazából ki a címzett és ilyenkor az FSR 8 bitjét kiegészíti a STATUS reg. 7. bitje, így lehetővé teszi egy időben 256 regiszter címzését ( de a lehetséges 512 regiszter 2 részre van osztva a 7.bit által!). Ha direkt címzést használsz, akkor az utasításba csak a címzett regiszter 7 bitje fér bele és a tényleges címzéshez szükséges 2 további bitet a STATUS 6-5.bitje adja ( ezt nevezik BANK választásnak!) és így 4*128-as csoport érhető el! Ha megnézed a direkt címzésnél ott van a 4-féle BANK kombináció a 6-5. biteken, de a 2-es BANK-ot eltévesztették, az tényleg 10 (binárisan) lenne ! !
Nyilván. Ha megnézed binárisan a bankbiteket, és decimálisan melyik bank...
Nem lehet hogy öreg doksit nézel?
Köszönöm, értem. Nem mondom hogy teljesen világos minden de szerintem pár nap múlva érteni fogok mindent. Csak még egy párszor át kell ismételgetnem .
pipi: sejtettem, köszi. Azt hiszem 2003-as a könyv amiből most tanulok.
A könyv mellé javaslom a "rendes" gyári adatlapot. ÉS van a majd minden procinak errata doksija, ahol leírják az "ismert" hibákat amik a doksiban és a processzorban vannak. Arra is figyelni kell időnkét a proci milyen REV számú mert lehet hogy a korábbi reviziójú prociban levő hibát javították. Mondjuk ezzel én csak akkor foglalkoztam, mikor belefutottam pl pic24-nél a soroson az adás kezelő bitek hibájába.
Ok. köszi. Nem tudom mi az errata doksi, de utána nézek. Egyenlőre csak általánosan tanulok, nem konkrét egy PIC érdekel, hanem mindegyik. Leginkább C-ben programozok, de úgy vettem észre hogy nem lehet kihagyni az Assembly-t.
Jó a C, én teljesen áttértem. Ha időkritikus a dolog csak akkor írnék asm betétet, de eddig nem kellett
Először C-ben akartam elkezdeni, de tényleg úgy vettem észre (ahogy a könyveket bújtam), hogy nem kerülhetem meg az asm-t. Szerintem így jobban megértem az egész működését. Aztán persze ha már megy "legalább az alap dolgok" akkor C-ben szeretnék próbálkozni.
Sziasztok,
PIC32mm0256gpm064-en szeretnék egy Change Notice megszakítást létrehozni, de sajnos nem sikerül A 8bit-es PIC-ek után ennek elég bonyolult a megszakítás vezérlője... Az RC7-es lábon szeretnék lefutóélre egy megszakítást. A TRIS beállítás helyes, mert megszakítás nélkül működik a láb bemenetként. A beállítások: #include <sys/attribs.h> CNEN1Cbits.CNIE1C7 = 1; // RC7 lefutóél figyelés CNCONCbits.CNSTYLE = 1; CNCONCbits.PORT32 = 0; CNCONCbits.ON = 1; IEC0bits.CNCIE = 0; INTCONbits.VS = 1; INTCONbits.MVEC = 1; INTCONbits.TPC = 0; IPC2bits.CNCIP = 7; IPC2bits.CNCIS = 0; IFS0bits.CNCIF = 0; IEC0bits.CNCIE = 1; A megszakítási rutin: void __ISR(_CHANGE_NOTICE_C_VECTOR, IPL7SOFT) demo_isr(void) { RED_LED = 1; IFS0bits.CNCIF = 0; } Mi hiányzik még, hogy működjön?
Sziasztok!
Régebben már voltam itt, 16f1823-al próbálkoztam. Félbehagytam, most újra előjött a dolog. Először csak egy LED-es villogót szeretnék TMR0-val, de nem megy. Elvileg a belső oszcillátort 8Mhz-re állítottam, a TMR0-át 100Hz-re és 100 IRQ-nként invertálom a LED-et. A fordítást MPLABX/X(-al végzem. A LED folyamatosan világít. Mi lehet a probléma?
Hali!
Így messziről első ránézésre nagyon kevés regisztert inicializálsz, gyanús hogy még az analóg dolgokat ki kell kapcsolni. Bővebben: Link eszerint a 120 oldalon, az anselc-t is kell piszkálni. Azt is érdemes megszokni hogy amelyik picnél van LATx regiszter akkor kimenet esetén azt illik írni nem a PORTx-et
Köszi, megnézem. A mintaprogramokban, amiket néztem, még az OSCCON-t se babrálják.
Sima delay-es villogtatás ment a PORTx-el, de a LATx tényleg korrektebb.
Itt a devhelp vegven latod hogy a golbal interruptot engedelyezni kell a __builtin_enable_interrupts() fuggvennyel.
(Ez ekvivalens az asm("EI")-vel)
Köszi! Így működik.
Viszont csak a legelső lefutóélre generál megszakítást, utána már nem, hiába törlöm a flag bit-et. Érdekes. Nem tudom mi lehet a problémája...
A CNFx regiszter bitjét nem töröltem, ez volt a probléma. Most már OK.
Egy kis inicializálás és a Latx megoldotta a problémát. Még egy kérdésem lenne. XC8 alatt szeretném makrózni a portot (#define LED1 LATCbits.LATC0), hogy LED1 = !LED1 sort tudjak írni. De ez utóbbi 195 error-ral leáll fordításkor. Mi a hiba?
Így írtad? :
LED1 = ~LED1; Ennek mennie kell. A hozzászólás módosítva: Júl 30, 2020
Így írtam. Érdekes, ha annyit írok, hogy "LED1;" vagy "~LED1;", azt megeszi (de ezt nem tudom semmire sem használni). Lehet, hogy rosszul definiálom? Vagy valamit be kell állítani még? MPLABX és XC8 a környezet.
|
Bejelentkezés
Hirdetés |