Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ATMEL 89C51 zadatak u C

[es] :: Elektronika :: Mikrokontroleri :: ATMEL 89C51 zadatak u C

Strane: 1 2 3 4

[ Pregleda: 8643 | Odgovora: 63 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 10:58 - pre 102 meseci
Gledao samo. Nije bas jednostavno kako izgleda. :))

Odustajem od ringa. Hvala ti na komentaru ;)
 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 11:01 - pre 102 meseci
Zadatak je kao jednostavan ali ima neki trik
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 11:19 - pre 102 meseci
@heplf2, nema tu nikakav trik, a ako ti je ring komplikovan (niz i 2 pointera) onda se iskreno nadam da je poenta ovoga da odradis zadatak i da se vise nikad u zivotu ovim ne bavis

@heyoo, napravio ga je on vec da ide na 1sec pa mu je profa rekao da nije to to zar ne? ako cemo tako da gledamo moze on i rucno da izbaci sve iz niza koji nisu deljivi sa 3 "kad vec ima samo taj ulazni niz" zar ne? poenta je da se napravi univerzalno resenje koje radi za siri broj slucajeva inace je zadatak beskoristan...

ajmo opet
- profa je trazio da bude ispis u isr

dakle to sto isr ispisuje mora vec da bude spremno, negde, dakle u main-u moras da spremis sledecu vrednost za prikaz. ako radis sa ring baferom velicine 1 to je "vrednost" + "slobodno", dakle postavis slobodno na 1 svaki put kad vrednost procitas (znaci da ti je varijabla vrednost sada slobodna), u main-u ako je slobodno ==1 izracunas sledecu vrednost, postavis slobodno na 0 i cekas dok ne bude slobodno opet 1 da bi ubacio u vrednost novu vrednost. problem ovde je sto ako ti je ulaz "spor" ili "nejednakom brzinom dolazi" bafer velicine 1 moze da bude suvise mali pa je onda iskusno da imas malo veci bafer .. npr velicine 10.. to sto ces ti za ovih par brojki u nizu stici da nadjes "sledeci deljiv sa 3" u tih 1sec koliko imas vremena nije "univerzalno resenje" a razlika u implementaciji za bafer od 1 bajt i bafer od X bajtova je 1 varijabla vise i 5 linija koda vise i dobijes full skolsko univerzalno resenje ... no kada su odgovori "suvise komplikovano" i "nismo sa tim radili" ...


 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 11:37 - pre 102 meseci
Pa poenta mi je da spremim ispit.. A ja sam inace hardwer designer a ne softver.
Ali moram da polozim da bi zavrsio sa studijama.
Opet ti se zahvaljujem sto zelis da pomognes,ali ne znam koliko ce mi trebati jos da se sa ringom izborim i da na kraju jos ne radi . Samo da se upucam :))
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 12:22 - pre 102 meseci
:D :D :D :D

nes se mnogo usreciti sa hw dizajnom ako ne savladas odlicno C .. no u svakom slucaju ako ne zelis ovim da se bavis poptuno razumem nedostatak zelje da se cimas previse oko zadatka koji te ne zanima :D

evo jedno pitanje, sta ako je taster bio otpusten 2 sekunde? sa ring-om imas i dalje na 1 sec nisku, bez ringa nemas, imas pauzu tu dok je taster otpusten


elem, evo ti kod koji radi to sto si napisao da hoces, ako sam razumeo oko tastera sta si hteo
Code:

#include <reg51.h> 
#include <math.h>
        
#define ELEMENTS_IN_A 7        
#define RING_BUFFER_SIZE 5

typedef unsigned char byte;

byte a[ELEMENTS_IN_A]= {7,5,16,1,4,11,9}; 

byte ring[RING_BUFFER_SIZE];
volatile byte p;
volatile byte q;

volatile byte counter;
byte xdata display _at_ 0x8001;
volatile int i=0;
sbit switcher=P0^0;

void timer0(void) interrupt 1 using 2 {
  // bem li ga valjda ovako na '51 ide konfiguracija tajmera
  TR0 = 0;   // zaustavi tajmer
  TH0=0x3C;  // set timer0  C350 = 50,000
  TL0=0xAF;  // posle svakog prekida                   
  TR1 = 1;   //pokreni tajmer
    
  if (counter) {                                   // da li je proslo 1sec
    counter--;
  } else {
    if (((q + 1) % RING_BUFFER_SIZE - p - 1)){ // da li imas spreman podatak u baferu?
      display = ring[p];
      p = (p + 1) % RING_BUFFER_SIZE;              // pomeri pocetak za jedno mesto napred
      if (p == q) p = q = 0;                       // nije obavezno ali ako je ring prazan stavi ih da krenu od nule
    }
    
    counter = 20;                                  // koliko ti prekida treba za 1sec
  }
}


void main(){
  counter = 0;
  i = 0;
  p = 0;
  q = 0;
  
  //konfigurisi tajmer
  EA=1;         
  TMOD=1;       //  16 bit timer
  TH0=0x3C;     // set timer0  0xC350
  TL0=0xAF;     // 50,000 decimalno
  TR0=1;
  
  while(i<MAX_ELEMENTS_IN_A)
    while (!switcher)    // da li treba dokle god je stisnut taster da citas ili treba da sacekas da se pusti taster da bi cekao da se ponovo stisne za nastavak? da li ti treba tu neki sw debouncing?  ovako radi tako kako si i ti inicijalno pisao - dokle god je stisnut on cita
      if (RING_BUFFER_SIZE - ((q + 1) % RING_BUFFER_SIZE - p - 1)  == 0) //ako ima mesta u baferu, trazi sledeci deljiv sa 3
        if ( a[i++] % 3 == 0) {
          ring[q] = a[i-1];               //ubaci ga u ring
          q = (q + 1) % RING_BUFFER_SIZE; //pomeri kraj za jedno mesto
  }
      
      
  while(1); // zavrti se na kraju posto nemas gde da "izadjes"
}



 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 12:50 - pre 102 meseci
U pravu si. Potpuno se slazem.
U Srbiji nema sanse da se usrecim sa tim ako ne znam C, ili neko programiranje..Mislim , tesko je za posao. Svestan sam.
Kad te pitaju sta zavrsavas i kazes elektro, svi misle da si programer, tj da radis neko programiranje :))

Zato na zapadu mozes svasta da radis ali ne bih sada o tome... ;)

Inace, pustio sam sada kod i nazalost ne radi :((. Ni da micne
Mrtav a prosao kompajler bez greske.....

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 12:58 - pre 102 meseci
za C, ne mislim ja da treba da budes programer, ali da bi dizajnirao
bilo kakav hardware mora znas C i mora ga znas dobro, jer HW bez nekog
procesora, bar minimalnog implementiranog u vhdl-u, ozbiljnog dizajna
nema .. danas cak ni analogiju ne mozes da radis bez bar jednog malog
procesora, tako da moras da znas C ako nista drugo da bi mogao da
testiras dal ti dizajn radi ili ne :D

a sto se koda tice, ja sam inicijalizaciju tajmera iskopirao od tebe
(pojma nemam kako se inicijalizuje tajmer na tom '51) .. tako da ako ti
se interapt ne vrti, proveri dal je to inicijalizovano kako treba

dalje, main, vidi on ce da prodje jednom kroz niz i to je to, onda ce da
stane i da se vrti u mrtvoj petlji, da li imas tu neki debuger? ili samo
izvrsis i cekas?

ako pogledas prva petlja ti je

while(i<MAX_ELEMENTS_IN_A)

znaci ide samo jednom kroz niz. ako hoces da se vrti beskonacno, tj da
uvek krece od pocetka niza kad ga zavrsi, valjda toliko umes da promenis
kod?

Code:

  while(1){
    if (i >= MAX_ELEMENTS_IN_A) i = 0;
    while (!switcher)    // da li treba dokle god je stisnut taster da citas ili treba da sacekas da se pusti taster da bi cekao da se ponovo stisne za nastavak? da li ti treba tu neki sw debouncing?  ovako radi tako kako si i ti inicijalno pisao - dokle god je stisnut on cita
...
  }}


i onda ti donja petlja while(1); ne treba posto se ova gore nece nikad
zavrsiti

dalje, imas while (!switcher) dakle ta unutrasnja petlja ti se vrti sve
vreme dok ti je taster stisnut (razumeh iz tvog koda da ti je switcher 0
kada je taster stisnut), nema debouncinga, nema cekanja da pustis taster
pa pritisnes ponovo za sledeci, dakle u tvom slucaju on ce da cim pipnes
taster protrci kroz sve i zavrsi posto je dovoljno brz .. ako hoces da
tasterom dajes "jedan po jedan" input onda tu mora se doda jedno cekanje
da taster postane 1 (otpusten), neki debounce ovo ono .. ako radis hw
znas valjda o cemu pricam ...


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 13:01 - pre 102 meseci
e da i savet, promeni ELEMENTS_IN_A da bude malo vece od 7 i dodaj u a
niz dodatnih vrednosti i napravi da imas jos neku koja je deljiva sa 3
:D sada imas samo jednu vrednost deljivu sa tri i nije ti neki test :D

znaci umesto

#define ELEMENTS_IN_A 7

stavi npr

#define ELEMENTS_IN_A 20

a umesto
byte a[ELEMENTS_IN_A]= {7,5,16,1,4,11,9};

stavi

byte a[ELEMENTS_IN_A]= {7,11,9,15,13,5,5,3,3,5,5,5,3,5,3,6,9,8,33,7};

cisto da bude zanimljivije :D
 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 13:44 - pre 102 meseci
Pa nije bas tako ,al ajde.Mislim u pravu si da ima. Pogotovo za digitalni dizaj gde se pise verilog ili vhdl kod...
Zavisi gde radis i sta .. Ima raznih testiranja, postoje i masine-instrumente koje su specijalizovane za odredjena testiranja..
hardver je dosta sirok pojam. Mozes raditi i mikrotalasnu , gde projektujes antene,filtre i slicno,proces proizvodnje samog cipa... Ili da radis na razvoju nekog dela cipa.. Sve zavisi da li je industrija ili neka mala firma... itd.. Ali opet kazem da mozes da radis ali ne moras da znas, nije svuda prisutan... To sam hteo da kazem.. Ima tu dosta sfera koja su vezana za elektroniku a nije programiranje...

eee skontao sam sada da u kodu fali inicijalizacija :))
probacu sada da dodam to, jer bez toga nece ni raditi i mora se pozvati u main delu...
a prekidac nije bitno kako se pali ,samo da se aktivira.. Mi obcno samo if (switcher)... Ne zahteva se nista posebno...

 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 13:52 - pre 102 meseci
ima debug, posto tu mi se i otvara display
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:02 - pre 102 meseci
Citat:
HeplF2:
Mozes raditi i mikrotalasnu , gde projektujes antene,filtre i slicno,proces proizvodnje samog cipa...


i opet imas mcu na toj mikrotalasnoj ... cak i da dizajniras samo hornu software za dizajniranje horne zahteva da pises plagine u C-u da bi mogao da dobijes to sto ti treba :D .. tu i tamo ti trba i matlab i fortran ali bez C neces da se usrecis

Citat:
HeplF2:
Ili da radis na razvoju nekog dela cipa.. Sve zavisi da li je industrija ili neka mala firma... itd.. Ali opet kazem da mozes da radis ali ne moras da znas, nije svuda prisutan... To sam hteo da kazem.. Ima tu dosta sfera koja su vezana za elektroniku a nije programiranje...


kad pocnes da radis, videces koliko je C neophodan za bilo kakav moderan rad sa elektronikom i koliko ne mozes da dobijes posao bez znanja istog...
naravno pricam o stvarima koje se rade sa faxom, banderasima ne treba C, ovima sto sklapaju plc kockice i pustaju masine u proces uglavnom ne treba C (doduse svi koji to malo bolje rade znaju odlicno C jer je mnogo lakse kad znas C i ladder i matlab..) ... os projektujes tanjir za mw - C-olik je interface za programiranje aplikacije za dizajn, os hornu, ista prica, os kontrolises lnb - mora pises neki kod da pricas sa njim, dal ce ga cukas u asm ili c ili ... na tebi je al opet mora pises kod ... adc, dac .. proslo je vreme "menjanja procesora u TV-u" :D


Citat:
HeplF2:
eee skontao sam sada da u kodu fali inicijalizacija :))
probacu sada da dodam to, jer bez toga nece ni raditi i mora se pozvati u main delu...
a prekidac nije bitno kako se pali ,samo da se aktivira.. Mi obcno samo if (switcher)... Ne zahteva se nista posebno...


pa provuci to kroz debug vidi kuda ide kod i gde zavrsava :)
 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:02 - pre 102 meseci
Nece da radi opet.... Nesto ne stima..Mrtav displej
Nema veze.. Nemoj se vise muciti

Valjda ce se jos neko javiti ..

HVALA TI PUNO JOS JEDNOM !!
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:07 - pre 102 meseci
ok aj ovako, ako imas debager, idi liniju po liniju ...

ceo kod ima citavih 12 linija ako izuzmemo inicijalizacije i deklaracije .. nema tu nikakve filozofije
 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:07 - pre 102 meseci
PRODJE KORZ INICIJALIZACIJU, pa na main proveri counter i,p ,q
pa onda ide na paljenje prekidaca u main pa if (RING_BUFFER_SIZE - ((q + 1) % RING_BUFFER_SIZE - p - 1) == 0) pa se opet vraca na prekidac i tako stalno ... tu se vrti u beskonacno ali mrtav displej
 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:10 - pre 102 meseci
Citat:
bogdan.kecman:
Citat:
HeplF2:
Mozes raditi i mikrotalasnu , gde projektujes antene,filtre i slicno,proces proizvodnje samog cipa...


