Jump to content
ELFORUM - Forumul Electronistilor
asyx

ajutor cu un program pentru pic 12c508

Recommended Posts

buna ziuaas dori un program care sa faca urmatorul lucru:-la apasarea unui buton sa am 5v pe o iesire-la urmatoarea apasare sa am 5v pe o alta iesire.am nevoie doar de doua iesiripractic,la fiecare apasare,sa fie comutata tensiunea alternativ,cand pe una ,cand pe cealaltamultumesc

Share this post


Link to post
Share on other sites

1. PIC12C508 este OTP adică One Time Programmable deci orice modificare ulterioară ( datorată unei greșeli sau unei alte cauze ) nu mai poate fi corectată. Apropo , este nou ? Că dacă este recuperat ....2. Problema o rezolvi foarte ușor cu un bistabil de tip ”toggle”.3. Dacă totuși insiști să programezi un PIC pentru chestia asta , ce program îți trebuie ? HEX-ul? Ai programator ?

Share this post


Link to post
Share on other sites

program are un coleg de la servici deci nu este o problema de programarepic-ul este nou.pot folosi si 12f508 pentru probe.daca ai o alta schema care nu necesita pic,e buna si aia

Share this post


Link to post
Share on other sites

1.Schema atașată face ce dorești. Condensatorul de pe intrare ( din paralel cu butonul ) pote necesita să fie mărit ca să nu apară impulsuri multiple din cauza vibrației în contact.

2. Nu am întrebat dacă ai program ci ce program , adică .hex , .asm , .c , etc. Am întrebat dacă ai programator.

 

PS Până am desenat eu , ai mai primit o sugestie.

post-14234-139829744884_thumb.png

Share this post


Link to post
Share on other sites

modoran,schema este ok dar mie imi trebuie 2 iesiri separate din acelasi buton

Share this post


Link to post
Share on other sites

Pai ai 2 iesiri deja in varianta cu CDB473, iar in cea postata de mine mai adaugi un etaj inversor cu un tranzistor si realizezi acelasi lucru.

Share this post


Link to post
Share on other sites

1.Schema atașată face ce dorești. Condensatorul de pe intrare ( din paralel cu butonul ) pote necesita să fie mărit ca să nu apară impulsuri multiple din cauza vibrației în contact.

2. Nu am întrebat dacă ai program ci ce program , adică .hex , .asm , .c , etc. Am întrebat dacă ai programator.

 

PS Până am desenat eu , ai mai primit o sugestie.

da,are inclusiv programator

am sa incerc schema trimisa

Share this post


Link to post
Share on other sites

Pai ai 2 iesiri deja in varianta cu CDB473, iar in cea postata de mine mai adaugi un etaj inversor cu un tranzistor si realizezi acelasi lucru.

da corect.trebuie sa-l inghesui intr-un loc foarte ingust si prefer varianta cu integrat

Share this post


Link to post
Share on other sites

Din pacate uC-urile astea cu instructiuni pe 12bit nu prea mai sunt suportate de compilatoare, poate compilatoarele Microchip sa le suporte.

Share this post


Link to post
Share on other sites

Că nu-l suportă compilatoarele n-ar fi mare bai ( la ce cod e de scris ! ) . Habar nu am cu ce se programează - cu PICkit2 nu și cu WinPIC nu. Cu altele nu am lucrat. De aia l-am și întrebat pe OP.

Share this post


Link to post
Share on other sites

Daca se razgandeste uite un cod pentru PIC12F675 (care nu costa o avere este 4 ...5 lei bucata) scris in mikroC.

 

Intrarea este activ low pe pinul 2 (se pune o rezistenta de 4.7K din pin catre VCC, swich-ul de la pin catre GND), iesirile sunt pe pinii 5 si 6.

 

Cand se compileaza trebuie compilat cu optiunea oscilator intern ca sa nu fie conflicte legate de pinul 2 (intrarea cu switch).

 

Atasez si un .hex (netestat) cu setarile (de fapt e tot proiectul, in arhiva este si .hex-ul):

 

Oscilator intern ON cu frecventa 1Mhz (ii ajunge, poate il foloseste alimentat de la o baterie)

