www.elektronik.si
Začetniški problem v C-ju pri AVR-ju
Pojdi na stran Prejšnja  1, 2, 3, 4, 5 ... 27, 28, 29  Naslednja  :||:
www.elektronik.si -> Osnove programiranja AVR-jev

Avtor: PC_MasterKraj: Domžale , Blizu Ljubljane , Poštna 1230 PrispevekObjavljeno: Sob Apr 05, 2008 8:40 am    Naslov sporočila:  
----------------------------------------------------------------------------
Aha , ker še res nikoli nisem videl nobene kode z operacijo NOT.

Avtor: Sokrat PrispevekObjavljeno: Sob Apr 05, 2008 9:35 am    Naslov sporočila:  
----------------------------------------------------------------------------
To je zato, ker se nikoli nisi videl nobene kode. Brez skrbi, tudi to bo enkrat na vrsti, ce prej ne obupas.

Avtor: PC_MasterKraj: Domžale , Blizu Ljubljane , Poštna 1230 PrispevekObjavljeno: Sob Apr 05, 2008 9:39 am    Naslov sporočila:  
----------------------------------------------------------------------------
Sem sem. Ne bom obupal ... mogoče preden HTE dostavi mojo pošiljko Rolling Eyes

Avtor: Sokrat PrispevekObjavljeno: Ned Apr 06, 2008 3:08 am    Naslov sporočila:  
----------------------------------------------------------------------------
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).

Avtor: chaosKraj: Zagorje ob Savi PrispevekObjavljeno: Ned Apr 06, 2008 11:19 am    Naslov sporočila:  
----------------------------------------------------------------------------
Negacija ni nujno potrebna za funkcijsko polnost sistema (lahko recimo uporabiš xor), je pa res najbolj uporabljana ...

LP!

Avtor: DomeniusKraj: Medvode PrispevekObjavljeno: Ned Apr 06, 2008 11:22 am    Naslov sporočila:  
----------------------------------------------------------------------------
XOR funkcija pa pride iz enačbe: x'y|xy', kjer se spet uporablja negacija.

Avtor: chaosKraj: Zagorje ob Savi PrispevekObjavljeno: Ned Apr 06, 2008 5:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
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!

Avtor: DomeniusKraj: Medvode PrispevekObjavljeno: Ned Apr 06, 2008 7:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
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.

Avtor: chaosKraj: Zagorje ob Savi PrispevekObjavljeno: Ned Apr 06, 2008 8:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
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!

Avtor: sebavehKraj: Slovenska Bistrica PrispevekObjavljeno: Tor Maj 13, 2008 12:18 am    Naslov sporočila:  
----------------------------------------------------------------------------
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?

Avtor: spyKraj: Tržič PrispevekObjavljeno: Tor Maj 13, 2008 1:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
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...

Avtor: sebavehKraj: Slovenska Bistrica PrispevekObjavljeno: Tor Maj 13, 2008 5:38 pm    Naslov sporočila:  
----------------------------------------------------------------------------
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.

Avtor: spyKraj: Tržič PrispevekObjavljeno: Sre Maj 14, 2008 10:42 am    Naslov sporočila:  
----------------------------------------------------------------------------
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.

Avtor: dragoonKraj: Trojane PrispevekObjavljeno: Sre Maj 14, 2008 1:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
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.

Avtor: lojzek PrispevekObjavljeno: Pet Maj 23, 2008 11:57 am    Naslov sporočila:  
----------------------------------------------------------------------------
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

Stran 4 od 29

Powered by phpBB © 2001,2002 phpBB Group