Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   991 / 1207
(#) korat hozzászólása Nov 10, 2017 /
 
Sziasztok. Arra keresném a választ, hogy mi a metódusa egy új program égetésének, ha már van rajta egy. Előbb törölni kell a program memóriát, vagy csak simán rátöltöm. Sok cikket elolvastam de erre nem igazán térnek ki sehol konkrétan. Mivel nem vennék programozót, és a laptopon nincs megfelelő port saját égető készítéséhez, egy RaspberryPi-t használnék LVP-vel. Ha azzal felrakok egy bootloadert akkor már megy USB-n az égetés. A másik kérdés, hogy bár ajánlott a kódvédelem a boot területre, de ugye nem feltétlen szükséges? Ha mégse sikerülne az égetés, akkor már felejthetném az LVP-t. A célszemély egyébként egy PIC18F4550. (Első PIC kísérletem)
(#) Pali79 válasza korat hozzászólására (») Nov 10, 2017 /
 
Az új program feltöltése mindig törléssel kedődik, legalábbis a gyári programozó úgy csinálja.
(#) Hp41C válasza f2f2 hozzászólására (») Nov 10, 2017 /
 
Idézet:
„CP rá volt kapcsolva a CPD nem. Ilyenkor nem lehet sehol semmi változtatást eszközölni jól gondolom ?”

A programozási specifikáció szerint az adat EEProm kiolvasható, ha a CP be van kapcsolva, de a CPD nincs. Nem tér ki arra az esetre, hogy az adat EEProm módosítható-e ICSP segítségével ilyen esetben.
(#) korat válasza Pali79 hozzászólására (») Nov 10, 2017 /
 
Köszönöm. Akkor elméletileg bízhatok benne, hogy a Raspberryre írt program is ezt fogja tenni. Kipróbizom, és meglátjuk.
(#) Pali79 válasza korat hozzászólására (») Nov 10, 2017 /
 
Ha komolyan érdekel a téma érdemes egy pickit-be beruházni, nem feltétlenül kell eredetit venni.
(#) pajti2 válasza korat hozzászólására (») Nov 11, 2017 /
 
Nem tudom, merre találtál valami blogot egészében, hogy valaki kezedbe adja a raspot is, a programot is, és videót is készített róla, hogyan rakd egybe, hogyan használd, de a legtöbb blog gazdája nem annyira okos, mint hiszi magáról. Néha egészen hihetetlenül figyelmetlenek (és még ostobák is belátni, hiába ír rájuk az ember). Szóval ne szontyolodj majd el nagyon, ha minden baja lesz a kísérletnek. Nem lehetetlen egyébként összehozni, de valószínűleg szükséges lesz a programozás részleteibe neked magadnak beletanulnod. Van róla pdf, mi mindent kellene buksiba gyömöszölni (bizony nem keveset). Kezdésnek talán ezt: Bővebben: Link
(#) jocka0012 hozzászólása Nov 11, 2017 /
 
Üdv!Egy ds1307 rtc-t szeretnék feléleszteni pic16f877A-val C-ben több kevesebb sikerrel.Az a jelenség , hogy kiküldöm i2c-n a 0XD1 (RTC címe + olvasás parancs) címet utána kiküldöm mondjuk a 0x00-as címet , hogy onnan szeretnék olvasni.Ezután elvileg vissza is küld egy értéket az rtc , de az folyamatosan csak egy 1-es érték.A furcsa az , hogy már a 0xD1 kiküldése után nem is küld Ack jelet az rtc. Logikai analizátorral megvizsgáltam a kommunikációt amit mellékeltem.Itt található a kód:
  1. // PIC16F877A Configuration Bit Settings
  2.  
  3. // 'C' source line config statements
  4.  
  5. // CONFIG
  6. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  7. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  8. #pragma config PWRTE = OFF       // Power-up Timer Enable bit (PWRT enabled)
  9. #pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
  10. #pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
  11. #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
  12. #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
  13. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  14.  
  15. // #pragma config statements should precede project file includes.
  16. // Use project enums instead of #define for ON and OFF.
  17.  
  18. #include <xc.h>
  19.  
  20. #define _XTAL_FREQ 20000000
  21.  
  22. void init_i2c(void)
  23. {
  24. TRISCbits.TRISC3 = 1;
  25. TRISCbits.TRISC4 = 1;    
  26. SSPCONbits.SSPEN = 1;
  27. SSPCONbits.SSPM3 = 1;
  28. SSPADD = 0x31;
  29. }
  30.    
  31. void i2c_start(void)
  32. {
  33.     SSPCON2bits.SEN = 1;
  34.     while(!SSPIF);
  35.     SSPIF = 0;
  36. }
  37.  
  38. void i2c_restart(void)
  39. {
  40.         SSPCON2bits.RSEN = 1;                  
  41.         while(!SSPIF);         
  42.         SSPIF = 0;                     
  43. }
  44.    
  45. void i2c_stop(void)
  46. {
  47.     SSPCON2bits.PEN = 1;
  48.         while(!SSPIF);
  49.         SSPIF = 0;
  50. }
  51.    
  52. void i2c_sendbyte(unsigned char byte)
  53. {
  54.     SSPBUF = byte;
  55.     while(!SSPIF);
  56.     SSPIF = 0;
  57. }
  58.  
  59. unsigned char i2c_readbyte()
  60. {
  61.     RCEN = 1;
  62.     while(!SSPIF);
  63.     SSPIF = 0;
  64.    
  65.     return SSPBUF;
  66. }
  67.  
  68. unsigned char byte = 0;
  69.  
  70. void main(void) {
  71.     //init i2c
  72.     init_i2c();
  73.    
  74.    
  75.     while(1)
  76.     {
  77.         i2c_start();
  78.         i2c_sendbyte(0xD1);
  79.         i2c_sendbyte(0x00);
  80.         byte = i2c_readbyte();
  81.         i2c_stop();
  82.         __delay_ms(300);
  83.     }
  84.    
  85.     return;
  86. }
A hozzászólás módosítva: Nov 11, 2017

i2c_rtc.JPG
    
(#) korat válasza pajti2 hozzászólására (») Nov 11, 2017 /
 
Raspi már volt itthon, azért gondoltam, hogy elsőnek megpróbálom azt használni. A blog amit találtam nem egyezik a fejlesztővel, így azt feltételeztem, hogy az illető már kipróbálta, és így már van egy megerősítésem. Persze csak egy, ami igen kevés, de én is úgy gondoltam, hogy talán nem lehetetlen,és megér egy próbát. A B terv egy pickit vásárlás.
Ha esetleg valakit érdekelne itt a fejlesztő oldala:project:pickle
(#) picipic hozzászólása Nov 11, 2017 /
 
Az Assemblerben lehet a Config értékeket egy rövid bit sorral elintézni.
Van-e erre lehetőség a Hi-TECH PICC Lite-ban is? Ha van mi a szintaktikája?
(#) Hp41C válasza picipic hozzászólására (») Nov 11, 2017 /
 
PIC16F1847:
  1. __CONFIG(BOREN_ON & IESO_OFF & FOSC_HS & WDTE_OFF & FCMEN_OFF & MCLRE_OFF & CP_OFF & CPD_OFF & PWRTE_ON & CLKOUTEN_OFF);
  2. __CONFIG(PLLEN_OFF & WRT_OFF & STVREN_OFF & BORV_HI & LVP_OFF);

Így azért olvashatóbb, mint a hex érték.
A hozzászólás módosítva: Nov 11, 2017
(#) icserny válasza jocka0012 hozzászólására (») Nov 11, 2017 /
 
A 0xD1 kiküldése olvasást jelent, ezért utána már nem küldhetsz ki regisztercímet!

A helyes sorrend:
0. Start feltétel generálása
1. 0xD0 kiküldése (eszközcím és Write mód)
2. 0x00 kiküldése (a regiszter címe)
3. Restart feltétel generálása
4. 0xD1 kiküldése
5. olvasás és nyugtázás küldése (ahányszor kell, utolsó bájtnál negatív nyugtázás)
6. Stop feltétel generálása
(#) Zso839 hozzászólása Nov 11, 2017 /
 
Sziasztok!

Lehet nem itt kellene érdeklődnöm, hanem egy másik topicban. PIC-es hőmérsékletmérőt szeretnék készíteni, mellékeltem az érzékelő adatlapját. Meg lehet oldani a hőmérséklet érzékelő kalibrálását, ha nem egészen lineáris a jelleggörbéje? Tudom a "DS18B20" és az "LM 35" egyszerűbb lenne, de nem egyszerű a beépítésük.

Előre is köszönöm a segítséget.
(#) proli007 válasza Zso839 hozzászólására (») Nov 11, 2017 /
 
Hello! Miért ne lehetne? Ez, programozási kérdés, amit a PIC-es topikban kellet volna feltenni. Megméred az ellenállását (kiszámolod) és egy táblázatból korrigálod az értéket . Köztes értéket lineáris interpolációval lehet számolni.
(#) Zso839 válasza proli007 hozzászólására (») Nov 11, 2017 /
 
Helló Proli!

A "PIC programozás" topicra gondoltál?
(#) jocka0012 válasza icserny hozzászólására (») Nov 11, 2017 /
 
Köszönöm!
(#) proli007 válasza Zso839 hozzászólására (») Nov 11, 2017 /
 
Már ott is van..
(#) nagym6 válasza Zso839 hozzászólására (») Nov 11, 2017 /
 
Idézet:
„ha nem egészen lineáris a jelleggörbéje?”
Hatalmas mértékben nem. 0 és 10 fok között kb. 3000 Ohm, 90 és 100 fok között kb. 50 Ohm. Mindkettő 10 fok eltérés.
(#) f2f2 válasza Hp41C hozzászólására (») Nov 11, 2017 /
 
Köszönöm Hp41C !

Idézet:
„Idézet:
„CP rá volt kapcsolva a CPD nem. Ilyenkor nem lehet sehol semmi változtatást eszközölni jól gondolom ?”

A programozási specifikáció szerint az adat EEProm kiolvasható, ha a CP be van kapcsolva, de a CPD nincs. Nem tér ki arra az esetre, hogy az adat EEProm módosítható-e ICSP segítségével ilyen esetben.”


CP be CPD ki esetében a PIC chippek 2 osztályra sorolhatóak ?
1.ha ICSP úton eeprom módosítható más elváltozás nélkül
2. ICSP úton eeprom írásakor a futtatott állomány elvész
Ha így lenne jó lenne listát olvasni róla melyhez ne tervezzünk eeprom módosítást
ha a config bitek úgy állnak, mint ahogy írom.
(#) picipic hozzászólása Nov 11, 2017 /
 
A PIC C Lite fordítót tanulgatom.
Most épp a nyomógombra (RB4, RB5, RB6) felgyulladó Led-et próbálom (RB0, RB1, RB2 ).

Az alábbi progi működését nem értem. Nem nyomom meg egyik gombot sem és az RB2 lábon lévő LED folyamatosan világít. Miért?

(Csak a lényeges részt írom)

void main()
{
TRISB=0b01110000; // PORTB 0,1,2,3,7 lába OUTPUT, 4,5,6 láb INPUT
RBPU=0; // PORTB felhúzva +1-re
OSCF=1; // Belső RC oscillátor sebessége 4 Mhz, ha OSCF=0, seb 48 kHz
do
{
if (RB4==0) RB0=1;
else
RB0=0;

if (RB5==0) RB1=1;
else
RB1=0;

if (RB6==0) RB2=1;
else
RB2=0;

}while (1);
}

Ha valaki rávilágítana a megoldásra. megköszönném.
A hozzászólás módosítva: Nov 11, 2017
(#) kissi válasza picipic hozzászólására (») Nov 12, 2017 /
 
Szia!

Lehet akár hardveres hiba is, de milyen kontrollerről beszélsz ?!
(#) nedudgi válasza picipic hozzászólására (») Nov 12, 2017 /
 
Az, hogy a LED folyamatosan világít, nem jelent semmit. A LED másik lába hova van kötve?
(#) jocka0012 hozzászólása Nov 12, 2017 /
 
Üdv!Valaki tudna segíteni abban , hogy a DS18B20 vajon miért nem küldi az adatot?
Először csak próba miatt ki akarom olvasni a scratchpad-et , de sajnos nem akar vissza küldeni adatot.
A kód itt található:
  1. // PIC16F877A Configuration Bit Settings
  2.  
  3. // 'C' source line config statements
  4.  
  5. // CONFIG
  6. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  7. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  8. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  9. #pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
  10. #pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
  11. #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
  12. #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
  13. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  14.  
  15. // #pragma config statements should precede project file includes.
  16. // Use project enums instead of #define for ON and OFF.
  17.  
  18. #include <xc.h>
  19.  
  20. #define _XTAL_FREQ 20000000
  21.  
  22. #define data_dir TRISBbits.TRISB0
  23. #define data_pin PORTBbits.RB0
  24.  
  25. void onewire_reset(void)
  26. {
  27.     data_dir = 0;
  28.     data_pin = 0;
  29.     __delay_us(480);
  30.     data_pin = 1;
  31.     data_dir = 1;
  32. }
  33.  
  34. void onewire_presence(void)
  35. {
  36.     data_dir = 1;
  37.     __delay_us(60);
  38.     __delay_us(500);
  39. }
  40.  
  41. void onewire_lowbit(void)
  42. {
  43.     data_dir = 0;
  44.     data_pin = 0;
  45.     __delay_us(60);
  46.     data_pin = 1;
  47.     __delay_us(2);
  48.     data_dir = 1;
  49. }
  50.  
  51. void onewire_highbit(void)
  52. {
  53.     data_dir = 0;
  54.     data_pin = 0;
  55.     __delay_us(2);
  56.     data_pin = 1;
  57.     __delay_us(60);
  58.     data_dir = 1;
  59. }
  60.  
  61. void onewire_writebyte(unsigned char data)
  62. {
  63.     unsigned char temp = 0;
  64.    
  65.     for(int i = 0 ; i < 8 ; i++)
  66.     {
  67.        
  68.         if(i == 0)
  69.         {
  70.             temp = data & 0x01;
  71.             if(temp == 0)onewire_lowbit();
  72.             if(temp == 1)onewire_highbit();
  73.         }
  74.         if(i > 0)
  75.         {
  76.             temp = data;
  77.             temp = (temp >> i) & 0x01;
  78.             if(temp == 0)onewire_lowbit();
  79.             if(temp == 1)onewire_highbit();
  80.            
  81.         }
  82.     }
  83. }
  84.  
  85. void main(void) {
  86.  
  87.     while(1)
  88.     {
  89.         onewire_reset();
  90.         onewire_presence();
  91.         onewire_writebyte(0xCC);
  92.         onewire_writebyte(0xBE);
  93.         __delay_ms(1000);
  94.                
  95.     }
  96.    
  97.     return;
  98. }

Logikai analizátorral is megvizsgáltam , az a képen található.

onewire.JPG
    
(#) f2f2 válasza picipic hozzászólására (») Nov 12, 2017 /
 
Vagy ellenőrzés : ha LED nincs bekötve még, akkor a majdani LED negatív pólusára biztosíts
a pozitív lábához képest még pozitívabb potenciált.
Ha ez megvan akkor eleve nem világíthatna.
pld mcu GND hez mérten LED+ +2.5V
és mielőtt bekötnéd méred a +5V ot logic1 .
Ha megvan kösd rá létezhetetlen, hogy világítson.
Ha kimenetetnek megparancsolod a logic0 át már kell világítania.

Viszont ha a felhúzóellenállással is logic0 ád van akkor vagy nem sikeres a port beálllítása
vagy már hibás lett. gondolom én mint amatőr
(#) Hp41C válasza f2f2 hozzászólására (») Nov 12, 2017 /
 
Megnéztem a PIckit2 programját (PICkit2 V2.62).
Amennyiben a program memória le van tiltva (a kockában a Program memory mellett nincs pipa), a programozó nem törli a kontrollert, az EEProm memóriát kezeli csak. Amennyiben az adat memóriát (ICSP -n történő) módosítás előtt törölni kell, csak az adat memóriát törlő script -et használja.
Csak azoknál a típusoknál lehet probléma, amely megkövetelik a törlést, de az adat EEProm nem törölhető függetlenül.
(#) kissi válasza jocka0012 hozzászólására (») Nov 12, 2017 /
 
Szia!

A 1-wire protocoll Master-Slave alapú, csak úgy fogsz kapni adatot, ha olvasod ( a masternek kell az olvasáshoz az időszeleteket kijelölni !), "magától" nem fog biteket adni !!!
(#) jocka0012 válasza kissi hozzászólására (») Nov 12, 2017 /
 
Köszönöm!Így már sikerült.
(#) f2f2 válasza Hp41C hozzászólására (») Nov 12, 2017 /
 
Kösszi
Pickit2 tehát PIC16F946 nál tuti nem törli a program memóriát
ha csak az EEProm van bepipálva továbbá CP-ON CPD-Off esetben sem.

Sajnos mindkettővel küszködtem és amikor sikeres volt a felismerés
akkor pont a Pickit3 al volt kötve és a csak eeprom pipával párszor olvastam majd verified is párszor majd az eepromban elírtam 1 byteot ezt ellenőriztem sikeres volt majd visszaírtam
ahogy volt ezután élettelenné vált a PIC. a config se lett módosítva
vagyis az első olvasás config és eeprom szempontból azonos.
A program memory 1000%, hogy nem volt bepipálva.
Lehet hogy a Pickit3 másképp csinálja ezt ?
(#) Hp41C válasza f2f2 hozzászólására (») Nov 13, 2017 /
 
Idézet:
„Pickit2 tehát PIC16F946 nál tuti nem törli a program memóriát
ha csak az EEProm van bepipálva továbbá CP-ON CPD-Off esetben sem.”

Nem egészen.
Pickit2 tehát PIC16F946 nál nem törli a program memóriát
ha csak az EEProm van bepipálva CPD-Off esetben. CPD-On esetén törli a kontrollert - minden területét!
(#) f2f2 válasza Hp41C hozzászólására (») Nov 13, 2017 /
 
Kössz
pk2 vel ok
Ha tudnám, hogy pk3 se törli ki a program memóriát, akkor visszakérném a panelt hátha más gond miatt nem hajt végre semmit. Már +5V ra indult a kijelző és zugott a motor is.
Neked van PK3 ?

PIC16F946.hex
    
(#) hapci válasza f2f2 hozzászólására (») Nov 13, 2017 /
 
A PK3 a bejelölt memóriát kezeli. Akár egyiket, akár másikat vagy mindkettőt, tehát törlés/írás esetén a jelöletlen nem változik.
Következő: »»   991 / 1207
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem