# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  Απορία για "κώδικα".

## finos

ειναι ο κώδικας για το τροφοδοτικό μου Untitled.jpg(1920χ1080)




```
#include <SPI.h>;#include <LiquidCrystal.h>;//LCD 
float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;//    >>
int value1 = 0; //    >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;//    >>
int value2 = 0; //    >>
int pinbutton1 = 6;//on off out
int Relay = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val; 
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n = LOW;//for encoder
int csPin = 10


void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( pinbutton, INPUT );
pinMode ( Relay, OUTPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.print ("DIGITAL PSU FINOS");
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
}


void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
 vout1= (value1 * 5.0) / 1024 ;
 vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor 
 vout2= (value2 * 5.0) / 1024 ;
 vin2 = vout2 / (R2/(R1+R2));
 
 
 if (vin1<1.255) {
  vin1 = 0.0;
  
 }
lcd.setCursor(0,1);
lcd.print("VOUT= ");
lcd.print(vin1);
Serial.println("Vout = ");
Serial.println(vin1);
delay (2);
 if (pinbutton = HIGH) ;
  digitalWrite (Relay, HIGH );
n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;
       
       if (encoder0Pos<0);
       encoder0Pos= 0;
     }
     Serial.print (encoder0Pos);
     Serial.print ("/");
   } 
   encoder0PinALast = n;
 }
```


λιπουν πραματα κι υπαρχουν extras

----------


## SeAfasia

ρώτα τον προγραμματιστή του κώδικα Βάγγο αυτός ξέρει....

----------


## geob

Ρε φίνο (Όχι ότι μου πέφτει και λόγος δεν είμαι διαχειριστής) αλλά πόσα θέματα έχεις ανοίξει γι'αυτό το τροφοδοτικό; δε μπορείς να χρησιμοποιήσεις το αρχικό έτσι ώστε να βοηθηθεί και κάποιος που στο μέλλον θα θέλει να φτιάξει τροφ. με μΕ... Επίσης και ο τίτλος σου (Όχι ότι είσαι ο μοναδικός που το κάνει) αλλά ποιος θα κάνει Αναζήτηση με τίτλο "που ειναι η μ@λ@κια" ;

----------


## SeAfasia

*αλλά ποιος θα κάνει Αναζήτηση με τίτλο "που ειναι η μ@λ@κια" ;*
πιθανόν ο προγραμματιστής του κώδικα... :Lol:

----------


## Panoss

Ε, ναι παιδιά αλλάξτε επειγόντως τον τίτλο, είναι τράτζικ...

----------


## finos

Λιπών έχετε δίκιο 
Κ.διαχιριστα μποριτε να συγχωνευσετε τα θέματα του τροφοδοτικου ;
Α ! Εγώ το έγραψα τον κωδικα

----------


## manolena

Εγώ μικρέ θυμάμαι όταν πριν χρόνια συνάντησα στο δρόμο μου τα arduino, οι πρώτοι μου κώδικες δεν είχαν 29 μεταβλητές, ούτε εξωτικές βιβλιοθήκες ανάγνωσης encoders, ούτε "εξτραδάκια", όπως γράφεις.
Άνοιξε κανα tutorial πρώτα να δείς πέντε πράματα, άνοιξε μετά και άλλο tutorial να δείς άλλα πέντε, άνοιξε και τα μάτια σου καλά και διάβασε, βελτίωσε και τη μητρική σου γλώσσα γιατί χωρίς αυτή δεν
θα πας πουθενά και μπες σιγά σιγά με σίγουρα βήματα σε ετούτο τον κόσμο. Δίνεις ένα κομμάτι κώδικα που βρήκες απο κομμάτια εδώ κι εκεί συνεπαρμένος απο το μικρό της ηλικίας σου, έχοντας μιαν απαίτηση
για βοήθεια που έχει ολίγη αναίδεια... *Λιπών*, κάνε κανα κώδικα με απλά πραματάκια πρώτα για να μάθεις, όπως κάνουμε όλοι μας γιατί όπως βλέπεις, αν πέσεις καταμεσής στον ωκεανό ξεβράκωτος, το πιθανότερο είναι
να πνιγείς. Αν έχεις όμως εξοπλισμό, αντιστρέφεται η κατάσταση.

Φιλικά και με υπομονή για όλα αυτά που βλέπω, πάντα.

----------


## finos

manolena τον κωδικα δεν τον εγραψα μονος μου απο την αρχη εως το τελος πήρα παραδείγματα από το διαδίκτυο  κι τα προσαρμοσα στις ανακγες μου και δεν θεωρω εξωτηκη την spi ή licuidcristal βιβλιοθήκη

V 0.2



```
 #include <SPI.h>;#include <LiquidCrystal.h>;//LCD 
float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;//    >>
int value1 = 0; //    >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;//    >>
int value2 = 0; //    >>
int pinbutton1 = 6;//on off out
int Relay1 = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val; 
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n = LOW;//for encoder
int csPin1 = 10;


void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( pinbutton1, INPUT );
pinMode ( Relay1, OUTPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.setCursor(0,0 );
lcd.print ("DIGITAL PSU FINOS");//fancy 
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");//fancy 
pinMode (encoder0PinA,INPUT);//roterry encode 
pinMode (encoder0PinB,INPUT);
SPI.begin();
pinMode(csPin1, OUTPUT);


}




void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
 vout1= (value1 * 5.0) / 1024 ;
 vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor 
 vout2= (value2 * 5.0) / 1024 ;
 vin2 = vout2 / (R2/(R1+R2));
 
 
 if (vin1<1.255) {
  vin1 = 0.0;
  
 }
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VOUT1= ");
lcd.print(vin1);
lcd.setCursor(1,0);
lcd.print("VOUT2= ");
lcd.print(vin2);
Serial.println("Vout1 = ");
Serial.println(vin1);
Serial.println("Vout2 = ");
Serial.println(vin2);
delay (2);
 if (pinbutton1 = HIGH) ;
  digitalWrite (Relay1, HIGH );


n = digitalRead(encoder0PinA);// roterry encoder read data start 
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;
       
       if (encoder0Pos<0);
       encoder0Pos= 0;
     }
     
   } 
   encoder0PinALast = n;//roterry encoder read date end 
   digitalWrite (csPin1,LOW);//spi bus mpc 4151 first
   SPI.transfer(0);
   SPI.transfer(encoder0Pos);
 }
```


ΠΡΕΠΕΙ ΝΑ ΜΠΟΥΝ ΑΚΟΜΑ ΠΟΛΛΛΛΛΑ

----------


## thanasis 1

[/QUOTE]


```
#include <SPI.h>
#include <LiquidCrystal.h>//LCD 
float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;//    >>
int value1 = 0; //    >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;//    >>
int value2 = 0; //    >>
int pinbutton1 = 6;//on off out
int Relay = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val; 
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n = LOW;//for encoder
int csPin = 10                 ΕΡΩΤΗΜΑΤΙΚΟ ΕΔΩ ΔΕΝ ΘΑ ΒΑΛΕΙΣ 


void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( pinbutton, INPUT );    ΣΕ ΠΟΙΟ pinbutton ΣΤΟ 1 ΣΤΟ 2 ??????
pinMode ( Relay, OUTPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.print ("DIGITAL PSU FINOS");
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
}


void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
 vout1= (value1 * 5.0) / 1024 ;
 vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor 
 vout2= (value2 * 5.0) / 1024 ;
 vin2 = vout2 / (R2/(R1+R2));
 
 
 if (vin1<1.255) {
  vin1 = 0.0;
  
 }
lcd.setCursor(0,1);
lcd.print("VOUT= ");
lcd.print(vin1);
Serial.println("Vout = ");
Serial.println(vin1);
delay (2);
 if (pinbutton = HIGH) ;  ΣΕ ΠΟΙΟ pinbutton ΣΤΟ 1 ΣΤΟ 2 ??????
  digitalWrite (Relay, HIGH );
n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;
       
       if (encoder0Pos<0);
       encoder0Pos= 0;
     }
     Serial.print (encoder0Pos);
     Serial.print ("/");
   } 
   encoder0PinALast = n;
 }
```


[/QUOTE]
Φτιαξε τα παραπανω που σου εχω με κοκκινο και θα σου τρεξει! :Smile:

----------

tsimpidas (17-12-15)

----------


## betacord85

αντι να πιασεις με το καλο τον μανο και να του πεις να σε βοηθησει αρχιζεις τα δικα σου παλι ρε φινο...η μ@λ@κια ειναι οτι σου απαντανε ατομα που ειναι χρονια προγραματιστες σε εταιριες και θελουν να σε βοηθησουν και εσυ εισαι στον κοσμο σου...και ασε πια τα σαπια οτι δεν κανεις σωστη ορθογραφια εξαιτιας του πληκτρολογιου...κατσε ψαξε μονος σου διαβασε στο ιντερνετ πειραματισου!μην τα περιμενεις ετοιμα απο τους αλλους!

----------

hackertom (25-03-16)

----------


## SProg

Δεν βρισκω το post μου που λεει (νομιζω παλι στο Fino)  ακριβως οτι λεει ο Μανος και τη λογικη σειρα που πρεπει να μαθεις καποια πραγματα εαν θελεις να ασχοληθεις με μΕ (..ακομα και με arduino που σου δινει ετοιμη τροφη).




Δεν γινεται ο Kωστας (SeAfasia) το παιδι που σου ριχνει DoubleScore στα χρονια.. να καθεται και να γραφει συναρτησεις και προγραμματα για LCD για να μαθει τον PIC ενω μπορουσε απλα να πεταξει μια βιβλιοθηκη.


Ελεος.Και ποια η λογικη να διορθωσουμε το κωδικα; Χανεται η μαγεια και δεν εχει και νοημα.

----------


## tsimpidas

```
#include <SPI.h>
#include <LiquidCrystal.h>//LCD 
float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;//    >>
int value1 = 0; //    >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;//    >>
int value2 = 0; //    >>
int pinbutton1 = 6;//on off out
int Relay = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val; 
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n = LOW;//for encoder
int csPin = 10                 ΕΡΩΤΗΜΑΤΙΚΟ ΕΔΩ ΔΕΝ ΘΑ ΒΑΛΕΙΣ 


void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( pinbutton, INPUT );    ΣΕ ΠΟΙΟ pinbutton ΣΤΟ 1 ΣΤΟ 2 ??????
pinMode ( Relay, OUTPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.print ("DIGITAL PSU FINOS");
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
}


void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
 vout1= (value1 * 5.0) / 1024 ;
 vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor 
 vout2= (value2 * 5.0) / 1024 ;
 vin2 = vout2 / (R2/(R1+R2));
 
 
 if (vin1<1.255) {
  vin1 = 0.0;
  
 }
lcd.setCursor(0,1);
lcd.print("VOUT= ");
lcd.print(vin1);
Serial.println("Vout = ");
Serial.println(vin1);
delay (2);
 if (pinbutton = HIGH) ;  ΣΕ ΠΟΙΟ pinbutton ΣΤΟ 1 ΣΤΟ 2 ??????
  digitalWrite (Relay, HIGH );
n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;
       
       if (encoder0Pos<0);
       encoder0Pos= 0;
     }
     Serial.print (encoder0Pos);
     Serial.print ("/");
   } 
   encoder0PinALast = n;
 }
```


[/QUOTE]
Φτιαξε τα παραπανω που σου εχω με κοκκινο και θα σου τρεξει! :Smile: [/QUOTE]




Ναι τωρα δουλευει.  :Thumbup1: 

Βαγγελη κανε copy-paste 

 #include <SPI.h>#include <LiquidCrystal.h>//LCD 
float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;//    >>
int value1 = 0; //    >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;//    >>
int value2 = 0; //    >>
int pinbutton1 = 6;//on off out
int Relay = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val; 
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n = LOW;//for encoder
int csPin = 10;                 




void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( analogInput2, INPUT );    //ΣΕ ΠΟΙΟ pinbutton ΣΤΟ 1 ΣΤΟ 2 ??????
pinMode ( Relay, OUTPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.print ("DIGITAL PSU FINOS");
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
}




void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
 vout1= (value1 * 5.0) / 1024 ;
 vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor 
 vout2= (value2 * 5.0) / 1024 ;
 vin2 = vout2 / (R2/(R1+R2));


 if (vin1<1.255) {
  vin1 = 0.0;

 }
lcd.setCursor(0,1);
lcd.print("VOUT= ");
lcd.print(vin1);
Serial.println("Vout = ");
Serial.println(vin1);
delay (2);
 if (analogInput2 = HIGH) ;  //
  digitalWrite (Relay, HIGH );
n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;

       if (encoder0Pos<0);
       encoder0Pos= 0;
     }
     Serial.print (encoder0Pos);
     Serial.print ("/");
   } 
   encoder0PinALast = n;
 }

----------

finos (17-12-15)

----------


## finos

βρε μπαμπινο  :Lol:  δεν ηθελα κι ουτε θελω σε καμια περιπτωση να εναντιωθώ στον μανο  τι του είπα απλος οτι δεν θεωρω εξωτική την spi 
κι ξέρεις κάτι μου αρεσει να βουτάω στα δύσκολα  αν θημαστε στην αρχη του προηγούμενού καλοκαιριού (ιουνιος 2015 ) ανεβασα ενα κωδικα για ενα bluetooth αυτοκινιτακι ;απο τοτε εγραψα κωδικα κι για αλλα πραματα πχ ενα αυτοματο σύστημα άρδευσης με ελενχο θερμοκρασιας , ηγρασιας , ηλεκτροβανες κτλ (να βρω τον κωδικα να σας τον  δειξω) θέλω να ευχαριστήσω δεν πρόσεξα ποιος επισήμανε τα λάθει στον κωδικά κι ποιος τα διόρθωσε

----------


## finos

με επιτυχία ολοκλήρωσα εάν κομμάτι του κώδικα που :παίρνει την τιμή του encoder και την στέλνει στο  ψηφιακό ποτενσιόμετρο 
αλλά θέλω επίσης να βάλω μια προστασία δηλαδή αν φτάσει στο μάξιμουμ του ποτενσιόμετρου (256) να σταματάει να μετράει κι 
επιεί έχω 2 εξόδους θέλω να έχω 2 encoders κι όταν παρατηρείτε αλλαγή στον έναν αν αλλάζει την αντίστοιχη τιμή κι όταν παρατηρείτε στο άλλο encoder να αλλάζει το άλλο ποτενσιόμετρο




```
#include <SPI.h>;#include <LiquidCrystal.h>;//LCD 
float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;//    >>
int value1 = 0; //    >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;//    >>
int value2 = 0; //    >>
int pinbutton1 = 6;//on off out
int Relay1 = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val; 
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n = LOW;//for encoder
int csPin1 = 10;
int csPin2 = 9;
void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( pinbutton1, INPUT );
pinMode ( Relay1, OUTPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.setCursor(0,0 );
lcd.print ("DIGITAL PSU FINOS");//fancy 
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");//fancy 
pinMode (encoder0PinA,INPUT);//roterry encode 
pinMode (encoder0PinB,INPUT);
SPI.begin();
pinMode(csPin1, OUTPUT);
pinMode(csPin2, OUTPUT);
}




void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
 vout1= (value1 * 5.0) / 1024 ;
 vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor 
 vout2= (value2 * 5.0) / 1024 ;
 vin2 = vout2 / (R2/(R1+R2));
 
 
 if (vin1<1.255) {
  vin1 = 0.0;
  
 }
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VOUT1= ");
lcd.print(vin1);
lcd.setCursor(1,0);
lcd.print("VOUT2= ");
lcd.print(vin2);
Serial.println("Vout1 = ");
Serial.println(vin1);
Serial.println("Vout2 = ");
Serial.println(vin2);
delay (2);
 if (pinbutton1 = HIGH) ;
  digitalWrite (Relay1, HIGH );


n = digitalRead(encoder0PinA);// roterry encoder read data start 
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;
       
       if (encoder0Pos<0);
       encoder0Pos= 0;
     }
     
   } 
   encoder0PinALast = n;//roterry encoder read date end 
   digitalWrite (csPin1,LOW);//spi bus mpc 4151 first
   SPI.transfer(0);
   SPI.transfer(encoder0Pos);
   digitalWrite (csPin2,HIGH);
   
 }
```


σας εχω λιγω κουρασει;

----------


## finos

κανεις νο one ?

----------


## Satcom

''*Serial.println ("DIDITAL PSUFINOS ........... WAIT** FOR COMANT");//fancy''*
Κανείς δεν θα μπορεί να αμφισβητήσει ότι αυτό το τροφοδοτικό είναι του φίνου βλέποντας στην LCD το COMANT !

----------


## finos

γιατι να μιν βαλω κατι fancy

----------


## The_Control_Theory

Γειά σου Φίνο.

Να σου πω ένα κόλπο για το μέλλον να χρησιμοποιείς. Πολλά κόλπα μάλλον.

1. Τα πάντα τελειώνουν με ερωτηματικό ( τέτοιο ->    ;  ) *ΥΠΑΡΧΟΥΝ ΠΕΡΙΠΤΩΣΕΙΣ ΛΙΓΕΣ ΠΟΥ ΔΕΝ ΤΕΛΕΙΩΝΟΥΝ. Δοκιμαζε στον μεταγλωτιστή και βάλε αν βγάζει λάθος εκεί που δεν έχει*
2. Χώριζε τον κώδικα ( πχ αυτόν που συζητάμε τώρα ) σε δύο στρατόπεδα. Αυτόν που λειτουργεί και σε αυτόν που δεν λειτουργεί( δηλαδή βγάζει λάθη) με την χρήση σχολίων //. (Να τον πρασιζίζεις)
3. Καρτερικά και με προσευχή βγαζε ένα ένα τα σχόλια // μέχρι να δουλέψει.
4. Αν όλα πάνε καλά υπάρχει και level 2.

Παρατηρώ ότι κάνεις λάθη ορθογραφίας. Δεν είναι κακό απλά συνήθως κουράζουν τον κόσμο που διαβάζει τα άρθρα σου και τους κάνει να μην σου απαντάνε.
Αν προσπαθήσεις να γράψεις πιό εύκολα για αυτούς που διαβάζουν πιστεύω να σου απαντάνε περισσότεροι και να μαθαίνεις περισσότερα.

Εύχομαι καλές κατασκευές.

----------

Muttley Black (18-12-15)

----------


## Muttley Black

Το thanks είναι για τον τρόπο που "μίλησες".

----------


## finos

1 το ξέρω απλός μερικές τα ξεχναω 
2 ωραία μαγκια 
4 level 2;

----------


## The_Control_Theory

*Ο προγραμματισμός χωρίζεται σε:*

1. Διαδικαστικό( Σειρά από εντολές όπως στο πρόγραμμα σου παρακάτω)
2. Δομημένο( Εντολές που κρύβονται μέσα σε συναρτήσεις )
3. Αντικειμενοστραφή (συνήθως μόνο το Arduino χρησιμοποιεί αντικειμενοστραφή. Αν τον έχεις συναντήσει είναι με την λέξη class )

Τώρα θεώρησε ότι είσαι στο 1. Πρέπει να γίνεις ξεφτέρι στο 1. Να ξέρεις γραμμή γραμμή τι γίνεται κι ας μην δουλεύει ο κώδικας.
Αυτά που φτιάχνεις καμιά φορά δεν φταίει πάντα ο κώδικας αλλά το υλικό.  Πχ που ξέρουμε εμείς ότι η οθόνη σου δεν είναι χαλασμένη?
Για να είσαι σίγουρος ότι δεν φταίει η οθόνη πρέπει να γίνεις αλάνι και ξεφτέρι στο 1. Γραμμή γραμμή. Να μην κάνεις λάθος πουθενά.
Κι όταν εννοώ λάθος τι εννοώ.

*Είδη λαθών στον προγραμματισμό μικροελεγκτών*
1. Συντακτικά ( level 2 )
2. Λογικά( level 2 )
3. *Μεταγλώτισης*( *level 1*: Θα πρέπει αρχικά να μεταγλωτίζεται ο κώδικας. Να μην ξεχνάς ερωτηματικά. Να γίνεις ξεφτέρι και αλάνι στην C( δομημένη γλώσσα. Oxi arduino ) ή στην C++( μόνο αν κάνεις arduino)).
4. Λόγω υλικού( αυτό που είπαμε παραπάνω με την χαλασμένη οθόνη lcd, κακή τάση μικροελεγτή, κακή κατασκευή πλακέτας κλπ κλπ)( *level 1 αλλά όχι στον προγραμματισμό στα ηλεκτρονικά* )

Οταν το κάνεις να μεταγλωτιστεί και μάθεις να χειρίζεσαι την γλώσσα και να γράφεις εντολές δικές σου (όχι όλα, ξαναγράψε εδώ ξανά να ρωτάς για θεωρία C κλπ ) θα είσαι αυτόματα level 2.

Ότι και να πω για το level 2 θα είναι κακό γιατί θα ψάξεις εκείνο και θα βαρεθείς να κάνεις το level 1.
Πίστεψέ με. Θέλει υπομονή. Ακου και τους άλλους.

----------


## SProg

Ο  καθε προγραμματιστης μΕ πρεπει να εχει μαθει την ASM εστω ενος μΕ..ακομα και πριν 20 χρονια.Να εχει κανει μια γκαμα εφαρμογων σε ASM.Γιατι;Γιατι οτι και να κανει με μΕ στην συνεχεια θα τον βοηθησει.Γινεται να θελεις να προγραμματισεις μΕ και να κανεις εφαρμογες μη γνωριζοντας βασικα ηλεκτρονικα/προγραμματισμο και ψηφιακα;

Πρεπει τωρα μιλωντας γενικα, να καταλαβαινει τη λογικη που εκτελουνται οι εντολες.Να μαθει τα περιφερειακα του κτλ.


Οι περισσοτεροι που ασχολουνται σοβαρα με μΕ (και ας μην βγαζουν ψωμι απο αυτο!) εμαθαν τι ειναι EEPROM,ADC,PWM και πως να τα χειριζονται ΜΗΝΕΣ αφ'οτου ξεκινησαν καποιον μικροελεγκτη.



Τωρα για Arduino,ειναι τελειως διαφορετικο μιας και σου προσφερει πολλα ετοιμα.Στην 3η μερα πετας ενα analogRead() και ασε απο πισω να τρεχουν ζεβρες.

----------


## finos