i opet imas mcu na toj mikrotalasnoj ... cak i da dizajniras samo hornu software za dizajniranje horne zahteva da pises plagine u C-u da bi mogao da dobijes to sto ti treba :D .. tu i tamo ti trba i matlab i fortran ali bez C neces da se usrecis

Citat:
HeplF2:
Ili da radis na razvoju nekog dela cipa.. Sve zavisi da li je industrija ili neka mala firma... itd.. Ali opet kazem da mozes da radis ali ne moras da znas, nije svuda prisutan... To sam hteo da kazem.. Ima tu dosta sfera koja su vezana za elektroniku a nije programiranje...


kad pocnes da radis, videces koliko je C neophodan za bilo kakav moderan rad sa elektronikom i koliko ne mozes da dobijes posao bez znanja istog...
naravno pricam o stvarima koje se rade sa faxom, banderasima ne treba C, ovima sto sklapaju plc kockice i pustaju masine u proces uglavnom ne treba C (doduse svi koji to malo bolje rade znaju odlicno C jer je mnogo lakse kad znas C i ladder i matlab..) ... os projektujes tanjir za mw - C-olik je interface za programiranje aplikacije za dizajn, os hornu, ista prica, os kontrolises lnb - mora pises neki kod da pricas sa njim, dal ce ga cukas u asm ili c ili ... na tebi je al opet mora pises kod ... adc, dac .. proslo je vreme "menjanja procesora u TV-u" :D


Citat:
HeplF2:
eee skontao sam sada da u kodu fali inicijalizacija :))
probacu sada da dodam to, jer bez toga nece ni raditi i mora se pozvati u main delu...
a prekidac nije bitno kako se pali ,samo da se aktivira.. Mi obcno samo if (switcher)... Ne zahteva se nista posebno...


pa provuci to kroz debug vidi kuda ide kod i gde zavrsava :)




DA LI OPET NE MORAS TO DA RADIS :)) . TO JE POENTA. IMA GA SVUDA ALI NIJE NEOPHODAN JER NEMOGU SVI TO DA RADE PA PORED TOGA I HARDVER ;)
POSEBNO U INDUSTRIJI POSLOVI SU iscepkani na milion delova.... Imao sam prilike da vidim iako nisam poceo darradim. Bio sam u industriji pa sam video
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:11 - pre 102 meseci
haha pa eto je greska :D

if (RING_BUFFER_SIZE - ((q + 1) % RING_BUFFER_SIZE - p - 1) == 0)

to je "ako je prazan"

a tebi ne treba ako je prazan vec ako ima prostora :D

znaci treba

if (RING_BUFFER_SIZE - ((q + 1) % RING_BUFFER_SIZE - p - 1) > 0)
 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:31 - pre 102 meseci
izmenio sam...

sada je izbacio gresku bas za tu liniju nakon sto sam promenio na >..
pise access violation at I: 0x80 : no read permission
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:45 - pre 102 meseci
hm to izbaci kad krene da kompajlira?

probaj umesto RING_BUFFER_SIZE da stavis brojku koliko je RING_BUFFER_SIZE mozda taj kompajler ne ume da hendla #define kako treba ..

prebroj zagrada u toj liniji sa IF(... mzoda fali neka zagrada :D ja sam to kuco napamet na forumu :)

a za "NE MORAS TO DA RADIS", samo sacekaj pa ces videti :D, perspektiva ti je sad takva da od drveta ne vidis sumu, sacekaj da diplomiras pa promenis 2-3 posla :)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 14:50 - pre 102 meseci
pogledaj ovo: http://www.keil.com/support/docs/814.htm

to je greska koja kaze da kompajler misli da pokusavas da pises po prostoru koji nemas



 
Odgovor na temu

HeplF2
Mika Petrov
Beograd

Član broj: 331020
Poruke: 61
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: ATMEL 89C51 zadatak u C02.12.2015. u 15:20 - pre 102 meseci
Citat:
bogdan.kecman:
hm to izbaci kad krene da kompajlira?

probaj umesto RING_BUFFER_SIZE da stavis brojku koliko je RING_BUFFER_SIZE mozda taj kompajler ne ume da hendla #define kako treba ..

prebroj zagrada u toj liniji sa IF(... mzoda fali neka zagrada :D ja sam to kuco napamet na forumu :)

a za "NE MORAS TO DA RADIS", samo sacekaj pa ces videti :D, perspektiva ti je sad takva da od drveta ne vidis sumu, sacekaj da diplomiras pa promenis 2-3 posla :)



Hahahaha, jeste. Nikad se ne zna :)))
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: ATMEL 89C51 zadatak u C

Strane: 1 2 3 4

[ Pregleda: 8643 | Odgovora: 63 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.