Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   117 / 118
(#) Lamprologus hozzászólása Jan 10, 2019 /
 
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.

  1. #pin_select U1TX=PIN_D1
  2. #pin_select U1RX=PIN_D2
  3. #use rs232(UART1, baud=115200, RECEIVE_BUFFER=0, TRANSMIT_BUFFER=0, stream=UART_NEXTION)
  4. ...
  5. fprintf(UART_NEXTION,"t10.txt=\"%s\"%c%c%c",Uzem[Erzekelo_hiba],0xFF, 0xFF, 0xFF);
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
(#) Lucifer válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
Az fprintf első paramétere a stream (esetedben UART_NEXTION). Ha ide a másik UART streamet adod át akkor oda fog printelni.
(#) Lamprologus válasza Lucifer hozzászólására (») Jan 10, 2019 /
 
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.
(#) Lamprologus válasza Hp41C hozzászólására (») Jan 10, 2019 /
 
  1. #USE RS232 (BAUD = 9600, XMIT = PIN_B0, RCV = PIN_B1)
  2.  
  3. void put_to_a(char c) {
  4.    put(c);
  5. }
  6.  
  7. char get_from_a(void) {
  8.    return(getc());
  9. }
  10.  
  11. #USE RS232 (BAUD = 9600, XMIT = PIN_B2, RCV = PIN_B3)
  12.  
  13. void put_to_b(char b) {
  14.    putc(c);
  15. }
  16.  
  17. void main(void) {
  18.    char c;
  19.    
  20.    put_to_a("Online\n\r");
  21.    put_to_b("Online\n\r");
  22.    
  23.    while(TRUE) {
  24.       c = get_from_a();
  25.      
  26.       put_to_b(c);
  27.       put_to_a(c);
  28.    }
  29. }


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
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
Sajnos csak a kérdést olvastad el, a megoldást nem. Pedig ott van alatta...
  1. #USE RS232 (BAUD = 9600, XMIT = PIN_B0, RCV = PIN_B1, STREAM = COM_A)
  2. #USE RS232 (BAUD = 9600, XMIT = PIN_B2, RCV = PIN_B3, STREAM = COM_B)
  3.  
  4. void main(void) {
  5.    char c;
  6.    
  7.    fprintf(COM_A, "Online\n\r");
  8.    fprintf(COM_B, "Online\n\r");
  9.    
  10.    while(TRUE) {
  11.       c = fgetc(COM_A);
  12.      
  13.       fputc(c, COM_A);
  14.       fputc(c, COM_B);
  15.    }
  16. }
(#) Lamprologus válasza Hp41C hozzászólására (») Jan 10, 2019 /
 
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.
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
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).
(#) Lamprologus hozzászólása Feb 13, 2020 /
 
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!
(#) Hp41C válasza Lamprologus hozzászólására (») Feb 13, 2020 / 1
 
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.
(#) superuser válasza Lamprologus hozzászólására (») Feb 14, 2020 / 1
 
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++);
(#) LP-1985 hozzászólása Márc 12, 2020 /
 
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!
(#) Lamprologus válasza LP-1985 hozzászólására (») Márc 13, 2020 /
 
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...
(#) Lamprologus hozzászólása Feb 16, 2021 /
 
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?
(#) Bjanos hozzászólása Jan 7, 2022 /
 
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!
(#) Bjanos hozzászólása Jan 7, 2022 /
 
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
(#) Lamprologus válasza Bjanos hozzászólására (») Jan 7, 2022 /
 
Hogy hozol létre 23 bites válltozót? Miért nem használsz 32 bitest?

  1. int32 i;
  2. i=i++;
  3. // vagy
  4. i=i--;


Vagy nem értem mit szeretnél!
(#) Bjanos válasza Lamprologus hozzászólására (») Jan 7, 2022 /
 
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++).
(#) tompower válasza Bjanos hozzászólására (») Jan 7, 2022 /
 
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
(#) Bjanos válasza tompower hozzászólására (») Jan 7, 2022 /
 
Igen szoftveresen küldöm. Ezt még emésztenem kell, mert D7-D23 is vannak adatok és akkor azok is fordulnak.?
(#) tompower válasza Bjanos hozzászólására (») Jan 7, 2022 /
 
Természetesen minden bit megfordul.
A hozzászólás módosítva: Jan 7, 2022
(#) Bjanos válasza tompower hozzászólására (») Jan 7, 2022 /
 
És olyan megoldást nem tudnál, hogy d7-d23 ne változzanak?
(#) tompower válasza Bjanos hozzászólására (») Jan 7, 2022 /
 
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.
(#) tompower válasza tompower hozzászólására (») Jan 7, 2022 /
 
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.
(#) Bjanos válasza tompower hozzászólására (») Jan 10, 2022 /
 
Köszönöm a segítségedet!
(#) roland9 hozzászólása Szept 4, 2023 /
 
Sziasztok!

Nincs valakinek véletlenül HI-TECH PICC telepítője?
Esetleg el tudná küldeni vagy fel tenni valahová?
(#) icserny válasza roland9 hozzászólására (») Szept 5, 2023 / 1
 
A Microchip archívumban nincs benne?
(#) roland9 válasza icserny hozzászólására (») Szept 5, 2023 /
 
Basszus én már mindenhol néztem, de nem találtam, erre itt volt az orrom előtt

Köszi!
(#) Lamprologus hozzászólása Jan 31, 2024 /
 
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?
(#) Bakman válasza Lamprologus hozzászólására (») Jan 31, 2024 /
 
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.
Következő: »»   117 / 118
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