Go Down

Topic: RFID scanner + NRF240L1 (Read 5035 times) previous topic - next topic

akatchi

Waar heb je het nu de hele tijd over?........
Nou ik snap niet waarom u/jij de radio pins verschuift van 9,10 naar 8, 9...

Nog een keer duidelijk wat ik bedoel: Ik heb een RFID scanner die MOSI, MISO and SCK gebruikt met SPI. Nou wou ik een RFID scanner tegelijkertijd met een NRF24 module die ook deze pins gebruikt Nu wist ik niet dat je nog meer van deze pins op je Arduino had. Nu ben ik er inmiddels achter dat er onder op je bord 6 pinnen zitten met de tekst erboven ICSP, kan ik deze gewoon direct gebruiken ook al zijn 11, 12 en 13 in gebruik?
En dan heb ik nog de CSN en de CE pin die ik ergens op moet aansluiten voor de NRF module, kan dat op alle pins, want dan is mijn probleem opgelost.

nicoverduin

Ik geef het op. Misschien heeft mas het geduld......
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

akatchi

Ik snap niet echt wat ik fout doe :smiley-confuse:  :smiley-confuse:  :smiley-red:  :smiley-red:

MAS3

Het probleem is dat je nog veel niet snapt, en dat je steeds meer fouten maakt.
Je ziet steeds meer dingen die parallel gaan lopen met waar je naar vroeg, en die wil je dan gelijk mee oplossen.
Dat gaat je niet lukken.
Los je vraagstukken stuk voor stuk op.

De laatste fout is dat Nico tegen je zei dat je a OF b kon doen, en jij vroeg of je dan ook b EN c kunt doen.
En dan krijg je dus het antwoord dat Nico je gaf; nee.
Je moet heel precies zijn met wat je in je code schrijft, want anders gaat het fout.
Zo nauwkeurig moet je ook in je berichten zijn.
En je moet de gegeven antwoorden ook meerdere malen lezen want er zit meer in dan jij bij de eerste keer lezen ziet.

Als jij ziet dat er een CSN (Chip Select (Not) vermoed ik) en een CE (Chip Enable) pin op je module zitten, zou je dan niet gaan uitzoeken waar die pins voor zijn, en hoe je die moet aansturen ?
Als ze betekenen wat ik hierboven zei, dan is de ene actief als ie LOW ziet, en de andere als ie HIGH ziet.

Jouw beide modules die MOSI, MISO (wat betekenen die twee termen eigenlijk ?), en SCK hebben, kunnen parallel worden aangesloten op de Arduino.
De andere pinnen zijn uniek voor 1 module, en die moet je dus ook als zodanig aansturen.
Volgens mij is dit de 3e keer dat ik dat vertel in deze thread.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

akatchi

#19
Feb 28, 2017, 02:06 pm Last Edit: Feb 28, 2017, 02:09 pm by akatchi
Het probleem is dat je nog veel niet snapt, en dat je steeds meer fouten maakt.
Sorry klopt, ik begrijp er inderdaad helemaal niks van.
De laatste fout is dat Nico tegen je zei dat je a OF b kon doen, en jij vroeg of je dan ook b EN c kunt doen.
Klopt, dit komt dus omdat ik het niet helemaal begrijp.
Als jij ziet dat er een CSN (Chip Select (Not) vermoed ik) en een CE (Chip Enable) pin op je module zitten, zou je dan niet gaan uitzoeken waar die pins voor zijn, en hoe je die moet aansturen ?
Heb ik gedaan als het goed is werken deze met SPI en moet ik deze definen aan het begin van de code, bijvoorbeeld de
Code: [Select]
RF24 radio(7, 8)
de 7 en 8 zijn dan de CSN en de CE pinnen.
Jouw beide modules die MOSI, MISO (wat betekenen die twee termen eigenlijk ?)
MOSI = Master Output Slave Input
MISO = Master Input Slave Output
kunnen parallel worden aangesloten op de Arduino.
Sorry dit begrijp ik ook niet helemaal, heb je hiervoor misschien een foto of iets, ik snap natuurlijk dat je serie en parallel hebt maar ik snap niet zo 1, 2, 3 hoe je iets parallel op de Arduino moet aansluiten.
Volgens mij is dit de 3e keer dat ik dat vertel in deze thread.
Nogmaals sorry :S

Om nog meer fouten te voorkomen vraag ik me af, bedoelen jullie dit? Of is dit mogelijk? In de bijlage heb ik in Fritzing een foto gemaakt met de pinnen. Zoals je ziet ga ik de NRF24 via pin 5 en 6 'besturen' via SPI communicatie. En sluit ik de MOSI, MISO, SCK, GND en VCC van de NRF24 aan op die 6 pinnen daar op het Arduino board. De RFID stuur ik aan met de pinnen 7 en 8 ook via de SPI communicatie.
De RFID kon ik niet vinden in Fritzing dus die moet je je even inbeelden op het breadboard (ik heb niet de voeding pinnen erbij gezet in Fritzing voor de RFID maar dat is nu even niet van belang).
Doe ik nu weer wat heel stoms? Of is dit wel goed...?

Nogmaals bedankt voor de hulp en het geduld.

nicoverduin

En dit is nu net de kern van het verhaal....
Jij vraag iets..... krijgt antwoord .... maar snapt het niet... en doet ook niets... en leert ook niets...
En dan nog een keer...
Jij vraag iets..... krijgt antwoord .... maar snapt het niet... en doet ook niets... en leert ook niets...
En dan nog een keer...
Jij vraag iets..... krijgt antwoord .... maar snapt het niet... en doet ook niets... en leert ook niets...

Vroeger (vermoedelijk voor jouw tijd..) had je begrippen als "De jonge onderzoeker..." Dat waren de mensen die dingen uitprobeerden en leerden van hun fouten ...

Wat heb jij nu geleerd?. 
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

akatchi

Wat heb jij nu geleerd?.
Oke Nico ik heb nu een lange tijd even gezocht en deze foto omschrijft eigenlijk precies wat ik moet doen:


Toen heb ik nog een beetje naar posts gezocht die ook dit probleem hadden en las ik dit:


Nu kwamen er weer een paar vragen in me op namelijk: Hoe bestuur ik deze dan in mijn code, is er zoveel anders dan?

En ik snap nog steeds niet hoe ik ze precies parrallel moet aansluiten, ik heb een Fritzing gemaakt, klopt dit zo, even inbeelden dat de NRF24 in het breaboard past zeg maar, en dat die RFID reader de RFID-RC522 is.
Ik heb me even niet aan de pinvolgorde gehouden nu, maar het gaat om het idee of je dit bedoelt met parrallel aansluiten..


MAS3

#22
Mar 03, 2017, 04:20 pm Last Edit: Mar 03, 2017, 04:27 pm by MAS3
Hoi.

Jammer dat je na 5 keer uitleggen in het Nederlands, dezelfde tekst in het Engels wel begrijpt.
Dan heeft iedereen z'n best gedaan, maar het kwartje valt pas als jij 'm zelf omgooit...

Inderdaad is wat jij geFritzt hebt een vorm van parallel verbinden, als we niet verder kijken of de verbindingen zelf wel correct zijn.
De afbeelding met de kleurtjes hierboven is veel beter te lezen (door mij) als jouw Fritzing art.
Dit is ook de eerste keer na 21 posts in deze thread, dat je vertelt om welke RFID reader het gaat, ondanks dat er meerdere malen gevraagd werd met welk materiaal je aan het werk bent.
Als je dat niet vertelt, dan kan er ook alleen maar een algemeen antwoord worden gegeven.
Ik zou ook niet weten waarom dat niet verteld zou moeten worden.

