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   1225 / 1225
(#) kissi válasza kaqkk hozzászólására (») Márc 23, 2026 /
 
Ja, úgy nem...azt hittem az ICSP-hez gondolkodsz feltétben !
(#) Laja1 hozzászólása Márc 27, 2026 /
 

NRF24 inicializálás

Sziasztok!
Tudna valaki segíteni, hogy mi lehet a gond? A rádiós (nRF24L01 modul nyák antennával 2.4GHz) modul nem működik. Figyelem szkóppal a MOSI, MISO jeleket. A MOSI jelek szépen kimennek, az első byte-ra a modul szépen válaszol 0x0E jellel, de a második byte-ra már 0x00 a válasza! És ez minden byte-párosnál így van. Ahol pedig egymás után 6 byte-t kell küldeni, ott az elsőre 0x0E a válasz és az összes többire 0x00. Így nem tudom a modult inicializálni, tehát nem is működik. Hol lehet a hiba? Ez a kódrészlet:
  1. #include "nrf24.h"
  2. #include "spi.h"  
  3.  
  4.  
  5.  
  6. static void csn_low(void)  { NRF_CSN_LAT = 0; }
  7. static void csn_high(void) { NRF_CSN_LAT = 1; }
  8. static void ce_low(void)   { NRF_CE_LAT = 0; }
  9. static void ce_high(void)  { NRF_CE_LAT = 1; }
  10.  
  11.  
  12.  
  13. static void nrf_write_reg(uint8_t reg, uint8_t val) {
  14.    
  15.     csn_low();
  16.     __delay_us(10); // Várunk egy kicsit az ébredésre
  17.    
  18.     SPI_Transfer(W_REGISTER | (REGISTER_MASK & reg));
  19.    
  20.     __delay_us(10);
  21.    
  22.     SPI_Transfer(val);
  23.    
  24.     __delay_us(10); // Biztonsági szünet a lezárás előtt
  25.     csn_high();
  26.    
  27. }
  28.  
  29.  
  30. static void nrf_write_regN(uint8_t reg, const uint8_t *buf, uint8_t len) {
  31.    
  32.     csn_low();
  33.     SPI_Transfer(W_REGISTER | (REGISTER_MASK & reg));
  34.     for (uint8_t i=0; i<len; i++) SPI_Transfer(buf[i]);
  35.     csn_high();
  36.    
  37. }
  38.  
  39. static void nrf_command(uint8_t cmd) {
  40.    
  41.     csn_low();
  42.     SPI_Transfer(cmd);
  43.     csn_high();
  44.    
  45. }
  46.  
  47. void nRF24_init(bool tx_mode, uint8_t channel) {
  48.     // A TRIS beállításokat a SystemInit vagy SPI_Init már elvégzi,
  49.     // de a CE és CSN lábakat itt inicializáljuk:
  50.     TRISAbits.TRISA1 = 0; // CSN kimenet
  51.     TRISAbits.TRISA2 = 0; // CE kimenet
  52.    
  53.     csn_high();
  54.    
  55.     ce_low();
  56.     __delay_ms(100);
  57.  
  58.     uint8_t addr_tx[5] = {'M','A','S','T','R'};
  59.     uint8_t addr_rx[5] = {'S','L','A','V','E'};
  60.  
  61.     nrf_write_reg(EN_AA, 0x00);
  62.     nrf_write_reg(EN_RXADDR, 0x01);
  63.     nrf_write_reg(SETUP_AW, 0x03);
  64.     nrf_write_reg(RF_CH, channel);
  65.     nrf_write_reg(RF_SETUP, 0x06);
  66.     nrf_write_reg(RX_PW_P0, 2);
  67.  
  68.     if (tx_mode) { //Amikor a display parancsot küld
  69.         nrf_write_regN(TX_ADDR, addr_rx, 5); // A cél a SLAVE
  70.         nrf_write_regN(RX_ADDR_P0, addr_tx, 5); // A válaszokat a saját (MASTR) címén várja
  71.         nrf_write_reg(CONFIG, 0x0E); // TX
  72.     } else {
  73.         nrf_write_regN(TX_ADDR, addr_rx, 5);
  74.         nrf_write_regN(RX_ADDR_P0, addr_tx, 5); // Saját maga (MASTR) után fülel
  75.         nrf_write_reg(CONFIG, 0x0F); // RX
  76.     }
  77.  
  78.     nrf_command(FLUSH_TX);
  79.     nrf_command(FLUSH_RX);
  80.     nrf_write_reg(NRF_STATUS, 0x70);
  81.     if (!tx_mode) ce_high();
  82.    
  83. }
  84.  
  85. void nRF24_setMode(bool tx_mode) {
  86.    
  87.     ce_low();
  88.     if (tx_mode) nrf_write_reg(CONFIG, 0x0E);
  89.     else { nrf_write_reg(CONFIG, 0x0F); ce_high();
  90.    
  91.     }
  92. }
  93.  
  94. void nRF24_send(uint8_t value) {
  95.    
  96.     ce_low();
  97.    
  98.     csn_low();
  99.     SPI_Transfer(W_TX_PAYLOAD);
  100.     SPI_Transfer(value);
  101.     csn_high();
  102.  
  103.     ce_high();
  104.  
  105.     __delay_us(20);
  106.     ce_low();
  107. }
  108.  
  109. bool nRF24_dataReady(void) {
  110.     uint8_t status;
  111.    
  112.     csn_low();
  113.     status = SPI_Transfer(NOP);
  114.     csn_high();
  115.    
  116.     return (status & (1<<6)) ? true : false;
  117. }
  118.  
  119. void nRF24_powerDown(void) {
  120.    
  121.     ce_low();
  122.     nrf_write_reg(CONFIG, 0x0C);
  123. }
  124.  
  125. void nRF24_powerUp(bool rx_mode) {
  126.     if (rx_mode) {
  127.         nrf_write_reg(CONFIG, 0x0F);
  128.         ce_high();
  129.     } else {
  130.         nrf_write_reg(CONFIG, 0x0E);
  131.     }
  132.     __delay_ms(2);
  133. }
  134.  
  135. bool nRF24_getData2(uint16_t *value) {
  136.     uint8_t msb, lsb;
  137.     if (!nRF24_dataReady()) return false;
  138.    
  139.     csn_low();
  140.     SPI_Transfer(R_RX_PAYLOAD);
  141.     msb = SPI_Transfer(NOP);
  142.     lsb = SPI_Transfer(NOP);
  143.     csn_high();
  144.    
  145.     *value = ((uint16_t)msb << 8) | lsb;
  146.     nrf_write_reg(NRF_STATUS, (1 << 6)); // STATUS regiszter törlése
  147.     return true;
  148. }
Köszönöm szépen!
(#) Laja1 válasza Laja1 hozzászólására (») Márc 27, 2026 /
 
Amit még nem írtam le, hogy a rádió előtt közvetlenül van a tápon egy 100nF és egy 10µF kondi is. A kijelző és az érintés is ugyanezen a SPI kommunikáción megy és azok jól működnek. Kipróbáltam azt is, hogy ha az nrf-t használom, akkor először (bolondbiztosan) a TFT és az érintő CS vonalát 1-re állítom. De nem okozott változást.
(#) joco54 hozzászólása Júl 15, 2026 /
 

Pic program probléma

Üdv. Van egy Pic16F88- rá írt programom, de ha betőltöm a PICKIT2-be, akkor a következő képernyő jelenik meg. Mi lehet a probléma?
(#) pipi válasza joco54 hozzászólására (») Júl 15, 2026 /
 
Szerintem ez "nem probléma", hanem feledékenység. Nem definiáltál valamit/semmit a config word-ben...
https://www.hestore.hu/prod_getfile.php?id=4737
129 oldal
(#) joco54 válasza pipi hozzászólására (») Júl 15, 2026 /
 
Köszönöm a válaszod. Sajnos nem nagyon értek a programozáshoz, egy kész programot szeretnék feltölteni, a pikbe
(#) joco54 válasza pipi hozzászólására (») Júl 15, 2026 /
 
Esetleg, ha átküldőm, a hex fáljt, tudnál segíteni?
(#) pipi válasza joco54 hozzászólására (») Júl 15, 2026 /
 
A hex fájl-al nem nagyon van mit kezdeni, a forrásszövegbe kellene megnézni mi van/nincs beállítva a config-ban. Ez ugye hwfüggő is, pl órajel forrás/osztó...
Vagy atrágod magad a doksiban a config biteken, a pickitben a hex beolvasás után, kézzel beállítod a configword-öt.
Vagy átmazsolázod honnan van a cuccos, mit ír a fejlesztő....
Akár az is előfordulhat, hogy megfelel a configbitek alapértéke, de ez nem jellemző...
(#) bbb válasza joco54 hozzászólására (») Júl 15, 2026 /
 
Honnan van a kész programod? Ahonnan letöltötted, ott nem írnak semmit a konfig bitek beállításairól? Egyébként nem indult el a kész áramkör az így beégetett programmal? Ez csak egy figyelmeztetés, hogy a PIC alapértékeit írta be a programozó és nézd meg az neked megfelel-e. Ha elindult vele az áramkör, akkor nem kell foglalkozni a figyelmeztető üzenettel.
Következő: »»   1225 / 1225
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