Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   849 / 1319
(#) watt válasza icserny hozzászólására (») Nov 30, 2010 /
 
Köszönöm a linket! Még nem ismertem, nem volt szükségem rá, de érdekel, és biztos, hogy kelleni fog!
(#) geri12 válasza watt hozzászólására (») Nov 30, 2010 /
 
Az első megoldásod tetszik. Tehát leformázni, létrehozni üres txt-t, stb. PIC18F4550-re gondoltam. Annak a RAM mérete is megfelelő. A kapcsolás már megvan tervezve a fejembe, azt összerakom a héten, mert azon nem kell úgy sem változtatni. Aztán lehet programot írni.
(#) szilva válasza watt hozzászólására (») Nov 30, 2010 /
 
Ha USB/CDC-n keresztül kommunikál az adatgyűjtő a PC-vel, akkor gyakorlatilag bármilyen terminálprogrammal le lehet tölteni az adatokat. A PIC-ben futó alkalmazás elvégezhet minden formázást, akár még x-modem protokollal is küldheti a "file"-t. Ez egy scriptelhető terminálprogival megoldható akár olyan egyszerűen is, hogy csak egy ikonra kelljen kattintani a file letöltéséhez. Persze, ehhez meg a PIC-re kell programot írni
(#) trudnai válasza szilva hozzászólására (») Nov 30, 2010 /
 
Mintha azonban lett volna olyan szivas, hogy az USB/CDC olyan portra hazudta be magat amit a terminal program nem volt kepes elerni. Vagy rosszul emlekszem?
(#) watt válasza szilva hozzászólására (») Nov 30, 2010 /
 
Igen, ez jó ötlet! A terminálok képesek fájlba menteni a vett adatokat. A PIC oldalon csak formázni kéne az SD-re tárolt adatokat elküldés előtt.
Egy hátrányt látok, hogy ez egyel több művelet, mint ha az SD-re eleve fájlba írunk és csak beolvassuk egy kártyaolvasóval.
Meglátjuk melyik válik be, mert működni mindkettő működhet.
(#) watt válasza trudnai hozzászólására (») Nov 30, 2010 /
 
Volt ilyen, igen, de átírtam a portszámát kézzel és működött.
(#) watt válasza geri12 hozzászólására (») Nov 30, 2010 /
 
Jó lehet, de ha nem kell annyi láb, akkor a 18F2550 is megfelel. Ezt te látod jobban. Azért is jó, mert ha még is USB kell, akkor ott van benne...
Viszont van egy kis macera az RX és az SDO-val(hardveres SPI kimenet), ami egy lábra került, valami okostojás miatt. Tehát vagy szoftveres usartot használsz, vagy szoftveres SPI-t, vagy külső kapuzást, ami az RX-ről lekapcsolja a MAX232 kimenetét addig, amíg az SD-vel foglalkozik. A szoftos SPI nem bonyolult, én azt választanám ebben az esetben, mert így nem kell külön kapu áramkör. Igazából nem szükséges túl nagy sebesség az SD-hez, elég lehet a 300KHz-is, amihez már időzíteni is kell két órajel között a programban, azaz lenne idő másra is bőven(pl. usart megszakítás lekezelésére), még az SD műveletek alatt is.
Tényleg milyen időközönként akarsz adatot kiolvasni és mennyit?
(#) geri12 válasza watt hozzászólására (») Nov 30, 2010 /
 
Jelenleg 5 percenkénti kiolvasást tudok végezni éjszakai a kis memória miatt. Napközben percenkéni grafikon rögzítés van. Ha éjszaka is percenként rögzítene az már tökéletes. Egyébként a szélsebesség miatt van az egész macera. Tehát a többi nem annyira változik 5 perc alatt átlag időben. A szélmérést kéne pontosan átlagolni a grafikonon.

Mellékeltem a kiolvasást a gyári progiban. (history) Tehát például amikor nincs bekapcsolva a gép, és reggel benyomom így kerül fel a listára. Egy sor egy időpont. Tehát egy ilyen időpont és a hozzátartozó adatok kerülnének be az sd-be egy kiolvasáskor.

gyari.jpg
    
(#) fokti Attila hozzászólása Dec 1, 2010 /
 
Üdv Szaktársak!

Struktúrák használatával (is) van problémám. Létrehoztam egy struktúrát, de csak a main()-ben férek hozzá. Ennek így kell működnie vagy én deklaráltam rosszul? Esetleg van-e módszer hogy más függvényekből is elérjem? Az üzem közben előforduló hibákat szeretném benne flagként rögzíteni, mivel nem akarok a hibavizsgálatnál maszkolgatni. Tud valaki segíteni?
(#) SzT3 hozzászólása Dec 1, 2010 /
 
Sziasztok léptetőmotor vezérléshez (7 db) szeretnék PIC-et használni méghozzá valószínű hogy ezt De van egy kis bajom, mégpedig az hogy itt azt irja "HE"-n belül hogy 36 I/O pinje van, a microchip adatlapja szerint 35.
De én akár hogy számolom csak 34 jön össze mivel a 2Vdd és 2Vss megkapja a tápot meg a testet, mclr jelen esetben kiesik illetve a 18-as pinen Vusb jelzést találok de arra azt írja hogy 3.3 v kimenet, tehát ezt nem feltételezem mint logikai ki bemenet,
vagy pedig itt az adattáblába látok olyat hogy a (igaz nem erre a pic-re) de hogy a Vss illetve a Vdd ből egy egy pozitív iletve test logikai pin ként üzemel"-het"
igy jöhet össze akkor a 35 I/O logika kimenet bemenet.
Tehát az én PIC18F4550-esem esetében a 31-es Vss és a 32-es Vdd kimenetként használható?
Köszi a választ.
(#) p_istvan válasza fokti Attila hozzászólására (») Dec 1, 2010 /
 
Szervusz!
Mert valószínűleg a main()-ben deklaráltad.
Deklaráld a struktúrát még a függvények előtt!
Feltételezem C-ről van szó, mert egyébként nem sok konkrétumot írtál: programrészlet, programnyelv, stb...
(#) watt válasza geri12 hozzászólására (») Dec 1, 2010 /
 
Ha karakterszámokat nézem, akkor 50 bájtba belefér egy sor adat. Ekkor 10 percenként tele lenne az 512-es puffer, lehetne írni egy blokkot, a végén időbélyeggel. Egy 16megás MMC kártyára is 200nap ráférne 1 perces bontásban, de nagyobb SD is kezelhető, szinte ugyanúgy és akkor lehetne tartalékot is hagyni, és mondjuk 100 bájt lenne egy sor helye, és 5 percenként lenne írva egy blokk. Szabadon választott...
(#) watt válasza SzT3 hozzászólására (») Dec 1, 2010 /
 
Az MCLR-t lehet bemenetként használni, ha letiltod a funkcióját. Így megvan a 35. Az adatlapban egyébként egyenként ott van egy táblázatban, hogy melyik láb mi lehet.
(#) Hp41C válasza SzT3 hozzászólására (») Dec 1, 2010 /
 
Szia!

A 18F4550 nem igazán jó választás, mert a Vusb kivezetés nem használható digitális ki/bemenetként. Jobb lenne más 40 lábút választani, amelyiken mind a 35 láb lehet digitális ki/bemenet: pl. 18F4420, 18F4520, 18F4620.
(#) fokti Attila válasza p_istvan hozzászólására (») Dec 1, 2010 /
 
Bocs, ez valóban kimaradt.Tehát c-ről lenne szó, MPLAB-ban fejlesztek.
Nem a main()-ben deklaráltam, hanem előtte. Viszont most vettem észre hogy egy másik fv.-ben pedig hozzáférek. Viszont van egy fv. ahol ha piszkálni akarom nem fordul le a kód,leáll a következő üzenettel:
Error [1151] struct or union object designator expected
(#) trudnai válasza fokti Attila hozzászólására (») Dec 1, 2010 /
 
Lehetseges, hogy az a fuggveny meg az elott van deklaralva mielott a strukturad?

Ha latnank a kodod akkor gyorsabban kiderithetnenk mi a problema...
(#) p_istvan válasza fokti Attila hozzászólására (») Dec 1, 2010 /
 
Nem az irtam hogy a main() előtt, hanem hogy,
Idézet:
„Deklaráld a struktúrát még a függvények előtt!

Vagy egyszerűen csak, nem jól hivatkozol a struktura elemére...
(#) fokti Attila válasza trudnai hozzászólására (») Dec 1, 2010 /
 
A deklarálás közvetlenül az include-ok után van tehát elvileg időben.
  1. #define CLR_CSB LATBbits.LATB4=0;
  2. #define ledbe LATCbits.LATC0=1;
  3. #define ledki LATCbits.LATC0=0;
  4. unsigned char dq_data1,dq_data2, k1,k2,k3;
  5. struct hibajel {
  6. unsigned erzekelohiba_1         : 1;
  7. unsigned erzekelohiba_2         : 1;
  8. unsigned kollektorhiba          : 1;
  9. unsigned tartalyhiba            : 1;
  10. }hiba;

.........

itt működik, nincs probléma:
  1. void RESET_DQ1 (void)
  2. {               ADCON0bits.ADON=0;
  3.                 ADCON1=0x0F;
  4.                 TRISB=0X00;
  5.                 LATBbits.LATB3=0;
  6.                 TRISAbits.TRISA1=0;
  7.                 LATAbits.LATA1=1;
  8.                 delayms(100);
  9.                 LATAbits.LATA1=0;
  10.                 delay10us(48);
  11.                 TRISAbits.TRISA1=1;
  12.                 delay10us(7);  
  13.         if (PORTAbits.RA1 ==0)
  14.                 {dq_data1=88;
  15.                         LATBbits.LATB3=1;
  16.                         if (hiba.erzekelohiba_1==1)
  17.                         {hiba.erzekelohiba_1=0;}
  18.                 }
  19.                 else hiba.erzekelohiba_1=1;
  20. }

..

itt pedig nem:
  1. void WRITE_LCD ( char row)
  2. {
  3. char szoveg1[]="Kollektor:";
  4. char szoveg2[]="Tartaly:";
  5. char hiba[]=" hiba!";
  6.  
  7. char index;
  8. unsigned char str;
  9. if (row==1)
  10. {
  11.                         for (index=0; szoveg1[index]>0; index++)
  12.                         {
  13.                                 WRITE_STR(szoveg1[index]);
  14.                         }
  15. if (hiba.erzekelohiba_1==1)


de most nézem, lehet hogy a hiba[] tömbbel veszik össze?
(#) fokti Attila válasza fokti Attila hozzászólására (») Dec 1, 2010 /
 
Ez volt a probléma. Vélhetőleg nem tudta eldönteni hogy a tömbre vagy a struktúrára akarok hivatkozni.
(#) SzT3 válasza Hp41C hozzászólására (») Dec 1, 2010 /
 
Köszönöm a tanácsot, hallgatok a bölcsebbre
Eagel-be mondjuk nem találtam azt a típust de majd akkor a 18f4420 vagy 4520 adatlapja szerint kötözgetem a lábakat.
(#) watt válasza SzT3 hozzászólására (») Dec 1, 2010 /
 
De ezekben nincs USB! Vagy nem is kell?
(#) SzT3 válasza watt hozzászólására (») Dec 1, 2010 /
 
őő igen. itt nem az USB volt a lényeg hanem a kivezetés. hét léptetőmocit és plussz 7szer 3 "relét" szerettem volna működtetni, de ez minden féleképpen kevés lesz.
(#) SzT3 hozzászólása Dec 1, 2010 /
 
de mivel minden féle képpen kevés ezért változik a konstrukció legalábbis egy picit egy 18F4*20 viszi majd a motorokat és egy másik 16f627 es pedig a 7*3 "relét".
hamarosan csatolom a nyáktervet úgy egyszerb lesz megérteni szaktudás nélküli csavaros agymenetemet
(#) watt válasza SzT3 hozzászólására (») Dec 1, 2010 /
 
Van motorvezérlős topic, inkább oda...
(#) icserny válasza SzT3 hozzászólására (») Dec 1, 2010 /
 
Van 64 meg 80 lábú PIC is, és van perifériabővítő IC is. Nem biztos, hogy érdemes több mikrovezérlőt betervezni, csak akkor, ha van valami haszna a dolognak.
(#) watt válasza icserny hozzászólására (») Dec 1, 2010 /
 
Igazad van, de pl. egy 627 olcsóbb mint egy bővítő majdnem, és még okos is! :yes:
(#) accesid hozzászólása Dec 1, 2010 /
 
sziasztok
az lenne a kérdésem hogy a 16f628 pic-nél az RB1, RB2 és RB3 lábakon ha bemenetnek vannak deklarálva szintvaltozás létrehoz e megszakitást?
Nyomogombok vannak rajta és nem tudom hogy miért nem nem jön létre megszakitás.
Az rb6-rb7 labon van egy 32khz-es rezonator és a timer1 tulcsordulasakor létrejön a megszakitás.

közben megtalaltam (PortB Change Interrupts (pins RB7:RB4))
(#) Hp41C válasza accesid hozzászólására (») Dec 1, 2010 /
 
Szia!

A PORTB 7..4 bitjeire van csak változásfigyelés megszakításkéréssel. A PORTB 0. bitje pedig a külső megszakítás kérés bemenet.
(#) Lozsa hozzászólása Dec 1, 2010 /
 
Mi lehet a gond a "char szoveg..." kezdetű 6. sorral? A fordító állandóan syntax error-t dob arra a sorra.

  1. void main (void)
  2. {
  3.         Init();
  4.         lcd_init();
  5.         char szoveg[] = "<==== 4x20 LCD ====>";
  6.         lcd_print(szoveg);
  7.        
  8.         while(1);
  9. }
(#) potyo válasza Lozsa hozzászólására (») Dec 1, 2010 /
 
Csak annyi, hogy rossz helyen van. Bármilyen egyéb művelet előtt kell a változó vagy konstansokat deklarálni. Tehát tedd azt a sort az Init() fölé és akkor menni fog.
Következő: »»   849 / 1319
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