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: 4103 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
212.200.65.*



Profil

icon Re: Brojač događaja - MikroC - Pomoć12.02.2017. u 21:50 - pre 86 meseci
Hvala na sugestijama, ali nisam u mogucnosti da biram iz raznih okolnosti, a trazi mi se rad sa EEPROMom tako da nije stvar prakticne prirode. :D

Slazem se Bogdane ispravicu to...komentari su takodje zbog samog projekta gde se trazi opis koraka, doduse, vrv je previse detaljan.
 
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 22:04 - pre 86 meseci
zavisi koliko imas upisa u eeprom, ako ces da brojis do 10 i to je to,
sledeci put procitas, vidis 10, kazes "pali majmune" to znaci imaces
ukupno 10 pisanja u eeprom i to nije problem .. ako ces pri svakoj
promeni da nesto brljas i pises tamo onda imas problem .. cisto reko da
budes svestan

sto se tice komentara, izbaci ocigledne stvari "ovde se dodeljuje
vrednost promenjljivoj" je tupav komentar, komentari treba da
komentarisu sta neki blok koda radi i zasto, ne sta jedna linija koda
radi, to se vidi iz te linije ... while(1) je svakako mrtva petlja, ko
to ne vidi nece mu pomoci komentar :D .. sa druge strane treba da
oznacis "ovde citam pin", "nisam dobio pin x puta, sad trazim puk"...
dakle komentarises sta neki blok koda radi i zasto, ne sta radi jedna
linija koda..

ono za Broj(), za pocetak nemoj nazivas funkcije velikim slovo uzasno
je, drugo to sto u funkciji imas "return p" ne znaci da ce da dodeli
vrednost van skopa te funkcije bilo cemu, znaci mora stagod funkcija(...) ..

ono sto je mnogo korisnije - daj varijablama pametna imena, varijabla
"p" je beskorisna...

aj samo napred lepo to ide za sada :D
 
Odgovor na temu

noterry94
student
Beograd

Član broj: 335273
Poruke: 11
*.3gnet.mts.telekom.rs.



Profil

icon Re: Brojač događaja - MikroC - Pomoć26.02.2017. u 18:34 - pre 86 meseci
Evo neka verzija blizu konačne...

Code:

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

sbit LCD_RS at PORTA2_bit;            //inicijalizacija 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], UPIN[4], PUK[8], UPUK[8], p, e;         //inicijalizacija promenjivih
unsigned short int k=0,znak=0, BNP=0, BNP2=0;

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();
     Lcd_Init();

     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;
     
     e=EEPROM_Read(0x00);          //ucitavanje podataka sa EEPROM-a
     if(e=0xFF){                    //ukoliko je EEPROM prazan
        EEPROM_Write(0x00, BNP);
        EEPROM_Write(0x01, BNP2);
        }
     BNP=EEPROM_Read(0x00);
     BNP=EEPROM_Read(0x00);
     
     while(1){
           if(BNP<3){                    //ukoliko je br neuspesnih pokusaja unosa PIN-a manji od 3
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Cmd(_LCD_CURSOR_OFF);
              Lcd_Out(1,6,"PIN:");
              while(k<4){                   //unos PIN-a
                    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;
                          Lcd_Chr(2, k+1,'*');
                          delay_ms(400);
                          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
                                  Lcd_Cmd(_LCD_CLEAR);
                                  while(1){
                                  LCD_Out(1, 2, "PIN prihvacen");     // Ukoliko se PIN i UPIN poklapaju ispisuje se poruka na displeju
                                  LCD_Out(2, 3, "DOBRODOSLI");
                                  delay_ms(3000);
                                    }
                           }
                    else{                             // ukoliko je PIN pogresan
                         Lcd_Cmd(_LCD_CLEAR);
                         LCD_Out(1, 1, "Pogresan PIN");
                         LCD_Out(2, 1, "Pokusajte ponovo");
                         delay_ms(3000);
                         Lcd_Cmd(_LCD_CLEAR);
                         Lcd_Cmd(_LCD_CURSOR_OFF);
                         BNP++;
                         EEPROM_Write(0x00, BNP);
                      }
                    break;
                    }
                  } //eof if(k==4)
                }  //eof if(BNP<3)
              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;
                             Lcd_Chr(2, k+1,'*');
                             delay_ms(400);
                             znak=0;
                             k++;
                             }
                        }
                   if(k==8){                      // unesen poslednji deo PIN-a
                   k=0;
                   while(1){
                       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 PUK-a sa UPUK-om
                                  Lcd_Cmd(_LCD_CLEAR);
                                  while(1){
                                      LCD_Out(1, 2, "PUK prihvacen");
                                      LCD_Out(2, 3, "DOBRODOSLI");
                                      delay_ms(3000);
                                      }
                                  }
                       else{                             // pogresan unos PUK-a
                          Lcd_Cmd(_LCD_CLEAR);
                          LCD_Out(1, 1, "Pogresan PUK");
                          if(BNP2<8) LCD_Out(2, 1, "Pokusajte ponovo");
                          delay_ms(2000);
                          Lcd_Cmd(_LCD_CLEAR);
                          Lcd_Cmd(_LCD_CURSOR_OFF);
                          BNP2++;
                          EEPROM_Write(0x01, BNP2);
                        }
                        break;
                       }
                   }
              } //eof else if
           else if(BNP2==9){
               Lcd_Cmd(_LCD_CLEAR);
               while(1){
                  LCD_Out(1, 2, "Pogresan PUK");
                  LCD_Out(2, 1, "KARTICA BLOKIRANA");
                 }
            }
      } //eof while(1)
} //eof void main()


Prihvatio sam sugestioje, malo preuredio itd.
E sad mi se javlja jedan problem koji ne znam kako da ga resim, mozda sam ga i ranije pominjao.
Dakle, ploča nije moja, da kazem da je za javnu upotrebu, znaci na njoj i drugi razvijaju projekte itd. Tu se javlja moj problem zbog EEPROM-a (dakle EEPROM moram da koristim jer je jedini vid stalne memorije na ploči EASYAVR5 koju koristimo). Moj program bi trebalo da radi ako se uzme pretpostavka da je EEPROM prazan, dakle ili da pre toga nije korišćen ili da je bačen pod UV lampu. Pošto je mala mogućnost tako nečemu, ne znam ako da napravim da on može da radi i ako je npr na 0x00 upisano br 415 od ranijeg korišćenja. :/
 
Odgovor na temu

goran_68

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



+81 Profil

icon Re: Brojač događaja - MikroC - Pomoć26.02.2017. u 19:22 - pre 86 meseci
Ovo ti nije dobro:

Code:
if(e=0xFF){


Treba:

Code:
if(e==0xFF){


U EEPROM-u moraš imati validnu vrednost za BNP ili ti pada koncepcija.
Jedno od rešenja je da na pritisnutu neku kombinaciju tastera uređaj briše u EEPROM-u sadržaj te lokacije i postavlja ga na nulu. Recimo, držiš pritisnuta dva ili tri tastera, uključiš uređaj i on postavi tu lokaciju u EEPROM-u na nulu.

gorankg
 
Odgovor na temu

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

Strane: 1 2

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

Postavi temu Odgovori

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