Watchdog OFF

Powerup Timer OFF

MCLR OFF

Brown Out OFF

Code & data protection OFF

 

RAM ocupat 6%, ROm ocupat 7%

 

 

bit old_state;      //variabila care tine minte starea intrariivoid main ( ){      ANSEL = 0;   //dezactivez ADC      CMCON = 7;   //dezactiveaza comparator      TRISIO = 0b00100000 ;  //setez GPIO 5 ca intrare, restul sunt iesiri      GP1_bit = 0;   //setez iesirea GPIO1 cu LOW. La initializare GPIO 1 este LOW.      GP2_bit = 1;   //setez iesirea GPIO2 cu HIGH. La initializare GPIO 2 este HIGH.      while ( 1 )             {       // bucla infinita              if ( GP5_bit == 0 )          {  //testez daca switch-ul a fost apasat, este activ low             delay_ms (50);   //un debounce pentru switch             if ( GP5_bit == 0 )             {                old_state = 1;    //switch activ             }          }          if ( (old_state == 1) && (GP5_bit == 1) )          {   //determin tranzitia de la activ la inactiv a switch-ului              //pun conditia ca anterior butonul sa fi fost apasat adica si old_state = 1              delay_ms (50);  //un debounce pentru switch              if ( (old_state == 1) && (GP5_bit == 1) )              {                    old_state = 0;     //switch inactiv                    GP1_bit = ~GP1_bit;                    GP2_bit = ~GP2_bit;              }          }          delay_ms (100);        }}

test1.zip

Share this post


Link to post
Share on other sites

am sa incerc initial schema cu 473dar am sa cumpar si un 12f675multumesc pentru ajutor

Share this post


Link to post
Share on other sites

Cum afara ninge si viscoleste ... o versiune noua (netestata) pentru cazul cand se doreste ca iesirile sa fie LOW pana se apasa odata butonul cand una dintre ele trece in HIGH, se foloseste versiunea aceasta (aceleasi setari ca si in postul anterior):

 

bit old_state;      //variabila care tine minte starea iesirilorvoid main ( ){      ANSEL = 0;   //dezactivez ADC      CMCON = 7;   //dezactiveaza comparator      TRISIO = 0b00100000 ;  //setez GPIO 5 ca intrare, restul sunt iesiri            GP1_bit = 0;   //setez iesirea GPIO1 si GPIO2 cu LOW. La initializare iesirile vor fi LOW      GP2_bit = 0;      old_state = 0;            while (!old_state)    //se sta in aceasta bucla pana se apasa butonul.      {            if ( GP5_bit == 0 )          {  //testez daca switch-ul a fost apasat             delay_ms (50);   //un debounce pentru switch             if ( GP5_bit == 0 )             {                old_state = 1;    //switch activ             }          }      }            GP1_bit = 0;   //setez iesirea GPIO1 cu LOW. Setez iesirea GPIO2 cu HIGH.      GP2_bit = 1;   //practic dupa prima apasare a butonului se activeaza una dintre iesiri      //GP1_bit = 0 este redundanta, se poate elimina      old_state = 0;      while ( 1 )      {       // bucla infinita          if ( GP5_bit == 0 )          {  //testez daca switch-ul a fost apasat             delay_ms (50);   //un debounce pentru switch             if ( GP5_bit == 0 )             {                old_state = 1;    //switch activ             }          }          if ( (old_state == 1) && (GP5_bit == 1) )          {   //determin tranzitia de la activ la inactiv a switch-ului              //pun conditia ca anterior butonul sa fi fost apasat adica si old_state = 1              delay_ms (50);  //un debounce pentru switch              if ( (old_state == 1) && (GP5_bit == 1) )              {                    old_state = 0;     //switch inactiv                    GP1_bit = ~GP1_bit;                    GP2_bit = ~GP2_bit;              }          }          delay_ms (100);        }}

test2.zip

Share this post


Link to post
Share on other sites

Dacă tot te decizi pentru PIC poți folosi și PIC12F629 ( fără ADC ) ștergând doar rândul cu configurarea ADC. - ANSEL = 0;

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.