www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Začetniški problem v C-ju pri AVR-ju
Pojdi na stran Prejšnja  1, 2, 3, 4, 5, 6 ... 27, 28, 29  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
mirkatmir
Član
Član



Pridružen-a: Pet 25 Jul 2003 9:14
Prispevkov: 1876
Aktiv.: 8.45
Kraj: Ribnica (JN75IR)

PrispevekObjavljeno: Pet Maj 23, 2008 12:31 pm    Naslov sporočila:   Odgovori s citatom

lojzek je napisal/a:

Sedaj me pa kot prvo zanima, kako dobim na tipkovnici tisto navpično črtico za ukazom PORTA (za katero domnevam, da vpiše 1 na željeno mesto - kot tudi domnevam, da & napiše 0)?
Branko


ALT Gr + W

_________________
lp, Miran (Miro - S51SK)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dragoon
Član
Član



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.20
Kraj: Trojane

PrispevekObjavljeno: Pet Maj 23, 2008 12:33 pm    Naslov sporočila:   Odgovori s citatom

S tisto kodo ki jo čarovnik da nqa začetek ni nič narobe, zato jo komot uporabljaš. Svoj program pač pišeš naprej dol na koncu, v main, while(1).


Črto | dobiš z altgr+w. Pomeni pa OR nad biti spremenljivke. dve črti || bi pomenile logični OR nad dvema pogojema, v if stavku naprimer.
Z if stavkom lahko "potipaš vhod".

Koda:

              if( pogoj || nekdrug pogoj   && nek drug pogoj )
                  {
                       //če je rezultat vseh pogojev ^^ 1 se bo izvedla koda med {}
                   }

              else
                  {
                    //če je retultat pogojev 0, se izvede blok else
                   }




~ pomeni bitno negacijo, obrne vse bite v variabli.

_________________
LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
sebaveh
Član
Član



Pridružen-a: Sob 19 Jan 2008 13:51
Prispevkov: 1614
Aktiv.: 8.19
Kraj: Slovenska Bistrica

PrispevekObjavljeno: Pet Maj 23, 2008 3:45 pm    Naslov sporočila:   Odgovori s citatom

lojzek je napisal/a:
Sedaj me pa kot prvo zanima, kako dobim na tipkovnici tisto navpično črtico za ukazom PORTA (za katero domnevam, da vpiše 1 na željeno mesto - kot tudi domnevam, da & napiše 0)?


Stisni tipki "AltGr" in "w"

Citiram:
Kaj pomeni tisti znakec ~ ?


Negacija, logični NOT. Vse enke spremeni v ničle in vse ničle spremeni v enke.

Citiram:
Kot drugo, bi pa rad vedel, kako naj naredim, da se bo tale programček izvajal samo takrat, ko držim pritisnjeno tipko- logično 1, npr na PORTD, pin PD4? Se pravi s katerim ukazom "potipam" željeni vhod in potem dovolim izvajanje programčka?


Misliš raje logično 0 ? Tipke so ponavadi vezane na maso, tako da ko jih stisneš, potegnejo pin na maso.

Lahko uporabiš naprimer IF stavek, v katerega bo program vstopil dokler bo tipka pritisnjena:

Koda:
while(1)
   {
     if (PIND.4 == 0)
         {
           // ta del programa med zavitima oklepajema so bo izvajal, če bo izpolnjen pogoj zgoraj
           // z masko postavi PA1 na 1
           PORTA |= 0x02;

           // počakaj pol sekunde
            delay_ms(1000);

             // z masko postavi PA1 na 0
             PORTA &= ~0x02;

            // počakaj pol sekunde
            delay_ms(500);
            }
   }



Citiram:
Je res, da sem že gledal Help od Codevisiona, ampak rezultati tega so bolj kilavi.