Ik zal het nu voor de laatste keer noemen in deze thread:
Als er ergens een pin beschreven is als:
!pin
/pin
of pin met een streep er over heen, dan betekent dat dat het signaal aan die pin actief laag is.
Dus als je die !pin laag maakt dan is de data geldig bij een ingang.
En als die !pin een uitgang is dan is data geldig als die pin door de module of chip omlaag word getrokken.

In je code gebruik je met alle waarschijnlijkheid een library voor de betreffende module(s).
Die moet je dus vertellen welke pin nummer van je Arduino de !ss pin is.
Bekijk daarom de informatie die bij een fatsoenlijke library hoort te zitten.

[edit]
Als je slim bent maak je in je sketch een globale const aan met een duidelijke naam.
Een const neemt geen kostbaar geheugen in van je Arduino, wat een variabele wel zou doen.
Dus het doet geen pijn om die te gebruiken.
Maar je leest ineens je code veel beter door.
Dus geen reden om dat niet te doen, alleen om het wel te doen.
Nogmaals, wel een duidelijke naam gebruiken.
ss1, ss2, ss3 zijn dus geen duidelijke namen.
ss_NRF, ss_RFID lijken me een hééél klein beetje duidelijker.
[/edit]
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

akatchi

Bedankt MAS, fijn dat ik het nu eindelijk een keertje goed had, ik zelf dacht dat ik ze zo niet kon verbinden omdat er dan kortsluiting ontstond, slaat natuurlijk nergens op.

Toch is die SS pin nog even iets vaags voor mij. Stel ik heb die NRF24 module, die gebruikt de CSN en de CE pin, in dit geval is de CSN pin de Chip Select pin. Ik define de CSN pin en de CE pin in de code zoals Nico al zei met
Code: [Select]

RF24 radio(7, 8)

Bijvoorbeeld en de RFID heb ik een RST_PIN op 9, en de SS_PIN op 10. Wat zo aangegeven wordt:
Code: [Select]

#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);


Wat moet ik nu anders doen in de code om ze aan te sturen? Ik had een test code gemaakt, maar hij werkt nog niet naar behoren, nu weet ik niet of het aan de code ligt, of aan de NRF24 modules. Zou jij kunnen vertellen of ik het op de goede manier heb gedaan?
In deze test code had ik gedaan dat als je een RFID pasje scant, dat die het aantal 'scans' doorstuurt via de NRF24 module, nu vraag ik me af of ik het op de juiste manier heb gedaan omdat ik nergens zoals jij me meerder malen verteld een SS_PIN high of low aangeef, ik snap niet precies op welke manier je wilt dat ik dat ga doen, maar wie weet klopt deze code al...

Code: [Select]

#include <SPI.h>
#include <MFRC522.h>
#include "RF24.h"

#define RST_PIN         9      
#define SS_PIN          10        

byte adres[6] = {"adres"};
int scans = 0;

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance
RF24 radio(4,5); // De CSN en de CE pins (ik dcaht dat de CSN ook wel als de SS pin gezien kon worden)

void setup() {
 Serial.begin(115200); // Initialize serial communications with the PC
 SPI.begin(); // Init SPI bus
 mfrc522.PCD_Init(); // Init MFRC522
 mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details
 Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
 radio.begin();
 radio.setPALevel(RF24_PA_MIN);
 radio.openWritingPipe(adres);
 radio.stopListening();
}

void loop() {
 // Look for new cards
 if ( ! mfrc522.PICC_IsNewCardPresent()) {
   return;
 }

 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
   return;
 }
 delay(100);
 scans = scans + 1;
 Serial.println(scans);
 radio.write(&scans, sizeof(scans));
 delay(100);
}

nicoverduin

Dan nu nog een laatste tip.... "het werkt niet naar behoren".... hoe groot schat je de kans in dat iemand begrijpt waar je het over hebt
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

akatchi

Sorry, ik zal het even uitleggen, de NRF24 transmit het wel maar stopt na 1 of 2 keer ermee, terwijl het in een loop functie staat. Ook gaat de indicator LED op pin 13 uit, en de receiver ontvangt niks.

MAS3

Je gebruikt een library.
Die library zorgt voor de communicatie met de module, en die stuurt de signalen dus op de juiste wijze aan, aangenomen dat ze goed zijn ingesteld.

In mijn vorige post had ik het over het gebruik van const.
Das dus wat je het best kunt doen met die pinnen.
Het instellen van de twee modules gebeurt op exact dezelfde wijze, maar ik vraag me af of je dat wel hebt gezien.

Wat je doet is dit, als de "variabelen" worden opgelost:

Code: [Select]

RF24 radio(7, 8);
MFRC522 mfrc522(10, 9);


Das dus twee keer hetzelfde voor die modules.
Je RF24 noem je voortaan radio, en hebben de pinnen 7 en 8 nodig naast 'the obvious' SPI pinnen.
Je RFID noem je voortaan mrfc522, en hebben de pinnen 10 en 9 nodig naast de SPI pinnen.

Als je goed gelezen hebt (ik blijf het zo doen dat je minstens twee keer moet lezen), dan zie je dat ik het eerst over const had en nu over variabele.
Dat zijn twee tegenovergestelden.
Een const heet zo omdat ie nooit verandert en dus CONSTant is.
Een variabele heet zo omdat ie moet veranderen.
Const wordt door je compiler (de IDE) opgelost, een variabele moet door de Arduino worden bijgehouden en heeft daarom ruimte nodig.
En in de Arduino is ruimte schaars.
#define maakt ook een constante, maar dat gaat verder en is dan niet altijd vergelijkbaar als "vaste variabele".

Dit zijn allemaal dingen waar je op moet letten als je stabiele code wil maken, die lang kan blijven werken.

Dat dit fout gaat komt omdat je een aantal gevonden en werkende codes hebt gepakt, en bij elkaar hebt geveegd zonder eerst te begrijpen wat er gebeurt.
Die werkende codes zijn gemaakt om te laten zien hoe iets werkt, dus juist om dat uit te vinden.

Ik ga nu je code aanpassen zodat het op die manier werkt, zodat je ook nog beter kunt begrijpen wat er gebeurt in die code.
Daarvoor doe ik alleen wat met namen, dus definities en consts.


Code: [Select]

#include <SPI.h>
#include <MFRC522.h>
#include "RF24.h"

#define RFID_RST_PIN         9      
#define RFID_SS_PIN          10    
#define radio_SS_pin         4
#define radio_ CE_pin        5
  

byte adres[6] = {"adres"};
int scans = 0;

MFRC522 RFID(RFID_SS_PIN, RFID_RST_PIN);  // Create MFRC522 instance
RF24 radio(radio_SS_pin,radio_CE_pin); // De CSN en de CE pins (ik dacht dat de CSN ook wel als de SS pin gezien kon worden)

void setup() {
 Serial.begin(115200); // Initialize serial communications with the PC
 SPI.begin(); // Init SPI bus
 RFID.PCD_Init(); // Init MFRC522
 RFID.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details
 Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
 radio.begin();
 radio.setPALevel(RF24_PA_MIN);
 radio.openWritingPipe(adres);
 radio.stopListening();
}

void loop() {
 // Look for new cards
 if ( ! RFID.PICC_IsNewCardPresent()) {
   return;
 }

 // Select one of the cards
 if ( ! RFID.PICC_ReadCardSerial()) {
   return;
 }
 delay(100);
 scans = scans + 1;
 Serial.println(scans);
 radio.write(&scans, sizeof(scans));
 delay(100);
}


Je begint je loop met controleren of er een kaart is, daarna of je daarvan het serienummer kunt lezen, en dan met een delay van 0,1 seconde.
Moet dat met die delay ?