> *Ο προγραμματισμός χωρίζεται σε:*
> 
> 1. Διαδικαστικό( Σειρά από εντολές όπως στο πρόγραμμα σου παρακάτω)
> 2. Δομημένο( Εντολές που κρύβονται μέσα σε 
> 3. Αντικειμενοστραφή (συνήθως μόνο το Arduino χρησιμοποιεί αντικειμενοστραφή. Αν τον έχεις συναντήσει είναι με την λέξη class )
> 
> Τώρα θεώρησε ότι είσαι στο 1. Πρέπει να γίνεις ξεφτέρι στο 1. Να ξέρεις γραμμή γραμμή τι γίνεται κι ας μην δουλεύει ο κώδικας.
> Αυτά που φτιάχνεις καμιά φορά δεν φταίει πάντα ο κώδικας αλλά το υλικό.  Πχ που ξέρουμε εμείς ότι η οθόνη σου δεν είναι χαλασμένη?
> Για να είσαι σίγουρος ότι δεν φταίει η οθόνη πρέπει να γίνεις αλάνι και ξεφτέρι στο 1. Γραμμή γραμμή. Να μην κάνεις λάθος πουθενά.
> ...



στο σχολειο κανουμε την αθλια logo (micro worlds pro) με ενα σκατοχελονακι (μπ 10  δε 2 σβγ ) αλλλα ολα χριαζωντε κι να σας πω κατι evry thigk you lern will gona be nececery same time
κανεις για την ερωτηση παραπανω ; :Crying:

----------


## The_Control_Theory

> Ο  καθε προγραμματιστης μΕ πρεπει να εχει μαθει την ASM εστω ενος μΕ..ακομα και πριν 20 χρονια.Να εχει κανει μια γκαμα εφαρμογων σε ASM.Γιατι;Γιατι οτι και να κανει με μΕ στην συνεχεια θα τον βοηθησει.Γινεται να θελεις να προγραμματισεις μΕ και να κανεις εφαρμογες μη γνωριζοντας βασικα ηλεκτρονικα/προγραμματισμο και ψηφιακα;
> 
> Πρεπει τωρα μιλωντας γενικα, να καταλαβαινει τη λογικη που εκτελουνται οι εντολες.Να μαθει τα περιφερειακα του κτλ.
> 
> 
> Οι περισσοτεροι που ασχολουνται σοβαρα με μΕ (και ας μην βγαζουν ψωμι απο αυτο!) εμαθαν τι ειναι EEPROM,ADC,PWM και πως να τα χειριζονται ΜΗΝΕΣ αφ'οτου ξεκινησαν καποιον μικροελεγκτη.
> 
> 
> 
> Τωρα για Arduino,ειναι τελειως διαφορετικο μιας και σου προσφερει πολλα ετοιμα.Στην 3η μερα πετας ενα analogRead() και ασε απο πισω να τρεχουν ζεβρες.



Ναι αυτό με τον arduino το έχω σκεφτεί. Με τις ζέβρες όπως το λες. Μου άρεσε όπως το πες. Αλλά φαντάζομαι χωρίς να ξέρω ότι ο Φίνος θέλει απλά να κατεβάζει μιά βιβλιοθήκη από το ιντερνετ να την αλλάζει λίγο και να συνδέει ένα module στον arduino. Οπότε να μάθει assembly θα του φανεί για αρχή πιό δύσκολο και φοβάμαι μηπως τον κουράσει και παρατήσει τελείως τον προγραμματισμό.

Είναι πιό εύκολο να πορωθεί με τις έτοιμες λύσεις ιντερνετ αλλά και διάβασμα ταυτόχρονα από tutorial και να δημιουργηθεί η ανάγκη από μόνη της να εντρυφήσει στον προγραμματισμό γενικότερα.
Μετά από μόνος του θα ρωτάει για assembly ή C αν πορωθεί πρώτα από τις δυνατότητες του μικροελεγκτή.

Υπάρχουν δύο ειδών ερωτήσεις στα φόρουμ. Ερωτήσεις θεωρίας και συγκεκριμένες ερωτήσεις για συγκεκριμένο πρόβλημα.
Οταν κάποιος ρωτάει ερωτήσεις θεωρίας πάνω στος μικροελεγκτές σκέφτομαι από Assembly και προχωράω προς πιό σύνθετα.

Στην περίπτωση του Φίνου είναι το δεύτερο μέχρι στιγμής.

Βέβαια μιλάω υποθετικά και κάνω συλλογισμούς χωρίς να ξέρω τι πραγματικά έχει ανάγκη.

----------


## SProg

Τedi, δεν αντιλεγω.Απλα ακομα και με Arduino πρεπει να ξεκινησει σκαλι-σκαλι.

----------


## The_Control_Theory

Οχι όχι συμφωνούμε. Απλά πρέπει να του δημιουργηθεί η επιθυμία πρώτα. Είναι σαν να πιέζεις ένα παιδί να διαβάσει με το ζόρι.
Δεν μπορώ να το εκφράσω αλλιώς. Αλλά συμφωνώ μαζί σου για γενικές περιπτώσεις.

----------


## finos

> Ναι αυτό με τον arduino το έχω σκεφτεί. Με τις ζέβρες όπως το λες. Μου άρεσε όπως το πες. Αλλά φαντάζομαι χωρίς να ξέρω ότι ο Φίνος θέλει απλά να κατεβάζει μιά βιβλιοθήκη από το ιντερνετ να την αλλάζει λίγο και να συνδέει ένα module στον arduino. Οπότε να μάθει assembly θα του φανεί για αρχή πιό δύσκολο και φοβάμαι μηπως τον κουράσει και παρατήσει τελείως τον προγραμματισμό.
> 
> Είναι πιό εύκολο να πορωθεί με τις έτοιμες λύσεις ιντερνετ αλλά και διάβασμα ταυτόχρονα από tutorial και να δημιουργηθεί η ανάγκη από μόνη της να εντρυφήσει στον προγραμματισμό γενικότερα.
> Μετά από μόνος του θα ρωτάει για assembly ή C αν πορωθεί πρώτα από τις δυνατότητες του μικροελεγκτή.
> 
> Υπάρχουν δύο ειδών ερωτήσεις στα φόρουμ. Ερωτήσεις θεωρίας και συγκεκριμένες ερωτήσεις για συγκεκριμένο πρόβλημα.
> Οταν κάποιος ρωτάει ερωτήσεις θεωρίας πάνω στος μικροελεγκτές σκέφτομαι από Assembly και προχωράω προς πιό σύνθετα.
> 
> Στην περίπτωση του Φίνου είναι το δεύτερο μέχρι στιγμής.
> ...



επιδι μου πεσε ο γυρος(βαρυς 
)  ( σουβλακι για τους Αθηναίους ) asm = assembly  δηλαδή ;;;;

----------


## The_Control_Theory

> logo



Αν μάθεις μιά γλώσσα προγραμματισμού τότε είναι πιό εύκολο να μάθεις μιά επόμενη.
Οπότε μπορεί η logo να μην σε βοηθήσει στους μικροελεγκτές αλλά μπορεί να σε βοηθήσει στο να σκέφτεσαι σαν προγραμματιστής.

Επίσης η μητέρα όλων των γλωσσών προγραμματισμού είναι η γλώσσα που λέει ο* SavKok* και λέγεται Assembly. Είναι η πιο κοντινή γλώσσα του μικροελεγκτή. Είναι μάλλον μπορεί υποκειμενικό η πιό δύσκολη γλώσσα που θα συνασντήσεις ποτέ και όποιος την μάθεις μετά ξέρει πανεύκολα και τις άλλες γιατί έχει μάθεις να σκέφτεται σαν προγραμματιστής με τον δυσκολότερο τρόπο. Τα άλλα του φαίνονται πιό εύκολα.

Ναι asm = assembly.

----------


## finos

> Οχι όχι συμφωνούμε. Απλά πρέπει να του δημιουργηθεί η επιθυμία πρώτα. Είναι σαν να πιέζεις ένα παιδί να διαβάσει με το ζόρι.
> Δεν μπορώ να το εκφράσω αλλιώς. Αλλά συμφωνώ μαζί σου για γενικές περιπτώσεις.



δεν νομιζω οτι θελω καπια πιεση στο arduino

----------


## SProg

Ναι.Γενικο ειναι αυτο που ειπα.

Με λιγα λογια Βαγγελη.Ολα στα ηλεκτρονικα,στα αθληματα,στη ζωη..θελουν βημα βημα.Κανεις δεν εμαθε ποδηλατο χωρις χερια.Στην πορεια το εκανε,αφου πρωτα και με ΒΟΗΘΗΤΙΚΕΣ εφαγε τα μουτρα του.

----------


## The_Control_Theory

> δεν νομιζω οτι θελω καπια πιεση στο arduino



Ναι συμφωνώ. Η πίεση είναι κακό πράγμα. Ολα χαλαρά αλλά με βήμα βήμα όπως είπε κι ο *SavKok*. Πως και ασχολήθηκες με τα ηλεκτρονικά? Τι σου έκανε να ξεκινήσεις? Βασικά τι κάνεις στο σχολείο και σας μαθαίνουν logo?
Πες μας για σένα.

Φάε πρώτα το γύρο(σουβλάκι για τους αθηναίους)  :Lol:  μην ξαναπέσει.

----------


## finos

> εφαγε τα μουτρα του.



 :Lol: xxa

----------


## finos

> Φάε πρώτα το γύρο(σουβλάκι για τους αθηναίους)  μην ξαναπέσει.



βαρης ρε

----------


## The_Control_Theory

> βαρης ρε



Α τώρα το κατάλαβα. Καλύτερα βαρύς παρά στο πάτωμα ο γύρος.

----------


## finos

> Ναι συμφωνώ. Η πίεση είναι κακό πράγμα. Ολα χαλαρά αλλά με βήμα βήμα όπως είπε κι ο *SavKok*. 
> 1:Πως και ασχολήθηκες με τα ηλεκτρονικά? 
> 2: Τι σου έκανε να ξεκινήσεις? 
> 2: Βασικά τι κάνεις στο σχολείο και σας μαθαίνουν logo?
> 4:Πες μας για σένα.
> 
> Φάε πρώτα το γύρο(σουβλάκι για τους αθηναίους)  μην ξαναπέσει.



1 το εργαστιριο το ξεκινισα στη α' γημνασιου μεχρι τοτε ασχολουμουνα με  κατασκευες χαρτονου 
2 τοις βαρεθικα κι επερεπε   να κανω μια επισκευη σε ενα φακο  :Tongue2: μετα πιρα πολυμετρο κι ...
3 http://ebooks.edu.gr/courses/DSB102/...402902qgw4.pdf
4 αγοτερα

----------


## The_Control_Theory

Ωραίος.

Να σε ρωτήσω και μιά άλλη ερώτηση.
Μπορείς με τον arduino σου να κάνεις ένα led να αναβοσβήνει ανα 1 λεπτό με το ρολόι?
Είναι το πιό βασικό κύκλωμα-κατασκευή και προγραμματισμός. Χωρίς να δεις την λύση από το internet βέβαια.

Θα μάθεις πολλά από αυτό.

----------


## finos

```
#include <SPI.h>;//spi bus/
#include <LiquidCrystal.h>;//LCD 
float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
float R3 = 100000.0;//input2 resistor1
float R4 = 10000.0;//input2 resistor2
LiquidCrystal lcd (22, 23, 24, 25, 26, 27);//lcd
int analogInput1 = 0 ;//mesure input 1 voltage
int analogInput2 = 1 ;//mesure input 1 voltage
float vout1 = 0.0;//μεταβλητη εξοδου 1
float vin1 = 0.0 ;//    >>
int value1 = 0; //    >>
float vout2 = 0.0;//μεταβλητη εξοδου 1
float vin2 = 0.0 ;//    >>
int value2 = 0; //    >>
int pinbutton1 = 6;//on off out
int Relay1 = 7;//on off out
int pinbutton2 = 5;//on off out
int Relay2 = 4;//on off out
int staterelay1 = LOW ;//on off out
int statebutton1;//on off out
int staterelay2 = LOW ;//on off out
int statebutton2;//on off out
int previous = LOW; //on off out
long time = 0;
long debounce = 500;
int val; 
int encoder0PinA = 3;//for encoder
int encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n0 = LOW;//for encoder
int encoder1PinA = 28;//for encoder
int encoder1PinB = 29;// for encoder
int encoder1Pos = 0;//for encoder
int encoder1PinALast = LOW;//for encoder
int n1 = LOW;//for encoder
int csPin1 = 10;
int csPin2 = 9;
void setup() {
pinMode (analogInput1, INPUT);
pinMode (analogInput2, INPUT);
pinMode ( pinbutton1, INPUT );
pinMode ( Relay1, OUTPUT);
pinMode ( pinbutton2, INPUT );
pinMode ( Relay2, OUTPUT);
pinMode (csPin1, OUTPUT);
pinMode (csPin2, OUTPUT);
pinMode (encoder0PinA,INPUT);//roterry encode 
pinMode (encoder0PinB,INPUT);
pinMode (encoder1PinA,INPUT);//roterry encode 
pinMode (encoder1PinB,INPUT);
lcd.begin (16, 2);
Serial.begin (9600);
lcd.setCursor(0,0 );
lcd.print ("DIGITAL PSU FINOS");//fancy 
Serial.println ("DIDITAL PSU FINOS ........... WAIT FOR COMANT ");//fancy 
SPI.begin();
digitalWrite (csPin1 ,HIGH);
digitalWrite (csPin2 ,HIGH);
}




void loop() {
value1 = analogRead(analogInput1);//input 1 monitor
 vout1= (value1 * 5.0) / 1024 ;
 vin1 = vout1 / (R2/(R1+R2));
value2 = analogRead(analogInput2);// input 2 monitor 
 vout2= (value2 * 5.0) / 1024 ;
 vin2 = vout2 / (R2/(R1+R2));
if (vin1<1.255) {
  vin1 = 0.0;
  
 }
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VOUT1= ");
lcd.print(vin1);
lcd.setCursor(1,0);
lcd.print("VOUT2= ");
lcd.print(vin2);
Serial.println("Vout1 = ");
Serial.println(vin1);
Serial.println("Vout2 = ");
Serial.println(vin2);
delay (2);
statebutton1 = digitalRead(pinbutton1);  
  if(statebutton1 == HIGH && previous == LOW && millis() - time > debounce) {
    if(staterelay1 == HIGH){
      staterelay1 = LOW; 
    } else {
      staterelay1 = HIGH; 
    }
    time = millis();
  }
  digitalWrite(Relay1, staterelay1);
  previous == statebutton1;
  
n0 = digitalRead(encoder0PinA);// roterry encoder read data start 
   if ((encoder0PinALast == LOW) && (n0 == HIGH)) {;
     if (digitalRead(encoder1PinB) == LOW) {;
       encoder1Pos--;
     } else {
       encoder1Pos++;
       
       if (encoder0Pos<0);
       encoder0Pos= 1;
     
     if (encoder1Pos<254);
       encoder1Pos= 254;
       
     }
n1 = digitalRead(encoder1PinA);// roterry encoder read data start 
   if ((encoder1PinALast == LOW) && (n1 == HIGH)) {;
     if (digitalRead(encoder0PinB) == LOW) {;
       encoder0Pos--;
     } else {
       encoder0Pos++;
       
       if (encoder0Pos<0);
       encoder0Pos= 0;
     
     if (encoder0Pos<254);
       encoder0Pos= 254;
       
     }   
     
   } 
   encoder0PinALast = n1;//roterry encoder read date end 
   
   digitalWrite (csPin1,LOW);//spi bus mpc 4151 first
   SPI.transfer(0);
   SPI.transfer(encoder0Pos);
   digitalWrite (csPin1,HIGH);
    
digitalWrite (csPin2,LOW);//spi bus mpc 4151 2ont 
   SPI.transfer(0);
   SPI.transfer(encoder1Pos);
   digitalWrite (csPin2,HIGH);
   }
   
 }
```


επεστρεψα στο project  ΜΕ ΑΓΡΙΕΣ Διαθέσεις
αν παρατηρήσατε στον κωδικά έχω 2 encoders (encoder0,encoder1)
θελω να πω στο arduino  ωταν θε βλεπει αλλαγη εκαστοτε encoder ( mpc 4151 first=> encoder0,mpc 4151 2ont => encoder1)να σταματει να δεινει εντολες στο ενα κι να δεινει εντολες στο αλλο  :Smile: 
any help????

----------


## finos

κανεισ ρε παιδια ;

----------


## SeAfasia

ποιανού φουκαρά είναι ο κώδικας finos;

----------


## finos

πιρα απο δο κι απο κι τα ένωσα τα τροποποίησα κι βουαλα

----------


## Satcom

> πιρα απο δο κι απο κι τα ένωσα τα τροποποίησα κι βουαλα



Τι finos τι Victor Frankenstein το ίδιο πράγμα δηλαδή.

----------


## thanasis 1

> πιρα απο δο κι απο κι τα ένωσα τα τροποποίησα κι βουαλα



Αφου σου κανει compile παλι καλα. :Tongue:

----------


## The_Control_Theory

Πολλές μεταβλητές, πολλά printf() λίγες ουσιαστικές γραμμές κώδικα.

----------


## manolena

Τον μύθο του Ίκαρου τον ξέρεις; Αφού με κάποιο τρόπο μπόρεσε να πετάξει, ήθελε να γίνει αεριωθούμενο... Αν άκουγε τον μεγαλύτερο μπαμπά του που του έλεγε να μάθει πρώτα τα βασικά της πτήσης, ακόμα και τώρα ίσως να τον βλέπαμε να κόβει βόλτες στον ουρανό, όχι με φτερά στερεωμένα με κερί, αλλά με το διαστημικό λεωφορείο Endevour... 

Συμπέρασμα:

Σε συνεπαίρνει ό,τι βλέπεις (δεν είναι αναγκαία κακό αυτό) αλλά δεν έχεις βρεί τον τρόπο να ελέγξεις τη φόρα σου. Κόψε λίγο γιατί η ζωή πιο πολλούς γκρεμούς έχει παρά ισώματα. Μάθε πετάλι πρώτα στο ίσωμα και μετά κάνε και πτώσεις απο τα 5000 πόδια χωρίς αλεξίπτωτο... Όπως βλέπεις, η ανούσια φλυαρία δεν προδιαθέτει κανέναν να βοηθήσει.

----------


## Fire Doger

> πιρα απο δο κι απο κι τα ένωσα τα τροποποίησα κι βουαλα



Και εγώ κάποτε ήξερα να κάνω πατάτες τηγανιτές, ο κολλητός μου κρέμα γάλακτος και κάναμε πατάτες αλά κρεμ. Τουαλέτα πήγαμε μετά από 3 μέρες....
Όποιος έχει χαραμάδες στα κουφώματα να του δώσω την συνταγή xD
Αν κατάλαβα καλά θες με 2 encoder να ελέγχεις 2 mcp4151?

Υπάρχουν 2 τρόποι:
α: Να διαβάσεις τι είναι το SPI και το ριμαδι το data sheet του MCP.

*Το project γιατί δεν το εσπασες σε κομμάτια και πας κουτουρου και δυνατά?

β: το Mcp4151 θα το βγαλεις απ το ράστερ και θα το βάλεις προσεκτικά σε ένα συρτάρι, στην συνέχεια θα πας μια βόλτα στην αγορά και θα παρεις το mcp4251 (2 pot 1 ολοκληρωμένο).
Αφού γυρίσεις απ την αγορά θα κατεβάσεις μια πολύ ωραία βιβλιοθήκη για τα mcp
https://github.com/jmalloc/arduino-m...ster/README.md
αφού ρίξεις μια ματιά στις εντολές θα βγαλεις ότι στελνεις με το spi στα ποτ και θα χρησιμοποιήσεις την βιβλιοθήκη.
Το χεις?

Τον κώδικα βαρεθηκα να τον μελετησω γιατί φαντάζομαι σαν τις πατάτες αλά κρεμ θα είναι :P

----------


## SProg

Του τα εχουμε πει εκατο φορες.Ας απαντησει οποιος εχει υπομονη να δει τον κωδικα.Εγω δεν εχω,οταν δε βλεπω σχολια.Δικο μου κωδικα να δω χωρις σχολια..μετα απο 10 μερες δεν ξερω τι εγραφα.

----------


## The_Control_Theory

Fino κάνε μιά προσπάθεια και όλοι θα σε βοηθήσουν. Ετσι δεν σε βοηθάει κανένας. Κι εγώ βαριέμαι έτσι.
Εστω μιά μικρή στην αρχή. Βλέπεις όλοι σε εκτιμούν και θα σε βοηθήσουν. Αλλά αυτό εσύ το ελέγχεις.
Όταν θα δώσεις εσύ την πρώτη σπρωξιά.

----------


## SeAfasia

εγώ το πρώτο μου sketch ήταν να μαθω να ανάψω ένα led σε pic mcu,με τιμάει γιατί έμαθα το how to...

----------


## Fire Doger

Και βέβαια όλοι θα τον βοηθήσουμε!
Βαγγέλη έχεις μια φοβερή ευκαιρία που εμαθες και σε ενδιαφέρει αυτός ο κλάδος από τέτοια ηλικία, βλέπω διαγωνισμούς ρομποτικής που πάνε ελληνικά λύκεια στην Αμερική και στεναχωριεμε που δεν βρέθηκε κάποιος στα 15 μου να μου δείξει ένα arduino!
Μην καταναλωνεσε άσκοπα σε "χαζομαρες".
Το να σου δώσει κάποιος ένα κομμάτι κώδικα δεν σου μαθαίνει κάτι. Είναι σαν να αγοράζεις diy κιτακια από eBay να τα κολλας και να λες ότι μαθαινεις ηλεκτρονικα.
Έχεις τόσους επιστήμονες γύρο σου, πάρε όσα περισσότερα μπορείς!
Στο κεφάλι με το ζόρι μπορούν να στα βάλουν αν σταματήσεις να κουνιεσε :P
Αν αποκτήσεις σωστές βάσεις μετά όλα είναι ΠΟΛΥ ευκολότερα.

----------


## midakos

> εγώ το πρώτο μου sketch ήταν να μαθω να ανάψω ένα led σε pic mcu,με τιμάει γιατί έμαθα το how to...



Κώστα, μια από τα ίδια κι εδώ, μόνο που σε ακόμη ποιο εύκολη πλατφόρμα (Arduino).
Οι πρώτοι κώδικες ήταν να παίζω με ledάκια, 1-2-3-10, όλα μαζί, ένα ένα, ένα ένα στη σειρά, διαφορετικές ταχύτητες κλπ.
Έκανα μια εβδομάδα να ξεκινήσω με ψηφιακές εισόδους, και ένα μήνα με αναλογικές.

Στην πτυχιακή μου έκανα και την υπέρβαση (αν και δεν χρειαζόταν με βάση τις απαιτήσεις της πτυχιακής) έβαλα μια lcd 16Χ2  :Tongue2: .

Ξέρω, ακούγονται αστεία όλα αυτά για τους περισσότερους, αλλά με αυτή τη λογική σειρά κατάφερα να μάθω ότι έμαθα. Δυστυχώς από τότε δεν βρήκα χρόνο να συνεχίσω το διάβασμα, με αποτέλεσμα να μείνω στάσιμος. Τώρα που με κάλεσε και η μαμά πατρίδα, έχετε γεια βρυσούλες!!!

----------


## SeAfasia

> Κώστα, μια από τα ίδια κι εδώ, μόνο που σε ακόμη ποιο εύκολη πλατφόρμα (Arduino).
> Οι πρώτοι κώδικες ήταν να παίζω με ledάκια, 1-2-3-10, όλα μαζί, ένα ένα, ένα ένα στη σειρά, διαφορετικές ταχύτητες κλπ.
> Έκανα μια εβδομάδα να ξεκινήσω με ψηφιακές εισόδους, και ένα μήνα με αναλογικές.
> 
> Στην πτυχιακή μου έκανα και την υπέρβαση (αν και δεν χρειαζόταν με βάση τις απαιτήσεις της πτυχιακής) έβαλα μια lcd 16Χ2 .
> 
> Ξέρω, ακούγονται αστεία όλα αυτά για τους περισσότερους, αλλά με αυτή τη λογική σειρά κατάφερα να μάθω ότι έμαθα. Δυστυχώς από τότε δεν βρήκα χρόνο να συνεχίσω το διάβασμα, με αποτέλεσμα να μείνω στάσιμος. Τώρα που με κάλεσε και η μαμά πατρίδα, έχετε γεια βρυσούλες!!!



διάβασε εκεί στη σκοπιά,εγώ διαβάζω στην δουλειαΌ μου όταν είμαι νυχτερινός,αυτή τη στιγμή παιδεύομαι με μια lcd 2χ16 να μάθω να κάνω scroll text.....

----------


## midakos

> διάβασε εκεί στη σκοπιά,εγώ διαβάζω στην δουλειαΌ μου όταν είμαι νυχτερινός,αυτή τη στιγμή παιδεύομαι με μια lcd 2χ16 να μάθω να κάνω scroll text.....



Αυτό είναι και το πιο πιθανό, απλά θα πάω να πάρω ένα βιβλίο γιατί ότι έμαθα μέχρι τώρα ήταν online.

----------


## finos

> Και εγώ κάποτε ήξερα να κάνω πατάτες τηγανιτές, ο κολλητός μου κρέμα γάλακτος και κάναμε πατάτες αλά κρεμ. Τουαλέτα πήγαμε μετά από 3 μέρες....
> Όποιος έχει χαραμάδες στα κουφώματα να του δώσω την συνταγή xD
> Αν κατάλαβα καλά θες με 2 encoder να ελέγχεις 2 mcp4151?
> 
> Υπάρχουν 2 τρόποι:
> α: Να διαβάσεις τι είναι το SPI και το ριμαδι το data sheet του MCP.
> 
> *Το project γιατί δεν το εσπασες σε κομμάτια και πας κουτουρου και δυνατά?
> 
> ...



τα παράγγειλα  :Sad:   ο savkok είπε ότι δεν βάζω σχόλια σχεδόν σε κάθε γραμμή έχω 
 ο προγραμματισμός Arduino έχει πολύ πλακά και είναι εύκολος .(το παρακάτω μπορεί να έχει  μια essence επίθεσης ωμός δεν το έγραψα με τέτοιο σκοπό ) η ερώτηση που έκανα ,η τελευταία , ήταν τόσο δύσκολη;
έχω μια ιδέα ωμός επειδή είναι αργά θα σας την στείλω αύριο

----------


## SeAfasia

*ο προγραμματισμός Arduino έχει πολύ πλακά και είναι εύκολος* 

ας είναι καλά αυτοί που μέσω github δίνουν έτοιμο library για το arduino πχ liquid crystall άπειρες ώρες προγραμματισμού και δοκιμών για να τις έχεις
εσύ finos να σπάς πλάκα έτσι;

----------


## SProg

> ο savkok είπε ότι δεν βάζω σχόλια σχεδόν σε κάθε γραμμή έχω



Βαγγελη, σχόλια που να βοηθουν και να εξηγουν τα παντα.Για να μην ειναι 'μακαροναδα' ο κωδικας.


Παραδειγμα

----------


## finos

> *ο προγραμματισμός Arduino έχει πολύ πλακά και είναι εύκολος* 
> 
> ας είναι καλά αυτοί που μέσω github δίνουν έτοιμο library για το arduino πχ liquid crystall άπειρες ώρες προγραμματισμού και δοκιμών για να τις έχεις
> εσύ finos να σπάς πλάκα έτσι;



Αφού υπάρχει έτοιμο γιατί να Μην το χρησιμοποιήσω

----------


## awmn931

Thumb Down από εμένα γιατί διαβάζοντας την ανάρτηση σου #56 μου πόνεσαν τα μάτια μου (σαν κάτι να βγήκε από την οθόνη και καρφώθηκε σε αυτά)

Φοβούμενος επανάληψη του φαινομένου, θα αποφεύγω να διαβάζω αναρτήσεις σου για κάποιο διάστημα.

----------


## finos

> Thumb Down από εμένα γιατί διαβάζοντας την ανάρτηση σου #56 μου πόνεσαν τα μάτια μου (σαν κάτι να βγήκε από την οθόνη και καρφώθηκε σε αυτά)
> 
> Φοβούμενος επανάληψη του φαινομένου, θα αποφεύγω να διαβάζω αναρτήσεις σου για κάποιο διάστημα.



ουπς τα έγραφα λίγο .... γρήγορα  και από κινητό 
οφφ τοπικ προς τον admin 
το mobile site το θεωρώ κάπως περίεργο δεν (με) βολεύει ούτε από tapatalk 
συνονόματε ξέρω έναν πολύ καλό οφθαλμίατρο (ελπίζω να μην φάω κι άλλο Thumb Down)

----------


## Panoss

> Thumb Down από εμένα γιατί διαβάζοντας την ανάρτηση σου #56 μου πόνεσαν τα μάτια μου (σαν κάτι να βγήκε από την οθόνη και καρφώθηκε σε αυτά)
> 
> Φοβούμενος επανάληψη του φαινομένου, θα αποφεύγω να διαβάζω αναρτήσεις σου για κάποιο διάστημα.



Ο γιατρός συνιστά 3 μήνες αποτο*finos*η για αρχή και βλέπουμε.
Δεν υπάρχει εγγύηση πλήρους ίασης.

----------


## finos

Όλα καλά όλα ωραία μέχρι στιγμής βγικαν μικρά πραματακια κι θα προστεθούν κι αλλά .
Στο θέμα μας τώρα πως θα Ελενξω την ταχύτητα ενός νομιστερακιου 12 v που έχει 3 καλώδια ,ξέρω ότι γίνεται στα φανακια  με τα 4 καλώδια αλά για τα φανακια με τα 3 με την τάση ;
Πως θα γινει με ενα arduino με pwm;

----------


## SProg

Τι εννοεις

----------


## manolena

> Τι εννοεις



Έλα μου ντε...

----------


## SeAfasia

*νομιστερακιου*
πίστευε και μη ερεύνα....

----------


## Satcom

> Στο θέμα μας τώρα πως θα Ελενξω την ταχύτητα ενός νομιστερακιου;





Ποιος ξέρει το ανέκδοτο με τα νομιστεράκια ?

----------


## finos

> *νομιστερακιου*
> πίστευε και μη ερεύνα....



Νο μίστερ νο μίστερ ανεμιστήρακι 
Θέλω να Ελενξω την ταχύτητα

----------


## The_Control_Theory

> Νομού μίστερ νο μίστερ ανεμιστήρακι 
> Θέλω να Ελενξω την ταχύτητα



Αυτό γίνεται πανεύκολα με πίου πίου πάι γυμνώνοντας τον ακροδέκτη της έλξης.

----------


## finos

Πιον ακροδέκτη;IMG_20160120_222319.jpg εγώ θέλω με arduino κι εναν rotery encoder

----------


## Fire Doger

Σας έχασα, high-level comedy φαντάζομαι  :Lol: 





> The third wire is to detect the speed of the fan. If you pull that pin up to 5V, you will see two pulses per cycle of the fan. The speed of the fan can be controlled by PWM to any speed you want.



Ρε βαγγελάκι.... θέλεις δηλαδή τώρα να σου αναλύσουμε 2 εξάμηνα έλεγχο κίνησης και άλλα 2 μικρο-ελεγκτές?
Ναι το συγκεκριμένο με pwm γίνεται, και ανάδραση (feedback) από το 3ο καλώδιο, μετράς συχνότητα και δια 2 έχεις τα RPM.

Όχι δεν μπορείς να το φτάσεις στις 40k rpm, μέγιστες στροφές έχει στα 12V σταθερά, μετά μόνο πέφτει.

Όχι δεν μπορείς να δώσεις απ το arduino 5V για πολλούς και διάφορους λόγους, 12V στο νομιστερακι σου και το ελέγχεις με τρανζίστορ που αντέχει την ισχύ του νομιστερίου και την συχνότητα του pwm.

----------


## finos

Τέλος πάντων θα πάρω ακόμα  ενα  "νομιστερακι " (υπάρχει ανέκδοτο θέλετε να σας το πω ) με 4 καλώδια 
Τα οπία έχουν το τέταρτο καλώδιο για ρύθμιση ταχύτητα ς μέσω pwm  με αυτον τον κώδικα



```
int pwmPin = 9;      // digital pin 9
int pwmVal = 10;

void setup()
{
  pinMode(pwmPin, OUTPUT);   // sets the pin as output
  Serial.begin(9600);
}

void loop()
{
  if (pwmVal != 255) {
         analogWrite(pwmPin, pwmVal);
         //pwmVal += 10;
         Serial.print(pwmVal);  // Print red value
         Serial.print("\n");    // Print a tab
  } else {
         Serial.print('at max high');  // Print red value
         Serial.print("\n");    // Print a tab
  }
  delay(1000);
}
```


Και μια προσθήκη if(pwmVal < 255)
{
   pwmVal += 10;
}
else
{
   pwmVal = 255;
}

----------


## manolena

Ρε χρυσέ μου άνθρωπε... Να σε ρωτήσω κάτι; Γιατί δεν ακολουθείς το δρόμο που έχουν πάρει τόσοι και τόσοι πριν απο σένα (απο τότε που βγήκε το Internet);
Γιατί τόσες χιλιάδες μηχανικοί άραγε να στύβουν τα μυαλά τους για να φτιάχνουν την παγκόσμια πληροφορία για να είναι στα πόδια σου; Γιατί πρέπει σώνει και
καλά να σου πεί και να σου προσφέρει άλλος αυτό που θες να κάνεις; 

Έψαξες και δεν βρήκες;

https://www.barnesian.com/arduino-po...an-controller/ ... και αφού είσαι πατεντιάρης, θα κόψεις απο ΄δω, θα ράψεις απο ΄κει και θα το φτιάξεις...

----------


## Fire Doger

Ανάθεμα και αν ξέρεις τι κάνει ο κώδικας :P

_:----------:_:----------:
      loop1     *    loop2

*Άγνωστος χρόνος

Σ' αυτόν τον κώδικα άμα βάλεις μία lcd, led, μπουτόν κλπ άμα έχει σταθερή ταχύτητα να με φτύσεις :P
Αυτός ο κώδικά πρέπει να εκτελείτε χωρίς διακοπές για να λειτουργίσει, το * είναι άγνωστο γιατί έχει βάλει την σειριακή...
Χωρίς internal pwm θες interupt για να αλλάζουν κατάσταση στην έξοδο





> https://www.barnesian.com/arduino-po...an-controller/ ... και αφού είσαι πατεντιάρης, θα κόψεις απο ΄δω, θα ράψεις απο ΄κει και θα το φτιάξεις...



 το PID του έλειπε  :Lol: 

**Πάλι πουλάκια κάνουν τα μάτια μου, άλλαξε ξαφνικά ο κώδικας :Confused1:

----------


## SProg

Η καταναλωση του ειναι γελοια,οποτε εχεις και μεγαλη γκαμα να επιλεξεις για διακοπτη.Βαλε ενα TIP εαν εχεις για παραδειγμα.Η συχνοτητα του PWM που χρειαζεσαι ειναι αστεια για οποιοδηποτε τρανζιστορ/mosfet.Με ενα PWM στα 4kHz εισαι ΟΚ.


Δεν ξερω τι ακριβως θελεις να κανεις,οποτε εστω οτι θελεις να παιζεις με την ταχυτητα του.

Ενα απο τα καλωδια του ειναι αυτο που σου δινει παλμο.Με εξωτερικη διακοπη μπορεις να αυξανεις εναν μετρητη οποτε το FAN στελνει παλμο,κοιτας τον μετρητη καθε 1λεπτο και εχεις το rpm(revolutions per minute).Εαν λεει 2 παλμους τοτε εχεις το rpm*2 (μη ρωτησεις).


Ξεροντας συνεχεια τις στροφες του fan μπορεις να αυξανεις/μειωνεις το ρευμα-ταση του κινητηρα μεσω PWM ωστε να πετυχεις την ταχυτητα που θελεις.

Εχει απειρα παραδειγματα για arduino-dc motor-RPM measure-PI-PID κτλ



http://www.themakersworkbench.com/co...an-rpm-arduino



Ακυρο: Τετοιο θεμα με DC κινητηρα και ελεγχο στροφων ηταν Project 6ου εξαμηνου με 8051 σε Assembly  :Very Happy:

----------


## Fire Doger

> Τέλος πάντων θα πάρω ακόμα  ενα  "νομιστερακι " (υπάρχει ανέκδοτο θέλετε να σας το πω ) με 4 καλώδια 
> Τα οπία έχουν το τέταρτο καλώδιο για ρύθμιση ταχύτητα ς μέσω pwm  με αυτον τον κώδικα
> 
> 
> 
> ```
> int pwmPin = 9;      // digital pin 9
> int pwmVal = 10;
> 
> ...



τώρα έβαλα quote xD
V2 λοιπόν:
αυτό μόλις ξεκινήσει θα αρχίσει με χαμηλές στροφές και θα κομπλάρει στις μέγιστες με βήμα 3.9% περίπου ανά 1 δευτερόλεπτο. σε 26sec θα έχει μαξάρει.

----------


## The_Control_Theory

> Ακυρο: Τετοιο θεμα με DC κινητηρα και ελεγχο στροφων ηταν Project 6ου εξαμηνου με 8051 σε Assembly



Αχχχ... Εμείς τίποτα....

----------


## SProg

Εσενα δεν σου μιλαω για κανα 2-3 μερες γιατι με εβαλες φυτιλια να παρω και τον ICE.

----------


## Fire Doger

Τέντι και εγώ ψώνισα ένα κάρο πράγματα χθες για avr πλέον :Tongue2: 
Άστο ο καθηγητής μας δεν παίζετε.
Ποσείδι με ρωτάει ένας στα γραφεία "Από ποια σχολή εισαι?" - "Αυτοματισμού θεσσαλονίκη"- "Ααααα ο <<Επιστήμονας>> ακόμα εκεί είναι? Χαιρετίσματα δώσε!"

----------


## SProg

Βαγγελη εχεις τα παντα στα link που σου δωσαμε.Διαβασε τα.Η αλλη λυση ειναι να σου δωσουμε κυκλωμα και κωδικα ετοιμο.



_OFF topic:_

Ο 'επιστημονας' στο βιβλιο του εχει project με θεωρια/κυκλωματα/διαγραμματα που θα τα ζηλευαν πολλοι προγραμματιστες.Βιβλιο το οποιο ποτε δεν βγηκε σαν βιβλιο και δε ξερω γιατι.

Εχω την ευτυχια να το εχω σε εντυπη μορφη.Εχει μεσα πραγματα σε ASM και 8051 που ακομα και σημερα σε C ειναι τοσο απαιτητικα που δυσκολα να τα καναμε.

Ρωτα τον εαν εχει ακομα αντιτυπο να σου δωσει, θα σε βοηθησει σε οποιοδηποτε μΕ.Ηταν βεβαια  η δουλεια του οι μικροελεγκτες για πολλα χρονια,απο εκει πηγαζει μαλλον η τοση γνωση.

----------


## The_Control_Theory

> Εσενα δεν σου μιλαω για κανα 2-3 μερες γιατι με εβαλες φυτιλια να παρω και τον ICE.



χαχαχα. Πάρε και έναν ARM μαζί!!! Και... καλωδιάκι.... :Tongue2:

----------


## finos

παλι τα ιδια γμτ Untitled.jpg



```
 #include <LiquidCrystal.h>;//LCD float R1 = 100000.0;//input1 resistor1  
float R2 = 10000.0;//input1 resistor2
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  int voltage = A0;
  int int analogInputAmps = A5;
  float vout = 0.0;//volt viribles
  float vin = 0.0;
  float value = 0;
  int readAmpsADC = 0;
  float amps = 0.0;
  int fan = 9 //lfor pwm
  
  
  
void setup() {
 pinMode(analogInputAmps, INPUT);
  
   }


   float fmap(float x, float in_min, float in_max, float out_min, float out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}


}