Vem, sem imel enak problem. CV pač predpostavi da uporabnik že pozna programski jezik C. V Helpu pa so dodani le ukazi in stvari, specifični za mikrokontrolerje.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dragoon
Član
Član



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.20
Kraj: Trojane

PrispevekObjavljeno: Pet Maj 23, 2008 4:05 pm    Naslov sporočila:   Odgovori s citatom

@sebaveh: A sem jaz napisal tok nerazumljivo, da treba ponavljat moj post?




nekaj stvari o c-ju je tukaj. Na FEju se učimo šarm, ampak c je isti. Funkcije v codevisionu imajo drugačna imena, zato beri samo snov okoli jezika. Tutorialov za c je poln gugl.

_________________
LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
sebaveh
Član
Član



Pridružen-a: Sob 19 Jan 2008 13:51
Prispevkov: 1614
Aktiv.: 8.19
Kraj: Slovenska Bistrica

PrispevekObjavljeno: Pet Maj 23, 2008 9:23 pm    Naslov sporočila:   Odgovori s citatom

Ne, vsekakor nisem pisal zato ker bi bilo nerazumljivo. Ampak zato, ker smo očitno vsi pisli ob istem času. Jaz sem začel pisati, ko še ni dobil nobenega odgovora. Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Sob Maj 24, 2008 12:43 pm    Naslov sporočila:   Odgovori s citatom

Hvala za odgovore, pa prosim brez prepirov Smile Pomagal mi je vsak po svoje in če je ena in ista stvar napisana na 5 načinov, jo je mogoče lažje zastopiti.

Je pa res, da C-ja ne poznam in glede na večje število verzij se tudi sintaksa razlikuje. Problem je v tem, da še nikjer nisem zasledil nekega seznama ukazov in kratkega opisa s točno sintakso, kaj ta ukaz dela (se še kdo spomni priročnika od Commodoreja). Vseeno pa nisem toliko trapast, da stvari nebi zastopil. Če sem se sam naučil in potem tudi dobro znal uporabljati Comodorjev in Spectrumov Basic, asembler za 6510 in 8502, dokaj dobro tudi Pascal, mislim, da mi bo podobno uspelo tudi pri C-ju.

Največji problem je nepoznavanje sintakse, ki jo uporablja Codevision. Vse ostalo se že doseže s poizkušanjem, če vidiš kak primer. Res pa je, da je včasih lažje koga vprašat. Včasih te možnosti nisem imel.

PS tisti alt+W: Na moji tastaturi je bila narisana črta prekinjeno Rolling Eyes

PPS najbolj je v IF stavku pomagal sebaveh (saj pravim, sintaksa). je pa vseeno res, da bom to lahko preizkusil šele v ponedeljek. Tisto povezavo o Cju- dragoon- bom pa takoj pregledal.


Branko
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dragoon
Član
Član



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.20
Kraj: Trojane

PrispevekObjavljeno: Sob Maj 24, 2008 3:44 pm    Naslov sporočila:   Odgovori s citatom

lojzek je napisal/a:

Je pa res, da C-ja ne poznam in glede na večje število verzij se tudi sintaksa razlikuje. Problem je v tem, da še nikjer nisem zasledil nekega seznama ukazov in kratkega opisa s točno sintakso, kaj ta ukaz dela (se še kdo spomni priročnika od Commodoreja). ........

Največji problem je nepoznavanje sintakse, ki jo uporablja Codevision. Vse ostalo se že doseže s poizkušanjem, če vidiš kak primer. Res pa je, da je včasih lažje koga vprašat. Včasih te možnosti nisem imel.

PS tisti alt+W: Na moji tastaturi je bila narisana črta prekinjeno Rolling Eyes




Vse verzije C so bolj kot ne iste. Codevision verjetno uporablja ANSI C, torej je kompitabilen z vsakim tutorialom. Če že znaš toliko programskih jezikov, potem verjetno ni problem razumevanje ukazov (if, while, for....), obliko ukazov pa najlažje najdeš z guglom: npr niz " C if statement syntax" .
C ki ga uporablja CV, je drugačen samo pri stvareh, ki so specifične za AVRje, torej imena registrov (PORTA, PINA, PINA.5,...), kar pa najlažje vidiš, če na začetku uporabljaš code wizard.
Prej sem malo brskal, na WIKIPEDIi je zbran opis ukazov. išči pod "WIKI C".

Res pa je najlažje začet z gledanjem primerov, po možnosti dobro komentiranim, zato kar sprašuj Wink

tista črta je na vseh tipkovnicah narisana tako, ne vem s kakšnim namenom Smile

PS: ne gre za kreganje, samo zanima me če pišem tako da me noben ne razume Confused , pa pisala sva 3 ure narazen.

_________________
LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Tor Maj 27, 2008 11:54 am    Naslov sporočila:   Odgovori s citatom

Uporabljam Attiny2313. Napisal (prepisal) sem tole kodo:
Koda:
while (1)
      {
      // Place your code here
      unsigned char test;
      test = PIND.0;
 #if (test == 1);
 {
 lcd_clear();
 lcd_putsf("prva vrsta");
 delay_ms(1000);
 }
 #else;
 {
 lcd_gotoxy(2,1);
 lcd_putsf("druga vrsta");
 delay_ms(1000);
  }   
 #endif
};


Kot se vidi, bi rad, da mi takrat ko imam pritisnjeno tipko na portd.0, dela polovica kode, ko tipke ni pritisnjene, dela druga polovica kode.

Pri prevajanju mi Codevision zacvili o napačni vrsti spremenljivke v vrstici IF (undefined symbol test) in pravi, da vrednost predpostavlja kot 0. Se pravi, vedno izvaja drugo polovico kode, ne glede na tipko.

Če napišem if stavek brez #, pa mi v vsakem primeru izvede obe polovici kode. Pa takrat sta napačna ukaza else in endif. Ju noče prepoznati.

Kako pravilno definiram spremenljivko in napišem ukaz IF?

Pa še to: Kako lahko vrednost spremenljivke "test" izpišem na ekran? Po možnosti obe varianti- samo en pin ali pa celoten port. v kateremkoli zapisu (dec, hex, bin)- samo da vidim, kaj uC vidi na vhodu. Po internetu sem našel, da se uporablja sprintf, ki pa ga CV ne spozna?


LP Branko
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sebaveh
Član
Član



Pridružen-a: Sob 19 Jan 2008 13:51
Prispevkov: 1614
Aktiv.: 8.19
Kraj: Slovenska Bistrica

PrispevekObjavljeno: Tor Maj 27, 2008 1:09 pm    Naslov sporočila:   Odgovori s citatom

lojzek je napisal/a:
Uporabljam Attiny2313. Napisal (prepisal) sem tole kodo:
while (1)
{
// Place your code here
unsigned char test;
test = PIND.0;
#if (test == 1);
{
lcd_clear();
lcd_putsf("prva vrsta");
delay_ms(1000);
}
#else;
{
lcd_gotoxy(2,1);
lcd_putsf("druga vrsta");
delay_ms(1000);
}
#endif
};




Spremenljivko test daj ven iz while zanke. Dovolj bo, če jo postaviš na začetek main funkcije, kjer imaš definirane lokalne spremenljivke.

Na koncu if in else stavkov izbriši podpičja. CodeVision ne potrebuje ukaza endif, vsaj kolikor sem jaz delal s preprostimi if stavki. Po potrebi izbriši še #.

CodeVision ima eno uporabno stvar, to so vzorci kode "code templates". Najdeš jih na levi strani zaslona, kjer je drugače drevesni pogled datotek, ki jih imaš v trenutnem projektu. Tam vidiš zavihke "navigator", "code templates", "clipboard". Izberi vzorce kode in jih potegni v programsko okno.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Tor Maj 27, 2008 1:40 pm    Naslov sporočila:   Odgovori s citatom

