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

Brojač događaja - MikroC - Pomoć

[es] :: Elektronika :: Mikrokontroleri :: Brojač događaja - MikroC - Pomoć

Strane: 1 2

[ Pregleda: 4105 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.dynamic.mbb.telenor.rs.



Profil

icon Brojač događaja - MikroC - Pomoć04.11.2016. u 19:26 - pre 90 meseci
Pozdrav svima,
Dakle problematika je sledeca potrebno je da u MikroC-u ispisem "Brojac dogadjaja" (odnosno 2 kom) koji se ispisuje(u) na LCD-u (2x16) (njegovoj gornjoj polovini), na donjoj polovini potrebno je da se prikazuje odnos ta dva brojaca (njihove vrednosti), dakle <,>, ==, potrebno je da postavim tastere za inkrementaciju, resetovanje brojaca. Počeo sam da ga radim ali pošto sam početnik u ovome nije mi konkretno jasno šta taj brojač dogadjaja predstavlja uopste u fizickom smislu. Mislio sam da nekako treba da koristim tajmer (koji se opisuje kao brojac dogadjaja), Znam neke osnove tako da bi mi svake smernice dobro dosli, ili ideja, ispisan kod itd...

Code:

sbit LCD_RS at PORTA2_bit;
sbit LCD_EN at PORTA3_bit;
sbit LCD_D4 at PORTA4_bit;
sbit LCD_D5 at PORTA5_bit;
sbit LCD_D6 at PORTA6_bit;
sbit LCD_D7 at PORTA7_bit;

sbit LCD_RS_Direction at DDA2_bit;
sbit LCD_EN_Direction at DDA3_bit;
sbit LCD_D4_Direction at DDA4_bit;
sbit LCD_D5_Direction at DDA5_bit;
sbit LCD_D6_Direction at DDA6_bit;
sbit LCD_D7_Direction at DDA7_bit;


void main() {
     Lcd_init();
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Out(1, 2, i);
     Lcd_Out(1, 4, j);
     Delay_ms(2);
     Lcd_Out(2, 2, z);
     }

}
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Brojač događaja - MikroC - Pomoć04.11.2016. u 19:46 - pre 90 meseci
Možeš imati dva tastera i brojati koliko su puta pritisnuti (nezavisno jedan i drugi). Treći neka bude reset i on treba da oba vrati na početnu vrednost, nula recimo. Zamisli da imaš ljude koji čekaju u dva reda i da im je zadatak da pritisnu taster kada prodju pored njega. Dogadjaj može da bude bilo šta. Tajmer ti je tu nepotreban za neku osnovnu primenu ali možeš recimo uvesti i njega za slučaj da želiš brojati dogadjaje u nekom vremenskom intervalu.
gorankg
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.dynamic.mbb.telenor.rs.



Profil

icon Re: Brojač događaja - MikroC - Pomoć04.11.2016. u 21:35 - pre 90 meseci
Tako sam i ja shvatio, ali sam dosao u problem sa while petljama, stavio sam dve petlje i nisam izasao na kraj sa logikom dobro. Iskompajlirao sam ga bez greske, ali sam proverio program u AVR simulatoru i on bukvalno nije nista radio.
Podesio sam dugme za inkrementaciju isto u while petlji, nesto kao while(PINB.b0)...
Ako neko mozda ima neki slican program ili je vican u c-u ili konkretno u ovome, dosta bi mi znacilo.
 
Odgovor na temu

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon Re: Brojač događaja - MikroC - Pomoć05.11.2016. u 00:23 - pre 90 meseci
Ajmo polako:

1) Koji kontroler koristis?
2) Koja je hardverska konfiguracija koju imas/zelis?
3) Zasto mikroC?
4) Ako vec mikroC, da li za PIC ili za Atmel (AVR)?
5) Daj ceo kôd koji si napisao
6) Guglaj "external interrupt" (dodaj PIC ili AVR ili model kontrolera koji koristis)
7) Guglaj "Interrupt on change" ( -||- )
...
while kao na PC zaboravi, jedini while() koji ti je potreban je while(1) (ili for( ; ; ) ), svaki drugi while se resava na drugi/drugaciji nacin.

HINT: Guglaj "mikroC external interrupt", dobices i diskusije i gotove kodove. kao na primer...

* Poenta je da ukapiras sta ti treba i kako da trazis/pitas, sve ostalo je piece of cake...

Mikrokontroler ima "dogadjaje" (interrupts) i ima flagove koje podesava (postavi na 1) kada se desi odredjeni dogadjaj. Tvoj zadatak je da nateras kontroler da prati da li se desio dogadjaj (interrupt) koji tebi odgovara (externi/spoljni, interni/unutrasnji) i da pratis sta se desilo sa flagovima. Nakon svakog dogadjaja, nakon sto ustanovis da se dogadjaj desio (flag = 1) bitno je da OBRISES/ponistis flag da bi kasnije opet mogao da detektujes dogadjaj.
...
Za dalje pitaj sta ti nije jasno, ne mogu napamet da odgovaram

[Ovu poruku je menjao shpiki dana 05.11.2016. u 01:36 GMT+1]
There are only 10 types of people in the world:
those who understand binary, and those who don't.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Brojač događaja - MikroC - Pomoć05.11.2016. u 08:37 - pre 90 meseci
Ne while(PINB.b0) već:

if(PINB.b0) uvećaj brojač 1

if(PINB.b1) uvećaj brojač 2

if(PINB.b2) vrati oba brojača na nulu.

Ovo uz uslov da je Taster1 na pinu b0, Taster2 na pinu b1 i reset Taster3 na pinu b2.



gorankg
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.dynamic.mbb.telenor.rs.



Profil

icon Re: Brojač događaja - MikroC - Pomoć05.11.2016. u 10:08 - pre 90 meseci
Citat:
shpiki:
Ajmo polako:

1) Koji kontroler koristis?
2) Koja je hardverska konfiguracija koju imas/zelis?
3) Zasto mikroC?
4) Ako vec mikroC, da li za PIC ili za Atmel (AVR)?
5) Daj ceo kôd koji si napisao
6) Guglaj "external interrupt" (dodaj PIC ili AVR ili model kontrolera koji koristis)
7) Guglaj "Interrupt on change" ( -||- )
...
while kao na PC zaboravi, jedini while() koji ti je potreban je while(1) (ili for( ; ; ) ), svaki drugi while se resava na drugi/drugaciji nacin.

HINT: Guglaj "mikroC external interrupt", dobices i diskusije i gotove kodove. kao na primer...

* Poenta je da ukapiras sta ti treba i kako da trazis/pitas, sve ostalo je piece of cake...

Mikrokontroler ima "dogadjaje" (interrupts) i ima flagove koje podesava (postavi na 1) kada se desi odredjeni dogadjaj. Tvoj zadatak je da nateras kontroler da prati da li se desio dogadjaj (interrupt) koji tebi odgovara (externi/spoljni, interni/unutrasnji) i da pratis sta se desilo sa flagovima. Nakon svakog dogadjaja, nakon sto ustanovis da se dogadjaj desio (flag = 1) bitno je da OBRISES/ponistis flag da bi kasnije opet mogao da detektujes dogadjaj.
...
Za dalje pitaj sta ti nije jasno, ne mogu napamet da odgovaram :)

[Ovu poruku je menjao shpiki dana 05.11.2016. u 01:36 GMT+1]


1)ATMEGA16
2)Bitan mi je samo taj LCD displej, gde cu ocitavati izlazni signal, sve ostalo je ATMega za potrebe ucenja
3)Dobio sam da radim na njemu, imam taj program i na njemu radim, ucim
4)Atmel-avr
5)Manje vise i nemam kod, jer logika koju sam koristio iz (slabijeg) znanja C-a, nije bila dobra.
7)
8)Guuglam hvala puno
Probacu nesto da napisem, pa da vidim na simulatoru da li sam bilo sta uradio.
 
Odgovor na temu

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon Re: Brojač događaja - MikroC - Pomoć05.11.2016. u 10:46 - pre 90 meseci
Ok, za sada ostani na mikroC (jeste nas, ali je odvratan) da ne gubis i volju i vreme za prelazak na nesto drugo (normalnije).

*** HINT: za sada zaboravi LCD!

Za dalje ti je potrebno:
1) ATmega16
2) taster
3) LED
4) otpornik 390R (330R, 470R, sta nadjes)

Prvo nauci da koristis interrupte (najbitnija stvar), povezi LED na neki izlazni pin (koji god ti se dopada ), povezi taster na PD2 (pin 16), guglaj atmega16 int0, citaj primere i pokusavaj.
There are only 10 types of people in the world:
those who understand binary, and those who don't.
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.dynamic.mbb.telenor.rs.



Profil

icon Re: Brojač događaja - MikroC - Pomoć06.11.2016. u 10:19 - pre 89 meseci
Evo dokle sam stigao ali ne dobijam zeljeni izlaz :/
Code:

void main() {

int i=0;
int j=0;

char txt1[]="";
char txt2[]="";
char txt3[]="";

while(1){
     Lcd_init();
     while(PINC.b0=1) i++;
     ByteToStr(i, txt1);
     Lcd_Out(1, 3, txt1);
     
     while(PINC.b1=1) j++;
     ByteToStr(j, txt2);
     Lcd_Out(1, 9, txt2);
     
     
     if(i<j) Lcd_Out(2, 8, "<");
     if(i>j) Lcd_Out(2, 8, ">");
     if(i==j) Lcd_Out(2, 8, "=");
     Lcd_Cmd(_LCD_CURSOR_OFF);
     }
}

 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.dynamic.mbb.telenor.rs.



Profil

icon Re: Brojač događaja - MikroC - Pomoć06.11.2016. u 10:45 - pre 89 meseci
Hvala na pomoci, izleda mi da sad mkontr radi ono sto sam hteo, eventualno su potrebne manje izmene, ipak nisam koristio interrupst kao sto je shipki napisao, verovatno je njegovao ideja bolje=tacnija, ja sam nekako uradio sam mojim nivoom znanja ali videcemo da li bas ovo treba da radi, pa bih kasnije probao i sa interruptom. U svakom slucaju hvala puno, pomogli ste mi u kom smeru treba da idem. Probao sam samo na AVR simulatoru, kada probam na ploci to cu izmeniti, evo konacnog koda:

Code:
sbit LCD_RS at PORTA2_bit;
sbit LCD_EN at PORTA3_bit;
sbit LCD_D4 at PORTA4_bit;
sbit LCD_D5 at PORTA5_bit;
sbit LCD_D6 at PORTA6_bit;
sbit LCD_D7 at PORTA7_bit;

sbit LCD_RS_Direction at DDA2_bit;
sbit LCD_EN_Direction at DDA3_bit;
sbit LCD_D4_Direction at DDA4_bit;
sbit LCD_D5_Direction at DDA5_bit;
sbit LCD_D6_Direction at DDA6_bit;
sbit LCD_D7_Direction at DDA7_bit;

void main() {

int i=0;
int j=0;

char txt1[]="";
char txt2[]="";

while(1){
     Lcd_init();
     if(PINC.b0=1) i++;  // C0 dugme za inkrementaciju 1. dogadjaja
     if(PINC.b2=1) i=0; // C2 reset dugme 1. dogadjaja
     ByteToStr(i, txt1);
     Lcd_Out(1, 3, txt1);
     
     if(PINC.b1=1) j++;  // C1 dugme za inkrementaciju 2. dogadjaja
     if(PINC.b3=1) j=0; // C3 reset dugme 2. dogadjaja
     ByteToStr(j, txt2);
     Lcd_Out(1, 9, txt2);
     
     
     if(i<j) Lcd_Out(2, 8, "<");
     if(i>j) Lcd_Out(2, 8, ">");
     if(i==j) Lcd_Out(2, 8, "=");
     Lcd_Cmd(_LCD_CURSOR_OFF);
     }
}

 
Odgovor na temu

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon Re: Brojač događaja - MikroC - Pomoć06.11.2016. u 21:11 - pre 89 meseci
Da li si negde možda čekirao "Interrupt on Change" ili "Pin Change Interrupt" ili slično?
Ovako kako je napisano ne može da radi, nemaš podešavanja ni portova, ni pinova (ulazni/izlazni), ni registara, tj. možda i imaš ali ne znaš da imaš
(to je ono kad sam rekao da je MikroC obično G****, jer ti nemaš uvid u kom trenutku i šta on radi "za tebe", nemaš uvid ni u jednu biblioteku... a to će ti kasnije samo stvarati probleme).
Javi se ovde molim te kad istestiraš program na pravom hardveru da diskutujemo
There are only 10 types of people in the world:
those who understand binary, and those who don't.
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.dynamic.mbb.telenor.rs.



Profil

icon Re: Brojač događaja - MikroC - Pomoć06.11.2016. u 22:19 - pre 89 meseci
Nisam jos radio sa interruptom, googlao sam malo i citao ono sto si mi poslao.
Ne znam ucitao sam ga na AVR simulator i radio mi je ok, malo sam korigovao kod zbog switch buttona za inkrementaciju, jer nisu lepo radili ono sto sam hteo.
Sto se tice podesavanja portova i pinova, potrebni su mi samo izlazni za LCD to sam definisao, za dugmice za inkrementaciju i reset ulazni koji su takvi po defaltu pa ih ne definisem. Izvini ako previse lajicki objasnjavam ili odgovaram jos sam bas puki pocetnik u ovome. :)
Naravno postavljam, sutra prekosutra kad se domognem ploce.
Evo malo modifikovanog koda:
Code:
sbit LCD_RS at PORTA2_bit;
sbit LCD_EN at PORTA3_bit;
sbit LCD_D4 at PORTA4_bit;
sbit LCD_D5 at PORTA5_bit;
sbit LCD_D6 at PORTA6_bit;
sbit LCD_D7 at PORTA7_bit;

sbit LCD_RS_Direction at DDA2_bit;
sbit LCD_EN_Direction at DDA3_bit;
sbit LCD_D4_Direction at DDA4_bit;
sbit LCD_D5_Direction at DDA5_bit;
sbit LCD_D6_Direction at DDA6_bit;
sbit LCD_D7_Direction at DDA7_bit;

void main() {

int i;
int j;
int x=0, y=0;

char txt1[4];
char txt2[4];

while(1){
     Lcd_init();
     if(PINC.b0==1) i=x+1; else x=i;// C0 dugme za inkrementaciju 1. dogadjaja
     if(PINC.b2==1) i=0; // C2 reset dugme 1. dogadjaja
     ByteToStr(i, txt1);
     Lcd_Out(1, 3, txt1);
     //Delay_us(10);
     
     if(PINC.b1==1) j=y+1;  // C1 dugme za inkrementaciju 2. dogadjaja
     else y=j;
     if(PINC.b3==1) j=0; // C3 reset dugme 2. dogadjaja
     ByteToStr(j, txt2);
     Lcd_Out(1, 9, txt2);
     //Delay_us(10);
     
     if(i<j) Lcd_Out(2, 8, "<");
     //Delay_us(10);}
     if(i>j) Lcd_Out(2, 8, ">");
     //Delay_us(10);}
     if(i==j) Lcd_Out(2, 8, "=");
     //Delay_us(10);}
     Lcd_Cmd(_LCD_CURSOR_OFF);
     }
     Delay_us(10);
}


Kako to izgleda na AVR Simu:
http://prntscr.com/d3yjls
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.dynamic.mbb.telenor.rs.



Profil

icon Re: Brojač događaja - MikroC - Pomoć16.11.2016. u 21:29 - pre 89 meseci
Nije loše prošlo ovo moje, ne može lepo da se radi bez interrupta, ali nisam znao da radim interrupte pa sam ovako jednostavno odradio...
Sad imam jedan zanimljiv projekat da uradim...
U pitanju je simulacija PIN i PUK koda. Dakle, potrebno je da uradim u MikroC simulaciju gde se pre ulaska u neki program (bilo koji... blinkalica obicna itd) traži unos PIN koda (4 cifre) koji je zadat u programa, a ukoliko se 3 puta pogreši traži unos PUK koda (8 cifara) takodje tri puta, nakon toga ne dozvoljava ulazak u program, dobro bi bilo kada bih mogao da promenim PIN kod nekako... Nemam ideju za to... Unos se vrši sa tastature 4x3 u interakciji sa LCD displejom. Radim preko MikroC na ploči EasyAVR5 sa ATmega16.
Svaka pomoć dobrodošla. Pozdrav.
 
