Pages: [1]   Go Down
Author Topic: Programvelger for valg av underprogram  (Read 1271 times)
0 Members and 1 Guest are viewing this topic.
Norway
Offline Offline
Jr. Member
**
Karma: 0
Posts: 55
Electronics engineer with a great interest in photography (using Canon)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Jobber fortsatt med mitt hi-speed dråpe-foto prosjekt
 
Jeg har nå laget flere programmer med forskjellige settinger på delay-parametrene og hvert av disse programmene resulterer i forskjellige type dråpebilder. Disse småprogrammene er egentlig helt like, men det er satt inn forskjellige verdier på delay-parametrene.

Nå tenker jeg å lage et program som inneholder flere (gjerne 12) av mine beste delay-valg og legge disse valgmuligheten tilgjengelig via en programvelger. Tenkte tidligere å benytte en blokk med flere DIP-brytere som programvelger, men finner det nå mer ønskelig å heller bruke en vribryter med 1 inngang og 12 utganger. Dette fordi en vrifryter er enklere å montere inn i et kabinett på en pen måte.

Kan jeg for eksempel lodde på en serie med motstander på vribryteren slik at Arduinoen (via en analog inngang) leser verdiene 1K ohm for programvalg 1, 2K ohm for programvalg 2.......12K ohm for programvalg 12. Og så lime sammen 12 av mine småprogram til ett stort fellesprogram hvor verdien på programvelgeren er den som styrer hvilket underprogram som er aktivt?

Tenker til slutt å flytte hele programmet over på en Atiny85 chip som bare har 5-6 innganger, så derfor må jeg spare på portene. Har allerede brukt 3-4 innganger for kamera, blits og 1-2 magnetventiler (samt muligens et POT-meter).
Logged

BjornTore

Denmark
Offline Offline
Edison Member
*
Karma: 37
Posts: 1096
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ideen med en vrideomskifter kan sagtens bruges, du kan så lægge dine forskellige programversioner i hver sin funktion.
Jeg prøvede lige at teste ideen med et potmeter på A0:

Code:

 int val;
  
  void setup() {                
  
    Serial.begin(9600);
  }
  
  void loop() {
    val=analogRead(A0);
    Serial.print("Loop");
    Serial.println(val);
    if(val>100&val<300){
      func1();
    }
  
    if(val>301&val<400){
      func2();
    }
  
    delay(200);
  
    }//Loop
  
  void func1(){
    Serial.println("funk1");
  }
  
  void func2(){
    Serial.println("funk2");
  
  }

« Last Edit: February 29, 2012, 09:42:47 am by Erni » Logged

Copenhagen, Denmark
Offline Offline
Edison Member
*
Karma: 33
Posts: 1228
Have you testrun your INO file today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nu er en Atmel chip ikke en Ohm-måler, men spænding, men jeg forstår hvad du mener at gøre smiley Hvis 12 modstande har 2% nøjagtighed, så kan en worst case være 24% forkert ... ehr... jeg har ikke tænkt det igennem, men det kan du sikkert. Jeg har ikke kigget på Atiny85 spec sheet hvad område/nøjagtighed dens analog indgang er.

Nåh, til programmering som jeg til gengæld ved mere om.  smiley-cool Jeg vil nok skrive det som
Code:
void loop() {
 val = analogRead(pin) ;
 // delay debug print og andet sjov
 if      ( val <  86 ) func1() ;
 else if ( val < 170 ) func2() ;
 else if ( val < 260 ) func3() ;
  :
 else if ( val < 937 ) func11() ;
 else                  func12() ;
}
Her er man garanteret at en, og kun en, af funktionerne bliver brugt, og man skal kun angive skifteværdierne een (1) gang. Den anden metode kan man nemmere lave et overlap eller have en værdi der ikke matcher nogen if. (Hvad sker ved værdien 300 i det forrige eksempel?)

Og bare for at blære mig  smiley-razz  (undskyld, det er ikke ment sådan ) så er
Code:
val>301&val<400
ikke helt rigtigt - det virker men det er ikke det du beder om. Et enkelt "&" er BitWise-AND som virker hvis de to udtryk er logiske. Det vil være mere korrekt at bruge "&&" som er en logisk operation AND. Det gør ingen forskel i dette eksempel, men hvis udtrykket er mere komplekst kan compileren optimere det logiske udtryk, det kan den ikke når der er bit-wise operatører i midten.

Jeg fortrækker at skrive "between" som
Code:
301 <= val && val <= 400
jeg synes det ser smukkere ud (smag og behag) og viser mere tydeligt at val ligger "mellem 301 og 400".


Logged

Denmark
Offline Offline
Edison Member
*
Karma: 37
Posts: 1096
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
val>301&val<400

Ups ja, det var en smutter  smiley-red, iøvrigt er jeg helt enig i dine betragtninger, jeg kastede det bare hurtigt sammen for at vise at princippet med vrideomskifteren var godt nok.
Jeg havde nu heller ikke tænkt over det med tolerancen på modstandene, men det kan man jo løse ved at justere intervallerne.

En Attiny85 har 10bit opløsning på ADC'en
Logged

Norway
Offline Offline
Jr. Member
**
Karma: 0
Posts: 55
Electronics engineer with a great interest in photography (using Canon)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Supert. Er kjempeimponert over hva disse mikrochipene kan brukes til og hvor dyktige dere er. Jeg har bestilt meg 4 stk. ATtiny85 (og en Arduino Nano), samt noen vri-omkoplere med 12stepp.

Ser imidlertid at ATtiny85 bare støtter disse Arduino komandoene. "If, then" kan derfor ikke brukes. Mulig det betyr at jeg må bruke Arduini Nano alikavel?

•pinMode()
•digitalWrite()
•digitalRead()
•analogRead()
•analogWrite()
•shiftOut()
•pulseIn()
•millis()
•micros()
•delay()
•delayMicroseconds()
Logged

BjornTore

Norway
Offline Offline
Jr. Member
**
Karma: 0
Posts: 55
Electronics engineer with a great interest in photography (using Canon)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

http://hlt.media.mit.edu/?p=1229
Logged

BjornTore

Denmark
Offline Offline
Edison Member
*
Karma: 37
Posts: 1096
Happy Hobbyist
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

jo, jo da if..then og alle de andre fungerer skam udmærket på att85, den eneste forskel er at mange af bibliotekerne til arduino ikke kan bruges.

Der er vist almindlig enighed om at denne core er mere stabil end HLT som du linker til

http://code.google.com/p/arduino-tiny/

Den er lavet af Coding Badly her på forum

« Last Edit: February 29, 2012, 04:07:17 pm by Erni » Logged

Pages: [1]   Go Up
Jump to: