 |

|
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 10 11, 22:37. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » Padekit su C
|
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
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
 |
 |
 |
Padekit su C |
Parašytas: 2010 04 17, 08:11 |
|
|
|
Noriu pasirasyti programele su atmega8 kad tarkim paspaudus migtuka1 dijodai usidektu nuo PORTD-0 iki PORTD-7, mygtukai pajunkti PORTB-0 ir PORTB-1 per GND.
Stai mano kodas;
#define F_CPU 100000
#include <avr/io.h>
#include <util/delay.h>
/*LED PORTB7*/
#define B0 0x01
#define B1 0x02
#define B2 0x04
#define B3 0x08
#define B4 0x10
#define B5 0x20
#define B6 0x40
#define B7 0x80
#define D 800 /* ms */
int main (void)
{
DDRD =255; /* Nustatome PORTB kaip isejima */
PORTB=1; /* Ijungiame PB vidinius poll-up rezistorius*/
unsigned char a=0;
while (1) {
if (!(PINB&1))/* Tikriname ar paspaustas mygtukas. zenkliukas &
reiskia lygine IR operacija, o ! reiskia logine inversija*/
{
if (a==0)a=1;
else a=0; /* Tikriname, ar pries tai buvo paspaustas
mygtukas ir ijungti diodai, jei taip, tai juos isjungsime*/
while(!(PINB&)){} /* Cia paprasta priemone nuo trumpu impulsu,
atsirandanciu paspaudus mygtuka*/
}
PORTD = 0;
_delay_ms(D);
PORTD = B0;
_delay_ms(D);
PORTD = B0 | B1;
_delay_ms(D);
PORTD = B0 | B1 | B2;
_delay_ms(D);
PORTD = B0 | B1 | B2 | B3;
_delay_ms(D);
PORTD = B0 | B1 | B2 | B3 | B4;
_delay_ms(D);
PORTD = B0 | B1 | B2 | B3 | B4 | B5;
_delay_ms(D);
PORTD = B0 | B1 | B2 | B3 | B4 | B5 | B6;
_delay_ms(D);
PORTD = B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7;
_delay_ms(D);
if (a==1)
PORTD=255;
else PORTD=0;
}
return 0;
}
Dabar nuolatos laksto diodai nuo 0 iki 7 porto ir nuspaudus mygtuka PB0 sustoja ciklas.
Padekit kas galit, aciu is anksto.[/code] |
|
|
|
|
 |
 |
Padekit su C |
Parašytas: 2010 04 17, 12:35 |
|
|
|
Tiksliau parasyk ka turi vykdyti mygtukai? Ta prasme is pradziu nemirgsi o paspaudus migtuka ijungiamas mirgsejimas? |
|
_________________ Aš pažeidžiau forumo taisykles ir reklamavau paraše. ...Bet uz reklama tai susimokejau  |
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 12:58 |
|
|
|
Tarkim paspaudus mygtuka PB0 diodai ijungiami paeiliu visi tarkim nui PD0 iki PD7 poto uzlaikymas pora minuciu ir usgesta paeiliui nuo PD0 iki PD7, o paspaudus mygtuka PB1 ijungiami diodai nuo PD7 iki PD0 uzlaikymas pora minuciu ir uzgesta analogiskai. Cia ideja laiptu apsvietimas kiekvienai pakopai su ledais tik vietoi migtuku butu kokie irda davikliai ar panasiai. |
|
|
|
|
 |
 |
Padekit su C |
Parašytas: 2010 04 17, 13:23 |
|
|
|
PeetTong rašo: |
Tarkim paspaudus mygtuka PB0 diodai ijungiami paeiliu visi tarkim nui PD0 iki PD7 poto uzlaikymas pora minuciu ir usgesta paeiliui nuo PD0 iki PD7, o paspaudus mygtuka PB1 ijungiami diodai nuo PD7 iki PD0 uzlaikymas pora minuciu ir uzgesta analogiskai. Cia ideja laiptu apsvietimas kiekvienai pakopai su ledais tik vietoi migtuku butu kokie irda davikliai ar panasiai. |
Programa visiškai neatitnka norų. Dabar visą laiką junginėjami diodai, nesvarbu kokioj busenoj a.
Junginejimas turetu vykti tik tada, kai a==1.
Kodas turėtų būti panašus į mano paraštą:
Kodas: |
while(1)
{
if (a==1)
{
//jungineja i viena puse
}
if (b==1)
{
//jungineja i kita puse
}
} |
|
|
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 13:24 |
|
|
|
LAbai jau primityviai viskas parasyta, net sunku suprast...
Kas cia while(!(PINB&)){} ?
Ir cia if (a==1)
PORTD=255;
else PORTD=0; |
|
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 15:03 |
|
|
|
Sutinku kad primityviai, nemoksiskai ir visaip kaip kitaip parasyta.
Tiesiog mokausi programuoti ir tai viena is pirmu mano programu.
Kas cia while(!(PINB&)){} ?
Ir cia if (a==1)
Tikrai nezinau, manau koks dvigubas patikrinimas ar tikrai nuspaustas mygtukas, si fragmentapaimiau is elektronikos puslapio.
Dekui Dovydas uz uzvedima ant takelio, taip ir iki kelio po truputuka prieisiu  |
|
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 15:13 |
|
|
|
Beja kaip teisingai priskirti prie PORTB0 kintamaji a? |
|
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 15:46 |
|
|
|
while(!(PINB&)){}
sio atvej upadaryta tam kad kol mygtuko neatleisi tolimesnes programos nevukdytu
sita funkcija reikia deti pries mygtuko paspaudima o ne po. aeba kitaip sakant prie ta funkcija turi buti siok toks uzdelsima per kuri spetu mygtuko padetis nusustoveti |
|
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 15:50 |
|
|
|
Kodas: |
if (!(PINB & (1<<PB0)))
a=1;
if (!(PINB & (1<<PB1)))
a=0
|
|
|
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 17:20 |
|
|
|
sneikaz rašo: |
Kodas: |
if (!(PINB & (1<<PB0)))
a=1;
if (!(PINB & (1<<PB1)))
a=0
|
|
Sneikai kaip suprasti sitas eilutes? Cia PB0=1 o PB=0 tai gaunasi vienas mygtukas ijungia kitas isjungia? Prasyciau issamiau. Aciu.  |
|
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 17, 18:00 |
|
|
|
Zmogau ziuriu neskiri porto nuo pino...
Jei nuspausta knopke, prijungta prie pinb0 a=1, jei prie pinb1 a=0. |
|
|
|
|
 |
 |
