60 nap alatt Arduino #13 - PWM, analogWrite

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Attila61
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. december 23. szombat, 15:05

Re: 60 nap alatt Arduino #13 - PWM, analogWrite

Hozzászólás Szerző: Attila61 »

sziasztok.
Sajnos kicsit lassan haladok. A 13-as leckénél megakadtam. Tajtilaci által leírt progi elég érthető, de van benne bizonytalanság.
A számláló fut, megcsinálja az összehasonlítást, ha az érték kisebb 127.-él a led világít, ha nagyobb, akkor nem.
bekötöttem az 5v kapcsoló 6-os láb értéket, de nem látni, hogy tenne vmit. akkor sem, ha a led magas értéken van, akkor sem, ha alacsony értéken.
Meghatároztam, hogy a 6-os láb alacsony értéket vegyen fel, de érdemben ez sem változtatott.
Persze, ha a számláló növekedését befolyásolom 1-ről 5 re, akkor talán van némi eredmény de még ez is bizonytalan.


byte pwm=127; //kezdeti jelkitoltes
byte softpwm=0;//belső szamlalo 0rol indul
void setup(){
pinMode(13, OUTPUT);//13láb a kimenet
pinMode(6, INPUT);//6 lab a nyomogomb bemenet
}
void loop(){
softpwm=softpwm+5;//5-el növelem a valtozot
if(softpwm<pwm) {
digitalWrite(13, HIGH);//LED be
} else {
digitalWrite(13, LOW);//LED ki
}
digitalRead(6)==LOW;
if(digitalRead(6) == HIGH) { //nyomogomb nyomva
delay(100); //késleltet 100 msec
}
delay(3);// varakozas ket lepes kozt
}
Örökdiák
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2018. május 30. szerda, 2:33

Re: 60 nap alatt Arduino #13 - PWM, analogWrite

Hozzászólás Szerző: Örökdiák »

Sziasztok!

Hiányos elektrotechnikai ismereteimnek tudom be - s pont ezért vagyok itt - hogy nem értem miért működik az alábbi áramkör.
RGB LED 3V3.PNG
RGB LED működtetése a cél, és működik is. Kódot azért nem mellékelek, mert igazából a kapcsolással van gondom.
3V3 -ról kapja egyetlen 100 Ohmos ellenálláson keresztül a tápot. Pwm vezérlést pedig a 11,10,9 pin-ekről. Nincs azonban GND-re kötve sehol!
A tápot - sajátos módon - a leghosszabb lábon kapja, ami a pozitív pólus, szemben a legtöbb leírás állításával, melyek szerint ezt kellene GND-re kötni.
Mivel a pwm a feszültség időtartamával generál pszeudo analóg jelet - úgy gondoltam nem lenne szabad ilymódon bekötni. Valahol szükség lenne GND-re. Úgy viszont nem működött. Mit nem tudok, vagy mit tudok rosszul?
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: 60 nap alatt Arduino #13 - PWM, analogWrite

Hozzászólás Szerző: vargham »

Egy LED-nek két kivezetése van. Ha áramforráshoz csatlakoztatod, akkor világít. A negatív (katód) megy a GND-re, a pozitív (anód) a tápfeszültségre (VCC). Eddig megvan, ugye?
Az ellenállás akkor kell a LED elé, ha nem áramgenerátorral hajtod. A LED ugyanis olyan, hogy nagyon sok áramot szeretne felvenni, akár annyit is, hogy kiégjen. Ezt korlátozza az ellenállás.
Egy mikrokontrollerről két módon is meghajthatsz egy LED-et. A katódot GND-re kötöd, az anódot pedig (ellenálláson keresztül) a mikrokontroller kimenetére. Ha a kimenetet alacsony szintre állítod, akkor ott föld (GND) lesz, a LED nem világít, mert mindkét lába földön van. Ha a kimenetet magasra állítod, akkor ott megjelenik a tápfeszültség (VCC), a LED pedig világítani fog. Nincs közvetlenül VCC-re kötve, mert azt a mikrokontrolelren keresztül kapja. Ezt hívják pozitív logikának. Sok mikrokontroller rendelkezik aszimmetrikus kimenettel, vagyis több áramot tud nyelni, mint adni. Ezért bevett mód az, hogy a LED anódja megy a VCC-re, a katódja pedig a mikrokontroller kimenetére. Ekkor ha a kimenet magas, akkor a LED nem világít, ha alacsony, akkor viszont igen. Ilyenkor a GND-t "adja" a mikrokontroller.
Egy RGB LED nem más, mint három LED összeépítve. Egy LEDnek két lába van, három LEDnek hat, ebből mégics csak négy jön ki. Ezt két módn lehet elérni, vagy a katódokat kötöd össze (common cathode) és az anódok vannak külön kivezetve, vagy az anódokat kötöd össze (common anode) és a katódok vannak külön kivezetve. Tehát a legtöbb leírás, amit olvastál az közös katódos RGB LED-ről ír, ez pedig egy közös anódos RGB LED. A hosszú lábát kell VCC-re kötni, a többit pedig GND-re.
"Mivel a pwm a feszültség időtartamával generál pszeudo analóg jelet" Ha ezt végig gondolod, akkor rájössz, hogy nagy frekvenciával kapcsolgat GND és VCC között egy kimenetet. Teljesen mindegy, hogy pozitív vagy negatív logikájó eszközt kötsz rá, működni fog. A közös katódos LED az analogWrite 255-re lesz maximális fényerőn, míg a közös anódos analogWrite 0-ra.
Megjegyzés: Ha az Arduino 5 Voltról megy, akkor a LED ne 3.3-ról menjen. Ja, és színenként legyen előtét ellenállás.
Örökdiák
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2018. május 30. szerda, 2:33

Re: 60 nap alatt Arduino #13 - PWM, analogWrite

Hozzászólás Szerző: Örökdiák »

Vargham !

Nagyon szépen köszönöm a részletes választ. Pontosan ezekre az információkra volt szükségem, illetve arra - az egyébként magától értetődő gondolatra - amely nem jutott eszembe, hogy a pwm GND és VCC között alternál. Aha.. :oops:
Átalakítottam az áramkört a leírtaknak megfelelően, és rendben működik is. A 3V3 meghajtásnak az az egyszerű oka van, hogy csak 100 Ohm-os ellenállás volt kéznél, és a LED adatlapja szerint 2-3 V a nyitófeszültség. Ily módon ráadásul kevésbé volt szemet rongáló a látvány is.
Mégegyszer köszönet, a gyors és hasznos válaszért!
sanca21
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2019. január 6. vasárnap, 22:09

Re: 60 nap alatt Arduino #13 - PWM, analogWrite

Hozzászólás Szerző: sanca21 »

Sziasztok!
Nyilván senki sem fog szoftveres PWM vezérlést használni egy DOT mátrix fényerő szabályzásához! Az MPU 99 százalékát használja.

Kód: Egész kijelölése

// Szoftveres PWM vezérlés nyomógombbal HF_2

/* A nyomógomb a digitális 6-os láb és a GND-re van kötve,
   és egy 4,7k÷10k ellenállás a 6-os láb és a +5V-ra. */



	byte GOMBpin = 6;		// nyomógomb a 6-os lábon
	byte pwm=80;			// Kezdeti jelkitöltés 
	byte softpwm=0;			// belső számlaló
	
	void setup() 	{ 
	pinMode(13, OUTPUT);		// A 13-as láb kimenet, LED
	
			}
	void loop() 	{ 
	softpwm++;			// softpwm=softpwm+1
	if (softpwm < pwm) 	{ 
	digitalWrite(13, HIGH);		// LED be
				} 
	else { digitalWrite(13, LOW);	// LED ki 
	     } 
	if (digitalRead(GOMBpin) == LOW) {	// Várakozás 100 ms
	delay (100);				
					 }
	
			}
Válasz küldése