  | 
		 
			
			
			
			
			
	
		
			
  
 | 
	 		
	  			
	  				| 
						  Elektronika.lt portalo forumas 
						
						Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
						Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose. 
						 
						Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
						kurie nesilaiko forumo taisyklių.
						Pastebėjus nusižengimus, prašome pranešti. 
						 Dabar yra 2025 11 04, 15:04. Visos datos yra GMT + 2 valandos.
						
					 | 
				 
			 
 | 
		 | 
	 
 
	
		
	  | 
	
		
			 Forumas » Mikrovaldikliai » Atmega8 kodas
		
	 | 
 
	
		
		
			
				Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume 
			 | 
			
				
			 | 
			 
		 
		
	 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 14:31 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				Sveiki. Pagal šį kodą LED turėtų užsidegt, kai mygtukas paspaustas. Tačiau ji užsidega, kai mygtukas atleistas ir užgesta, kai paspaustas. Kodėl?
 
Kai mygtukas paspaustas PIND & (1 << PD0) = 00000001 & 00000001 = 00000001 if sąlyga tenkinama, taigi turėtų užsidegti.
 
Kai mygtukas nepaspaustas PIND & (1 << PD0) = 00000000 & 00000001 = 00000000. Turėtų būti vykdoma else. 
 
 
 
	  | Kodas: | 
	 
	
	  # include <avr/io.h>
 
 
int main(void){
 
   
 
   DDRB = 0xff;
 
   DDRD = 0;
 
   
 
   while(1){
 
   
 
      if (PIND & (1 << PD0))
 
         PORTB = 0xff;
 
      else
 
         PORTB = 0;
 
   }
 
} | 
	 
 
 
http://www.part.lt/img/246b7493f09744d160475fe22c805d15253.bmp | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Re: Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 15:36 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				
 
	  | Karolokas rašo: | 
	 
	
	  Kai mygtukas paspaustas PIND & (1 << PD0) = 00000001 & 00000001 = 00000001 if sąlyga tenkinama...
 
 | 
	 
 
 
Ne. kai mygtukas nuspaustas, porto iejime "0" :
 
PIND & (1 << PD0) = 00000000 & 00000001 = 00000000 | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 16:12 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				| O dar klausimas: kodėl, kai tik įjungiu sistemą (pradedu simuliuot per Proteus 7), mano LED iš karto nedega, kai mygtukas dar tebebūna atleistas? Bandžiau kodą visaip modifikuot. Niekas nesikeičia. | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 16:19 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				| Tai programos pradžioje parašyk kad led turi degti, o poto jau tegul klauso mygtuko. | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 16:26 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				| Prieš while parašiau _delay_ms(200);, plaeidau. LED sumirksėjo, o kai programa įėjo į ciklą  LED užgesęs, nors mygtukas atviras. | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 17:15 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				| Dar reikia nustatyti kad PD0 portas būtų įėjimas. | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 17:23 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				| Parašydamas DDRD nustatai visą registrą į 00000000. Taigi atsikrai to daryti nebereikia. | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 17:38 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				
 
	  | Karolokas rašo: | 
	 
	
	  | Parašydamas DDRD nustatai visą registrą į 00000000. Taigi atsikrai to daryti nebereikia. | 
	 
 
 
 
Negalima portų įėjimus palikti neapibrėžtoje būsenoje. Tam ir yra naudojami pul-up rezistoriai (vidiniai arba isoriniai). Pul-up rezistorius, kai mygtukas yra nenuspaustas, į įėjimą paduoda "1".
 
 
Tavo atveju:
 
DDRD = 0; //visi iejimai
 
PORTD=1; //visiems ijungiame vidinius pul-up | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 18:38 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				
 
	  | Ingo rašo: | 
	 
	
	  
 
	  | Karolokas rašo: | 
	 
	
	  | Parašydamas DDRD nustatai visą registrą į 00000000. Taigi atsikrai to daryti nebereikia. | 
	 
 
 
 
Negalima portų įėjimus palikti neapibrėžtoje būsenoje. Tam ir yra naudojami pul-up rezistoriai (vidiniai arba isoriniai). Pul-up rezistorius, kai mygtukas yra nenuspaustas, į įėjimą paduoda "1".
 
 
Tavo atveju:
 
DDRD = 0; //visi iejimai
 
PORTD=1; //visiems ijungiame vidinius pul-up | 
	 
 
 
 
Komentaras šiek tiek neteisingas. Turėtų būti taip:
 
 
PORTD=1; // pull up įjungiamas tik PD0 linijai | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 22:15 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				Tuo atveju turėtų būti
 
 
	  | Kodas: | 
	 
	
	  DDRD = 0;
 
PORTD = 0xff;
 
 | 
	 
 
 | 
			 
		  | 
	 
	
		
		
		
			
  Paskutinį kartą redagavo Karolokas, 2014 01 10, 22:23. Redaguota 1 kartą | 
		 
		  | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 10, 22:17 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				Truputį ne į temą:
 
Kuo skiriasi aprašymas (1 << PDX) nuo (1 << DDYX), kur X PIN'as, o Y PORT'as? | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
	  | 
	 Atmega8 kodas | 
 
  
	
	
		 Parašytas: 2014 01 11, 00:10 | 
		        | 
	   | 
 
	
	
	
		| 
		
		 | 
		
			
			
				dazniausiai niekuom, nes PDX realiai = X, DDYX irgi = X, kur X [0..7]
 
 
na nebent tuom, kad PDX D visgi porto vardas
 
 
tas atseit skirtumas atkeliavo nuo 8051 seimos, kuriame porto bitai adresuojami po viena atskirose bitu apdorojimo komandose. | 
			 
		  | 
	 
	
		| 
		 | 
	 
	  | 
 
 
 | 
 
 
		 | 
		
			
				
					  | 
					 Google paieška forume | 
				 
				
					| 
 | 
				 
			 
			
				
					  | 
					 Naujos temos forume | 
				 
				
					 | 
				 
			  
	
		  | 
	    
	    	FS25 Tractors 
	    	Farming Simulator 25 Mods,
	    	FS25 Maps,
			FS25 Trucks | 
	 
	
		  | 
	    
	    	ETS2 Mods 
	    	ETS2 Trucks,
			ETS2 Bus,
			Euro Truck Simulator 2 Mods
			 | 
	 
	
		  | 
	        
	    	FS22 Tractors 
	    	Farming Simulator 22 Mods,
	    	FS22 Maps,
		FS25 Mods | 
	 
	
	  | 
	    
	    	VAT calculator 
	    	VAT number check,
	    	What is VAT,
	    	How much is VAT | 
	 
	
	  | 
	    
	    	Dantų protezavimas 
	    	All on 4 implantai, 
		Endodontija mikroskopu, 
		Dantų implantacija | 
	 
	
	  | 
	    
	    	FS25 Mods 
	    	FS25 Maps,
		FS25 Cheats,
		FS25 Install Mods | 
	 
	
	  | 
	    
	    	FS25 Mods 
	    	Farming Simulator 25 Mods, 
	    	FS25 Maps | 
	 
	
	  | 
	    
	    	ATS Trailers 
	    	American Truck Simulator Mods,
		ATS Trucks,
		ATS Maps | 
	 
 
 
		 | 
	 
 
			
			 
 
 
  | 
		  |