Padekit su C |
Parašytas: 2010 04 17, 19:17 |
|
|
|
Tai cia nereikia kad nuolatos mirgsetu, tiesiog paspaudus pirma knopke diodai uzsidegtu nuo 0 iki 7, biski padegtu ir uzgestu nuo 0 iki 7? O su antra knopke atvirksciai?
Kodas: |
DDRB=0b00000000;
PORTB=0b00000011;
DDRD=0b11111111;
PORTD=0b00000000;
while(1){
if(!(PINB&1))////////jei pirma knopke paspausta pradeda jungineti diodus
{while(!(PINB&1)){}
PORTD=0b00000001;
_delay_ms(D);
PORTD=0b00000011;
_delay_ms(D);
PORTD=0b00000111;
_delay_ms(D);
PORTD=0b00001111;
_delay_ms(D);
PORTD=0b00011111;
_delay_ms(D);
PORTD=0b00111111;
_delay_ms(D);
PORTD=0b01111111;
_delay_ms(D);
PORTD=0b11111111;
_delay_ms(D); //visi diodai uzsidege
PORTD=0b00000000; //visi diodai isjungiami
}
}//while pabaiga
|
su antra knopke reiktu i koda irasyti kito mygtuko tikrinima |
|
_________________ Aš pažeidžiau forumo taisykles ir reklamavau paraše. ...Bet uz reklama tai susimokejau  |
|
|
|
 |
 |
Padekit su C |
Parašytas: 2010 04 18, 07:53 |
|
|
|
didshirshis rašo: |
Tai cia nereikia kad nuolatos mirgsetu, tiesiog paspaudus pirma knopke diodai uzsidegtu nuo 0 iki 7, biski padegtu ir uzgestu nuo 0 iki 7? O su antra knopke atvirksciai?
Kodas: |
DDRB=0b00000000;
PORTB=0b00000011;
DDRD=0b11111111;
PORTD=0b00000000;
while(1){
if(!(PINB&1))////////jei pirma knopke paspausta pradeda jungineti diodus
{while(!(PINB&1)){}
PORTD=0b00000001;
_delay_ms(D);
PORTD=0b00000011;
_delay_ms(D);
PORTD=0b00000111;
_delay_ms(D);
PORTD=0b00001111;
_delay_ms(D);
PORTD=0b00011111;
_delay_ms(D);
PORTD=0b00111111;
_delay_ms(D);
PORTD=0b01111111;
_delay_ms(D);
PORTD=0b11111111;
_delay_ms(D); //visi diodai uzsidege
PORTD=0b00000000; //visi diodai isjungiami
}
}//while pabaiga
|
su antra knopke reiktu i koda irasyti kito mygtuko tikrinima |
Labai didelis dekui. Iskarto supratau kas kaip, ir butent tai ko man reikia.
Noriu paklausti koks maksimalus laikas gali buti su delay(ms) funkija?
Realiai gaunasi maksimum apie sekunde man reiktu apie 10s padaryti. Gal galima daryti _delay_s(10) ar panasiai. |
|
|
|
|
 |
 |
Padekit su C |
Parašytas: 2010 04 18, 10:21 |
|
|
|
Niekada nenaudojau delay funkciju nes nesamones gaudavosi kazkodel.. Diodu mirgsinimo temoje yra funkcijos "velinam" aprasymas va ta ir naudodavau kai reikedavo uzlaikymo  |
|
_________________ Aš pažeidžiau forumo taisykles ir reklamavau paraše. ...Bet uz reklama tai susimokejau  |
|
|
|
 |
Padekit su C |
Parašytas: 2010 04 18, 11:00 |
|
|
|
Bet man su ta funkcija "velinam" gavosi irgi permazai laiko uslaikyme. Gal galima kaskaip padidinti kintamojo i reiksme;
for(i=0; i<65535; i++)
pav.; for(i=0; i<65535; i++10) |
|
|
|
|
|
 |
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 |
|

|
 |