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 ... 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
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.63
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Sob Apr 05, 2008 8:40 am    Naslov sporočila:   Odgovori s citatom

Aha , ker še res nikoli nisem videl nobene kode z operacijo NOT.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



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

PrispevekObjavljeno: Sob Apr 05, 2008 9:35 am    Naslov sporočila:   Odgovori s citatom

To je zato, ker se nikoli nisi videl nobene kode. Brez skrbi, tudi to bo enkrat na vrsti, ce prej ne obupas.
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.63
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Sob Apr 05, 2008 9:39 am    Naslov sporočila:   Odgovori s citatom

Sem sem. Ne bom obupal ... mogoče preden HTE dostavi mojo pošiljko Rolling Eyes
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



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

PrispevekObjavljeno: Ned Apr 06, 2008 3:08 am    Naslov sporočila:   Odgovori s citatom

Ne bi rekel, sicer ne bi klatil takih neumnosti ("Aha , ker še res nikoli nisem videl nobene kode z operacijo NOT").

Nekatere arhitekture sploh nimajo direktnih ukazov za operiranje nad biti, ampak uporabljajo logicne operacije z masko, od katerih je negacija kljucna operacija (za brisanje bita).

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



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.98
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Apr 06, 2008 11:19 am    Naslov sporočila:   Odgovori s citatom

Negacija ni nujno potrebna za funkcijsko polnost sistema (lahko recimo uporabiš xor), je pa res najbolj uporabljana ...

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



Pridružen-a: Sre 30 Nov 2005 14:15
Prispevkov: 1188
Aktiv.: 5.35
Kraj: Medvode

PrispevekObjavljeno: Ned Apr 06, 2008 11:22 am    Naslov sporočila:   Odgovori s citatom

XOR funkcija pa pride iz enačbe: x'y|xy', kjer se spet uporablja negacija.
_________________
It's electric!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.98
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Apr 06, 2008 5:40 pm    Naslov sporočila:   Odgovori s citatom

Domenius je napisal/a:
XOR funkcija pa pride iz enačbe: x'y|xy', kjer se spet uporablja negacija.


Ja in? Lahko rečeš tudi obratno: namesto negacije je recimo x XOR 1.

Gre se za to, da za en procesor ni nujno, da ima možnost negacije, pa se da vseeno zračunati kakršnokoli že operacijo nad biti. Celo več opcij je, kako to narediti v hardveru ...

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



Pridružen-a: Sre 30 Nov 2005 14:15
Prispevkov: 1188
Aktiv.: 5.35
Kraj: Medvode

PrispevekObjavljeno: Ned Apr 06, 2008 7:51 pm    Naslov sporočila:   Odgovori s citatom

Hočem ti samo povedati, da je xor funkcija sestavljena iz and, or in not (zato se jim pa reče elementarne funkcije), gledano iz matematičnega vidika - kako je hadrwersko narejeno ne vem. Od tu relacija xor <-> not.
_________________
It's electric!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.98
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Apr 06, 2008 8:19 pm    Naslov sporočila:   Odgovori s citatom

Domenius je napisal/a:
Hočem ti samo povedati, da je xor funkcija sestavljena iz and, or in not (zato se jim pa reče elementarne funkcije), gledano iz matematičnega vidika - kako je hadrwersko narejeno ne vem. Od tu relacija xor <-> not.


Kar jaz govorim, je pa tole:

(and, not) je samo ena izmed izbir elementarnih funkcij oz. bolj pravilno eden izmed funkcijsko polnih sistemov. V logiki imaš namreč več čisto ekvivalentnih takih sistemov - tako kot lahko s kombinacijo AND in NOT izraziš katerokoli preklopno funkcijo, lahko isto narediš s kombinacijo XOR, AND in 1. Ali pa recimo samo z NOR operatorjem.

AND, OR, NOT so samo najbolj pogosti operatorji, vendar čisto matematično gledano nimajo nobene prednosti pred XOR. Teoretično imaš za dve spremenljivki na voljo 2^4 različnih funkcij, ki si jih lahko poljubno izbereš (no, tako da dobiš poln sistem). Praktično gledano to pomeni, da lahko za realizacijo preklopne funkcije uporabiš takorekoč karkoli imaš pri roki, tudi če nimaš nujno AND, NOT ali OR vrat.

Sicer je pa tole že čisto mimo teme ...

LP!
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: 1613
Aktiv.: 8.18
Kraj: Slovenska Bistrica

PrispevekObjavljeno: Tor Maj 13, 2008 12:18 am    Naslov sporočila:   Odgovori s citatom

Si bom kar tole temo izposodil.

Delam z ATmega16 in programiram v CodeVision (verzija 1.25.9)

Zanima pa me okoli vpisovanja in branja v notranji Eeprom. V Helpu je sicer razloženo kako se vpisuje in bere (s kazalci) ampak tam je prikazano samo za en podatek, oziroma za eno spremenljivko naenkrat.

V Main funkciji sem najprej definiral stavek:

Koda:
unsigned int eeprom *ptr_to_eeprom;    //kazalec na nek naslov 


Jaz bi pa rad vpisoval več spremenljivk, najraje eno za drugo. Do sedaj sem to naredil na dva načina:

Koda:

//////// koda za vpis:

ptr_to_eeprom = 0x00;                  //začni s tem naslovom
      *ptr_to_eeprom = minute;        //vrednost minut vpiši v vsebino kazalca
      ptr_to_eeprom++;                   //povečaj kazalec na naslednji naslov v eepromu
      *ptr_to_eeprom = desetice;       
      ptr_to_eeprom++;       
      *ptr_to_eeprom = sekunde;     
      ptr_to_eeprom++;     
      *ptr_to_eeprom = desetinke;

////// koda za branje:

ptr_to_eeprom = 0x00;                          //začni s tem naslovom
        minute = *ptr_to_eeprom;              //vsebino kazalva vpiši v spremenljivko minute
        ptr_to_eeprom++;                          //povečaj kazalec na naslednji naslov
        desetice = *ptr_to_eeprom;
        ptr_to_eeprom++;
        sekunde = *ptr_to_eeprom;
        ptr_to_eeprom++;         
        desetinke = *ptr_to_eeprom;

Tak način mi spremeni 8 mest v Eeprom pomnilniku, od x0 do xF Confused Nevem zakaj, če pa pričakujem da se bodo spreminjale le od x0 do x3 Question

Drugi način pa je takšen:
Koda:
 //////////// koda za vpis:

ptr_to_eeprom = (eeprom unsigned int*) 0x00;        //definiraj kazalec na prvi naslov
      *ptr_to_eeprom = minute;                            //vpiši podatek
      ptr_to_eeprom = (eeprom unsigned int*) 0x01;     //definiraj kazalec na drugi naslov
      *ptr_to_eeprom = desetice;     
      ptr_to_eeprom = (eeprom unsigned int*) 0x02;     
      *ptr_to_eeprom = sekunde;   
      ptr_to_eeprom = (eeprom unsigned int*) 0x03;   
      *ptr_to_eeprom = desetinke;   

/////// koda za branje:

ptr_to_eeprom = (eeprom unsigned int*) 0x00;               //definiraj kazalec na prvi naslov
        minute = *ptr_to_eeprom;                                 //preveri podatek
        ptr_to_eeprom = (eeprom unsigned int*) 0x01;       //definiraj kazalec na drugi naslov
        desetice = *ptr_to_eeprom;   
        ptr_to_eeprom = (eeprom unsigned int*) 0x02;   
        sekunde = *ptr_to_eeprom;     
        ptr_to_eeprom = (eeprom unsigned int*) 0x03;     
        desetinke = *ptr_to_eeprom;     

Tale drugi način pa mi spremeni le 5 mest v Eepromu, od x0 do x4. Kar se mi zdi malo boljše kot v prvem načinu, a še vedno en bit več kot sem pričakoval Confused Tudi tu se na zadnje mesto (x4) vpiše vrednost 0x00

Najbolj kar me zanima pri vsem tem je, kateri način je sploh primernejši za delo z eepromom? Če sploh kateri? Iskal sem že po različnih straneh, od avrfreakov do yahoo, pa nič konkretnega. Tole kar je zgoraj pa sem malo spocal skupaj, malo od tu in malo od tam. Sicer deluje, ampak se mi zdi nekam "na horuk" vse skupaj.

Na kak način ste vi ostali člani vpisovali podatke v eeprom, če je šlo za več spremenljivk naenkrat?
Nazaj na vrh
Prisoten Poglej uporabnikov profil Pošlji zasebno sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.89
Kraj: Tržič

PrispevekObjavljeno: Tor Maj 13, 2008 1:47 pm    Naslov sporočila:   Odgovori s citatom

Zakaj?

Zato ker uporabljaš integer tip spremenljivke in ti vpisuje dva byte-a v eeprom.
Za vpis enega samega byte-a v eeprom uporabi CHAR.

Takole v GCC jaz uporabljam in vpiše samo en byte na eno lokacijo:

spremenljivka = eeprom_read_byte ((unsigned char*)eeprom_naslov);

Drugi tvoj način ti verjetno povozi zgornji neuporabni byte, kar pa ni dobro.

Poskusi...
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: 1613
Aktiv.: 8.18
Kraj: Slovenska Bistrica

PrispevekObjavljeno: Tor Maj 13, 2008 5:38 pm    Naslov sporočila:   Odgovori s citatom

Evo, sedaj sem v Main funkciji spremenil tip podatkov iz INT na CHAR:

Koda:
unsigned char eeprom *ptr_to_eeprom;


In pri vpisu teh štirih spremenljivk mi zasede 4 mesta v eeprom pomnilniku, kot je pričakovano. Hvala za pomoč!

Se mi pa dogaja še ena neprijetnost:

-Če želim nasloviti neko celico, nek naslov v eepromu, gre brez problema, če povečujem vrednost kazalca:
Koda:

ptr_to_eeprom = 0x00;     
      *ptr_to_eeprom = minute;     
      ptr_to_eeprom++;     
      *ptr_to_eeprom = desetice;       
      ptr_to_eeprom++;       
      *ptr_to_eeprom = sekunde;     
      ptr_to_eeprom++;     
      *ptr_to_eeprom = desetinke;


Žal pa ne gre neposredno izbrati naslova, naprimer:
Koda:

ptr_to_eeprom = 0x00;     
      *ptr_to_eeprom = minute;     
      ptr_to_eeprom = 0x01;                //tu mi javi napako
      *ptr_to_eeprom = desetice;       
      ptr_to_eeprom = 0x02;                //tu javi napako
      *ptr_to_eeprom = sekunde;     
      ptr_to_eeprom = 0x03;                 //in tu tudi
      *ptr_to_eeprom = desetinke;


V tem drugem primeru mi izpiše Error: a value od type 'int' can't be assigned to an entity of type 'eeprom unsigned char *' Čeprav bi po vsej logiki morala biti oba načina enaka?

Poskusil sem že z vsemi kombinacijami Int, Char... pa brez uspeha. Nevem zakaj sprejme le 0x00, ostalih 0x0n pa ne Question To se mi dogaja tako pri delu za branje, kot tudi za vpis v eeprom.
Nazaj na vrh
Prisoten Poglej uporabnikov profil Pošlji zasebno sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.89
Kraj: Tržič

PrispevekObjavljeno: Sre Maj 14, 2008 10:42 am    Naslov sporočila:   Odgovori s citatom

Nekaj pogrešam. Klic funkcije za branje iz eeprom-a (ali vpis v njega). V tej kodi, ki si jo dal, samo prestavljaš vrednosti sem ter tja po ramu. Ni sledu, da bi se kaj zapisovalo v eeprom.

Hm...razen, če ni to spet fora CodeVision-a. Tega jaz ne uporabljam.

Glede na error pa poglej, kako imaš to definirano v knjižnici.
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 14, 2008 1:53 pm    Naslov sporočila:   Odgovori s citatom

Zakaj pa ne anrediš enostavno spremenljivke v eepromu? zakaj vse te kolobocije s pointerji? Pazi samo da ne boš uničil eeproma s prevelikim številom vpisov - torej uporabljaš normalne spremenljivke iz rama, ko pa treba pa pač te shraniš v eeprom:

Koda:

 
eeprom char eeure, eesek;         //narediš spremenjlivko v eepromu
char ure, sek;                            // spremenljivka v ramu

ure=34;                                    //prirediš vrednost v ram

eeure=ure;                                //prirediš vrednost v eeprom

eesek=33;                                 //direktno v eeprom

....







codevision ne rabi nobene funkcije za vpsi v eeprom, samo pred najavo spremenljivke daš besedico eeprom. Isto za flash.

_________________
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: Pet Maj 23, 2008 11:57 am    Naslov sporočila:   Odgovori s citatom

Pozdrav!

Ravno se trudim s programiranjem mojega prvega uC in sicer sem uporabil ATTiny2313

Tu nekje na forumu sem našel in v Codevision skopiral to kodo (tistega, kar Codevisionov čarovnik avtomatsko doda na začetek, nisem skopiral):

Koda:
while(1)
   {
      // 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);
   }


Seveda sem jo malce preuredil, tako da je izhod na željenem pinu porta A (1)

In sedaj LEDica veselo utripa Very Happy

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)?

Kaj pomeni tisti znakec ~ ?

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?

Na žalost, čisto začetniška vprašanja, Ampak o Cju in tudi o mikrojih nimam pojma, sem že bolj stare šole in v učnem programu teh zadev nisem videl niti od daleč.
Je res, da sem že gledal Help od Codevisiona, ampak rezultati tega so bolj kilavi.

Če bo sreča, pa bom imel v prihodnosti še marsikaj vprašati.

Branko
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno 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 ... 27, 28, 29  Naslednja
Stran 4 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