Hvala za nasvete, bom poskusil.

Sem pa medtem ugotovil, zakaj ne dela sprintf ukaz. Vključiti je potrebno knjižnico stdio.h. Ta pa zavzame 1. preveč pomnilnika v attiniyu, 2. nastane predolga koda za Codevision evaluation verzija (več kot 2k). samega programčka pa je cca 8 vrstic Shocked
Bom očitno moral prebasati na Winavr, ker se mi za moje hece ne splača dati 150$ za taresno verzijo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Sre Maj 28, 2008 11:54 am    Naslov sporočila:   Odgovori s citatom

@sebaveh:

IF stavek sem preizkusil in mi sedaj deluje. Prav tako sem se malce igral z logičnimi operacijami na vhodnih in izhodnih pinih. In mi tudi kar nekako uspeva. Hvala lepa
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dragoon
Član
Član



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.20
Kraj: Trojane

PrispevekObjavljeno: Sre Maj 28, 2008 12:23 pm    Naslov sporočila:   Odgovori s citatom

Od kje ti ideja da winavr dela manjšo kodo? Za sprintf poglej malo po nastavitvah, nekje se da nastavit s kako natančnostjo naj dela. Ti rabiš samo 8 bitov, brez floatoing pointa,... S sprintf njaprej shraniš string nekam v ram, potem pa ta string zapišeš z lcd_puts(); in ne z lcd_putsf();
nekako takole:

Koda:

char buffer[64];


sprintf(buffer, "PORTA=%c", PORTA);      // Rezultat vrne v buffer, na lcd izpiše porta= 'desetiška vrednost na portu',  zadnji PORTA je variabla, ki jo vzame %c.


lcd_puts(buffer);     //izpiše buffer kar je v bufferju

 



Ukazi, ki se začnjeo z # so direktive kompajlerju, in ne procesorju. Stavki (if, while,...) izvedejo, če so pogoji, naslednji blok ukazov v programu. Blok ukazov je zaprt med {} . če imaš samo en ukaz teh {} ne rabiš. ne rabiš pisat endif (pravtako direktiva kompajlerju), ker se if avtomatsko konča, ko je izveden blok ukazov.

tole si videl?

_________________
LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
strobos
Član
Član



Pridružen-a: Sre 24 Sep 2003 12:19
Prispevkov: 726
Aktiv.: 3.27
Kraj: Brežice

PrispevekObjavljeno: Sre Maj 28, 2008 1:36 pm    Naslov sporočila:   Odgovori s citatom

Da ne bom odpiral nove teme: je kdo že mogoče testiral za koliko % manjšo kodo naredi Codevision proti Bascom AVR za isti program?

Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Čet Maj 29, 2008 6:45 am    Naslov sporočila:   Odgovori s citatom

@dragoon: Saj sem IF stavek na koncu naredil brez #. sem pa preizkušal seveda oba načina.
Tudi domnevam, da winavr ne naredi krajše kode kot Codevision.
Problem je namreč v tem, da imam evaluation verzijo Codevisiona, ta pa dovoli izdelavo samo 2kB kode. To pa presežem že s tem, da vključim knjižnico stdio.h, ki jo potrebuje sprintf. Brez da bi dodal še kaj svoje kode.
Tako da tega že itak ne morem stlačiti v tinyja, ki tudi premore 2kB flasha.

Tako da se sedaj privajam na avrstudio in winavr. In seveda preklinjam, ker spet nič več ne znam.

aja, pa manual imam Smile seveda za CV, ki mi nič ne koristi.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Čet Maj 29, 2008 7:26 am    Naslov sporočila:   Odgovori s citatom

#if - #else - #endif se obdela samo enkrat, in to pri prevajanju programa!

Ne mešat tega z navadnim "if"

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3, 4, 5, 6 ... 27, 28, 29  Naslednja
Stran 5 od 29

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group