Code die ineens stopt na een tijdje, doet vermoeden dat je geheugen vol loopt.
Maar of dat echt zo is weet ik natuurlijk niet.
Ik weet niet of er niet nog meer van die kaart getrokken word, en wat er dan mee word gedaan.
Zie je in de serial monitor hetzelfde voorbij komen als via de ontvanger ?

Wat er met pin 13 gebeurt weet ik niet want ik zie die hier nergens tussen staan.
Maar dat zal wel iets met de library te maken hebben.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

akatchi

"Wat je doet is dit, als de "variabelen" worden opgelost"
Klopt, ik had dit even gedaan zodat het duidelijk werd welke pinnen ik gebruikte voor jullie, zelf gebruik ik ook altijd
Code: [Select]
RF24 radio(7, 8);

Maar de libraries doen dus nu het werk voor mij eigenlijk als ze iets moeten sturen, want ik zelf hoef niet die SS pin HIGH of LOW aan te geven, of doet die het daarom niet? Want dat was het gedeelte dat ik niet zo goed snapte.

"Moet dat met die delay ?"
Nee absoluut niet, ik deed die delay erin omdat ik dacht dat de RFID en de NRF24 elkaar lieten crashen door een RFID kaart te lezen die SPI gebruikt, en daarna meteen data doorstuurt via de NRF24, ik dacht dat dat misschien voor een conflict veroorzaakte.

"Zie je in de serial monitor hetzelfde voorbij komen als via de ontvanger ?"
De ontvanger ontvangt zelf niks, ik heb dit probleem al continue met de NRF24 daarom heb ik 3.3V level shifters gekocht in de hoop dat die het probleem zullen oplossen, dus dat heeft waarschijnlijk niks met deze code te maken, maar even wachten op de level shifters.

"Wat er met pin 13 gebeurt weet ik niet want ik zie die hier nergens tussen staan."
PIN 13 is zo'n MISO, MOSI, SCK pin (dat wist je natuurlijk al wel), dus ik denk dat die 2 conflicten met elkaar aangezien de indicator LED op het bord brand, na die 2x stopt de code en brand dat lampje niet meer.

Maar als ik het goed begrijp klopte mijn code wel, alleen even netjes maken met die variabelen en de const?
En dan klopt het ook dat de libraries er zeg maar voor zorgen dat die SS pin LOW of HIGH gaan?


Hartstikke bedankt MAS voor al je tijd en hulp, ik kom langzaam stapje bij stapje verder!

MAS3

Inderdaad neemt de library je die zorgen uit handen en hoef je dat dus zelf niet meer te doen.
In hoeverre jouw code precies klopt weet ik niet want ik ben niet met RFID en/of NRF bezig.
Ik kan je dus alleen wat vertellen over hoe je code in elkaar zit, maar de specifieke dingen weet ik ook niet en moet ik dan opzoeken (en daar heb ik lang niet altijd zin in).
Daarom weet ik dus dat die CSN inderdaad de !SS pin is met een andere naam, en de CE pin de chip aanzet (Chip Enable, volgens datasheet zet die de zender / ontvanger aan).
Dat opzoeken kun je natuurlijk zelf ook.

Voor debug doeleinden is een delay() zinvol.
Voor de meeste andere zaken moet je dat niet gebruiken.

Als je communicatie niet werkt, dan moet je eerst maar eens een voorbeeld sketch opzoeken die specifiek voor jouw product bedoeld is.
Wie weet gebruik je nu iets dat helemaal niet voor dit ding geschikt is.
Eerst laten werken en bestuderen hoe het dan werkt.
Pas als je dat snapt kun je er je eigen toepassing mee gaan maken.
Als er datasheets van je product te vinden zijn, dan moet je die gewoon ophalen en bij de hand houden.
Vaak staan die dingen vol met allerlei ingewikkelde technische details, maar dat is ook wat je nodig hebt.
Lees die dingen een paar keer door.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

nicoverduin

En ik heb nog nooit level shifters gebruikt voor de nRF24L01.... 
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

Go Up