Odgovor na temu

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon Re: Brojač događaja - MikroC - Pomoć17.11.2016. u 10:50 - pre 89 meseci
Rekao sam ti da moras da naucis interrupte.
Bez toga dalje neces moci...
To sto si sada zaobisao interrupte (ako si ih uopste zaobisao) ne resava stvar, stici ce te na sledecem projektu.
elem...
***************************************
Sto se drugog problema tice - guglaj guglaj guglaj!
http://www.engineersgarage.com...cts/interfacing-keypad-circuit
http://extremeelectronics.co.i...keypad-interface-avr-tutorial/

sa LCD si vec naucio da radis, mislim da nema potrebe o tome pisati (ako ima kazi, nacicemo i to).

Javljaj sta si uradio.
There are only 10 types of people in the world:
those who understand binary, and those who don't.
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
212.200.65.*



Profil

icon Re: Brojač događaja - MikroC - Pomoć12.02.2017. u 16:59 - pre 86 meseci
Nije me bilo neko vreme...
Shpiki hvala na pomoci, googlao sam i trazio... evo dokle sam stigao.

Code:

char keypadPort at PORTD;             //moduli za keypad 4x4
char keypadPort_Direction at DDRD;

sbit LCD_RS at PORTA2_bit;            //moduli za LCD displej
sbit LCD_EN at PORTA3_bit;
sbit LCD_D4 at PORTA4_bit;
sbit LCD_D5 at PORTA5_bit;
sbit LCD_D6 at PORTA6_bit;
sbit LCD_D7 at PORTA7_bit;

sbit LCD_RS_Direction at DDA2_bit;
sbit LCD_EN_Direction at DDA3_bit;
sbit LCD_D4_Direction at DDA4_bit;
sbit LCD_D5_Direction at DDA5_bit;
sbit LCD_D6_Direction at DDA6_bit;
sbit LCD_D7_Direction at DDA7_bit;


char PIN[4], pom[4], UPIN[4], PUK[8], UPUK[8];         //inicijalizacija promenjivih
unsigned short int k=0,znak=0, BNP=0, BNP2=0, p;

int Broj(unsigned short int k){  // f-ja koja vraca vrednost unetu sa tastature
     switch (k) {
      case  1: p = '1'; break;             // koju vrednost vraca keypad 4x3
      case  2: p = '2'; break;
      case  3: p = '3'; break;
      case  5: p = '4'; break;
      case  6: p = '5'; break;
      case  7: p = '6'; break;
      case  9: p = '7'; break;
      case  10: p = '8'; break;
      case  11: p = '9'; break;
      case  14: p = '0'; break;
    }
    return p;
}

void main(){
            DDRA=255;
            DDRD=0;

            Keypad_init();                //inicijalizacija
            Lcd_Init();
            Lcd_Cmd(_LCD_CLEAR);
            Lcd_Cmd(_LCD_CURSOR_OFF);
            Lcd_Out(1,6,"PIN:");

            PIN[0]='1';          //postavljanje PIN-a
            PIN[1]='9';
            PIN[2]='0';
            PIN[3]='5';
            PUK[0]='1';
            PUK[1]='1';
            PUK[2]='1';
            PUK[3]='1';
            PUK[4]='1';
            PUK[5]='1';
            PUK[6]='1';
            PUK[7]='1';
            znak=0;
            while(1){                        // beskonacna petlja
                      if(BNP<3){
                                while(k<4){                        // petlja sa promeljivom k za Broj
                                           znak = Keypad_Key_Press();         //promeljivoj znak dodeljuje se vrednost koju vraca f-ja Keypad_Key_Press()
                                           Broj(znak);                        //f-ja koja transformise vrednost unetu sa tastature u realnu vrednost
                                           while(znak!=0){                 //unos PIN-a
                                                          UPIN[k]=p;                       //smestanje PIN-a u prom p
                                                          Lcd_Chr(2, k+1,'*');             //ispisuje se * na displeju
                                                          delay_ms(4);
                                                          znak=0;
                                                          k++;
                                           }
                                }
                                if(k==4){                      // unesen poslednji deo PIN-a
                                         k=0;                            //postavlja se brojac na nulu
                                         while(1){                       //beskonacna petlja
                                                  if(PIN[0]==UPIN[0] &&
                                                     PIN[1]==UPIN[1] &&
                                                     PIN[2]==UPIN[2] &&
                                                     PIN[3]==UPIN[3]){       // provera PIN-a sa UPIN-om
                                                                      delay_ms(2);
                                                                      Lcd_Cmd(_LCD_CLEAR);
                                                                      LCD_Out(1, 2, "PIN prihvacen");     // Ukoliko se PIN i UPIN poklapaju ispisuje se poruka na displeju
                                                                      LCD_Out(2, 3, "DOBRODOSLI");
                                                                      delay_ms(3);
                                                                      break;
                                                     } //eof if
                                                  else{                             // ukoliko se ne poklapaju                              // brojac pogresno unetih PIN-ova
                                                       Lcd_Cmd(_LCD_CLEAR);
                                                       LCD_Out(1, 1, "Pogresan PIN");      // ispis na LCD-u u slucaju pogresnog unosa PIN-a
                                                       LCD_Out(2, 1, "Pokusajte ponovo");
                                                       delay_ms(2);
                                                       Lcd_Cmd(_LCD_CLEAR);
                                                       Lcd_Cmd(_LCD_CURSOR_OFF);
                                                       BNP++;
                                                  } //eof else
                                                  break;
                                         } //eof druge While(1)
                                } //eof if(k==4)
                                Lcd_Out(1,6,"PIN:");
                      }
                      else if(BNP2<9){
                                      Lcd_Out(1,6,"PUK:");
                                      while(k<8){
                                                 znak = Keypad_Key_Press();         //promeljivoj znak dodeljuje se vrednost koju vraca f-ja Keypad_Key_Press()
                                                 Broj(znak);                        //f-ja koja transformise vrednost unetu sa tastature u realnu vrednost
                                                 while(znak!=0){                 //unos PIN-a
                                                                UPUK[k]=p;                       //smestanje PIN-a u prom p
                                                                Lcd_Chr(2, k+1,'*');             //ispisuje se * na displeju
                                                                delay_ms(4);
                                                                znak=0;
                                                                k++;
                                                 }
                                      }
                                      if(k==8){                      // unesen poslednji deo PIN-a
                                               k=0;                            //postavlja se brojac na nulu
                                               while(1){                       //beskonacna petlja
                                                        if(PUK[0]==UPUK[0] &&
                                                           PUK[1]==UPUK[1] &&
                                                           PUK[2]==UPUK[2] &&
                                                           PUK[3]==UPUK[3] &&
                                                           PUK[4]==UPUK[4] &&
                                                           PUK[5]==UPUK[5] &&
                                                           PUK[6]==UPUK[6] &&
                                                           PUK[7]==UPUK[7]) {       // provera PIN-a sa UPIN-om
                                                                             delay_ms(2);
                                                                             Lcd_Cmd(_LCD_CLEAR);
                                                                             LCD_Out(1, 2, "PUN prihvacen");     // Ukoliko se PIN i UPIN poklapaju ispisuje se poruka na displeju
                                                                             LCD_Out(2, 3, "DOBRODOSLI");
                                                                             delay_ms(3);
                                                                             break;
                                                        } //eof if

                                                        else{                             // ukoliko se ne poklapaju                              // brojac pogresno unetih PIN-ova
                                                             Lcd_Cmd(_LCD_CLEAR);
                                                             LCD_Out(1, 1, "Pogresan PUK");      // ispis na LCD-u u slucaju pogresnog unosa PIN-a
                                                             LCD_Out(2, 1, "Pokusajte ponovo");
                                                             delay_ms(2);
                                                             Lcd_Cmd(_LCD_CLEAR);
                                                             Lcd_Cmd(_LCD_CURSOR_OFF);
                                                             BNP2++;
                                                        } //eof else
                                                        break;
                                               }  // eof while(1)
                                      } // eof if
                                      Lcd_Out(1,6,"PUK:");
                      } //eof else if
                      else if(BNP==9){
                                      Lcd_Cmd(_LCD_CLEAR);
                                      LCD_Out(1, 2, "Pogresan PUK");
                                      LCD_Out(2, 3, "KARTICA BLOKIRANA");
            }
}


Problem mi predstavlja EEPROM koji ne mogu bas da shvatim, pa sam odlucio prvo da uradim bez njega pa kasnije da ga ubacim. Dakle EEPROM ce mi biti potreban za memorisanje BNP (Broj neuspelih pokusaja PIN-a) i BNP2 (Broj neuspelih pokusaja PUK-a). Citao sam i gledao sampleove ali ne znam gde i kako da ubacim u kod.
P.S zanemariti deo komentara kod PUK koda, samo su prekopirani jer je kod kopiran pa modifikovan :D
Ako moze neka konkretnija pomoc bio bih zahvalan... Pozdrav
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Brojač događaja - MikroC - Pomoć12.02.2017. u 19:20 - pre 86 meseci
Kada uvećaš BNP upiši ga u eeprom
Code:

BNP++;
WriteEEPROM(BNP, BNP_ADDR);


Isto to i za BNP2.
BNP_ADDR ti je adresa u eepromu na kojoj smeštaš BNP.

Na početku main pročitaj ove dve vrednosti iz eeproma i dodeli ih promenljivima BNP i BNP2. Tako si isključio mogućnost da neko beskonačno pokušava unos pin i puk gašenjem uređaja.
gorankg
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
212.200.65.*



Profil

icon Re: Brojač događaja - MikroC - Pomoć12.02.2017. u 20:38 - pre 86 meseci
Hvala Gorane na odg. Tako sam nesto i mislio, samo me interesuje kako da izbegnem mogucnost da BNP i BNP2 dodelim vrednosti iz EEPROM-a koje su ranije korištene za neki drugi program. Dakle kako da "izbrišem" EEPROM, ali samo pri prvom korišćenju. Kako da izbegnem da dodelim neku pogresnu vrednost... To me remeti.

Dakle na početku main-a bih napisao sl

BNP=EEPROM_Read(0x01);
BNP2=EEPROM_Read(0x02);

dok bih nakon BNP++ i BNP2++ pisao u eprom

EEPROM_Write(0x01, BNP);
EEPROM_Write(0x02, BNP2);

?
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Brojač događaja - MikroC - Pomoć12.02.2017. u 20:42 - pre 86 meseci
Baš kako si i napisao.
Nema potrebe da brišeš išta. Kada upišeš prvi put u neku memorijsku lokaciju u njoj je smeštena vrednost sve dok ne upišeš novu.
gorankg
 
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: Brojač događaja - MikroC - Pomoć12.02.2017. u 20:51 - pre 86 meseci
obrati samo paznju da eeprom nije namenjen da u njega besomucno
pises/brises!!

ako budes na svaki pokret upisivao u eeprom gde si ima crkne za metar
dana koristenja
 
Odgovor na temu

scoolptor

Član broj: 305514
Poruke: 1620



+587 Profil

icon Re: Brojač događaja - MikroC - Pomoć12.02.2017. u 21:16 - pre 86 meseci
Mudro zbori Bogdan.
Ako upotrebis eksterni F-RAM IC, mozes da zaboravis za taj problem, ali se moras obezbediti od gubitka podataka.
 
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: Brojač događaja - MikroC - Pomoć12.02.2017. u 21:31 - pre 86 meseci
>
Broj(znak); //f-ja koja transformise vrednost unetu sa tastature u realnu vrednost


fali ti ovde (na oba mesta) p= ... dakle


p = Broj(znak);


komentari u kodu su ti plac majke bozije :( .. lepo je da imas komentare
ali nema potrebe komentarisati ocigledne stvari, iritira u pm.. ovoliki
ident pravi kod uzasno necitljivim :( takodje
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Brojač događaja - MikroC - Pomoć

Strane: 1 2

[ Pregleda: 4105 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

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