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 

ATMega16 in c
Pojdi na stran 1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Čet Jan 11, 2007 12:09 am    Naslov sporočila:  ATMega16 in c Odgovori s citatom

Pozdravljeni!

Spet sem naletel na težavo in sicer pri vpisu vhoda določenega pina v neko spremenljivko.
Rad bi napisal program ki bi prebral PORTA.0 in to kar prebere zapisal v neko spremenljivko ki sem jo definiral. To bi naredil 8x da se register zapolni in potem bi to naredil še za 8 zaporednih registrov tako da bi prebral 64bitov.
Torej hočem narediti kot nekakšen UART ampak brez start in stop bitov (torej brez frama).

Tukaj je program ki sem ga začel pisat ampak mi javlja napake.

Koda:

void main(void)
{
     unsigned int a,b;
     unsigned int r[7]  ;

     inicializacija();


     for  (a=0; a<8; a++)
          {
          for (b=0; b<8; b++)
               {
               r[a].0=PINA.0;
               #asm ("rol r[a]")
               delay_ms(30);
               };
          };
}


Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mitja
Neznanec
Neznanec



Pridružen-a: Čet 11 Jan 2007 0:36
Prispevkov: 2
Aktiv.: 0.01

PrispevekObjavljeno: Čet Jan 11, 2007 12:42 am    Naslov sporočila:   Odgovori s citatom

Živ!
Ne vem sicer, kakšne napake ti javlja, po hitrem pregledu, pa so me zmotila podpičja na koncu zavitih oklepajev v for zankah. Moj compiler jih namreč ne uporablja v takem primeru. Poskusi z izbrisom teh podpičij.
LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Čet Jan 11, 2007 12:45 am    Naslov sporočila:   Odgovori s citatom

Najboljse da nam ne poves kaksno napako ti javi, da bomo cimdlje ugibali.
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Čet Jan 11, 2007 1:04 am    Naslov sporočila:   Odgovori s citatom

Se opravičujem za nepopolno vprašanje.

Uporabljam CVAVR. Napako pa mi javi v vrstici
r[a].0=PINA.0;
ker prevajalnik misli da z r[a].0 hočem zapisati v strukturo. Jaz bi pa rad samo zapisal prvi bit. Za podpičja pa se prevajalnik na zbuni tudi če so ali niso.



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



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 60.05
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Čet Jan 11, 2007 1:16 am    Naslov sporočila:   Odgovori s citatom

Ja in kako imaš definirano spremenljivko r ??
Za kaj takega bo potrebno določiti strukturo !

Spremenljivka tipa int ni že po defoltu definirana kot struktura bitov, tako kot je recimo port.

_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.


Nazadnje urejal/a VolkD Čet Mar 01, 2007 11:45 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
PeterC
Član
Član



Pridružen-a: Tor 14 Dec 2004 20:22
Prispevkov: 204
Aktiv.: 0.86

PrispevekObjavljeno: Čet Jan 11, 2007 2:46 am    Naslov sporočila:   Odgovori s citatom

Definitivno r ni pravilno deklariran.

Ena izmed možnih rešitev - pišem tako na pamet:

Koda:
void main(void)
{

     unsigned int a,b;
     char r[8];

     inicializacija();

     for  (a=0; a<8; a++)
          {
          for (b=0; b<8; b++)
               {
               
               r[a]= r[a] << 1;
               
               if(PINA.0==0)
                {
                       r[a]=r[a] & 0xFE;
                }
               if(PINA.0==1)
                {
                       r[a]=r[a] | 0x01;
                }
             delay_ms(30);
             }
       }
}
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Čet Jan 11, 2007 5:50 pm    Naslov sporočila:   Odgovori s citatom

Kako pa naj definiram strukturo bitov? Nekaj sem poizkušal z deklaracijo tipa bit ampak neznam ustvarit 8 spremenljivk ki bi bile kot en register.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
fogl
Član
Član



Pridružen-a: Sob 11 Sep 2004 22:37
Prispevkov: 80
Aktiv.: 0.34
Kraj: Radovljica

PrispevekObjavljeno: Čet Jan 11, 2007 5:57 pm    Naslov sporočila:   Odgovori s citatom

V winavr (gcc) takole:

struct {
uint8_t bit1: 1;
uint8_t bit2: 1;
} bitfield;

_________________
lp, klemen
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Sob Feb 03, 2007 1:49 pm    Naslov sporočila:   Odgovori s citatom

Imam še eno vprašanje pa bom kar tu vprašal.

Definiral sem polje npr.:
Koda:
unsigned char x[128];

zdaj pa me zanima kako bi lahko temu polju z for zanko prišteval vedno ena. Torej celemu polju in ne samo enemu "znaku" polja.

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



Pridružen-a: Tor 21 Jun 2005 0:21
Prispevkov: 58
Aktiv.: 0.24
Kraj: Ptuj

PrispevekObjavljeno: Sob Feb 03, 2007 6:25 pm    Naslov sporočila:   Odgovori s citatom

Koda:

for (i=0; i<128; i++)
    {
    x[i]++;
    }
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Sob Feb 03, 2007 8:50 pm    Naslov sporočila:   Odgovori s citatom

Hja to ni ravno to kar jaz hočem. Bom poskušal razložit kaj bi pravzaprav rad.

Potrebujem število ki bi bilo dolgo 1024 bitov. Ampak ker v c-ju lahko definiraš največje število ki je dolgo 32 bitov (unsigned long int) sem pač uporabil polje ki je dolgo 128 znakov in ga definiral kot "unsigned char" kar je 8 bitov na znak (pač velikost registra v AVR in zaradi manjše kode ki bi jo drugač prevajalnik izkašljal če bi uporabil kakšno drugo deklaracijo) in dobim število v velikosti 1024b.
Sedaj pa bi rad temu številu (tem 1024 bitom) prišteval 1. Težava je edino v tem da če hočem prišteti 1 k spremenljivki x (ki sem jo prej definiral) da bi mogo tudi izbrat polje h kateremu bom prišteval. Jaz bi pa rad prišteval celemu polju.

Upam da vsaj malo veste kaj sem mislil.
Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Sob Feb 03, 2007 9:04 pm    Naslov sporočila:   Odgovori s citatom

madzi je napisal/a:
Sedaj pa bi rad temu številu (tem 1024 bitom) prišteval 1. Težava je edino v tem da če hočem prišteti 1 k spremenljivki x (ki sem jo prej definiral) da bi mogo tudi izbrat polje h kateremu bom prišteval. Jaz bi pa rad prišteval celemu polju.


Kaj ? Think Shocked

I naj bo spremenljivka, velika 1024 bitov; ta del je napisan razumljivo. Kaj bi rad naredil z njo ? I = I + 1 ali kaj drugega ?

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Sob Feb 03, 2007 9:23 pm    Naslov sporočila:   Odgovori s citatom

Ja, nekaj takega.
V bolj poenostavljenem zapisu, ki seveda ne deluje.
Koda:
unsigned char x[128];
void funkcija()
{
  x++;
}

Nekaj takega. Hočem samo da bi celotno polje povečeval za 1.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Sob Feb 03, 2007 9:35 pm    Naslov sporočila:   Odgovori s citatom

Opcija 1: rekurzija (tega ncoes na 8-bitnih mikrokontrolerjih)

Opcija 2: z "odrolano" rekurzijo

Primer za slednje:

Koda:

for (i = 0; i < 128; i++)
{
x[i]++;
if (x[i] != 0) break;
}


(predpostavka: LSB 1024-bitnega stevila je shranjen v LSb x[0]; ce temu ni tako, obrni mejna pogoja zanke)

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Čet Mar 01, 2007 11:30 pm    Naslov sporočila:   Odgovori s citatom

No moje prejšnje težave še vedno nisem rešil, ampak zdaj sem to malo pustil ob strani in imam drugo težavo. In sicer imam težavo pri tipkovnici.
Na nekem pinu tipam če je stanje 1 in ko je stanje 1 se izvede neka procedura. Težavo imam v tem da se to izvaja toliko časa dokler tipke ne izpustim, rad bi pa da se izvede samo enkrat. Najbolj primeren čas bi bil takrat ko tipko izpustim.
Primer kode ki jo zdaj uporabljam
Koda:
if(on){
    printf("hello :)\n\r");
    }

Prosim pomagajte mi.

Lp
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 -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3  Naslednja
Stran 1 od 3

 
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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group