Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Hogyan tudnám az fprintf-sort úgy "paraméterezni", hogy másik UART protra küldje ki az adatokat.
Magyarul van két nextion kijelző egy PIC-en és néha az egyikre néha a másikra kéne küldeni az adatokat, attól függően melyikről érkezett be adat.
Az fprintf első paramétere a stream (esetedben UART_NEXTION). Ha ide a másik UART streamet adod át akkor oda fog printelni.
Próbáltam, de a UART_NEXTION helyén változót nem fogad el, csak olyan értéket fogad el amit az #use rs232-nél adok meg.
Ha jól értelmezem akkor az első #use rs232 ... sor utáni függvények a B0, B1 lábakat használják, a második #use rs232 ... után a B2, B3-at, függetlenül attól honnan vannak meghívva? A főciklusba, ha beteszek egy putc(c)-t az hova küldi az adatot? Az utolsó #use rs232-t veszi figyelembe? Bááár ... nem tudom ez megoldás-e az én problémámra. A hozzászólás módosítva: Jan 10, 2019
Sajnos csak a kérdést olvastad el, a megoldást nem. Pedig ott van alatta...
Bocsi, lehet én fogalmaztam pontatlanul, vagy valamit nem veszek észre a válaszodban!
Van egy PIC-en két Nextion kijelző. A feladat az lenne, ha az A kijelzőn nyomok egy gombot akkor oda küldje vissza az adatokat, ha a B-n akkor oda. 10-20 adat lenne ablakonként, 15-20 ablak, és nem akarom kétszer leírni szinte ugyan azt a programba, azért lenne jó ha egy paraméter ( Pl a stream, csak az sajna nem működik nekem) átírásával a másik porta küldené ki.
Ha nem lehet a stream nevét átadni paraméterként a fprintf -nek, akkor csak azt tudom elképzelni, hogy a jelenlegi fprintf helyett egy saját függvényt használni, ami változó(k) értéke alapján azt a fprintf -(eke)t hajtja végre, amelyik azt az uart -o(ka)t használja, amelyikre aktuálisan a Nextion(ok) kapcsolódik (kapcsolódnak).
Hogyan tudok egy float változót soros portra kiküldeni úgy, hogy a 4 byte-t küldje ki.
Tehát nem akarom átalakítani szöveggé, úgy szeretném kiküldeni ahogy a memóriában le van tárolva!
készíts a float típusból és egy 4 elemű char tömbből egy u_n_i_o_n -t (ha aláhúzás nélkül írom, a post nem jelenik meg). Írd az értéket a float változóba és küld el a karakter tömb elemeit.
Egy darab pointer kell hozzá, ami a float változódra mutat.
Vagy ahogy előttem írták. float f; char* ptr; ptr = (char*) &f; for (int i=0; i<4; i++) putchar(*ptr++);
Sziasztok!
Szakdolgozatomhoz keresek segítséget PIC témában. A mikrocontroller PIC16F887, a nyelv CCS, PICkit3 programozót használok. Első körben egy általatok ajánlott programcsomagot keresek, ahol tudnám használni a debug funkciót. Sajnos az eddig próbált programokkal ez nem jött össze (PICkit3, PCWHD Compiler 4.104, illetve 5.025, 64bites WIN10 operációs rendszer). Gyakorlatilag azt veszem észre, hogy ugyanazt a forráskódot a két fordító különböző módon értelmezi, hol az egyik funkció működik, hol a másik, attól függ, hogy hol fordítom le. Próbáltam az MPLAB X IDE v5.35-öt is CCS C Compiler Plugin-nel is, de ott már a változók típusába is beleakadt (unsigned int8). Maga a vizsgamunka egy elektromos kapunyitó vezérlő lenne, ami rendelkezik 4x4-es billentyűzettel, RFID olvasóval, 4x20 karakteres I2C-s kijelzővel, RTC modullal. Nagyjából olyan, mint egy kaputelefon, ami olvas RFID kártyát is, alapesetben pedig a pontos időt írja ki a kijelzőre. Az érvényes kártyakódok az RTC modul nemfelejtő memóriájába vannak tárolva, a kapukódokkal, és a később esetleg szükséges egyéb tárolandó információkkal együtt. Timer0 és RDA megszakítások vannak jelenleg az óramodul és az RDM6300-as (RFID) UART modul végett. A részegységek külön-külön működnek, de amint rendszerbe akarom foglalni a részeket, az addig működő funkciók is "elromlanak". Különösen az UART kommunikáció áll gyenge lábakon, az csak az 5.025-ös fordítóval működött egy ideig úgy, ahogy kellene, majd később, ahogy bővült a kód, azzal sem. Tovább nem akarom szaporítani a szót, ki tudna segíteni ebben a témában attól szívesen venném a segítséget. Fontos lenne számomra ez a dolog, sajnos az ismerőseim között nincs senki aki mélyebben benne lenne a témában. Segítségetek előre is köszönöm!
Itt én rengeteg kérdésemre megtaláltam a választ (ha esetleg még nem ismered) .
Fel kéne tenned a forrást, anélkül nehéz bármit is mondani...
SPI adatátvitellel lene egy kis gondom.
64 bit-et kéne kiküldenem, de az #use SPI ( ... bits=32, ... ) beállításoknál max 32 bitet enged beállítani. Mi erre a megoldás?
Sziasztok!
Segítséget szeretnék kérni! Egy PIC16F886A procit használok és van egy 23 bit széles változóm (int i) amit növelni és csökkenteni szerették i++ ill. i-- módszerrel, de D0,D1,D2,D3,D4,D5,D6, ........D23, 0 0 0 0 0 0 0 i++ 0 0 0 0 0 0 1 i++ 0 0 0 0 0 1 0 0 0 0 0 0 1 1 . . 1 1 1 1 1 1 1 hogyan lehetne megoldani? Kezdő vagyok a programozásban, ha lehetne akkor részletesen magyarázzátok el! Előre is köszönöm a segítséget!
Elírtam!
D0,D1,D2,D3,D4,D5,D6, ........D23, 0 0 0 0 0 0 0 0 0 0 i++ 0 0 0 0 0 0 0 0 0 1 i++ 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 . . 1 1 1 1 1 1 1 1 1 1
Hogy hozol létre 23 bites válltozót? Miért nem használsz 32 bitest?
Vagy nem értem mit szeretnél!
Ez egy shift regisztert töltene fel, (ami 23 bit hosszú) és az a gondom, hogy D6-os bit az LSB bit és a D0 bit Az MSB. Hogyha fordítva lenne akkor nem lenne gondom (i++).
Szia, ha nem hw spi-on tolod ki az adatot és nincs más IC, akkor gondolom szoftveresen tolod ki az adatot -> fordítsd meg ott a kiküldés irányát és már mehet is az i++;
Amúgy D0..D23 (ahogy a 2 kérdésedben írtad) => 24bit
Igen szoftveresen küldöm. Ezt még emésztenem kell, mert D7-D23 is vannak adatok és akkor azok is fordulnak.?
Természetesen minden bit megfordul.
A hozzászólás módosítva: Jan 7, 2022
És olyan megoldást nem tudnál, hogy d7-d23 ne változzanak?
Egy másik 8bites változót használni esetleg ami mehet ++-- majd adat kiküldés előtt azt 'összeéseled' & a 24bited alsó bitjeivel ahánnyal szeretnéd. Jobb megoldás most hirtelen nem jut eszembe.
Bocsi, az & nem lesz jó, de bitenként módosíthatod a 24bites tartalmát a 8bites alapján és akkor a többi bit nem változik benne.
Sziasztok!
Nincs valakinek véletlenül HI-TECH PICC telepítője? Esetleg el tudná küldeni vagy fel tenni valahová?
A Microchip archívumban nincs benne?
Basszus én már mindenhol néztem, de nem találtam, erre itt volt az orrom előtt
Köszi!
A program fordításakor az alábbi warning üzenetet kapom:
Idézet: „main.c:371:1: Warning#216 Interrupts disabled during call to prevent re-entrancy: (kepernyo_kiiras_3)” De hogy mi, meg miért, meg hogyan? Mi a teendőm?
Anélkül hogy ismerném a fordítót, gyaníthatóan megszakításban és azon kívül is szerepel a programban a "kepernyo_kiiras_3" nevű makró/funkció/függvény hívása.
A gond akkor keletkezik, amikor meghívod nevezett makrót, a folyamat a közepén tart és egy megszakítás is meg tudja hívni egyazon időben az utasítássort, gyakorlatilag bármikor. Ebbe bele szokott törni a kontroller bicskája, külső szemlélő csak annyit érzékel, hogy lefagy a rendszer, jó esetben újraindul a kontroller. |
Bejelentkezés
Hirdetés |