Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

MSP430 prograMMeerimine

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    #16
    Vs: MSP430 prograMMeerimine

    Esmalt postitatud pois11 poolt Vaata postitust
    Loomulikult ma olen suht veendunud kui istun veel 5h siis saan ise hakkama ...

    Praeguseks valmis siis?
    Erilahendused.
    PS või mail.

    Comment


      #17
      Vs: MSP430 prograMMeerimine

      Ei ole kahjuks. Olengi mõned tunnid jamanud ja hakkama pole saanud. Ei tea kuhu vahele miskit pean lisama. Ikka on kood punasid x täis. Googlis leiab ka suht palju näiteid ja õpetusi aga ma ei saa aru. Tundub nagu üritaks võimatut teha.
      msn: pois11@hotmail.com

      Comment


        #18
        Vs: MSP430 prograMMeerimine

        Tore kui välja tuli.
        Selle progemisega on nii et esimesed 10-20 aastat on raske.
        Pärast läheb kergemaks aga siis jälle ei mäleta kuidas just teha tuli.

        Katsetasin seda probleemi ristsõna ja sudoku asemel.
        Ülesanne on seal lahenduses paigutatud structuuri tabelisse.
        On katsetatud ka tavalist massiivi, valikud 0 ja 1.
        Tabelisse võib lisada uusi variante siis saab valida rohkem.
        Kuna see näide jookseb PC peal siis nuppudeks on klaviatuuri 1 ja 0 ning enter.
        Tulemused näidatakse ekraanil tekstina.
        Kõige tüütum on selle 90 sek ootamine.
        ***
        Siin on PC näide, C tekst ja exe.
        exe minu teada viirust ei sisalda.

        Nii ei pea tegema aga ka selline lahendus on mõeldav.

        Comment


          #19
          Vs: MSP430 prograMMeerimine

          Esmalt postitatud A.R. poolt Vaata postitust
          Tore kui välja tuli.
          Mis mõttes... selle viimase osaga pole hakkama saanud veel. Ehk siis asi on täitsa pooleni. Ausalt öeldes olen kergelt loobunud ja ootan paremat aega. Ilmad ka ilusad.
          msn: pois11@hotmail.com

          Comment


            #20
            Vs: MSP430 prograMMeerimine

            Esmalt postitatud A.R. poolt Vaata postitust
            Siin on PC näide, C tekst ja exe.
            exe minu teada viirust ei sisalda.
            Mul c-s praktiliselt 0 ja seega on tore katsetada .

            >gcc -v
            gcc version 4.8.1 20130909 [gcc-4_8-branch revision 202388] (SUSE Linux)

            #kompileerin
            >gcc relee.c -o relee
            relee.c:17:1: warning: useless storage class specifier in empty declaration [enabled by default]
            };
            ^
            #ja teeb binaarfaili ära. Käivitan:
            Kood:
            ~/prgm/elekter> ./relee 
             0 1 200   500
             1 2 200   500
             2 3 200  5000
             3 2 200  1000
             4 2 200  1000
             5 2 200  1000
             6 2 200  1000
             7 2 200  1000
             8 2 200  1000
             9 2 200 15000
            10 1 200     0
            
            
             0 1 200   500
             1 3 5000 90000
             2 1 200     0
            
            
            Teen nupp 0-1. Vali ja enter  
            1
            
            Teen 0li 31 1 
            0
            # ja siia jääbki. Pole vahet, mida sisestada. CTRL+C. Proovin voibla lehel olevat exe faili üle emulaatori
            Kood:
            ~/prgm/elekter> wine relee.exe  
             0 1 200   500
             1 2 200   500
             2 3 200  5000
             3 2 200  1000
             4 2 200  1000
             5 2 200  1000
             6 2 200  1000
             7 2 200  1000
             8 2 200  1000
             9 2 200 15000
            10 1 200     0
            
            
             0 1 200   500
             1 3 5000 90000
             2 1 200     0
            
            
            Teen nupp 0-1. Vali ja enter  
            1
            
            Teen 0li 31 1 
            Teen nupp 0-1. Vali ja enter  
            0
            
            Teen 0li 30 0 
            Teen nupp 0-1. Vali ja enter  
            0
            
            Teen 0li 30 0 
            Teen nupp 0-1. Vali ja enter  
            1
            
            Teen 0li 31 1 
            Valin nupp
            1
            
            Valin 0li 31 1 
            
            Teen versiooni  1
             0 1 200   500
             1 3 5000 90000
             2 1 200     0
            Teen nupp 0-1. Vali ja enter  
            
            0
            
            Teen 0li a 
             
            Teen nupp 0-1. Vali ja enter  
            0
            
            Teen 0li 30 0 
            Teen nupp 0-1. Vali ja enter  
            1
            
            Teen 0li 31 1 
            Valin nupp
            0
            
            Valin 0li 30 0 
            
            Teen versiooni  0
             0 1 200   500
             1 2 200   500
             2 3 200  5000
             3 2 200  1000
             4 2 200  1000
             5 2 200  1000
             6 2 200  1000
             7 2 200  1000
             8 2 200  1000
             9 2 200 15000
            10 1 200     0
            Teen nupp 0-1. Vali ja enter  
            1
            
            Teen 0li 31 1 
            Valin nupp
            1
            
            Valin 0li 31 1
            Mis see :
            "Teen 0li a"
            on?

            Comment


              #21
              Vs: MSP430 prograMMeerimine

              Esmalt postitatud M.L poolt Vaata postitust
              Mul c-s praktiliselt 0 ja seega on tore katsetada .
              gcc

              Mis see :
              "Teen 0li a"
              on?
              gcc on mõeldav.
              AGA
              Mul oli kunagi ammu külas üks väike Ameerika poiss Aarne.
              Tema rääkis vabavaralisest translaatorist lcc-32.
              Täitsa mõnus riistapuu.
              ***
              Kuna tahtsin näha mis ma klaviatuurilt vajutasin siis lisasin sellise rea:
              fprintf(stdout, "\nTeen 0li %x %c \n",i,i);
              Siin vahetatakse rida \n
              Kirjutatakse Teen Oli
              Trükitakse välja 1.muutuja väärtus kui HEX kood %x
              Ja siis 2. muutuja kui sümbol.

              Kui kasutaja ei jõudnud neid viiteid ära oodata ja vajutas ENTER nuppu
              siis näidatakse enter koodi mis on 0xa ehk 10 detsi koodis.
              Sümbolina väljastus tegi reavahetuse.
              Vast oleks olnud selgem:
              fprintf(stdout, "\nTeen 0li 0x%x ' %c ' \n",i,i);
              Vast oleks selgem. Proovi.

              Kui oleks tahtmine seda asja PC peal päriselt teha siis saab kasutada RS232.
              Seal on 3 soont sisse, sobib, ja
              2 soont välja. Otse ei saa aga kui kasutada koodi siis tuleb välja.
              00, 01, 10, 11
              Seriali otsad jäävad veel üle.
              viimati muutis kasutaja A.R.; 08 m 2014, 21:04.

              Comment


                #22
                Vs: MSP430 prograMMeerimine

                Kuna siin paistab olevat C huvilisi siis lisasin sinna http://voibla.ee/trafo/Relee/index.html C teksti ka natuke kommentaare.
                Vast on lihtsam aru saada mis toimub.

                Kui translaator teeb teksti punaseks siis ei aita kõigi teiste kirumine.
                Tuleb lihtsalt VEAD ära parandada.
                viimati muutis kasutaja A.R.; 10 m 2014, 10:04.

                Comment


                  #23
                  Vs: MSP430 prograMMeerimine

                  Kui kompileerin linux-i all, siis

                  Esmalt postitatud M.L poolt Vaata postitust
                  ...
                  # ja siia jääbki. Pole vahet, mida sisestada. CTRL+C. ...
                  http://stackoverflow.com/questions/1...o-milliseconds.

                  sleep argument linux-i all on sekundites .

                  Comment


                    #24
                    Vs: MSP430 prograMMeerimine

                    Esmalt postitatud M.L poolt Vaata postitust
                    sleep argument linux-i all on sekundites .
                    Kas elab üle kui on aeg/1000?
                    Või tuleb kirjutada uus ajaveetja?
                    Näiteks ajakatkestused lcc-32 C-s on 10 msek täpsusega
                    ja sleep() tundub väga msek olevat.

                    Aga see ajamasin on vaja üks kord kirja panna ja siis ta nii püsib.
                    kui midagi muud pole vaja teha siis sobib ka selline
                    #include <math.h>
                    .....
                    ajaviitja(int a){
                    int j,i;
                    float s;
                    for(i=0;i<a;i++){
                    for(j=0;j<60000;j++){
                    s=sqrt((float)j);
                    }
                    }
                    }

                    Proovisin, 1000 on ca 26 sek.
                    ***
                    Lugesin et Linuxi all on ka usleep mikrosekundites ja nanosleep nanosekundites?
                    ______
                    Iga uus asi, mida teada saad, teeb targemaks, seega jälle targem.
                    viimati muutis kasutaja A.R.; 10 m 2014, 14:29.

                    Comment


                      #25
                      Vs: MSP430 prograMMeerimine

                      Esmalt postitatud A.R. poolt Vaata postitust
                      Lugesin et Linuxi all on ka usleep mikrosekundites ja nanosleep nanosekundites?
                      ______
                      Iga uus asi, mida teada saad, teeb targemaks, seega jälle targem.
                      Leidsin sellise asja http://stackoverflow.com/questions/8...r-linux-in-c-c .

                      Ja nüüd saab asendada sleep() kasutajafunktsiooniga Oota(aeg) ja defineerida:

                      Kood:
                      #ifdef __unix__                    /* __unix__ is usually defined by compilers targeting Unix systems */
                          void Oota(aeg){
                              usleep(aeg*1000);
                          }    
                      #elif defined(_WIN32) || defined(WIN32)     /* _Win32 is usually defined by compilers targeting 32 or   64 bit Windows systems */
                          void Oota(aeg){
                              sleep(aeg);
                          }    
                      #endif
                      Kompileerib ära ja enam ei jää mökutama ning sobib releemängu mängimiseks. Põhimõtteliselt peaks ka win all kompileeruma - proovige, kel windows on olemas.

                      Comment


                        #26
                        Vs: MSP430 prograMMeerimine

                        Lahendage parem minu probleem ära, seda ei taha keegi teha. Ehk läheb kellelgi süda helgemaks, tuletan meelde!

                        Töötav kood on selline:
                        Kood:
                        #include <msp430.h>
                        /*
                         * main.c
                         */
                        #define CS_595 BIT3 //P2
                        #define ENABLE BIT2 //P2
                        #define SCL_PIN BIT5 //CLK
                        #define SDA_PIN BIT7  //Data to 595's
                        #define DISABLE_SR P2DIR |= ENABLE; P2OUT |= ENABLE
                        #define ENABLE_SR P2DIR &= ~ENABLE; P2OUT &= ~ENABLE
                        #define SR_DESELECT P2OUT &= ~CS_595 //Select shift register
                        #define SR_SELECT P2OUT |= CS_595 //Deselect shift register
                        #define BUTTON BIT3
                        #define RELAY_1 BIT0
                        #define RELAY_2 BIT1
                        #define RELAY_3 BIT6
                        #define TEST_DELAY 500000
                        //Function prototypes
                        void initSPI();
                        void write(char relays);
                        
                        
                        int main(void) {
                            WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
                            //configuration from GRACE
                            BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;
                            if (CALBC1_16MHZ != 0xFF) {
                                   /* Adjust this accordingly to your VCC rise time */
                                   __delay_cycles(100000);
                                   /* Follow recommended flow. First, clear all DCOx and MODx bits. Then
                                    * apply new RSELx values. Finally, apply new DCOx and MODx bit values.
                                    */
                                   DCOCTL = 0x00;
                                   BCSCTL1 = CALBC1_16MHZ;     /* Set DCO to 16MHz */
                                   DCOCTL = CALDCO_16MHZ;
                               }
                            BCSCTL1 |= XT2OFF + DIVA_0;
                            BCSCTL3 = XT2S_0 + LFXT1S_2 + XCAP_1;
                            //INTERRUPT ON 1.3 - Pull up resistor enabled
                            P1IE |= BUTTON;
                            P1IFG |= BUTTON;
                            P1REN |= BUTTON;
                            P1OUT |= BUTTON;
                            P1IFG &= ~BUTTON;
                            P1DIR |= BIT0|BIT1|BIT6;
                            P1OUT &= ~(BIT0|BIT1|BIT6);
                            _bis_SR_register(GIE);
                         initSPI();
                         ENABLE_SR;
                         LPM0; //sleep until button press
                         while(1)
                         {
                          P1OUT |= BIT0;
                          write(RELAY_1);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT0;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT6;
                          write(RELAY_3);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT6;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(99999999); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(300000000); //half second
                          P1OUT |= BIT0;
                          write(RELAY_1);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT0;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          LPM0;
                         }
                        }
                        //Set up USCI_B for SPI
                        void initSPI()
                        {
                         P1DIR |= SCL_PIN|SDA_PIN;
                         P2DIR |= CS_595;
                         SR_DESELECT;
                         P1SEL |= SCL_PIN + SDA_PIN;
                         P1SEL2 |= SCL_PIN + SDA_PIN;
                         _delay_cycles(5000);
                        }
                        /*
                         * Outputs relay settings to booster
                         */
                        void write(char relays) {
                         SR_SELECT;
                         SR_DESELECT;
                        }
                        // Port 1 interrupt service routine
                        #pragma vector=PORT1_VECTOR
                        __interrupt void Port_1(void)
                        {
                          //P1OUT ^= 0x01;                            // P1.0 = toggle
                          P1IFG &= ~BUTTON;
                          LPM0_EXIT;
                        }
                        Nüüd sooviks nii, et kui teise sisendisse tuleb signaal hakkaksid väljundid test jada lülitama.
                        Ehk siis ei oska seda osa kuhugile pista ja ära siduda teise sisendiga

                        Kood:
                          P1OUT |= BIT0;
                          write(RELAY_1);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT0;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          P1OUT |= BIT6;
                          write(RELAY_3);//all on
                          _delay_cycles(99999999); //half second
                          P1OUT ^= BIT1;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(100000000); //half second
                          P1OUT |= BIT1;
                          write(RELAY_2);//all on
                          _delay_cycles(8000000); //half second
                          P1OUT ^= BIT6;
                          write(RELAY_2);//turn off 1
                          _delay_cycles(8000000); //half second
                          LPM0;
                        viimati muutis kasutaja pois11; 10 m 2014, 20:24.
                        msn: pois11@hotmail.com

                        Comment


                          #27
                          Vs: MSP430 prograMMeerimine

                          Esmalt postitatud pois11 poolt Vaata postitust
                          Lahendage parem minu probleem ära, seda ei taha keegi teha. Ehk läheb kellelgi süda helgemaks, tuletan meelde!

                          Töötav kood on selline: ...
                          Tahaks aidata, aga näe, õpin alles ise ka C-d ja sain just kompileerimise käima oma masinas. Aga tundub, et A.R. on Sinu probleemi põhimõtteliselt ära lahendanud. Kas Sa selle releemängu (http://voibla.ee/trafo/Relee/index.html) toimimisest saad aru?

                          Comment


                            #28
                            Vs: MSP430 prograMMeerimine

                            Esmalt postitatud dieter poolt Vaata postitust
                            sest tavaliselt kipub nii olema, et klient ise ka ei tea täpselt mida ta tahab ja tegemise käigus selgub muudkui lisaks, et klient soovib veel igatsugu kellasid-vilesid ja pole algse versiooniga rahul ja tegija peab raiskama aega 10 korda rohkem, kui algne umbmäärane ülesanne paika oli pandud.
                            See millest dieter kirjutas on softimeeste seas teada ja tuntud nähtus ning pigem reegel kui erand. Sardsüsteemides ehk veelgi tuntavam, sest siin asub kliendi soovi ja lõpptulemuse vahel ka reaalne maailm oma mitte-lineaarsete füüsikaliste nähtuste ja juhuslike võludega. Illustreeritult (klikk suurendamiseks):

                            Click image for larger version

Name:	tree-swing.jpg
Views:	1
Size:	112,3 KB
ID:	868009

                            Moore-i seadus veel kehtib ja raud tõesti ei maksa täna suurt midagi. Lihtne on ka aru saada, et rauda tehakse konveieri peal copy-paste meetodil. Mida suurem hunnik, seda odavam. Soft, mis sinna rauda istutatakse, et see paneks raua soovitult käituma on aga veidi teistsugune: see vajab iga lahenduse korral erinevat lähenemist - analüüsi, disaini, testi jms. Korduvalt. Koodi kirjutamiseks kuluv aeg kogu softi disaini protsessist on tühine.

                            Sestap ongi arendamise eest küsitavad hinnad sellised nagu on. Tegemist ei ole puuhalgude ladumisega riita (tsükkel: võtan, panen ja kordan).

                            Comment


                              #29
                              Vs: MSP430 prograMMeerimine

                              Tundub et selle programmi originaal on siin:

                              Kustutatud on paar rida.

                              Kui lugeda algset ülesannet ja seda teksti siis ega nende käitumine päris kokku ei lange.
                              See 5 tundi muudetud tekst on tõesti muudetud.

                              Vaatame natuke mõnda kohta:
                              Orig
                              ___________________
                              P1OUT |= BIT0|BIT6;
                              write(RELAY_1|RELAY_2|RELAY_3|RELAY_4);//all on
                              _delay_cycles(8000000); //half second
                              P1OUT ^= BIT0;
                              write(RELAY_2|RELAY_3|RELAY_4);//turn off 1
                              _delay_cycles(8000000); //half second
                              _______________________
                              // märk tähendab et järgneb seletus inimese jaoks
                              // all on tähendab et Releed 1, 2, 3, 4 lülitati sisse
                              //turn off 1 tähendab et Releed 2, 3, 4 lülitati sisse aga R1 EI lülitatud. Järelikult R1 lülitus välja.

                              Sama lõik 5 tunni järel
                              _____________________
                              P1OUT |= BIT0;
                              write(RELAY_2);//all on
                              _delay_cycles(8000000); //half second
                              P1OUT ^= BIT0;
                              write(RELAY_2);//turn off 1
                              _delay_cycles(8000000); //half second
                              ___________________________________
                              //all on Sisse R2
                              //turn off 1 Ikka R2 sisse.
                              Midagi on mäda

                              See RELAY_2 on lihtsalt arvuti registri bitt. defineeriti siin #define RELAY_2 BIT2

                              Mida teeb write();
                              Originaal
                              void write(char relays) {
                              SR_SELECT;

                              UCB0TXBUF = relays; //this will end up on the second shift register
                              while (!(IFG2 & UCB0TXIFG)); //wait for send to complete
                              SR_DESELECT;
                              }
                              Releede bitid saadetakse kuskile, ilmselt väljundregistrisse.

                              5 tundi
                              void write(char relays) {
                              SR_SELECT;


                              SR_DESELECT;
                              }
                              Saatmist ei toimu


                              Miks Releed klõpsuvad nii nagu peavad ja aegu saan lihtsa vaevaga muuta.
                              Sellest mina aru ei saa.

                              See kiige ehitamise lugu oli väga õpetlik.
                              Lõpuks on ikkagi tulemuseks Sinu valik ja tootja PRC.

                              Comment


                                #30
                                Vs: MSP430 prograMMeerimine

                                Kasutatu on kena C programm aga...
                                Selleks et ta veatult transleeruks peab olema defineeritud BIT1 jne.
                                #define RELAY_1 BIT1

                                See BITi definitsioon võiks olla failis msp430.h, see on selles tekstis ainus võimalus.
                                Netis on leida vähemalt kaks sellist faili aga seal BITe ei tunta.

                                Et C tekst transleeruks on vaja leida sobivad lisad.
                                Aga kust neid originaale leida?

                                Jagada ise ära need kaks 8 bitist registrit on teine variant.

                                ***
                                Teha vajadusel see ülesanne mõne PICi või Atmeli peal oleks hulga harjumuspärasem.
                                Samas, relee, mis rakendub 0,2 sekundiks, on jälle mõtteid tekitav.
                                Ja paistab ka et probleem kedagi eriti ei huvita.
                                IT pole pop.

                                Comment

                                Working...
                                X