Σελίδα 3 από 13 ΠρώτηΠρώτη 1 2 3 4 5 ... ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 21 έως 30 από 123

Θέμα: Παραδείγματα σε CCS

  1. #21
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Σκέφτομαι να ξεκινήσω ένα project για ένα απλό DMX controller, από αυτά που έχω βρει μέχρι τώρα είναι,
    η κωδικοποίηση του dmx σήματος.
    timingchat.gif
    τα σήματα που πρέπει να διαχειριστούμε είναι,
    IDLE = συνεχόμενο H
    MTBP = mark time between packets, που θα το βάλω στα 20mS
    BREAK = το ξεκίνημα του dmx πακέτου αυτό πρέπει είνα L για τουλάχιστον 88uS μια τιμή από 120 μέχρι 180uS πρέπει να είναι οκ.
    MAB = mark after brake αυτό είναι το προβληματικό (διαφορά παλιού με νέου dmx), αλλά από ότι βρήκα πλέον τα 12uS πρέπει να είναι οκ.
    SC = start code από ότι έχω βρει databyte=0 είναι για dimmer, αυτό το byte μπορεί να χρησιμοποιηθεί για να πει στο receiver τη είδους data ακολουθούν.
    MTBF = mark time between frames αυτό άλλοι δεν το βάζουν καθόλου άλλοι πάλη το βάζουν εγώ θα το βάλω με μια τιμή 10 με 20uS.
    και τέλος το CD ή FD = channels data ή frames data που είναι η πληροφορία των καναλιών με 512 κανάλια μέγιστο (εξού και DMX-512), δεν χρειάζεται να στέλνουμε και τα 512 κανάλια συνέχεια, εάν θέλουμε να ελέγξουμε ας πούμε δυο ρομποτικά με 5 κανάλια το καθένα μπορούμε κάλλιστα να στείλουμε μόνο τα πρώτα 10 κανάλια.



    Τα byte πληροφορίας SC/CD αποτελούνται από 11 bit και είναι ίδια, το κάθε bit έχει χρόνο 4uS 250Khz δηλ. baud rate 250kbps γι αυτό θέλουμε και κρύσταλλο (για εμάς που δουλεύουμε με υψηλού επιπέδου γλώσσες και όχι assembly) μεγαλύτερο από 8Mhz και είναι έτσι.

    Untitled.jpg
    Το πρώτο bit είναι το start bit (5) που είναι L, και τα δυο τελευταία τα stop bit (8.) που είναι Η, το πρώτο byte είναι το SC (3) και τα υπόλοιπά τα CD
    και επίσης η μετάδοση του byte γίνεται με το πρώτο bit σαν LSB.

    Σιγά σιγά θα ακολουθήσουν και τα υπόλοιπα, την δημιουργία του dmx θα την φτιάξω με bit-banging, μου φαίνεται ποιο απλό από ότι να χρησιμοποιήσω την usart του pic.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη spiroscfu : 29-05-11 στις 14:22

  2. #22
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή O κώδικας του pic.

    #include <16F877A.h>
    #fuses HS,NOWDT,PUT,NOBROWNOUT
    #use delay (clock=20M)
    //#use rs232(baud=9600,parity=N,xmit=PIN_c6,rcv=PIN_c7,st ream=spiros,bits=
    #use fast_io(B)
    #use fast_io(D)
    #byte PORTB=0x06 //ορισμός buttons/variables/array/dmx
    #byte PORTD=0x08
    #bit SWITCH1=PORTB.0
    #bit SWITCH2=PORTB.1
    #bit SWITCH3=PORTB.2
    #bit SWITCH4=PORTB.3
    #bit SWITCH5=PORTB.4
    #bit SWITCH_0_5=PORTB.5
    #bit RESET_DATA=PORTB.6
    #bit DMX=PORTD.0
    #bit CH1_5=PORTD.1
    int dmx_data=0;
    #bit dmx_data1=dmx_data.0
    #bit dmx_data2=dmx_data.1
    #bit dmx_data3=dmx_data.2
    #bit dmx_data4=dmx_data.3
    #bit dmx_data5=dmx_data.4
    #bit dmx_data6=dmx_data.5
    #bit dmx_data7=dmx_data.6
    #bit dmx_data8=dmx_data.7
    int i;
    int dmx_cd[10]={0,0,0,0,0, //οριστικοποιήση των channel data
    0,0,0,0,0};
    void send_sc();
    void send_cd();
    void main()
    {
    int count;
    port_b_pullups(true);
    setup_adc(adc_clock_div_64);
    setup_adc_ports(AN0);
    set_adc_channel(0);// adc conversion απο ποτεσιόμετρο
    set_tris_B(0xFF);
    set_tris_D(0x0);
    portd=1;
    while(1)
    {
    if(switch_0_5) //αν είναι H ή δεν έχει κλήσει τότε
    {
    switch (~PORTB) //bitwise not στην portb (για να είναι ποιο εύκολο λόγο pullups)
    {
    case 1: {delay_us(100); dmx_cd[0]=read_adc();}//αν πατηθεί ο πρώτος γραψε τα
    break; //περιεχόμενα, του adc στο πρώτο channel data (dmx_cd[10])
    case 2: {delay_us(100); dmx_cd[1]=read_adc();}//δευτερο cd
    break;
    case 4: {delay_us(100); dmx_cd[2]=read_adc();}//3
    break;
    case 8: {delay_us(100); dmx_cd[3]=read_adc();}//4
    break;
    case 16: {delay_us(100); dmx_cd[4]=read_adc();}//5
    break;
    default: break;
    }
    ch1_5=1;//άναψε το led channel 1_5
    }
    if(!switch_0_5)//(logical not) αν είναι L ή τον κλείσουμε τότε
    {
    switch (~PORTB)//bitwise not στην portb
    {
    case 33: {delay_us(100); dmx_cd[5]=read_adc();}//αν πατηθεί ο πρώτος γραψε τα
    break; //περιεχόμενα του adc στο έκτο cd
    case 34: {delay_us(100); dmx_cd[6]=read_adc();}//7
    break;
    case 36: {delay_us(100); dmx_cd[7]=read_adc();}//8
    break;
    case 40: {delay_us(100); dmx_cd[8]=read_adc();}//9
    break;
    case 48: {delay_us(100); dmx_cd[9]=read_adc();}//10
    break;
    default: break;
    }
    ch1_5=1;//σβήσε το led channel 1_5
    } //αν πατηθεί ο reset_data μηδένισε όλα τα cd (channel data)
    if(!reset_data) {for(count=0;count<10;count++) dmx_cd[count]=0;}
    send_sc();
    send_cd();
    }
    }
    void send_sc()//SC αποστολή του start code
    {
    dmx=1;
    delay_ms(1);//MTBP τελικά το έβαλα στο 1msec
    dmx=0;
    delay_us(176);//BREAK 176usec
    dmx=1;
    delay_us(12);//MAB 12usec
    dmx=0;
    delay_us(36);//1 start bit 4usec + και 8 data bit 32usec
    dmx=1;
    delay_us(1;//2 stop bit 8usec + MTBF 10usec
    }
    void send_cd()//CD αποστολή των channel data
    { //εδώ είναι που χρειαζόμαστε ταχύτητα
    for (i=0;i<10;i++)
    {
    /*dmx=0;
    delay_us(4);//start bit //Με αυτόν τον τρόπο και
    for (k=0;k<8;k++) //με αρκετούς άλλους
    { //οι χρόνοι βγαίναν
    dmx=bit_test(dmx_cd[i],k); //αρκετά εκτός, από 4usec
    delay_us(4); //και μειώνοντας το delay έχανες σε ακρίβεια
    }
    dmx=1;
    delay_us(1;//2 x stop bit 8usec + MTBF 10usec
    */
    dmx_data=dmx_cd[i];//αυτός είχε την μικρότερη απόκλιση
    dmx=0;
    delay_cycles(16);//και μετάτρεψα το delay σε cycles για να έχω ακρίβεια
    dmx=dmx_data1;// (1/20Mh)*4=200nsec,
    delay_cycles(16);//από τις εξομείωσεις με το proteus
    dmx=dmx_data2; //είδα ότι έπρεπε να αφιαρέσω 800nsec 800/200(instruction set)=16
    delay_cycles(16);
    dmx=dmx_data3;
    delay_cycles(16);
    dmx=dmx_data4;
    delay_cycles(16);
    dmx=dmx_data5;
    delay_cycles(16);
    dmx=dmx_data6;
    delay_cycles(16);
    dmx=dmx_data7;
    delay_cycles(16);
    dmx=dmx_data8;
    delay_cycles(16);
    dmx=1;
    delay_us(1;// δεν μας ενδιαφέρει η ακρίβεια σε αυτό το σημείο γιατί ακολουθεί το MTBF σε H
    }
    }
    Dmx.jpg

    αύριο θα ανεβάσω τα αρχεία και καποια άλλα στοιχεία.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη spiroscfu : 06-06-11 στις 00:53

  3. #23
    Μέλος Το avatar του χρήστη sv4lqcnik
    Όνομα
    Νικος
    Εγγραφή
    Jun 2009
    Περιοχή
    Λαρισα
    Μηνύματα
    469

    Προεπιλογή

    γεια σου ρε γατονι

    ξερεις οταν το dmx ετοιμαστει δινει φωτα και λευτα σε οποιον απο τους κατεχωντες το αθλημα της εγκαταστασης με μια μικρη μετατροπη καθεται θεσπεσια στον light driver

    0 Not allowed! Not allowed!

  4. #24
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Σε ευχαριστώ Νίκο

    Έφτιαξα και το hardware και έγινε και η δοκιμή σε πραγματικές συνθήκες με ένα PAR36 (RGB Led),
    η πρώτη δοκιμή έγινε με τα buttons και τον adc και αφού δούλεψε είπα να κάνω και ένα πρόγραμμα ελέγχου από το PC.

    στο πρόγραμμα του pic για να συνεργαστεί με την rs232 έβαλα αυτόν τον κώδικα επιπλέον στην main (while(1))
    Κώδικας:
    if (kbhit())
          {
             gets(data_rs);
             if (data_rs[0]=='A')
             {
                data_rs[0]='0';
                rs_count=atoi(data_rs);
             }
             if (data_rs[0]=='B')
             {
                data_rs[0]='0';
                dmx_cd[rs_count]=atoi(data_rs);
             }
          }
    το πρόγραμμά της VB download

    test.jpg

    σάρωση0001.jpg
    και το video της δοκιμής

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη spiroscfu : 15-06-11 στις 00:05

  5. #25
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Αν κάποιος έχει ασχοληθεί και έχει φτιάξει δέκτη για τo Dmx512,
    θα ήμουν ευγνώμον αν μου έδινε κάποιες πληροφορίες σχετικά με την λήψη/αποκωδικοποίηση, για να γλιτώσω όσο γίνεται το ψάξιμο.
    Ευχαριστώ για τις όποιες πληροφορίες.

    0 Not allowed! Not allowed!

  6. #26
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Ρε παιδιά δεν έχει ασχοληθεί κανείς ποτέ με dmx?

    0 Not allowed! Not allowed!

  7. #27
    Μέλος Το avatar του χρήστη sv4lqcnik
    Όνομα
    Νικος
    Εγγραφή
    Jun 2009
    Περιοχή
    Λαρισα
    Μηνύματα
    469

    Προεπιλογή

    ΕΕΕΕΕ ΣΠΥΡΟ
    καλο χειμωνα καλιο αργα παρα αργοτερα δεν εμπενα τακτικα στο φορουμ λογω διαφορων εμποδιων οπως διακοπη διακομιστη κλπ επακολουθα λογω ελειψης εργασιας αστα να πανε...........
    μην παθεις και κανενα εγκεφαλικο . το dmx εχει παρει τον δρομο του και δεν θα γυρισει πισω η βασικη επικοινωνια γινεται καλωδιακα μεταφεροντας το σημα σε καθε καναλι με multy core cable και παει σε γομαρια μετασχηματιστες στην περιπτωση της πιστας παρ με λαμπες ιωδινης στα 12 βολτ και η κεντρικη δινει σηματα στα dimer της τελικης βαθμιδας στο patch box στην τελικη οτι dimer βρεις εκει πατας θα γκουγκλαρω και εγω και οποιος προλαβει αλος ας δωσει χερι βοηθειας τωρα με τις μπαταριες γεματες . <<αλλα σπυρο ας εχουμε στην ακρη του μυαλου μας την νωοτροπια του ελλαδιστανικου λαου>>

    0 Not allowed! Not allowed!

  8. #28
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Νίκο δεν κάνω το όλο project για πώληση αλλά για την κατανόηση των λειτουργιών του pic (είναι λίγο πολύπλοκο και χρησιμοποιώ δικό μου κώδικα και όχι έτοιμο που συνεπάγεται "μάθηση"), με έτοιμο θα το είχα ήδη κάνει απλά είχα ζητήσει από όποιον έχει ασχοληθεί μια μικρή βοήθεια στην κατανόηση της αποκωδικοποιήσεις του σήματος από την μεριά του δέκτη.
    Κατά την γνώμη μου ο κώδικας από την μεριά του αποκωδικοποιητή είναι αρκετά ποιο πολύπλοκος από τον controller ιδιαίτερα με τους pic της μεσαίας τάξης και με C και όχι assembly για να επιτύχεις ακριβώς τους χρόνους της επικοινωνίας και να ξεχωρίσεις τα διαφορετικά σήματα.
    Τέλος πάντων το είχα προχωρήσει και είχα φτάσει σε ένα καλό σημείο αλλά δεν είδα καθόλου ανταπόκριση και έτσι το άφησα, όταν μου ξανάρθει η όρεξη ή όταν δω συμμετοχή και από άλλους τότε θα το συνεχίσω και θα το ανεβάσω και ολοκληρωμένο για όποιον το θέλει (χειμωνιάτικα μάλλον όμως).


    Μια επισήμανση το dmx512 μεταφέρεται παράλληλα (τρία καλώδια dmx+, dmx-, grd) σε όλες της προς έλεγχο συσκευές και μπορεί να διαχειριστή μέχρι και 512 κανάλια από 8 bit το καθένα.

    edit:
    Τώρα έχω και τον atten (
    ADS1102CAL) θα μου είναι πολύ ποιο εύκολο!

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη spiroscfu : 05-09-11 στις 06:35

  9. #29
    Μέλος Το avatar του χρήστη shoco
    Όνομα
    Θοδωρής
    Εγγραφή
    Jun 2005
    Μηνύματα
    358

    Προεπιλογή

    Και εγώ ασχολούμαι με DMX αλλά δουλεύοντας σε AVR. Βέβαια λόγω έλλειψης χρόνου το έχω αφήσει στην άκρη, αλλά για λίγο, γιατί με ενδιαφέρει και έχω επενδύσει σε αυτό που φτιάχνω.

    0 Not allowed! Not allowed!

  10. #30
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Μελλοντικά το βλέπουμε Θοδωρή.

    0 Not allowed! Not allowed!

Σελίδα 3 από 13 ΠρώτηΠρώτη 1 2 3 4 5 ... ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Απαντήσεις: 26
    Τελευταίο Μήνυμα: 24-01-17, 15:54
  2. Προβλημα με C# (CCS)
    By dbsjro in forum Μικροελεγκτές
    Απαντήσεις: 43
    Τελευταίο Μήνυμα: 03-09-09, 03:03
  3. Παραδείγματα κώδικα c για AVR
    By nikspyr in forum Μικροελεγκτές
    Απαντήσεις: 4
    Τελευταίο Μήνυμα: 29-03-09, 19:23

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας