Fórum témák
» Több friss téma |
Heló!
Arra van lehetőség, hogy egy 16 bites PIC B portjának (16 bit) csak a felső 8 bitjét írjuk? Köszi!
Miért ne lehetne?
És elárulod hogy hogyan?
Itt nem a maszkolásokra, meg az egyenkénti értékadásokra gondolok, hanem hogy kezelhető e "független" 8 bites portként a felső (vagy esetleg az alsó) 8 bit.
A hozzászólás módosítva: Márc 13, 2019
16-bit MCU and DSC Programmer’s Reference Manual
Idézet: „4.4 BYTE OPERATIONS Since the data memory is byte addressable, most of the base instructions may operate in ither Byte mode or Word mode.” Példák:
A felső byte a páratlan címen érhető el. Sőt:
de
Azért nem árt olvasni az Errata -kat is: pl: dsPIC33CK Errata 24. pont Idézet: „Upper byte of the destination register may not be persistent” A hozzászólás módosítva: Márc 14, 2019
Idézet: „Persze vannak már ettől légyegesen modernebb, kétirányú digitális kommunikációval működő rendszerek is, de az már nem amatőr/hobbi szint.” Miért ne. Nem is rossz ötlet! Igen piciben összedobható egyPIC10F322-essel egy áramkőr, amit el lehetne helyezni a mozgásérzékelőben, egyedi azonosító kóddal ellátni, és egy 1-Wire kapcsolattal csatlakozik a központhoz. Ezt is lehetne zónánként más-más bemenetre kötni, így még zárlat esetén sem válik az egész rendszer működésképtelenné.
Köszönöm!
Leírom, hogy pontosan miért is kérdeztem. A mellékletben lévő lábkiosztással össze szeretnék hozni egy olyan áramkört ami mindenfélét csinál egyszerre, (csak gyakorlásképp) a 7 szegmenses kijelzőn pl. 0-F-ig számol (1s delay-el) közben villog egy led, meg csipog egy csipogó bizonyos esetekben. Plusz a nyomógomb is csinál valamit. Ezeket a PORTB re kötöttem, (tudom hogy ha az A-ra kötném a kijelzőn kívül a többit akkor könnyebb dolgom lenne! ) Tehát ha mongjuk kiíratom a PORT B-re hogy 0xFC00 (ami a kijelzőn 0-ként jelenik meg) akkor az alsó 8 bitet 0-ra állítja, így beleszólva pl a LED villogásába, vagy a csipogó csipogásába. Ezért gondoltam, hogy a felső 8 bitet külön kellene kezelni. A PORTA használatán vagy a külön bitként kezelésen kívül ez megoldható másképp is? A hozzászólás módosítva: Márc 14, 2019
Ilyenen én is gondolkodtam pár éve, de RS485-el.
Idézet: Gyárilag ez úgy van megoldva, hogy a működéshez szükséges feszültséget is a központi egység biztosítja és ha valami gubanc van akkor egyszerűen leválasztja magáról a hibás eszközt. Ahogy a hiba megoldódik, automatikusan helyreáll. „Ezt is lehetne zónánként más-más bemenetre kötni, így még zárlat esetén sem válik az egész rendszer működésképtelenné.”
János barátom haragszik a "gyári" kommunikációs megoldásokra...
Nincs ezzel baj, mi megértjük a másságát.
Kissé bonyolultabb, de hatékony. Ahogy Pali barátom írta, nem kedvelem túlzottan a "gyári" kommunikációs megoldásokat, de az RS485 konkrétan tetszik azon tulajdonsága miatt, hogy akár 1000m távolságot is képes áthidalni. De ez a szerkezeti felépítésének, nem pedig a protokolljának köszönhető. Egyébként a saját 1-Wire rendszerem is más felépítésű, mint a standard.
Na igen, mert te tudsz programozni. Én csak megcsinálom a hardvert és veregetem a vállam.
Nézd meg a képet.
A C nyelű sor azokat a biteket állítja be az új értékre, amelyeknél a maszkban (az & utáni számban) a neki megfelelő helyen 1 áll. Jelen esetben az alsó 8 bitet módosítja. Az inline asm sorokban van, amit kerestél. Az asm("mov.b WREG,LATB"); sor csak az alsó 8 bitet állítja, az asm("mov.b WREG,LATB+1"); pedig csak a felsőket. -- Ha az errata mást nem ír. --
Miért nem próbálod ki? Én most STM32-n kipróbáltam, és arra jutottam, hogy olvasni lehet a PORT-ot bájtonként, írni viszont nem. Ezzel a programmal csináltam (kis módosítással átírható PIC-re is, az ODR a LAT regiszternek felel meg) :
A printf eredmények pedig ezek lettek:
Ez ugyan 32bites vezérlő, de az ODR regiszternek csak az alsó 16bitje van használatban. A hozzászólás módosítva: Márc 14, 2019
Köszi a választ!
Kicsit elírtam az előző hozzászólást. Idézet: Itt inkább az volt a kérddés, hogy nincs e valami utasítás C-ben. (csak siettem mikor írtam! Nem figyeltem.) Mert az ASM-et nem ismerem. De az utolsó hozzászólásod alapján menni fog szerintem, Köszi! „A PORTA használatán vagy a külön bitként kezelésen kívül ez megoldható másképp is?” @benjamin Neked is köszi!
Sziasztok!
Nekem egy olyan problémám lenne, hogy sikeresen használok 3db timer2-t, de még szükségem lenne egy timer0-ra is. Amit akárhogy állítok nem akar működni. MPLABX-ben néztem szimulátorban. PIC16F18456. Ez a timer beállítása:
Elméletileg 8bit-es módban ha TMR0L megegyezik TMR0H-val akkor lesz megszakítás. A megszakításban egyenlőre csak a flag bit-et törlöm.
Hali!
Nem megy nálam sem, szerintem bugos. Próbáld ki hardveren. Ha ott megy, jelents be a Microchip-nél. Én is nemrég találtam egy bogarat és foglalkoznak is vele.
Kipróbáltam debug módban 18F18857-en, ott működik. Szerintem tényleg a szimulátorral lesz a baj.
Helyesbítek! Azzal szimulátorban is működik. A hozzászólás módosítva: Márc 15, 2019
Köszi, hogy megnézted. Már mindenhogy próbáltam. 16bit-es módban is. Nem megy...
Kicseréltem egy timer1-re, az gond nélkül működik. Holnap kipróbálom élesben is.
Hi,
Ismét elakadtam Egy egyszerű PWM-es LED villogtatást szeretnék csinálni a PIC16LF18456-on. Beállítottam a TMR2-t utána a PWM-et és a PPS-be kiválasztottam az RA2-t PWM kimenetnek. Tudom, nem túl elegáns megoldás. Nem is működik Próbáltam a CCP modult is, az sem működik. Nem tudom hol lehet a baj. Ez a kód:
Szimulátoron nem működik vagy hardveren?
Estét!
Előre is!
Csak akkor váltható ki a modulo egyszerűbb műveletekkel, ha az osztó 2 valamelyik hatványa. Ekkor egyszerű and művelet lesz belőle.
Osztás - modulo assembly rutinok
Az a rész (AND függvény) megvan. Nem találtam MOD-ra helyettesítést, úgy tűnik, nem véletlen.
Egész véletlenül nem BCD -re szeretnél konvertálni egy számot?
Arra egész jó, kevés utasításból álló rutin van a belinkelt oldalon:
Jó az ötlet! Igazábol nem BCD kell, hanem egy nagyobb szám (pl. 134 445) számjegyei, viszont így is bőven jó.
Köszönöm!
Szia,
Hardveren. Az MPLAB X szimulátora eléggé kiakaszt, az még hagyján, hogy nem működik a TMR0, de a watchdog-ot sem képes szimulálni Hardveren megy az is szépen...
Azért kérdem mert még sosem néztem. Ennyire időigényes a modulo? Mennyi az annyi?
A hozzászólás módosítva: Márc 23, 2019
|
Bejelentkezés
Hirdetés |