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   373 / 1210
(#) benjami válasza n_yálastrubadúr hozzászólására (») Feb 23, 2013 /
 
Ha semmiképp nincs szabad láb az újonnan 30Ft-os, vagy akár roncs alaplapból is bontható órakvarchoz, lehet még próbálkozni a 24,574Mhz-es kvarc válogatásával, esetleg a rá kötött 15-22pf körüli kapacitások variálásával.
(#) n_yálastrubadúr válasza benjami hozzászólására (») Feb 23, 2013 /
 
Köszi! Van óra kvarcom többformában is. Majd az lesz hogy válogatom.
(#) Topika hozzászólása Feb 23, 2013 /
 
Sziasztok!
Lenne egy kérdésem! Milyen képlettel lehet átszámolni az LM75-ös hőmérséklet szenzor
negatív tartományát,hogy kijelezhető értéket kapjak?
Előre is köszönöm a segítséget!
(#) tom75 válasza Hp41C hozzászólására (») Feb 23, 2013 /
 
Kijelző típusa: PQC1602K-SYL
(#) kaqkk válasza Hp41C hozzászólására (») Feb 23, 2013 /
 
Van ennél egyszerűbb megoldás is ! A tmr2 ben a rollover értéke bármilyen értékre átírható (nem csak a 2 hatványai használhatók!) Én így írom az óra programjaimat 4Mhz-s kvarchoz .
A hozzászólás módosítva: Feb 23, 2013
(#) Hp41C válasza kaqkk hozzászólására (») Feb 23, 2013 /
 
Nem javaslom a Timer0 -ra való visszatérést, a kristály 60 ppm eltérésétnek korrigálására is használható.
(#) kaqkk válasza Hp41C hozzászólására (») Feb 23, 2013 /
 
Valamit nem értek! Én a TMR2 ről beszélek - te a TMR0 ról Hogy jön ez egymáshoz?
(#) foldvarid hozzászólása Feb 23, 2013 /
 
Üdvözlet az Uraknak! Olyan problémám van, hogy a pickit2 program elindításakor a mikrovezérlőben lévő programot kitörli a programozóm. Iskolában is ilyeneken tanulunk, de ott nem jelentkezik ez a probléma. Igazából ez sem olyan vészes, mert csak az első indításnál teszi ezt, utána már használható. Én mégis szeretném ezt megoldani, hogy csatlakoztatáskor ne törölje a programomat, mert például a tegnapi programot akarom futtatni és csak tápot akarok adni a pickit2-vel, de sajnos kitörli és be kell égetni újra így csak ezek után lehet futtatni a programot. Keresgéltem az interneten angol oldalak között, és arra jutottam, hogy az OSCCAL-t kell(ene) beállítani, de a pickit2 ezt nem teszi lehetővé. Sokféle megoldásról hallottam, de nem sikerült megoldani egyikkel sem. Ha tudtok kérlek segítsetek valami információval.
Szép estét!
(#) kaqkk válasza foldvarid hozzászólására (») Feb 23, 2013 / 1
 
(#) mrd86 hozzászólása Feb 23, 2013 /
 
Üdvözlök mindenkit!

Abban kérném segítségeteket hogy szeretnék megvalósítani 3 PIC között i2c kapcsolatot. Igazából részben sikerült is.

A probléma a következő:

-Adatot küldök az első slave-nek
-Cím megy vissza ACK
-Adat megy vissza ACK
-A slave-ban lekezelve az adat

-Adatot küldök a másik slave-nek
-Cím megy, vissza ACK
-Adat megy, vissza ACK
-A slaveban lekezelve az adat

-Újra küldök adatot az első slave-nak
-cím megy és NAK jön vissza az adattól is NAK

Nem tudom mi lehet a baj. A feladat az lenne, hogy mondjuk adott gombok megnyomására különböző karaktereket/számokat küldjek a slave-knek azok a "parancs-byte-ok" hatására csináljanak dolgokat(nagyvonalakban, remélem érthető :S)

Teszt Proteus
Program PicWHD
Ha lehetne maradnék ennél a programnál mert ez úgy ahogy megy :S

Mellékelem a forrásokat+proteus
elso.c - master
masodik.c - slave 1
HARMADIK.c - slave 2
(#) Hp41C válasza mrd86 hozzászólására (») Feb 24, 2013 /
 
Szia!
A masodik.c és a harmadik.c megszakítási rutinja letiltja a megszakítást. A globálisat fölöslegesen, a SSP megszakítását szorgalomból. Ez utóbbit nem engedélyezi mielőtt kilép.
A megszakítási rutinban nem kell a globális engedélyezést tiltani - bízzuk a herdware -re.
(#) tom75 hozzászólása Feb 24, 2013 /
 
Amikor pic programba be kell állítani az eszközleírást.
eszköz.inc.
Az inc állományt az hol lehet megtalálni?
(#) mrd86 válasza Hp41C hozzászólására (») Feb 24, 2013 /
 
Köszönöm az észrevételt kivettem a

  1. disable_interrupts(GLOBAL);
  2. disable_interrupts(INT_SSP);


mind a két slave-ből de ugyan az én is gondoltam a megszakításra mert olyan mintha folyamatos lenne a kapcsolat. Egyszerűen nem jövök rá.

Belinkelem a forrást hogy ne kelljen töltögetni:

  1. #include <16F877.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES XT                       //Crystal osc <= 4mhz
  6. #FUSES NOPUT                    //No Power Up Timer
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES BROWNOUT                 //Reset when brownout detected
  9. #FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
  10. #FUSES NOCPD                    //No EE protection
  11. #FUSES NOWRT                    //Program memory not write protected
  12. #FUSES NODEBUG                  //No Debug mode for ICD
  13.  
  14. #use delay(clock=4000000)
  15. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
  16. #use i2c(Slave,Fast,sda=PIN_C4,scl=PIN_C3,force_hw,address=0xa0)
  17.  
  18. BYTE address, buffer[0x10];
  19.  BYTE incoming, state;
  20. #INT_SSP
  21. void ssp_interupt ()
  22. {
  23.    state = i2c_isr_state();
  24.  
  25.    if(state < 0x80)                     //Master is sending data
  26.    {
  27.       if (state ==0)
  28.       {
  29.       incoming = i2c_read();
  30.       printf("fogadott adat: %x\r",incoming);
  31.       }
  32.       if(state == 1)                     //First received byte is address
  33.       address = incoming;
  34.  
  35.       if(state == 2)                     //Second received byte is data
  36.       incoming=buffer[address];
  37.    }
  38.  
  39.    if(state == 0x80)                     //Master is requesting data
  40.    {
  41.       i2c_write(buffer[address]);
  42.  
  43.         }
  44. }
  45.  
  46. void main ()
  47. {
  48.    setup_adc_ports(NO_ANALOGS);
  49.    setup_adc(ADC_OFF);
  50.    setup_psp(PSP_DISABLED);
  51.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  52.    setup_timer_1(T1_DISABLED);
  53.    setup_timer_2(T2_DISABLED,0,1);
  54.  
  55.    enable_interrupts(GLOBAL);
  56.    enable_interrupts(INT_SSP);
  57.  
  58. }


Előre is köszönöm a segítséget mert szerintem valami kicsi dolgon siklottam el.
(#) icserny válasza tom75 hozzászólására (») Feb 24, 2013 /
 
MPLAB 8 esetén: a Microchip telepítési könyvtárában az MPASM Suite alkönyvtárban.
(#) Hp41C válasza mrd86 hozzászólására (») Feb 24, 2013 / 1
 
Szia!
Azt kellene megnézni, hogy adat vagy cím vétele után a CKP bitet nem kell-e 1 -re állítani.
  1. printf("fogadott adat: %x\r",incoming);

Ez hova ír? Lehet, hogy még a kiítással van elfoglalva, amikor a második adatot veszi?
  1. if(state == 2)                     //Second received byte is data
  2.       incoming=buffer[address];

A vett adatot írja felül?
(#) mrd86 válasza Hp41C hozzászólására (») Feb 24, 2013 /
 
Nagyon köszönöm a segítséget igazad volt a slave küldte volna vissz az adatot de masterrel nem kezeltem le így nem is tudott ujjat fogadni és abban is igazad volt hogy a state==2 vizsgálat nem kellett hanem csak a state==3 ha újabb adatot küldök és tökéletesen megy felváltva és lcd-re kivetítve.

Mégegyszer köszönöm a segítséget.

Ha valakinek kell:

  1. BYTE incoming, state;
  2.  
  3. #INT_SSP
  4. void ssp_interupt ()
  5. {
  6.    state = i2c_isr_state();
  7.  
  8.    if(state < 0x80)                     //Master adatot küld
  9.    {
  10.       if (state == 0)                   //Adat kiolvasás, kiiratás
  11.       {
  12.          incoming = i2c_read();
  13.          printf("fogadott adat: %x\r",incoming);
  14.       }
  15.  
  16.       if (state == 3)
  17.       {
  18.          incoming = i2c_read();
  19.       }
  20.  
  21.    }
  22.    if(state == 0x80)                     //Master visszaigazolást kér
  23.    {
  24.       if (incoming == 0x66)              //Ha a fogadott adat xyz akkor
  25.       {
  26.          printf("[66] parancs feldolgozasa.....\r");
  27.          delay_ms(1500);
  28.          printf("Kesz\r");
  29.       }
  30.       if (incoming == 0x63)
  31.       {
  32.          printf("[63] parancs feldolgozasa.....\r");
  33.          delay_ms(1500);
  34.          printf("Kesz\r");
  35.       }
  36.       i2c_write(incoming);               //Parancs visszaigazolása
  37.    }
  38. }
(#) tom75 válasza tom75 hozzászólására (») Feb 24, 2013 /
 
A programot átlehet írni c-re?
Megpróbálkozok vele ha tudsz segíteni.
(#) Hp41C válasza kaqkk hozzászólására (») Feb 24, 2013 /
 
Szia!
Kiindulás: 24,574Mhz-es kristállyal 12 óra alatt 3mp siet. 24674000 / 4 = 6143500. A 6143500 = 2*2*5*5*5*11*1117. Timer2, 1/4 előosztóval, PR2 = (125-1) 12287 megszakítást eredményez másodpercenként. De a kristály nem pontosan ezen a frekvencián jár, mert az óra 12 óra alatt 3 mp -t siet. Azaz 43200 másodperc helyett 43203 játszódik le. 14400 másodpercenként 3 kell elcsalni. Ehhez ajánlottam az algoritmust.
(#) kaqkk válasza Hp41C hozzászólására (») Feb 25, 2013 /
 
Én is
(#) nagzso hozzászólása Feb 25, 2013 /
 
Sziasztok!
TCP/IP, web, ethernet, wifi dolgokkal szeretnék jobban megismerkedni. Keresgéltem a neten és itt is a többi topicban, de nem igazán találtam, amire nekem szükségem lenne. Ami kellene, egy teljesen kezdőknek szóló leírás(jól szájba rágósan), esetleg több példa program(egyszerűbb, fokozatosan nehezedő), kapcsolási rajz vagy kész board, amin kipróbálhatom. TCP/IP stacket beszereztem, de nem sikerült belőnöm az MPLAB-hoz. Amit majd megszeretnék valósítani, gépről adatot küldeni WIFI-n, LAN kábelen küldeni a PIC-es áramkörnek, ami persze feldolgozza.
(#) potyo válasza nagzso hozzászólására (») Feb 25, 2013 /
 
Ilyen szájbarágós, lépésenként felépítős leírásról nem tudok, de ezt a két témát ajánlom figyelmedbe: Link és link
(#) n_yálastrubadúr hozzászólása Feb 25, 2013 /
 
Köszi, köszi! A kvarc az 24,576Mhz-es, tudom a példa szempontjából annyira nem jelentős. Jelenleg így csinálom (lent) . Az algoritmust nem értem, hogy a BRES az hol emelkedik?
A hozzászólás módosítva: Feb 25, 2013

716_clock.c.c
    
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Feb 25, 2013 /
 
Idézet:
„Az algoritmust nem értem, hogy a BRES az hol emelkedik?”

Minden kiemelt példa első sorában. Pl:
Idézet:
„bres += 256; // add 256 ticks to bresenham total”
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Feb 25, 2013 /
 
Aha! És ezt megszakításban teszi vagy akárhol lehet? Mert próbáltam lefordítani, de lehet kár volt mert összezavart.
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Feb 25, 2013 /
 
Nem hiszem, hogy olyan bonyolult lenne...
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Feb 25, 2013 /
 
Köszi csak átfordítottam abban máshogyan nézett ki. Tanulmányozom.
(#) n_yálastrubadúr hozzászólása Feb 25, 2013 /
 
Kipróbáltam. Működik! Nagyon hasznos.
(#) tom75 hozzászólása Feb 25, 2013 /
 
Hp41c akkor tudsz segíteni?
(#) Hp41C válasza tom75 hozzászólására (») Feb 25, 2013 /
 
Szia!
Nézem az inicializálást, de mennie kellene. Szimulátorban nézve az LCD beállító parancsokat rendesen adja ki. Nem értem a kódot (főleg nem a kommentet), még azt a bizonyos beállítást sem találtam meg...
Következő: »»   373 / 1210
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