Sari la conținut
ELFORUM - Forumul electronistilor

Cum sa programez un PIC


sofian

Postări Recomandate

Salut, nu vreau să par măgar dar mai am de convertit un cod sursă în hex. Acesta e făcut pentru pic16f877a și din ce am înțeles e similar cu pic16f876A vreau să mi-l compilezi pentru pic16f876a și cu cuarț de 4 MHz, și vreau să adaugi un mesaj de start up dacă se poate. Mesaj”Hello Handsome” . Apreciez gestul mulțumesc. Atașez arhiva cu tot ce trebuie.

Link spre comentariu
  • 5 săptămâni mai târziu...
  • Răspunsuri 602
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    54

  • Vlad Mihai

    28

  • bbogdanmircea

    27

  • seichter

    24

Top autori în acest subiect

Imagini postate

Salut, poate mă ajută cineva cu o ideea despre cum se foloseşte comparatorul intern al unui pic16f876A ca să compare o tensiune de referinţă cu o tensiune divizată din tensiunea de ieşire a unui boost converter pentru ca apoi să modifice factorul de umplere în funcţie de ce compară pentru a menţine tensiunea setată egală cu cea de ieşire.

Link spre comentariu
  • 2 săptămâni mai târziu...
Vizitator alyfast

Va salut ! Am si eu o problema cu programarea unui PIC 12f675/629. Am folosit winPic si ICProg. Incarc fisierul (hex-ul), ii dau scriere; totul ok. Cand fac verificarea imi da eroare la o anumita adresa si in FLASH e gol, defapt e 000 nu FF iar in EEPROM sunt exact datele care trebuie, deci lipsesc datele din flash. Am atasat niste poze si hex-ul care trebuie scris. Mentionez ca am incarcat un alt hex, folosind aceleasi programe si totul e ok. Programatorul este facut dupa o schema postata aici de colegi (JDM Programmer). Am uitat sa spun ce este defapt : un roger beep (ma rugat un amic sa-i fac asa ceva). Multumesc anticipat,

Link spre comentariu
Vizitator alyfast

Multumesc @costi, nu am stiut acest aspect, sunt novice in microcontrolere. Pic-ul a fost pus in montaj (unul extrem de simplu, quart, 2 condensatoare si o rezistenta) dar nu functioneaza; Sunt 7 tonalitati diferite care se schimbau in functie de apasarea unei taste, nu se aude absolut nimic, doar un mic pacanit cand alimentez montajul.

Link spre comentariu
Vizitator alyfast

Revin cu noutati. Am programat un 12f675 in capsula normala (nu smd, inainte programasem 12f629 smd) cu winpic, l-am scos din programator, pus pe placa si alimentat : rezultat ok, functiona. Am repetat inca odata operatiunea cu programarea, dar dupa ce s-a terinat programarea i-am dat o citire surpriza, nu a mai functionat. Concluzia care am tras-o eu e ca nu mai trebuie citit dupa ce a fost programat. Doar asa imi functioneaza. Multumesc pentru sprijin.

Link spre comentariu

Salut,

 

sunt un incepator in ale controllerelor si nu am programat niciodata un PIC doar un ATmega odata mai demult.

Vreau sa realizez acest capacimetru: http://www.romanblack.com/onesec/CapMeter.htm si nu stiu cum trebuie sa procedez sa scriu acesl HEX in PIC.

 

Am vazut ca exista niste scheme simple pe portul serial ptr programarea PIC-ului insa nu stiu ce sa bifez in softul de scriere. La Atmega stiu ca era vorba de FUSEBITs dar la PIC habar nu am.

 

Imi puteti da niste sfaturi simple si la obiect ?

 

Multumesc !

Link spre comentariu
  • 3 săptămâni mai târziu...

ma chinui sa fac un mic soft de voltmetru cu pic dar am o eroare la compilare, si cred ca e de la compilator pentru ca cu alt cod bun care a fost compilat cu succes pe alt pc la fel face. atasez detalii

// LCD module connectionssbit LCD_RS at RA0_bit;sbit LCD_EN at RA1_bit;sbit LCD_D4 at RB4_bit;sbit LCD_D5 at RB5_bit;sbit LCD_D6 at RB6_bit;sbit LCD_D7 at RB7_bit;sbit LCD_RS_Direction at TRISA0_bit;sbit LCD_EN_Direction at TRISA1_bit;sbit LCD_D4_Direction at TRISB4_bit;sbit LCD_D5_Direction at TRISB5_bit;sbit LCD_D6_Direction at TRISB6_bit;sbit LCD_D7_Direction at TRISB7_bit;// End LCD module connectionsunsigned int Tensiune1, Tensiune1_b, Tensiune1_c, Tensiune1_medie;unsigned int Tensiune2, Tensiune2_b, Tensiune2_c, Tensiune2_medie,  a, b; unsigned long u;unsigned char ch;void main(){  TRISA      = 0xFF;                       // designate PORTA as input  //INTCON = 0;                              // Disable all interrupts  //IRP_bit = 1 ;  Lcd_Init();                        // Initialize LCD  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off  Lcd_Cmd(_LCD_CLEAR);               // Clear display  Delay_ms(100);  LCD_Out(1,2,"Hello Handsome!");  LCD_Out(2,2,"VoltAmperMeter");  Delay_ms(1500);  Lcd_Cmd(_LCD_CLEAR);               // Clear display  while (1)    {      for (b ; b < 2; b++) {       Lcd_Cmd(_LCD_CLEAR);      }      // tensiune1      Tensiune1=ADC_read(2);                // get ADC value for U from channel 2      delay_ms(30);      Tensiune1_b=ADC_read(2);      delay_ms(30);      Tensiune1_c=ADC_read(2);      delay_ms(30);      Tensiune1_medie=((Tensiune1_c+Tensiune1_b+Tensiune1)/3);      u=(long)Tensiune1_medie*5000;               // covert adc reading to milivolts      u=u/1023;                            // 0..1023 -> 0-3500mV      ch=u/1000;                           // extract 10.00 U digit      if (ch==0)        {          LCD_Chr(1,1, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(1,1,48+ch);              // write ASCII digit at 1st row, 2nd column        }      ch=(u/100) %10;                      // extract 01.00 U digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      LCD_Chr_CP('.');                     // write '.' at cursor point      ch=(u/10) %10;                       // extract 00.10 U digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      ch=u %10;                            // extract 00.01 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      LCD_Chr_CP('V');                    // write 'V' at cursor point      //tensiune2      Tensiune2=ADC_read(3);                // get ADC value for U from channel 1      delay_ms(30);      Tensiune2_b=ADC_read(3);      delay_ms(30);      Tensiune2_c=ADC_read(3);      delay_ms(30);      Tensiune2_medie=((Tensiune2_c+Tensiune2_b+Tensiune2)/3);      u=(long)Tensiune2_medie*5000;               // covert adc reading to milivolts      u=u/1023;                            // 0..1023 -> 0-3500mV      ch=u/1000;                           // extract 10.00 U digit      if (ch==0)        {          LCD_Chr(2,2, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(2,2,48+ch);              // write ASCII digit at 1st row, 2nd column        }      ch=(u/100) %10;                      // extract 01.00 U digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      LCD_Chr_CP('.');                     // write '.' at cursor point      ch=(u/10) %10;                       // extract 00.10 U digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      ch=u %10;                            // extract 00.01 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      LCD_Chr_CP('V');                      }      Delay_ms(300);                        // Waits 300ms}

post-65525-139829523126_thumb.jpg

Link spre comentariu

Salutare.Am si eu o problema cu cu PIC16F887, toate porturile sunt scoase pe pini.Am pornit PWMurile de pe PORTC la care am conectat un driver LS293D.Pe PORTB am un afisaj de 7 segment pe care afisaj secundele de la 0 la 9...Ce doresc sa mai fac este sa pun pe pinii RA7 ... RA4 4 butoane din care sa incrementez decrementez duty cycle de la cele 2 PWMuri.Am conectat butoanele astfel:de la VDD am tras la pin prin rezistenta de 1 K.De la pin butonul prin apasare trage la masa.Am scris si soft destul de simplu adica daca este apasat RA7 atunci sa incrementeze PWM1 daca este apasat RA6 sa decrementeze etc...Din pacate nu functioneaza...Am pus si un modulas cu leduri pe PORTC ca sa vad cum ies semnalele si am scris cod ca PORTC sa afiseze exact ce citeste PORTA si tot nu merge adica se aprind de aiurea ledurile...Nu stiu ce poate sa fie...m-am enervat aseara si am lasat-o balta...O sa incerc astazi sa citesc butoanele de pe alt port de exemplu de de PORTD, am vazut ca pinii de pe PORTA sunt multi functionali si poate se incurca ceva pe acolo...Daca mai aveti si alte idei despre ce ar putea fi va rog sa postati...Alte mentiuni:-folosesc cuart extern de 20 MHz-ca si programator am Pickit2, daca alimentez din programator imi arata VDD la 4 V dar cred ca e ok ptr nivel HIGH-am masurat si PORTA este tras la masa cand apas pe buton...-E posibil sa fie prea mica rezistenta de 1K sa pun mai mare de 10K la VDD?Alte cauze idei care ar putea sa fie?

Link spre comentariu

Vreau si eu sa citesc 4 butoane ma ajuta si pe mine cineva pls?///////////////////////////////////////////////////////////////////////////////////////////this routine is to check key2 pressings.//input: none //output: 0 if switch is not pressed. 1 if switch is pressed. /////////////////////////////////////////////////////////////////////////////////////////unsigned char is_sw2_pressed(void){ if (PORTDbits.RD6==0) // is SW1 pressed? { //yes DelayMs(10); // wait 10mS for debounce. if (PORTDbits.RD6==0) // is SW1 still has pressed status after 10mS delay? { // yes, we have key press return 1; } } return 0;// if key is not pressed, return 0}TRISC =0b00000000;TRISB =0b00000000;TRISD =0b11111111;for (;;){ if(is_sw1_pressed()==1) // is key 1 pressed { // yes RC7=1; // turn ON LED1 } if(is_sw2_pressed()==1) // is key 2 pressed { // yes RC7=0; // turn ON LED2 } } }

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări