Fórum témák

» Több friss téma
Fórum » MSP430 mikrovezérlők
 
Témaindító: gomzito, idő: Ápr 21, 2006
Témakörök:
Lapozás: OK   27 / 139
(#) szitko válasza szitko hozzászólására (») Jan 8, 2012 /
 
Megvan.
16bites előjel nélküli szám.
(#) Beachway válasza icserny hozzászólására (») Jan 8, 2012 /
 
Azt még nem értem, hogy az én példaképpen felhozott ciklusomba hogyan tudom beépíteni??Minden egyes __delay sor helyett egy ilyen ciklus kell??
(#) icserny válasza szitko hozzászólására (») Jan 8, 2012 /
 
Idézet:
„Mi az "uint16_t", és hol találok róla több infót?”

Ezeket az újmódi (fix szélességű) változótípusokat tudomásom szerint a C99 standard vezette be, a hordozhatóság érdekében. Használatukhoz a stdint.h fejléc állományt be kell csatolni.
(#) icserny válasza Beachway hozzászólására (») Jan 8, 2012 /
 
Nem, a program elején definiálod a függvényt, ahogy beírtam. Ahol szükséges, ott pedig meghívod:

  1. utasítás1;
  2. delay_ms(100);
  3. utasítás2;
  4. delay_ms(250);


Szerintem a __delay_cycles()-nek is működnie kell (én használom is), de annak annyi hátránya van, hogy inline függvény és futás közben nem adható meg a paramétere (a fordítónak már tudnia kell, hogy hány ciklus lesz a várakozás).
(#) szitko válasza icserny hozzászólására (») Jan 8, 2012 /
 
Köszönöm.
Egyszerű hangkeltés a LaunchPad-al:
  1. void main(void){                      // hang előállítása
  2.   char h;             // h deklarálása
  3.   WDTCTL = WDTPW + WDTHOLD;              // Watchdog tiltás
  4.   BCSCTL1 = CALBC1_1MHZ;              // A gyárilag kalibrált 1 MHz
  5.   DCOCTL = CALDCO_1MHZ;
  6.   P1DIR |= BIT5;
  7.   P1OUT &= ~BIT5;
  8.   while(1){
  9.      for (h=0; h<2200; h++){              // szoftveres pwm, for ciklussal,  a hang hossza
  10.     P1OUT |= BIT5;            // Port magas
  11.     __delay_cycles(130);              // Hang freki
  12.     P1OUT &= ~BIT5;              // Port alacsony
  13.     __delay_cycles(130);              // Hang freki
  14.   }             // for ciklus vége
  15.    __delay_cycles(1000000);              // várunk
  16. }              // while
  17. }              // main vége

A D1 diódát azért raktam belem, mert ha nincs benne valamiért lereseteli a uC-t.

msp_hang.jpg
    
(#) szitko válasza szitko hozzászólására (») Jan 8, 2012 /
 
Javítok:
  1. char i;

helyett:
  1. int i;

Bocsánat. kicsit elkapkodtam.
(#) neogeo2 válasza moderboy hozzászólására (») Jan 8, 2012 /
 
Próbáltam keresni normális felbontásban a kapcsolási rajzot és a programot, de sajnos nem találtam. A kapcsolódó fórumban kis felbontásban van ugyan rajz, de azon nem látszik jól semmi. Ott egy ilyet is olvastam: "The project is not finalized, I will add schematic and board later on." Tehát ez így még sajna nem után építhető. Pedig jó kis project... Vajon mikorra várhatóak a végleges rajzok és program?
(#) kissi válasza szitko hozzászólására (») Jan 8, 2012 /
 
Szia! Jól mutat a kép, mivel csináltad ( kipróbálni most nem tudom ) ?

Steve
(#) szitko válasza kissi hozzászólására (») Jan 8, 2012 /
 
Fritzing-el. Az új verzióban benne van a LaunchPad is. Kiegészítőket egy fórumon lehet hozzá találni, de a címét nem tudom. Kicsit olvass vissza itt, icserny berakta a fórum címét is.
(#) Beachway válasza icserny hozzászólására (») Jan 9, 2012 /
 
Valahogyan így gondoltad??
[
#include "io430.h"
#include "intrinsics.h"
#include "stdint.h"

void main( void ) {
void delay_ms(uint16_t delay) {
uint16t_t i;
for(i=0;i __delay_cycles(1000);

WDTCTL = WDTPW + WDTHOLD;
P1DIR &= ~BIT4; //nyomógomb
P1DIR |= BIT6; //LED
while(1) {
P1OUT = 0X00;
while(~P1IN & BIT4) {
P1OUT = 0X40;
delay_ms(100);

}
}
}
}
}]
Mer sajna nem megy.Próbáltam több féle képen.Mert ha így jónak kellene lennie, akkor a gépem a felelős ezekért a furcsaságokért.Párszor kék halállal leállt, és csinált olyat is ,hogy az Avast egy része letörlődött.Adat visszaállítással sikerült javítani a hibát, de mi van ha az include állomány adatai is sérültek lettek??A fordító úgy nem igazán tud a kódokkal mit kezdeni.Már meg is rendeltem az új HDD-t a géphez.Csak szeretném ezeket a tanultakat gyorsan helyre rakni ,mi előtt a rossz verzió tudatosul bennem.>
(#) szitko válasza Beachway hozzászólására (») Jan 9, 2012 /
 
Így próbáld:
  1. #include "io430.h"
  2. #include "intrinsics.h"
  3. #include "stdint.h"
  4.  
  5. void delay_ms(uint16_t delay) {
  6. uint16t_t i;
  7. for(i=0;i __delay_cycles(1000);
  8. }
  9.  
  10. void main( void ) {
  11. WDTCTL = WDTPW + WDTHOLD;
  12. P1DIR &= ~BIT4; //nyomógomb
  13. P1DIR |= BIT6; //LED
  14. while(1) {
  15. P1OUT = 0X00;
  16. while(~P1IN & BIT4) {
  17. P1OUT = 0X40;
  18. delay_ms(100);
  19. }
  20. }
  21. }

Általában a "main" függvény elött kell legyenek, a definiált függvények, és a sorrend is fontos, de ha deklarálod a függvényt, lehet utánna is. Bár ez nem a potos megfogalmazás, mert Én is csak kezdő vagyok C-ben.
(#) szitko válasza Beachway hozzászólására (») Jan 9, 2012 /
 
Még egy. A "delay_ms" függvényben nem javítottam ki a hibát, de próbáld meg úgy beírni, ahogy icserny írta!
Te:
  1. for(i=0;i __delay_cycles(1000);

Icserny:
  1. for(i=0; i<delay; i++) {
  2.     __delay_cycles(1000);
  3.   }
(#) Beachway válasza szitko hozzászólására (») Jan 9, 2012 /
 
Így sem működik.A for ciklusban a zárójelek nem megfelelően vannak szintaktikailag.(kettő van megnyitva, és egy bezárva) De mind ezek ellenére sem működik.Azt írja ,hogy az "uint16_t nincsen degradálva!Ezek szerint akkor a gépem a felelős!
(#) szitko válasza Beachway hozzászólására (») Jan 9, 2012 /
 
Nézd meg, hogy megvan-e az "stdint.h" állomány. C:\xx\xx\IAR System\....
(#) icserny válasza Beachway hozzászólására (») Jan 9, 2012 /
 
A programodban uint16t_t szerepel, ami elírás, uin16_t kell.
(#) szitko válasza icserny hozzászólására (») Jan 9, 2012 /
 
Azt nem is figyeltem.
Más. Szétdaraboltam az Lcd menüs programomat, az átláthatóság kedvéért. Csináltam egy "menu.c"-t és egy "menu.h"-t. Viszont arra nem tudtam rájönni, hogy a menu.c-ben vagy a menu.h-ban kell deklarálni a változókat? Mármint ami a menu.c-ben szerepel. Egész nap evvel küzdök, de csak hibákat ír az IAR.
(#) Beachway válasza icserny hozzászólására (») Jan 9, 2012 /
 
Valaki elírta jó pár hozzá szólással ez előtt
De így sem jó.Ez az egyetlen hiba van benne a fordító szerint.És ott van az stdint.h a program könytárában is ,de ettől még lehet sérült az adatállománya.
(#) szitko válasza Beachway hozzászólására (») Jan 9, 2012 /
 
Kipróbáltam, és hiba nélkül lefordította. A hiba az Ön gépében van. Próbaképp becsatoltam neked. Bár nemhiszem, hogy ezzel lenne a gond.

stdint.h
    
(#) icserny válasza Beachway hozzászólására (») Jan 9, 2012 /
 
uin16_t helyett írhatod azt, hogy unsigned int. Ahhoz nem kell a stdint.h sem.
(#) idlob válasza szitko hozzászólására (») Jan 9, 2012 /
 
Ha a változót több helyről szeretnéd használni, akkor a header-ben extren-ként deklarálod, majd egy (de csak is egy) C fájlban definiálod.
(#) icserny válasza szitko hozzászólására (») Jan 9, 2012 /
 
Idézet:
„a menu.c-ben vagy a menu.h-ban kell deklarálni a változókat?”
A .h fejléc állományba nem célszerű változót vagy végrehajtandó kódot tenni, mert egynél több fordítási egységbe (gyk. forrásfájl) is becsatolhatod, s akkor kétszer fordulna be... Tehát ha nem a főprogramban, akkor inkább a menu.c-ben deklarálj változót.

Ha máshonnan (másik fordítási egységben szereplő függvényből) is el kell tudni érni (pl. a main.c-ből), akkor ott is deklarálni kell a változókat extern módosítóval.

Mindezt PIC tapasztalat alapján írtam, csak reménykedni tudok, hogy az IAR MSP430 C/C++ fordító is így tudja...
(#) szitko válasza idlob hozzászólására (») Jan 9, 2012 /
 
Az extren-el tisztában vagyok, de mivan akkor ha több C fáljban szeretném használni a változót? Pl. jelen programnál, van eddig 3db C fájl. (main.c, lcd4x16.c, menu.c) Ha a main.c-ben deklarálok egy változót, pl: extren unsigned int xy; a menu.c-ben ugyanez: unsigned int xy; és az lcd4x16.c-ben már nem tudom használni?
(#) idlob válasza szitko hozzászólására (») Jan 9, 2012 /
 
Nem biztos, hogy pont azt értem amit kérdeztél
Pl. így csinálnám:

main.h
  1. extern int xy; //itt még nem foglal helyet


main.c
  1. #include "main.h"
  2. int xy; //itt foglalja le a memóriát
  3. int main(void){
  4.     xy=2;
  5. }


foo.c
  1. #include "main.h"
  2. void bar(){
  3.     xy=5;
  4. }
(#) Beachway válasza icserny hozzászólására (») Jan 9, 2012 /
 
Ez így jó!!! Nagyon szépen köszönöm.Már azt hittem be kell fejeznem a tanulmányaim amíg nem telepítem az új HDD-t fel.
(#) szitko válasza idlob hozzászólására (») Jan 9, 2012 /
 
Nem jó mindig csak hiba jön. Tehát, azt szeretném, hogy mind a három fájlba megjelenjen.
main.c:
  1. int xy;

menu.c:
  1. extern int xy;

lcd4x16:
  1. extern int xy;

Ez is egyfajta próba, de nem jó. Most nézem a IAR helpjét.
(#) idlob válasza szitko hozzászólására (») Jan 9, 2012 /
 
Érdekes, nekem fordul úgy amit én írtam, és úgy is ahogy Te írtad. Csatoltam a projektjeimet, bár én CCS-t használok.
Ha a projektet nem is tudod megnyitni, ha a .c és .h fájlokat kézzel hozzáadod egy IAR projekthez mi történik?
Most már kíváncsi vagyok nagyon, mert eddig azt hittem értem amit csinálok
(#) icserny válasza szitko hozzászólására (») Jan 9, 2012 /
 
Milyen hiba jön? Nálam lefordul és működik is.
(#) szitko válasza idlob hozzászólására (») Jan 9, 2012 /
 
Megszületett. Tehát jó amit lentebb írtam (#1138214), csak figyelmetlen voltam.
A main.c = int xy; menu.c extern int xy; lcd4x16 extern char xy; . Ezt akartam ráerőltetni a fordítóra. Miután észrevettem, hogy az lcd4x16-ban "char"-t írtam. Így jó, hogy nem fogadja el.
Köszönöm szépen mindenkinek a segítséget.
(#) szitko válasza icserny hozzászólására (») Jan 9, 2012 /
 
Amúgy a hiba: Warning[w6] .... external/entry "poz" in module main...
Mégegyszer köszönöm.
(#) kissi válasza szitko hozzászólására (») Jan 9, 2012 /
 
Köszönöm !

Steve
Következő: »»   27 / 139
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem