Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

  • kitao
  • Registratie: juli 2012
  • Laatst online: 22-05 16:27
DurkVell schreef op dinsdag 12 maart 2019 @ 08:00:
@kitao : is het een idee om voor de liefhebbers van dit hele verhaal een apart topic te openen?
Misschien wel een goed idee :) en ik hoop dat het jou niet stoort natuurlijk aangezien niemand jou dwingt om dit 'hele verhaal' te lezen, maar desondanks is dit inderdaad al een behoorlijke serie geworden dat al begon bij het opzetten van Simulide en zag niet aankomen dat dit tamelijk uitgebreid werd. Bovendien is het niet aan mij om al die postjes achteraf nog te gaan verzamelen, plus bovendien is dit al bijna de laatste van dit projectje en dan stop ik waarschijnlijk voorlopig even met dat plaatjes tekenen.
En wie door blijft klikken op de linkjes van 'vorige post' komt vanzelf ergens bij het begin uit, verder terug als 1 januari dit jaar gaat dat niet. De volgende vorige post op mijn naam staat dan ergens op 2014 en wie zich afvraagt hoe dat komt is dit dus alvast een hint.




Je hoort de electronen stromen

Topic reports zijn ervoor dat je niet in het forum hoeft te klagen.


Dit is waarschijnlijk de laatste tussenstap, 1 chip zit geknoopt en de tweede zal ongeveer hetzelfde worden, daarna wordt het uren programma bij het al gemaakt seconden-minuten zu sammen gesmeltet en dan is het af.
Ik had ook kunnen wachten totdat de tweede chip er ook aan zit maar met 1 chip blijft het principe duidelijker. De opzet van de code is zelf bedacht, wou namelijk eerst iets met bitshift doen maar kwam uiteindelijk op machtsverheffen uit nadat het patroontje wat duidelijker werd.


klik voor groter

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 0011 =  3 = 2^2 - 1
// 0111 =  7 = 2^3 - 1
// 1111 = 15 = 2^4 - 1  etc.
// Met deze benadering valt er een lus te maken.
// pow bleek nodig te zijn om machts te verheffen (in shiftout regel 22) 
// Uren-led U00 blijft net als bij de minuten-led M00 buiten beeld.

int latchpin = 6;     // Pin aangesloten op ST_CP van 74HC595
int clockpin = 13;   //  Pin aangesloten op SH_CP van 74HC595
int datapin = 12;   //   Pin aangesloten op DS    van 74HC595
int t = 1000;      //    Verander hier de snelheid in milli-seconden

void setup() {
  pinMode(latchpin, OUTPUT);    // Zet de pinnen op Output
  pinMode(clockpin, OUTPUT);
  pinMode(datapin,  OUTPUT);
}
void loop() {
  for (int i = 2 ; i < 9 ; i++) { 
    
    digitalWrite(latchpin, LOW);  // Latchpin laag
    shiftOut  (  datapin, clockpin, LSBFIRST,  pow ( 2 , i ) - 1  );
    digitalWrite(latchpin, HIGH); // Latchpin Hoog
    
    delay(t);   }   // delay + einde for-lus
    
    digitalWrite(latchpin, LOW);  // Latchpin laag
    shiftOut  (  datapin, clockpin, LSBFIRST, 0  );  // Alle leds uit
    digitalWrite(latchpin, HIGH); // Latchpin Hoog
    
    delay(t);  
    
}  // return naar void loop

SA007 wijzigde deze reactie 13-03-2019 10:25 (7%)


  • DurkVell
  • Registratie: augustus 2011
  • Laatst online: 00:32
kitao schreef op dinsdag 12 maart 2019 @ 12:56:
[...]

[heel verhaal]

Ps\
ik heb je gerapporteerd voor topic verzieken met niks toevoegend gezeik.
gefeliciteerd

[heel verhaal]
Je bent gelukkig nog niet veranderd: snel op je 'p' getrapt. :)
Ik bedoelde het goed hoor! Maar die "lappen tekst e.d." vond ik inderdaad een eigen plekje wel waard!
;)

  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
Hey, dit topic gaat over Atmels, niet over PIC's! :P

zcflevo.nl


  • SuperKris
  • Registratie: juni 2010
  • Laatst online: 06-12 22:40
Het is mij gelukt om een 265x64 pixel OLED aan te sturen met een mega. Ik gebruik hiervoor u8g2. De verbinding is via 4 wire SPI. De verbinding loopt via een 16 polige flatcable van ca. 30cm. Deze doet het steeds maar heel even en dan gaat de display op zwart. Een heel kort kabeltje doet het wel goed. Zijn dergelijke kabels op 30cm te lang, of is mijn kabel gewoon ruk?

Voordat ik het mes er in zet om hem in te korten was ik hier even benieuwd naar.

  • kitao
  • Registratie: juli 2012
  • Laatst online: 22-05 16:27
Laatst heb ik een functie geleend, die heet
void blinkAll_2Bytes()
https://www.arduino.cc/en/Tutorial/ShftOut22
en staat helemaal onderaan.

Daar wordt de syntax shiftOut(dataPin, clockPin, 0); gebruikt. Ik kreeg daarop een error van 'too few arguments in shiftOut'' en moest daar MSB- of LSBFIRST aan toe voegen . Dit terwijl dat programma uit genoemde link wel gewoon draait zonder die toevoeging ?


@DurkVell Nog mijn excuses voor mijn te felle reactie, was niet nodig geweest.

  • Mignol
  • Registratie: december 2017
  • Laatst online: 23-11 15:12
Gebruik het mes niet om de kabel in te korten, maar om de kabel te splitsen zodat je afzonderlijke losse draden hebt. Een flatcable is een ramp voor crosstalk tussen de signalen, tenzij er een GND tussen elk signaal loopt.
SuperKris schreef op donderdag 14 maart 2019 @ 21:17:
Het is mij gelukt om een 265x64 pixel OLED aan te sturen met een mega. Ik gebruik hiervoor u8g2. De verbinding is via 4 wire SPI. De verbinding loopt via een 16 polige flatcable van ca. 30cm. Deze doet het steeds maar heel even en dan gaat de display op zwart. Een heel kort kabeltje doet het wel goed. Zijn dergelijke kabels op 30cm te lang, of is mijn kabel gewoon ruk?

Voordat ik het mes er in zet om hem in te korten was ik hier even benieuwd naar.

  • Mignol
  • Registratie: december 2017
  • Laatst online: 23-11 15:12
kitao schreef op zondag 17 maart 2019 @ 20:59:
Laatst heb ik een functie geleend, die heet
void blinkAll_2Bytes()
https://www.arduino.cc/en/Tutorial/ShftOut22
en staat helemaal onderaan.

Daar wordt de syntax shiftOut(dataPin, clockPin, 0); gebruikt. Ik kreeg daarop een error van 'too few arguments in shiftOut'' en moest daar MSB- of LSBFIRST aan toe voegen . Dit terwijl dat programma uit genoemde link wel gewoon draait zonder die toevoeging ?


@DurkVell Nog mijn excuses voor mijn te felle reactie, was niet nodig geweest.
Arduino heeft een shiftOut functie en dat programma heeft zelf ook een functie die shiftOut heet. Dus zo raar is het niet dat de compiler in de war raakt en soms de ene kiest en soms de andere.

  • kitao
  • Registratie: juli 2012
  • Laatst online: 22-05 16:27
Mignol schreef op zondag 17 maart 2019 @ 23:48:

Arduino heeft een shiftOut functie en dat programma heeft zelf ook een functie die shiftOut heet. Dus zo raar is het niet dat de compiler in de war raakt en soms de ene kiest en soms de andere.
Bedankt voor het antwoord :)
Ik vermoedde al dat er iets op de achtergrond meespeelde maar jouw link geeft mij nog niet helemaal duidelijkheid aangezien daarin ook geen shiftOut zonder msb- of lsbfirst in voorkomt. In deze link, helemaal onderaan, wel : https://www.arduino.cc/en/Tutorial/ShftOut22

zie de shiftOut ( dataPin, clockPin, ....xxxx???xxx.... , 0 ) ;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void blinkAll_2Bytes(int n, int d) {

  digitalWrite(latchPin, 0);
  shiftOut(dataPin, clockPin, 0);
  shiftOut(dataPin, clockPin, 0);
  digitalWrite(latchPin, 1);
  delay(200);

  for (int x = 0; x < n; x++) {
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 255);
    shiftOut(dataPin, clockPin, 255);
    digitalWrite(latchPin, 1);
    delay(d);
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 0);
    shiftOut(dataPin, clockPin, 0);
    digitalWrite(latchPin, 1);
    delay(d);
  }
}


Dat programma (in zn geheel) heb ik getest en doet het gewoon. Ik haal een snip uit de functie hierboven eruit, dat was de for-lus meen ik, en plak het in mn eigen sketch en toen kreeg ik de error. Dus ik dacht eerst dat msbfirst zn standaard (default) toewijzing was en dat je die eventueel weg zou kunnen laten en dat je dan alleen lsbfirst specifiek op hoefde te geven, maar dat bleek ook niet zo te zijn.

Moet toegeven dat ik deze vraag stelde om de discussie te herstellen aangezien ik er verder niet echt heel lang zelf naar heb gezocht en bij deze ook meteen om voor lezers die later zijn ingestapt en zich misschien afvragen hoe het met dat klokje verder is afgelopen te verwijzen naar een apart topic dat ik heb geopend na het krijgen van een tip om dit apart te zetten en waarvoor bedankt.

  • Mignol
  • Registratie: december 2017
  • Laatst online: 23-11 15:12
kitao schreef op maandag 18 maart 2019 @ 14:16:
[...]

Ik vermoedde al dat er iets op de achtergrond meespeelde maar jouw link geeft mij nog niet helemaal duidelijkheid aangezien daarin ook geen shiftOut zonder msb- of lsbfirst in voorkomt. In deze link, helemaal onderaan, wel : https://www.arduino.cc/en/Tutorial/ShftOut22
Precies hetzelfde. Die link naar ShftOut22 heeft ook een eigen shiftOut functie (scroll naar beneden). Dat is dus niet de shiftOut van de Arduino functies.

Ik kan niet vinden dat er ooit een Arduino shiftOut was zonder bitorder. Dus zodra je die functie ziet zonder bitorder, dan heeft iemand waarschijnlijk zelf zo'n functie geschreven.

Mogelijk werd zo vaak een eigen shiftOut functie gemaakt dat Arduino het aan de eigen functies heeft toegevoegd, en heeft toen wel de bitorder parameter toegevoegd.

  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Ik wil graag weten of een arduino ook automatisch een led pin aan en uit kan zetten.
Ik heb een led kubus gemaakt.
En de pins als volgend gecodeerd.

void setup() {
pinMode(1, OUTPUT) ;
)
void Row1aan() {
digitalWrite(1, HIGH) ;
}
void Row1uit() {
digitalWrite(1, LOW);
}

Dus nu zet ik 1 rij aan en uit met.
Row1aan() ;
Row1uit() ;

Maar kan ik het ook zo instellen dat ik bijvoorbeeld ze aan en uit kan zetten door.

Row1() ; (rij 1 gaat aan)
Row1() ; (nu gaat hij weer uit)

Dat de arduino zeg maar zelf kijkt hij is low zet hij hem high bij Row1(); en andersom.

  • kitao
  • Registratie: juli 2012
  • Laatst online: 22-05 16:27
jeroen vrij schreef op maandag 18 maart 2019 @ 21:43:
Ik wil graag weten of een arduino ook automatisch een led pin aan en uit kan zetten.
Ik heb een led kubus gemaakt.
En de pins als volgend gecodeerd.

void setup() {
pinMode(1, OUTPUT) ;
)
void Row1aan() {
digitalWrite(1, HIGH) ;
}
void Row1uit() {
digitalWrite(1, LOW);
}

Dus nu zet ik 1 rij aan en uit met.
Row1aan() ;
Row1uit() ;

Maar kan ik het ook zo instellen dat ik bijvoorbeeld ze aan en uit kan zetten door.

Row1() ; (rij 1 gaat aan)
Row1() ; (nu gaat hij weer uit)

Dat de arduino zeg maar zelf kijkt hij is low zet hij hem high bij Row1(); en andersom.
misschien zou dat kunnen met een if-else

code:
1
2
3
4
if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;


https://learn.adafruit.co...1/using-millis-for-timing

@Mignol
Bedankt voor het antwoord, zoiets zal het wel zijn ja, want als je in de references zelfs geen msb/lsbfirst weglatings optie tegenkomt dan wordt het lastig zoeken.

kitao wijzigde deze reactie 19-03-2019 00:39 (8%)


  • DurkVell
  • Registratie: augustus 2011
  • Laatst online: 00:32
jeroen vrij schreef op maandag 18 maart 2019 @ 21:43:

Dus nu zet ik 1 rij aan en uit met.
Row1aan() ;
Row1uit() ;

Maar kan ik het ook zo instellen dat ik bijvoorbeeld ze aan en uit kan zetten door.

Row1() ; (rij 1 gaat aan)
Row1() ; (nu gaat hij weer uit)

Dat de arduino zeg maar zelf kijkt hij is low zet hij hem high bij Row1(); en andersom.
Dat kan. Wanneer na de eerste Row1() de LED aan gaat, zet je een "vlag" op "1": a=1.
Bij de volgende ROW1() kijk je naar de toestand van a. Is ie "1" dan was de lamp aan, zet je de lamp uit en maakt a=0. Enzovoorts ..

  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

kitao schreef op dinsdag 19 maart 2019 @ 00:33:
[...]


misschien zou dat kunnen met een if-else

code:
1
2
3
4
if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;


https://learn.adafruit.co...1/using-millis-for-timing

@Mignol
Bedankt voor het antwoord, zoiets zal het wel zijn ja, want als je in de references zelfs geen msb/lsbfirst weglatings optie tegenkomt dan wordt het lastig zoeken.
Dan zou het zoiets moeten worden.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int ledPin1 = 1;
int ledPin2 = 2;
int ledState = LOW;

void setup() {

    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
}

void Row1() {
    ledState = digitalRead(ledPin1);
    if (ledState == HIGH) {
    digitalWrite(ledPin1, LOW); 
    } else {
    digitalWrite(ledPin1, HIGH); 
}
    
}
void Row2() {
    ledState = digitalRead(ledPin2);
    if (ledState == HIGH) {
    digitalWrite(ledPin2, LOW); 
    } else {
    digitalWrite(ledPin2, HIGH); 
}

}

void loop(){
    Row1();
    delay(500);
    Row2();
    delay(500);
    Row1();
    Row2();
}



Kan hem alleen niet testen moet even wachten tot mijn nieuwe arduino binnenkomt.
Heb de oude stuk gemaakt geloof ik.

  • kitao
  • Registratie: juli 2012
  • Laatst online: 22-05 16:27
jeroen vrij schreef op dinsdag 19 maart 2019 @ 10:51:

Dan zou het zoiets moeten worden.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int ledPin1 = 1;
int ledPin2 = 2;
int ledState = LOW;

void setup() {

    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
}

void Row1() {
    ledState = digitalRead(ledPin1);
    if (ledState == HIGH) {
    digitalWrite(ledPin1, LOW); 
    } else {
    digitalWrite(ledPin1, HIGH); 
}
    
}
void Row2() {
    ledState = digitalRead(ledPin2);
    if (ledState == HIGH) {
    digitalWrite(ledPin2, LOW); 
    } else {
    digitalWrite(ledPin2, HIGH); 
}

}

void loop(){
    Row1();
    delay(500);
    Row2();
    delay(500);
    Row1();
    Row2();
}



Kan hem alleen niet testen moet even wachten tot mijn nieuwe arduino binnenkomt.
Heb de oude stuk gemaakt geloof ik.
Ik heb m even voor je getest, led1 blijft constant aan en led2 knippert. Maar jouw sketch compileert en dat is altijd al een goede start. Je zou de benadering van Durkvell kunnen toepassen of dit stukje code wat aanpassen. En je arduino, komt er ook zelfs geen blink uit op dat ingebouwde ledje ?
Nog iets, als je pinnen over hebt zou je eigenlijk pin0 en pin1 beter niet gebruiken volgens mij.

  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Ja kan kloppen dat led 1 aan blijft.
Hij zet Led1 aan.
Dan een delay
Zet led 2 aan
Weer een delay
Dan zet hij ze beide uit en begint de loop opnieuw zonder delay.
Dus led 1 gaat uit en gelijk weer aan.
Als je de code afsluit met ook een delay doet hij het wel

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 int ledPin1 = 1;
int ledPin2 = 2;
int ledState = LOW;

void setup() {

    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
}

void Row1() {
    ledState = digitalRead(ledPin1);
    if (ledState == HIGH) {
    digitalWrite(ledPin1, LOW); 
    } else {
    digitalWrite(ledPin1, HIGH); 
}
    
}
void Row2() {
    ledState = digitalRead(ledPin2);
    if (ledState == HIGH) {
    digitalWrite(ledPin2, LOW); 
    } else {
    digitalWrite(ledPin2, HIGH); 
}

}

void loop(){
    Row1();
    delay(500);
    Row2();
    delay(500);
    Row1();
    Row2();
    delay(500)
}



Nu gaan ze beide na elkaar aan en tegelijk weer uit.

jeroen vrij wijzigde deze reactie 19-03-2019 13:30 (56%)


  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Heb nu pin 13 tot 5 en A1 tot A3.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
 int ledPin1 = 13; 
int ledPin2 = 12;
int ledPin3 = 11; 
int ledPin4 = 10;
int ledPin5 =  9; 
int ledPin6 =  8;
int ledPin7 =  7; 
int ledPin8 =  6;
int ledPin9 =  5; 
int ledPin10 = A1;
int ledPin11 = A2; 
int ledPin12 = A3;
int ledState = LOW; 

void setup() {     
    pinMode(ledPin1, OUTPUT); 
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT); 
    pinMode(ledPin4, OUTPUT);
    pinMode(ledPin5, OUTPUT); 
    pinMode(ledPin6, OUTPUT);
    pinMode(ledPin7, OUTPUT); 
    pinMode(ledPin8, OUTPUT);
    pinMode(ledPin9, OUTPUT); 
    pinMode(ledPin10, OUTPUT);
    pinMode(ledPin11, OUTPUT); 
    pinMode(ledPin12, OUTPUT);
    } 

void Row1() {  
    ledState = digitalRead(ledPin1);  
    if (ledState == HIGH) { digitalWrite(ledPin1, LOW);  } 
    else { digitalWrite(ledPin1, HIGH); 
     } 
} 
void Row2() {  
    ledState = digitalRead(ledPin2);  
    if (ledState == HIGH) { digitalWrite(ledPin2, LOW);  } 
    else { digitalWrite(ledPin2, HIGH); 
     } 
}
void Row3() {  
    ledState = digitalRead(ledPin3);  
    if (ledState == HIGH) { digitalWrite(ledPin3, LOW);  } 
    else { digitalWrite(ledPin3, HIGH); 
     } 
} 
void Row4() {  
    ledState = digitalRead(ledPin4);  
    if (ledState == HIGH) { digitalWrite(ledPin4, LOW);  } 
    else { digitalWrite(ledPin4, HIGH); 
     } 
}
void Row5() {  
    ledState = digitalRead(ledPin5);  
    if (ledState == HIGH) { digitalWrite(ledPin5, LOW);  } 
    else { digitalWrite(ledPin5, HIGH); 
     } 
} 
void Row6() {  
    ledState = digitalRead(ledPin6);  
    if (ledState == HIGH) { digitalWrite(ledPin6, LOW);  } 
    else { digitalWrite(ledPin6, HIGH); 
     } 
}
void Row7() {  
    ledState = digitalRead(ledPin7);  
    if (ledState == HIGH) { digitalWrite(ledPin8, LOW);  } 
    else { digitalWrite(ledPin8, HIGH); 
     } 
} 
void Row8() {  
    ledState = digitalRead(ledPin8);  
    if (ledState == HIGH) { digitalWrite(ledPin8, LOW);  } 
    else { digitalWrite(ledPin8, HIGH); 
     } 
}
void Row9() {  
    ledState = digitalRead(ledPin9);  
    if (ledState == HIGH) { digitalWrite(ledPin9, LOW);  } 
    else { digitalWrite(ledPin9, HIGH); 
     } 
} 
void Lay1() {  
    ledState = digitalRead(ledPin10);  
    if (ledState == HIGH) { digitalWrite(ledPin10, LOW);  } 
    else { digitalWrite(ledPin10, HIGH); 
     } 
}
void Lay2() {  
    ledState = digitalRead(ledPin11);  
    if (ledState == HIGH) { digitalWrite(ledPin11, LOW);  } 
    else { digitalWrite(ledPin11, HIGH); 
     } 
}
void Lay3() {  
    ledState = digitalRead(ledPin12);  
    if (ledState == HIGH) { digitalWrite(ledPin12, LOW);  } 
    else { digitalWrite(ledPin12, HIGH); 
     } 
}
void Layall(){
    Lay1();
    Lay2();
    Lay3();
}
void Rowall(){
    Row1();
    Row2();
    Row3();
    Row4();
    Row5();
    Row6();
    Row7();
    Row8();
    Row9();
}

void X1(){
    Row1();
    Row2();
    Row3();
}
void X2(){
    Row3();
    Row4();
    Row5();
}
void X3(){
    Row7();
    Row8();
    Row9();
}
void Y1(){
    Row1();
    Row4();
    Row7();
}
void Y2(){
    Row2();
    Row5();
    Row8();
}
void Y3(){
    Row3();
    Row6();
    Row9();
}

void loop(){
    for (int i = 0; i < 8; i++){
    Layall();
    Rowall();
    delay(500);
}
    for (int i = 0; i < 4; i++){
    Layall();
    X1();
    delay(500);
    X1();
    X2();
    delay(500);
    X2();
    X3();
    delay(500);
    X3();
    delay(500);
}
    }


  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Kan iemand mij helpen.
Is er een code om.
Bijvoorbeeld 3 pins na elkaar te laten blinken.

Dus pin 1 aan en weer uit met een delay tussen aan en uit.
Dan pin 3 aan en weer uit met een delay.
Dan pin 2 aan en weer uit met een delay.
Zodat wanneer de delay kort genoeg is het lijkt op het oog of ze alle drie tegelijk branden.
Maar gaan om en om.

  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
jeroen vrij schreef op donderdag 21 maart 2019 @ 11:18:
Dus pin 1 aan en weer uit met een delay tussen aan en uit.
Dan pin 3 aan en weer uit met een delay.
Dan pin 2 aan en weer uit met een delay.
Euh, hier heb je de benodigde code al praktisch (als psuedo-code) opgeschreven. Vertaal dit eens naar arduino?

zcflevo.nl


  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Ja die snap ik wel.

for (int i = 0; i < 16; i++){
digitalWrite(1,HIGH);
delay(100);
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
delay(100);
digitalWrite(3,LOW);
}

Zoiets lukt me wel.
Maar bedoel eigenlijk of er geen kortere manier is.
Het gaat om een ledcube.
Ik zou ze in de setup al kunnen zetten.
Maar gaat om een ledcube.
Zou dan alle leds 512x
Alle vlakken 24x
En alle rijen x, y en z as 192x
In de setup moeten zetten.

  • Maasluip
  • Registratie: april 2002
  • Laatst online: 14:27

Maasluip

Frontpage Admin

Kabbelend watertje

Je hebt een loop met een tellertje en die teller gebruik je niet.

code:
1
2
3
4
5
for (int i = 0; i < 16; i++){
    digitalWrite(i,HIGH);
    delay(100);
    digitalWrite(i,LOW);
}


En als je 3 dimensies hebt maak je drie loops in elkaar.

Dat slof sigaretten met de pak melk - D/T-regels
Open Source landkaart


  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Dacht dat ie met.
for (int i = 0; i < 16; i++){
Die loop 16x uitvoert.

  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Maasluip schreef op donderdag 21 maart 2019 @ 11:37:
Je hebt een loop met een tellertje en die teller gebruik je niet.

code:
1
2
3
4
5
for (int i = 0; i < 16; i++){
    digitalWrite(i,HIGH);
    delay(100);
    digitalWrite(i,LOW);
}


En als je 3 dimensies hebt maak je drie loops in elkaar.
Hoe laat ik hem die loop dan een aantal x herhalen.
Weet jij dat.?

  • kitao
  • Registratie: juli 2012
  • Laatst online: 22-05 16:27
jeroen vrij schreef op donderdag 21 maart 2019 @ 15:20:
[...]

Hoe laat ik hem die loop dan een aantal x herhalen.
Weet jij dat.?
Die lus doet het gewoon hoor, misschien dat Maasluip het anders bedoelde ?
Maar sowieso zoals Maasluip en Farlan al aangaven, het programma zou inderdaad compacter kunnen.

code:
1
2
3
4
5
6
7
8
9
10
11
// Example program
#include <iostream>
using namespace std;

int main()
{
  for (int i = 0; i < 16; i++){
  cout << i << endl;
    }
    return 0;
}


Getest op http://cpp.sh/

  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

Dus zo is het in orde en herhaald hij 8x

for (int i = 0; i < 8; i++){
digitalWrite(1,HIGH)
digitalWrite(1,LOW)
}

  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

kitao schreef op donderdag 21 maart 2019 @ 15:31:
[...]


Die lus doet het gewoon hoor, misschien dat Maasluip het anders bedoelde ?
Maar sowieso zoals Maasluip en Farlan al aangaven, het programma zou inderdaad compacter kunnen.

code:
1
2
3
4
5
6
7
8
9
10
11
// Example program
#include <iostream>
using namespace std;

int main()
{
  for (int i = 0; i < 16; i++){
  cout << i << endl;
    }
    return 0;
}


Getest op http://cpp.sh/
Ja zit er over te denken hoe.
Kraak kraak haha

  • kitao
  • Registratie: juli 2012
  • Laatst online: 22-05 16:27
jeroen vrij schreef op donderdag 21 maart 2019 @ 15:40:

Ja zit er over te denken hoe.
Kraak kraak haha
Het doel was om die led-cuub op gang te krijgen, en dat is gelukt. Maakt niet hoe maar het orgel draait.
Pas daarna hoef je eens gaan bedenken welke muziek-ponskaart je erin zet.

  • jeroen vrij
  • Registratie: februari 2016
  • Laatst online: 19-11 00:45

jeroen vrij

Just a arduino noob

kitao schreef op donderdag 21 maart 2019 @ 15:41:
[...]


Het doel was om die led-cuub op gang te krijgen, en dat is gelukt. Maakt niet hoe maar het orgel draait. Pas daarna kan je eens gaan bedenken welke muziek-ponskaart je erin zet.
Ja idd voor iemand die het net doet.
Ik ben er trots op haha.
Maar zit al ff uit te zoeken hoe ik hier een library van kan maken

Heb het bovenste deel van de setup al ingekort met.


code:
1
2
3
4
5
6
7
 for(int i=2; i<=13; i++){
  pinMode(i, OUTPUT);
}
    for(int i=11; i<=13; i++){
  pinMode(i, HIGH);
}
   }

jeroen vrij wijzigde deze reactie 21-03-2019 16:25 (17%)


  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Omdat ik het wiel niet opnieuw hoef (en wil) uit te vinden de volgende vraag:
Weet iemand waar ik goedkoop (maar wel kwalitatief goede) "Arduino-bare-minimum" printplaatjes (voor de DIP-28 versie) kan kopen ?

Dus printplaatjes van laten we zeggen een centimeter of 5 x 3 met daarop alleen de paar "echt nodige" componenten? Er zijn genoeg projecten te verzinnen waarbij ruimte een beperkende factor is, dus dan is het zeker handig om zo'n "kleine" Arduino te kunnen nemen :)

Bovendien is een losse DIP-28 (ATmega 328p) natuurlijk ook veel goedkoper dan zo'n Arduino bordje... Zelfs als je ze uit HongKong koopt.

Of hoe lossen jullie dat op? O-)

Thuisbioscoop Limburg


Acties:
  • +2Henk 'm!

  • Reinder83
  • Registratie: september 2002
  • Laatst online: 07-12 10:50
Atmoz schreef op donderdag 9 mei 2019 @ 12:06:
Omdat ik het wiel niet opnieuw hoef (en wil) uit te vinden de volgende vraag:
Weet iemand waar ik goedkoop (maar wel kwalitatief goede) "Arduino-bare-minimum" printplaatjes (voor de DIP-28 versie) kan kopen ?

Dus printplaatjes van laten we zeggen een centimeter of 5 x 3 met daarop alleen de paar "echt nodige" componenten? Er zijn genoeg projecten te verzinnen waarbij ruimte een beperkende factor is, dus dan is het zeker handig om zo'n "kleine" Arduino te kunnen nemen :)

Bovendien is een losse DIP-28 (ATmega 328p) natuurlijk ook veel goedkoper dan zo'n Arduino bordje... Zelfs als je ze uit HongKong koopt.

Of hoe lossen jullie dat op? O-)
Dan zou je toch gewoon een nano kunnen gebruiken? die is 43.18 mm × 18.54 mm, clones kosten ook maar iets van 2 euro/stuk.

  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Reinder83 schreef op donderdag 9 mei 2019 @ 12:44:
[...]

Dan zou je toch gewoon een nano kunnen gebruiken? die is 43.18 mm × 18.54 mm, clones kosten ook maar iets van 2 euro/stuk.
Opzich een goed alternatief ja _/-\o_
Is dat het meeste logische in deze situatie? (kan even niet bedenken waarom niet eigenlijk :P)

Thuisbioscoop Limburg


  • Reinder83
  • Registratie: september 2002
  • Laatst online: 07-12 10:50
Atmoz schreef op donderdag 9 mei 2019 @ 12:46:
[...]


Opzich een goed alternatief ja _/-\o_
Is dat het meeste logische in deze situatie? (kan even niet bedenken waarom niet eigenlijk :P)
Hangt er vanaf wat je wilt doen natuurlijk, je kan ook zelf een printplaat maken met een ATmega of ATtiny chip erop en crystal etc

  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
Het is iig wat ik zelf ook altijd doe als ik een microcontroller in een projectje wil embedden.

Hoewel ik tegenwoordig ook vaak gewoon een nano(kloon), pro-micro of Wemos pak. Het kost allemaal toch geen drol en de USB interface maakt het net ff makkelijker.

zcflevo.nl


Acties:
  • +1Henk 'm!

  • Robbiedobbie
  • Registratie: augustus 2009
  • Laatst online: 22:46

Robbiedobbie

<3 Procrastination

Af en toe toch wel handig om eventjes een arduino uno uit de kast te pleuren. Had een 433mhz remote vanuit china voor rgb leds en kon geen library vinden wat hierop werkte. Heb ik er maar zelf een gemaakt :9

Wanneer je dan zo eventjes snel een los library moet maken is het verdomd handig.

Mocht iemand interesse heben, hier kun je hem vinden.

  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Grrrrrrrr :( .... 't is weer eens zover hoor 8)7 :P

Vanmorgen speciaal om 4:30 uur opgestaan om nog lekker wat te kunnen hobby'en voordat ik weg moest.
Het wilt alleen niet lukken.... UREN met zoiets redelijks "simpels" zitten kloten... blehhhhh :X

Ik wil met een IR-sensor een langsvliegend balletje detecteren.
Daarvoor maak ik gebruik van een Interrupt op een Arduino Mega2560.

Het probleem is dat de routine steeds 2 (of soms zelfs meerdere malen, dat ligt een beetje aan de code, ik heb al tig dingen geprobeerd) keer doorloopt.

Hieronder het stukje code:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void TestISR() {

  detachInterrupt(digitalPinToInterrupt(21));

  AantalBallen += 1;

  delayMicroseconds(500000);

  //EIFR = 1;
  attachInterrupt(digitalPinToInterrupt(21),TestISR,FALLING);

  //InterruptChain::addInterruptCallback(0, TestISR);
  //Disabling interrupts before enabling the interrupt chain.
  //interrupts();
  //InterruptChain::enable(0);
  
}



Bovenin, bij Setup doe ik eerst nog:


code:
1
2
  pinMode(21, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(21), TestISR, FALLING);



Wat zorgt er in hemelsnaam voor dat die variabele AantalBallen steeds met 2 (of meer) wordt opgehoogd?! Ik zet toch netjes de Interrupts uit zodra ik in die routine kom... Snap d'r niets van.

Iemand die dit niet boven zijn pet uit stijgt? _/-\o_

Thuisbioscoop Limburg


Acties:
  • +2Henk 'm!

  • Zarathustra
  • Registratie: januari 2008
  • Laatst online: 20:42
@Atmoz als je een vertraging wilt inbouwen kun je 'software debounce' gebruiken. Zie bv https://www.instructables...ng-in-interrupt-function/

Veni, vidi, vici - ik kwam, zag en overwon de drempels van het leven - denk ik dan maar, en vond vriendschap


  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Zarathustra schreef op zaterdag 8 juni 2019 @ 12:35:
@Atmoz als je een vertraging wilt inbouwen kun je 'software debounce' gebruiken. Zie bv https://www.instructables...ng-in-interrupt-function/
Geweldig!! Dat werkt als een trein :D :D :D
Ontzettend bedankt _/-\o_

Maar...... toch snap ik niet waarom mijn code niet werkt.
Ook al is het misschien niet dé manier, het zou zo toch moeten werken, right?

Thuisbioscoop Limburg


Acties:
  • +1Henk 'm!

  • Zarathustra
  • Registratie: januari 2008
  • Laatst online: 20:42
Atmoz schreef op zaterdag 8 juni 2019 @ 12:41:
[...]


Geweldig!! Dat werkt als een trein :D :D :D
Ontzettend bedankt _/-\o_

Maar...... toch snap ik niet waarom mijn code niet werkt.
Ook al is het misschien niet dé manier, het zou zo toch moeten werken, right?
Graag gedaan :)

In theorie zou het moeten werken. Ken de Airduino overigens niet ;) - maar met interrupts is het altijd wat puzzelen en opletten. Kan bijvoorbeeld zijn dat detachInterrupt niet in een interrupt handler aangeroepen mag worden. Of dat deze pas effectief uitgevoerd wordt ná de ISR. Dat soort fijne dingen :) Dus in een ISR alles zo simpel mogelijk houden.

Niets van dat alles.
Goed weer om je te vervelen en even te Googlen:

delayMicroseconds heeft een maximum van 16.000 (https://www.tutorialspoin...microseconds_function.htm) Geen idee wat de compiler van 500.000 maakt.

Verder worden interrupts standaard automatisch disabled als je ISR aangeroepen wordt en enabled als de ISR klaar is.

Zarathustra wijzigde deze reactie 08-06-2019 13:16 (20%)

Veni, vidi, vici - ik kwam, zag en overwon de drempels van het leven - denk ik dan maar, en vond vriendschap


  • Lennyz
  • Registratie: januari 2010
  • Laatst online: 04-12 18:29
Atmoz schreef op zaterdag 8 juni 2019 @ 12:41:
[...]


Geweldig!! Dat werkt als een trein :D :D :D
Ontzettend bedankt _/-\o_

Maar...... toch snap ik niet waarom mijn code niet werkt.
Ook al is het misschien niet dé manier, het zou zo toch moeten werken, right?
Er staat me iets van bij dat je geen delay mag gebruiken in een interrupt function.

Acties:
  • +1Henk 'm!

  • Zarathustra
  • Registratie: januari 2008
  • Laatst online: 20:42
Lennyz schreef op zaterdag 8 juni 2019 @ 13:34:
[...]


Er staat me iets van bij dat je geen delay mag gebruiken in een interrupt function.
Die werkt niet omdat die zelf interrupts gebruikt. De delayMicroseconds werkt wel omdat die geen interrupt nodig heeft (dat is een for-loop met lege instructies)

Sowieso is het, behalve bij hele simpele toepassingen, niet handig om een delay te gebruiken in een ISR. De hele processor staat dan stil. Andere interrupts werken dan dus ook niet.

Code beperk ik echt tot een absoluut minimum dus. Variabele of een vlag zetten en verder niet.

Veni, vidi, vici - ik kwam, zag en overwon de drempels van het leven - denk ik dan maar, en vond vriendschap


  • SuperKris
  • Registratie: juni 2010
  • Laatst online: 06-12 22:40
Niet echt een actief topic meer :/

Toch even een vraagje. Ik gebruik een arduino voor het uitlezen van analoge waardes (voltages) van:
- 2 accus via een 1/3 spanningsdeler
- 2 ACS712 bi-directionele current sensors
- een ACS758 current sensor
- een 200A shunt met zelfgebouwde bi-directionele meetversterker op basis van een INA170 met ca. 60k uitgang.

In de testopstelling met een spanningsdeler als ingang werkte alles super en waren de waardes stabiel.

In de praktijk gemonteerd in de camper springen de waardes enorm. De resolutie van de ADC in de arduino is niet fantastisch, maar daar kan ik mee leven. Ik had echter niet verwacht dat de waardes zo zouden verspringen. Er zit kleine 4m snoer tussen de meetpunten/current sensors en de arduino. Ik heb momenteel geen filters bij de arduino zitten.

Is dit een bekend probleem, en hoe hebben jullie dit opgelost?

Een 50u condensatortje zo dicht mogelijk bij de arduino?
Is een weerstand, bijv. 100K ook nog nodig?

Of is softwarematig filteren (10 sampels en gemiddelde berekenen) ook nodig?

Mijn code:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ReadPowerMeasurement() {
//  Reading and math analog inputs and math
  float UbatBIN = (analogRead(Ubat));         // store reading into float so decimals can be processed
  UbatVAL = (UbatBIN * 15 / 1000);            // math to store ADC value (0-1023) into V while using a 1/3 voltage devider
  float UstartBIN = (analogRead(Ustart));     // store reading into float so decimals can be processed
  UstartVAL = (UstartBIN * 15 / 1000);        // math to store ADC value (0-1023) into V while using a 1/3 voltage devider
  float IaccBIN = (analogRead(Iacc) - 538);   // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IaccVAL = (IaccBIN * 121 / 1000) ;          // math to store ADC value into ADC readout into Amps. 1A = 0,04V = 0,12219A per step
  float IcharBIN = (analogRead(Ichar) - 538); // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IcharVAL = (IcharBIN * 724 / 10000) ;       // math to store ADC value into ADC readout into Amps. 1A = 0,0675V = 0,07243A per step
  float IsolBIN = (analogRead(Isol) - 538);   // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IsolVAL = (IsolBIN * 724 / 10000) ;         // math to store ADC value into ADC readout into Amps. 1A = 0,0675V = 0,07243A per step  
  float IbatBIN = (analogRead(Ibat) - 255);   // store reading into float so decimals can be processed and substract offset 0A = 1,25V = 255 in ADC value)
  IbatVAL = (IbatBIN * 26 / 100) ;            // math to store ADC value into ADC readout into Amps. 1A = 0,01875V = 0,26067A per step
}


  • Vuikie
  • Registratie: december 2003
  • Laatst online: 06-12 19:43
SuperKris schreef op donderdag 18 juli 2019 @ 23:50:
Niet echt een actief topic meer :/

Toch even een vraagje. Ik gebruik een arduino voor het uitlezen van analoge waardes (voltages) van:
- 2 accus via een 1/3 spanningsdeler
- 2 ACS712 bi-directionele current sensors
- een ACS758 current sensor
- een 200A shunt met zelfgebouwde bi-directionele meetversterker op basis van een INA170 met ca. 60k uitgang.

In de testopstelling met een spanningsdeler als ingang werkte alles super en waren de waardes stabiel.

In de praktijk gemonteerd in de camper springen de waardes enorm. De resolutie van de ADC in de arduino is niet fantastisch, maar daar kan ik mee leven. Ik had echter niet verwacht dat de waardes zo zouden verspringen. Er zit kleine 4m snoer tussen de meetpunten/current sensors en de arduino. Ik heb momenteel geen filters bij de arduino zitten.

Is dit een bekend probleem, en hoe hebben jullie dit opgelost?

Een 50u condensatortje zo dicht mogelijk bij de arduino?
Is een weerstand, bijv. 100K ook nog nodig?

Of is softwarematig filteren (10 sampels en gemiddelde berekenen) ook nodig?

Mijn code:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ReadPowerMeasurement() {
//  Reading and math analog inputs and math
  float UbatBIN = (analogRead(Ubat));         // store reading into float so decimals can be processed
  UbatVAL = (UbatBIN * 15 / 1000);            // math to store ADC value (0-1023) into V while using a 1/3 voltage devider
  float UstartBIN = (analogRead(Ustart));     // store reading into float so decimals can be processed
  UstartVAL = (UstartBIN * 15 / 1000);        // math to store ADC value (0-1023) into V while using a 1/3 voltage devider
  float IaccBIN = (analogRead(Iacc) - 538);   // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IaccVAL = (IaccBIN * 121 / 1000) ;          // math to store ADC value into ADC readout into Amps. 1A = 0,04V = 0,12219A per step
  float IcharBIN = (analogRead(Ichar) - 538); // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IcharVAL = (IcharBIN * 724 / 10000) ;       // math to store ADC value into ADC readout into Amps. 1A = 0,0675V = 0,07243A per step
  float IsolBIN = (analogRead(Isol) - 538);   // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IsolVAL = (IsolBIN * 724 / 10000) ;         // math to store ADC value into ADC readout into Amps. 1A = 0,0675V = 0,07243A per step  
  float IbatBIN = (analogRead(Ibat) - 255);   // store reading into float so decimals can be processed and substract offset 0A = 1,25V = 255 in ADC value)
  IbatVAL = (IbatBIN * 26 / 100) ;            // math to store ADC value into ADC readout into Amps. 1A = 0,01875V = 0,26067A per step
}

Nee, niet heel actief meer nee, mensen zitten nu, volgens mij, meer in de ESP hoek.

Wat je opstelling betreft, ik kan mij wel voorstellen dat je in je camper wat rimpels over je spanning heen hebt lopen. Je motor, koelkastje en dat soort zaken hebben ADC's veel last van.
Het 10 maal sampelen is wel een goede om wat stabielere waardes te krijgen. Voltage meting zou je zelfs uit kunnen smeren tot 10 sampels per halve seconde of zelfs per seconde.
Ook ben ik benieuwd of de AVCC gestabiliseerd is? Je legt namelijk niet uit wat je hardware setup is. Hoe kom je aan je 5V? En is die 5V gestabiliseerd?
Bij een ADC is je voeding heel belangrijk voor de stabiliteit van je metingen. Als dat op orde is, kan je gaan denken aan multi-sampeling en dat soort trucjes.
Ik kan het zo 123 niet vinden, maar Atmel had vroeger een app-note over de ADC met een voorbeeld circuit voor de AVCC en AREF. Dat weet ik want die heb ik zelf gebruikt voor mijn Nixie-Clock PCB.
Ik ben nu aan het werk, maar als ik tijd heb zal ik die erbij proberen te zoeken.

  • Dr.Roelski
  • Registratie: juni 2001
  • Laatst online: 15:01

Dr.Roelski

Walk on ....

SuperKris schreef op donderdag 18 juli 2019 @ 23:50:
Niet echt een actief topic meer :/

Toch even een vraagje. Ik gebruik een arduino voor het uitlezen van analoge waardes (voltages) van:
- 2 accus via een 1/3 spanningsdeler
- 2 ACS712 bi-directionele current sensors
- een ACS758 current sensor
- een 200A shunt met zelfgebouwde bi-directionele meetversterker op basis van een INA170 met ca. 60k uitgang.

In de testopstelling met een spanningsdeler als ingang werkte alles super en waren de waardes stabiel.

In de praktijk gemonteerd in de camper springen de waardes enorm. De resolutie van de ADC in de arduino is niet fantastisch, maar daar kan ik mee leven. Ik had echter niet verwacht dat de waardes zo zouden verspringen. Er zit kleine 4m snoer tussen de meetpunten/current sensors en de arduino. Ik heb momenteel geen filters bij de arduino zitten.

Is dit een bekend probleem, en hoe hebben jullie dit opgelost?

Een 50u condensatortje zo dicht mogelijk bij de arduino?
Is een weerstand, bijv. 100K ook nog nodig?

Of is softwarematig filteren (10 sampels en gemiddelde berekenen) ook nodig?

Mijn code:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ReadPowerMeasurement() {
//  Reading and math analog inputs and math
  float UbatBIN = (analogRead(Ubat));         // store reading into float so decimals can be processed
  UbatVAL = (UbatBIN * 15 / 1000);            // math to store ADC value (0-1023) into V while using a 1/3 voltage devider
  float UstartBIN = (analogRead(Ustart));     // store reading into float so decimals can be processed
  UstartVAL = (UstartBIN * 15 / 1000);        // math to store ADC value (0-1023) into V while using a 1/3 voltage devider
  float IaccBIN = (analogRead(Iacc) - 538);   // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IaccVAL = (IaccBIN * 121 / 1000) ;          // math to store ADC value into ADC readout into Amps. 1A = 0,04V = 0,12219A per step
  float IcharBIN = (analogRead(Ichar) - 538); // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IcharVAL = (IcharBIN * 724 / 10000) ;       // math to store ADC value into ADC readout into Amps. 1A = 0,0675V = 0,07243A per step
  float IsolBIN = (analogRead(Isol) - 538);   // store reading into float so decimals can be processed and substract offset 0A = 2,623V = 538 in ADC value)
  IsolVAL = (IsolBIN * 724 / 10000) ;         // math to store ADC value into ADC readout into Amps. 1A = 0,0675V = 0,07243A per step  
  float IbatBIN = (analogRead(Ibat) - 255);   // store reading into float so decimals can be processed and substract offset 0A = 1,25V = 255 in ADC value)
  IbatVAL = (IbatBIN * 26 / 100) ;            // math to store ADC value into ADC readout into Amps. 1A = 0,01875V = 0,26067A per step
}

Welnee, topic is gewoon actief hoor :)
Ben wel benieuwd of je die pieken ook zou zien met een oscilloscoop. Als dat zo is, zijn het gewoon spikes van koelkast e.d. en zul je (zoals al eerder aangegeven door mede tweaker) meerdere samples moeten gaan gebruiken en afwijkingen weggooien en verder middelen. Als de data toch niet op de microseconde nauwkeurig moet zijn zou ik soieso met multisamples gaan werken.

  • SuperKris
  • Registratie: juni 2010
  • Laatst online: 06-12 22:40
De koelkast is is een absorbsie model en de motor is een oude diesel waar werkelijk niets elektrisch is.

Dan houden we de 230 lader en de zonnepaneellader over. Dat zijn best aardige dingen van victron, maar die zullen best wat piekjes hebben. Ook zonder 230 er op zijn de waardes echter zeer onstabiel. De multimeter is iig niet snel genoeg iets van veranderingen te meten. Een degelijke oscilloscoop heb ik helaas niet beschikbaar.

Multisampeling is natuurlijk een prima oplossing hoewel ik mij wel afvraag hoeveel tijd het programmatje nodig gaat hebben voor het 10x meten + math.

Ik hoor verder niemand over condensatoren op de ingangen of weerstanden en/of math. Is dit wel of niet gebruikelijk?

  • itcouldbeanyone
  • Registratie: augustus 2014
  • Laatst online: 06-12 18:15
SuperKris schreef op vrijdag 19 juli 2019 @ 14:27:
De koelkast is is een absorbsie model en de motor is een oude diesel waar werkelijk niets elektrisch is.

Dan houden we de 230 lader en de zonnepaneellader over. Dat zijn best aardige dingen van victron, maar die zullen best wat piekjes hebben. Ook zonder 230 er op zijn de waardes echter zeer onstabiel. De multimeter is iig niet snel genoeg iets van veranderingen te meten. Een degelijke oscilloscoop heb ik helaas niet beschikbaar.

Multisampeling is natuurlijk een prima oplossing hoewel ik mij wel afvraag hoeveel tijd het programmatje nodig gaat hebben voor het 10x meten + math.

Ik hoor verder niemand over condensatoren op de ingangen of weerstanden en/of math. Is dit wel of niet gebruikelijk?
Een paar tientallen microseconds , hangt puur af hoe efficiënt jouwn code is, maar een atmega328 kan dat zeer snel.


4 meter is erg veel voor een shunt,
heeft die INA chip voldoende capacitors rondom zich ?
Is de shunt op juiste wijze aangesloten zoals de datasheet van INA voorschrijft ?
Kloppen je ground loops?

Inplaats van mutisampling zou ik eerder een RC maken, dat doet praktisch hetzelfde, en indien jouwn vcc 5v stabiel is, zou jouwn ADC aan een single read opperation genoeg hebben.
Daarnaast is 10bit toch meer dan zat voor een 12 of 24 volt accu.
Anders kun je nog een trukje uit halen als

Float X=0;

void setup(){
Serial.begin(9600);
}
void loop(){
X = (0.95 * X)+(0.05 * analogRead(A0)
Serial.println(X);
}

Onthoud dat floats veel cpu tijd kosten,
Je kan dan beter floatless te werk gaan, dus met integers werken, vooral als je daarna veel math wilt doen.

long X;

void loop(){
X=((95 * X)+(5 * analogRead(A0));
Serial.println(X/100);
}

Je kan ook je shunt signaal dicht bij de shunt door je INA halen, zodat je het versterkte signaal kan verlengen.

Of voor gevorderden,
Externe adc chip dichtbij shunt, twisted wire, lvds of level converters en een 4 meter lange SPI bus 😀


@Zarathustra
Gebruik van delay in een goede code dient altijd vermeden te worden.
Eigenlijk net zo goed als het gebruik van floats, tenzij een 32 bit integer niet voldoet mag je gebruik maken van floats, maar een 8 bitter waar 32 bit te weinig is kan ik me eigenlijk niet 123 voorstellen.

itcouldbeanyone wijzigde deze reactie 20-07-2019 01:12 (6%)

Stratis : SbjhPeaHC2ufttT1T6DP3nDE2cDF4KtbUL


  • Zarathustra
  • Registratie: januari 2008
  • Laatst online: 20:42
@itcouldbeanyone eens. Al is voor een eenvoudig projectje als een looplampje een delay wat overzichtelijker dan timers / interrupts.

Idem voor de int / floats trouwens (al heb ik net de ESP32 binnen gekregen met een redelijke FPU :))

Zarathustra wijzigde deze reactie 20-07-2019 13:44 (28%)

Veni, vidi, vici - ik kwam, zag en overwon de drempels van het leven - denk ik dan maar, en vond vriendschap


Acties:
  • 0Henk 'm!

  • tomw
  • Registratie: september 2004
  • Laatst online: 22:35
Weet iemand als de Arduino Micro ergens goedkoop te bestellen is in China? https://store.arduino.cc/arduino-micro . Kan hem niet onmiddelijk vinden op AliExpress en Dealextreme.

Acties:
  • 0Henk 'm!

  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
Waar heb je die specifiek voor nodig dan? Zou gewoon een pro micro adviseren (ontworpen door adafruit sparkfun), dat is een beetje de de-facto standaard 32u4-arduino geworden.

mcDavid wijzigde deze reactie 28-07-2019 19:38 (4%)

zcflevo.nl


Acties:
  • 0Henk 'm!

  • tomw
  • Registratie: september 2004
  • Laatst online: 22:35
Is voor op een al bestaande print. De pro micro heeft ook minder pinnen. Achteraf gezien hadden we wel beter voor de Nano gekozen..

tomw wijzigde deze reactie 28-07-2019 19:54 (29%)


Acties:
  • 0Henk 'm!

  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
Kan dat niet alsnog? Die twee zijn zo goed als pin-compatible.

zcflevo.nl


  • Joepla
  • Registratie: maart 2005
  • Laatst online: 00:48

Joepla

Geavanceerde micro-elektronica

SuperKris schreef op vrijdag 19 juli 2019 @ 14:27:
Ik hoor verder niemand over condensatoren op de ingangen of weerstanden en/of math. Is dit wel of niet gebruikelijk?
Zelf zou ik beginnen met een stabiele Arduinovoeding. Iets met een paar dikke elco's om te bufferen en wat kleinere tantaaltjes bv. voor de wat hogere frequenties. Dan naar de ADC een RC netwerkje, zoals je zelf al aangeeft. 2 Eenvoudige componenten die de troep eruit filteren. Verder zou ik een alarmering op bv. een te lage spanning, vertragen met bv. 5 sec. Dus je sampelt continu de spanning (laten we zeggen: 10x per sec), zijn al die waardes gedurende die tijd te laag, dan trigger je daarop een alarm. Zoniet, dan start de 5 sec. timer opnieuw.
Een lage spanning pas na 5 sec. detecteren ipv direct, heeft geen nadelige gevolgen voor jouw toepassing. Op die manier ben je van alle onnodige alarmering af.

Live solarinfo op PVoutput [6,625 kWp]


  • tomw
  • Registratie: september 2004
  • Laatst online: 22:35
mcDavid schreef op zondag 28 juli 2019 @ 21:40:
Kan dat niet alsnog? Die twee zijn zo goed als pin-compatible.
Inderdaad, ware het niet dat ik op de Micros Serial1 gebruik voor communicatie met hc12 module, en Serial gebruik voor de debugging.
Heb eens snel geprobeerd om het te doen werken met Serial op een Arduino nano, maar krijg geen reactie van de module. Waarschijnlijk door interferentie met de USB serial die er ook op luistert? Of zou het toch mogelijk moeten zijn om met externe module te communiceren via de hardware uart (niet SoftwareSerial)?

tomw wijzigde deze reactie 29-07-2019 10:11 (10%)


Acties:
  • +1Henk 'm!

  • dik_voormekaar
  • Registratie: april 2003
  • Laatst online: 21:42
tomw schreef op zondag 28 juli 2019 @ 19:29:
Weet iemand als de Arduino Micro ergens goedkoop te bestellen is in China? https://store.arduino.cc/arduino-micro . Kan hem niet onmiddelijk vinden op AliExpress en Dealextreme.
Dat lijkt mij deze.

  • SuperKris
  • Registratie: juni 2010
  • Laatst online: 06-12 22:40
itcouldbeanyone schreef op zaterdag 20 juli 2019 @ 01:02:
[...]


Een paar tientallen microseconds , hangt puur af hoe efficiënt jouwn code is, maar een atmega328 kan dat zeer snel.


4 meter is erg veel voor een shunt,
heeft die INA chip voldoende capacitors rondom zich ?
Is de shunt op juiste wijze aangesloten zoals de datasheet van INA voorschrijft ?
Kloppen je ground loops?

Inplaats van mutisampling zou ik eerder een RC maken, dat doet praktisch hetzelfde, en indien jouwn vcc 5v stabiel is, zou jouwn ADC aan een single read opperation genoeg hebben.
Daarnaast is 10bit toch meer dan zat voor een 12 of 24 volt accu.
Anders kun je nog een trukje uit halen als

Float X=0;

void setup(){
Serial.begin(9600);
}
void loop(){
X = (0.95 * X)+(0.05 * analogRead(A0)
Serial.println(X);
}

Onthoud dat floats veel cpu tijd kosten,
Je kan dan beter floatless te werk gaan, dus met integers werken, vooral als je daarna veel math wilt doen.

long X;

void loop(){
X=((95 * X)+(5 * analogRead(A0));
Serial.println(X/100);
}

Je kan ook je shunt signaal dicht bij de shunt door je INA halen, zodat je het versterkte signaal kan verlengen.

Of voor gevorderden,
Externe adc chip dichtbij shunt, twisted wire, lvds of level converters en een 4 meter lange SPI bus 😀


@Zarathustra
Gebruik van delay in een goede code dient altijd vermeden te worden.
Eigenlijk net zo goed als het gebruik van floats, tenzij een 32 bit integer niet voldoet mag je gebruik maken van floats, maar een 8 bitter waar 32 bit te weinig is kan ik me eigenlijk niet 123 voorstellen.
De INA170 voor de shunt zit vlak bij de shunt zelf. Ca. 30cm snoer. Die zit wel bij een hele berg andere kabel, maar ik heb de draden om deze reden wel getwist.

De ACS712 en ACS758 current sensor zitten daar ook, en vanaf daar is het 3-4 m kabel naar de uC

Je (95 * X)+5 snap ik niet helemaal ben ik bang. Wat doe je hier precies, en met welk doel?

De 10 bit is op zich voldoende voor nu ook gezien de nauwkeurigheid van de rest van de componenten, Voor de voltages is dat inderdaad zat. Voor de stromen zou het iets nauwkeuriger mogen, maar dan moet ik echt met een externe ADC gaan werken. In dat geval ga ik dat doen icm een 2e uC en een multiplexer. Wellicht iets voor een latere revisie.

De reden dat ik met floats werk is dat dit lekker makkelijk is voor mijn weergave op de display waar ik ook cijfers achter de komma wil. Andere variables zullen vast sneller en beter zijn, maar dit is wel lekker makkelijk. Ik ben nog niet zo'n held met arduino code, en dit is mijn eerste project met een display.
Joepla schreef op maandag 29 juli 2019 @ 09:30:
[...]

Zelf zou ik beginnen met een stabiele Arduinovoeding. Iets met een paar dikke elco's om te bufferen en wat kleinere tantaaltjes bv. voor de wat hogere frequenties. Dan naar de ADC een RC netwerkje, zoals je zelf al aangeeft. 2 Eenvoudige componenten die de troep eruit filteren. Verder zou ik een alarmering op bv. een te lage spanning, vertragen met bv. 5 sec. Dus je sampelt continu de spanning (laten we zeggen: 10x per sec), zijn al die waardes gedurende die tijd te laag, dan trigger je daarop een alarm. Zoniet, dan start de 5 sec. timer opnieuw.
Een lage spanning pas na 5 sec. detecteren ipv direct, heeft geen nadelige gevolgen voor jouw toepassing. Op die manier ben je van alle onnodige alarmering af.
Misschien goed om even de rest van de electronica toe te lichten. De arduino wordt gevoed vanuit 12V accu's waar ook een 230V en zonnecel lader op zitten. Beide nieuwe Victron producten.

De 12V wordt eerst door een standaard LM2596 printje teruggebracht naar iets van 7V. Deze gaat naar een robotdyn mega mini variant via de Vin pin. Als ik mij niet vergis hebben deze een AMS1117 als voeding.

Met de voedingsprintjes heb ik goede ervaringen, en met de robotdyn arduino's al helemaal hoewle dit mij 1e project met analoge ingangen is.


Tijdens het posten van mijn vraag was ik op vakantie (het systeem zit in mijn camper). Ik had wel een soldeerbout en 100u caps bij mij. Ik heb deze bovenop de pinnen van de arduino gesoldeerd tussen de gebruikte analoge ingangen en GND aangezien ik de arduino zelf, redelijk makkelijk kan uitnemen.

Dit had wel iets van effect. De spanningsingangen die de batterij meten zijn nu redelijk stabiel. De shunt met INA170 is ook flink verbeterd, maar nog niet helemaal zo stabiel als ik zou willen. Het uitlezen van de ACS712 en ACS758 sensors is echter nog mega onstabiel. Eigenlijk bijna onbruikbaar.

Voor de zekerheid heb ik ook nog een 100u cap over de Vin en GND, en tussen de Aref en GND gezet. Dit leek verder geen effect te hebben.

Ik had eigenlijk wel verwacht dat het toevoegen van de 100u caps voldoende zou zijn, maar helaas....

Ik vind het opvallend dat er relatief weinig is geschreven over het filteren van ingangen.

  • Joepla
  • Registratie: maart 2005
  • Laatst online: 00:48

Joepla

Geavanceerde micro-elektronica

SuperKris schreef op maandag 29 juli 2019 @ 13:52:
[...]
Ik had eigenlijk wel verwacht dat het toevoegen van de 100u caps voldoende zou zijn
Niet als er geen weerstand voor zit (dus: signaal -> R in serie -> C naar massa. Iets vanaf een paar k zou ok moeten zijn. Zonder R is de filterwerking minimaal.

Automotive is wat lastig soms. Voldoende C's R's en L's (smoorspoeltjes) gebruiken. En let op: een dikke elco is leuk, maar doet erg weinig op hogere frequenties. Vandaar een kleiner tantaaltje oid parallel zetten.

Ook spikes kunnen in een boordnet makkelijk en veelvuldig optreden. Ook hier moet je maatregelen voor nemen (varistor/VDR).

Joepla wijzigde deze reactie 30-07-2019 17:49 (32%)

Live solarinfo op PVoutput [6,625 kWp]


  • SuperKris
  • Registratie: juni 2010
  • Laatst online: 06-12 22:40
Joepla schreef op dinsdag 30 juli 2019 @ 17:38:
[...]


Niet als er geen weerstand voor zit (dus: signaal -> R in serie -> C naar massa. Iets vanaf een paar k zou ok moeten zijn. Zonder R is de filterwerking minimaal.

Automotive is wat lastig soms. Voldoende C's R's en L's (smoorspoeltjes) gebruiken. En let op: een dikke elco is leuk, maar doet erg weinig op hogere frequenties. Vandaar een kleiner tantaaltje oid parallel zetten.

Ook spikes kunnen in een boordnet makkelijk en veelvuldig optreden. Ook hier moet je maatregelen voor nemen (varistor/VDR).
Ja, wellicht moet ik nog een weerstand toevoegen, maar ik had gehoopt dat de 100n caps (sorry, ik schreef eerder 100u) wel voldoende zouden doen. Een 100n cap toevoegen is een stuk makkelijker dan een weerstand toevoegen.

Daarvoor moet de print er ook uit, en dat is een beetje een kutklus, en erg veel ruimte heb ik ook niet voor de weerstanden. (vol stukje experimenteerprint)

  • itcouldbeanyone
  • Registratie: augustus 2014
  • Laatst online: 06-12 18:15
SuperKris schreef op dinsdag 30 juli 2019 @ 18:39:
[...]


Ja, wellicht moet ik nog een weerstand toevoegen, maar ik had gehoopt dat de 100n caps (sorry, ik schreef eerder 100u) wel voldoende zouden doen. Een 100n cap toevoegen is een stuk makkelijker dan een weerstand toevoegen.

Daarvoor moet de print er ook uit, en dat is een beetje een kutklus, en erg veel ruimte heb ik ook niet voor de weerstanden. (vol stukje experimenteerprint)
On uberhaubt te testen of het gefilterd moet worden, kun je die rc filter ook software matig aanmaken,

float lstValue=0.000;

void loop(){
float X=(analogRead(A0)*0.1)+(0.9*lstValue);
Serial.println(X);

lstValue=X;


}


Andere manier die je kan proberen,

int lstValue=0;

void loop(){
int X=analogRead(A0);

X=constrain(X, lstValue-1, lstValue+1);
Serial.println(X);

}

Stratis : SbjhPeaHC2ufttT1T6DP3nDE2cDF4KtbUL


  • Joepla
  • Registratie: maart 2005
  • Laatst online: 00:48

Joepla

Geavanceerde micro-elektronica

SuperKris schreef op dinsdag 30 juli 2019 @ 18:39:
[...]


Ja, wellicht moet ik nog een weerstand toevoegen, maar ik had gehoopt dat de 100n caps (sorry, ik schreef eerder 100u) wel voldoende zouden doen. Een 100n cap toevoegen is een stuk makkelijker dan een weerstand toevoegen.

Daarvoor moet de print er ook uit, en dat is een beetje een kutklus, en erg veel ruimte heb ik ook niet voor de weerstanden. (vol stukje experimenteerprint)
Alleen 100n (of zelfs een paar daarvan) zal weinig doen, je moet echt wel wat uF en een R erbij zetten.
De oplossing van @itcouldbeanyone lijkt me ook niet verkeerd.

Live solarinfo op PVoutput [6,625 kWp]


  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Graag zou ik de status van enkele output-pinnen (die niet perse naast elkaar zitten) willen uitlezen en via serieel (in een String) versturen zodat ik die met de computer kan uitlezen.

Wat zouden jullie daarvoor gebruiken?
Ik heb nu de meest omslachtige code gemaakt die er maar is (gewoon alles één voor één handmatig uitlezen en in de String zetten), dus ik weet zeker dat er betere/slimmere (en snellere) oplossingen zijn :P

Thuisbioscoop Limburg


  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
uhhh... heb je een voorbeeldje?

zcflevo.nl


  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Gaat over mijn vraag? O-)

Zo ja: waar zou je een voorbeeld van willen?
Zo nee: sorry to bother you :P

[edit]

Mocht het over mijn vraag gaan, en het is niet helemaal duidelijk:

Stel ik heb de volgende 6 pinnen als output gedeclareerd:

D1, D2, D5, D6, D9, D13

En daarvan zou D2 en D5 HIGH zijn, dan zou ik de volgende String willen hebben:
"011000" zodat ik die kan doorsturen via serieel om vervolgens in/met de PC te weten welke pinnen hoog/laag zijn :)

Atmoz wijzigde deze reactie 22-08-2019 17:52 (42%)

Thuisbioscoop Limburg


  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
ja, dan kom je denk ik toch uit op 6x een digitalRead().

Eventueel zou je de pin nummers in een array kunnen stoppen, waar je met een for-loopje doorheen gaat. Maar eerlijk gezegd, denk dat dat meer complexiteit toevoegt dan je aan deduplicatie terugwint.

zcflevo.nl


  • farlane
  • Registratie: maart 2000
  • Laatst online: 00:23
Atmoz schreef op donderdag 22 augustus 2019 @ 17:49:
[...]


Gaat over mijn vraag? O-)

Zo ja: waar zou je een voorbeeld van willen?
Zo nee: sorry to bother you :P

[edit]

Mocht het over mijn vraag gaan, en het is niet helemaal duidelijk:

Stel ik heb de volgende 6 pinnen als output gedeclareerd:

D1, D2, D5, D6, D9, D13

En daarvan zou D2 en D5 HIGH zijn, dan zou ik de volgende String willen hebben:
"011000" zodat ik die kan doorsturen via serieel om vervolgens in/met de PC te weten welke pinnen hoog/laag zijn :)
Ik zou ze niet naar een string omzetten maar binary versturen. Vergt een wat ander protocol maar is behoorlijk wat efficiënter.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Hmzzz, er is alweer een tijdje niets gepost in dit topic O-)
Tijd voor een vraagje dus weer :P

Ik zit met een vervelend (en vreemd) probleem:

Met onderstaande functie stuur ik berichten van Arduino
edit:
MEGA 2560
(met daarop een W5500 Ethernet Module) naar PC:


code:
1
2
3
4
5
6
7
void SendUDP(String Bericht) {
  char charBuf[50];
  Bericht.toCharArray(charBuf, 50);
  Udp.beginPacket(IP_PC, 8120);     
  Udp.write(charBuf);
  Udp.endPacket();
}



Dat werkt allemaal prima.
Het probleem ontstaat "redelijk willekeurig" als er ineens een hele shitload aan data binnen komt. Ik heb het even in een *.TXT file gezet en opgeslagen op de harddisk, en daar blijkt het precies 4096 bytes. Het lijkt allemaal data die verstuurd is door de Arduino. Maar ook van enkele uren geleden. Zit er nog ergens iets in een (output) buffer ofzo :?

Hoe zou ik dit kunnen oplossen?

[edit]

Ok, ik ben eruit. Ofja, niet echt eruit, maar het probleem is opgelost door een andere pin te nemen waarmee ik een LED aanstuur. Zodra ik pin4 voor die LED neem, gaat het EthernetShield helemaal crazy 8)7 en wordt allemaal die data verstuurd. Nu heb ik voor die LED pin38 genomen en is er niets aan de hand.

Heel vreemd, want pin4 zou niets met het EthernetShield mogen doen, right? :?

Atmoz wijzigde deze reactie 02-10-2019 20:23 (19%)

Thuisbioscoop Limburg


  • Vuikie
  • Registratie: december 2003
  • Laatst online: 06-12 19:43
Atmoz schreef op woensdag 2 oktober 2019 @ 19:02:
Hmzzz, er is alweer een tijdje niets gepost in dit topic O-)
Tijd voor een vraagje dus weer :P

Ik zit met een vervelend (en vreemd) probleem:

Met onderstaande functie stuur ik berichten van Arduino
edit:
MEGA 2560
(met daarop een W5500 Ethernet Module) naar PC:


code:
1
2
3
4
5
6
7
void SendUDP(String Bericht) {
  char charBuf[50];
  Bericht.toCharArray(charBuf, 50);
  Udp.beginPacket(IP_PC, 8120);     
  Udp.write(charBuf);
  Udp.endPacket();
}



Dat werkt allemaal prima.
Het probleem ontstaat "redelijk willekeurig" als er ineens een hele shitload aan data binnen komt. Ik heb het even in een *.TXT file gezet en opgeslagen op de harddisk, en daar blijkt het precies 4096 bytes. Het lijkt allemaal data die verstuurd is door de Arduino. Maar ook van enkele uren geleden. Zit er nog ergens iets in een (output) buffer ofzo :?

Hoe zou ik dit kunnen oplossen?

[edit]

Ok, ik ben eruit. Ofja, niet echt eruit, maar het probleem is opgelost door een andere pin te nemen waarmee ik een LED aanstuur. Zodra ik pin4 voor die LED neem, gaat het EthernetShield helemaal crazy 8)7 en wordt allemaal die data verstuurd. Nu heb ik voor die LED pin38 genomen en is er niets aan de hand.

Heel vreemd, want pin4 zou niets met het EthernetShield mogen doen, right? :?
Als je dit plaatje bekijkt:

Zie je dat pin 4 wel gebruikt wordt... Dus dat zou het rare gedrag kunnen verklaren.

  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 21:34

Atmoz

Techno!!

Vuikie schreef op donderdag 3 oktober 2019 @ 08:25:
[...]


Als je dit plaatje bekijkt:
[Afbeelding]
Zie je dat pin 4 wel gebruikt wordt... Dus dat zou het rare gedrag kunnen verklaren.
Hmzz, ok. Das wel heel duidelijk ja. Thanks _/-\o_

Ik was me blind aan het staren op de informatie bovenaan deze pagina: https://www.arduino.cc/en/reference/ethernet
This library is designed to work with the Arduino Ethernet Shield, Arduino Ethernet Shield 2, Leonardo Ethernet, and any other W5100/W5200/W5500-based devices. The library allows an Arduino board to connect to the Internet. The board can serve as either a server accepting incoming connections or a client making outgoing ones. The library supports up to eight (W5100 and boards with <= 2 kB SRAM are limited to four) concurrent connections (incoming, outgoing, or a combination).

The Arduino board communicates with the shield using the SPI bus. This is on digital pins 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used as SS. On the Mega, the hardware SS pin, 53, is not used to select the Ethernet controller chip, but it must be kept as an output or the SPI interface won't work.
Maar inderdaad, op de foto net daaronder staat dat Pin4 wel degelijk gebruikt wordt.
Hadden ze beter ook in de tekst kunnen zetten :)

Atmoz wijzigde deze reactie 03-10-2019 08:28 (39%)

Thuisbioscoop Limburg


  • _ferry_
  • Registratie: januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

Ik ben lekker aan het knutselen met een Arduino en Nextion schermpje.
So far so good, met het maken van een indeling, en het sturen van mijn gemeten data richting schermpje.
(ga diverse motorgegevens uitlezen, en die op het schermpje tonen)

Echter heb ik 3 pages, en afhankelijk van welke page er open staat wil ik andere data sturen.
In theorie kan ik ook alle waardes die kant op knallen, maar dan moet ik de baudrate omhoog zetten want anders is de refreshrate niet zo hoog.

Het verzenden van de page is simpel, heb ik aan de knop bovenaan gehangen waarmee ik tussen de 3 schermen rouleer, en dat werkt:

in de HEX waarde zie je elke regel wisselen tussen 00,01,02, da's de pagina.

Maar nu de hamvraag, hoe lees ik zo'n regel aan HEX data serieel in op de arduino en filter ik de pagina er uit. Zodat ik weet op welke pagina ik zit?

Ik hoef geen voorgekauwde code, al sla ik dat niet af :+ maar door alle serial.xyz functies floats,strings,ints en code kom ik er niet helemaal uit. Programmeren is niet m'n sterkste ding, en wat roestig :+

Edit;
De trage refreshrate kwam vooral door het uitlezen van 2 dallas sensoren (wellicht omdat er 1 nog ontbreekt, waar hij op wacht)
Heb dat nu opgevangen;

code:
1
2
3
4
5
6
7
8
9
10
  counter1++;

  //measure dallas sensors only every x runs to fasten up other readings
  if (counter1 >= 50) {
    dallas_measure();
    counter1 = 0;
  }
    else {
      delay(500);        // delay to lower the refreshrate a bit
    }

_ferry_ wijzigde deze reactie 13-11-2019 09:10 (38%)


  • Thy...
  • Registratie: april 2006
  • Laatst online: 06-12 15:31
Ik ben bezig met een Arduino project om 8 PN532 RFID lezers (semi-)tegelijk uit te lezen.

Ik heb dit volledig werkend dmv de volgende code:


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

// Define the pins for SPI communication.
#define PN532_SCK  (2)
#define PN532_MISO (3)
#define PN532_MOSI (4)

#define PN532_SS0 (44)
#define PN532_SS1 (45)

// Setup PN532 boards via SPI bus
Adafruit_PN532 nfc0(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS0);
Adafruit_PN532 nfc1(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS1);
etc...

void setup() {
  // Set the max number of retry attempts to read from a card This prevents us from waiting forever for a card, which is the default behaviour of the PN532.
  nfc0.setPassiveActivationRetries(0xFF);
  nfc1.setPassiveActivationRetries(0xFF);
  etc...
  
  // configure board to read RFID tags
  nfc0.SAMConfig();
  nfc1.SAMConfig();
  etc...
}

void loop() {
  if (nfc0.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength, timeout)) {
    Serial.print("Found a card on nfc0: ");
  else { 
    delay(timeout); 
  }

  if (nfc1.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength, timeout)) {
    Serial.print("Found a card on nfc0: ");
  else { 
    delay(timeout); 
  }
  etc...
}



Echter is het duidelijk zeer lelijke code. Ik doe alles 8 keer, eigenlijk zou ik alles netjes in een for loop of switch statement willen, waardoor ik geen dubbele code heb. Echter kom ik daar nog niet uit. Het volgende had ik al geprobeerd:


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Setup PN532 boards via SPI bus
Adafruit_PN532 nfc0(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS0);
Adafruit_PN532 nfc1(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS1);
...

// Setup PN532 boards via SPI bus
Adafruit_PN532 *reader[ 8 ] = { &nfc0, &nfc1, &nfc2, &nfc3, &nfc4, &nfc5, &nfc6, &nfc7 };

void setup() {
  for (int i=0; i<8; i++) {
     // Set the max number of retry attempts to read from a card This prevents us from waiting forever for a card, which is the default behaviour of the PN532.
     reader[i]->setPassiveActivationRetries(0xFF); 
     // configure board to read RFID tags
     reader[i]->SAMConfig();
  }
}

void loop() {
  for (int i=0; i<8; i++) {
    if (reader[i]->readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength, timeout)) {
      Serial.print("Found a card on nfc0: ");
    else { 
      delay(timeout); 
  }
}



Daarbij maak ik 8 keer de Adafruit_PN532 aan, en vervolgens wijs ik er met pointers naartoe in de array *reader. Hopende dat ik vervolgens deze array aan kan roepen in de for loops. Ik heb echter nooit eerder met pointers gewerkt en dit lijkt niet goed te zijn 8)7. Kan iemand mij een schopje in de goede richting geven? Heb het internet aardig afgespeurd maar kom niet verder.

  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
wat is er niet goed aan? Krijg je een compile error? Vaak is dat je eerste "schopje in de goede richting"

zcflevo.nl


  • teaser
  • Registratie: april 2007
  • Laatst online: 07-12 13:25
_ferry_ schreef op dinsdag 12 november 2019 @ 20:27:
Maar nu de hamvraag, hoe lees ik zo'n regel aan HEX data serieel in op de arduino en filter ik de pagina er uit. Zodat ik weet op welke pagina ik zit?

Ik hoef geen voorgekauwde code, al sla ik dat niet af :+ maar door alle serial.xyz functies floats,strings,ints en code kom ik er niet helemaal uit. Programmeren is niet m'n sterkste ding, en wat roestig :+
HEX is gewoon een manier om binaire data voor te stellen. 1 byte kun je uitlezen als bv een char of een uint/ushort. Je krijgt dan een waarde van 0 tot 255. Dus je '65' wordt 101, '01' blijft 1, 'FF' wordt 255 enz.
Thy... schreef op donderdag 14 november 2019 @ 11:00:
Daarbij maak ik 8 keer de Adafruit_PN532 aan, en vervolgens wijs ik er met pointers naartoe in de array *reader. Hopende dat ik vervolgens deze array aan kan roepen in de for loops. Ik heb echter nooit eerder met pointers gewerkt en dit lijkt niet goed te zijn 8)7. Kan iemand mij een schopje in de goede richting geven? Heb het internet aardig afgespeurd maar kom niet verder.
Als je pointers hebt moet je deze dereferencen met een pijltje, dus:


code:
20
if (reader[i]->readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength, timeout)) {


  • _ferry_
  • Registratie: januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

teaser schreef op donderdag 14 november 2019 @ 12:02:
[...]

HEX is gewoon een manier om binaire data voor te stellen. 1 byte kun je uitlezen als bv een char of een uint/ushort. Je krijgt dan een waarde van 0 tot 255. Dus je '65' wordt 101, '01' blijft 1, 'FF' wordt 255 enz.


[...]

Als je pointers hebt moet je deze dereferencen met een pijltje, dus:


code:
20
if (reader[i]->readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength, timeout)) {

Ja daar kwam ik wel een eind mee, en kreeg het ook wel voor elkaar om de waarde weer decimaal te printen over de poort. Maar het uitfilteren van de waarde was iets wat ik niet voor elkaar kreeg.
Maarjaa, misschien later nog eens in verdiepen als ik met knoppen op het display taken op de arduino wil uitvoeren. Maar voor nu niet nodig Y:)

  • Thy...
  • Registratie: april 2006
  • Laatst online: 06-12 15:31
Dank voor de reacties.
teaser schreef op donderdag 14 november 2019 @ 12:02:

Als je pointers hebt moet je deze dereferencen met een pijltje, dus:


code:
20
if (reader[i]->readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength, timeout)) {

Oh ja, dat had ik inderdaad ook al geprobeerd maar werkte ook niet.
mcDavid schreef op donderdag 14 november 2019 @ 11:17:
wat is er niet goed aan? Krijg je een compile error? Vaak is dat je eerste "schopje in de goede richting"
edit: weer even getest in Arduino, ik krijg geen compile error. Compilen gaat goed, maar de RFID lezers worden niet uitgelezen. Ik was voornamelijk benieuwd of deze manier van werken met pointers wel the way to go is, of dat ik het aanroepen via een for loop beter op een andere manier kan doen.

Thy... wijzigde deze reactie 14-11-2019 12:46 (10%)


  • Joepla
  • Registratie: maart 2005
  • Laatst online: 00:48

Joepla

Geavanceerde micro-elektronica

Heb het hier al eens eerder gemeld: de 16 x 2 LCD's (blauw met witte letters) die ik gebruik (van Ali), degraderen na verloop van tijd, zo lijkt het. Ze zijn 24/7 in bedrijf en na ca. een half jaar wordt het contrast duidelijk slechter.
Zijn de karakters in het begin fel wit, na een tijdje worden ze grijs en dat geeft natuurlijk veel minder contrast op de blauwe achtergrond. Aan de potmeter draaien geeft geen verbetering, het lijkt wel of de witte LED(s) er gewoon mee ophouden.

Plaatje ergens van internet geript, zoiets ziet het eruit als ze nieuw zijn:


En nu bij mijn projectje:


Zijn het gewoon slechte LCD's, of doe ik iets verkeerd? Ze draaien netjes op 5V (stabiel, weinig rimpel), de jumper zit op de PCB (backlight aan). Heb al verschillende leveranciers geprobeerd, dus ook verschillende batches, maar het probleem blijft.

Live solarinfo op PVoutput [6,625 kWp]


  • tsjoender
  • Registratie: april 2005
  • Laatst online: 16:53
Joepla schreef op donderdag 14 november 2019 @ 13:51:
Heb het hier al eens eerder gemeld: de 16 x 2 LCD's (blauw met witte letters) die ik gebruik (van Ali), degraderen na verloop van tijd, zo lijkt het. Ze zijn 24/7 in bedrijf en na ca. een half jaar wordt het contrast duidelijk slechter.
Zijn de karakters in het begin fel wit, na een tijdje worden ze grijs en dat geeft natuurlijk veel minder contrast op de blauwe achtergrond. Aan de potmeter draaien geeft geen verbetering, het lijkt wel of de witte LED(s) er gewoon mee ophouden.

Plaatje ergens van internet geript, zoiets ziet het eruit als ze nieuw zijn:
[Afbeelding: lcd_normal]

En nu bij mijn projectje:
[Afbeelding: LCD_faded]

Zijn het gewoon slechte LCD's, of doe ik iets verkeerd? Ze draaien netjes op 5V (stabiel, weinig rimpel), de jumper zit op de PCB (backlight aan). Heb al verschillende leveranciers geprobeerd, dus ook verschillende batches, maar het probleem blijft.
Het is inderdaad "normaal" dat dit na verloop van tijd gebeurt. Misschien iets wat je voor lief moet nemen gezien de prijs van dit soort schermen. Zelf heb ik laatst een projectje gebouwd met zo'n scherm en heb een knopje toegevoegd. Het scherm is standaard uit en als ik op het knopje druk dan gaat het scherm enkele seconden aan met:

code:
1
2
lcd.backlight();
lcd.display();


en na het verlopen van de timer weer uit met

code:
1
2
lcd.noBacklight();
lcd.noDisplay();


Dit is met de LiquidCrystal_I2C library. Zo reduceer je het aantal branduren enorm. Je kan eventueel ook een bewegingssensor toepassen waarmee het aanzetten van het schermpje getriggered wordt.

  • teaser
  • Registratie: april 2007
  • Laatst online: 07-12 13:25
_ferry_ schreef op donderdag 14 november 2019 @ 12:22:
[...]

Ja daar kwam ik wel een eind mee, en kreeg het ook wel voor elkaar om de waarde weer decimaal te printen over de poort. Maar het uitfilteren van de waarde was iets wat ik niet voor elkaar kreeg.
Maarjaa, misschien later nog eens in verdiepen als ik met knoppen op het display taken op de arduino wil uitvoeren. Maar voor nu niet nodig Y:)
Wat bedoel je met uitfilteren? De juiste byte te pakken krijgen? Het lijkt erop dat deze altijd op dezelfde plaats zit, dus je moet gewoon altijd de tweede byte bekijken (index 1 dus als je een array hebt, want zero-based).
Thy... schreef op donderdag 14 november 2019 @ 12:34:
edit: weer even getest in Arduino, ik krijg geen compile error. Compilen gaat goed, maar de RFID lezers worden niet uitgelezen. Ik was voornamelijk benieuwd of deze manier van werken met pointers wel the way to go is, of dat ik het aanroepen via een for loop beter op een andere manier kan doen.
Een for loop is inderdaad de normale manier om zoiets aan te pakken.
Wat zie je nu in je serial monitor? In de code die je gepost hebt print je wel telkens dezelfde string 'nfc0', dat zet je toch niet op het foute spoor?

Zet eventueel ook eens een serial println in de for loop in de setup.

Er zit wel een verschil in hoe de setup gebeurt nu met de for loop. Ipv eerste alle setPassiveActivationRetries te doen en vervolgens de SAMConfig, doe je nu afwisselend de setPassiveActivationRetries en dan de SAMConfig voor elke reader. Ik weet niet of dat invloed heeft op de werking.

  • Joepla
  • Registratie: maart 2005
  • Laatst online: 00:48

Joepla

Geavanceerde micro-elektronica

tsjoender schreef op donderdag 14 november 2019 @ 19:35:
[...]


Het is inderdaad "normaal" dat dit na verloop van tijd gebeurt. Misschien iets wat je voor lief moet nemen gezien de prijs van dit soort schermen. Zelf heb ik laatst een projectje gebouwd met zo'n scherm en heb een knopje toegevoegd. Het scherm is standaard uit en als ik op het knopje druk dan gaat het scherm enkele seconden aan met:

code:
1
2
lcd.backlight();
lcd.display();


en na het verlopen van de timer weer uit met

code:
1
2
lcd.noBacklight();
lcd.noDisplay();


Dit is met de LiquidCrystal_I2C library. Zo reduceer je het aantal branduren enorm. Je kan eventueel ook een bewegingssensor toepassen waarmee het aanzetten van het schermpje getriggered wordt.
Ok... Wat zou er precies degraderen? De backlightLED of iets in het display ("polarising") oid? Een beetje LED gaat erg lang mee tenslotte.

Op zich is jouw oplossing wel mooi, maar voor sommige dingen toch weer niet. Ik wil dat dit display het gewoon blijft doen, zonder al teveel zaken eromheen, zoals een PIR sensor. Misschien moet ik eens terug naar de groene displays, die blijven ook zonder backlight afleesbaar.

Vond de blauwe juist erg cool om te zien :)

Live solarinfo op PVoutput [6,625 kWp]


  • _ferry_
  • Registratie: januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

teaser schreef op vrijdag 15 november 2019 @ 10:18:
[...]

Wat bedoel je met uitfilteren? De juiste byte te pakken krijgen? Het lijkt erop dat deze altijd op dezelfde plaats zit, dus je moet gewoon altijd de tweede byte bekijken (index 1 dus als je een array hebt, want zero-based).
Dat ja! Las al wat over array's. Maar daar zal ik dan eens in duiken. Nooit eerder mee gewerkt :P Scheelt ook weer dat ik nu wat gerichter kan zoeken.




Ondertussen wel de printplaat aardig in elkaar gesoldeerd, en het ontwerp voor de behuizing van het LCD bijna klaar om te 3D printen. (Daar ben ik dan meer bedreven in :P )
Alleen een paar haakse IPV rechte connectoren bestel |:( 8)7 Maar daar werk ik wel omheen. Dat waren 2 polige, en ik heb voldoende 3 polige connectoren.

  • teaser
  • Registratie: april 2007
  • Laatst online: 07-12 13:25
Joepla schreef op vrijdag 15 november 2019 @ 10:28:
[...]
Ok... Wat zou er precies degraderen? De backlightLED of iets in het display ("polarising") oid? Een beetje LED gaat erg lang mee tenslotte.
Ik zou gokken op de backlight. Een LCD op zich wordt toch niet slecht? Casio horloges van de jaren 70/80 doen het nu toch ook gewoon nog?

  • mcDavid
  • Registratie: april 2008
  • Laatst online: 17:31
Als het de polarisatie filter was, zou je zeggen dat het ook moet gebeuren als het display uit staat toch?

Ik zou ook gokken op de led's. Die kunnen aardig rap degraderen als het goedkope troep is.

mcDavid wijzigde deze reactie 15-11-2019 13:55 (30%)

zcflevo.nl


  • _ferry_
  • Registratie: januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

Nextion scherm voor de auto al een aardig eind klaar;


Nog wat dingetjes tweaken, maar dat komt wel goed, en dan kan hij in de auto geknutseld gaan worden.
Pagina: 1 ... 91 92 93 Laatste


Apple iPhone 11 Nintendo Switch Lite LG OLED C9 Google Pixel 4 FIFA 20 Samsung Galaxy S10 Sony PlayStation 5 Smartphones

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True