Go Down

Topic: Instabiel (Read 248 times) previous topic - next topic

Vanderhaak

Dag

Ik heb een groot project met veel arduino onderdelen.
Bestaande uit rfid, relais, lcds e.d.

Nu lopen heel veel van deze onderdelen regelmatig vast.  Ik heb geen idee├źn meer  waarom dat kan zijn.

Ik gebruik overal 12v aanvoer 1.25 A voeding per unit via een 23 AWG kabel van maximaal 10 meter. Lijkt me dat er dan voldoende overblijft.

Er gaat dus alleen spanning over die kabel. Sensoren zijn vlak bij de units. Onderstaand script bijvoorbeeld. Hierbij moet ik toevoegen dat ook de schakelaars via deze 23awg kabel lopen.

Dus 3 kabels met 12V naar 3 arduinos met een rfid reader incl relais.

Retour per rfid een kabel die via het relais loopt. (zelfde kabel als de 12v aanvoer)

 Die drie schakelaars hebben een eigen digitale poort die via input_pullup schakelen. Die werken goed.

De vierde is alleen een schakelaar die via een kabel van 7 meter op dezelfde manier via input pullup werkt.  Deze laatste werkt prima als ik reset, maar na een minuut of 10 werkt die niet meer. Reset ik, dan.doet hij het weer.
Echter een getimde periodieke software reset (asm volatile) lost het niet op.

Ben ten einde raad.  Heb haast op elke unit problemen.
Zit volgens mij niet in de scripts.

Aansluiting op arduino via dupont pennen of via breakout bord met schroefklemmen.  Niks helpt.  Ook 12V 4A aambieden lost het niet op.

Zelfs een eenvoudig lcd scherm met keypad loopt vast. Daarbij loopt de aanvoer spanning via een kabel van nog geen 5 meter.

Wie weet raad.

Woont er wellicht  nog een specialist in Zwolle om eens te kijken samen?


Een vd  scripts

int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4= 0;
int relay = 7;
int MP3 = 13;
int A;

void setup(){
 
pinMode(8, INPUT_PULLUP); // Biljet 1
pinMode(9, INPUT_PULLUP); // biljet 2
pinMode(10, INPUT_PULLUP); // biljet 3
pinMode(11, INPUT_PULLUP); // kluis
pinMode(MP3, OUTPUT); // MP3
pinMode(relay, OUTPUT); // RELAIS 1

   Serial.begin(9600);   

}

void loop(){
  Serial.println("-------------------");
A++;
delay(500);
Serial.println(A);
buttonState1 = digitalRead(8);
buttonState2 = digitalRead(9);
buttonState3 = digitalRead(10);
buttonState4 = digitalRead(11);

if ((buttonState1 == LOW)
&& (buttonState2 == LOW)
&& (buttonState3 == LOW)
)
{ digitalWrite(MP3, HIGH);
    if (buttonState4 == LOW) {
    digitalWrite(relay, HIGH);
Serial.println("reset over 5 sec");

    delay(5000);

softReset();

    }
   
    else {

digitalWrite(relay, LOW);
 delay(500);
}

    }
else{
    digitalWrite(relay, LOW);
    digitalWrite(MP3, LOW);
    }
if ((A>300))
{
  Serial.println("reset over 5 sec");

    delay(5000);

  softReset();
}

}



void softReset (){
asm volatile ("  jmp 0");
}


Ook zonder de software reset werkt dit eenvoudige script dus niet.

Wolf91

Heb je al geprobeerd om alle onderdelen los te laten werken, en dan na een tijd onderdelen op elkaar aan te sluiten? Daarmee kan je zien of het probleem door 1 onderdeel komt of door meerdere.

MAS3

#2
Jun 09, 2019, 01:37 am Last Edit: Jun 09, 2019, 01:41 am by MAS3 Reason: Verduidelijking
Hoi Vanderhaak, welkom.

Ik neem aan dat dit een geheel ander project met een geheel ander probleem is, als dit onderwerp (klik!).

Beide onderwerpen vertellen over een bepaald probleem, maar net niet diepgaand genoeg om een idee te krijgen over de hardware.
De software is er gewoon als tekst bijgezet, en vermoedelijk is het niet eens opgevallen dat dat dus fout gaat.

Neem daarom even de tijd en lees de forum - gebruiksaanwijzing (klik !), samen met de inhoud van de link naar het Engelstalige zuster onderwerp eens aandachtig door.
Zo krijg je een idee hoe je ons kunt helpen jou te helpen.

Je doet dus iets met een paar voedigen, Amerikaanse kabel van hooguit 10 meter lang (die tegelijk voor voeding en voor data en/of schakelsignalen gebruikt word), iets met RFID, LCD en relais (allen in meervoud, ik vermoed 3 stuks van ieder).
Dan is er een probleem als de Amerikaanse kabel 7 meter lang is, en dat probleem kan tijdelijk worden opgelost als er een reset gegeven word.
Zelfs als je de voeding door een lastrafo vervangt blijft het probleem.
En het aanroepen van assembler code die een reset moet veroorzaken door naar adres nul te springen werkt ook niet.


Je hebt zo van alles in je project benoemd, maar geen enkel detail gegeven.
Mag ik daarmee aannemen dat je losse relais direct aan Arduino pinnen hebt aangesloten ?

Want dat moet je niet doen omdat zo'n relais zeer waarschijnlijk veel te veel stroom trekt voor een Arduino pin.
Je moet het niet doen omdat de spoel van dat relais ook een nog grotere inschakelstroom heeft (die wel kort duurt maar ver boven de specificaties is van wat die pin kan leveren).
Je moet het niet doen omdat de spoel energie opslaat, en met geweld vrij kan/zal geven als er iets verandert in de aanvoer van deze energie.
Je moet het niet doen omdat zulke energie die over lange (tot wel 10 meter) kabels (of beter antennes) heel mooi verdeeld kan worden over andere apparaten die hier wel eens gevoelig voor zouden kunnen zijn.

Maar ik weet natuurlijk niet met zekerheid of dit is hoe jij het nu gebouwd hebt.
Want wie weet heb je passende modules gebruikt die op de juiste manier met deze fenomenen overweg kan.

1 kabel gebruiken voor verschillende doeleinden kan natuurlijk wel, want dat doet iedereen.
Maar ook daarbij moet je wel weten wat je dan doet, en of dan die Amerikaanse kabel wel de juiste is.

En natuurlijk werkt het resetten niet.
Dit niet zozeer omdat je wel of niet de juiste code gebruikt, want ik heb geen idee of een JuMP naar nul hetzelfde is als een reset.
Maar als je code zou zijn vastgelopen, dan is het niet zo heel zinvol om de code naar nul te laten springen.

Alle dingen die ik hierboven genoemd heb zijn oplosbaar.
Heb je bijvoorbeeld wel eens van een watchdog timer gehoord  ?
Maar zo'n WDT is er niet voor om te resetten voor er iets vastloopt, maar om te resetten nadat er wat is vastgelopen.

Zo, aardig verhaal alweer op 1e pinksterdag.
Dus ik ga er maar eens mee stoppen.
Maar begin eens met het leven van het linkje in de 4e alinea van dit verhaal, en volg dat dan op door gedetailleerde informatie te geven.

We hoeven ook niet te weten hoe jouw kluis er uit ziet, maar wel alles dat met dit onderwerp te maken heeft,
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

Go Up