1 knops bediening dc motor met stroombegrenzer

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 13
Geregistreerd: 24 Jan 2013, 22:59

1 knops bediening dc motor met stroombegrenzer

Berichtdoor rover8772 » 16 Apr 2013, 07:36

Hallo,

Zoals de titel al doet vermoeden ben ik bezig met een 1knopsbediening van een dc motor met stroombegrenzer.
Het bestaande ontwerp is er één met een PIC. Nu wil ik deze vervangen door een ATtiny85. De print is al aangepast, alleen met de code wil het niet lukken.
omhet simpel te houden is het volgende van toepassing:
door op één switch te drukken gaat led 1 aan en blijft aan zolang de switch ingedrukt is (led 2 is uit). Laat je de switch weer los en drukt hem weer in, gaat led 2 aan, net zolang totdat je de switch loslaat en vice versa dus. daar komt bij dat als er een puls van de stroombegrenzer komt, alle leds uit moeten. dus op mijn breadboard heb ik 2 switches en 2 leds. switch 1 is om de leds om en om te schakelen, en switch 2 is om een puls te geven, zodat alle leds uitgaan.
iemand een idee voor een sketch ?

Advertisement

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor astrofrostbyte » 16 Apr 2013, 19:39

Meestal omschrijf ik dit soort gedrag in een state-machine, waar 'events' zoals :switch, tijd, pulsen, wisselingen tussen de states genereren.
Zoiets in met een switch-case prima te coderen.
Vaak is het handig om eerst even een 'bolletje' diagram te tekenen met alle states en mogelijke event. tevens de ongewenste events bv timeouts enzo.
http://en.wikipedia.org/wiki/Finite-state_machine

een mooie gratis flowcharter is : http://www.yworks.com/en/products_yed_about.html
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 13
Geregistreerd: 24 Jan 2013, 22:59

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor rover8772 » 18 Apr 2013, 16:17

heb al het een en ander doorgelezen, is niet echt makkelijke materie...maar bedankt voor de tip ! enig idee voor een goeie librarie voor state machine,met goede uitleg over de werking ?

Berichten: 13
Geregistreerd: 24 Jan 2013, 22:59

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor rover8772 » 20 Apr 2013, 00:19

Ik heb het aan de praat, gewoon met if then gebeuren...en een state counter. echter als ik de sketch run, blijft 1 ledje heel zwak branden, wat kan hiervan de oorzaak zijn ? Heb op een UNO en een MEGA2560 getest, in beide gevallen blijft 1 ledje zwakjes branden. (ik heb nog geen spanning gemeten en ik denk dat het wel een logische nul zal zijn ,maar vind het vreemd dat er stroom vloeit, als ik de uitgang 'laag' zet...)

de gebruikte sketch:
------------------------------------------------------
const int button1 = 22;
const int button2 = 24;
const int led1 = 11;
const int led2 = 12;

int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
int currentpeak;

void setup() {

pinMode(button1, 0);
pinMode(button2, 0);
pinMode(led1,1);
pinMode(led2,1);

Serial.begin(9600);
digitalWrite (led1,0);
digitalWrite (led2,0);
}


void loop() {



buttonState = digitalRead(button1);
delay (5);
currentpeak = digitalRead(button2);
delay (5);

if (buttonState != lastButtonState) {

if (buttonState == HIGH)
{buttonPushCounter++;
Serial.println("on");
Serial.println(buttonPushCounter %2);}
else
{Serial.println("off");}
}

lastButtonState = buttonState;



if (buttonPushCounter %2 ==1)
{digitalWrite(led1,1);
digitalWrite(led2,0);}
if (lastButtonState == 0)
{digitalWrite(led1,0);}

if (buttonPushCounter %2 ==0)
{digitalWrite(led2,1);
digitalWrite(led1,0);}
if (lastButtonState == 0)
{digitalWrite(led2,0);}

if (currentpeak == 1)
{digitalWrite(led1,0);
digitalWrite(led2,0);}

}

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor astrofrostbyte » 20 Apr 2013, 09:46

ik zie twee keer "if (lastButtonState == 0) " dus kunnen samengeveoegd of moet mischien '== 1' zijn
if (buttonPushCounter %2 == 1) en if (buttonPushCounter %2 == 0) kan met een if else

Als "currentpeak == 1" zijn alle andere if's niet meer van belang, dus if else past hier ook wel.

Ik persoonlijk heb een voorkeur aan (buttonPushCounter & B00000001) over de modulo

Code: Alles selecteren
const int button1 = 22;
const int button2 = 24;
const int led1 = 11;
const int led2 = 12;

int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
int currentpeak;

//-------------------------------------------------
void setup()
{ pinMode(button1, INPUT);                      // INPUT == '0'
  pinMode(button2, INPUT);                      //
  pinMode(led1,OUTPUT);                         //
  pinMode(led2,OUTPUT);                         //

  Serial.begin(9600);
  digitalWrite (led1,LOW);                      //
  digitalWrite (led2,LOW);                      //
}

//-------------------------------------------------
void loop()
{
  buttonState = digitalRead(button1);
  delay (5);
  currentpeak = digitalRead(button2);
  delay (5);

  if (buttonState != lastButtonState)
  { if (buttonState == HIGH)
    { buttonPushCounter++;
      Serial.println("on");
      Serial.println(buttonPushCounter %2);
    }
    else
    { Serial.println("off");
    }
  }
  lastButtonState = buttonState;

  if (currentpeak == 1)
  { digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
  }
  else
  { if (buttonPushCounter %2 == 1)
    { digitalWrite(led1,HIGH);
      digitalWrite(led2,LOW);
    }
    else   //if (buttonPushCounter %2 == 0)
    { digitalWrite(led1,LOW);
      digitalWrite(led2,HIGH);
    }
   
    if (lastButtonState == 0)
    { digitalWrite(led1,LOW);
    }
    if (lastButtonState == 1)       // mischien ==1 ?? dus evt else
    { digitalWrite(led2,LOW);
    }
  }//else
 
}//loop
//-------------------------------------------------



ps. jammer dat we nog geen syntax highlighting hebben :geek:
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 13
Geregistreerd: 24 Jan 2013, 22:59

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor rover8772 » 20 Apr 2013, 10:27

is niet helemaal goed, de bedoeling is dat led 1 blijft branden, zolang buttonstate HIGH is, is deze LOW en vervolgens weer HIGH moet led 2 gaan branden net zolang dat buttonstate HIGH is.
de if else met currentpeak heb ik wel ge-impementeerd ..kan nu niet goed zien of een van de led zwak brand, vanwege de zon hier LOL

thanx voor de feedback

Berichten: 13
Geregistreerd: 24 Jan 2013, 22:59

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor rover8772 » 20 Apr 2013, 10:32

net even gekeken met afgeschermde led, maar hij blijft zwak branden...vreemd...

Off topic: hoe kan ik een sketch/code zo plakken zoals hierboven ?

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor astrofrostbyte » 20 Apr 2013, 10:35

ah ok, moet zeggen dat ik het niet helemaal snap , hoe ziet je werkende code er nu uit ?.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 13
Geregistreerd: 24 Jan 2013, 22:59

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor rover8772 » 20 Apr 2013, 17:31

ff snel filmpje gemaakt van hoe het bedoeld is....

http://www.youtube.com/watch?v=7c4tClQg5yE


de code:




const int button1 = 22;
const int button2 = 24;
const int led1 = 11;
const int led2 = 12;

int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
int currentpeak = 0;

void setup() {

pinMode(button1, 0);
pinMode(button2, 0);
pinMode(led1,1);
pinMode(led2,1);

Serial.begin(9600);
digitalWrite (led1,0);
digitalWrite (led2,0);
}


void loop() {



buttonState = digitalRead(button1);
delay (5); //debounce
currentpeak = digitalRead(button2);
delay (5); //debounce

if (buttonState != lastButtonState) {

if (buttonState == HIGH)
{buttonPushCounter++;
Serial.println("on");
Serial.println(buttonPushCounter %2);}
else
{Serial.println("off");}
}

lastButtonState = buttonState;

if (currentpeak == HIGH)
{digitalWrite(led1,0);
digitalWrite(led2,0);}

else
{
if (buttonPushCounter %2 ==1)
{digitalWrite(led1,1);
digitalWrite(led2,0);
if (buttonState == 0)
{digitalWrite(led1,0);
digitalWrite(led2,0);}
}
else
{digitalWrite(led2,1);
digitalWrite(led1,0);
if (buttonState == 0)
{digitalWrite(led1,0);
digitalWrite(led2,0);}
}
}
}

Berichten: 13
Geregistreerd: 24 Jan 2013, 22:59

Re: 1 knops bediening dc motor met stroombegrenzer

Berichtdoor rover8772 » 20 Apr 2013, 18:07

het vreemde is, dat als de 2e switch bedient wordt (peakcurrent) dan zijn beide led's gedoofd, laat je switch 2 los, brand er één led heel zwak, terwijl ik toch beide uitgangen op LOW heb staan...is voor de werking niet erg, maar vind het een vreemde gewaarwording..

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten