Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 123

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

Hybrid View

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

    Προεπιλογή Παραδείγματα σε CCS

    Μετά από ψάξιμο στο forum, για παραδείγματα κώδικα με τον CCS δεν είδα τίποτα ιδιαίτερο., για αυτό σκέφτηκα να δημιουργήσω ένα threat σχετικά με αυτό.

    Αυτό το έκανα για να βάζει όποιος θέλει διάφορα παραδείγματα με CCS, νομίζω είναι ένας καλός τρόπος εκμάθησης του compiler.
    Και ξεκινάω με ένα απλό πρόγραμμα ελέγχου rc-servo με την rs232 απο το pc.


    To project έγινε με PIC16F877A.

    schematic diagram
    motor2.jpg
    Το πρόγραμμα στο PC σε VB6

    Untitled2.jpg

    To πρόγραμμα του PIC σε CCS

    Κώδικας:
    #include <16f877a.h>
    #device ADC=10
    #include <stdlib.h>
    #use delay (clock=4M)
    #fuses xt,nowdt
    #use rs232(baud=9600,parity=N,xmit=PIN_c6,rcv=PIN_c7,bi  ts=8)
    
    void main()
    {
       int16 step;
       char motor_rs[10];
       port_b_pullups(true);
       setup_adc(ADC_CLOCK_DIV_32);
       setup_adc_ports(an0); 
       setup_ccp1(ccp_pwm);
       setup_timer_2(t2_div_by_16,255,1);
       set_adc_channel(0);
       while(1)
       {
          if (input(pin_b0))
          {
             if(kbhit()) gets(motor_rs);
             step=atol(motor_rs);  
          }
          
          else
          {
             delay_ms(50);
             step=read_adc()+230;
          }
          set_pwm1_duty(step);   
       }
    }
    Η δοκιμή

    IMG015.jpgIMG018.jpgIMG020.jpgIMG012.jpg

    Zητάω συγνώμη για την ποιότητα των photo και του video, τα τράβηξα με το κινητό.





    3 Not allowed! Not allowed!

  2. 5 μέλη ευχαρίστησαν τον spiroscfu για αυτό το χρήσιμο μήνυμα:

    GeorgeVita (15-05-11), herctrap (15-05-11), kentar (20-04-12), manolena (18-05-11), stavros_97s (03-01-13)

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

    Προεπιλογή

    Και τα αρχεία του project http://www.2shared.com/file/uHm8ic8H/RCservo.html

    O έλεγχος του μοτέρ γίνεται από το pc, οταν ο διακόπτης στο RB0 είναι ανοιχτός (στα 245hz και dutty cycle 1ms με 2,5ms η 1,5ms me 3,5ms ).
    Και όταν ο διακόπτης κλήση τότε ο έλεγχος περνάει στο ποτενσιόμετρο RV1, και αλλάζοντας την τιμή της R1 μπορούμε να έχουμε διαφορετικό dutty cycle, με 27ΚΩ είναι περίπου απο 1 έως 2 msec.

    οποίες παρατηρήσεις στην διάθεση σας.
    Νομίζω πως καλό θα ήταν να ανεβάσουν και άλλοι κάποια προτζεκτάκια γιατί ο ccs είναι ένας δυνατός compiler, που εδώ δεν τον χρησιμοποιούμε πολύ.
    Από την μεριά μου όποτε βρίσκω χρόνο θα ανεβάζω μικρά παραδείγματα.

    0 Not allowed! Not allowed!

  4. #3
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή


    Πολύ καλή πρωτοβουλία!
    G

    0 Not allowed! Not allowed!

  5. #4
    ΥπερΣυντονιστής Το avatar του χρήστη gsmaster
    Όνομα
    Γιάννης
    Εγγραφή
    Aug 2003
    Περιοχή
    Γιάννενα
    Μηνύματα
    4.444

    Προεπιλογή

    Να μην ξεχνάτε υπάρχουν και πολλά παραδείγματα που έρχονται μαζί με τον compiler και βρίσκονται στον φάκελο /examples/ στο φάκελο εγκατάστασης του compiler.

    0 Not allowed! Not allowed!
    Πριν γράψετε ένα νέο θέμα στο φόρουμ, ψάξτε ->εδώ<-, κάτι θα βρείτε που δεν ξέρατε.

  6. #5
    Μέλος Το avatar του χρήστη billtech
    Όνομα
    Βασιλης
    Εγγραφή
    Mar 2006
    Περιοχή
    Χανια και Κυπρο
    Μηνύματα
    2.221

    Προεπιλογή

    να σε ρωτησω κατι ασχετο?
    το προγραμμα στην VB πως το εκανες?
    γινετε να ανεβασεις τον κωδικα για το πως δινεις τις εντολες απο τον υπολογιστη στη σειριακη?
    δλδ τον τροπο που επικοινωνει το PC με τον επεξεργαστη?? ειτε με καποιο βιντεο ειτε με λογια καπως?
    το πως στελνεις απο το PC και πως διαβαζεις στο PC αυτα που στελνει ο uC.
    ευχαριστω.

    0 Not allowed! Not allowed!
    Η γυναίκα και τα ηλεκτρονικά θέλουν γείωση!!!

  7. #6
    Μέλος Το avatar του χρήστη georgz
    Όνομα
    Γιώργος
    Εγγραφή
    Oct 2009
    Περιοχή
    outer space
    Μηνύματα
    665

    Προεπιλογή

    Καλό!!! Για δώσε πληροφορίες? Από που το κατεβάζουμε? Υπάρχει άλλη έκδοση για υπολογιστές και άλλη για pic? Το πρόγραμμα πως το έστειλες στο pic?

    0 Not allowed! Not allowed!

  8. #7
    Μέλος
    Όνομα
    Σπύρος
    Εγγραφή
    May 2010
    Περιοχή
    Κεφαλονιά Αργοστόλι
    Μηνύματα
    105

    Προεπιλογή

    Σε ευχαριστω osek το προγραμμα γινεται compile τωρα μετα το include stdlib αλλα δεν ειναι λειτουργικο ειτε με gets() ειτε με getc().

    0 Not allowed! Not allowed!

  9. #8
    Μέλος Το avatar του χρήστη osek
    Όνομα
    Σωκράτης
    Εγγραφή
    Nov 2008
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    109

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από ventouza1987 Εμφάνιση μηνυμάτων
    Σε ευχαριστω osek το προγραμμα γινεται compile τωρα μετα το include stdlib αλλα δεν ειναι λειτουργικο ειτε με gets() ειτε με getc().
    Ναι ίσως θέλει κάποιες μικρές αλλαγές ο κώδικας. Την σειριακή την ελέγχεις εσύ;
    Στα fuses αντί για HS βάλε XT εφόσον δουλεύεις με κρύσταλλο 4MHz.
    Την μεταβλητή rs232 όρισέ την ως char rs232[4]; (Πίνακας 4 θέσεων που θα διαβάζει αριθμούς από την σειριακή)
    Αντί για rs232=getc(); κάνε gets(rs232);
    Μετά από αυτά (κι αν δεν ξεχνάω κάτι) αν στείλεις από την σειριακή τον αριθμό 512 ο κύκλος εργασίας θα πάει στο 50%.

    0 Not allowed! Not allowed!
    ...'Θα σε ξεχνάω κάθε μέρα'...

  10. #9
    Μέλος
    Όνομα
    Σπύρος
    Εγγραφή
    May 2010
    Περιοχή
    Κεφαλονιά Αργοστόλι
    Μηνύματα
    105

    Προεπιλογή

    o κωδικας ο καινουργιος ειναι ο παρακατω. Δεν λειτουργει ουτε ετσι αλλαξα κ εβαλα μπας κ ειναι το ccp1 setup_ccp2 k set_pwm2_duty τιποτα. Την σειριακη την ελεγχω εγω με ενα rs-232 ->ttl. Με το προγραμμα hype! terminal -cm-. Επισης το πιν ccp1 εχωντας βαλει ενα λεντ το βλεπω παντα on (βεβαια χωρις παλμογραφο να δω το duty cycle) αλλα 8α επρεπε να ειναι κλειστω κ οταν του στελνω εγω τιμη 8α επρεπε να αναβει.
    Κώδικας:
    #include "16F877A.h"
    #INCLUDE <stdlib.h>
    #FUSES NOWDT, XT, PUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD
    #USE DELAY (clock=4M)
    #USE RS232 (baud=9600,parity=N,bits=8,xmit=PIN_C6,rcv=PIN_C7)
    
    
    void main ()
       {
       char rs232[4];
       int16 pwm1;
       setup_ccp1(CCP_PWM);                   
       setup_timer_2(T2_DIV_BY_16, 255, 1);   
       
       while (True)
          {
          gets(rs232);
          pwm1=atol(rs232);
          set_pwm1_duty(pwm1);
          }
       }
    Οταν αντικαθιστω το προγραμμα με το παρακατω κωδικα να στελνω απλους χαρακτηρες δουλευει κανονικα το συστημα αρα καπου στον προγραμματισμο συμβαίνει κατι.
    Κώδικας:
    void main ()   {
       char rs232;   
       while (True)
          {
          rs232=getc();
          switch (rs232)
             {
             case 'a':
             output_high(PIN_a0);
             break;
             
             case 'b':
             output_low(PIN_a0);
             break;
             
             case 'c':
             output_high(PIN_a1);
             break;
             
             case 'd':
             output_low(PIN_a1);
             break;
    }
    }
    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη ventouza1987 : 13-04-15 στις 13:09

  11. #10
    Μέλος Το avatar του χρήστη osek
    Όνομα
    Σωκράτης
    Εγγραφή
    Nov 2008
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    109

    Προεπιλογή

    Περίεργο! Εγώ τον παρακάτω κώδικα τον έτρεξα στο ISIS Proteus (simulation) και δουλεύει κανονικά.
    Κώδικας:
    #include "16F877A.h"#INCLUDE <stdlib.h>
    #FUSES NOWDT, XT, PUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD
    #USE DELAY (clock=4M)
    #USE RS232 (baud=9600,parity=N,bits=8,xmit=PIN_C6,rcv=PIN_C7)
    
    
    void main ()
       {
          char rs232[4];
          int16 pwm1;
          set_tris_c(0x80);
          setup_ccp1(CCP_PWM); 
          setup_timer_2(T2_DIV_BY_16, 255, 1);
          while (True)
             {
                gets(rs232); 
                pwm1=atol(rs232);
                set_pwm1_duty(pwm1); 
             }
       }

    0 Not allowed! Not allowed!
    ...'Θα σε ξεχνάω κάθε μέρα'...

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

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

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

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

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