void loop() {
  // put your main code here, to run repeatedly:
readAmpsADC = analogRead(analogInputAmps);
   amps = fabs(fmap(readAmpsADC, 0.0, 1023.0, 0.01, 5.0));
   amps = amps * 10;
```

----------


## SProg

Aλλος ειναι ο κωδικας στη φωτογραφια(που δεν φαινεται καθαρα τιποτα) και αλλος ειναι αυτος που ποσταρες.



Δε θες να μαθεις.Ουτε τις αγκυλες εχεις βαλει σωστα.Στο εχουμε πει 100φορες να ξεκινησεις με τα βασικα.Δεν θες να το κανεις και δικαιωμα σου.



Πες τι θες να κανει ο κωδικας και θα στον δωσω ετοιμο,γιατι ειναι κοροιδια να κατσω να τον κοιταξω καν.

----------


## finos

το σφαλμα είναι ίδιο 



> Aλλος ειναι ο κωδικας στη φωτογραφια(που δεν φαινεται καθαρα τιποτα) και αλλος ειναι αυτος που ποσταρες.
> 
> 
> 
> Δε θες να μαθεις.Ουτε τις αγκυλες εχεις βαλει σωστα.Στο εχουμε πει 100φορες να ξεκινησεις με τα βασικα.Δεν θες να το κανεις και δικαιωμα σου.
> 
> 
> 
> Πες τι θες να κανει ο κωδικας και θα στον δωσω ετοιμο,γιατι ειναι κοροιδια να κατσω να τον κοιταξω καν.



να  μετραρει την ταση την ενταση και τα w απο την εξοδο του τροφοδωτικου να τα ζειχνει μια οθωνη κι με βαση του μεσου ορου 3ων lm 35 να ελενχει με pwm  ενα φανακι

----------


## manolena

Σάββα, εγώ θέλω να μου φτιάξεις λίγο έναν κώδικα που θα μπορεί να κάνει monitoring στα ζωτικά ενός στροβιλοκινητήρα (πίεση λαδιού, καυσίμου, θερμοκρασία αέρα εισαγωγής, καυσαερίων), να τα δίνει σε γράφημα σε μια οθόνη glcd 240x128 pixels, να έχει σειριακή διασύνδεση με PC που θα τρέχει ένα σχετικό VI του LabVIEW και να στέλνει μέσω WiFi σε αντίστοιχο printer το run-up test report. Έχω κάνει μόνος μου αυτό:




```
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://www.arduino.cc

  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
 */


// the setup function runs once when you press reset or power the board
voidsetup(){
// initialize digital pin 13 as an output.
pinMode(13,INPUT);
}

// the loop function runs over and over again forever
voidloop(){
digitalWrite(13,LOW);// turn the LED on (HIGH is the voltage level)
delay(1000000000000000);// wait for a second
digitalWrite(13,LOW);// turn the LED off by making the voltage LOW
delay(100000000000000000000);// wait for a second
{
{
{
}
```


...αλλά κάτι δεν πάει καλά, μάλλον επειδή βαριέμαι και μάλλον επειδή υπάρχουν καλοί άνθρωποι εκεί έξω. Τι να κάνω γιατρέ μου;

----------


## SeAfasia

> Σάββα, εγώ θέλω να μου φτιάξεις λίγο έναν κώδικα που θα μπορεί να κάνει monitoring στα ζωτικά ενός στροβιλοκινητήρα (πίεση λαδιού, καυσίμου, θερμοκρασία αέρα εισαγωγής, καυσαερίων), να τα δίνει σε γράφημα σε μια οθόνη glcd 240x128 pixels, να έχει σειριακή διασύνδεση με PC που θα τρέχει ένα σχετικό VI του LabVIEW και να στέλνει μέσω WiFi σε αντίστοιχο printer το run-up test report. Έχω κάνει μόνος μου αυτό:
> 
> 
> 
> 
> ```
> /*
>   Blink
>   Turns on an LED on for one second, then off for one second, repeatedly.
> ...



Μάνο,ο κώδικας που επισυνάπτεις είναι πολύ "βαρύς" μπράβο φίλε...

----------

manolena (27-02-16)

----------


## SProg

Μανο το ριξαμε στη πλακα γιατι κουρασε το ολο σκηνικο.

----------


## finos

δεν βαργιεμαι καλοθου απλως ο ανθρωπος με ρωτισε τι θελω να κανει ο κωδικας

----------


## manolena

> Μανο το ριξαμε στη πλακα γιατι κουρασε το ολο σκηνικο.



Αυτό βλέπω κι εγώ... Και -ας με συγχωρήσετε- ξέρεις τι βλέπω; Πως υπάρχουν πράγματι άνθρωποι που θέλουν βοήθεια που ο καθένας απο εμάς στο μέτρο που μπορεί, είναι ικανός να δώσει, αλλά βρε παιδί μου βλέπεις οτι κουνάνε χέρια και πόδια στο κολύμπι τους... Δεν κάθονται στον αφρό να παραγγέλνουν και φραπεδάκια μαζί με το ρυμουλκό να τους σώσει...

Δεν υπάρχει περίπτωση άλλη να ξανα-ασχοληθώ με οτιδήποτε άλλο σχετικό με αυτή την υπόθεση.

----------


## SeAfasia

> το σφαλμα είναι ίδιο 
> *να  μετραρει την ταση την ενταση και τα w απο την εξοδο του τροφοδωτικου να τα ζειχνει μια οθωνη κι με βαση του μεσου ορου 3ων lm 35 να ελενχει με pwm  ενα φανακ*ι



Βαγγέλη σοβαρολογείς*;;*
*το σχηματικό που είναι;  *

----------


## The_Control_Theory

Έτοιμο.  :Rolleyes:

----------


## Fire Doger

Η κονσόλα dj τελείωσε και έπιασες παλιά πρότζεκτ?

----------


## finos

> Η κονσόλα dj τελείωσε και έπιασες παλιά πρότζεκτ?



εφαγε σουτ στον κάδο




IMG_20160227_221007.jpgγιατιιιιιιι;;;;
με:


```
/*  LiquidCrystal Library - Serial Input


 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.


 This sketch displays text sent over the serial port
 (e.g. from the Serial Monitor) on an attached LCD.


 The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)


 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe


 This example code is in the public domain.


 http://www.arduino.cc/en/Tutorial/LiquidCrystalSerial
 */


// include the library code:
#include <LiquidCrystal.h>


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // initialize the serial communications:
  Serial.begin(9600);
}


void loop()
{
  // when characters arrive over the serial port...
  if (Serial.available()) {
    // wait a bit for the entire message to arrive
    delay(100);
    // clear the screen
    lcd.clear();
    // read all the available characters
    while (Serial.available() > 0) {
      // display each character to the LCD
      lcd.write(Serial.read());
    }
  }
}
```

----------


## Dbnn

> εφαγε σουτ στον κάδο
> 
> 
> 
> 
> Συνημμένο Αρχείο 62933*γιατιιιιιιι;;;;*
> με:
> 
> 
> ...




Για να ρωτάνε οι περίεργοι......

----------


## The_Control_Theory

Και την οθονίτσα μαζί?

----------


## Dbnn

monalisa.jpg

Κάπως έτσι με βλέπω........

----------


## betacord85

κριμα τοσα υλικα...αφου δεν τα θες και ολο τα χαλας επειδη δεν εχεις γνωσεις και εμπηρεια γιατι δεν τα χαρηζεις εδω στην κοινοτητα ωστε να βοηθησεις κανεναν φοιτητη που δεν εχει την οικονομικη ανεση?

----------


## betacord85

και κατι τελευταιο...λες οτι δεν παιζουν φραγκα για να παρεις παλμογραφο και να εξοπλισεις σιγα σιγα το εργατηριο σου σωστα?και εχεις ανοιξει 500 ποστ με κατασκευες οτι ναναι και εκει φυσικα εχεις ριξει λεφτα...πρωτο πρωτο το διαστημοπλοιο σου(drone)σε κραζω για να βαλεις μυαλο να μαζεψεις λεφτα σε εξοπλισμο σωστο....και αυτες τις μπαρουφες οτι εισαι 14-15 αλλου...

----------


## betacord85

εχεις ξαναβαλει thumbsdown αιτιολογησε εστω...

----------


## finos

οθόνη  rip δηλαδή οκ παει κι αυτο το project

----------


## finos

> .και αυτες τις μπαρουφες οτι εισαι 14-15 αλλου...



εδω ακριβως

τον "παλμογράφο" που έφτιαξα να ξέρεις ότι δεν το χρησιμοποιησα μέχρι στιγμής ΠΟΥΘΕΝΆ

----------


## manolena

Απορώ βρε Μπάμπη με την υπομονή σου... Έχεις και μεταφυσικές αναζητήσεις όμως βλέπω...





> εχεις ξαναβαλει thumbsdown αιτιολογησε εστω...

----------


## Dbnn

> εχεις ξαναβαλει thumbsdown αιτιολογησε εστω...



Μπαμπη κακως ασχολεισαι. Δεν βαζει μυαλο και πολλα τα γραφει εσκεμενα να γινει μπαχαλο. Για την ηλικια του τον καταλαβαινω. 
Παραπανω ομως δεν θα ασχοληθω μαζι του γιατι μπαινουν κ αλλα δεκαπενταχρονα που μαθαινουν και φτιαχνουν κατι αξιολογο. Ασχετα αν ποσταρουν η οχι.

----------


## betacord85

ειναι παρα πολλοι σε αυτοι την ηλικια και ειναι αθορυβοι μπαινουν διαβαζουν παιρνουν γνωσεις απο διαφορες κατασκευες και μαθαινουν χωρις να τρολλαρουν αλλους...

----------


## finos

Καλημερα ! Ή οθωνη έχει παραδώσει πνεύμα ;
Αν ναι προτιντε κάνα καλό βολτόμετρο/αμπερόμετρο για το psu μ

----------


## The_Control_Theory

Καλημέρα. Εμείς πως θα ξέρουμε αν παρέδωσε πνεύμα? Ούτε ξέρουμε τι την έκανες ούτε τι έχει ούτε που είναι συνδεδεμένη.

----------


## mathios

> Καλημερα ! Ή οθωνη έχει παραδώσει πνεύμα ;
> Αν ναι προτιντε κάνα καλό βολτόμετρο/αμπερόμετρο για το psu μ



Αυτο εδω ειναι οτι πρεπει για αυτο που θες, το εχω χρησιμοποιησει και ειναι αρκετα καλο.


http://www.ebay.com/itm/131577787046...%3AMEBIDX%3AIT

----------


## finos

> Καλημέρα. Εμείς πως θα ξέρουμε αν παρέδωσε πνεύμα? Ούτε ξέρουμε τι την έκανες ούτε τι έχει ούτε που είναι συνδεδεμένη.



λέω μήπως είναι αυτό κάνα σημάδι τώρα δουλεύει καμπάνα ...δεν ξέρω πως

----------


## nestoras

> λέω μήπως είναι αυτό κάνα σημάδι τώρα δουλεύει καμπάνα ...δεν ξέρω πως



Απλά θεός... Μήπως δεν την είχες βάλει στην πρίζα;

----------


## finos

> Απλά θεός... Μήπως δεν την είχες βάλει στην πρίζα;



ναι ηταν στην μπριζα
απλως δεν πατισα .......upload :Rolleyes:

----------


## finos

ΠΑΛΥ ΤΑ ΙΔΙΑ ΜΕ ΤΗΝ ΜΠ****** ΤΗΝ ΟΘΌΝΗ κι αυτή τη φόρα πάτησα upload απλώς δεν λειτουργεί κρίμα 
τι μπορεί να φταίει .Επεισεις οι μπάρες δεν είναι τόσο έντονες όσο κι να παίζω με το contrast HELP

----------


## SProg

Ανεβασε κωδικα και κυκλωμα.

----------


## finos

/*
  LiquidCrystal Library - Serial Input


 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.


 This sketch displays text sent over the serial port
 (e.g. from the Serial Monitor) on an attached LCD.


 The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)


 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe


 This example code is in the public domain.


http://www.arduino.cc/en/Tutorial/LiquidCrystalSerial
 */


// include the library code:
#include <LiquidCrystal.h>


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // initialize the serial communications:
  Serial.begin(9600);
}


void loop() {
  // when characters arrive over the serial port...
  if (Serial.available()) {
    // wait a bit for the entire message to arrive
    delay(100);
    // clear the screen
    lcd.clear();
    // read all the available characters
    while (Serial.available() > 0) {
      // display each character to the LCD
      lcd.write(Serial.read());
    }
  }
}

----------

The_Control_Theory (04-03-16)

----------


## SProg

Περνα ενα σιγουρο κωδικα οπως ειναι οι ετοιμοι της βιβλιοθηκης και δουλευουν 100%.







> // include the library code:
> #include <LiquidCrystal.h>
> 
> 
> // initialize the library with the numbers of the interface pins
> LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
> 
> 
> void setup() {
> ...

----------


## finos

τον δοκιμασα απλως σεν θα εχω dispaly ποια μονο οτι θα βλεπω απο το προγραμα που γραφω (σε c# .net  και uwp )
αν καΙ ΜΕ ΤΑ ΛΕΥΤΑ ΠΟΥ ΕΔΩΣΑ ΕΚΙ ΘΑ ΜΠΩΡΟΥΣΑ ΝΑ ΠΑΡΩ SIGLENT ( αυτο αντιγραφω )

----------


## SProg

Δεν καταλαβα τιποτα Βαγγελη

----------


## finos

> Δεν καταλαβα τιποτα Βαγγελη



μαλων η οθωνη ειναι rip αρα αφου ετσι κι αλιος θα εφτιαχνα ενα λογισμικο για να ελενχω το psu  απο το pc  σε c# (c sharp) .net  uwp (universal windows platform app) αλλα μαλων τα την κανω σε windows form app
κι απο εκει θα βλεπω τοις τασεις
 *Spoiler:*       2016-03-04.jpg

----------


## SeAfasia

τι siglent?

----------


## finos

> τι siglent?



αυτο που ξεκοίλιασε ο dave  :Rolleyes:

----------


## SeAfasia

πήρες παλμογράφο siglent?  :Confused1:

----------


## finos

οχι βρε απλως ηθελα να αντιγραψω το τροφοδοτικο siglent που ξεκοιλισε ο dave δεν μου ειπατε το προγραμα ωραίο; το concept ;

----------


## SeAfasia

> οχι βρε απλως ηθελα να αντιγραψω το τροφοδοτικο siglent που ξεκοιλισε ο dave δεν μου ειπατε το προγραμα ωραίο; το concept ;



 :Confused1:  :Confused1:  :Huh:

----------


## thanasis 1

Εχεις μεινει μ@λ@κ@ς με αυτα που "διαβαζεις" κωστη,εεεεεεεε?? :Biggrin: 
Ριξε λιγο κρυο νερο στα μουτρα σου να επανελθεις.

----------


## nestoras

> Εχεις μεινει μ@λ@κ@ς με αυτα που "διαβαζεις" κωστη,εεεεεεεε??
> Ριξε λιγο κρυο νερο στα μουτρα σου να επανελθεις.



Δε βλέπεις το avatar; Του κάηκε ο εγκέφαλος! Σαν ακτινογραφία έμεινε...

----------


## thanasis 1

Χαχαχααχχα ωραιος παναγιωτη.

----------


## SeAfasia

Tι νερό,αλλά να αντιγράψει τον dave; :Tongue2:

----------


## The_Control_Theory

Πάει κι αυτό το project.... Επόμενο.

----------


## SeAfasia

> Πάει κι αυτό το project.... Επόμενο.



στο git λες;;;

----------


## The_Control_Theory

> στο git λες;;;



Όχι όχι!!! Για το git περιμένω τον Leosedf να βρεί χρόνο(δουλεύει καπου εκτός έδρας τώρα)

Για του Finou λέω. Αφού δεν βλέπω μέλλον στο project του στα κοντά.

----------


## nestoras

> Όχι όχι!!! Για το git περιμένω τον Leosedf να βρεί χρόνο(δουλεύει καπου εκτός έδρας τώρα)
> 
> Για του Finou λέω. Αφού δεν βλέπω μέλλον στο project του στα κοντά.



Γιατί δεν παίρνετε τον Βαγγέλη (finos) στο πρότζεκτ "github"?
Θα σας λύσει τα χέρια!  :Smile:

----------


## thanasis 1

> *Tι νερό*,αλλά να αντιγράψει τον dave;



Ε ναι δικιο εχεις ριξε απο μια σφαλιαρα σε καθε μαγουλο. :Tongue2: 





> να αντιγράψει τον dave;



Οτι μπορει ο καθενας. :Wink:

----------


## thanasis 1

> Γιατί δεν παίρνετε τον Βαγγέλη (finos) στο πρότζεκτ "github"?
> Θα σας λύσει τα χέρια!



Αυτος θα ειναι ενας τροπος "για το πως θα κλεισεις μια σελιδα". :Tongue2:

----------


## The_Control_Theory

Άμα θέλει να έρθει είναι ευπρόσδεκτος!!!  :Smile: 

Αλλά θα πέσουν όροι στο τραπέζι.

Αμα γράψει κώδικα να έχει σχόλια και να να είναι καθαρογραμμένα όλα κι ας μην δουλεύει τίποτα.
Θα τα διορθώσει η ομάδα κι έτσι θα μάθει από τα λάθη του(αν κάνει-όλοι κάνουν)

Μπορεί να βρεί όμως και λάθη της ομάδας και να τα επισημάνει.. :Wink: 
Αλλά όλο αυτό θέλει προσπάθεια.

edit: Α και να μην γράφει στον master ή σε branch άλλων αλλά στο δικό του.

edit: Αυτά ισχύουν για όλους όχι μόνο για τον Fino.

----------


## nestoras

> Μπορεί να βρεί όμως και λάθη της ομάδας και να τα επισημάνει..



Μάλλον εννοείς ορθοργαφικά λάθη!  :Lol:  :Lol:

----------


## The_Control_Theory

> Μάλλον εννοείς ορθοργαφικά λάθη!



Τώρα τον βλέπω πιό οργανωμένο και προσεκτικό άσχετα που προσπαθεί να φτιάξει διαστημόπλοιο χωρίς να έχει φτιάξει πρώτα αμάξι.
 Ακόμη κάνει κάποια λαθάκια στην ορθογραφία αλλά έχει βελτιωθεί-εξελιχθεί από όταν τον πρωτογνώρισα εδώ στο φόρουμ.

----------


## manolena

> Τώρα τον βλέπω πιό οργανωμένο και προσεκτικό άσχετα που προσπαθεί να φτιάξει διαστημόπλοιο χωρίς να έχει φτιάξει πρώτα αμάξι.
>  Ακόμη κάνει κάποια λαθάκια στην ορθογραφία αλλά έχει βελτιωθεί-εξελιχθεί από όταν τον πρωτογνώρισα εδώ στο φόρουμ.



Αυτό είναι αλήθεια. Η Εξέλιξη των Ειδών (evolution), αυτό λέει εξάλλου. Απλά είναι όλα θέμα τύχης για την κατάληξή τους. Αλλιώς, θα γράφανε κώδικα και τα μαϊμούνια (που λένε στο χωριό μου).

----------


## navar

εγω τον Βαγγελη τον αγαπάω !!!! 
και ακομα και αν δεν δουλέψει αυτο το project δεν τον φοβαμαι !!!
ειναι επιμονος και θα μαθει !!!!

----------


## Dbnn

> εγω τον Βαγγελη τον αγαπάω !!!! 
> και ακομα και αν δεν δουλέψει αυτο το project δεν τον φοβαμαι !!!
> ειναι επιμονος και θα μαθει !!!!



Επιμονος στο να βιαζεται και να κανει μονιμως τα ιδια λαθη.

----------


## finos

> Tι νερό,αλλά να αντιγράψει τον dave;



 ΑΥΤΟ ΠΡΩΠΑΘΩ ΝΑ ΑΝΤΙΓΡΑΨΩ :https://www.youtube.com/watch?v=mdOauVzY9OU

----------


## manolena

Ξανά πάλι: επειδή η αλαζονεία και ο ξιπασμός τιμωρείται και επειδή  καθώς φαίνεται η μυθολογία είναι κάτι το εντελώς άγνωστο, όταν κάποτε ο Ίκαρος και ο Δαίδαλος πήγανε να την κοπανίσουν από τον Μίνωα με κάτι φτερά από κερί, ο μικρός πήγε κατά τον ήλιο και τα φτερά έλιωσαν. Έφαγε τα μούτρα του στη θάλασσα κι ας του 'λεγε ο πατέρας του να πετάει χαμηλά. 

Ήλιος = τροφοδοτικό του video
Δαίδαλος = όλοι οι υπόλοιποι εδώ μέσα που χαλάμε τα λόγια μας
Ίκαρος = τα μούτρα σου που δεν λένε να συμμορφωθούν.
Τα ΡΕΕΕΕΕ και τα υπόλοιπα τέτοια δεν είναι σωστά γιατί οι κολλητοί μας δεν είναι εδώ μέσα, είναι σε ο,τι άλλο υπάρχει έξω από το σχολείο.

----------


## finos

> Ξανα παλι: επειδη η αλαζονια και ο ξιπασμος τιμωρειται και επειδη  καθως φαινεται η μυθολογια ειναι κατι το εντελως αγνωστο, οταν καποτε ο Ικαρος και ο Δαιδαλος πηγανε να την κοπανησουν απο τον Μινωα με κατι φτερα απο κερι, ο μικρος πηγε κατα τον ηλιο και τα φτερα λιωσανε. Εφαγε τα μουτρα του στη θαλασσα κι ας του λεγε ο πατερας του να πεταει χαμηλα. 
> 
> Ηλιος = τροφοδοτικο του video
> Δαιδαλος = ολοι οι υπολοιποι εδω μεσα που χαλαμε τα λογια μας
> Ικαρος = τα μουτρα σου που δεν λενε να συμμορφωθουν.
> Τα ΡΕΕΕΕΕ και τα υπολοιπα τετοια δεν ειναι σωστα γιατι οι κολλητοι μας δεν ειναι εδω μεσα, ειναι σε ο,τι αλλο υπαρχει εξω απο το σχολειο.



ok έχεις δίκιο άλλα δεν είναι ακριβός αντιγραφή άλλα από εκεί μου ήρθε η ιδέα ,το εσβισα το ρε να σε ρωτήσω κάτι άλλο την γραμμή στο avatar πάνω αριστερά για την έβαλες

----------


## manolena

Γιατί σκοτώθηκαν τρεις άνθρωποι που κοίταγαν τη δουλειά τους προσπαθώντας να μην επαίρονται και προστατεύοντας εσένα.

----------


## finos

απο το ελικόπτερο λες ;

----------


## manolena

Ναι, με το ελικόπτερο.

----------


## Fire Doger

> Γιατί δεν παίρνετε τον Βαγγέλη (finos) στο πρότζεκτ "github"?
> Θα σας λύσει τα χέρια!



Δεν είναι καθόλου άσχημη ιδέα (και ας ακούγετε κάπως :Tongue2: )
Πολύ συχνά ρωτάω τον κολλητό μου (που δεν έχει ιδέα από ηλεκτρονικά) για διάφορα θέματα για κατασκευές - ηλεκτρονικά κλπ και μου έχει δώσει φοβερές απαντήσεις γιατί εγώ εστιάζω σε διαφορετικά στοιχεία απ' ότι αυτός.

----------


## manolena

> Λιπών έχετε δίκιο 
> Κ.διαχιριστα μποριτε να συγχωνευσετε τα θέματα του τροφοδοτικου ;
> Α ! Εγώ το έγραψα τον κωδικα



Χρόνια Πολλά και καλά μυαλά.

----------

finos (25-03-16)

----------


## finos

> Χρόνια Πολλά και καλά μυαλά.



ευχαριστώ πολύ

----------


## navar

Χρόνια πολλά και απο μένα ρε Βάγγο αλανιάρη !!!!

----------

finos (25-03-16)

----------


## finos

το τροφοδοτικο φτανει στο τελος του κατο μικροπραματα μενουν μοναχα

----------


## finos

http://www.ebay.com/itm/1PC-LTC3780-...3D111557983282

τι σας λεει

----------


## Fire Doger

Καλά είναι, ρωτάει και εμείς τι κάνουμε, τι να του απαντήσω? :Tongue2: 

Για τι το θέλεις? Τι έχεις σκοπό να το κάνεις?

----------


## finos

για μεταβλητή έξοδο στο τροφοδοτικό μου

----------


## Fire Doger

Με μπέρδεψες. Πέρασε και καιρός...
Μέχρι στιγμής τι περιέχει το 'τροφοδοτικό σου'?
Αυτό από μόνο του είναι ένα τροφοδοτικό.

Θέλεις να αλλάξεις τα τριμερ που έχει με ψηφιακά τρίμερ ελεγχόμενα απ' το arduino?

Υπόψιν αυτό θέλει είσοδο DC εως 30V, άρα θέλεις μετασχηματιστή και ανόρθωση.

----------


## finos

πράγματι αλλαγές γίνανε 
1 αντί για τροφοδοτικό από laptop ... τροφοδοτικό pc (12ν 22Α )
2 Arduino Nano αντί για mega
3 χωρίς lcd πως το παρών 
4 κανονικά ποτενσιόμετρά επειδή δεν βρήκα ψηφιακά dip ποτενσιόμετρα (250κ,500κ) 
5 μαζί με την μεταβλητή έξοδο 3,3 5 12 1,5 7 9 από το τροφοδοτικό

----------


## Fire Doger

Δηλαδή θέλεις να τροφοδοτείς τον converter με 12V πχ απ' το τροφοδοτικό του υπολογιστή και να σου βγάζει διάφορες τάσεις? Και τα τριμεράκια θα τα αλλάξεις με ποτενσιόμετρα?
Το arduino τι θα κάνει?

*Μπορούσες να βάλεις και σε σειρά ψηφιακά, δεν σε περιορίζουν.

----------


## SeAfasia

εννοείς
*κανονικά ποτενσιόμετρά επειδή δεν βρήκα ψηφιακά dip ποτενσιόμετρα (250κ,500κ)*

----------


## navar

ενα "Πτσάφ" που ακούστηκε δεν ήταν τίποτα , μην μασάτε , 
εγώ ήμουν και απλά βραχυκύκλωσα .........

Βάγγο με έσκισες ,προσπάθησα να σκεφτώ τι θέλεις να κάνεις και μου έχωσες τον εγκέφαλο σε Ατέρμονο βρόγχο !!!

----------


## SeAfasia

> εννοείς
> *κανονικά ποτενσιόμετρά επειδή δεν βρήκα ψηφιακά dip ποτενσιόμετρα (250κ,500κ)*



ευχαριστώ για την φιλοφρόνηση,τελικά πες μας για τα ψηφιακά dip ποτενσιόμετρα (250κ,500κ);

----------


## finos

Καλημέρα 
Θέλω μια μικρη βοήθεια : έχω 2 μεταβλητές την a και την b κι θέλω με βαση αν η a έχει αυξηθεί ή  μειωθει να να σβισει πχ ενα λεντακι κι αντίστοιχα με την b 
Ίσως κάτι σαν αυτό : 
Int a= 0 ;
Int apre = o;
Int led = 13;
Void setup()
pinmode (led,output);
Void loop()
If (a>apre)
{
Digitalwrite(led,0);
}

If(a<apre)
{
digitalwrite(led,1);
}
a++;
apre=a;
delay (1000);
Και το αντίστοιχο της a στην b
( τον κώδικα τον έγραψα απο κινητό Μιν βαρατε για λαθει )

----------


## manolena

Πες μου οτι το *int apre = 0* είναι το γαλλικό "μετά"....

Αυτό που έχεις γράψει και όπως το έχεις γράψει στην loop δεν είναι ικανό ΠΟΤΈ να κάνει την μια μεταβλητή να είναι διαφορετική απο την άλλη.
Για ακόμα μια φορά: γράψε ακριβώς, αλλά ΑΚΡΙΒΩΣ όμως τι στην ευχή σκέφτηκες πάλι να κάνεις μπας και κανένας χριστιανός καταλάβει να βοηθήσει.

----------


## finos

λιπών έχουμε κι λέμε 3 mcp 4151 στον spi με το 1 για έλεγχο της τάσης του τροφοδοτικού το άλλο της έντασης κι το τρίτο για το vlimit max ( χρησιμοποιώ το σχέδιο λμ723 του moutulos ) 2 rotery encoder το ένα για την τάση το άλλο ένταση κι το vlimit max από το software που ετοιμάζω .




```
 
 int val; 
 int encoder0PinA = 3;
 int encoder0PinB = 4;
 int encoder0Pos = 0;
 int encoder0PinALast = LOW;
 int n = LOW;
 
 void setup() { 
   pinMode (encoder0PinA,INPUT);
   pinMode (encoder0PinB,INPUT);
   Serial.begin (9600);
 } 
 
 void loop() { 
   n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;
     }
           
           Serial.print (encoder0Pos);
     Serial.print ("/");
   } 
   encoder0PinALast = n;
 }
```


ο κώδικας του 1ου encoder 
κι θέλω  όταν αλλάξει το encoder0Pos να ενεργοποιηθεί το κατάλληλο mcp4151 και να στείλω μετά τον αριθμό από 0 έως 256 κι αν αλλαχτεί η τιμή του encoder1pos να σβήσει το mcp της τάση κι να ανοίξει της έντασης 
καταλαβατε ;

----------


## SeAfasia

ρε Βαγγέλη σε ραστερ δοκιμάζεις τπτ από αυτά;
Να δείς έστω αν ο κώδικας σου δουλεύει επι τω πλείστων;

----------


## finos

Ήταν θα ερθουν τα υλικα θα τα δοκομασω  :Blink:

----------


## Fire Doger

Δηλαδή θα υπάρχει ένας encoder που όταν θα γυρίζει (δεξιόστροφα για παράδειγμα) θα πάει: τάση - ένταση - vlimit max - τάση - ένταση - vlimit max κ.ο.κ....
Ή θα έχει 3 τικ εύρος? τάση - ένταση - vlimit max (ποιο δεξιά θα παραμένει στο Vlimit)

Γιατί δεν το κάνεις με το κουμπί του encoder και 3 led?


Ας δούμε την ακρίβεια που θα πετύχεις σε σύγκριση με ένα πολύστροφο.
Το πολύστροφο έχει 10 στροφές, ας υποθέσουμε ότι μπορείς να το γυρίσεις κατά 10 μοίρες το ελάχιστο κάθε φορά (το έβαλα και μεγάλο για να δεις την διαφορά).

Στα 30V έχεις ανάλυση:

Πολύστροφη αντίσταση: 360 βήματα [ (360/10) * 10 ] άρα 30/360 = 83mv.Το mcp 4151 είναι 8 bit και σου δίνει 257 αντιστάσεις άρα 30/257 = 116mV.

Αντίστοιχα και για το ρεύμα.

Έχω στην διάθεσή μου ένα τέτοιο. Δεν είμαι και high end χρήστης αλλά για το μόνο που το έχω χρειαστεί ως τώρα είναι αλλάζω ακαριαία τάση να δω αν μπορεί να την διορθώσει το σύστημα που σχεδίασα. Πριν λίγες μέρες κάποιος ανέβασε ένα τροφοδοτικό switching με encoder με 40$. Ο Μ/Σ για το γραμμικό ποιο ακριβός θα σου βγει.

----------


## finos

αν κανω inport την new liquidcrystal library μου βγαζει μαζι κι ολες αυτες που ΔΕΝ τοις εχω εγγατεστημενες τι na kanv #include <FastIO.h>#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_I2C_ByVac.h>
#include <LiquidCrystal_SI2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR1W.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>
#include <SI2CIO.h>
#include <SoftI2CMaster.h>




void setup() {
  // put your setup code here, to run once:


}


void loop() {
  // put your main code here, to run repeatedly:


}


edit η ληση βρεθικε file> example > halo world i2c

----------


## finos

και να το 1ο problem εδω λεει οτι 10κ & 100κ θα βλεπω στον avr απο 0-10 me 10k &20k  θα ειναι οκ απο 0 - 30;
οπα :



> you can increase the resistance value of R2, then the maximum voltage that can be read will be decreased; giving a slightly more accurate reading. With R1 at 100Ko and R2 at 10Ko, the input voltage is reduced by a factor of around 11 β allowing the voltmeter to read from 0Vβ55V.)



 νομιζω απαντισα μονος μου 
α ! και κατι αλλο ενα κολυτιρι 220ν μπορει να ζεσταθει απο μια μπαταρια 12ν 7ah και να κρατισει αρκετη ωρα ;

----------


## lepouras

> α ! και κατι αλλο ενα κολυτιρι 220ν μπορει να ζεσταθει απο μια μπαταρια 12ν 7ah και να κρατισει αρκετη ωρα ;



τότε γιατί να το λένε κολλητήρι 220 βολτ αν δουλεύει και με 12 και όχι 12-220 βολτ κολλητήρι ? τον νόμο του Ωμ τον έχεις ακουστά. αλλά να μην σε μπερδεύω. τροφοδότησε το με 12 βολτ και δες μόνος σου. δεν θα πάθεις τίποτα.
και εδώ φτάνουμε στο μεγάλο ερώτημα. πώς είναι δυνατών από την μια να ρωτάς αυτό και από την άλλη να θέλεις να κάνεις παπάδες με τα ηλεκτρονικά μικροελεγκτές κλπ κλπ?

----------

finos (12-06-16)

----------


## finos

Για το τελευταίο μου ηρθε στο μιαλο να φτιαζω εργαστιρι σε βαλιτσακι .Κι μέσω του νομού  ωμ θα τραβαει ουτε 0.1Α οποτε παπαλα η ιδέα

----------


## thanasis 1

> α ! και κατι αλλο ενα κολυτιρι 220ν μπορει να ζεσταθει απο μια μπαταρια 12ν 7ah και να κρατισει αρκετη ωρα ;



Οχι ρε φινο τετοια...καλυτερα να μου εγραφες το "ζεσταθει" ---> "ζαισταθι" παρα αυτο.

----------


## lepouras

άρα προκειμένου να σκεφτείς λίγο είπες <<ας το ρωτήσω και αυτό μην χαλάω φαιά ουσία>>. πρέπει δηλαδή συνέχεια να σε κράζουν για να σκέφτεσαι μόνος σου λίγο.

----------


## finos

Ηταν λίγο  .. Ε;

----------


## thanasis 1

Μπομπα ηταν.

----------


## finos

Το ανεφερα μιπως έχω κανει κάποιο λάθος γτ στο κάτω κάτω μια αντησταση που συνδέεται κατευθείαν στα 220 δεν είναι

----------


## lepouras

> Ηταν λίγο  .. Ε;



αν σου πήρε πολύ τότε υπάρχει θέμα.

----------


## finos

Να καταλάβω οτι ηταν βλακεία η σκεψη με τα 220και τα 12;

----------


## Dbnn

> Να καταλάβω οτι ηταν βλακεία η σκεψη με τα 220και τα 12



Βλακεια δεν ηταν. Μονο 208 βολτ διαφορα..... Λεπτομερειες δηλαδη. 
Δεδομενο πως το κολλητηρι ειναι αντισταση που θερμαινεται θα ανεβαζε τουλαχιστον ενα με δυο βαθμους.... Χαααααα εδω να σας δω!!!!

----------


## finos

μια ερωτησουλα πως κανω export εναν installer απο το visual studio

----------


## draco1

> δεν νομιζω οτι θελω καπια πιεση στο arduino



Στηυν ορθοοογραααφιεια  καποιεειεα πιεειεεση  :Sad:

----------


## Fire Doger

> μια ερωτησουλα πως κανω export εναν installer απο το visual studio



Γιατί θέλεις να γεμίζεις το pc σαβούρες ή θέλει αναγκαστικά εγκατάσταση?
Release νομίζω το κνς. Αμάν ρε φίνο google στα μέρη σου δεν έχουν? :Tongue2:

----------


## finos

Υπάρχει κάτι αντίστοιχο αυτής της function
για c#



```
 int green = color;
      green = map(green,2000,2255,0,255);

```


κι αν μπορειτε να μου εξηγήσετε πως να το χρησιμοποιω

----------


## finos

κανεις ; 
 :Sad:

----------


## Fire Doger

```
int map(int x, int in_min, int in_max, int out_min, int out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
```




Άμα θέλεις δεκαδικά την κάνεις "double map....", αν θέλεις να δώσεις διαφορετικά ορίσματα τα αλλάζεις και αυτά.

Ότι γράφεις στο arduino είναι σε C, μπορείς να τα πάρεις όπως είναι στα reference.

Άμα θέλεις και κάτι ποιο πιασάρικο μπορείς να το κάνεις όπως εδώ.
Και μην βαριέσαι να ψάξεις στο google, ειδικά σε C# Java κλπ υπάρχουν σχεδόν τα πάντα http://stackoverflow.com/

----------

finos (24-06-16)

----------


## manolena

Η συνάρτηση map με πολύ απλά λόγια, παρά πολύ απλά λόγια, κάνει το εξής ( αν και δεν θα έπρεπε να σου πει κανείς τι είναι και τι κάνει διότι ούτε κουλός εισαι για να πληκτρολογήσεις π.χ. "arduino map function", ούτε μυαλό σου λείπει μιας και διακρίνεται η " εξυπνάδα" σου όταν πρόκειται να βρεις κάτι έτοιμο)...

Αν δεις, υπάρχουν 4 αριθμοί μέσα στην παρένθεση. Οι πρώτοι δύο, εκφράζουν ένα εύρος τιμών από μία μεταβλητή που αλλάζει συνεχώς και την παρακολουθείς. Οι άλλοι δύο αριθμοί, "αντικατοπτρίζουν" τις προηγουμενες τιμές της πρώτης μεταβλητής σε ένα άλλο φάσμα τιμών, άλλης τάξης μεγέθους. Πιο απλά ακόμα, από τις τιμές που λαμβάνει ένας integer (int green) πριν την εκτέλεση της συνάρτησης (2000,2255) οι τιμές του ίδιου int μετά θα έχουν εύρος από 0-255. Στο παράδειγμά σου, για μεταβολή 255 μονάδων πριν, θα έχεις 255 μεταβολή και μετά. Πρακτικό παράδειγμα είναι το διάβασμα ενός ποτενσιόμετρου απο αναλογική είσοδο: για μεταβολή 0-1023 μπορείς να κάνεις map σε μία έξοδο PWM από 0-255.

Όλα αυτά, αν διαβάσεις και λίγο.

----------

finos (24-06-16)

----------


## finos

> Η συνάρτηση map με πολύ απλά λόγια, παρά πολύ απλά λόγια, κάνει το εξής ( αν και δεν θα έπρεπε να σου πει κανείς τι είναι και τι κάνει διότι ούτε κουλός εισαι για να πληκτρολογήσεις π.χ. "arduino map function", ούτε μυαλό σου λείπει μιας και διακρίνεται η " εξυπνάδα" σου όταν πρόκειται να βρεις κάτι έτοιμο)...
> 
> Αν δεις, υπάρχουν 4 αριθμοί μέσα στην παρένθεση. Οι πρώτοι δύο, εκφράζουν ένα εύρος τιμών από μία μεταβλητή που αλλάζει συνεχώς και την παρακολουθείς. Οι άλλοι δύο αριθμοί, "αντικατοπτρίζουν" τις προηγουμενες τιμές της πρώτης μεταβλητής σε ένα άλλο φάσμα τιμών, άλλης τάξης μεγέθους. Πιο απλά ακόμα, από τις τιμές που λαμβάνει ένας integer (int green) πριν την εκτέλεση της συνάρτησης (2000,2255) οι τιμές του ίδιου int μετά θα έχουν εύρος από 0-255. Στο παράδειγμά σου, για μεταβολή 255 μονάδων πριν, θα έχεις 255 μεταβολή και μετά. Πρακτικό παράδειγμα είναι το διάβασμα ενός ποτενσιόμετρου απο αναλογική είσοδο: για μεταβολή 0-1023 μπορείς να κάνεις map σε μία έξοδο PWM από 0-255.
> 
> Όλα αυτά, αν διαβάσεις και λίγο.



κ. Μάνο 
...από όταν ξεκίνησε το καλοκαίρι η https://www.arduino.cc/en/Reference/HomePage έχει γίνει 2η αρχική σελίδα μου. Διαβάζω πως να γράφω για arduino και παράλληλα αναπτύσσω και τον κώδικα και για το arduino και για την εφαρμογή που γράφω για το pc σε c#.
Τυχαία έπεσα πάνω εδώ όπου και έμαθα τη λειτουργία map. Όπως κάνατε κι εσείς στο τροφοδοτικό σας (σε κάθε μήνυμα που στέλνει το arduino μέσω της σηριακής θύρας, στέλνατε συγκεντρωτικά: την τάση, την ένταση και τη θερμοκρασία του τροφοδοτικού, και με κάποιον τρόπο που δεν έχω καταλάβει ακόμα, πώς τα παρουσιάζατε στο πρόγραμμα που γράψατε στο lab view ). Κάτι τέτοιο σκέφτηκα να κάνω κι εγώ. Δηλαδή: Η τάση max έχει τρία ψηφία 
(00,0).Θα έστελνα από το arduino στον Η/Υ έναν αριθμό από το μηδέν εώς το 300 και έπειτα θα το διαιρούσα διά το 100, ώστε να το προβάλλω στο πρόγραμμά μου όπως είναι στην πραγματικότητα. 
Η ένταση έχει κι αυτή τρία ψηφία, αλλά έχει δυο δεκαδικά ψηφία μετά την υποδιαστολή. Άρα από το arduino στον Η/Υ θα έστελνα έναν αριθμό από το 301-400.
Και να που μου είναι απαραίτητο το map(): Θα έχω μία μεταβλητή όπου θα ισούτε με το inpout της σηριακής θύρας και θα λέω εάν η μεταβλητή είναι π.χ ανάμεσα στον αριθμό 0 και 300 να δημιουργήσω μία νέα μεταβλητή όπου θα ¨μαπάρετε¨η παλιά μεταβλητή σε μία καινούρια, όπου θα είναι από 00,0-30,0 
κάτι αντίστοιχο θα γίνετε για την ένταση και για τη θερμοκρασία. Όλα αυτά θα γίνονται μέσα στον κώδικα του προγράμματος όπου είναι γραμμένος σε c#.
Χρησιμοποίησα ένα πρόγραμμα για μετατροπή της c++ ( γλώσσα arduino) σε c# και μου έβγαλε να χρησιμοποιήσω static dictionary.
Δεν κατάλαβα όμως πώς να το χρησιμοποιήσω και γι΄αυτό ρώτησα εσάς. 


Με λίγα λόγια ζητώ το αντίστοιχο του map για την c#.

----------


## manolena

Θέλω δημοσίως να εκφράσω την ευαρεσκεια μου προς το Βαγγέλη-fino γιατί φαίνεται τελικά πως μετά από τσάντες σκ@τ@, άρχισε να σκέφτεται όπως πρέπει να σκέφτεται ένας μηχανικός. Εύγε. (off-topic)

Όσο για τη συλλογή πληροφορίας από σειριακή και "μετάφρασή" της σε άλλο εύρος τιμών, το πρώτο που σκέφτηκα είναι η ανάγνωση μιας ταμπέλας (πίνακα) και η επιστροφή των τιμών 0-30 (με ακρίβεια δεκαδικών).

----------

finos (24-06-16)

----------


## kioan

> Με λίγα λόγια ζητώ το αντίστοιχο του map για την c#.



Δεν ξέρω αν υπάρχει ήδη έτοιμη τέτοια συνάρτηση, πάντως σε ANSI C το αντίστοιχο της παρακάτω συνάρτησης του arduino




```
output = map(value, fromLow, fromHigh, toLow, toHigh)
```


θα το έκανα σε 2 γραμμές κώδικα ως εξής:




```
rate = (toHigh - toLow) / (fromHigh - fromLow)
output = toLow + rate * (value - fromLow)
```


Μπορείς να το ορίσεις ως νέα μέθοδο στο πρόγραμμά σου ή να κάνεις τον υπολογισμό όπου χρειάζεται (το rate παραμένει σταθερό για ίδιες τιμές οπότε από άποψη υπολογιστικού κόστους συμφέρει να μην το ξαναυπολογίζεις αν δεν αλλάζει)

----------

manolena (24-06-16)

----------


## finos

ευχαριστω πολυ manolena





```
rate = (toHigh - toLow) / (fromHigh - fromLow)
output = toLow + rate * (value - fromLow)
```


τι ειναι το rate  ;
τι ειναι το value 
για την ταση :
fromlow = 0
from high =300
toHigh = 30.0

toLow = 00.0
 σωστα

----------


## finos

κι κατι αλλο για την lcd εχετε δοκιμασει ποτε να οδηγήσετε το το Vo (contrast) με pwm ;
http://www.hobbytronics.co.uk/arduino-tutorial10-lcd

----------


## navar

κάπου εδω να πω και εγω ενα μπράβο στον Βάγγο μας που εγραψε ενα μήνυμα προς τον Μάνο , αρκετά δομημένο ,αρκετά ευανάγνωστο με ορθογραφία που παλεύονταν, με απορίες που έβγαζαν "στέκονταν" και μιλώντας με αρκετή ευγένεια !

----------


## Fire Doger

> κι κατι αλλο για την lcd εχετε δοκιμασει ποτε να οδηγήσετε το το Vo (contrast) με pwm ;
> http://www.hobbytronics.co.uk/arduino-tutorial10-lcd



Γιατί το χρειάζεσαι? Αν έχεις ελεύθερους πόρους (pwm pin) στο arduino μπορείς να το βάλεις με την προϋπόθεση ότι υπάρχει μενού και κουμπιά ελέγχου για να το ρυθμίζει ο χρήστης. Εξαρτάτε απ' την κατασκευή, αν συμφέρει περισσότερο να το κάνεις με software με μεγαλύτερη κατανάλωση στον μΕ ή αν βάλεις ένα τρίμερ με περισσότερα έξοδα (τριμμερ, μέγεθος πλακέτας, κόστος συναρμολόγησης κλπ κλπ) αλλά γλυτώνεις χώρο προγράμματος, θόρυβο από το pwm, 1 πιν pwm κλπ
Είχα βάλει και ξερή αντίσταση (στο Gnd νομίζω) και δεν είχε θέμα.

----------


## finos

> Γιατί το χρειάζεσαι? Αν έχεις ελεύθερους πόρους (pwm pin) στο arduino μπορείς να το βάλεις με την προϋπόθεση ότι υπάρχει μενού και κουμπιά ελέγχου για να το ρυθμίζει ο χρήστης. Εξαρτάτε απ' την κατασκευή, αν συμφέρει περισσότερο να το κάνεις με software με μεγαλύτερη κατανάλωση στον μΕ ή αν βάλεις ένα τρίμερ με περισσότερα έξοδα (τριμμερ, μέγεθος πλακέτας, κόστος συναρμολόγησης κλπ κλπ) αλλά γλυτώνεις χώρο προγράμματος, θόρυβο από το pwm, 1 πιν pwm κλπ
> Είχα βάλει και ξερή αντίσταση (στο Gnd νομίζω) και δεν είχε θέμα.



εχω βαλει mega 
θα βαλω (μαλων :Tongue2:  ) ναι συμφερει γιατι εδω στο κουτσοψορι που το λενε ελασωνα τα trimer ειναι απο χρυσο (5€) τα2
και εχω κι  ενα software (τρομαρα μου ) οποτε γιατι οχι

----------


## SProg

Και εγω το εκανα με PWM αλλα μου εφαγε ενα PWM pin..απο τα 30.

Ακομα ασχολειστε με 8bit;

----------


## finos

εφαγε λέγοντας ;

----------


## finos

http://www.electroschematics.com/935...tal-voltmeter/
αυτο παει απο 0-30ν χορισ το arduino να παθει κατι ;

----------


## SProg

On topic: Υπαρχει διαιρετης τασης.



Off topic: *ΜΗΝ ΔΟΚΙΜΑΣΕΙΣ ΤΟ ΠΑΡΑΚΑΤΩ ΜΕ ΤΙΠΟΤΑ 230V.ΣΚΟΤΩΝΕΙ.

*Untitled.png

 Και 1000V να βλεπουν οι εισοδοι του AVR,εαν δεν ξεπερασεις το max ρευμα..δεν παθαινουν κατι.Υπαρχουν εσωτερικες Clamping διοδοι.Υπαρχει και Application Note με Zero Crossing απευθειας στα I/O (ΕΔΩ δες)

----------

finos (08-07-16)

----------


## finos

δλδ θα ειναι οκ απο 0-30vdc και αν "καταλαθως μου πεσουνε τα 30ν κατευθειαν στο arduino analog in θα δεν θα παθει κατι αλλα δεν θα τα διαβασει;

----------


## SProg

Στο γραφει:

The junction on the voltage divider network connected to the the Arduino analog pin is equivalent to the input voltage divided by 11, so 55V Γ· 11 = 5V. In other words, when measuring 55V, the Arduino analog pin will be at its maximum voltage of 5V. So, in practice, it is better to label this voltmeter as β0-30V DVMβ to add a safety margin!


Και λεει:

Keep it in mind that any input voltage higher than about 55V could fry the Arduino. 

To oποιο ΔΕΝ ισχυει.Στο εξηγησα παραπανω.

----------


## Fire Doger

Για Ζ1 = 100k και Ζ2 =10κ (όπως τα έχει στο σχεδιάγραμμα)
Το κλάσμα γίνεται Vout= ~0.09*Vin (Το λύνει στην γραμμή 23 και έχει και ανάποδη ονομασία νμζω... :P)
Άμα βάλεις 30V θα έχεις έξοδο περίπου 2.727V είναι ενδιάμεσα στα όρια τροφοδοσίας του AVR άρα δεν θα χρειαστείς περιορισμό ρεύματος.
Εγώ θα έβαζα Ζ1=56k για να έχω συντελεστή ~0.15 και τα 30V να δίνουν έξοδο ~4.54 για μεγαλύτερη ακρίβεια.

*Σάββα οι Clamping διοδοι πόσα W αντέχουν? Είναι στάνταρ ή παίζει στο datasheet του καθενός?

----------


## finos

ok ευχαριστώ πολύ είναι λίγο βραδύ και λειτουργώ στον αυτόματο για αυτο δεν τα ποιανω με το προτο !

----------


## Fire Doger

> ok ευχαριστώ πολύ είναι λίγο βραδύ και λειτουργώ στον αυτόματο για αυτο δεν τα ποιανω με το προτο !



Μια συμβουλή, όταν δεν είσαι σε ορθή λειτουργία μην ασχολείσαι με πράγματα που χρειάζονται συγκέντρωση γιατί μόνο ζημιές θα κάνεις. Άμα θες μ ακούς άμα θες θα σου γίνει συνήθεια και θα την πατάς. :Smile:  Αν παρατηρήσεις όλοι όσοι είναι κουρασμένοι λένε "θα το δω αύριο", υπάρχει λόγος.

----------


## manolena

> ok ευχαριστώ πολύ είναι λίγο βραδύ και λειτουργώ στον αυτόματο για αυτο δεν τα ποιανω με το προτο !



[off topic]

Άντε βρε πουλάκι μου να φτιάξεις ένα γάλα να πιεις και βάλε Τ9 να γράφεις γιατί στραβωθήκαμε πάλι...

[off topic]

Μία zenner στα 5.1V  στην αναλογική σου είσοδο προς τη γη είναι επίσης καλή προστασία.

----------


## manolena

> Μια συμβουλή, όταν δεν είσαι σε ορθή λειτουργία μην ασχολείσαι με πράγματα που χρειάζονται συγκέντρωση γιατί μόνο ζημιές θα κάνεις. Άμα θες μ ακούς άμα θες θα σου γίνει συνήθεια και θα την πατάς. Αν παρατηρήσεις όλοι όσοι είναι κουρασμένοι λένε "θα το δω αύριο", υπάρχει λόγος.



Σοφή παρατήρηση.

----------


## finos

τι ειναι το τ9 ....
καληνυχτα

----------


## thanasis 1

> *τι ειναι το τ9* ....
> καληνυχτα



τ τ τ τ τ τ τ τ τ  :Tongue2:

----------


## giannopoulos.stavros

> τι ειναι το τ9 ....
> καληνυχτα



περασμένης γενιάς προσπάθεια πρόβλεψης λέξεων. δεν είναι για σενα *Teens Try Texting With T9 
*διόρθωσε και στην υπογραφή σου το στή8ος  με το στήθος

----------


## SProg

Η μικροτερη αλλαγη τασης που θα μπορεις να αντιληφθεις θα ειναι: 

(5V / 1024) * Divider = 4.88 * 11 = +/- 54mV


Δεν αναφερουν αρκετα στα datasheet.

Απο τα Application note ειχα καταλαβει οτι το μεγιστο επιτρεπτο ρευμα πανω στη διοδο ειναι 1-2mA.Αρκετοι ειναι αυτοι που βαζουν και εξωτερικες αλλα το σχεδιαζουν ωστε πρωτα να ενεργοποιουνται οι εξωτερικες.

(για αυτο και στο application note που ανεβασα βαζει για 1000V αντισταση 1MΩ)


Υπαρχει ενα ωραιο αρθρο στο ΑVRfreaks  απο εναν Guru που δουλευλει στην Atmel αλλα δεν το βρισκω.

----------


## finos

rottery encoder.pngαυτο το σχεδιο θα δουλεψει με  αυτο 



```
/* Read Quadrature Encoder  * Connect Encoder to Pins encoder0PinA, encoder0PinB, and +V.
  *
  * Sketch by max wolf / www.meso.net
  * v. 0.1 - very basic functions - mw 20061220
  *
  */  




 int val; 
 int encoderPinA = 3;
 int encoderPinB = 4;
 int encoderPos = 0;
 int encoderPinALast = LOW;
 int n = LOW;


 void setup() { 
   pinMode (encoderPinA,INPUT);
   pinMode (encoderPinB,INPUT);
   Serial.begin (9600);
 } 


 void loop() { 
   n = digitalRead(encoderPinA);
   if ((encoderPinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoderPinB) == LOW) {
       encoderPos--;
     } else {
       encoderPos++;
     }
     Serial.print (encoderPos);
     Serial.print ("/");
   } 
   encoderPinALast = n;
 }
```


ευχαριστώ

----------


## manolena

> rottery encoder.pngαυτο το σχεδιο θα δουλεψει με  αυτο 
> 
> 
> 
> ```
> /* Read Quadrature Encoder  * Connect Encoder to Pins encoder0PinA, encoder0PinB, and +V.
>   *
>   * Sketch by max wolf / www.meso.net
>   * v. 0.1 - very basic functions - mw 20061220
> ...



Όχι Βαγγελάκο, δεν θα δουλέψει. Πρέπει να το κάνεις έτσι:

rotary-encoder-wiring.png
Ακόμα καλύτερα, έτσι:

rotary-encoder-arduino-wiring.png, φροντίζεις και για hardware debouncing του διακόπτη για τη "φασαρία" στο άνοιξε-κλείσε των επαφών. Έτσι δεν θα λαμβάνεις
λάθος παλμούς στον κώδικα.

Προτίμησε να δουλέψεις τον encoder με διακοπές, για να μην απασχολείς το πρόγραμμα στο βρόχο με το διάβασμά του. Επίσης, για να "καταλάβει" κάποια μεταβολή
των εξόδων ο μ/Ε, θα πρέπει να φροντίσεις να φτιάχνεις τους παλμούς με διακριτά επίπεδα (0-5V). Όπως το έχεις, δεν υπάρχει εναλλαγή στις στάθμες για να γίνει αντιληπτή
απο τον μ/Ε. 

Μπορείς να διαβάσεις όλο το παρακάτω και θα καταλάβεις πολλά:

http://playground.arduino.cc/Main/RotaryEncoders
http://www.electroschematics.com/120...coder-arduino/

----------

finos (06-08-16)

----------


## finos

Θέλω να ζητήσω συγνώμη από τον μανό για το thumps Down :Sad: . Η αφή από το κινητό μου τα έχει παίξει

----------


## finos

hardware debouncing να βάλω κι στα κουμπια;

----------


## Fire Doger

> hardware debouncing να βάλω κι στα κουμπια;



Μπα δεν χρειάζεται, με το software είσαι καλυμμένος

----------


## finos

debouncing γενικα ; να βαλω

----------


## SProg

Αφου εχει Pull-Up εσωτερικες ο Arduino δεν χρειαζεται να βαλει και εξωτερικες Pull-Up αντιστασεις.Θα πρεπει να δηλωσεις ομως οτι ειναι εισοδος με pull-up.


Διαβασε ΕΔΩ τι ειναι το debounce.Για το δικο σου προβλημα καντο απλα με Delay.

----------


## Kernel Panic

Μια ακόμη πρόταση λίγο ποιο περίπλοκη αλλά αποτελεσματική. 
enc.jpg

----------


## SProg

Μπορει απλα να ανοιγω-κλεινει το GND.

Εαν δεν στελνει τιποτα (διακοπτης ανοιχτος) ο μΕ θα διαβαζει '1' λογω της εσωτερικης Pull-Up, εαν στελνει GND τοτε ο μΕ θα διαβαζει '0'.

----------


## finos

http://www.ebay.com/itm/6Pin-USB-2-0...QAAOSw0kNXhzR7
το dtr που λεει ειναι το reset ?

----------


## SProg

https://en.m.wikipedia.org/wiki/Data_Terminal_Ready

----------


## Fire Doger

Ναι κάνει reset τον υπολογιστή...
Ρε Βαγγέλη έχεις μαλώσει με το google?
https://en.wikipedia.org/wiki/MAX232 πάνε στα voltage level θα το βρεις

----------


## finos

```
int encoder0PinA = 3;//for encoderint encoder0PinB = 2;// for encoder
int encoder0Pos = 0;//for encoder
int encoder0PinALast = LOW;//for encoder
int n0 = LOW;//for encoder
int encoder1PinA = 28;//for encoder
int encoder1PinB = 29;// for encoder
int encoder1Pos = 0;//for encoder
int encoder1PinALast = LOW;//for encoder
int n1 = LOW;//for encoder
void setup() {
	pinMode(encoder0PinA, INPUT);//roterry encode 
	pinMode(encoder0PinB, INPUT);
	pinMode(encoder1PinA, INPUT);//roterry encode 
	pinMode(encoder1PinB, INPUT);


}
void loop() {
	n0 = digitalRead(encoder0PinA);// roterry encoder read data start 
	if ((encoder0PinALast == LOW) && (n0 == HIGH)) {
		;
		if (digitalRead(encoder1PinB) == LOW) {
			;
			encoder1Pos--;
		}
		else {
			encoder1Pos++;


			if (encoder0Pos < 0);
			encoder0Pos = 1;


			if (encoder1Pos < 254);
			encoder1Pos = 254;


		}
		n1 = digitalRead(encoder1PinA);// roterry encoder read data start 
		if ((encoder1PinALast == LOW) && (n1 == HIGH)) {
			;
			if (digitalRead(encoder0PinB) == LOW) {
				;
				encoder0Pos--;
			}
			else {
				encoder0Pos++;


				if (encoder0Pos < 0);
				encoder0Pos = 0;


				if (encoder0Pos < 254);
				encoder0Pos = 254;


			}


		}
		encoder0PinALast = n1;//roterry encoder read date end 
}
```


error: expected '}' at end of input 
γιατι !!!!!!! αφου εχει } :Cursing:

----------


## finos

ηθελε ακομα 1 γιατι δεν εκλινε το loop

----------


## SeAfasia

> ηθελε ακομα 1 γιατι δεν εκλινε το loop



* δλδ...δλδ;*

----------


## nestoras

```
int encoder0PinA = 3;        //for encoderint encoder0PinB = 2;// for encoder
int encoder0Pos = 0;        //for encoder
int encoder0PinALast = LOW;    //for encoder
int n0 = LOW;                //for encoder
int encoder1PinA = 28;        //for encoder
int encoder1PinB = 29;        // for encoder
int encoder1Pos = 0;        //for encoder
int encoder1PinALast = LOW;    //for encoder
int n1 = LOW;                //for encoder
void setup()
    {
        pinMode(encoder0PinA, INPUT);//roterry encode 
        pinMode(encoder0PinB, INPUT);
        pinMode(encoder1PinA, INPUT);//roterry encode 
        pinMode(encoder1PinB, INPUT);
    }
    
void loop()
    {
        n0 = digitalRead(encoder0PinA);// roterry encoder read data start 
        if ((encoder0PinALast == LOW) && (n0 == HIGH))
        {
            ;
            if (digitalRead(encoder1PinB) == LOW)    
            {
                ;
                encoder1Pos--;
            }
            else
            {
                encoder1Pos++;
                if (encoder0Pos < 0);
                encoder0Pos = 1;
                if (encoder1Pos < 254);
                encoder1Pos = 254;
            }
            n1 = digitalRead(encoder1PinA);// roterry encoder read data start 
            if ((encoder1PinALast == LOW) && (n1 == HIGH))
            {
                ;
                if (digitalRead(encoder0PinB) == LOW)
                {
                    ;
                    encoder0Pos--;
                }
                else
                {
                    encoder0Pos++;
                    if (encoder0Pos < 0);
                    encoder0Pos = 0;
                    if (encoder0Pos < 254);
                    encoder0Pos = 254;
                }
            }
            encoder0PinALast = n1;//roterry encoder read date end 
        }
    }
```

----------


## manolena

Για να μην μπερδεύεστε με το μέτρημα των {}, υπάρχουν εργαλεία που βοηθάνε πολύ. Για παράδειγμα ο Notepad++. Όταν ανοίγεις ένα { και πας τον κέρσορα δίπλα του, σου δείχνει που κλείνει το επόμενο }. Έχει επίσης στην αριστερή πλευρά αριθμό γραμμής και ένα + ή - που αν πατηθεί, κάνει extend ή retract όλη τη συνάρτηση. Έτσι δεν μπορείς να χαθείς. Επίσης, μπορείς να τον ορίσεις σαν external editor του Arduino IDE και να δουλεύεις απο εκεί, αν σου τη βαράει το αυθεντικό περιβάλλον του Arduino.

https://notepad-plus-plus.org/

----------


## SeAfasia

> Για να μην μπερδεύεστε με το μέτρημα των {}, υπάρχουν εργαλεία που βοηθάνε πολύ. Για παράδειγμα ο Notepad++. Όταν ανοίγεις ένα { και πας τον κέρσορα δίπλα του, σου δείχνει που κλείνει το επόμενο }. Έχει επίσης στην αριστερή πλευρά αριθμό γραμμής και ένα + ή - που αν πατηθεί, κάνει extend ή retract όλη τη συνάρτηση. Έτσι δεν μπορείς να χαθείς. Επίσης, μπορείς να τον ορίσεις σαν external editor του Arduino IDE και να δουλεύεις απο εκεί, αν σου τη βαράει το αυθεντικό περιβάλλον του Arduino.
> 
> https://notepad-plus-plus.org/



καλημέρα παίδες,
Μάνο εννοείς μέσω του μενού στο παράθυρο Run;
notepad.jpg

----------


## manolena

Οδηγός για χρήση ως external editor του Notpad++:

http://stonez56.blogspot.gr/2015/04/...e-notepad.html

----------

kioan (11-09-16), 

SeAfasia (11-09-16)

----------


## SeAfasia

> Οδηγός για χρήση ως external editor του Notpad++:
> 
> http://stonez56.blogspot.gr/2015/04/...e-notepad.html



Eυχαριστώ Μάνο,το'χει και Γιαπωνέζικα... :Wink:

----------


## manolena

Ακόμα καλύτερα. Άλλο να είναι γραμμένο στα αγγλικά, άλλο στα γιαπωνέζικα. Τα γιαπωνέζικα έχουν μια μεγαλύτερη ευχέρεια στην κατανόηση, όσο νά 'ναι. Άμα είναι γραμμένα και στη δημοτική...

----------


## finos

Εγω γράφω με vmicro σε visual studio

----------


## SeAfasia

> Εγω γράφω με vmicro σε visual studio



Γιαπωνέζικα όχι;Είναι στη δημοτική!!!

----------


## manolena

Επίσης: (Βαγγέλη)

Στα tabs του IDE του Arduino, υπάρχει κάτω απο τα "ToolS" η επιλογή Auto Format (ή πατώντας CTRL+T). Αυτό το χάλι που έχεις γράψει πιο πάνω, σου το φτιάχνει με σωστά διαστήματα
και αποστάσεις για να πάρεις μια σειρά να βγάλεις άκρη. Χρησιμοποίησέ το. Είναι καλό.

----------


## manolena

> Εγω γράφω με vmicro σε visual studio



Ενώ όταν γράφεις ελληνικά, γράφεις ελληνικά και όχι γιαπωνέζικα σα να λέμε...

----------


## finos

2016-09-11.jpgτο compile και το upload μου το κανει μεσα απο το visual studio

----------


## finos

```
/* sketch turn on a fan using a relay and a button
*/
int VButton = 8;
int stateRelay = LOW;
int stateButton;
int previous = HIGH;
long time = 0;
long debounce = 500;
 
void setup() {
  pinMode(pinButton, INPUT_PULLUP);
 }
 
void loop() {
  stateButton = digitalRead(vButton);  
  if(stateButton == LOW && previous == HIGH & millis() - time > debounce) {
    if(stateRelay == HIGH){
      stateRelay = LOW; 
    } else {
       stateRelay = HIGH; 
    }
    time = millis();
  }
  previous == stateButton;
  
}
```


arduino-control-relay-schematic.pngαυτός ο κώδικας με αυτό το σχέδιο θα παίξει;

----------


## SProg

```

unsigned long time = 0;


previous = stateButton;
```



Ναι θα 'παιξει'

----------


## finos

έκανα κάποιο λάθος ;

----------


## SProg

Ναι.Εχουμε πει οτι η μεταβλητη που χειριζεται τη συνθηκη των millis() ειναι unsigned.Εχω την εντυπωση οτι την παιρνει unsigned ετσι και αλλιως αλλα καλυτερα να βεβαιωνεσαι.


Δεν βαλουμε ποτε == εξω απο συνθηκη.Κρατα το ποτε.

----------


## finos

```
/* sketch turn on a fan using a relay and a button
*/
int VButton = 8;
int stateRelay = LOW;
int stateButton;
int previous = HIGH;
unsigned long time = 0;
long debounce = 500;
 
void setup() {
  pinMode(pinButton, INPUT_PULLUP);
 }
 
void loop() {
  stateButton = digitalRead(vButton);  
  if(stateButton == LOW && previous == HIGH & millis() - time > debounce) {
    if(stateRelay == HIGH){
      stateRelay = LOW; 
    } else {
       stateRelay = HIGH; 
    }
    time = millis();
  }
  previous = stateButton;
  
}
```

----------


## SProg

Ωραια.Βαλε για PinOut ενα Pin με LED (πχ στον Μega το 13) και δες τι κανει.

----------


## Fire Doger

Το notepad αξίζει άσχημα, έχει και μερικά extensions όπως για παράδειγμα ένα που σου εμφανίζει το αρχείο σε hex και κάνεις διάφορα κόλπα :Wink:

----------


## SeAfasia

> Ναι.Εχουμε πει οτι η μεταβλητη που χειριζεται τη συνθηκη των millis() ειναι unsigned.Εχω την εντυπωση οτι την παιρνει unsigned ετσι και αλλιως αλλα καλυτερα να βεβαιωνεσαι.
> 
> 
> Δεν βαλουμε ποτε == εξω απο συνθηκη.Κρατα το ποτε.



άλλο τελεστής ανάθεσης δλδ = και άλλο συγκριτικός τελεστής = = σε συνθήκη...

----------


## finos

ευχαριστω το εκανα

----------


## finos

```
 int val;  int encoderPinA = 3;
 int encoderPinB = 4;
 int encoderPos = 0;
 int encoderPinALast = LOW;
 int n = LOW;


 void setup() { 
   pinMode (encoderPinA,INPUT);
   pinMode (encoderPinB,INPUT);
   Serial.begin (9600);
 } 


 void loop() { 
   n = digitalRead(encoderPinA);
   if ((encoderPinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoderPinB) == LOW) {
       encoderPos--;
     } else {
       encoderPos++;
     }
     Serial.print (encoderPos);
     Serial.print ("/");
   } 
   encoderPinALast = n;
 }
```


αν βάλω αυτόν τον κωδικά για να δουλεύει τον encoder θα υπάρξει κάποιο πρόβλημα αντί να χρησιμοποιήσω interupt ?

----------


## manolena

Γιατί να ΜΗΝ χρησιμοποιήσεις διακοπή για έναν encoder; Για να σου σκοτίζει τα τέτοια στο loop και να καθυστερείς; Εκτός αν θες να παίξεις.

----------


## finos

γιατι μου φενετε δισκολο να κανω  2 encoders με interupt

----------


## manolena

Μια χαρά εύκολο είναι. Να ξέρεις πως εκτός απο τα INT0,1,2 pins μπορούν να γίνουν και άλλα με interrupt on change.
Εδώ που βλέπεις πολλά pinouts μαζεμένα, φαίνονται για κάθε πλακέτα σαν PCINTx

https://bigdanzblog.wordpress.com/20...nout-diagrams/

Υπάρχει βιβλιοθήκη που σου λύνει τα χέρια. Ορίζεις ποιά πινάκια θα είναι για τα encoders interrupts και τις ρουτίνες που θα τα
εξυπηρετούν και λήξη.

https://github.com/NicoHood/PinChangeInterrupt
https://github.com/GreyGnome/PinChangeInt

----------


## finos

Αν το κάνω χωρις interupt θα είναι αργό το πρόγραμμα 
Πχ θα ανανεώνει την τημη της τάσης ποιο αργά ;

----------


## manolena

Αν στη loop() έχεις να κάνεις πολλά πράγματα, τότε με δυο encoders επίσης εκεί μέσα μπορεί οι καθυστερήσεις στην εξέλιξη του κώδικα να σου 
επηρεάσουν αρκετά τους χρόνους. Να ξέρεις κάτι: σε μια κατασκευή, συσκευή με encoder για χειρισμό παραμέτρων, ο χρήστης έχει την απαίτηση
για άμεση απόκριση στις μεταβολές. Φαντάσου στο τροφοδοτικό που φτιάχνεις, να έχεις συνδέσει κάτι ευαίσθητο και ξαφνικά το ρεύμα που του έχεις
ορίσει το βλέπεις να βαράει ταβάνι. Θες αμέσως να χαμηλώσεις. Αμα γυρίσεις encoder και αυτός σου πεί "χέσε με, πρέπει να έρθει η σειρά μου να κάνω
τη ρουτίνα μου", τι θα κάνεις; Με διακοπές όμως, δεν πα να κάνει ότι θέλει το κυρίως πρόγραμμα, άμα κουνήσεις encoder, θα διακόψει.

Άϊντε τώρα, ύπνο γιατί είναι αργά. Αύριο ξεκινάει το σχολείο, να είσαι φρέσκος.

----------


## finos

```
int encoderPinA = 2;
int encoderPinB = 3;
int val;
int encoderPos = 0;
int encoderPinALast = LOW;
int n = LOW;
void setup() {
    pinMode(encoderPinA, INPUT_PULLUP);
    pinMode(encoderPinB, INPUT_PULLUP);
    attachInterrupt(0, updateEncoder, CHANGE);
    attachInterrupt(1, updateEncoder, CHANGE);
    Serial.begin(9600);
}
void loop() {

//do stuff
}
void updateEncoder() {
    n = digitalRead(encoderPinA);
    if ((encoderPinALast == LOW) && (n == HIGH)) {
        if (digitalRead(encoderPinB) == LOW) {
            encoderPos--;
        }
        else {
            encoderPos++;
        }
        Serial.print(encoderPos);
        Serial.print("/");
    }
    encoderPinALast = n;
}
```


είναι σωστό έτσι ωπός το έκανα ;

----------


## manolena

Διαβάζεις καθόλου; Ψάχνεις; Έψαξες, δοκίμασες; 

Εδώ έχει πανδαισία απο κώδικες, δοκίμασε, σπάσε λίγο τα μούτρα σου ρε Βαγγέλη. Ήμαρτον δηλαδή. Αν σου πεί κάποιος οτι είναι ΟΚ, τι θα καταλάβεις;

http://playground.arduino.cc/Main/RotaryEncoders

----------


## Kernel Panic

Βαγγέλη θα σε δώσω στεγνά.
Για να ξέρετε, αυτό που ανέβασε και ρωτάει αν είναι σωστό είναι το 
Example 1 /* Read Quadrature Encoder
  * Connect Encoder to Pins encoder0PinA, encoder0PinB, and +5V.
  *
  * Sketch by max wolf / www.meso.net
  * v. 0.1 - very basic functions - mw 20061220
  *
  */  


 int val; 
 int encoder0PinA = 3;
 int encoder0PinB = 4;
 int encoder0Pos = 0;
 int encoder0PinALast = LOW;
 int n = LOW;
......

αλλά ξέχασε να σας το πει
Βαγγέλη, διάβασε και τα υπόλοιπα

----------


## finos

> Διαβάζεις καθόλου; Ψάχνεις; Έψαξες, δοκίμασες; 
> 
> Εδώ έχει πανδαισία απο κώδικες, δοκίμασε, σπάσε λίγο τα μούτρα σου ρε Βαγγέλη. Ήμαρτον δηλαδή. Αν σου πεί κάποιος οτι είναι ΟΚ, τι θα καταλάβεις;
> 
> http://playground.arduino.cc/Main/RotaryEncoders



ναι ,ναι ,ναι ,οχι 
μου ειπες να βαλω interupt εψαξα για το interupt τι κανει 
και αποτι καταλαβα το interupt ειναι : εαν δει αλαγη στην κατασταση των  pin2.3 εκτελει κατευθιαν τον κωδικα που ειναι μεσα στο function του interupt αρα εγω εκανα interupt εβαλα τον κωδικα που με βολευε στην function κι απλος ηθελα να δω αν ειναι σωστό.

----------


## finos

> Βαγγέλη θα σε δώσω στεγνά.
> Για να ξέρετε, αυτό που ανέβασε και ρωτάει αν είναι σωστό είναι το 
> Example 1 /* Read Quadrature Encoder
>   * Connect Encoder to Pins encoder0PinA, encoder0PinB, and +5V.
>   *
>   * Sketch by max wolf / www.meso.net
>   * v. 0.1 - very basic functions - mw 20061220
>   *
>   */  
> ...



ναι μεν το κοματι του updateEncoder δεν ηταν δικο μου αλλα τουπολιπο δικια μ εκτελεση

----------


## SProg

Εαν δεν ξερεις εαν μπαινει η CPU στη διακοπη (ή καλυτερα στο vector), τοτε βαλε οταν και ΑΝ μπαινει να αναβει ενα LED και να καθεται εκει μεσα με *while(1);

*
Ασε το encoder και κανει δοκιμες με ενα καλωδιο.

----------


## Fire Doger

Γρήγορα μαθήματα interrupt.
Ti είναι το interrupt: Είναι ένα ξυπνητήρι για την CPU, μόλις αρχίζει να χτυπάει χτυπάει για πάντα.*

Πότε αντιδράει η CPU: Αν είναι ρυθμισμένη να τα ακούει αντιδράει αμέσως (*και το κλίνει για να μην χτυπάει για πάντα) αλλιώς το γράφει στα @@ της και ας συνεχίζει αυτό να χτυπάει για πάντα, μόλις αρχίσει να τα ξανά ακούει τότε το ακούει και ας ξεκίνησε αυτό να βαράει πριν 2 ώρες.

Μερικές όταν εκτελούν ένα interrupt αν κατά την διάρκεια αρχίσει να χτυπάει και άλλο το γράφουν στα @@ τους το 2ο μέχρι να τελειώσουν το 1ο και μετά το εκτελούν.
(Για αυτό όχι χρονοβόρες function στα interrupt γιατί γίνετε χαμός)
Άλλες έχουν αριθμούς πρωτεραιότητας και τα ποιο σημαντικά διακόπτουν τα ασήμαντα.

Όταν η cpu αντιδράσει σε Interrupt: Από τον κατασκευαστή έχει συγκεκριμένους λόγους για να χτυπήσει το interrupt, κάθε λόγος είναι δεμένος με μία θέση μνήμης (διανύσματα).
Σε αυτήν την θέση μνήμης μπαίνει μια εντολή η οποία λέει στην cpu σε ποια θέση μνήμης πρέπει να πάει για να συνεχίσει να εκτελεί τις εντολές που αφορούν το interrupt.

Όταν ρυθμίζεις function στο interrupt τότε ουσιαστικά ρυθμίζεις το διάνυσμα.

Απορίες: Και γιατί δεν χάνει τα δεδομένα αφού σταματάει? Πως θυμάται που να γυρίσει?
Απαντήσεις: Δεν θα τα χρειαστείς στο arduino, το κάνει μόνο του αλλά κάποια στιγμή που θα μάθεις σωστά μΕ θα τα μάθεις. :Smile: 

**Τα "ξυπνητήρια" που λέω τα λένε σημαίες ή flag κανονικά.

----------


## manolena

Ρε Βαγγελάκο, πάντα για να κάνεις κάτι για πρώτη φορά, πάς απο το Ω στο Α. Σου λέει ο Σάββας: όρισε ένα external interrupt pin και μέ ένα καλώδιο να το ακουμπάς στο +5 ή τη γη (αναλόγως το
μέτωπο που του έχεις πεί να αντιδρά, FALLING, RISING ή CHANGE), όρισε το digital pin 13 που έχει και το ενσωματωμένο LED να σου ανάβει για acknowledge μόλις σκάσει η διακοπή. Δεν είναι δύσκολο.
Κατάλαβε όλο τον μηχανισμό των διακοπών και με αυτά που σου λέει ο Στέφανος και κάνε κανα πείραμα να δείς τι γίνεται.

----------


## SProg

Αξιο τεκνο Αυτοματισμου !

ΕDIT:

Παρε παλμογραφο.

Αφου σου αρεσει και ασχολησε, δωσε 50eu και παρε εναν USB παλμογραφο τον οποιο θα χρησιμοποιεις μονο με μΕ και οχι με κατι τρελα τροφοδοτικα που θες να κανεις.Σε καλυπτουν στο 200% και το λεω μιας και σαν φοιτητης ειχα 2 τετοιους Hantek.

Κατα τα αλλα διαβασε στο Ιντερνετ και θα εισαι κομπλε.Το πιο ευκολο ειναι να σου απανταμε,στην ηλικια σου παιζαμε Gameboy...

----------

Fire Doger (12-09-16)

----------


## manolena

> ...Το πιο ευκολο ειναι να σου απανταμε,στην ηλικια σου παιζαμε Gameboy...



...και μαθαίναμε να παίζουμε μ' αυτά που κατουράμε με κανα γκομενάκι...

----------


## finos

Νο coment

----------


## finos

http://www.pjrc.com/teensy/td_libs_Encoder.html οχι θα κατσω να σκασω .... library  :Tongue2:

----------


## finos

εχω κανει include μια library που περιεχει αυτον τον κωδικα



```
#ifdef INPUT_PULLUP
		pinMode(pin1, INPUT_PULLUP);
		pinMode(pin2, INPUT_PULLUP);
```


αμαμ παω στο αρχειο του κωδικα (xyz.ino)
που εχει γεινει include η library και κανω 



```
#define INPUT_PULLUP
```


θα εκτελεστει ο παραπανω κωδικας ;

----------


## manolena

Η συνθηκη #ifdef (που κλεινει στο τελος με #endif) λεει στον compiler πως αν συναντησει στον κωδικα καποια #define με ιδιο ορισμα (δηλαδη τo INPUT_PULLUP), θα εκτελεσει την οδηγια που του λεει η #define. Χωρις να ξερω τον υπολοιπο κωδικα και ετσι οπως ειναι γραμμενο, πρεπει να δουλεψει.

----------

finos (17-09-16)

----------


## finos

ευχαριστω

----------


## finos

#define INPUT_PULLUP
πρεπει να γίνει πριν ή μετα το #include <Encoder.h> ;

----------


## manolena

Όλες οι #include βρίσκονται πάντα στην αρχή του κώδικα και αυτό γιατί οι ακολουθουσες συνθήκες πρέπει να έχουν βρει τις σχετικές βιβλιοθήκες από πριν ώστε ο compiler να "χτίσει" τον κώδικα σε πηγαίο αρχείο. 
Σε κάθε περίπτωση ρε Βαγγο, γιατί δεν δοκιμάζεις να σπασεις τα μούτρα σου λίγο να δεις τι κάνει;

----------


## finos

καλημέρα γιατι αυτην της στησμη δεν εχω καπιοα aduino  το uno το mega (gia to psu) κι 3-4 νανο ταξιδεύουν ένα nano που είχα για κάποιον περίεργο λόγο δεν μου κάνει upload παλιά έκανε

----------


## finos

πως θα εμποδεισω μια μεταβλητη να γεινει <0

----------


## Fire Doger

> πως θα εμποδεισω μια μεταβλητη να γεινει <0



Θα την ορίσεις απροσήμαστη (unsigned)

----------


## picdev

Αν δεν γίνει 0 μπορεί μετά να πάρει τη max τιμή

Νιζω ότι φιμος εννωει το if(x < 0 ) x=0

Sent from my 2014813 using Tapatalk

----------


## finos

το θελω γιατι δεν μπωρω να στελνω στα mcp4151  αρνητική τιμή  κι με τον encoder θα έχω ένα τέτοιο πρόβλημα

----------


## picdev

Φινο το αρνητικό και το θετικό είναι τρόπος αναπαράστασης.
Το MCP που λες.πρεπει να.δεις τι τιμες δέχεται στους. Registers.
Αν δέχεται χωρίς πρόσημο τότε οριζεις αναλογη μεταβλητή όπως σου είπαν 

Sent from my 2014813 using Tapatalk

----------


## finos

το ξερω. απλως θελω εναν τρόπο να"απαγορέψω "το arduinio να δώσει αρνητική τιμή σε μια μεταβλητή

----------


## manolena

Βρε, unsigned λέμε... Αλλιώς κάνεις μία macro στην αρχή και τότε και με απλή μεταβλητή int της απαγορεύσεις να γίνει αρνητική.

----------

finos (24-09-16)

----------


## finos

οκ ευχαριστω

----------


## Dbnn

28 σελιδες......

----------


## finos

:Rolleyes:

----------


## pstratos

10 μήνες..... Ούτε πτυχιακή να ήταν. Έγω πάντως τον χαίρομαι τον Βαγγο.

----------

picdev (02-10-16)

----------


## Fire Doger

> 



Καταλαβαίνεις γιατί είναι 28 σελίδες  :Tongue2: 
Εμένα μ' αρέσει πολύ το θέμα, ένας καλύτερος τίτλος θα ήταν "οι απορίες του Βαγγέλη"
Αντί κάθε φορά να κάνει θέματα που η απάντηση είναι 2 λέξεις έρχεται και τα ρωτάει εδώ.

----------


## finos

Αυτό το καλοκαίρι κατάλαβα γιατί δεν έχει τελείωσει .....
γιατί δεν στρωθικα στην δουλειά και χαζεβα  :Unsure:

----------


## SeAfasia

> Αυτό το καλοκαίρι κατάλαβα γιατί δεν έχει τελείωσει .....
> γιατί δεν στρωθικα στην δουλειά και χαζεβα



δλδ είσαι χαζεβιόλης και χάζεβες;

----------


## Fire Doger

> Αυτό το καλοκαίρι κατάλαβα γιατί δεν έχει τελείωσει .....
> γιατί δεν στρωθικα στην δουλειά και χαζεβα



Τι έγινε βρε, την χώρισες την κοπελιά και άρχισες πάλι τα ορθογραφικά? Τα μεγάλα bold σου έλειπαν :Tongue2: 

Ε και τώρα που άρχισε το σχολείο και έχεις ελεύθερο χρόνο θα την συνεχίσεις ε? Καλύτερα ζήτα απ' τον Άι-Βασίλη ένα switching γιατί μέχρι τότε ακόμα στο χάζεμα σε κόβω :Tongue2: 
Τόσο καιρό που το παλεύεις αν έβρισκες δουλειά με 2 κατοστάρικα το μήνα θα έπαιρνες το ακριβό το Rigol και θα ήσουν στον αφρό. Καθόλου πρακτικό μυαλό Βάγγοοοο

Και τι λέω, απ' το 15 το παλεύεις, 9 μήνες θα είχες τροφοδοτικό-παλμογράφο-γεννήτρια-σταθμό κόλλησης/αποκόλλησης και θα σου περίσσευαν κιόλας

----------


## manolena

Βαγγελάκο μη μασάς τον κ@#$ο σου!!! Ρίχ' του του switching στ' αυτιά! Να ακούς και τους μεγαλύτερους όμως. Και μη χαζεύεις πολύ από εδώ κι από 'κει, γιατί κι εγώ που χάζευα στην ηλικία σου, το μετανιώνω τώρα.

----------


## picdev

πάρε ένα βιβλίο για c όπως σου είπα να διαβασεις τα βασικά 

Sent from my 2014813 using Tapatalk

----------


## finos

IMG_20161003_151345.jpgIMG_20161003_151853.jpgτελειωνει...

----------


## elektronio

> Συνημμένο Αρχείο 66897τελειωνει...




Με τα δόντια την έκοψες την πλακέτα; ... :hahahha:

----------


## finos

χιχιχι οχι καλε με κοπιδι και πενσα

----------


## pstratos

Αυτές κόβονται πολύ όμορφα με μακρυ μυτοτσιμπιδο, αν δεν έχεις κατι καλύτερο

----------


## Fire Doger

Το ιδανικό είναι ένας επιτραπέζιος χαρτοκόπτης με τον οποίο μπορείς να κόβεις και φωτοευαίσθητες και έχει και τον κανόνα αριστερά για να κόβεις ολόισια

----------


## nestoras

> Αυτές κόβονται πολύ όμορφα με μακρυ μυτοτσιμπιδο, αν δεν έχεις κατι καλύτερο




Πώς κόβεις πλακέττα με μυτοτσίμπιδο;

----------


## manolena

> Συνημμένο Αρχείο 66896Συνημμένο Αρχείο 66897τελειωνει...



Λοιπόν, πρέπει  να γίνεις και καλός εφαρμοστής. Δεν είναι και τόσο καλό το αποτέλεσμα, θα μάθεις να είσαι ψείρας στη λεπτομέρεια. Όταν ανοίγεις παραλληλόγραμμες τρύπες σε πλαστικό (σε πρώτη φάση που είναι πιο εύκολα τα πράγματα), θα τις ανοίγεις μικρότερες και θα τις φέρνεις στη διάσταση με μικρές λίμες πλατιές ή κυλινδρικές.. Βοηθάει πολύ και μια φαλτσέτα, αλλά κόβει δάχτυλα χωρίς να καταλάβεις. Κοίτα αυτό:

http://www.hlektronika.gr/forum/showthread.php?t=78473

20141119_103741.jpg20141119_103759.jpg

...και δεν είναι και τέλειο. Φτιάξε ένα γραμμικό σχέδιο με τις τρύπες και τύπωσέ το σε ένα χαρτί. Άνοιξε όλες τις τρύπες και τοποθέτησε στο χαρτί τα εξαρτήματα της πρόσοψης, να δείς οτι ταιριάζουν. Αυτό να είναι το πατρόν σου.
Μετά, πάνω στα κοψίματα του χαρτιού, σχεδίασε με μαρκαδοράκι τα ανοίγματα πάνω στο πλαστικό και ξεκίνα να τα ανοίγεις σιγά-σιγά. Μικρότερα λίγο πρώτα και μετά με λείανση τα μεγαλώνεις εκεί που θες. Και δοκιμάζεις ταυτόχρονα.

----------


## Fire Doger

Μάστορα, κανά tip για αλουμίνιο έχεις? 105χ55mm 2-3 χιλιοστά το κόβω πάχος
Για punch είναι μικρό και δεν χωράει στην δαγκάνα, και είναι μαύρο το κουτί, δεν θα του πάει να το κάνω από λευκό.
Σε laser μπορούν να το τρυπήσουν μόνο ή πρέπει να το κόψουν κιόλας?

----------


## manolena

Πρώτα ντυνεις με αυτοκόλλητο διάφανο τη λαμαρίνα για να μην κάνεις σημάδια. Μετά με ένα ψιλό τρυπανακι κοβαλτίου και λίγες στροφές κάνεις (πααααρα πολλές) τρύπες λίγο πιο μέσα από το κόψιμο που θες. Μετά με λιμες μικρές (πλατιες, κυλινδρικές, ανάλογα την τρύπα) και με υπομονή, φέρνεις τη διάσταση. Αυτός είναι και ο old fashioned τρόπος. Τον βαριεμαι τώρα, θα πάω σε CNC την επόμενη φορά.

----------


## Fire Doger

Και εγώ σε cnc/laser θέλω να πάω (και γιατί παίζεις με την λύμα τόσο πολύ, dremelάκι δεν δουλεύεις?) αλλά να μαζέψω κάνα 2 πληροφορίες μην πάω και με κοροϊδεύουν :Tongue2: 

Μπορώ να τους πάω έτοιμο κομμάτι και να τους πω τρυπήστε το?

----------


## manolena

Παίζει και dremel, αλλά στη δουλειά, οπότε το χειροκίνητο πάει σύννεφο.
Παίρνεις τη λαμαρίνα με το αρχείο που φτιάχνεις σε AutoCAD η CorelDraw ή κάτι αντίστοιχο τέλος πάντων με .dxf μορφή και το πάς και σου το κόβουν.

----------


## SProg

> Μπορώ να τους πάω έτοιμο κομμάτι και να τους πω τρυπήστε το?



Οχι.

Χανεις σε ακριβεια (δεν μπορει το Laser να εχει σημειο 0,0 και πρεπει να μπει απο το χειριστη) και για 1 τεμαχιο παιζει να μην στο κανουν.Υπαρχει πιο απλη λυση για τοσο μικρο κομματι..

μου το στελνεις .dxf και στο κοβω σε inox-αλουμινιο

----------


## Fire Doger

> Οχι.
> 
> Χανεις σε ακριβεια (δεν μπορει το Laser να εχει σημειο 0,0 και πρεπει να μπει απο το χειριστη) και για 1 τεμαχιο παιζει να μην στο κανουν.Υπαρχει πιο απλη λυση για τοσο μικρο κομματι..
> 
> μου το στελνεις .dxf και στο κοβω σε inox-αλουμινιο



Και εγώ αυτό σκεφτόμουν όπως τα είδα να δουλεύουν, σε μικρό στο σπίτι το βολεύεις αλλά ποιος θα κάτσει να κάνει καλούπι για 1 κομμάτι.
Μάλλον σε εσένα θα απευθυνθώ και θα τα βάψω. Όταν έρθουν και βγάλω μέτρα θα σου πω.  :Smile: 
Θέλεις και υπολογισμό της διαμέτρου του κοπτικού εργαλείου ή τα καθαρά τα σημεία κοπής?

----------


## finos

> Λοιπόν, πρέπει  να γίνεις και καλός εφαρμοστής. Δεν είναι και τόσο καλό το αποτέλεσμα, θα μάθεις να είσαι ψείρας στη λεπτομέρεια. Όταν ανοίγεις παραλληλόγραμμες τρύπες σε πλαστικό (σε πρώτη φάση που είναι πιο εύκολα τα πράγματα), θα τις ανοίγεις μικρότερες και θα τις φέρνεις στη διάσταση με μικρές λίμες πλατιές ή κυλινδρικές.. Βοηθάει πολύ και μια φαλτσέτα, αλλά κόβει δάχτυλα χωρίς να καταλάβεις. Κοίτα αυτό:
> 
> http://www.hlektronika.gr/forum/showthread.php?t=78473
> 
> Συνημμένο Αρχείο 66902Συνημμένο Αρχείο 66903
> 
> ...και δεν είναι και τέλειο. Φτιάξε ένα γραμμικό σχέδιο με τις τρύπες και τύπωσέ το σε ένα χαρτί. Άνοιξε όλες τις τρύπες και τοποθέτησε στο χαρτί τα εξαρτήματα της πρόσοψης, να δείς οτι ταιριάζουν. Αυτό να είναι το πατρόν σου.
> Μετά, πάνω στα κοψίματα του χαρτιού, σχεδίασε με μαρκαδοράκι τα ανοίγματα πάνω στο πλαστικό και ξεκίνα να τα ανοίγεις σιγά-σιγά. Μικρότερα λίγο πρώτα και μετά με λείανση τα μεγαλώνεις εκεί που θες. Και δοκιμάζεις ταυτόχρονα.



το ξερω οτι το εκοψα χαλια αλα θα ακολουθήσω την τεχνική του ggr με την φορητή τηλεόραση του ( ματ πλαστικοποίηση κι κολλημα πανω στο κουτί  )

----------


## SProg

> Θέλεις και υπολογισμό της διαμέτρου του κοπτικού εργαλείου ή τα καθαρά τα σημεία κοπής?



Οχι ρε τρελε τι υπολογισμο.Δεν κανουμε CAD/CAM στη σχολη  :Very Happy: 

Σχεδιο ή αναπτυγμα κανε με καθαρες διαστασεις... τα 0.2mm της δέσμης του Laser αφαιρουνται αυτόματα.Correction λεγεται βασικα και ειναι αυτοματο.

----------


## finos

η οθωνη μου κανει τρελες 
look https://youtu.be/Rta3vkakUHY

----------


## Fire Doger

> η οθωνη μου κανει τρελες 
> look https://youtu.be/Rta3vkakUHY



Τίποτα δεν σου κάνει, μια χαρά δουλεύει, εσύ στέλνεις @@.

Οκ Σάββα μόλις έρθει η πρόσοψη που φοράει θα την μετρήσω και θα στα στείλω.

----------


## manolena

> η οθωνη μου κανει τρελες 
> look https://youtu.be/Rta3vkakUHY



Δηλαδή τι είναι λάθος; Αυτά της λές να κάνει, αυτά κάνει.

lcd1.jpg

----------


## finos

δεν εμφανιζε τπτ το το ξανα περασα το hallo world κι δειχνει  :Unsure:

----------


## Fire Doger

Άρα έχεις κάτι λάθος στο άλλο, τι σου είπα, ανέβασε κώδικα.

----------


## finos

```
/*  LiquidCrystal Library - Hello World


 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.


 This sketch prints "Hello World!" to the LCD
 and shows the time.


  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)


 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe


 This example code is in the public domain.


 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */


// include the library code:
#include <LiquidCrystal.h>


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(6, 7, 5, 4, 3, 2);


void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(20,4);
  // Print a message to the LCD.
  lcd.print("hello, world!");
 
}


void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
/*
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis() / 1000);
  lcd.setCursor(0, 2);
  lcd.print(millis() / 1000);
  lcd.setCursor(0, 3);
  lcd.print(millis() / 1000);
  */
  lcd.clear();
  lcd.setCursor(0, 0);//row,culume
  lcd.print("Vset=");
  lcd.print("30.0");
  lcd.print("Vact=");
  lcd.print("30.0");
  //18 caracters 1st line voltage
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Aset=");
  lcd.print("5.00");
  lcd.print("Aact=");
  lcd.print("5.00");
  //18 caracters 2ont line curent
}
```

----------


## finos

yesss  δεν ηθελε  lcd.clear();
 :Blink:  :Brick wall:

----------


## finos

```
/* sketch turn on a fan using a relay and a button
*/
int pinButton = 28;
int Relay = 33;
int stateRelay = HIGH;
int stateButton;
int previous = HIGH;
long time = 0;
long debounce = 500;
 
void setup() {
  pinMode(pinButton, INPUT_PULLUP);
  pinMode(Relay, OUTPUT);
}
 
void loop() {
  stateButton = digitalRead(pinButton);  
  if(stateButton == LOW && previous == HIGH && millis() - time > debounce) {
    if(stateRelay == HIGH){
      stateRelay = LOW; 
      
    } else {
       stateRelay = HIGH; 
    }
    time = millis();
  }
  digitalWrite(Relay, stateRelay);
  previous == stateButton;
}
```


θα με τρελανει ενω με το λεντακι στην 13 δούλευέ απαιχτα εδώ οπότε του έρθει ανοίγει κι όποτε του έρθει κλεινει  :Cursing:

----------


## Fire Doger

Ή ανέβασες άλλο κώδικα ή είναι περίεργο που ανάβει το led.
Πουθενά δεν βλέπω να κάνεις το 13 high ή low.
Στο 33 έχεις το ρελε και στο 28 το button

----------


## finos

οχι δεν αναβει το led ωταν το εχω ρυθμισμένο στο  33 μόνο στο 13 .
με το led  αντιδράει μια χαρα αλλα στο ρελε δεν ανοιγει / κλεινει όταν πατάω το κουμπί

----------


## manolena

Βαγγέλη, μάθε σε παρακαλώ να λες αυτό που θέλεις με καλή σύνταξη και ακρίβεια. Δεν βγάζει κανείς άκρη απο τις ερωτήσεις σου και χάνονται εργατοώρες. Εδώ δεν υπάρχει assignment καθόλου στο 13, για ποιό LED λες;

EDIT: κατάλαβα. Θες να πεις πως αν βάλεις το ρελέ στο 13 έχει διαλλειπτική λειτουργία με το πάτημα του μπουτόν.

----------


## manolena

Ποιόν Arduino χρησιμοποιείς, μπορείς να μας πεις;

----------


## finos

ΑΥΤΟ ΑΚΡΙΒΩΣ 
μου φενετε θα βγαζω video για να καταλαβαίνετε τι θέλω να πω χωρις να βγαινουν  τα ματάκια σας

----------


## kioan

> θα με τρελανει... οπότε του έρθει ανοίγει κι όποτε του έρθει κλεινει



Το κακό με τους υπολογιστές (μικροελεγκτές κλπ) είναι πως κάνουν  *ακριβώς* ό,τι τους πούμε  

Sent from my GT-N7100 using Tapatalk

----------


## finos

> Ποιόν Arduino χρησιμοποιείς, μπορείς να μας πεις;



arduino mega :Rolleyes:

----------


## Fire Doger

Ρε Βαγγέλη βγάζεις άκρη με τα ονόματα που δίνεις στις μεταβλητές? 3 μεταβλητές είναι, γιατί οι 2 πρέπει να ξεκινάν με "state"
Πρώτα βάζεις το που αναφέρονται και μετά το τι είναι, Button_state, Relay_State, Fan_state κλπ κλπ κλπ
Όταν έχει bug στο κουμπί ψάχνεις τις μεταβλητές του κουμπιού κάνοντας αναζήτηση "button001" αλλιώς θα έκανες όλες τις state μέχρι να βρεις το button?
Γενικά αυτά που έχω συμπεράνει μέσα από διάφορες γλώσσες σε διάφορους compiler...

Στείλε και το σχηματικό, δεν γίνεται στο 13 να δουλεύει και στο άλλο όχι...

----------


## manolena

Στο ρωτάω αυτό γιατί σε UNO για παράδειγμα, το 13 είναι και SCK και αν έχεις καμμιά επικοινωνία ανοιχτή μπορεί να κάνει νούμερα.

----------


## finos

Untitled.pngαυτο ειναι

----------


## Fire Doger

> Untitled.pngαυτο ειναι



Θα σε έλεγα τώρα τίποτα....
Σχηματικό είναι αυτό ρε ή ζωγραφιά τρίχρονου?

----------


## manolena

Ή χρησιμοποιείς άλλο πιν (αφού είναι MEGA έχεις πολλά), ή δένεις pullup στο 13 και οδηγείς το ρελέ με καθαρό LOW και (έτσι κι αλλιώς) με transistor. Δεν πιστεύω να το έχεις κοπανήσει το ρελέ κατ' ευθείαν στο 13;

----------


## finos

> Θα σε έλεγα τώρα τίποτα....
> Σχηματικό είναι αυτό ρε ή ζωγραφιά τρίχρονου?



ζωγραφιά 15χρονου  :Tongue2:  
χτες εκανα format το pc κι δεν προλαβα να βαλω τον αετό

----------


## finos

> Ή χρησιμοποιείς άλλο πιν (αφού είναι MEGA έχεις πολλά), ή δένεις pullup στο 13 και οδηγείς το ρελέ με καθαρό LOW και (έτσι κι αλλιώς) με transistor. Δεν πιστεύω να το έχεις κοπανήσει το ρελέ κατ' ευθείαν στο 13;



http://www.ebay.com/itm/1pcs-5V-2-Ch...gAAOxy86RSY-Jq

----------


## finos

ειμαι πολυ .......ΔΕΝ ΕΦΕΡΝΑ γείωση στην πλακετα με τα κουμπια 
 :Cursing:  :Cursing:  :Cursing:  :Cursing:  :Cursing:  :Brick wall:

----------


## manolena

> ζωγραφιά 15χρονου  
> χτες εκανα format το pc κι δεν προλαβα να βαλω τον αετό



Από ο,τι καταλαβαίνω άμα είχε χέρια θα 'τρωγες τα φασκελα σύννεφο από τα πολλά format. Ούτε σωβρακο να ηταν...

----------


## manolena

> ειμαι πολυ .......ΔΕΝ ΕΦΕΡΝΑ γείωση στην πλακετα με τα κουμπια



Σήκωσε το χεράκι τώρα... Για σηκωσέ το να σε δω...

----------


## Fire Doger

> ζωγραφιά 15χρονου  
> χτες εκανα format το pc κι δεν προλαβα να βαλω τον αετό



Πάλι τα 10άρια έβαλες? :Tongue2:

----------


## finos

> Από ο,τι καταλαβαίνω άμα είχε χέρια θα 'τρωγες τα φασκελα σύννεφο από τα πολλά format. Ούτε σωβρακο να ηταν...



κανω φορματ κάθε 6 μήνες

----------


## Fire Doger

> κανω φορματ κάθε 6 μήνες



http://www.faronics.com/en-uk/products/deep-freeze/

Σπάσε τον σκληρό σε 2 αν δεν έχεις ssd για τα windows και κάνε deepfreeze στα win για να ξεμπερδεύεις.

Αν πχ θέλεις να βάλεις το eagle θα το κατεβάσεις, θα κάνεις ένα restart να κάνει καθαρό boot, θα το κάνεις εγκατάσταση και θα το δοκιμάσεις. Αν δεν σ' αρέσει κάνεις restart το pc και μένει πεντακάθαρο. Αν σ' αρέσει κάνεις καινούριο image και τέλος.

Επίσης και ο Revo Unistaller είναι χρήσιμος γιατί κάνει σωστή απεγκατάσταση.

----------


## finos

collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino Mega ADK.

και ο κωδικας



```
int encodervPinA = 2;
int encodervPinB = 3;
//int val;
int VPos = 0;
int encodervPinALast = LOW;
int nv = LOW;
//curent
int encoderaPinA = 2;
int encoderaPinB = 3;
//int val;
int APos = 0;
int encoderaPinALast = LOW;
int na = LOW;
void setup() {
 pinMode(encodervPinA, INPUT_PULLUP);
 pinMode(encodervPinB, INPUT_PULLUP);
 attachInterrupt(5, updateEncoderV, CHANGE);
 attachInterrupt(4, updateEncoderV, CHANGE);
 Serial.begin(9600);
//curent
 pinMode(encoderaPinA, INPUT_PULLUP);
 pinMode(encoderaPinB, INPUT_PULLUP);
 attachInterrupt(3, updateEncoderA, CHANGE);
 attachInterrupt(2, updateEncoderA, CHANGE);
 Serial.begin(9600);
}
void updateEncoderA() {
 na = digitalRead(encoderaPinA);
 if ((encoderaPinALast == LOW) && (na == HIGH)) {
  if (digitalRead(encoderaPinB) == LOW) {
   APos--;
  }
  else {
   APos++;
  }
  Serial.print(APos);
  Serial.print("/");
 }
 encoderaPinALast = na;
}
void updateEncoderV() {
 nv = digitalRead(encodervPinA);
 if ((encodervPinALast == LOW) && (nv == HIGH)) {
  if (digitalRead(encodervPinB) == LOW) {
   VPos--;
  }
  else {
   VPos++;
  }
  Serial.print(VPos);
  Serial.print("/");
 }
 encodervPinALast = nv;
}
```

----------


## kioan

Ενεργοποίησε στα Preferences του Arduino IDE το verbose output.

Μετά θα εμφανίζει αναλυτικά τι πρόβλημα βρήκε κατά το compile.

----------


## manolena

Που είναι η loop(); σου ρε γοριλλάκι;

----------


## manolena

Σου έχω πεί: μην τα περιμένεις όλα έτοιμα, μην περιμένεις την εύκολη λύση. Πάλεψέ το λίγο και το πιθανότερο είναι να τη βρείς μόνος σου. Εκτός κι αν θέλεις να ανεβάζεις σκόρ στα μηνύματά σου εδώ μέσα για την κάθε χαζομάρα που θα σκεφτείς. Απασχολείς πολύ τον server.

----------


## finos

soryyy  :Rolleyes:

----------


## Fire Doger

Ε όχι το παιδί, μια βδομάδα + είχε να μπει, μου έλειψες :Tongue2:

----------


## kioan

> Απασχολείς πολύ τον server.



 :Rolleyes:  Μου θύμισες την υπογραφή που είχα παλιότερα στα forums:





> Think before you post! Save a DB row!

----------


## manolena

Μετά τον server, απασχολείται και ο Λέπουρας για να ανα-διατάξει τίτλους θέματος γιατί δεν υπάρχει περίπτωση να βγεί άκρη απο αναγνώστες. Αργότερα, απασχολείται πολύ και το μυαλό μου για να μεταφράσω αυτά που θέλει να πει σε απλή ελληνική, αφού τα διορθώσω ορθογραφικά.

Βαγγέλη: χαλάρωσε και βάλε μια τάξη, θα δεις οτι θα γίνεις καλύτερος.

----------


## finos

τελείωσε (99.99999% ready ) πως θέλετε να σας κανω παρουσίαση με video η κιμενο

----------


## Fire Doger

> τελείωσε (99.99999% ready ) πως θέλετε να σας κανω παρουσίαση με video η κιμενο



Έλα πες την αλήθεια, θέλεις να κάνεις βίντεο για αυτό το έγραψες έτσι το *κείμενο*!
Μην μας κάνεις πλύση εγκεφάλου... :Lol:  :Lol: 
Παρουσίαση όταν λες? Θα δείχνεις κυμάτωση υπό φορτίο 7-8Α, υπερανύψωση και τέτοια ή 1 φωτογραφία το κουτί και 1 την ψύκτρα?

----------


## finos

Παρουσίαση με τα όλα της αν και πρωτιμω σε video

----------


## kioan

Αν τραβήξεις video φρόντισε να μην κινείται μανιωδώς η κάμερα και πάθουμε ναυτία  

Αλλιώς λίγο κείμενο και μερικές καθαρές φωτογραφίες είναι αρκετές.

Sent from my GT-N7100 using Tapatalk

----------


## finos

Όχι βρε σίγα μην ανησυχείς

----------


## finos

τρ που πιρα το κολαι με τα interrupts και μου περισεψαν μερικα τι λετε να βαλω και το κουμπι που ελενχει την εξοδο σε interrupt ?

----------


## manolena

Ε και δεν βάζεις; Για να δούμε...

----------


## finos

σκευτικα  ότι το loop δεν είναι στο σημειο του προγραματος οπου δουλεει το relay ,θημιθικα αυτό που μου ειχες πει ότι τα user inputs πρεπει να είναι σε interrupt οποτε ....

----------


## Fire Doger

Το πήρες και το σήκωσες... :Lol: 
Στην έξοδο δεν έχει πυκνωτές?
Αν κόψεις την τροφοδοσία από το τροφοδοτικό αυτοί θα συνεχίσουν να είναι φορτισμένοι και θα αποφορτίζουν στο κύκλωμα.
Στην έξοδο θα βάλεις μηχανικό διακόπτη 2P2T ή ρελέ να κόβει τα πάντα.
Εγώ μηχανικό θα έβαζα γιατί τα ρελέ θα πρέπει να αντέχουν 10Α *DC* (τόσο δεν είναι το τροφοδοτικό σου?) και θα έπιαναν και χώρο και χρήμα.
Μην κοιτάς το AC, στο AC ξεοπλίζουν ποιο εύκολα τα ρελέ λόγο του ότι κάποια στιγμή είναι 0V, ενώ στο DC όχι.
Αν θυμάμαι καλά όταν το έψαχνα είναι εμπειρικά περίπου 3-4 φορές μικρότερο το ρεύμα που αντέχουν σε σχέση με το AC.

----------


## manolena

Θα στο πω αλλιώς για αυτή την προσέγγιση: φαντάσου το loop σου (μαζί με delays που θα έχεις βάλει, ελέγχους άλλου είδους κλπ) να είναι μακρύ. Τι θα γίνει αν εσύ έχεις βάλει ενα ευαίσθητο φορτίο για τροφοδότηση και όπως είσαι άτσαλος, κάτι κάνεις και αρχίζει να παίρνει φωτιά. Γιατί να μην μπορείς άμεσα να κόψεις έξοδο μόλις πατηθεί το κουμπί ελέγχου της; Άμεσα εννοώ, χωρίς να περιμένεις. Αυτό κάνει το κουμπί σου αν το βάλεις σε διακοπή.

----------


## finos

οκ ευχαριστω

----------


## finos

εχω προβλιμα με το acs 712 το 1Α μου το διαβαζει 0,30 με αυτόν τον κωδικα



```
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
int sensor=analogRead(A2);
Serial.println((514-sensor)*27.03/1023);
delay(1000);
}
```


εχω βαλει cc στο 1Α
 :Cursing:

----------


## Fire Doger

1: Σχηματικό δεν υπάρχει? Εβαλες κάποιο προτεινόμενο από το datasheet ή κάποιο σαβουρο-module με 2 πυκνωτές μόνο?

2: Το datasheet το διαβασες ή βρηκες κάπου τον κώδικα και τον πεταξες πάνω?

3: Γιατί έκανες τις πράξεις ετσι και δεν το πήγες αναλυτικά όπως εδώ?
http://henrysbench.capnfatz.com/henr...th-an-arduino/

Δοκίμασε τον αναλυτικό, βάλε τις κατάλληλες ρυθμίσεις για το μοντέλο σου και πες μας.

----------


## kioan

Το ACS712 θα πρέπει να συνδέεται στα 5V, στα ίδια 5V που χρησιμοποιεί και ως Vref το Arduino.


adcValue = analogRead(A2);
Σου δίνει την αναλογική τιμή που διαβάζει το ADC.

Από αυτήν υπολογίζεις την πραγματική μετρούμενη τάση σε mV με τον τύπο:
Voltage = (adcValue / 1024.0) * 5000;

Και την οποία βάσει του datasheet του ACS712 την μετατρέπεις σε Ampere με τον τύπο:
Amp = (Voltage - Voffset) / mVperAmp;

To Voffset αντιστοιχεί στην τάση που δίνει το ACS712 στα 0A το οποίο είναι 2.5V
To mVperAmp δίνεται επίσης από το datasheet αλλά είναι διαφορετικό ανάλογα με το ποιο ACS712 έχεις (περίπου 185 για το ACS712x05B, 100 για το ACS712x20B, 66 για το ACS712x30B)

----------


## finos

> 1: Σχηματικό δεν υπάρχει? Εβαλες κάποιο προτεινόμενο από το datasheet ή κάποιο σαβουρο-module με 2 πυκνωτές μόνο?
> 
> 2: Το datasheet το διαβασες ή βρηκες κάπου τον κώδικα και τον πεταξες πάνω?
> 
> 3: Γιατί έκανες τις πράξεις ετσι και δεν το πήγες αναλυτικά όπως εδώ?
> http://henrysbench.capnfatz.com/henr...th-an-arduino/
> 
> Δοκίμασε τον αναλυτικό, βάλε τις κατάλληλες ρυθμίσεις για το μοντέλο σου και πες μας.



Σορυ γαι το tumpsdown έχω ένα "σαβουροmondule"  και έχω κατευθείαν πάνω στο  a2

----------


## Fire Doger

> Σορυ γαι το tumpsdown έχω ένα "σαβουροmondule"  και έχω κατευθείαν πάνω στο  a2



Υπάρχει περίπτωση (*ελάχιστη*) να σε συγχωρέσω μόνο εάν λουστείς με πίσα και πούπουλα!!! :Lol: 

*Αν πατήσεις το ThumbsUp βγαίνει και ούτε ειδοποίηση δεν εμφανίζεται... Μην γεμίζεις την βάση δεδομένων με άχρηστα post, 350 μηνύματα έφτασες εδώ, άντε να βρεις μετά κάτι όταν το ψάξεις...

----------


## finos

τι θα γινει αν γεμίσει τελείως η database?

----------


## kioan

> τι θα γινει αν γεμίσει τελείως η database?

----------

finos (08-11-16)

----------


## navar

που είναι το βιντεάκι τις παρουσίασης ρε ;;;;;;

----------


## finos

Σήμερα  το project έκλεισε 1 χρόνο r&d  και δεν τελείωσα ακόμα  :Sad:

----------


## Kernel Panic

> Σήμερα  το project έκλεισε 1 χρόνο r&d  και δεν τελείωσα ακόμα



με προκαλείς να τρολάρω!!!
ΧΡΟΝΙΑ ΠΟΛΛΑ!

----------


## manolena

> Σήμερα  το project έκλεισε 1 χρόνο r&d  και δεν τελείωσα ακόμα



Βαγγελακο, το τραβαει ο οργανισμος σου το πειραγμα ομως...

----------


## SProg

Γιατι τι κακο ειπε.

R & D = (R)ωταω και (D)ρολαρω.

----------


## finos

Research and development,��  :Lol:  
Δοστε troll αντέχω  έχω νέα το acs712 το .....  :Tongue2:

----------


## Fire Doger

Ένας χρόνος για πρώτο project και σε αντικείμενο που δεν γνωρίζεις δεν είναι πάρα πολύ. Πρέπει να μάθεις να διαχειρίζεσαι τους χρόνους και να έχεις ένα πλάνο την σειρά με την οποία θα τα κάνεις.
Το θέμα είναι ότι όταν τελειώσεις ότι χρησιμοποίησες να το κατέχεις σαν γνώση, αλλιώς πάντα θα είσαι στο ίδιο επίπεδο με τώρα. Όσο κάνεις copy paste κώδικα και περιμένεις να σου πούνε οι άλλοι γιατί δεν λειτουργεί δεν θα μάθεις να γράφεις κώδικα μόνος σου.

Για παράδειγμα ακούμπησες τα interrupt, αν κάτσεις και τα μάθεις 100% την επόμενη φορά που θα χρειαστείς interrupt δεν θα ρωτάς εδώ, σε 5 λεπτά θα το έχεις γράψει μόνος σου.
Και όταν λέω να τα μάθεις εννοώ σε επίπεδο asm, να ξέρεις τι θα κάνει αυτό που γράφεις σε C και έτσι θα γνωρίζεις και τα πιθανά προβλήματα εάν δεν λειτουργήσει, και φυσικά με λίγο διάβασμα θα μπορείς να μάθεις πως λειτουργούν και σε άλλη οικογένεια μΕ.

Πρέπει να νιώθεις άσχημα όταν κάτι λειτουργεί αλλά δεν ξέρεις γιατί. Το να γνωρίζεις τι κάνει και γιατί το κάνει σου δίνει την δυνατότητα να το κάνεις καλύτερο!
Αυτός είναι ο σκοπός του project, φέρνεις αυτό που χρειάζεσαι στα μέτρα σου. Και με όσα περισσότερα γνωρίζεις το κάνεις πιο γρήγορα και πιο αποδοτικά (και δεν ασχολείσαι με @@ που δεν έχουν αξιόλογα περιθώρια βελτίωσης).

*Ποιο πολύ Copy, Fail, Ask & Paste είσαι :Lol: 
Αν στην πλακέτα δεν βάλεις "Powered by Hlektronika.gr" θα είσαι για κλοτσιές :Lol:

----------


## finos

Όλες πι πλακέτες είναι. Point to point , όταν θα ανοίγει πάντως λέει αυτούς που βοήθησαν. Εσείς δλδ

----------


## Fire Doger

πι? Raspberry *PI*?

Μην μου πεις ότι 1+ χρόνο project θα το κάνεις σε καμιά διάτρητη.... :Blink:

----------


## kioan

> Μην μου πεις ότι 1+ χρόνο project θα το κάνεις σε καμιά διάτρητη....



Όχι απλώς διάτρητη, διαμελισμένη  :Biggrin:

----------


## finos

εχω φταζει σε σιμιο να μην μου φτανουν τα pin από το mrga

----------


## finos

http://www.ebay.com/itm/MICROCHIP-MC.../351381473730? 
εχω αυτό στελνψ εντολη  για  max δλδ 



```
SPI.transfer(0);
SPI.transfer(256);
```


και η τημη ειναι 5,4κ λετε ο κινεζος να μου εστειλε την  5κ εκδοση ?

----------


## Fire Doger

> http://www.ebay.com/itm/MICROCHIP-MC.../351381473730? 
> εχω αυτό στελνψ εντολη  για  max δλδ 
> 
> 
> 
> ```
> SPI.transfer(0);
> SPI.transfer(256);
> ```
> ...



ΑΑΑΑ το αγαπημένο μου θέμα, τι έγινε που χάθηκες? :Tongue2: 

Βήμα 1: Του βάζεις "φωτιά" (τροφοδοσία μόνο, άσε τα data και τα arduina κλπ)
Βήμα 2: Παίρνεις το πολύμετρο, το ρυθμίζεις στα Ω και μετράς P0B-P0A, ότι μετρήσεις τόσο είναι το μέγιστο.
Βήμα 3: Αν είναι 10k και τα έχεις κάνει μαντάρα στον κώδικα κατεβάζεις *αυτό* και το χρησιμοποιείς ή προσπαθείς να δεις τι κάνει και που έκανες το λάθος εσύ.

*Μάλλον μαντάρα είναι ο κώδικας σου, δεν το διάβασα όλο το datasheet και αν δεν πετύχει το βήμα 2 δοκίμασε και με την βιβλιοθήκη καλού κακού.

----------


## finos

θελει να βαλω το miso στο mosi με μια αντησταση? εγω δεν το εκανα αυτο :W00t:  :Blush:  :Blushing:

----------


## Fire Doger

Δεν νομίζω να είναι αυτός ο λόγος που δεν δουλεύει.
Δοκίμασες με την βιβλιοθήκη?
Μέτρησες με το πολύμετρο?

----------


## finos

πολυμετρο βγαζει 6,8κ
με την βιβλιοθήκη δεν προλαβα

----------


## SeAfasia

εγώ παλέυω να μάθω C και έχω *αγανακτήσει στο διάβασμα.....*
Αυταααααά...!!!

----------


## picdev

Για να μάθεις c θες καμια δεκαετία

----------


## Fire Doger

Ο προγραμματισμός είναι σαν κάθε άλλη γλώσσα, αν την "μιλάς" 12 ώρες την μέρα την μαθαίνεις. Άνθρωποι την έγραψαν και αυτήν.
Και το υπόβαθρο στην αρχιτεκτονική του μΕ σου αρκεί για να καταλάβεις γιατί κάποιες πράξεις είναι ποιο γρήγορες από άλλες, λιγότερο απαιτητικές κλπ.

Άμα σε κόφτει να γράφεις κώδικα μετά μόνο θέμα εξάσκησης είναι, μην σε παίρνει από κάτω. :Wink: 
Και πάνω απ' όλα καλό compiler!

----------


## Kernel Panic

> εγώ παλέυω να μάθω C και έχω *αγανακτήσει στο διάβασμα.....*
> Αυταααααά...!!!



πως σε καταλαβαίνω!!!

----------


## finos

```
const byte ledPin = 13;
 const byte interruptPin = 2;
 volatile byte state = LOW;

void setup() {
   pinMode(ledPin, OUTPUT);
   pinMode(interruptPin, INPUT_PULLUP);
   attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
   digitalWrite(ledPin, state);
}

void blink() {
   state = !state;
```


για να ενερφωπιησω το interrupt μεσω software μπωρω απλα να να πω το loop 



```
blink();
```


και να τρεξει ο κωδικας του Interupt ?
αρα το blink είναι απλα μια "κλασική ¨" function και το interrupt όταν ενεργοποιηθει θα τρεξει το blink σωστα

----------


## manolena

Απο ό,τι φαίνεται, εσύ θέλεις να ενεργοποιήσεις μέσω ενός input interrupt μια εξωτερική διακοπή αλλά κάνοντάς της trigger μέ τη βοήθεια ενός απο τα pin του που είναι ορισμένο σαν output. Έτσι δεν είναι;
Αν βάλεις λοιπόν την blink() μέσα στο loop() θα σου χτυπάει διακοπή κάθε φορά που αυτή η συνάρτηση θα εκτελείται γιατί αλλάζεις κατάσταση στο state (γιατί το ορίζεις σαν byte και όχι σαν boolean δεν
καταλαβαίνω). Και επειδή δεν έχεις βάλει καθόλου καθυστέρηση, θα στο πηγαίνει υπερηχητικά, δεν θα μπορέσεις να δείς πως δουλεύει σε "ανθρώπινους" χρόνους...

Tip: επειδή μαθαίνεις, καλό θα ήταν να χρησιμοποιούσες το σειριακό μόνιτορ και να βάζεις σε συγκεκριμένα σημεία του κώδικα που γράφεις κάποια μηνύματα που θα σε βοηθήσουν να καταλάβεις τι 
κάνεις σε πραγματικό χρόνο όταν γίνονται διάφορα πράγματα μέσα στον κώδικά σου. Το σειριακό μόνιτορ είναι ένα πολύ καλό εργαλείο στα χέρια σου.

----------


## Fire Doger

Έχει μια βάση αυτό που έγραψες αλλά το πρόβλημα είναι ότι θα καταναλώνεις κύκλους σε κάθε loop για να γράψεις στον register το state ενώ μπορεί να είναι ίδιος.

Μια ποιο σωστή προσέγγιση θα ήταν να είναι κάπως έτσι:



```
const byte ledPin = 13;
const byte interruptPin = 2;
byte state = LOW;
volatile bool Change_State= False;

void setup() {
   pinMode(ledPin, OUTPUT);
   pinMode(interruptPin, INPUT_PULLUP);
   attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
   if(Change_State){
       state=!state;
       digitalWrite(ledPin, state);
       Change_State= False;
   }

}

void blink() { 
Change_State= True;
}
```


Όταν θα έρθει το interrupt θα ανεβεί μια σημαία να αλλάξει κατάσταση. Και στην loop που υποτίθεται δεν έχει κάτι καλύτερο να κάνει θα ελέγχει την σημαία και αν την βρει σηκωμένη θα αλλάζει κατάσταση και θα την κατεβάζει. Έτσι σε κάθε loop απλώς θα κάνει έλεγχο αν κάτι χρειάζεται ενημέρωση και μόνο τότε θα το ενημερώνει. Σε κάτι τόσο απλό μπορείς και απευθείας απ' το interrupt να αλλάζεις κατάσταση, το να κρατάς τα interrupt μικρά είναι ένας γενικός κανόνας για να αποφύγεις δυσάρεστες καταστάσεις αλλά εφόσον γνωρίζεις τι κάνεις μπορείς να κάνεις και άλλα πράγματα εκτός από σημαίες.

Το ποιο σημαντικό είναι να ξέρεις ποια είναι τα ευπαθή σημεία του κώδικά σου που δεν σηκώνουν να τα διακόψεις όπως για παράδειγμα πολύ συνηθισμένο η μεταφορά δεδομένων όπου ο χρονισμός είναι σημαντικός, σε αυτές τις περιπτώσεις πριν στείλουμε κάτι κλείνουμε τελείως τα interrupt για όσο χρόνο στέλνουμε τα δεδομένα και μόλις τελειώσει τα ξανά ενεργοποιούμε και αν έχει έρθει κάποιο interrupt κατά τον χρόνο που στέλναμε τα δεδομένα το εξυπηρετεί τότε ανάλογα με την σειρά προτεραιότητας.

Πολλές βιβλιοθήκες το λαμβάνουν υπόψιν αυτό, άλλες πάλι όχι οπότε πρέπει να είσαι πολύ προσεκτικός γιατί είναι ένα bug που δεν θα εμφανίζεται συνέχεια, 10 θα δουλεύει, 1 όχι.

Επίσης, αν έχεις είσοδο κάποιο κουμπί, τα interrupt είναι γρήγορα και το bounce το αντιλαμβάνονται οπότε με αυτόν τον κώδικα θα σου έρθουν πολλά interrupt το ένα πίσω απ' το άλλο, όταν έχεις έξοδο στην σειριακή αυτή θα καθυστερεί τον έλεγχο της σημαίας και δεν θα βλέπεις να φλικάρει. Πολλά παλαβά μπορεί να προκύψουν. Αν πχ  το Serial.print το βάλεις κάτω απ' το  Change_State= False; πολύ πιθανό έτσι όπως το βλέπω να μην αλλάζει κατάσταση το led γιατί κατά την εκτύπωση στην σειριακή ένα interrupt να το ξανακάνει high και να ξανά αλλάξει το led στο επόμενο loop.

Και τα external interrupt είναι συγκεκριμένα σε κάθε μΕ και μπορεί να μην υποστηρίζουν όλα το CHANGE ή το HIGH, LOW κλπ, αυτά τα βλέπεις στο datasheet.


Η συνάρτηση του interrupt είναι μια απλή συνάρτηση, η οποία ξεκινάει σε μια θέση μνήμης, όταν έρχεται το interrupt ουσιαστικά εκτελεί μια εντολή τύπου GO_TO που το στέλνει σε αυτήν την θέση μνήμης. Μπορείς αυτήν την συνάρτηση να την καλέσεις κανονικά. Σε μερικούς μΕ μπορείς να προκαλέσεις interrupt μέσω software σηκώνοντας χειροκίνητα την σημαία που ελέγχει η CPU για να εξυπηρετήσει τα interrupt. Σε μερικούς δεν γίνεται γιατί είναι ρυθμισμένοι σε αυτήν την σημαία αν στέλνεις 1 να γράφεται 0 και αν στέλνεις 0 να μην γίνεται τίποτα (αν θυμάμαι καλά)

Τα interrupt λύνουν πολλά προβλήματα αλλά πρέπει να τα παίζεις στα δάχτυλα για να μην σου δημιουργήσουν άλλα προβλήματα που είναι δύσκολο να βρεις χωρίς in circuit debugger.

*Edit: Άλλαξα σε volatile την μεταβλητή που αλλάζει στο interrupt, by Savvas :Wink:

----------


## SProg

Volatile κανουμε συνηθως μια μεταβλητη η οποια μοιραζεται και αλλαζει η τιμη της αναμεσα σε διακοπη και το κυριoς προγραμμα.

Αλλιως υπαρχει περιπτωση ο Compiler να αγνοησει κομματι κωδικα.

----------

Fire Doger (26-12-16)

----------


## finos

εχω προβλημα ...δεν μου φτανουν τα Pin του Mega  !!!!!!! για την ακριβια τα interupt 
αν θα βαλω due θα πρεπει να τα βαλω ολα 3,3ν το adc του due αντεχει και αυτο 3.3v ?
η οθονη (20χ4) θα καταλαβαίνει τα 3,3 και τα mcp4151 θα καταλεβενουν τα 3.3 ? 
το due θα το βαλω μονο και μονο για τα interupt του , αξιζει ? α  12 κουμπια εχω (8 button 2 ecoders )

----------


## manolena

Και μη χειρότερα!

Τι ακριβώς φτιάχνεις ρε Βαγγέλη και δεν σου φτάνουν 69 ψηφιακά ΄(μόνο) πινάκια; Ή 24 διακοπές (PCINT23); 'H 15 αναλογικές είσοδοι;

----------


## finos

το due θα το εβαζα μονο για το interupt του εχω 8buttons 2 encoders  και 1 ακομα που διαβαζει το constant curent led απο την πλακετα και το βγαζει στην οθονη ....που να τραβαω led στο front panel  24 interut to mega ???



> Mega, Mega2560, MegaADK
> 2, 3, 18, 19, 20, 21



6 μοναχά λεει το site

----------


## manolena

Τα σχετικά http://www.hlektronika.gr/forum/show...l=1#post801749 και 




...τα έχεις μελετήσει; Έχεις 24 εξωτερικές διακοπές σε αλλαγή στάθμης αν θέλεις, τις βλέπεις που είναι; (PCINT23 ===>>> *P*in *C*hange *INT*errupt)

----------


## manolena

Διάβασε για τη βιβλιοθήκη PinChangeInterrupt στη διεύθυνση https://github.com/NicoHood/PinChangeInterrupt




```
/*
 Copyright (c) 2014-2015 NicoHood
 See the readme for credit to other people.
 PinChangeInterrupt_HowItWorks
 Shows how to manually setup a single PCINT function with a few helper functions.
 Connect a button/cable to pin 7 and ground.
 The led will change its state if pin 7 changes.
 PinChangeInterrupts are different than normal Interrupts.
 See readme for more information.
 Dont use Serial or delay inside interrupts!
 This library is not compatible with SoftSerial.
 The following pins are usable for PinChangeInterrupt:
 Arduino Uno/Nano/Mini: All pins are usable
 Arduino Mega: 10, 11, 12, 13, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64),
               A11 (65), A12 (66), A13 (67), A14 (68), A15 (69)
 Arduino Leonardo/Micro: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI)
 HoodLoader2: All (broken out 1-7) pins are usable
 Attiny 24/44/84: All pins are usable
 Attiny 25/45/85: All pins are usable
 Attiny 13: All pins are usable
 Attiny 441/841: All pins are usable
 ATmega644P/ATmega1284P: All pins are usable
 */
```


https://www.arduino.cc/en/Hacking/PinMapping2560

*Arduino Mega 2560 PIN mapping table*Pin Number
Pin Name
Mapped Pin Name

1
PG5 ( OC0B )
Digital pin 4 (PWM)

2
PE0 ( RXD0/PCINT8 )
Digital pin 0 (RX0)

3
PE1 ( TXD0 )
Digital pin 1 (TX0)

4
PE2 ( XCK0/AIN0 )


5
PE3 ( OC3A/AIN1 )
Digital pin 5 (PWM)

6
PE4 ( OC3B/INT4 )
Digital pin 2 (PWM)

7
PE5 ( OC3C/INT5 )
Digital pin 3 (PWM)

8
PE6 ( T3/INT6 )


9
PE7 ( CLKO/ICP3/INT7 )


10
VCC
VCC

11
GND
GND

12
PH0 ( RXD2 )
Digital pin 17 (RX2)

13
PH1 ( TXD2 )
Digital pin 16 (TX2)

14
PH2 ( XCK2 )


15
PH3 ( OC4A )
Digital pin 6 (PWM)

16
PH4 ( OC4B )
Digital pin 7 (PWM)

17
PH5 ( OC4C )
Digital pin 8 (PWM)

18
PH6 ( OC2B )
Digital pin 9 (PWM)

19
PB0 ( SS/PCINT0 )
Digital pin 53 (SS)

20
PB1 ( SCK/PCINT1 )
Digital pin 52 (SCK)

21
PB2 ( MOSI/PCINT2 )
Digital pin 51 (MOSI)

22
PB3 ( MISO/PCINT3 )
Digital pin 50 (MISO)

23
PB4 ( OC2A/PCINT4 )
Digital pin 10 (PWM)

24
PB5 ( OC1A/PCINT5 )
Digital pin 11 (PWM)

25
PB6 ( OC1B/PCINT6 )
Digital pin 12 (PWM)

26
PB7 ( OC0A/OC1C/PCINT7 )
Digital pin 13 (PWM)

27
PH7 ( T4 )


28
PG3 ( TOSC2 )


29
PG4 ( TOSC1 )


30
RESET
RESET

31
VCC
VCC

32
GND
GND

33
XTAL2
XTAL2

34
XTAL1
XTAL1

35
PL0 ( ICP4 )
Digital pin 49

36
PL1 ( ICP5 )
Digital pin 48

37
PL2 ( T5 )
Digital pin 47

38
PL3 ( OC5A )
Digital pin 46 (PWM)

39
PL4 ( OC5B )
Digital pin 45 (PWM)

40
PL5 ( OC5C )
Digital pin 44 (PWM)

41
PL6
Digital pin 43

42
PL7
Digital pin 42

43
PD0 ( SCL/INT0 )
Digital pin 21 (SCL)

44
PD1 ( SDA/INT1 )
Digital pin 20 (SDA)

45
PD2 ( RXDI/INT2 )
Digital pin 19 (RX1)

46
PD3 ( TXD1/INT3 )
Digital pin 18 (TX1)

47
PD4 ( ICP1 )


48
PD5 ( XCK1 )


49
PD6 ( T1 )


50
PD7 ( T0 )
Digital pin 38

51
PG0 ( WR )
Digital pin 41

52
PG1 ( RD )
Digital pin 40

53
PC0 ( A8 )
Digital pin 37

54
PC1 ( A9 )
Digital pin 36

55
PC2 ( A10 )
Digital pin 35

56
PC3 ( A11 )
Digital pin 34

57
PC4 ( A12 )
Digital pin 33

58
PC5 ( A13 )
Digital pin 32

59
PC6 ( A14 )
Digital pin 31

60
PC7 ( A15 )
Digital pin 30

61
VCC
VCC

62
GND
GND

63
PJ0 ( RXD3/PCINT9 )
Digital pin 15 (RX3)

64
PJ1 ( TXD3/PCINT10 )
Digital pin 14 (TX3)

65
PJ2 ( XCK3/PCINT11 )


66
PJ3 ( PCINT12 )


67
PJ4 ( PCINT13 )


68
PJ5 ( PCINT14 )


69
PJ6 ( PCINT 15 )


70
PG2 ( ALE )
Digital pin 39

71
PA7 ( AD7 )
Digital pin 29

72
PA6 ( AD6 )
Digital pin 28

73
PA5 ( AD5 )
Digital pin 27

74
PA4 ( AD4 )
Digital pin 26

75
PA3 ( AD3 )
Digital pin 25

76
PA2 ( AD2 )
Digital pin 24

77
PA1 ( AD1 )
Digital pin 23

78
PA0 ( AD0 )
Digital pin 22

79
PJ7


80
VCC
VCC

81
GND
GND

82
PK7 ( ADC15/PCINT23 )
Analog pin 15

83
PK6 ( ADC14/PCINT22 )
Analog pin 14

84
PK5 ( ADC13/PCINT21 )
Analog pin 13

85
PK4 ( ADC12/PCINT20 )
Analog pin 12

86
PK3 ( ADC11/PCINT19 )
Analog pin 11

87
PK2 ( ADC10/PCINT18 )
Analog pin 10

88
PK1 ( ADC9/PCINT17 )
Analog pin 9

89
PK0 ( ADC8/PCINT16 )
Analog pin 8

90
PF7 ( ADC7 )
Analog pin 7

91
PF6 ( ADC6 )
Analog pin 6

92
PF5 ( ADC5/TMS )
Analog pin 5

93
PF4 ( ADC4/TMK )
Analog pin 4

94
PF3 ( ADC3 )
Analog pin 3

95
PF2 ( ADC2 )
Analog pin 2

96
PF1 ( ADC1 )
Analog pin 1

97
PF0 ( ADC0 )
Analog pin 0

98
AREF
Analog Reference

99
GND
GND

100
AVCC
VCC

----------


## Fire Doger

Και 2 κανονικά ακόλλητα, δεν έχω ψάξει πως το πατσάρεις για να δουλέψουν

----------


## manolena

Είναι όντως ακόλλητα Στέφανε τα INT6 και INT7, δεν υπάρχουν στα headers κανενός MEGA. Μόνο σε custom κατασκευές αν τα προβλέψεις, έχουν κανονικά όλες τις δυνατότητες των υπολοίπων ΙΝΤ pins.

----------


## finos

με το ενσωματωμενο interupt δεν μπορώ να έχω πρόσβαση ?

----------


## manolena

Δεν καταλαβαίνω τι εννοείς με το "ενσωματωμένο interrupt"... Τα άλλα δηλαδή δεν είναι ενσωματωμένα;

----------


## Fire Doger

> με το ενσωματωμενο interupt δεν μπορώ να έχω πρόσβαση ?



Γιατί? γέμισες και την μνήμη??? :Blink:  :W00t:

----------


## finos

οχι κάλε χώρο εχω  :Rolleyes: 
τα interupt εχω γεμίσει μονο

----------


## SProg

99.99% δεν θες τοσα interrupt.

----------


## Fire Doger

> οχι κάλε χώρο εχω



Ε τότε τι σε πειράζει να βάλεις την βιβλιοθήκη?
Δεν την εμπιστεύεσαι? :Tongue2: 

Edit* Σάββα "δεν χρειάζεται", το τι θέλει Φίνος είναι αυτός ποιος ξέρει... :Rolleyes:  :Biggrin: 
Δεν πειράζει άσ' τον να τα δουλέψει να τα μάθει...
Την επόμενη φορά θα ξέρει ότι άμα βάλει ολόκληρο πληκτρολόγιο με interrupt θα μείνει χωρίς interrupt όταν τα χρειαστεί.
Μετά θα μάθει να κάνει πολυπλεξία γιατί τζάμπα πιν τρώνε τα κουμπιά κ.ο.κ.

----------


## finos

ε όταν εχω μαθει εναν Α τροπο για interupt ε μου ειναι καπως δισκολο ....να αλαξω

----------


## manolena

Σου 'χω πεί: να είσαι χαμαιλέων, να προσαρμόζεσαι άμεσα. Σπάσε λίγο τα μούτρα σου και άκου τα παιδιά, σε καλό θα σου βγεί.

----------


## finos

> 99.99% δεν θες τοσα interrupt.



εχω 8 κουμπια , 2 encoders(αρα 4) , 2 κουμπια των encoder και ενα  sence για οταν αναβει το led του constant curent . => 15 interupt  
οτι digital input εχω  απο τον χρηστη το βαζω σε interupt  εχω συνηθισει απο το c# ( η function που βγαίνει απο ενα button σε μια φορμα )  
ετσι τρεχω κατευθιαν οτι χριαζετε για το κουμπι 
καλα το κανω ?

----------


## Fire Doger

Ρε Βαγγέλη, ήσουν έτοιμος να αλλάξεις όλο το logic level και τον μΕ από 5V σε 3.3V, από 8bit σε 32bit, και δεν θέλεις να βάλεις 3 γραμμές κώδικα?

Έχω την εντύπωση πως τα μεγάλα πρότζεκτ δεν είναι για σένα, μένεις στάσιμος... Δεν θα σε βάλει κανείς εξετάσεις για τα external interrupt 0-5 (πρόσφατα τουλάχιστον :Tongue2: ) του έβγαλες το λάδι, πάνε παρακάτω. Έχουν πολλά κόλπα τα interrupt (μέχρι και multi tasking έχουν στίσει με βάση αυτά) μην κολλάς στο δέντρο και δεν βλέπεις το δάσος, αφού το έκανες έτσι κάν' το και αλλιώς.

*Edit: Τώρα είδα και το άλλο ποστ, μην μπερδεύεις την .ι. με την βούρτσα....
Και ότι input έχεις απ' τον χρήστη το βάζεις με polling συνήθως γιατί ο χρήστης είναι ποιο αργός και από την καθυστέρηση. interrupt αξίζει μόνο το led που το καλύτερο θα ήταν να έχεις απευθείας το σήμα για να προλάβει ο μΕ την καταστροφή πχ εξαρτημάτων.

----------


## manolena

_εχω 8 κουμπια_  ====> επιλογής είναι; Μπορείς να τα βάλεις όλα σε μια αναλογική είσοδο με διαιρέτη αντιστάσεων και να απασχολείς 1 πινάκι. Αν βάλεις και έναν timer να στο διαβάζει με διακοπή σε ανθρώπινους χρόνους, ποιό είναι το πρόβλημα;

_2 encoders(αρα 4) , 2 κουμπια των encoder_  ====> αυτά άστα σε 6 πινάκια όπως τα έχεις, αν είναι για την επιλογή τάσεων κτλ θα έχουν άμεση απόκριση

_και ενα sence για οταν αναβει το led του constant curent_  =====> αυτό τι είναι πάλι;

----------


## Fire Doger

> _και ενα sence για οταν αναβει το led του constant curent_  =====> αυτό τι είναι πάλι;



Δεν ξέρεις τι προσπαθεί να κάνει? Εμ ξέχασες τόσο παλιό που είναι.... :Rolleyes: 
Έχει πάρει ένα γραμμικό τροφοδοτικό, έχει αλλάξει τα ποτενσιόμετρα με ψηφιακά και προσπαθεί να κάνει ένα μεσάζοντα ανάμεσα σε αυτόν και το τροφοδοτικό για να αλλάζει τις τιμές ψηφιακά και να έχει και SCADA εφαρμογή στο pc.
To led είναι το constand current που ανάβει από κάποιο lm723 ίσως ή τελεστικό, δεν ξέρω ποιο γραμμικό έχει.

----------


## finos

> Δεν ξέρεις τι προσπαθεί να κάνει? Εμ ξέχασες τόσο παλιό που είναι....
> Έχει πάρει ένα γραμμικό τροφοδοτικό, έχει αλλάξει τα ποτενσιόμετρα με ψηφιακά και προσπαθεί να κάνει ένα μεσάζοντα ανάμεσα σε αυτόν και το τροφοδοτικό για να αλλάζει τις τιμές ψηφιακά και να έχει και SCADA εφαρμογή στο pc.
> To led είναι το constand current που ανάβει από κάποιο lm723 ίσως ή τελεστικό, δεν ξέρω ποιο γραμμικό έχει.



http://www.ebay.com/itm/0-30V-2mA-3A...item463e7149dc

----------


## Fire Doger

Βαγγέλη 1 χρόνο μετά έχει βγει περίπου αυτό που θέλεις να κάνεις, μήπως να το ξανασκεφτόσουν?
Καλά δεν είναι και ότι καλύτερο με το R2R που έχει αλλά μήπως θα σε βόλευε περισσότερο?

----------


## pstratos

O στόχος δεν είναι το τροφοδοτικό. Να μάθει θέλει το παλικάρι

----------


## finos

καλημερα 
εχω τα παντα σχεδον ετοιμα απο πλευρα hw και απο sw το παλεύω δεν θα λυσω ολο το κουτι ξανα για να βαλω αυτο ουτε επισεις θα "πεταξω " τωσες ωρες προγραματισμου (της scada εφαρμογης  :Rolleyes:  ) αν ημουν ακομα στον σχεδιασμο αντε στην breadboard θα το επερνα τρ θα παει ολος ο κόπος μου χαμένος και αυτο δεν μπορει να φτασει ουτε στο μικρο δαχτιλακι τις δηνατοτητες του δικου μου psu (* 0.01-2A 0-28V αυτο 0,1-4Α0-30ν το 'θκομ)* :Biggrin:

----------


## finos

πιος πιστεύετε θα ηταν ο καλητερος τροπος υπολογισμου της set εντασης και τασης δλδ σε τι τημες εχουν ρυθμιστει 
 ισως με map() αλλα θα ηταν ανακριβες .  :Unsure:  εχετε καμιά αλλη ιδέα ?

----------


## Fire Doger

> πιος πιστεύετε θα ηταν ο καλητερος τροπος υπολογισμου της set εντασης και τασης δλδ σε τι τημες εχουν ρυθμιστει 
>  ισως με map() αλλα θα ηταν ανακριβες .  εχετε καμιά αλλη ιδέα ?



Ξανα πάρτο απ' την αρχή.
Τι εννοείς "τροπος υπολογισμου της set εντασης και τασης?" υπολογισμό από που? διαιρέτη τασης? hall sensor?
Στο τι τιμές έχουν ρυθμιστεί το ξέρεις γιατί ο κώδικας τις ρύθμισε.
Την πραγματική τιμή του MCP?
Το τι έξοδος αναλογεί στην τιμή της αντίστασης?

----------


## finos

Σε "επεγγελματικα" τροφοδοτικα πχ rigol, siglent  βλέπεις την τάση που είναι σεταρισμενο  :Rolleyes:  και την τάση που έχει αυτή την στιγμή στην έξοδο το ίδιο για την έξοδο . καταλαβατε;

----------


## manolena

Όχι, δεν καταλάβαμε.

Η τάση που είναι σεταρισμένο είναι αυτή που έχεις φτιάξει εσύ απο τον κώδικα, μέσω του επιλογικού encoder. Ό,τι βάλεις στον encoder, ο κώδικας θα στο φτιάξει 
και θα στο παρουσιάσει. Είναι αυτό που είναι, δεν υπάρχει κάτι άλλο. Η τάση που υπάρχει την ίδια στιγμή στην έξοδο είναι δυναμικό μέγεθος, παίζει συνέχεια και 
εξαρτάται απο πολλούς παράγοντες το πως θα σου παρουσιαστεί. Δες εδώ:





Όταν θα μεγαλώσεις, θα φτιάξεις κι εσύ ένα τέτοιο.

----------


## Fire Doger

Ένα σωστό τροφοδοτικό κατ' εμέ είναι βασισμένο στην ανάδραση (feedback).
Όταν του λες βγάλε 30V δεν διαλέγει μια τιμή από ένα πίνακα και ότι βγάλει αλλά ανεβάζει την τάση μέχρι να είναι 30V διαβάζοντας συνεχόμενα την έξοδο.
Αντίστοιχα και το ρεύμα, του λες να είναι κάτω απο 1Α πχ και διαβάζει συνέχεια, αν είναι πάνω από 1Α κατεβάζει την τάση μέχρι να γίνει 1Α. Άρα έχεις 2 ρεύματα, το πραγματικό και το όριο.
Η 2η τάση που έχεις δει φαντάζομαι είναι από το Sense. Αν πχ θέλεις 20V, 10Α σε μια πλακέτα και το ρυθμίσεις στα 20V στην πλακέτα θα φτάσουν 18V λόγο της μεγάλης πτώσης τάσης που θα εμφανίσουν τα καλώδια λόγο του μεγάλου ρεύματος. Για αυτό υπάρχουν άλλα 2 καλώδια, τα Sense τα οποία μετράνε την τάση στο τέλος των καλωδίων μεταφοράς ισχύος και ρυθμίζουν τα 20V εκεί.

Στην τάση άσ' τα sense δεν πειράζει  :Tongue2: 

http://www.sunpower-uk.com/glossary/...emote-sensing/


Στο ρεύμα μπορείς να το βάζεις στο περίπου στην τιμή που θες και όταν μετράς ρεύμα μεγαλύτερο απ' το όριο να κατεβάζεις την τιμή του τρίμερ μέχρι να ανάψει το λαμπάκι στο όριο ρεύματος που θες

----------


## finos

Θέλω να βλέπω την τήμη που έχω ορίσει πχ στην ενταση οπως το βίντεο στην μέση

----------


## Fire Doger

> Θέλω να βλέπω την τήμη που έχω ορίσει πχ στην ενταση οπως το βίντεο στην μέση



Ακόμα δεν καταλαβαίνω την απορία σου.
10 στροφές στον encoder = 5V. Το γράφεις
ADC στην έξοδο = 2.5V Το γράφεις
10 στροφές στον άλλο encoder =2A. Το γράφεις
ADC στην αντίσταση που μετράει το ρεύμα = 1Α. Το γράφεις.
Τελος.

----------


## finos

καλημερα
ναι ακριβως αυτοο . με map θα ατο κανω ( την συσχετιση της τημης του encoder με την ταση (150 sto encoder 15ν ατην εξοδο ))?
με map θεωρητικα που  το δοκιμασα  ηταν πολη ανακρηβες ....(σε exel(150,15.2,18 (vpos ,adc voltage, maped voltage ) ))

----------


## Fire Doger

Ε?
Θα πάρεις την τάση εξόδου.
Θα πάρεις τα step του mcp.
Θα τα διαιρέσεις και θα βρεις τι τάση αναλογεί σε ένα βήμα μεταβολής στο mcp.
Θα διαλέξεις 1 βήμα του encoder να αναλογεί σε τιμή χαμηλότερη από αυτήν της μεταβολής και να είναι στρόγγυλο νούμερο.
Κάθε φορά που θα σου έρχεται interrupt από τον encoder θα προσθέτεις/αφαιρείς το νούμερο που έχεις διαλέξει.
Και μετά με διαίρεση (τιμή από encoder/βήμα μεταβολής) θα βρίσκεις την θέση στην οποία πρέπει να ρυθμίσεις το mcp.

Δες και αυτό EEZ PSU, Github

----------

aktis (05-03-17)

----------


## manolena

Πω πω ρε Στέφανε.... Που το ξετρυπωσες αυτό πάλι;

----------


## Fire Doger

> Πω πω ρε Στέφανε.... Που το ξετρυπωσες αυτό πάλι;



EEVBlog http://www.eevblog.com/forum/project...h-psu-0-50v3a/
Από πολύ παλιά το έχω βάλει στο μάτι το post :Tongue2: 

Ε μλκια, μέχρι 24/2 ήταν ανοιχτό για preorder διάφορα έπρεπε να το ανεβάσω.
Δεν έχει τελειώσει ακόμα, όταν τελειώσει σκέφτομαι να το κάνω port στο Altium για εξάσκηση

----------


## manolena

Φυτευτό πάνω σε DUE; Τι άλλο θα δω ακόμα... 0d011f9bf6750e34defe2b298322e29b_free-thumbs-up-clipart-thumbs-up-clipart-free_512-430.png

----------


## Fire Doger

Μόνο το design στην οθόνη μου φάνηκε άσχημο
Το έχει σπάσει πολύ ωραία, απ' την μια σκέφτομαι να το κάνω απ' την άλλη δεν έχει μεγάλη διαφορά από ένα Rigol
Μέχρι και πρόγραμμα για να σχεδιάζει τις οθόνες έκανε
https://www.youtube.com/channel/UC05...gsvWszQ/videos

----------


## finos

wow  :W00t:

----------


## finos

ευρικα ευρικα :Tongue2: 



```
int vset=0;
int vinceiment =0.5;
void updateEncoderv() {    nv = digitalRead(encodervPinA);
    if ((encodervPinALast == LOW) && (nv == HIGH)) {
        if (digitalRead(encodervPinB) == LOW) {
            VPos--;//add the pos for mcp 
			vset=vset-vinceiment;//then add or subtract the voltage incriment of the psu 
			
        }
        else {
            VPos++;
			vset=vset+vinceiment;
        }
        Serial.print(VPos);
        Serial.print("/");
    }
    encodervPinALast = nv;
}
```


ας υποθεσουμε οτι τα βήματα της τασης ειναι 0.5v (vinceiment) 
τοτε με βαση αυτο υπολογιζω την vset  καλο σαν σκεψη ? 
 :Blush:  :Wink:

----------


## manolena

> wow



Μικρέ, το δικό μου το έχεις δεί; Όχι wow και μλκίες...

----------


## finos

ενταζει οι δικες ας κατασκευες ειναι wow^100000  :Rolleyes:  εσεις το εχετε παει σε αλο επίπεδό

----------


## Fire Doger

Γιατί να υποθέσουμε? Εφαρμογή κάνεις όχι σχεδιασμό.
Να δω πως θα βγάλεις 3.3 με το 0.5 σου.... :Tongue2: 
Ρε δεν σ είπα το mcp θα το ορίζεις ανάλογα με το feedback? Στα κουτουρού ούτε κατά λάθος δεν θα πετύχεις το set με το πραγματικό.

Κάνεις λάθος, απλή εφαρμογή είναι οι περισσότερες κατασκευές.
Όσες περισσότερες γνώσεις έχεις τόσα περισσότερα τουβλάκια έχεις διαθέσιμα για να χτίσεις κάτι.
Επίσης σε κάθε κατασκευή όταν βλέπεις πως τα τουβλάκια που έχεις δεν σου φτάνουν ή δεν είναι τόσο καλά τότε μαζεύεις καινούρια.
Άμα μόνο ενώνεις τουβλάκια τότε πάντα θα περιμένεις απ' τους άλλους να σου δανείσουν τα δικά τους.
Μάθε να μαζεύεις τουβλάκια όταν σου εμφανίζονται.

----------


## finos

γιατι ακομα δεν βρικα το ακριβες ποσο ειναι σαν ενα "proof of concept" 
αυτο πο λες δεν το καλαβα πως θα το κανω με feedback ?

----------


## Fire Doger

Δεν θα υπάρχει αντιστοιχία 1-1.
Θα βάλεις έναν διαιρέτη τάσης στην έξοδο του τροφοδοτικού.
Θα γυρνάς τον encoder, αν γύρισε μια φορά δεξιά θα προσθέτει 0.1 στο set, αν γύρισε μια φορά αριστερά θα αφαιρείς 0.1 απ' το set.

Στην συνέχεια θα καλείς μια function που θα ρυθμίζει την έξοδο ανάλογα με το set.
Την ίδια function θα καλείς όταν το set προέρχεται απ' τον υπολογιστή (να κοιτάς μπροστά όταν γράφεις κώδικα).

Θα διαβάζει τον διαιρέτη τάσης, αν το set είναι διαφορετικό κατά τουλάχιστον την τάση που αλλάζει ανά βήμα θα κουνάει 1 βήμα το mcp, μετά θα ξαναδιαβάζει τον διαιρέτη, αν πάλι έχουν διαφορά θα ξανακουνάει το mcp, μέχρις ότου να φτάσει στο σημείο που αν πάει 1 βήμα πάνω το mcp να είναι μεγαλύτερο του set και 1 βήμα κάτω να είναι μικρότερο του set.

Επειδή τον encoder τον έχεις σε interrupt δεν θα το κάνεις όλο αυτό μέσα στο interrupt εννοείτε, θα σηκώνεις μια σημαία κάθε φορά που αλλάζεις το set και στην loop θα ελέγχεις την σημαία, αν άλλαξε θα ενημερώνεις την έξοδο και θα κατεβάζεις την σημαία.

----------


## finos

Κάπου είχα διαβάσει οτι δεν πρέπει να έχουμε πολύ κώδικα να τρέχει μέσα σε interupt σωστα ? Γιατί αυτό ;

----------


## SProg

Γιατι οσο εισαι μεσα σε ενα interrupt , μπορει να χασεις καποιο event ή δεδομενα.

----------


## Fire Doger

Άμα είσαι σε interrupt και έρθει 2ο interrupt πρώτα θα περιμένει να τελειώσει το δικό σου, θα εκτελέσει μια εντολή σε asm και μετά θα μπει στο επόμενο. Άρα άμα έχεις πολλά interrupt δεν εκτελείτε σχεδόν καθόλου ο κώδικας, χάνεις δεδομένα όπως είπε ο Σάββας και άλλα περίεργα.
Στους 32 bit pic πχ ορίζεις πόσο σημαντικό θα είναι το interrupt και τα ποιο σημαντικά διακόπτουν τα άλλα αλλά αυτό πάει ανάλογα με την οικογένεια μΕ.

Ότι θέλεις κάνεις εφόσον ξέρεις τι κάνεις. Αλλά επειδή μάλλον δεν θα ξέρεις τι κάνεις (πόσο μάλλον στο arduino που δεν ξέρεις τίποτα) τα κρατάς μικρά.

----------


## finos

αρα : ποτε δεν τρεχεις functions απο Interupt .
        μικρος κωδικας (μαχ πόσες γραμμες ?).


threading οπως c# δεν υπαρχει? (για να τρεχουν παραλληλα)

----------


## MacGyver

Για να εκτελέσεις κάτι real time  πρέπει να το επεξεργάζεσαι με vintage υλικά, CD40XX, 74ΧΧ, δηλαδή με παράλληλη λογική. Οι επεξεργαστές κάνουν χίλια δύο, αλλά το κάνουν σειριακά.
Κάτι σαν την πόρτα στα bar.

----------


## Fire Doger

> αρα : ποτε δεν τρεχεις functions απο Interupt .
>         μικρος κωδικας (μαχ πόσες γραμμες ?).
> 
> 
> threading οπως c# δεν υπαρχει? (για να τρεχουν παραλληλα)



Δεν έχει max και min και σίγουρα δεν πάει σύμφωνα με τον αριθμό των γραμμών.
Έτσι μπορείς να μετράς τον χρόνο interrupt όταν δεν έχεις λύσεις καλού compiler-programmer:
Μόλις μπαίνει στο interrupt θα κάνεις ένα pin high και ακριβώς πριν βγει θα το κάνεις low, και σε παλμογράφο βλέπεις τον χρόνο.

Όχι, 1 cpu έχεις....
Όταν γράφεις κώδικα για μΕ θα σκέφτεσαι το πως λειτουργεί ο μΕ σου.
Φυσικά μπορείς να έχεις πολλές λειτουργίες οι οποίες να διακόπτουν την βασική για να εκτελεστούν.
Ο μΕ έχει Timers, δούλεψε με αυτούς.


Άμα θες multitasking μάθε fpga :Tongue2:

----------


## finos

ειναι φισιλογικο μετα απο 1-2 λεπτα χρησης ενας atmega 328p να ζεσταίνετε πολυ ?

----------


## Fire Doger

> ειναι φισιλογικο μετα απο 1-2 λεπτα χρησης ενας atmega 328p να ζεσταίνετε πολυ ?



ΟΧΙ!!!
Σιγά μην χρειάζεται και cooler  :Tongue2:

----------


## thanasis 1

> ειναι φισιλογικο μετα απο 1-2 λεπτα χρησης ενας atmega 328p να ζεσταίνετε πολυ ?



Καλα ρε φινο του εκανες overclocking?? :Scared: 
Στα ποσα Mhz τρεχει τωρα??

----------


## finos

δεν ξερω τι εκανα δεν ξερω καν τι κωδικα του τρεχω ......




> Στα ποσα Mhz τρεχει τωρα??



4,9thz :Tongue2:

----------


## Fire Doger

> Καλα ρε φινο του εκανες overclocking??
> Στα ποσα Mhz τρεχει τωρα??



Μπα δεν παίζει να άλλαξε clock, δεν θα μπορούσε να ξανασετάρει όλα τα περιφερειακά για τον άλλο κρύσταλλο...
Εγώ ποντάρω στο ότι πάει τάπα όλα τα pin στα 40mA :Tongue2: 

*Μπορούμε να το κάνουμε λίγο ποιο ενδιαφέρον :Wink: , να ακούσουμε και άλλες προβλέψεις πριν ανεβάσει σχηματικό

----------


## finos

ΔΕΝ ΕΧΕΙ ΤΠΤ σηνδεμενο επανω μονο usb

----------


## Fire Doger

> ΔΕΝ ΕΧΕΙ ΤΠΤ σηνδεμενο επανω μονο usb



Μόνο εσύ θα μπορούσες να το κάνεις αυτό... :Confused1: 
Μέτρα τα 5V, μπορεί το pc να βγάζει πολλά V.
Βάλε ένα παράδειγμα με blink led ή Serial και αν δεν δουλεύει τον έκαψες.
Αν δουλεύει δοκίμασε όλα τα pin.
Καινούριο είναι ή το έχεις ξαναδουλέψει?
Μάλλον κουβά πάει αφού το ζέστανες

----------


## alefgr

Μου έχει τύχει στις πρώτες μου απόπειρες με το 328 επάνω σε breadboard, κατά λάθος να δώσω 12V στο pin 28. Μετά από αυτό το σοκ ο m/c δούλευε άψογα, χωρίς φυσικά να δουλεύει πιά το ADC5 και με το σύμπτωμα να αναπτύσσει μια σχετική θερμοκρασία. Γι' αυτό του πέρασα μόνιμα τον κώδικα του AVR ISP και από τότε τον έχω αποκλειστικά για αυτή την δουλειά.

Μια "σοφή" παροιμία των ηλεκτρονικών λέει: αν δεν κάψεις δεν θα μάθεις...

----------


## MacGyver

Τις εισόδους και τις εξόδους ενός πολυεργαλείου όπως είναι οι μικροεπεξεργαστές, ποτέ δεν τις συνδέουμε γυμνές με "εξωτερικά" περιφερειακά.
Με δεδομένο ότι δουλεύουν στα 2v-5v είναι σίγουρο ότι θα πάθουν ζημία, όσο και αν προσέχουμε.
Οι απευθείας συνδέσεις είναι μόνο για ίδιας κατηγορίας ολοκληρωμένα με ίδια τροφοδοσία, στην ίδια πλακέτα.
Για οτιδήποτε remote απαιτείται ένας διαιρέτη τάσης για τις εισόδους, ο οποίος θα ληφθεί υπόψιν στο πρόγραμμα και ένα general purpose transistor για τις εξόδους και φυσικά μόνο για την περίπτωση που υπάρχει η δυνατότητα κοινού αρνητικού πόλου μεταξύ των συσκευών.
Για την απομόνωση του μικροεπεξεργαστή, αντί για transistor μπορεί να μπει optocoupler που παρέχει επιπλέον και γαλβανική απομόνωση.

----------


## Fire Doger

Να κάνω και εγώ μια ερώτηση σχετική με το περιεχόμενο του θέματος :Tongue2: 
Έχω μια συνάρτηση πχ
void test(char* x){}

Άμα την καλέσω test("1234"); μου βγάζει warning (αφού τα έχω ενεργοποιήσει, δεν ξέρω αν βγαίνουν στις απλές ρυθμίσεις)
deprecated conversion from string constant to 'char*' [-Wwrite-strings]

Οπότε την έκανα void test(const char* x){} κομπλέ...

Η απορία μου είναι γιατί γκρινιάζει ο compiler, το 1234\0 θα το ψάξει αν υπάρχει και σε άλλο σημείο της RAM και όπου στέλνω "1234" στέλνει τον ίδιο δείκτη ή για άλλο λόγο?

----------


## finos

off topic ...  
ΑΑΑΑ!!! αυτες ειναι οι συναρτησεις που κανουμε τρ στην αλγευρα (α λυκειου)




> Έχω μια συνάρτηση πχ
> void test(char* x){}



πηγε εκει το μυαλο μ αλλα λεω θα τις εισάγω στων κωδικα διαφορετικα !!! αρα f(x) <=> void f (int x) !!!! :Huh:  :Rolleyes:

----------


## finos

> Να κάνω και εγώ μια ερώτηση σχετική με το περιεχόμενο του θέματος
> Έχω μια συνάρτηση πχ
> void test(char* x){}
> 
> Άμα την καλέσω test("1234"); μου βγάζει warning (αφού τα έχω ενεργοποιήσει, δεν ξέρω αν βγαίνουν στις απλές ρυθμίσεις)
> deprecated conversion from string constant to 'char*' [-Wwrite-strings]
> 
> Οπότε την έκανα void test(const char* x){} κομπλέ...
> 
> Η απορία μου είναι γιατί γκρινιάζει ο compiler, το 1234\0 θα το ψάξει αν υπάρχει και σε άλλο σημείο της RAM και όπου στέλνω "1234" στέλνει τον ίδιο δείκτη ή για άλλο λόγο?



char δεν οριζουμε με ' ' ?

----------


## Panoss

> Να κάνω και εγώ μια ερώτηση σχετική με το περιεχόμενο του θέματος
> Έχω μια συνάρτηση πχ
> void test(char* x){}
> 
> Άμα την καλέσω test("1234"); μου βγάζει warning



Με void test(char x){} δοκίμασες;

----------


## Fire Doger

Μα δεν θέλω 1 χαρακτήρα, συμβολοσειρά θέλω που να μην μπλέκει με το heap και κάνει allocation όπου νάνε χωρίς να υπάρχει λόγος.
Ο κώδικας μια χαρά σωστότατος είναι, η απορία μου στον compiler για το πως διαχειρίζεται αυτό το κομμάτι της C στην μνήμη και σε επίπεδο μηχανής.

Βαγγέλη άμα δεν μάθεις τα βασικά της C δεν θα πας πουθενά. Το * σου δίνει την θέση μνήμης που βρίσκετε κάτι. Αυτό μπορεί να είναι η αρχή δεδομένων οποιουδήποτε τύπου, είτε απλές τύπου int, είτε ποιο σύνθετες πχ πίνακας χαρακτήρων είτε ακόμα ποιο σύνθετες πχ χειροποίητα struct.
Επίσης μπορεί να είναι η αρχή μιας συνάρτησης. (Και άλλα φαντάζομαι μπορεί να είναι αλλά μέχρι εδώ ξέρω)
Το "1234" είναι 0χ31,0χ32,0χ33,0χ00 ή '1','2','3','/0'

void f1(){}

void f2(){}

main(){
void (*funPointer)(void);

funPointer=f1;
funPointer(); //Σε αυτό το σημείο θα καλέσει την f1

funPointer=f2;
funPointer(); //Σε αυτό το σημείο θα καλέσει την f2
}

**Edit
Ο τύπος μεταβλητής πριν τον pointer δείχνει πόσες πραγματικές θέσεις μνήμης θα μετακινηθεί ο pointer όταν του λες να πάει +1
Δηλαδή char* x;
x[1] είναι το επόμενο byte απ' την x[0]
uint32_t* y;
y[1] δείχνει μετά από 4 byte απ' την y[0] γιατί η uint_32 πιάνει 4 byte, εσύ θες τον επόμενο int όχι το 2ο byte του 1ου int
Ανάλογα και με τα υπόλοιπα.
Το *(οτιδήποτε) είναι ένας uint ανάλογα με το μέγεθος μνήμης, μπορείς να το αποθηκεύσεις, να κάνεις μεταβλητές να δείχνουν όπου νάνε και άλλα παρόμοια. Αυτό κάνουμε στην συνάρτηση, έχουμε μια μεταβλητή ορισμένη ως συνάρτηση και ρυθμίζουμε όταν εκτελείτε από ποια θέση μνήμης να φορτώσει η CPU την επόμενη εντολή.

(Σε γενικές γραμμές τα παραπάνω, εξαρτάται φυσικά απ' το αν δείχνει ROM, RAM, πως είναι οι μνήμες κλπ κλπ)
!!!! Άμα τα κάνεις σκατά με τους pointer πολύ πιθανό να καταστρέψεις μέρος προγράμματος, έχω χαλάσει αρκετές φορές τον bootloader

----------


## finos

:Cursing:  δεν δουλεει τι σκ@#$α εχω κανει



```
#include <SPI.h>int encodervPinA = 18;
int encodervPinB = 19;
int encoderaPinA = 20;
int encoderaPinB = 21;
int val;
int VPos = 0;
int APos = 0;
int encodervPinALast = LOW;
int encoderaPinALast = LOW;
int nv = LOW;
int na = LOW;
int cs1=42;
int cs2=44;
void setup() {
    pinMode(encodervPinA, INPUT_PULLUP);
    pinMode(encodervPinB, INPUT_PULLUP);
    pinMode(encoderaPinA, INPUT_PULLUP);
    pinMode(encoderaPinB, INPUT_PULLUP);
    attachInterrupt(4, updateEncoderv, CHANGE);
    attachInterrupt(5, updateEncoderv, CHANGE);
    attachInterrupt(3, updateEncodera, CHANGE);
    attachInterrupt(2, updateEncodera, CHANGE);
  Serial.begin(9600);
  SPI.begin();
    pinMode(cs1,OUTPUT);
    pinMode(cs2,OUTPUT);
    digitalWrite(cs1,HIGH);
    digitalWrite(cs2,HIGH);
}
void loop() {
}
void updateEncoderv() {
    nv = digitalRead(encodervPinA);
    if ((encodervPinALast == LOW) && (nv == HIGH)) {
        if (digitalRead(encodervPinB) == LOW) {
            VPos--;
        }
        else {
            VPos++;
        }
       digitalWrite(cs1,LOW);//c
SPI.transfer(0);
SPI.transfer(VPos);//c5t34t4
delay(10);
digitalWrite(cs1,HIGH);
        Serial.println(VPos);
        Serial.print("vpos/");
    }
    encodervPinALast = nv;
}
void updateEncodera() {
    na= digitalRead(encoderaPinA);
    if ((encoderaPinALast == LOW) && (na == HIGH)) {
        if (digitalRead(encoderaPinB) == LOW) {
            APos--;
        }
        else {
            APos++;
        }
      digitalWrite(cs2,LOW);
SPI.transfer(0);
SPI.transfer(APos);
delay(10);
digitalWrite(cs2,HIGH);
        Serial.print(APos);
        Serial.println("apos/");
    }
    encoderaPinALast = na;
}
```


 οταν δεν κουναω τα encoders ανεβενει - κατεβαίνει rundomly 
εκαν κατι λάθος?

----------


## finos

> Έχει μια βάση αυτό που έγραψες αλλά το πρόβλημα είναι ότι θα καταναλώνεις κύκλους σε κάθε loop για να γράψεις στον register το state ενώ μπορεί να είναι ίδιος.
> 
> Μια ποιο σωστή προσέγγιση θα ήταν να είναι κάπως έτσι:
> 
> 
> 
> ```
> const byte ledPin = 13;
> const byte interruptPin = 2;
> ...



Κλείνουμε τα interupt κάνοντας detachinterrupt() ?

----------


## Fire Doger

> Κλείνουμε τα interupt κάνοντας detachinterrupt() ?



*ΤA* interrupt κλείνουν από το Interrupt Enable bit.
*ΤO* interrupt το ελέγχεις από το Interrupt Enable bit που έχει, μερικά περιφερειακά έχουν πολλούς λόγους να δώσουν interrupt, αρα πολλά bit...

Στην wiring μάλλον με αυτήν την συνάρτηση κλείνει το interrupt για το πιν.

----------


## finos

Δεν κατάλαβα .....

----------


## Fire Doger

Μερικά περιφερειακά έχουν κάποιους λόγους να δώσουν interrupt, δηλαδή να σηκώσουν 1 bit.
Το αν θα σηκώσουν το bit όταν έρθει η στιγμή που πρέπει να το σηκώσουν εξαρτάται από 1 άλλο bit.
Αν θέλεις να κλείσεις 1 interrupt τότε κλείνεις "το άλλο" bit για να μην σηκώνετε η σημαία που προκαλεί interrupt.

Αν θες να κλείσεις όλα τα interrupt γιατί κάνειςβ κάτι πολύ σημαντικό που δεν σηκώνει διακοπή τότε κλείνεις το bit που ελέγχει το αν θα ακούει η cpu τις σημαίες και πάει στα διανύσματα και δεν κάνει σε τίποτα interrupt.
(Στο arduino έχει σαν αποτέλεσμα να μην δουλεύει ούτε η millis και δεν μπορείς να κάνεις πολλά πράγματα γιατί πολλά interrupt γίνονται χωρίς να το βλέπεις)
Μόλις το σηκώσεις θα πάει στα interrupt που έχουν έρθει με σειρά προτεραιότητας.

Αν θες να κάνεις detach και μετά να το ξανανοίξεις με attach το πιο σωστό είναι να ανοίγωκλείσεις το bit.
Αλλά επειδή δεν ψήνεσαι να το ψάξεις φαντάζομαι κάντο έτσι.

*Hard Tip: στη C τα interrupt πηδάνε σε συνάρτηση με συγκεκριμένο όνομα για το κάθε διάνυσμα που το ρυθμίζει κατά το compile και δεν αλλάζει, για να μπορείς να το αλλάζεις live φαντάζομαι σε εκείνη την συνάρτηση φορτώνει τον δείκτη που έχεις ρυθμίσει με την attach από την Ram και ξαναπηδαει στην δικιά σου συνάρτηση.

----------


## finos

δηλαδη πριν ξεκινισω να στέλνω data στην σειριακη κανω detach() και μόλις τελειωσω την αποστολή ξανα κανω attach() ? 
...το εχω .....νομιζω 

πασχα τρ ... εχεις κανα link  να διαβασω αυτα που λες για τα bit και τοις σημαίες ;

----------


## finos

εχουμε προβλημα, με αυτη την σηνδεσμολογια και χωρις να  δεινω ρευμα στο psu  το arduino και το mcp  δουλεύουν πολύ καλά.  μόλις άναψα το τροφοδοτικό (αναμεσα P0B -P0A 10V μονο αυτα συνδεσα )  το arduino σταματισε να στελνει data στην  συριακη κι ακομα οταν εβγαλα το  arduino απο την usb επερνε ρευμα ακομα ......ΑΠΟ ΤΟ MCP !!!! ισως με opto-cupler και ξεχοριστο psu (7805 ισως , μονο για το mcp ) θα διορθοθει λετε ? εχω κανει κανα αλο λαθος ? 

το psu ειναι αυτο

----------


## Fire Doger

Άμα δεν καταλάβεις το λάθος σου πως θα το διορθώσεις?
Άιντε πετάμε οπτοζεύκτες όπου νάνε και ότι γίνει?
Το σχέδιο δεν ανοίγει. Ανέβασε το κανονικά και βλέπουμε.

----------


## finos

mega-mcp4251-psu.pdfκαι ο κωδικας 


```
#include <SPI.h>const int slaveSelectPin = 10;
const int shutdownPin = 7;
const int wiper0writeAddr = B00000000;
const int wiper1writeAddr = B00010000;
const int tconwriteAddr = B01000000;
const int tcon_0off_1on = B11110000;
const int tcon_0on_1off = B00001111;
const int tcon_0off_1off = B00000000;
const int tcon_0on_1on = B11111111;


int encodervPinA = 18;
int encodervPinB = 19;
unsigned int VPos = 0;
int nv = LOW;
int encodervPinALast = LOW;


void setup() {
    pinMode(encodervPinA, INPUT_PULLUP);
    pinMode(encodervPinB, INPUT_PULLUP);
    attachInterrupt(4, updateEncoderv, CHANGE);
    attachInterrupt(5, updateEncoderv, CHANGE);
    Serial.begin(9600);
    pinMode (slaveSelectPin, OUTPUT);
  // set the shutdownPin as an output:
  pinMode (shutdownPin, OUTPUT);
  // start with all the pots shutdown
  digitalWrite(shutdownPin,LOW);
  // initialize SPI:
  SPI.begin(); 
}


void loop() {
  // put your main code here, to run repeatedly:


}
void digitalPotWrite(int address, int value) {
  // take the SS pin low to select the chip:
  digitalWrite(slaveSelectPin,LOW);
  //  send in the address and value via SPI:
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip:
  digitalWrite(slaveSelectPin,HIGH); 
}
void updateEncoderv() {
    nv = digitalRead(encodervPinA);
    if ((encodervPinALast == LOW) && (nv == HIGH)) {
        if (digitalRead(encodervPinB) == LOW) {
            
            VPos--;
        }
        else {
            VPos++;
        }
       
        Serial.print(VPos);        
        digitalWrite(shutdownPin,HIGH); //Turn off shutdown
        digitalPotWrite(wiper0writeAddr,VPos);
        int sensorValue = analogRead(A0);
        float voltage= sensorValue * (5.0 / 1023.0);
        Serial.print("   ");
        Serial.println(voltage);
    }
    encodervPinALast = nv;
}
```






> Άμα δεν καταλάβεις το λάθος σου πως θα το διορθώσεις?



για αυτό ρωτάω, σκεφτηκα καλά για τους οπτοζεύκτες? εκει ειναι πρόβλημα?

----------


## Fire Doger

Αυτό δεν είναι σχέδιο Βαγγέλη, όλα λείπουν!
Τα Va-b είναι μεταξύ των ορίων που δίνει το datasheet? Vss-0.3 ~ Vcc+0.3 (Δηλαδή -0.3V ~ 5.3V)

Οπτοζεύκτες θα έβαζες μόνο στο usb to ttl, δηλαδή το usb θα τροφοδοτούσε μόνο 1 ftdi (ή κάτι παρόμοιο) και την τροφοδοσία του avr μαζί με των υπολοίπων θα την έβγαζες από τον μ/σ του τροφοδοτικού.
Αυτό σε περίπτωση που έχει ανωμαλία κάποια τροφοδοσία (είτε του τροφοδοτικού είτε του υπολογιστή) να μην περάσει απ' την μια συσκευή στην άλλη. Και πάνε παρέα με ESD protection αμέσως μετά τον κοννέκτορα USB.
πχ όπως παρακάτω, 2 γρήγοροι για Rx-Tx (ο άλλος είναι αργός που απλά ανάβει μόλις συνδεθεί το usb για να ξέρει ο avr αν αποσυνδέθηκε το usb και να κλείνει μόνος του)
Οπουδήποτε αλλού δεν χρειάζεσαι γαλβανική απομόνωση.

----------


## finos

η ταση αναμεσα P0A-P0B einai 10ν με γειοση σε P0B οχι μεταξι P0Aκαι gnd . υπαρχει διαφορετικο gnd  με το module του τροφοδοτικού.γιατι οταν συνδέω το mcp4251 με το psu  γιατί το arduino  σταματάει να αντιδράει ?

----------


## Fire Doger

Και ακόμα απορείς γιατί δεν δουλεύει?
1ον Διάβασες πως λειτουργεί το mcp? Όχι....

Λες να δουλέψει όταν οι τάσεις στις βάσεις των FET δεν έχουν καμία σχέση με τα gates-source? Δεν είναι ρελέ...
Δεν σύνδεσες GND και περιμένεις και να δουλέψει? Με ποιο σκεπτικό?
Εννοείτε πως όλα θα έχουν κοινή γείωση, και επειδή του pc συνήθως είναι ίδια με την ηλεκτρολογική θέλεις και στο PSU είτε ηλεκτρολογική είτε floating για να τις ενώσεις.

2. Το ρημάδι το datasheet δεν είδες ότι γράφει +0.3 to Vcc? Εσύ το τροφοδοτείς με 5V, τα 10V σου φαίνονται 5+0.3?

Γιατί μπορεί να κλείνει η θύρα στο pc λόγο προστασίας από ανάστροφη τάση, μπορεί να ανοίγει η ασφάλεια στο arduino κλπ κλπ...
Το περίεργο είναι αν συνεχίζουν να λειτουργούν ακόμα.

Το σχέδιο του τροφοδοτικού το ανάλυσες? Αν μπορείς να κατεβάσεις την τάση σε 5V έχει καλώς.
Αν δεν μπορείς τότε θα παίξεις με τελεστικό με χ2 ενίσχυση, αν θυμάμαι καλά σε συγκριτές με τελεστικούς είναι τα ποτενσιόμετρα οπότε θα πας εκεί το σήμα σου.

----------


## finos

οταν διαβασα το datasheet καταλαβα οτι εχει 256 διαφορετικες αντιστάσεις και αναλογα με τις εντολες που λαμβανει τοις βαζει σε σειρα .
αρα δεν ειναι ψηφιακο ποτενσιομετρο αν δεν μπορει να αντικαταστήσει ενα   ποτενσιομετρο . ground zero πάλι ....

edit 
δεν τροφοδότησα το  mcp &  το mega  με τα 10 v που βγαίνουν απο τα pins 1&3 του psu module  αυτα τα εβαλα στο P0a P0c  το mcp επερνε ρευμα  απο τα 5v του arduino

----------


## Fire Doger

Η φωτογραφία είναι από appnote του τι είναι ένα ψηφιακό ποτενσιόμετρο... :Tongue2:  http://ww1.microchip.com/downloads/c...s/cn544075.pdf
Έχει 255 αντιστάσεις σε σειρά και σε κάθε ένωση ένα FET, ανάλογα με το που ρυθμίζεις ανοίγει μόνο το συγκεκριμένο FET και ενώνει τον "δρομέα" στο σημείο που θες.
Αλλά το FET έχει συγκεκριμένο τρόπο λειτουργίας, δεν είναι dry contact επαφές, έχει περιορισμό για την τάση, το ρεύμα κλπ, όπως και ένα τρανζίστορ. Πλέον τα περισσότερα ηλεκτρονικά είναι με FET, τα νανόμετρα αν έχεις ακούσει στους επεξεργαστές είναι χαρακτηριστικό των mosfet. Έτσι λειτουργούν όλα. Δεν υπάρχουν μαγικά υλικά μέσα στα ολοκληρωμένα.

Διαφορετικά χρειάζεσαι 256 ρελέ...

Μπορεί να αντικαταστήσει 1 ποτενσιόμετρο, ίσως όχι μόνο του αλλά μπορεί!
Ας πούμε πχ ότι έχεις Α-GND 10V και B-GND 15V, θα του δώσεις Vcc 15V, Vss 10V και το SPI θα το περάσεις από level converter 0-5 -> 10-15V.
Ας πούμε πχ ότι έχεις Α-GND 10V και B-GND 20V, θα του δώσεις Vcc 15V, Vss 10V, το SPI θα το περάσεις από level converter 0-5 -> 10-15V και την έξοδο θα την κάνεις x2 με άλλο κύκλωμα.
Απλή λογική είναι.

*Και τίποτα ψηφιακό δεν μπορεί να κάνει ότι ακριβώς το αντίστοιχο αναλογικό!

----------


## finos

μα δεν θα καει να του δωσω τροφοδοσια 15ν ? 
με βλεπω με κανα servo κολημενο σε ενα pot.....  :Head:

----------


## Fire Doger

Γιατί να καεί?
Οι οδηγίες είναι ξεκάθαρες, θα πάρεις ένα καλώδιο θα το βάλεις στο Vss, το Vdd πρέπει να είναι μέχρι +7V από το Vss.
Άμα θες βάλε 100V στο Vss και 105V στο Vdd, το ίδιο πράγμα είναι, αυτό βλέπει *διαφορά δυναμικού* 5V!
*ΑΛΛΑ* και όλα τα υπόλοιπα σήματα θα έχουν ως αναφορά το Vss! Δηλαδή και το SPI σου θα είναι 100-105V, και το Vab θα πάει μόνο από 100-105V κλπ κλπ...
Κατάλαβες ή να στο ζωγραφίσω? :Tongue2: 

Αυτά είναι θεωρία Γυμνασίου-Δημοτικού, τι είναι διαφορά δυναμικού, τι είναι ρεύμα...

*Τα 100V και τα 105V είναι σε σχέση με άλλο 3 σημείο, ας πούμε η γη ή το μαύρο του τροφοδοτικού
Τα 105 σε σχέση με τα 100 είναι 5

----------


## finos

αμα τροφωδοτισω το mcp με 10 v που μου ειπες θα καιγόταν ....




> Absolute Maximum Ratings β*Voltage on VDD with respect to VSS ............... -0.6V to +7.0V



ααααααα 
τρ καταλαβα εγω παντα το - το εχω στα 0v  δλδ αν εχουμε ενα psu που βγαζει μια ταση 100ν και μια 105 και βαλουμε το μαυρο του πολύμετρου  στο 100 και το + στο 105 θα διξει 5ν ?

----------


## Fire Doger

Η Ηλεκτρική τάση, ή απλώς τάση, είναι η τιμή της διαφοράς του ηλεκτρικού δυναμικού μεταξύ δύο σημείων.

Όταν ένα καλώδιο λες πως έχει +10V εννοείς πως έχει +10V διαφορά δυναμικού από ένα άλλο σημείο.
Σε μια 9V μπαταρία ο θετικός πόλος έχει +9V διαφορά δυναμικού σε σχέση με τον αρνητικό πόλο της μπαταρίας.
Επίσης και ο αρνητικός πόλος έχει -9V διαφορά δυναμικού σε σχέση με τον θετικό πόλο της μπαταρίας.
Αν εσύ βαφτίσεις 0 τον θετικό πόλο έχεις -9V, αν βαφτίσεις τον αρνητικό πόλο 0 τότε έχεις +9V. Για αυτό είναι + - και όχι + 0.

Αν καρφώσεις 1 πάσσαλο στην γη και μετρήσεις διαφορά δυναμικού με την μπαταρία δεν θα δεις τίποτα, γιατί δεν έχουν καμία σχέση μεταξύ τους.
Επίσης αν πάρεις το 1 καλώδιο απ' την έξοδο μετασχηματιστή και το συγκρίνεις με την γη πάλι δεν θα δεις τίποτα για τον ίδιο λόγο.
Αν πάρεις το μαύρο ενός τροφοδοτικού υπάρχουν 2 περιπτώσεις, είτε να καταλήγει στην γη είτε όχι. Αυτά που έχουν πράσινη μπόρνα το μαύρο δεν είναι συνδεδεμένο με την γη αλλά το πράσινο είναι ξερή γη, αν θες τα ενώνεις με μια γέφυρα-λάμα, αν δεν θες παίρνεις μόνο το μαύρο. Αυτά που δεν έχουν πράσινη πρέπει να τα τσεκάρεις.
Αν δεν τα έχεις ενωμένα και πάρεις πράσινο-κόκκινο ξαναδιάβασε τα παραπάνω, είναι σαν να παίρνεις 1 καλώδιο μετασχηματιστή και 1 πάσσαλο.

Αν ένα σημείο καταλήγει σε πάσσαλο στην γη τότε το λέμε ηλεκτρολογική γείωση ή earth.
Αν ένα σημείο δεν έχει καμία σχέση με την γη (όπως οι πόλοι της μπαταρίας) τότε το λέμε floating.
1 σημείο μπορούμε να το βαφτίσουμε Common και έχει καθιερωθεί και το Ground.
Κοινό (common) το λέμε γιατί όλες οι τάσεις στο κύκλωμά μας είναι σε σχέση με αυτό το σημείο!

Ας πάρουμε μια περίπτωση που έχεις 7805 και 7812, έχεις +5V και +12V (σε σχέση με το common πάντα). Αν εσύ μετρήσεις ανάμεσα στα +5 και +12 θα δεις 7V.
Αν βάλεις το μαύρο probe στα 5 θα δεις +7V, αν το βάλεις στα 12 θα δεις -7V, σε όποιο βάλεις το μαύρο είναι σαν να το θεωρείς common.
Aν όμως βάλεις φορτίο (μια αντίσταση ή ένα μοτέρ πχ) τότε το *7805* θα κλείσει από προστασία ή θα καεί γιατί είναι σχεδιασμένο να είναι πάντα το θετικό κομμάτι.
Ανάλογα τα υλικά και την σχεδίαση πάνε οι επιτρεπόμενες ενέργειες.

Μάθε τα βασικά πρώτα και άσε τις κατασκευές, σχέδιο σωστό δεν έκανες, τα datasheet δεν τα μελέτησες, ανάλυση του τροφοδοτικού δεν έκανες, βασικές αρχές δεν γνωρίζεις, πως περιμένεις να σου απαντήσει κάποιος και να μάθεις για να πας παρακάτω?

----------


## finos

Τι λέτε για αυτό ; Καλό;sketch1492458048874.png

----------


## finos

Απο πάντα όταν μετρούσα τάση μετρούσα ανάμεσα gnd και εκεί που ήθελα να μετρήσω . Πάντα δούλευα με μπαταρίες για αυτό "δεν το έπιασα " αμέσως . Θεωρούσα δεδομένο ότι πάντα μετράω ανάμεσα - &+  περισι στη φυσική κάναμε ηλεκτρισμό . Για αρχή μας είπε τι είναι η τάση αλλά στις ασκήσεις κι στοκ εργαστήριο πάντα μετρούσαμε  ανάμεσα-&+ .

----------


## Xarry

Ειπα να μπω και εγω στον μαγικο κοσμο του Arduino με αφορμη τον Uno και καποια παρελκομενα που μου εδωσαν.
επειδη φανταζομαι εχει ηδη κωδικα μεσα, εψαξα πως γινεται reset  και αφου βρηκα αυτον τον περιπλοκο κωδικα 




> void setup() {  // put your setup code here, to run once:
> 
> 
> }
> 
> 
> void loop() {
>   // put your main code here, to run repeatedly:
> 
> ...




Λεω σιγα το πραμα, και κανω να τον ανεβασω στο uno που ειχα ηδη συνδεδεμενο στο pc.
Οσες φορες και αν το δοκιμασα μου βγαζει "Προβλημα ανεβασματος στην πλακετα..."

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xf9
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xf9

----------


## Fire Doger

Τι εννοείς "πως γίνεται reset"?
Στους μΕ το "reset" γίνεται γειώνοντας ένα ποδαράκι, και ξεκινάει να εκτελεί τον κώδικα απ' την αρχή.
Άμα έχει κώδικα δεν χρειάζεται να κάνεις erase το chip με προγραμματιστή για να βάλεις καινούριο, απλά κάνεις program από πάνω, μετά η πλατφόρμα (avrdude) κάνει ότι είναι να κάνει για να περαστεί σωστά το πρόγραμμα.

Το arduino για να μην χρειάζεται ειδικό προγραμματιστή έχει ένα μικρό κομμάτι στην rom στο οποίο είναι ένα μικρό πρόγραμμα (που εσύ δεν βλέπεις πουθενά) και το λένε bootloader. Ο λόγος που υπάρχει είναι μετά από κάθε reset να βλέπει αν υπάρχουν δεδομένα στην σειριακή και να τα γράφει ο ίδιος ο μΕ στην Rom του για να τα εκτελέσει στην συνέχεια.
Αν το έκανες erase με κάποιο τρόπο και χάθηκε ο bootloader πρέπει να τον ξαναβάλεις για να το προγραμματίσεις με απλό usb καλώδιο.

----------


## Xarry

Reset εννοω σβησιμο οποιουδηποτε κωδικα εχει αποθηκευμενο.
Τωρα λοιπον βρηκα οτι ηταν σαν συσκευη ηταν στην COM 5 στο PC μου και ο IDE ειχε πρεπιλεγμενη την COM 1, οποτε και την αλλαξα σε 5 και το φορτωσε κανονικα.

Απ οτι καταλαβα οτι και να εχει αποθυκευμενο οταν του περνας κατι αλλο το σβηνει και το αντικαθιστα σωστα;

----------


## finos

> Τι λέτε για αυτό ; Καλό;sketch1492458048874.png



αυτο καλο ?

----------


## nkarama

> αυτο καλο ?



Πάρε την περίπτωση που έχεις δώσει λογικό 0 στην βάση και το τρανζίστορ άγει. Όποτε έχει 10 volt (σχεδόν) στον συλλέκτη. 
Θες τώρα να "κλείσεις" τον διακόπτη και δίνεις λογικό 1 στη βάση. 
Τι γίνετε? Πότε σταματά να άγει ένα pnp τρανζίστορ ?

----------


## finos

στην παρέα μ όταν κάποιος λέει μια βλακεία τον λεμέ σήκωσε χέρι και πες
 :"ειπα βλακια " 
 .....ειπα βλακια ! 
α και κατι αλο . θα αξιζε να βαλω το ads1115 αντι το adc του arduino για να διαβαζω την ταση ?

----------


## liat

Ωραίο χεράκι έχεις βρε Βαγγέλη! Αλλά και τα νύχια ... σκίζουν από βάψιμο.  :hahahha:  :hahahha:  :hahahha:

----------


## finos

αχ ναι καλε ........ :hahahha:  :hahahha:  :hahahha:  :hahahha:  :hahahha:  :hahahha:

----------


## finos

θα αξιζε πιστεύετε να εβαζα το ads1115 για adc ? ή να αφηνα  το adc tou avr  ?

----------


## Fire Doger

Δουλεύει?
Αν δεν δουλεύει κάν' το πρώτα να δουλεύει με τον εσωτερικό ADC και μετά πας παρακάτω.

Όλο είναι 1 σύστημα! Αν το DAC είναι 8 bit και 1000 bit ADC να έχεις άχρηστο σου είναι.
Επίσης αν η έξοδος σου είναι αργή και 1Mhz sample rate να έχεις επίσης άχρηστο σου είναι.

----------


## SeAfasia

> αχ ναι καλε ........



σύκα καλέ....

----------


## finos

> Δουλεύει?
> Αν δεν δουλεύει κάν' το πρώτα να δουλεύει με τον εσωτερικό ADC και μετά πας παρακάτω.
> 
> Όλο είναι 1 σύστημα! Αν το DAC είναι 8 bit και 1000 bit ADC να έχεις άχρηστο σου είναι.
> Επίσης αν η έξοδος σου είναι αργή και 1Mhz sample rate να έχεις επίσης άχρηστο σου είναι.



ναι αυτο σκευτικα κι εγω το pwm του arduino ειναι 8bit ειναι ?

----------


## Fire Doger

Εγώ πιστεύω ότι δεν είσαι σε θέση να παίξεις με φίλτρο και pwm. Καλύτερα R2R.

Η απάντηση στην ερώτησή σου είναι: Ανάλογα στο που αναφέρεσαι.
Πχ παρακάτω είναι τα *hardware* pwm ενός 16bit Timer σε avr (που έχουν αρκετοί 8bit μΕ)
Τα *software* pwm τα κάνεις ότι θες.

----------


## finos

γιατι δεν ειμαι σε θεση για να παιξω με rc φίλτρο ? λογο παλμογράφου . εχω αμεση προσβαση σε εναν . αλλα οχι μόνιμη

----------


## finos

εχω μια μικρη απορια . η sda γραμμη  του πρωτοκολλου i2c ειναι bi-directional σωστα ? 
τοτε πως θα εχω απομόνωση με τι optocupler ?   
και δεύτερον το σημα reset το περνουμε απο το dtr τοu usb to serial  ?

----------


## manolena

http://www.embedded.com/design/proto...of-the-I2C-Bus
https://www.google.gr/search?q=i2c+isolation&client=ms-unknown&prmd=ivn&source=lnms&tbm=isch&sa=X&ved=0ah  UKEwi00-PD0ofUAhWKEVAKHXY_C-AQ_AUICSgB&biw=360&bih=559#imgrc=j157T5QrBLxlhM:

...με δύο HCPL-060L και για ταχύτητες μέχρι 400KHz στο δίαυλο ή πιο απλά με δύο 4Ν35 όπως στο παραπάνω. Είναι δοκιμασμένο και δουλεύει καλά.

Και αυτό επίσης:

----------

kioan (09-06-17)

----------


## finos

γεια σας και καλο μηνα , τι πιστευετε θα ητσν καλυτερα να χρησιμοποιήσω  για dac στο τροφοδοτικό r2r lader ή rc φηλτρο με pwm ? δεν μπορώ να βρω κάποιες διαφορές ουτε καποιο σημαντικο πλεονεκτιμα στην πρωτη ή δεύτερη λύση .   εσεις τι θα επιλέγατε?

----------


## kioan

> τι πιστευετε θα ητσν καλυτερα να χρησιμοποιήσω  για dac στο τροφοδοτικό r2r lader ή rc φηλτρο με pwm ?





*PWM + Low Pass filter*
*R2R ladder*

Πλήθος εξαρτημάτων
Μικρό
(1 αντίσταση, 1 πυκνωτής)
Μεγάλο
αριθμός αντιστάσεων = 2*(bit απαιτούμενης ανάλυσης)

Απαιτούμενα Ι/Ο ports
1
όσα τα bit της απαιτούμενης ανάλυσης

Ακρίβεια
Εξαρτάται από την τάση τροφοδοσίας
Εξαρτάται από την τάση τροφοδοσίας και τις ανοχές των αντιστάσεων

Bandwidth
Χαμηλό
Υψηλό

----------


## Fire Doger

Πού χάθηκες? :Bye: 
Βάλε ένα R2R που είναι ευκολότερο.
Το καλύτερο θα είναι να το βάλεις σε μια Port ολόκληρη έτσι ώστε να πετάς πάνω απευθείας ένα byte το οποίο θα αντιστοιχεί και στην τάση αντί να σηκώνεις 1-1 τα pin αλλά και έτσι δουλεύει.

----------


## selectronic

Να παραθέσω μερικές τιμές που πήρα εγώ από PWM + RC σε κλώνο Arduino Nano 5V, μήπως και βοηθήσουν στην λήψη της απόφασης...

*ΠΡΟΣΟΧΗ !!! Είμαι πρωτάρης σε αυτά, οπότε οποιοδήποτε ποσοστό αυτών που θα γράψω παρακάτω μπορεί να είναι λάθος !!!*

 *Spoiler:*       
Χρησιμοποίησα έτοιμο κώδικα με την βιβλιοθήκη TimerOne, με το σήμα *PWM στα ~7ΚΗz* (_Timer1.initialize(142)_).
Το φίλτρο RC ήταν *δύο 10Κ/220nF φίλτρα* "σε σειρά" όπως αυτό.
Οι τιμές που βρήκα τώρα στις σημειώσεις είναι με τροφοδοσία από USB που δίνει στον Arduino *Vcc=4.21V*. Η τάση εξόδου του RC εξαρτάτε από την Vcc, οπότε δεν είναι ότι καλύτερο...

Με PWM=0 παίρνω την ίδια μέτρηση με το πολύμετρο όπως αν έβαζα το pin "LOW", που είναι ~1.12mV
Με PWM=1023 (μέγιστη τιμή) είχα έξοδο 4.130 - 4.135V
Με το pin "HIGH" είχα 4.141 - 4.144V

Παρακάτω διάφορες τιμές PWM και τάση εξόδου. Το "βήμα" θα έπρεπε να είναι ~4.03mV:

1  = 4.48mV  => 3.36mV βήμα
2  = 8.50mV  => 4.02mV βήμα
3  = 12.15mV => 3.65mV βήμα
4  = 15.80mV => 3.66mV βήμα
5  = 19.44mV => 3.64mV βήμα
6  = 23.09mV => 3.65mV βήμα
7  = 26.74mV => 3.65mV βήμα
8  = 30.38mV 
9  = 34.03mV 
10 = 41.30mV 
11 = 44.98mV  
12 = 48.61mV 
13 = 52.25mV  
14 = 55.92mV 
15 = 59.55mV 
16 = 63.21mV => 3.66mV βήμα
58  = ~279mV
_100  = ~4.080V_ *<-ΛΑΘΟΣ*
300  = ~1.222V
600  = ~2.430-2.432V
900  = ~3.641-3.643V
1000 = ~4.044-4.047V

----------


## Fire Doger

> 58  = ~279mV
> 100  = ~4.080V
> 300  = ~1.222V



Αυτό λογικά είναι ~400mV

----------


## selectronic

> Αυτό λογικά είναι ~400mV



Ναι, μάλλον 408mV πρέπει να είναι...

----------


## picdev

Καλύτερα LC φίλτρο στο pwm και buffer .


Sent from my Redmi 4 using Tapatalk

----------


## finos

Κι εγώ αυτό πιστεύω , το άλλο έχει πολλά εξαρτήματα , κι δεν εχω πολύ χορό στην πλακέτα

----------


## finos

αυτο το καιρο διαβαζω για το πως να δουλευω τa pin change interupt μεσω αυτης της βηβλιοθηκης αλλα δεν καταλαβαινω κατι γιατι δεν μπωρω να χρησιμοποιήσω serial.print();
μου ειπατε οτι δεν πρεπε να εκτελώ μεγαλες functions μεσα σε intrupts . για αυτο ?

----------


## Fire Doger

Το LC να δω πως θα κάνεις μετά... :Lol: 
Άμα έχεις λάθος interrupt δεν μπορείς να κάνεις τίποτα.
Ανέβασε κώδικα.

----------


## finos

Πρως το παρόν δεν έχω γράψει ούτε γραμμή δέν βγάζω άκρη με την βηβλιοθηκη   δλδ τα pcint  επιρεαζουν τα pwm ?

----------


## manolena

Βάγγο, τι θες να κάνεις ακριβώς; Άμα μπορείς, περίγραψε με λίγη λεπτομέρεια τι σκέφτεσαι γιατί τώρα βαράμε κουπί σε βάρκα δεμένη στο ντόκο.

----------


## finos

Θέλω για " διαβάζω " τα κουμπιά της κατασκευής με interupt  κι στο read me είδα ότι λέει δεν μπορώ να κάνω serial.print  κι delay (που ήξερα ότι δεν γίνεται σε interupts ) απλά μου φάνηκε περίεργο που δεν δουλεύει το serial.print στα pcint ενώ στα external δεν είδα να αναφέρεται κάπου ο περιορισμός αυτός .

----------


## finos

δεν "επιτρέπετε" γενικα να τρέχεις serial.print μεσα σε interupt function  η μονο στα pcint  ?

----------


## Fire Doger

Πρόσεξε λίγο, το interrupt είναι ένα κουδούνι, τίποτα παραπάνω.
Το ISR (interrupt service routine) είναι η ρουτίνα που εξυπηρετεί κάθε κουδούνι.
Μέσα στα ISR είναι κλειστά τα interrupt, γιατί έτσι είναι οι 8bit avr.
Άμα πας να κάνεις κάτι που είναι interrupt driven μέσα σε ISR πολύ απλά δεν θα τρέξει γιατί μόλις χτυπήσει το κουδούνι δεν θα γίνει τίποτα.
Αν ντε και καλά θέλεις interrupt μέσα σε ISR ψάξε "nested interrupts in avr".
Εσύ όμως δεν θέλεις οπότε βρες άλλον τρόπο. Σήκωσε μια bool και κάνε έλεγχο της bool στο loop.

*Τα interrupt προκαλούν πολλά φαντάσματα στον κώδικα, άμα περιμένεις να τα μάθεις από βιβλιοθήκη θα χαθείς.

Εγώ τι κάνω: Έχω 1 buffer 200 char, μόλις κάνει λήψη η σειριακή με ISR βάζει τα δεδομένα στον buffer και ελέγχει αν ολοκληρώθηκε το μήνυμα γιατί έχω συγκεκριμένο format, σε κάθε loop ελέγχω την σημαία και αν χρειαστεί απαντάω.

----------


## SProg

> Εγώ τι κάνω: Έχω 1 buffer 200 char, μόλις κάνει λήψη η σειριακή με ISR βάζει τα δεδομένα στον buffer και ελέγχει αν ολοκληρώθηκε το μήνυμα γιατί έχω συγκεκριμένο format, σε κάθε loop ελέγχω την σημαία και αν χρειαστεί απαντάω.



Ετσι ειναι και το σωστο Στεφ

----------


## finos

```
#include <PinChangeInterrupt.h>const int button = 12;
const int led = 13;
int Relay = 13;
int stateRelay = HIGH;
int stateButton;
int previous = HIGH;


void setup() {
  pinMode(button, INPUT_PULLUP);//enable pullups
  pinMode(Relay, OUTPUT);//set relay to output
  attachPCINT(digitalPinToPCINT(button), on_off, CHANGE);//enable interupts


}
void on_off() {


  stateButton = digitalRead(button);
  if (stateButton == LOW && previous == HIGH) {
    if (stateRelay == HIGH) {
      stateRelay = LOW;
     
    }
    else {
      stateRelay = HIGH;
         }
  }
}


void loop() {
  digitalWrite(Relay, stateRelay);
}
```


εγραψα λγ κωδικα κι εξηγώ λγ πιστευω τι θελω να κανω , δεν τον εχω δοκιμασει και ουτε ξερω αν δουλεύει  αυτο που θελω να κανω ειναι να αποδεσμευσω τελιος την loop() απο τον διαβασμα του front panel, των encoder και των λιπών διεπαφών του χρηστη , εχω λγ καιρω να γραψω κωδικα κωδικα για arduino και μπορει να εχει λαθαρες  :Biggrin:  ο κώδικας ειναι για να ανοιγει και να κλινει την εξοδο οταν πατηθεί το κουμπι

----------


## finos

εκανα μεγαλη βλακια ?  :Rolleyes:  δεν ειναι σωστός ο κώδικας ?

----------


## Fire Doger

Βαγγέλη, ένα παράδειγμα πως θα κάνεις debug προβλήματα με interrupt.
Στέλνει το pc ένα string και περιμένει απάντηση με συχνότητα 1Hz.
Δουλεύει κομπλέ αλλά κάποια στιγμή δεν παίρνει απάντηση. Σε τέτοια τυχαία φαινόμενα υποπτεύεσαι interrupt.
Το μόνο ενεργό ήταν ένα με διάρκεια 1ms με συχνότητα 2Hz. Η σειριακή 115200 bps
Στην αρχή του interrupt βάζεις να κάνει ένα pin high και στο τέλος low και καταγράφεις με analyzer ή παλμογράφο (τον παλμογράφο δεν το ξέρω ακόμα καλά να τον σετάρω για να στο δείξω). Στο παράδειγμα πχ μου πήρε κανένα 5λεπτό για να μπαγκάρει οπότε θέλεις trigger κ ιστορίες.

Εδώ είναι ένα ολοκληρωμένο πακέτο. Το debug είναι τι έφτασε στον buffer, προσπέρασε το γιατί δεν στέλνονται ταυτόχρονα, έκανα πειράματα.


Και εδώ ένα προβληματικό. Αμέσως καταλαβαίνεις που γίνεται η μλκια.
(Και απ' ότι κατάλαβα η σειριακή σαν περιφερειακό έχει 2 byte στο hardware, με interrupt το arduino τα πάει στην Ram και αν δεν αδειάσουν επειδή τρέχει άλλο ISR χάνονται τα επόμενα αλλά δεν την έχω μελετήσει να σου πω την αλήθεια)



Άλλαξα το ISR σε 1 εντολή (σήκωμα σημαίας) φτάνοντας στα <500nS και ο analyzer 1/10 να πιάσει τον παλμό με 24Mhz οπότε διορθώθηκε.
Έτσι κάνεις εξσφαλμάτωση bug που σχετίζονται με interrupt. Ελπίζω να έμαθες κάτι  :Biggrin:

----------

finos (26-07-17), 

manolena (26-07-17)

----------


## finos

καλημέρα 

δλδ για debug μεσα σε interrupt εχω 1-2 πινάκια και αναλογα αν είναι high η low καταλαβαίνω αν μπικε στο interrupt ?

----------


## Fire Doger

Καλημέρα  :Smile: 
yeap, όσο είναι high είναι μέσα στο interrupt, έτσι κάνεις χρονομέτρηση και σε ρουτίνες χωρίς να μπερδεύεις millis και micros, στον παλμογράφο βλέπεις ακριβώς τον χρόνο χωρίς ασάφεια.
Προσοχή αν το κάνεις στο arduino το digitalWrite αργεί πολύ (~50 κύκλους νομίζω) σε σχέση με το να το κάνεις χειροκίνητα (1 κύκλος) στο PORT οπότε θα στα μεγαλώνει λίγο.

----------


## finos

αρα δεν κανω digitalWrite αλα με  port manipulation

----------


## Fire Doger

Καλό είναι να το μάθεις γιατί θα σου χρειαστεί, υπάρχουν και macro αλλά άμα δεν τα καταφέρνεις δεν χάθηκε κ ο κόσμος, απλώς να το έχεις υπόψιν σου.

----------


## finos

εστω ότι θελω να οριζω που είναι σηνδεδεμενο ένα led μεσω μεταβλητης , 
από ότι ξεω μοωρω ειτε να κανω const int led = 13; ή    #define led 13 
 τι είναι καλύτερο ?

----------


## thanasis 1

https://www.arduino.cc/en/Reference/Define

https://www.arduino.cc/en/Reference/Const

----------


## Fire Doger

Το define είναι οδηγία προς τον compiler.
*Edit: το const είναι οδηγία για να μπει η μεταβλητή στην Rom

----------


## finos

οποτε θα βαζω define για τετοια δουλεια  .

----------


## picdev

Το define το βάζεις όταν θες να επαναλμανεις μια μεταβλητή μέσα στο πρόγραμμα σου και εύκολα την αλλάζεις κεντρικά .
Πχ το τη πόρτα ενώς λεντ , ή το time base interrupt για να κάνεις υπολογισμούς .

Οταν ορίζεις μια μεταβλητή const την αποθηκεύεις στη rom και δεν μπορείς να την αλλάξεις κατά την εκτέλεση του προγράμματος .
Πχ όταν θες να αποθηκεύσεις string που εκτυπώνεις σε μια οθόνη και αυτό είναι πάντα ίδιο δεν σεσυσμφερει να το έχεις στη ραμ γιατί είναι πάντα μικρότερη 

Sent from my Redmi 4 using Tapatalk

----------


## Fire Doger

Με define μπορείς να βάλεις και διάφορα macro πχ http://www.avrfreaks.net/forum/macro...-port-pin-name

----------


## finos

io ready ... time for some ligic  :Tongue2:  _DSC0075.jpg

----------


## finos

τελικα εβαλα pwm/rc filter dac  

μονο του χωρις το transistor  δουλεψε κανονικα όμως εγω θελω να κανω output max ~10.5vdc  σκευτικα να το κανω ετσι τι λέτε γινείτε  ?
να πω ότι ετσι "εφαγα " 1 Arduino  για αυτό το ανεβασα μην εκανα καμια βλακεία . ( η r1 είναι 3.3kΩ ο c1 22μf) 

pwm.png

----------


## finos

αποτι βλεπω στον παλμογραφο μολις ανοιξει το bd139 φορτιζει ο c1 κι μετα μολις κλεισει το transistor  o c1 μενει φωτρισμενος .... τι κανω λαθος ?

----------


## kioan

> αποτι βλεπω στον παλμογραφο μολις ανοιξει το bd139 φορτιζει ο c1 κι μετα μολις κλεισει το transistor  o c1 μενει φωτρισμενος .... τι κανω λαθος ?



Το out το έχεις ασύνδετο; Πως να αποφορτιστεί εάν δεν υπάρχει κάτι;

----------


## finos

αν ομος το βαλω κατευθιαν πανω στο pwm χωρις transistor δεν υπαρχει αυτό το πρόβλημα  :Cursing:

----------


## lepouras

μήπως γίνετε pull down η έξοδο από το αρντουίνο και έτσι αποφορτίζει τον πυκνωτή? γιατί απλά δεν βάζεις μια αντίσταση στο out σου για να υπάρχει κάποια κατανάλωση να αποφορτίζει τον πυκνωτή και να δεις αν δουλεύει σωστά?

----------

picdev (06-09-17)

----------


## Fire Doger

Εμ για, RC μου ήθελες... :Lol: 
Ηλεκτρονικά 101. Τι είναι ένα τρανζίστορ?

Όταν το arduino βγάζει pwm το pin είναι έξοδος και μπορεί να κάνει και source και sink μέχρι 20mA. Η άλλη του κατάσταση είναι είσοδος (high impedance) στην οποία έχει μόνο προαιρετικές pullup άμα θέλεις, τιμή αντίστασης δεν θυμάμαι γύρο στα 5-10k θα είναι.
Άρα ο πυκνωτής φορτίζει και ξεφορτίζει μέσα απ' το pin του arduino.
Όταν του κοτσάρεις το npn φορτίζει μέσω του τρανζίστορ. Απ' το πιν περνάνε ~0 mA. Όταν είναι κλειστό το τρανζίστορ από που θα ξεφορτίσει ο καημένος???? Από ανάποδα πολωμένη δίοδο ή απ' τα 10MΩ του παλμογράφου?

----------


## finos

pwm (1).pngισως ετσι να δουλεψει . τι τημη να βαλω στην r2 ?

----------


## kioan

Οι R1 και R2 σχηματίζουν ένα διαιρέτη τάσης. Τι εύρος τιμών θες στην έξοδο;

Sent from my GT-N7100 using Tapatalk

----------


## Fire Doger

> pwm (1).pngισως ετσι να δουλεψει . τι τημη να βαλω στην r2 ?



ΑΑΑΑ, ένας πολύ ωραίος διαιρέτη τάσης για να φορτίζει ο πυκνωτής.... :Lol: 

Βάλε ένα pnp σε totem pole και pull αντιστάσεις στις βάσεις γιατί όταν κάνει restart το arduino όλα τα pin είναι high Z, χωρίς pull και μπορεί να βραχυκυκλώσεις τα 10V με gnd.
Επίσης απ' την έξοδο δεν μπορείς να τραβήξεις ρεύμα, θες buffer.

Και αντιστάσεις σε σειρά με τις βάσεις!

----------


## finos

> Οι R1 και R2 σχηματίζουν ένα διαιρέτη τάσης. Τι εύρος τιμών θες στην έξοδο;
> 
> Sent from my GT-N7100 using Tapatalk



shit ....   :whistle:  :whistle:  :whistle:  :whistle:

----------


## finos

http://forum.arduino.cc/index.php?topic=55574.0




> 1. Use the existing 8 bit PWM analogWrite() command. You would have to wire the pwm output pin to a switching transistor wired to +10vdc, and then follow that with a low pass filter (resistor/capacitor network).



από εδώ μου ηρθε η ιδεα

----------


## finos

με μοσφετ θα ήταν καλύτερα ?

----------


## kioan

Το προβλημά σου δεν ειναι το transistor, αλλά η φυσική 
Εφόσον φορτίζεις έναν πυκνωτή και δεν υπάρχει κάτι να τον αποφορτίζει, αυτό θα γίνεται.
Σε ξαναρώτησα και πιο πριν: στην έξοδο out τι θα συνδέεται;

Sent from my GT-N7100 using Tapatalk

----------


## finos

εάν θα εκανα κατι τετοιο  ?  :Blushing: 
pwm-2.0.png
δεν εχω δουλεψει ποτε opapmps τι τιμες να βαλω στις αντιστάσεις  
ι ιδεα μου ήρθε από εδώ https://electronics.stackexchange.co...to-0-5-v-range
δλδ να βγαζει το rc filter 0-5ν κι ο op amp να βγαζει 0-10v 
τι λετε καλη ιδεα

----------


## finos

> Το προβλημά σου δεν ειναι το transistor, αλλά η φυσική 
> Εφόσον φορτίζεις έναν πυκνωτή και δεν υπάρχει κάτι να τον αποφορτίζει, αυτό θα γίνεται.
> Σε ξαναρώτησα και πιο πριν: στην έξοδο out τι θα συνδέεται;
> 
> Sent from my GT-N7100 using Tapatalk



http://www.ebay.com/itm/0-30V-2mA-3A...kAAOSwepZXR-vq
το dac θα αντικαταστισει το ποτενσιόμετρο της τασης , το out θα παει στον  wiper  η μια πλευρα εχει +10.5v και η άλλη είναι στην  γειωση  της εξοδου , για αυτό θελω 10,5ν max output
κατι τετοιο δλδ : pwm-3.0.png το ιδιο θα γινει κι για την ενταση μονο που εκει είναι 2.5 η max ταση

----------


## finos

Έκαψα το κύκλωμα περιορισμου έντασης μου έκανε ένα spike  7 α (έχω 4α transformer ) πάω για άλλο mondule κι ... Πολυμετρο αυτά ειναι  ... :Tongue2:  :Lol:

----------


## picdev

Φίνο πρέπει να διαβάσεις τα βασικά του τρανζίστορ , και εγώ αυτά ξέρω .
Πρόσεξε πως άγει το τρανζίστορ , και που πρέπει να βάλεις το φορτίο σου ανάλογα αν είναι npn η pnp.

Για να αγει το npn πρέπει να έχει τάση στη βάση του , κατά 0.7 v μεγαλύτερη από τον εκπομπο.
Εσένα πόσο έχει ? Τη τάση έχει ο εκπομπος αφού είναι συνδεμένος στο module? Καταλαβαίνεις ότι είναι λάθος 

Sent from my Redmi 4 using Tapatalk

----------


## picdev

Για δες αυτό 

Sent from my Redmi 4 using Tapatalk

----------


## picdev

Δεν ξέρω τι ρεύμα θες να οδηγήσεις , εκεί στον MCU έβαλα pull down δεν ξέρω τι θες , μπορεί να κάνει και pull up 

Sent from my Redmi 4 using Tapatalk

----------


## finos

παιδια θελω να σας ευχαριστισω για τις μεχρι τωρα βωηθειες κι απαντισεις σας .
καποιος ειχε πει για πλακα ότι το τοφοδοτικο μου είναι Powerd by hlektronika.gr αλλα πλεον είναι σιγουρο .... :Wink:

----------


## finos



----------


## picdev

Κάνε αυτό με το τρανζίστορ και LC φίλτρο στην έξοδο με pwm 

Sent from my Redmi 4 using Tapatalk

----------


## vasilllis

γενικος τιτλος θεματος γενικη η ερωτηση.
σε μικροελεγκτη exoyme to Z flag ston status register.Αυτη η σημαια ποτε αλλαζει τιμη?(αναφερει οταν το αποτελεσμα μια λογικης η αριθμητικης πραξης ειναι 0 ή 1)
μεταξυ ποιων αριθμων? καποιο παραδειγμα?

----------


## SProg

Δειχνει αν το αποτελεσμα της πραξης που εκτελεσε η ALU, βγηκε 0 ή οχι.

----------


## vasilllis

Σαββα ,το αποτελεσμα μιας πραξης ομως θα ειναι ενας 8bit αριθμος. Ενταξει καταλαβαινω οτι 0000 0000+0000 0000 = 0000 0000 αλλα με δυο αλλους?
ας πουμε 0000 0000+0000 0001=0000 0001 εκει τι θα γινει το Ζ.0 ή 1?

----------


## SProg

Αν το αποτελεσμα μιας πραξης (αριθμητικης ή λογικης πραξης) είναι 0, τότε το Z (Zero Flag) θα γινει 1.

0x00 + 0x00 -> Z=1
0x00 + 0x0A -> Z=0

----------


## vasilllis

καταλαβα πως παει.ευχαριστω

----------


## kiriakos227

Καλημέρα παίδες
 Μεταφέρω ένα απόσπασμα από ένα βιβλίο  
 Condition Code Register
 The Condition Code Register contains five status indicators that reflect the results of arithmetic and other operations of the CPU.  
 ZERO (Z)
 The Z bit is set to one when the result of the last arithmetic, logigal, or data manipulation is zero.


_Assume initial values in Accumulator and Condition Code:_


ACCUMULATOR ..................                           CONDITION  CODES
...............7.........................0                                                  .................................H I N Z  C
before     *1* *1* *1* *1* *1* *1* *1* *1          * *...........* *1* *1* *1* *0* *1* *1* *0* *0*



_Execute the following instruction:_
- - - -   AB   02         ...........ADD  #02            .............................(ADD 2 to Accumulator)


ACCUMULATOR                                                                        .................CONDITION  CODES
...........7                  ........................0                                                                                                 ................................H  I  N Z  C
after        *0* *0* *0* *0* *0* *0* *0* *1            * *..........* *1* *1* *1* *1* *1* *0* *0* *1*



Condition Codes and Accumulator reflect the results of the ADD instruction:
HALF CARRY (from bit 3)
........H - Set because there was a carry from bit 3 to bit 4 of the accumulator.
INTERRUPT MASK
    ........I -  No change.
NEGATIVE
    ........N - Clear because result is not negative (bit 7 of accumulator is 0).
ZERO
.........Z -  Clear because result is not zero.
CARRY
    .........C -  Set because there was a carry out of bit 7 of the accumulator.


Οπότε το Z θα γινόταν 1, μόνο αν η εντολή ήταν ADD #01

----------


## finos

καλησπέρα καλη χρονια ! 
το Arduino due εχει μεγηστη ταση εισοδου στα digital pins τα 3,3 στα αναλογικα ισχύει το ιδιο ?

----------


## Fire Doger

> καλησπέρα καλη χρονια ! 
> το Arduino due εχει μεγηστη ταση εισοδου στα digital pins τα 3,3 στα αναλογικα ισχύει το ιδιο ?



Μου κάνει εντύπωση που τα ψηφιακά δεν είναι 5V tolerant (να δέχονται και 5V χωρίς αντίσταση). Τα αναλογικά ποτέ δεν τα έχω πετύχει να είναι 5V tolerant.
Μισό να το κοιτάξω.
Δεν το βρήκα στο datasheet, λογικά θα τα βάζει όλα μαζί που το δίνει στα 4V.
Ε καλά δεν σε πειράζει και ιδιαίτερα στα analog αφού δεν τραβάς ρεύμα, βάλε έναν διαιρέτη τάσης.

----------


## SProg

Πες καλυτερα τι θελεις να κανεις Βαγγελη

----------


## finos

> Πες καλυτερα τι θελεις να κανεις Βαγγελη



θα ηθελα να αντικαταστισω το Arduino mega  με ένα due .κυριως γιατι εχει external interrupts (δεν βαζω pin change interrupts γιατι δεν ετρεχαν παντα το isr κι απενεργοπηουσαν τα internal pullups ) 
εχει 32bit adc κι ενσοματομενο dac 

αλλα ότι εχει 3.3v logic levels είναι ενας σημαντικος παραγοντας για να μείνω σε mega 
κι αυτό ψαχνω τωρα , εάν τα περιφερικά ( lcd , acs712  , lan shield) δουλευουν στα 3.3

----------


## Ninetie

Μπορείς να παρεμβάλλεις μερικά level shifters.

----------


## SProg

Πες ακριβως ποσα και για θελεις External Interrupts.

Μου φαινεται απιθανο να μην σου φτανει ο Mega για αυτο που κανεις.

----------


## finos

τα pcint του mega είναι υπεραρκετα . αλλα όπως σας ειπα  δεν τρεχει παντα το isr κι μου κλεινει τα internal pull-ups .χρειαζομαι περίπου 15 interrupts για το user interface κουμπια κι encoders

----------


## finos

καλησπέρα ,  το project αυτό έχει κρατήσει πολύ , δε συμφωνείτε ?   
να το τελιωσω ? δεδομενου οτι ειναι ετοιμο μονο το αναλογικο κοματι , κι οτι απο του χρονου δεν θα εχω πολυ χρονο λογο πανελαδικων ? η να παω να παρω ενα ετοιμο κι να "ησιχασω" ? 
ξερω αν καθησω να το φτιάξω θα μαθω πολλα αλλα  η κατασκευή αυτη κούρασε πολυ . να του δοσω αλλη μια προσπάθειά ? ένα παρόμοιο lenear (0-30ν 0-4 α)  με δυνατότητα dataloging μεσω lan onboard θέσεις για μνημες (voltage &current) ποσο εχει ? κι ποιο λετε να επιλεξω ..

----------


## Kernel Panic

Αν ψάχνεις ψυχολογική υποστήριξη για συνεχίσεις ένα project που σ' έχει κουράσει, εδω είμαστε όλοι να στηρίξουμε, Βαγγέλη τόχεις πια, προχώρα και μην σε παίρνει απο κάτω, οτι θες εδώ.
Αν πάλι ψάχνεις άλλοθι, πάλι εδώ είμαστε, ρίξτο πάνω μας, σιγά τώρα, ούτε ο πρώτος είσαι ούτε ο τελευταίος που θα παρατήσει κάτι που τράβηξε πολύ και τον κούρασε. Τις εμπειρίες του ταξιδιού τις απέκτησες, πάμε γι' άλλα τώρα.
καλό καλοκαίρι.....

----------


## kioan

Αν θες ένα τροφοδοτικό για να κάνεις την δουλειά σου, μπορείς πολύ εύκολα να φτιάξεις ένα με κάποιο από τα DPSx0xx. Έλεγχο μέσω LAN δεν έχουν, αλλά οι communication εκδόσεις τους υποστηρίζουν μέσω Bluetooth και USB.

Για όλα τα υπόλοιπα, ισχύει ότι έγραψε ο Kernel Panic.

----------


## finos

καλήμερα παιδιά (μικρά κι μεγάλα  :Tongue2: )  
άνοιξα χθες το κουτί που μαζεύω άλλα τα κομμάτια άλλα ένα έχω να πω γινετε χαμός ...
η βασική   ερώτηση μου ειναι εάν πλέων αξειζει να το τελειώσω (έχω κάνει μόνο να δουλεύει μόνο το pcb του τροφοδοτικού οι το ψηφιακό κομμάτι (arduino) )




> Αν πάλι ψάχνεις άλλοθι, πάλι εδώ είμαστε, ρίξτο πάνω μας



 αυτό δεν θα το έκανα ποτέ , εσείς άπλα βοηθούσατε εγώ πρεπει να εκτελέσω την κατασκευή 
αν τελικά την προχωρήσω   θα ανοίξω άλλο θέμα γιατι  ξέφυγε   αυτό 





> DPSx0xx. Έλεγχο μέσω LAN δεν έχουν, αλλά οι communication εκδόσεις τους υποστηρίζουν μέσω Bluetooth και USB.



 στο header που εχει διπλα απο lcd  βλεπω rx tx αρα ισως καταφερω να βαλω κι το Lan  

πάντως σας ευχαριστω για το suport  σε όλες τις κατασκευες μου

----------


## kioan

> στο header που εχει διπλα απο lcd  βλεπω rx tx αρα ισως καταφερω να βαλω κι το Lan



Ναι, αυτό είναι σειριακή θύρα και σε όλα τα communication version εκεί συνδέεται το πλακετάκι bluetooth ή USB.
Θεωρητικά μπορεί κάποιος να αγοράσει/φτιάξει και να συνδέσει εκεί ένα serial to ethernet converter. 

Ή ένα ESP8266/ESP32 για να το κάνει WiFi και να απαλλαγεί και από τα καλώδια (απαιτείται βέβαια reverse engineering της σειριακής επικοινωνίας του module)
Κάτι παρόμοιο δηλαδή που κάνει και το OpenDPS firmware που ανέφερα στο topic για τα DPSx0xx.

----------


## kioan

Βάγγο, τελικά το γλίτωσες και το reverse engineering για την σειριακή επικοινωνία, δες εδώ.

----------


## SProg

Σταμάτα το. Πάρε ένα έτοιμο.

----------

