Led na 16f887

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Led na 16f887

Post by hary »

Pozdrav decki ...
Duze vrijeme pokusavam napisati kod u mikroC-u koji ce na jednom tasteru paliti led diode, na zalost ne ide mi to za rukom.Pa bih molio da mi pomognete.Rijec je o projektu sa dva tastera i kad pritisnem jedan taster upali se jedna led , kad ponovo pritisnem isti taster da se upali sljedeca led dioda i tako dalje... Kada pritisnem drugi taster trebale bi se ledice paliti u obrnutom smjeru ( ako je upalita dioda 5 , kada pritisnem taster upali se dioda 4) ... imam i shemu koju sam napravio, bio bih vam zahvalan...

evo sheme : http://prntscr.com/rof5a
User avatar
kizbaja
Odlično uznapredovao
Odlično uznapredovao
Posts: 904
Joined: 18-11-2010, 15:26
Location: Croatia, Rijeka

Re: Led na 16f887

Post by kizbaja »

sema ti ne valja
kad pritisnes taster napravis kratki spoj a i ledice ti nisu nigdje spojene (izbaci konektor)
Nikad briga, nikad stres, pijte samo Kraš Express
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

Pa sta vi predlazete konkretno kako da prepravim shemu ?
User avatar
gurko
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 241
Joined: 18-03-2011, 19:28
Location: Srednja BiH

Re: Led na 16f887

Post by gurko »

Prvo, gdje ti je drugi taster?
Drugo,ovaj postojeci taster ti je posgresan. Izmedju napajanja i tastera ubaci otpor od 1Kohma na strani koja ide na port, a drugu stranu tastera samo stavi na masu. Na slican nacin postavi i drugi taster. Naravno na drugi ulaz.
Trece, da bi ti mogli pomoci postuj kod programa u C-u. Mozda i tu imas gresku.
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

Evo prepravio sam shemu jel sad ok ?
http://i.imgur.com/C0dHLui.png
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Led na 16f887

Post by bob4 »

Krivo; otpornik treba ići prema VCC (+)
Nakon toga tipkalo prema GND
A sredina na PIC
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

Evo sad sam napravio pravu shemu
http://i.imgur.com/YLQ9ep1.png

Ali ne razumijem kako da napisem if petlju tako da mjenjam pinove i portove .

NPR.
if(Button(&PORTA,0,10,1));
{
upaliti sljedeci pin // ako je bio upaljen pin 0 porta a on da upali pin 1 porta a;
}
if(Button(&PORTA,1,10,0));
{
upaliti predhodni pin // ako je bio upaljen pin 1 upaliti pin nula na istom portu...
}
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Led na 16f887

Post by bob4 »

Još da staviš otpornike u seriju sa LED. :D
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

To provjereno radi. Samo je problem naredba IF.
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Led na 16f887

Post by bob4 »

Ali će u stvarnosti izgoriti LED ili PIC (jedino ako ti LED nije za 5V; u što sumnjam) :?
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

Dobro to znam ... Jel ima neko da mi moze pomoc ?
Maki
Odlično uznapredovao
Odlično uznapredovao
Posts: 766
Joined: 02-07-2012, 12:54

Re: Led na 16f887

Post by Maki »

Ajd da probam ja al ne znam jel ce to tak radit. Najme moja ideja je paljenje ledica tako da se npr. porta.0 = 1 da je isto sto i porta = 1 , zatim porta.1=1 isto sto i porta = 2 , porta.3 = 2 isto sto i porta = 4 . sad ne znam jel to tocno mislim da pise u datasheetu te adrese od svakog pina na portu. Uglavno promotris za kolko rastu jedan u odnosu na drugi i obratno te nekaj inskombiniras. Ak nece tak e onda ima i drugi (duzi) nacin al ne znam koliko je ispativ ...
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

Neide kolega to bas tako.On treba da mjenja stanja tako da je jedan upalit a svi ostali ugasiti...
vukboban
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 212
Joined: 05-12-2008, 17:49
Location: Pancevo

Re: Led na 16f887

Post by vukboban »

Uvedes u igru neku promenljivu!
pa onda "if taster1 povecaj promenljivu" ili "if taster2 smanji promenljivu".
Tek onda ide"portA=promenljiva"
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

Evo kako sam ja to rijesio , ali ne radi kad hocu da idem u nazad, radi samo naprijed.

if(Button(&PORTA, 0, 100, 0))
{
i=i+1;
if(i>3)
{
i=0;
}
if(i<=3)
{
PORTC = maska(i); //MASKA
}
}
if(Button(&PORTA, 1, 100, 0))
{
g=i-1;
PORTC = maska(g); //MASKA
}
}
unsigned short maska ( unsigned short kombinacija) {
switch (kombinacija) {
case 0 : return 0x01;
case 1 : return 0x02;
case 2 : return 0x04;
case 3 : return 0x08;
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Led na 16f887

Post by Kukinjos »

Nisam nikakav stručnjak za C, ali evo pokušat ću. Ovo sam napisao za PIC16F877, dakle promijeni ADCON1 u ANSEL = 0x00; za PIC16F887. Mislim da ćeš kod razumjeti:

Code: Select all

unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);
unsigned short i = 1;

void main()
{
  ADCON1 = 0x07;               // PORTA je digitalni
  TRISA = 0xFF;                // PORTA je ulazni
  TRISC = 0;                   // PORTB je izlazni

  do                           // glavna petlja
  {
    if(Button(&PORTA, 0, 100, 0))  // ako je tipka na PORTA.0 pritisnuta (lijevi pomak)
    {
      i = i << 1;              // pomakni bit za jedno mjesto lijevo
      if ( i > 8 )             // ako je preko zadnjeg
      {
          i = 1;               //vrati ga na prvi
      }
    }


     if(Button(&PORTA, 1, 100, 0))  // ako je tipka na PORTA.1 pritisnuta (desni pomak)
    {
      i =  i>> 1;              // pomakni bit za jedno mjesto desno
      if ( i < 1 )             // ako je ispod prvog
      {
          i = 8;               // vrati ga na zadnji
      }
    }
    PORTC = i;                 // "ispiši" na PORTC
  }
  while(1);                    // vrati se na početak petlje
  }
Kod sam provjerio na hardware-u, pa neću nikakve reklamacije :D
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
hary
Penjem se :)
Penjem se :)
Posts: 65
Joined: 07-10-2009, 20:25

Re: Led na 16f887

Post by hary »

Stvarno ne radi , nerazumijem zasto.Kad kopiram cijeli kod i ispravim ovo sto si rekao , pokranem simulaciju stalno mi gori prva ledica, koji god prekidac pritisnem ona gori. :shock:
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Led na 16f887

Post by Kukinjos »

A da pridržiš prst na mišu malo duže, dok pritišćeš tipku :wink:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Led na 16f887

Post by Kukinjos »

Uostalom, evo ti cijeli direktorij s simulacijom, kodom hex-om, i to za tvoj procesor PIC16F887.
https://www.dropbox.com/s/c04y67cp180t9ep/Hary.rar
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Post Reply