Fórum témák     
 
 » Több friss téma  | 
			Fórum » CCS PIC Compiler     
    
				Szia!  
				
		Köszönöm szépen! Közben sikerült nekem is megfejtenem. Üdv. 
 
				Leírná valaki kicsit szájbarágósan mit is csinál a output_float (pin) függvény 
				
		Nagyjából sejtem ... de egy program kapcsán kicsit elbizonytalanodtam, hogy tényleg jól gondolom-e. Angolul nem tudni, translate google a barátom, de most ez kevés  						
 
				Bemenetnek kapcsolja az adott portot.						 
				
		
 
				Az input(pin) függvény is átállítja bemenetnek, akkor mi szükség van az output_float (pin) függvényre?						 
				
		
 
				az input(pin) függvénynek van visszatérési értéke, míg az output_float (pin) -nek nincs. A különbség az assembly kódban nyilvánul meg. Míg az input (pin) átállítja az adott lábat bemenetnek és lekérdezi annak az állapotát is, addig az output_float csak az irányát változtatja meg.						 
				
		
				Sziasztok! 
				
		Szeretnék egy kis segítséget kérni, 16F630-at programozok éppenséggel, 2 nyomógombot szeretnék RA0 és RA1-re, viszont nem tudom beállítani a megszakítást. Tudom egyesével engedélyezni, de az isr függvénynél már csak RA-ként tudom szerepeltetni, így nem tudom elválasztani, hogy éppen melyik gombot nyomtam le.. Ez így lenne ennél a picnél vagy csak én rontom el? Köszi! Idézet: Nemcsak ennél, hanem a többi mikrovezérlőnél sincs külön kezelve az egyes bemenetek megszakítása. Ahogy az adatlap is írja, "összeVAGY-olják" a változásjelző biteket és lesz belőle egy megszakításjelző bit.„Ez így lenne ennél a picnél vagy csak én rontom el?” A portot úgyis ki kell olvasni a megszakításjelző bit törlése előtt, annak vizsgálatából lehet eldönteni, hogy melyik lábon történt a változás. 
				Most, hogy mondod valóban még sosem próbáltam ugyan azon a porton több megszakítást.. 
				
		Ha nem fárasztalak túl, írnál rá egy rövid példát, hogy program formájában hogy is néz ez ki? Köszi! 
				Én sem használtam még egyidejűleg több változásjelző megszakítást, CCS C-t meg PIC16-ot pláne nem használok...				 
				
		A hozzászólás módosítva: Dec 20, 2015 
						
				Igen én úgy látom, hogy így van. Hogy pontosan melyik lábról jött neked kell eldönteni a PORTA olvasásával.						 
				
		
				Igen értem, csak még azt nem tudom, ha beérkezik a megszakítás az ugyebár csak egy impulzus, szval nem mondhatom a programnak, h: 
				
		if(input(pin_a0)) mert mire lekérdezem, már rég visszaáll alapállapotba.. Legalábbis sztem, de mindjárt kipróbálok ezt azt  						
				A portot csak egyszer olvasd a megszakításban, s a beolvasott értéket tárold el egy változóba. A vizsgálatokban már csak a változó bitjeit nézegesd. Egy nyomógomb állapota nem változik túl gyakran, ráadásul illik "lassítani" rajta hardveres pergésmentesítés céljából.				 
				
				
		A hozzászólás módosítva: Dec 20, 2015 
						
				Benjami, igazad van, a leírásod valóban sokkal egyszerűbb, azt fogom használni! 
				
		Köszi Urak a segítséget!! 
 
				Ezt a sort segítene valaki lefordítani magyarra:  
				
		
 
 
				x a makro paramétere, 
				
		&x a paraméter címe, (int8 *)&x az paraméter címére mutató 8 bites adatot kezeló mutató, ((int8 *)&x+1) az paraméter címe utáni címre mutató 8 bites adatot kezeló mutató, (*((int8 *)&x+1)) az paraméter címe utáni címre mutató 8 bites adatot kezeló mutató által kiválasztott rekesz értéke. Milyen kódot fordít erre a kifejezésre? Feltölti az FSR -t, és inditekt elérésel olvasa ki ?? A hozzászólás módosítva: Dec 25, 2015 
						
 
				24C32 eepromot próbálok kezelni, és a CCS-C drivers-ben találtam rá progit, abban van ez a sor... 
				
		Akkor, ha jól értem: ha x egy 16 bites változó akkor a felső 8 bitel tér vissza? Használható helyette a >>8 vagy a make8 is? (a lefordított kódot nem nézve) 
 
				union -t mindenhová... 
				
		
 
 16 bites elérés: 
 byte -os elérés: 
 A hozzászólás módosítva: Dec 25, 2015 
						
 
				24C32 írtásánál tudok-e egymás után több byte-ot írni az alábbi módon?  
				
		
 vagy minden írásnál külön start ... cím megadás ... 1 byte írása ... stop? Kipróbáltam a fenti megoldás, de sokszor téves adat olvasható vissza. És az olvasásnál mi a helyzet? A hozzászólás módosítva: Dec 28, 2015 
						
 
				A memória 8 byte -os lapokra van osztva, egyszerre maximum 8 byte írható. Azonban egyszerre csak egy lap byte -jai írhatók.  
				
		Ha a kezdőcím osztható 8 -cal, akkor írható maximum 8 byte. Ha az egyszerre írandó byte -k címében a 4. bit megváltozna, akkor a lap elejére írja be azokat az értékeket, amiknál a cím már "átfordult". Pl. ha a 0x04 -től írnál be 8 byte -ot, a 0x04 .. 0x07 byte -ok a helyükre kerülnak, a további 4 byte a 0x00..0x03 címen levő adatokat írná felül. Olvasásnál tetszőlegesen lehet kezdeni és bármennyi adat kiolvasható egyszerre. A hozzászólás módosítva: Dec 28, 2015 
						
 
				PWM kimenet vezérlésével kapcsolatban a CCS-C varázslója ezt a sort generálja  
				
		
 A főprogramba elhelyeztem a következő sort: Működik is a vezérlés, de nem 50Hz-el megy a kimenet ( az MPLAB fordítója is valami olyan üzenetet ad, hogy PWM period: 2,05 ms, Frequency: 488,000 Hz, Resolution: 10,00 bits) Timer2 beállításaira vonatkozólag a programban nincsen semmi. Mit kéne még megadni hogy tényleg a beállított frekvenciával menjen a PWM? 
 
				Az oszcillátorfrekvenciát kell szerintem valahol megadni						 
				
		
 
				az init részben szerepel  
				
		
 
 
				Nincs olyan beállítási kombináció (legalábbis az általam ismert általános típusok esetén), amivel 488Hz alá tudna menni a PWM frekvencia 8MHz oszcillátor mellett.				 
				
		A hozzászólás módosítva: Dec 30, 2015 
						
				szoftveres PWM nem játszik? 8 MHz-es órajel mellet tnem nagyon van más lehetőség. Igaz, ez lefoglal egy Timer-t.						 
				
		
				Főleg fix kitöltési tényezőre minek egyáltalán a pwm  
				
		  Vagy épp miért lényeges az 50Hz? Általában az ember minél magasabb frekvenciára törekszik, hogy utána a szűrés minél jobb legyen. De majd a kérdező ha ismét erre jár, akkor talán választ kapunk. A hozzászólás módosítva: Dec 30, 2015 
						
				Alacsonyabb frekvencia általában jobb hatásfokú, egységnyi idő alatt kevesebb a ki- és bekapcsolás, ami a veszteség javát adja. DC motorokat is jobb alacsonyabb PWM-mel hajtani.						 
				
		
 
				Most kezdtem még csak foglalkozni a PWM-es témával ...  
				
		Próbálgatom a lehetőségeket ... A fix kitöltési tényezőt a varázsló generálta, de a program futásakor én felülírtam. Első nekifutásra 20kHz-et állítottam be ... eredmény az lett, hogy másra már nem nagyon maradt ideje a procinak ... ezért kezdtem el csökkenteni a frekit. Mivel próbaképp egy LED fényerejét változtattam gondoltam az 50Hz is elég mert már ott sem látom a villogást. Szoftveres PWM-el kapcsolatban nem tudom más procinál mi a helyzet, de amit én használok (16F887) annál a hardveres is lefoglal egy timert. 
 
				Igen, nem voltam egyértelmű. Szoftveres PWM esetében azt a Timer-t használod, amelyiket akarod. LED világítás esetén nem baj a 488 Hz, sőt, jobb is, mint az 50 Hz. Az még láthatóan villog.						 
				
		
 
				A PWM hardverből megy, mindegy mekkora a frekvenciája, nem lenne szabad foglalnia a procit. Persze ha van hozzá megszakítási rutin is, amiben valami számításigényes műveletet csinálsz, akkor az el tudja húzni a dolgokat. 
				
		50Hz azért eléggé érezhető villogást csinál, bár első körben éppenséggel megfelelt volna. A 488Hz viszont már jó lesz, bár én inkább 1kHz körül csinálnám a LED meghajtást.  | 
			Bejelentkezés     
    Hirdetés      | 
			




						
						
 




