Het doel van het volgende project is om data uit te lezen van een arduino nano mbv spi
het prject bestaat uit 2 nano's
nano 1 is de master spi die de data ophaalt uit de slave nano.
om thuis te raken in de spi communicatie heb ik eerst een voorbeeld scetch van internet gehaald voor zowel de master als de slave.
nu heb ik het volgende fenomeen:
als de master nano 0 opstuurt (ingang 2 laag) dan krijg de master netjes antwoord van de slave >>
ingang 2 slave laag de master krijgt 0 binnen ingang 2 slave hoog > master krijgt 1 binnen en stuurt dan de led aan (uitgang 7) echter als de master een 1 opstuurt naar de slave dan komt dit niet aan in de slave. de ISR op de alve wordt niet aangeroepen als er iets anders als een 0 wordt opgestuurd.
doe ik iets verkeerd? heeft iemand hier ervaring mee?
Misschien kun je die sketches hier neer zetten zodat iemand met verstand van zaken (waarschijnlijk ben ik dat niet) er eens naar kan kijken.
Vergeet niet om zogenaamde code tags te gebruiken. Het eenvoudigste is dit te bereiken door copy for forum te gebruiken in de IDE; ik meen me te herinneren dat het in het edit menu zit.
Ik weet niet helemaal zeker of ik je probleem begrijp. Misschien kun je dat nog eens op een andere manier verwoorden?
bedankt voor je reactie
het betreft een simpele scetch die een ingang op de master visualiseert op de slave en andersom.
dit is de master scetch:
`
#include<SPI.h>
#define push 2
#define LED 4
int x;
int value;
void setup (void)
{
Serial.begin(115200);
pinMode(push,INPUT);
pinMode(LED,OUTPUT);
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV8);
digitalWrite(SS,HIGH);
}
void loop(void)
{
byte m_send,m_receive;
value = digitalRead(push);
if(value == HIGH)
{
x = 1;
}
else
{
x = 0;
}
digitalWrite(SS, LOW);
m_send = x;
m_receive=SPI.transfer(m_send);
if(m_receive == 1)
{
digitalWrite(LED,HIGH);
}
else
{
digitalWrite(LED,LOW);
}
delay(1000);
}
en dit de slave:
#include<SPI.h>
#define inputbutton 2
#define outputLED 4
volatile boolean received;
volatile byte Slavereceived,Slavesend;
int buttonvalue;
int x;
void setup()
{
Serial.begin(115200);
pinMode(inputbutton,INPUT);
pinMode(outputLED,OUTPUT);
pinMode(MISO,OUTPUT);
SPCR |= _BV(SPE);
received = false;
SPI.attachInterrupt();
}
ISR (SPI_STC_vect)
{
Slavereceived = SPDR;
received = true;
}
void loop()
{
if(received)
{
if (Slavereceived==1)
{
digitalWrite(outputLED,HIGH);
}else
{
digitalWrite(outputLED,LOW);
}
buttonvalue = digitalRead(inputbutton);
if (buttonvalue == HIGH)
{
x=1;
}else
{
x=0;
}
Slavesend=x;
SPDR = Slavesend;
delay(1000);
}
}
`
Als de master x=0 oftewel value = digitalRead(push); is laag
stuurt de slave de waarde van de ingang door en gaat dus de led op de master branden (als de ingang op de slave hoog is natuurlijk)
als, terwijl de slave een 1 geeft en dus de led op de master brand, de ingang van de master hoog wordt dan gaat de led op de master uit terwijl de ingang op de slave hoog blijft natuurlijk
ik heb een regel toegevoegd die de waarde van x op de master van 0 naar 255 laat lopen dan alleen als de waarde 0 is komt een reactie op de slave. alleen dan wordt de subroutine doorlopen als de ontvangen waarde anders dan 0 is dan wordt de subroutine niet aangeroepen.
Het voorbeeld is gebruikt op 2 uno's en ik wil 2 nano's gebruiken maar dat kan het volgens mij niet zijn
Dat is niet goed gegaan met de sketches tonen.
Het is nu iets te laat voor mij om me daar op te werpen, maar zou je nog eens kunnen proberen beide sketches op de juiste wijze te plaatsen?
Klik daarvoor op het </> symbooltje boven in het venstertje waar je je antwoord typt, en voer je sketch dan in op de plaats die op je scherm verschijnt.
update
ik heb wat andere sketches van internet geprobeerd:
allemaal met hetzelfde resultaat
als de master via SPI.transfer(x) een waarde 0 opstuurd komt deze aan in de slave
een ander getal komt niet aan >> de subroutine wordt niet opgeroepen.
stuurt de master een getal anders dan 0 niet op of komt het getal niet aan in de slave
Hoe groot is de afstand tussen de master en de slave nu ?
Afstand is 10cm op hetzelfde experimenteer board
probleem opgelost!!!!
arduino master pin 10 zat op slave 11 en vice versa.....
dat verklaart alles het werkt nu
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.