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      | 
			












