|
|
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 2024 11 30, 01:48. 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 |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
|
|