Teade
Collapse
Foorumi reeglid.
Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less
MSP430 prograMMeerimine
Collapse
X
-
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
-
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
-
Vs: MSP430 prograMMeerimine
Esmalt postitatud A.R. poolt Vaata postitustTore kui välja tuli.msn: pois11@hotmail.com
Comment
-
Vs: MSP430 prograMMeerimine
Esmalt postitatud A.R. poolt Vaata postitustSiin on PC näide, C tekst ja exe.
exe minu teada viirust ei sisalda.
>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
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
"Teen 0li a"
on?
Comment
-
Vs: MSP430 prograMMeerimine
Esmalt postitatud M.L poolt Vaata postitustMul c-s praktiliselt 0 ja seega on tore katsetada .
gcc
Mis see :
"Teen 0li a"
on?
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
-
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
-
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. ...
sleep argument linux-i all on sekundites .
Comment
-
Vs: MSP430 prograMMeerimine
Esmalt postitatud M.L poolt Vaata postitustsleep argument linux-i all on sekundites .
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
-
Vs: MSP430 prograMMeerimine
Esmalt postitatud A.R. poolt Vaata postitustLugesin et Linuxi all on ka usleep mikrosekundites ja nanosleep nanosekundites?
______
Iga uus asi, mida teada saad, teeb targemaks, seega jälle targem.
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
Comment
-
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; }
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
-
Vs: MSP430 prograMMeerimine
Esmalt postitatud pois11 poolt Vaata postitustLahendage parem minu probleem ära, seda ei taha keegi teha. Ehk läheb kellelgi süda helgemaks, tuletan meelde!
Töötav kood on selline: ...
Comment
-
Vs: MSP430 prograMMeerimine
Esmalt postitatud dieter poolt Vaata postitustsest 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.
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
-
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
-
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
Comment