Fórum témák
- • Arduino
- • Audiofil, High End Audio
- • Opto kapu és triak
- • LED-es világítás
- • Villanymotor bekötése
- • Eredményjelző
- • Autórádió (fejegység) problémák, kérdések, válaszok
- • Mosógép vezérlők és általános problémáik
- • ARM CPU assembler programozás
- • Boombox javítás
- • Labortápegység készítése
- • Erősítő mindig és mindig
- • Felajánlás, azaz ingyen elvihető
- • Oszcillátor építése rajzok
- • PLC kérdések
- • Klíma szervizelés, javítás
- • Elektromos távirányítós kapunyitó
- • Villanyszerelés
- • Kutya macska (vad) riasztó
- • PC táp átalakítás
- • FET vezérlése
- • Kapcsolási rajzot keresek
- • Opel Astra elektromos hibák
- • Rádió adó építése
- • Áramváltó trafóval áram mérés, hogy?
- • Elektromágnes
- • Rossz HDD javítás, mentés
- • Rádió áthangolása, OIRT - CCIR konverter
- • Ultrahangos párásító
- • EAGLE NYÁK tervező
- • 433 MHz adóvevő modul tapasztalatok
- • ESR mérő
- • Kombikazán működési hiba
- • Analóg voltmérő (multiméter)
- • WLAN router
- • Tápegységgel kapcsolatos kérdések
- • Kapcsolóüzemű táp 230V-ról
- • Rádióamatőrök topikja
- • Retro számítógépek
- • Marantz erősítő hiba
- • Videoton EA-7386-s erösítő
- • Számítógép hiba, de mi a probléma?
- • Villanypásztor
- • Klíma beszerelése, fűtés-hűtés házilag
- • Hegesztő inverter javítás
- • Mosogatógép hiba
- • TV-k tulajdonságai, vásárlás
- • Fejhallgató erősítő
- • Kazettás magnó (deck) javítása
- • TV hiba, mi a megoldás?
- • Gáz fogyasztás monitorozása
- • Crystal radio - detektoros rádió
- • Csere-bere
- • Hűtőgép kompresszor
- • Mobiltelefon hiba
» Több friss téma
|
Fórum » MSP430 mikrovezérlők
én ma próbáltam pont ielőtt kérdezted nekem sem ment csak nem volt több időm vele foglalkozni én rst lábrameg test lábra tettem 5K ellent de nem ment este még próbálkozok.
Nem tudtam rájönni, hogy mi lehet a gond. A céláramkörben azért gondoltam, hogy nem kell az RST felhúzás, mert a Launchpad-on az SBWTDIO fel, az SBWTCK levan húzva 47k-val.
Próbáld meg úgy, hogy a J3 -tól viszed a Test és a Reset - lábat, nekem sem ment ha a J2-ről próbáltam leszedni a T és az R -t. Amióta így használom nincs problémám pedig a vezeték is kb 20 cm.
Úgy próbáltad már, hogy közvetlenül a FET tüskéiről viszed ki a drótokat? A Launchpad kártyán (legalábbis a régin) van egy kondenzátor is a RESET lábon, ami a vezetékek szórt kapacitásával együtt már sok lehet.
Mi lehet a különbség? Ahogy elnézem közvetlenül csatlakozik a J3 R, T,--> J2 R, T lábaihoz, kb 2cm fólián.
Nem tudom, sose jöttem rá.
A céláramkörben is raktam a RESET lábra egy 100nf kondit (RST-GND). Lehet, hogy azt is ki kell vegyem, nem csak a felhúzóellenállást? Annyit viszont már nem ér a dolog, hogy ki-be rakjam az alkatrészeket.
Lehet, hogy még megpróbálom a "régi" LP-vel.
Idézet: „A céláramkörben is raktam a RESET lábra egy 100nf kondit (RST-GND).” Azt sürgősen vedd ki, mert azzal ellehetetlenítetted a kommunikációt! Egy, azaz 1 nF még elmegy... A felhúzó ellenállás maradhatott volna.
Valóban. ![](/pic/smile/bonk.gif) Ezt jól benéztem.
Köszi, mindjárt ki is próbálom.
Kipróbáltam. A 100nf volt a ludas, illetve Én, mert odaraktam. (de hogy, honnan szedtem, hogy rakjak oda kondit?)
Ami még jó hír (nekem), hogy miután futtattam a debuggot, minden jónak tünt. Eltünt a programból a hiba. Vagyis a program nem futott normálisan a 100nf miatt. Ami még érdekes, hogy amiket eddig csináltam MSP430G2xxx-höz nyákokat, egyikbe sem tettem RST-re kondit.
Örülök, hogy megoldódott! Kondenzátor a (régi) Launchpad kártyán is van, gondolom, onnan jöhetett az ötlet. Csak a nagyságrend nem stimmelt nálad, mert a kártyán nem 100 nF, van hanem 1 nF.
Lehet, hogy ott néztem el az értéket.
Eme "kis" hiba miatt, majdnem az egész programot átírtam. Most visszaírtam mindent az eredeti állapotba, és láss csodát, minden jó! Még a szoftveres reset is működik rendesen, az UART kommunikáció, nem bolondul meg, és indításkor nem resettel kezd a vezérlő! (mert eddig, ahogy bekapcsoltam az inicializálások alatt, leresetelte magát.)
Mégegyszer köszönöm.
Miután "minden" helyreállt, még egy apró, ám de nem elhanyagolható hibát találtam, amire nem találom a választ.
Tehát röviden, és talán "értelmesen" a hibáról:
Két vezérlő UART kapcsolatban.
Vezérlő 1: 3,358Mhz SMCLK, és a benne futó programciklus 213Hz. Ebben a ciklusban, minden 900. lépesben elküd egy 16 bites számot, a vezérlő 2-nek. Eddig jól is megy minden. A vez. 2 fogadja, kiértékeli megjeleníti, stb... A gond a vez 2-ben van.
A vezérlő 2-ben ez a rövid kis ciklus fut:
while (1){
if(sz >= 50){ // ha sz = 50, akkor fesz ellenőrzés
fesz_graf(); // fesz grafikus megjelenítése
sz=0; // számláló nullázása
}
if(!(P2IN & fel)){ // gomb figyelése
fokep_2(); // ha gomb lenyomva, ugrás a 2. főmenübe
// UCA0CTL1 &= ~UCSWRST; // UART szoftver reset tiltás
lcdclear(); // lcd törlése
fokep(); // főképernyő
fesz_graf();
}
if(!(P2OUT & BIT5)){
P2OUT |= BIT5; // motor relé indul
}
sz++; // sz növelése
sebesseg();
IE2 |= UCA0RXIE; // RX megszakítás engedélyezése
} // while
} // main
Ha teljesül az első feltétel, (gombnyomás (P2IN & fel)) elugrik egy másik menübe, (ahol nem figyeli a vez 1 által küldött infót), ott elindul egy másik ciklus, ahol ismét figyeli a gombot. Ha megnyomják, vissztér a fenti kódba,(ahol ismét figyeli az UART-on érkező adatot) de a ciklus futása teljesen lelassul, és ezt nem tudom, hogy miért? Ha pont akkor tér vissza, amikor nem érkezik adat, akkor minden jól fut.
Úgy próbáltad már, hogy nem küldeted az adatot hanem te kéred a vezrélő 2.ről? Így te szabályzod, hogy mikor kéred , és tuti nem lesz ütközés.Illetve láttam még valahol egy olyan feltételt egy példában asszem ami vizsgálja a buffer amíg az nincsen készen addig nem csinál semmit.
Lehet , hogy hülyeséget írok , de azért leírtam hátha jók az 5leteim.
Jobban megnézve az Eagle vázát valószínű azért tettél oda egx 100nf-s kondit mert a a P1.3ra van téve egy 47K és egy 100nF Kondi
Próbáltam úgy,hogy lekérem az infót, de valamiért akkor a ciklusidő össze-vissza ugrál, és a 213Hz fontos, hogy stabil legyen. Az órajelet is ezért kellett emeljem 3.3Mhz-re.
A P1.3-on azért van a kondi, hogy valamennyire prellmentesítse, de lehet, hogy ebbe a hibába futottam bele.
Hogyan tudom egy 32 bites változóból kivenni az utolsó 14 bitet? Ugyanis csak arra van szükségem.
biteltolással. azt hiszem így van: valami = (valami<<18);
update: vagyis elsőnek el kell tolni a felsőket amik nem kellenek és utánna szerintem vissza is kell huzni az eredeti ehlyére, vagy egy másik lehetőség atomi művelettel kinullázol mindent ami feljebb áll mint a 14. helyiérték.>>
halli all. valaki segitem nekem kérem szépen.
Kitettem egy 2553-t próba panelre, stab 3.3t kap stab icről, eddig elindult, most valamiért nem ![](/pic/smile/biggrin.gif) tudom nem nagy körülírása a problémának. Padban megy rendesen.
A rst- lábra, mekkora ellenállást kell rakni? én egy 5Kt raktam be de nem húztam le földre.
Húzd fel 47k-val az RST-t. Ha lehúzod állandó resetbe lesz.
közben megoldódott , kici pici kinai vezetékből 1 nem volt rendesen a helyén.
Viszont amikor 47K-t rákötöttem a rst lábhoz meg see mozdult, 5Kval szépen megy :/
Pedig a launchpad-ben is 47k van. Én is azt tettem az áramköreimbe.
Kicsit gondolkodtam a kérdéseden (és belekeveredtem teljesen). Ha az utolsó 14 bit kell akkor csak 16-ot kell jobbra tolni, és az első két bitet törölni. Pl:
0100 0110 0100 0110 0110 1000 0001 0110
>> 16 =
0000 0000 0000 0000 0100 0110 0100 0110
-2 =
0100 0110 0100 0100
Így egy 16 bites változóban van a 32 bit, felső 14 bitje. Bár kételkedem benne, hogy jó lenne. Mindenesetre érdekes felvetés.
mivel neki az utolsó 14 kell így ha eltolja 18al balra majd vissza akkor kinulláza (elvileg ha nem avgyok teljesen böszme ![](/pic/smile/biggrin.gif) ), de egyszerübb neki a felső 18bitet kinulláztatni.
A = (B AND 3FFF)
A = (B&3FFF) azt hiszem
pl B 1001 1011 1000 1111 1100 1001 0000 1111
3FFF 0000 0000 0000 0000 0011 1111 1111 1111
-------------------------------------------------------------------
A = 0000 0000 0000 0000 0000 1001 0000 1111
Elvileg remélem jól számoltam.
Bővebben: Link
Előző hozzászólásom félre sikeredett nem olvastam el eléggé az írást. nem alsó kell neki hanem a felső 14bit.
Szerintem tolja el jobbra 18al.
Nemtudom hogy megy a tipus kényszerítés itt de biztos lehet belőle 16bites-t csinálni.
Hali!
Valakinek sikerült már használnia IAR alatt a printf-t? Próbálkoztam már mindennel de nem jön össze nekem :/
Próbáltam a 43oh-sat is de az mneg végképp nem megy. Akinek sikerült kérem ossza meg velem
A következő alkalmazáshoz kellene nekem.
uart-n akarom kinyomatni az adatot pc-re debuggolás képpen (puttyal nézném).
ha UCA0TXBUF = 0x31; -> pl ez megy nem gond löki kifelé az egyeseket.
Szép Hajnalt mindenkinek.
Kedves fórumozó társak, nagy problémával nézek szembe.
Sikerült beszereznem 2 db rfm12b Rfmodult, mai nap folyamán meg is néztük 2 darab piccel, sikeresen kommunikáltak egymással.
Mivel a pic kódja szintén SPIre volt megírva semmi bit barmolás , így adott volt , hogy egyszerűen fog menni az implementáció, de sajnos mégsem.
Csatolom a fájlokat, illetve amire én átírtam.
Valaki aki jártas a Picben , nagyon megkérném , hogy amint ideje engedi lessen rá. Nem sok 5 perc alatt mind a 2t át lehet nyálazni.
Itt a kód amit átszerkesztettem mspre.
A hiba nem tudom hol van , de szerintem több sebből vérzik, de hiba nélkül lefordul így annyira nagy baj nem lehet. Több mint valószínű hogy az órával lesz a gond(szerintem)
#include "io430.h"
#include <intrinsics.h>
#define nSEL P2OUT_bit.P1 //PIC 8 noSS, SPI to nSEL??
#define SDI P1OUT_bit.P1 //PIC13 SPI SDI to SDO
#define SCK P1OUT_bit.P4 //PIC11 SPI SCK
#define nIRQ P2IN_bit.P0 //PIC14 nIRQ Pin
#define SDO P1OUT_bit.P2 //PIC 9 SPI SDO to SDI
void RFM12BInit (int frequency, int mode )
{
RFM12BModuleInit (frequency, mode ); // Initialize RFM12B Module
RFM12BFIFOReset (); // FIFO Reset
__delay_cycles(10000); // Dummy Delay
}
void RFM12BModuleInit ( int frequency, int mode )
{
RFM12BWriteCommand (0x80E7); // 868 MHz, 12.0 pf, En Tx Register, En Rx FIFO Buffer
switch (mode)
{
case TX_MODE:
RFM12BWriteCommand (0x8239); // En Transmitter, En Synthesizer, En Oscillator, Dis ClockOut
// RFM12BWriteCommand(0x823D); // En Transmitter, En Synthesizer, En Oscillator, Dis ClockOut, enable low-battery // rf12_xfer(0x823D); // JeeNode transmitter on, enable low-battery
break;
case RX_MODE:
RFM12BWriteCommand (0x8299); // En Recieve, En Synthesizer, En Oscillator, Dis ClockOut
// RFM12BWriteCommand(0x82DD); // En Recieve, En Synthesizer, En Oscillator, Dis ClockOut, enable low-battery // rf12_xfer(0x82DD); // JeeNode receiver on, Enable BaseBand block, enable low-battery
break;
}
}
unsigned long int RFM12BWriteCommand (unsigned long int command ) // Send a command to the RFM12B module
{
unsigned long int data_in=0;
unsigned int command_high, command_low, data_in_high, data_in_low;
nSEL = 0; // not to release the master if hw spi
// spi_read/write 8bites!!!
command_high=command>>8;
command_low =command;
UCA0TXBUF = command_high;
data_in_high = UCA0RXBUF; // writing upper byte, reading upper byte
UCA0TXBUF = command_low;
data_in_low = UCA0RXBUF; // writing lower byte, reading lower byte
data_in=(data_in_high << 8) | data_in_low;
nSEL = 1; // to release the master if hw spi
return data_in;
}
{
RFM12BWriteCommand (0xCA81); // disable FIFO fill
RFM12BWriteCommand (0xCA83); // enable FIFO fill
}
void RFM12BSendMessage (unsigned int message ) /* Send a transmit command to the RFM12B module */
{
while ( nIRQ == 1); // wait until nIRQ goes low
RFM12BWriteCommand (0xB800 + message ); // send the message, Transmitter Register Write Command, 1 byte
}
void RFM12BSendPacket (unsigned char *packet, unsigned int length ) /* Transmit a whole packet */
{
unsigned int i,j;
RFM12BWriteCommand (0x0000); // status
RFM12BSendMessage (0xAA); // Preamble dec 170
RFM12BSendMessage (0x2D); // Sync Pattern, 45
RFM12BSendMessage (0xD4); // 212
for (i = 0; i < length; i++)
{
RFM12BSendMessage (* (packet +i ));
}
RFM12BSendMessage (0xAA); // Dummy bytes, 170
RFM12BSendMessage (0xAA); // Dummy bytes, 170
for(i = 0; i<10 ;i++);
for(j=0; j<10; j++);
}
unsigned long int RFM12BReceiveByte () /* Receive one byte */
{
unsigned long int data_in;
while(1)
{
data_in = RFM12BWriteCommand (0x0000); //status register
if ((data_in & 0x8000)) // if FIFO full, read a byte
{
data_in = RFM12BWriteCommand (0xB000);
return (data_in & 0x00FF);
}
}
}
unsigned char packet[PACKET_LENGTH]={0x01,0x1A}; //the values to send/receive
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
//------------------------SPI--TMP124-RFmodul--------------//
P1OUT = 0x00; // P1 setup for LED & reset output
P1DIR |= BIT0; //
P1SEL = BIT1 + BIT2 + BIT3 + BIT4;
P1SEL2 = BIT1 + BIT2 + BIT3 + BIT4;
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 |= 0x02; // /2
UCA0BR1 = 0; //
UCA0MCTL = 0; // No modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
// IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt
//----------------------------------------------------------------//
//-------------lcd kapcsolo megszakitas-------------------//
P1DIR_bit.P5 = 0; // p1.5 bemenet
P1REN |= BIT5; // P1.5 felhúzását itt engedélyezhetnénk
P1IES |= BIT5; // P1.5 lefutó élre érzékeny
P1IFG &= ~BIT5; // P1.5 IFG törlése
P1IE |= BIT5; //
//-----------------------------------------------------//
//--------P2port config------//
P2SEL = 0X00; //MIND DIG I/O
P2DIR = 0XFE; //0.BEMENET TOBBI KI
P2OUT_bit.P1 = 1;
// P2REN |= BIT0; //felhuzas engedély
//P2IE |= BIT0; //MEGSZAKITAS ENG. A PORT0-N
//P2IES |= BIT0; //LEFUTASRA
//P2IFG = 0X00; //MEGSZAKITAS BITEK 0.
// __enable_interrupt();
//------------------------------//
//-----------------LCD-Start-----------------------//
// P1OUT_bit.P6 = 0; //Mivel az Lcd kijelzőn van egy pnp így alacsonyra állítom
// lcd_init();
//---------------------------------------//
__delay_cycles(10000);
RFM12BInit (FREQ_868_MHZ, TX_MODE );
__delay_cycles(200);
for(;;){
RFM12BSendPacket (packet, PACKET_LENGTH );
__delay_cycles(200);
}
}
Az frm.rar-ban mellékeltem a pic-s forrást hátha jól jön még valakinek + onnan megtudja nézni az eredeti müködő kódot.
Köszönettel Balázs
hopp, a bámoslt kódból hiányzott a konfig rész valahogy lemaradt
void RFM12BModuleInit ( int frequency, int mode )
{
RFM12BWriteCommand (0x80E7); // 868 MHz, 12.0 pf, En Tx Register, En Rx FIFO Buffer
switch (mode)
{
case TX_MODE:
RFM12BWriteCommand (0x8239); // En Transmitter, En Synthesizer, En Oscillator, Dis ClockOut
// RFM12BWriteCommand(0x823D); // En Transmitter, En Synthesizer, En Oscillator, Dis ClockOut, enable low-battery // rf12_xfer(0x823D); // JeeNode transmitter on, enable low-battery
break;
case RX_MODE:
RFM12BWriteCommand (0x8299); // En Recieve, En Synthesizer, En Oscillator, Dis ClockOut
// RFM12BWriteCommand(0x82DD); // En Recieve, En Synthesizer, En Oscillator, Dis ClockOut, enable low-battery // rf12_xfer(0x82DD); // JeeNode receiver on, Enable BaseBand block, enable low-battery
break;
}
RFM12BWriteCommand (0xA640); // Center Frequency Select 868,000 MHz
RFM12BWriteCommand (0xC647); // Data Rate: 4,8 kbps
// RFM12BWriteCommand(0xC606); // Data Rate: 49.2 kbps // rf12_xfer(0xC606); // jeenode approx 49.2 Kbps, i.e. 10000/29/(1+6) Kbps
RFM12BWriteCommand (0x94A0); // VDI, FAST, 134kHz, LNA Max, dBm-dBm
// RFM12BWriteCommand(0x94A2); // VDI, FAST, 134kHz, LNA Max, 0dBm-91dBm //rf12_xfer(0x94A2); // jeenode VDI,FAST,134kHz,0dBm,-91dBm
RFM12BWriteCommand (0xC2AC); // Auto, Slow, Digital, 4
RFM12BWriteCommand (0xCA81); // FIFO IT 8, 2 bytes Synchron(2DD4), FIFO fill starts synchron word, // disable FIFO fill,low reset sens. // rf12_xfer(0xCA83); // jeenode FIFO8,2-SYNC,!ff,DR
RFM12BWriteCommand (0xCED4); // Sync Pattern 2DD4 // rf12_xfer(0xCE00 | group); // jeenode SYNC=2DXX???
RFM12BWriteCommand (0xC483); // Keep the F offset only during VDI = high, no rest., EN AFC, EN freq. offset reg.
RFM12BWriteCommand (0x9850); // Pos freq shift, 90 KHz, Max
RFM12BWriteCommand (0xCC17); // selected uC CLK freq=5/10 MHz, 256 kbps, disable dither in PLL
// RFM12BWriteCommand(0xCC77); // selected uC CLK freq=2.5 MHz, 256 kbps, disable dither in PLL// rf12_xfer(0xCC77); // jeenode selected uC CLK freq=2.5MHz,
RFM12BWriteCommand (0xE000); // NOT USED
RFM12BWriteCommand (0xC800); // NOT USED - low duty-cycle
RFM12BWriteCommand (0xC040); // 1.66 MHz,2.5V low battery
// RFM12BWriteCommand(0xC049); // 1.66 MHz,3.1V low battery // rf12_xfer(0xC049); // jeenode 1.66MHz,3.1V low battery
}
Hmm mivel látom ![](/pic/smile/biggrin.gif) sokakon kifogott a kód ![](/pic/smile/smile.gif) így inkább erre a 2 sorra keresem a választ egy pic szakértőtől.
#use delay(clock=1000000) //gondolom a fordítónak van megadva.
setup_oscillator( OSC_1MHZ ); //1mhz-es processzor sebesség.
#define SPI_MODE_0 (SPI_L_TO_H | SPI_XMIT_L_TO_H)
void SPIInit() // Nah ez mi lehet 5letem van csak nemtudom , hogy jó-e
{
setup_spi(SPI_MASTER | SPI_MODE_0 | SPI_CLK_DIV_16); //master mód | sejtem | ez az osztó 16-al osztja az 1mhz-t?
}
próbálnék egy hasonló MSP beállítást belőni de még nem sikerült.
Szerintem nézz szét Icserny fórumtársunk honlapján. Lehet, hogy több sikerrel jársz. De ez csak egy ötlet. Én is onnan szoktam puskázni, a C -vel kapcsolatban.
|
|