Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   85 / 153
(#) whalaky válasza Wudoou hozzászólására (») Okt 24, 2013 /
 
A DS18x20 teljesen jó. Bármilyen one-wire cuccot használsz, az időzítésekre és a kábel kapacitásra ugyan úgy érzékeny marad. Mint említettem nekem is az UTP kábellel volt bajom gazdagon, a riasztó kábel símán megy táp puffer nélkül 4,7K-s felhúzóval.
Természetesen próbálkozhatsz mással is.... esetleg valami analóg cuccal pl LM35.
(#) vicsys válasza Wudoou hozzászólására (») Okt 24, 2013 /
 
Szerintem megoldható lesz az utp kábellal is, csak amiket említettünk (felhúzó és időzítések), állítsd be. Ha sehogy sem boldogulsz, nézz rá szkóppal a kábel erekre, hogy nehogy antennaként működjön.
Én úgy kötném be, hogy a jelnek használt ér csavart párja a GND legyen. Természetesen a táp vezetéken legyen egy 100nF is, hogy a tüskéket is levágja.
(#) Wudoou válasza _vl_ hozzászólására (») Okt 24, 2013 /
 
A kommunikáció 1 vezetéken zajlik aszinkron half duplex módon. így értettem...Csak hasznos hozzászólást kérek szépen.
A hozzászólás módosítva: Okt 24, 2013
(#) Wudoou válasza vicsys hozzászólására (») Okt 24, 2013 /
 
Köszönöm szépen. Mindegyik ds-re kell 100nF kondi?
Most jelenleg csak a legutolsón van.
(#) Wudoou válasza whalaky hozzászólására (») Okt 24, 2013 /
 
Az a gond, hogy a szondába 8 mérési pont kell és nem tudom belegyilkolni a 8 szondát 8 vezetékkel. Csak olyan jöhet szóba, ami képes 1 kábelen (nehogy belekössenek) kommunikálni. Mindenesetre nagyra értékelem, hogy próbáltok segíteni és köszönöm.
(#) _vl_ válasza Wudoou hozzászólására (») Okt 24, 2013 /
 
Én meg azt írtam, hogy talán el lehet azon is gondolkodni, hogy ne 1 vezetéken menjen a kommunikáció. Van 4 érpárad az UTP-ben, abból 1-1 érpáron mehet a táp (remélem, most így megy!), és még mindig marad 2 érpárad, amiből akár egy is elegendő egy szimmetrikus adatátvitelhez (pl. RS485).
(#) vicsys válasza Wudoou hozzászólására (») Okt 24, 2013 /
 
Ha nem alkalmazol egyéb kommunikációs átalakítót (ahogy _vl_ írta), akkor legalább a tápnak használj 2-2 eret. A tápfesz erekre meg parallel egy 10...47µF-os kondit (ha van kéznél, akkor tantált). Én tennék a panel felőli végére is egy 100nF-ot. Így a kábel mindkét vége (kvázi) söntölve van nagyfrekisen. A Vq eret direktbe és vele összetekert "árnyékoló" eret, meg csak a panelon kösd be. Ez utóbbi ne legyen a tápfesz vezeték (mint GND)!
Szerintem így már jó lesz. Első körben 2k2 felhúzót próbálj ki. Ha instabil, menj le 1K-ig, de az alá már ne nagyon.
A hozzászólás módosítva: Okt 24, 2013
(#) Wudoou válasza vicsys hozzászólására (») Okt 24, 2013 /
 
Úgy van csinálva, hogy narancsfehér narancs +, kékfehér kék -, zöld adat, többi jelenleg nincs bekötve. És a panel felőli végen is van egy 100nF kondi.
A hozzászólás módosítva: Okt 24, 2013
(#) vicsys válasza Wudoou hozzászólására (») Okt 24, 2013 /
 
Akkor még a tantált és felhúzót tedd be. Ha nem javul, marad az időzítések és a szkóp.
(#) Wudoou válasza vicsys hozzászólására (») Okt 24, 2013 /
 
Ok. Megpróbálom.
(#) watt válasza Wudoou hozzászólására (») Okt 25, 2013 /
 
Csak úgy van értelme kondizni, ha minden eszköznél van és a lehető legközelebb a táplábakhoz, kerámia smd az ajánlott. Ez alap kérdés...
(#) Wudoou válasza watt hozzászólására (») Okt 25, 2013 /
 
Értem, csak nem lenne sok 24 db (3x8) 100nF kondi egy buszon?
(#) potyo válasza Wudoou hozzászólására (») Okt 25, 2013 /
 
Nem. Azok egyszer bekapcsolaskor feltoltodnek, es utana segitenek stabilan tartani a tapfeszultseget a szenzorokon.
(#) whalaky válasza potyo hozzászólására (») Okt 25, 2013 /
 
Esetleg az történhet (nekem legalábbis történt), hogy amikor a szondákat csatlakotatod - ha bontható a csatlakozás - a bedugáskor annyira lerántja a tápot hogy a kontroller újraindul.
Amúgy valóban megoldható UTP kábelen, de sokat kell vele játszani. Van két rendszerem ahol már két éve megy 30-40m FTP kábelen stabilan, de mire beállítottam megizzasztott.
Ettől próbáltunk megszabadítani, de ha ragaszkodsz hozzá megoldható.
(bocs, Wudoou-nak szántam)
A hozzászólás módosítva: Okt 25, 2013
(#) Wudoou válasza whalaky hozzászólására (») Okt 25, 2013 /
 
Egyáltalán nem ragasztkodok hozzá, csak mostmár nagyon körülményes lesz, hiszen bent lógnak a silóban és azokat kihúzni kicserélni a buszokat...Hát nem kis munka.
Ezért próbálok valami alternatív megoldást rá.
Lehet, hogy egyszerűbb lenne újakat csinálni...
(#) potyo válasza whalaky hozzászólására (») Okt 25, 2013 /
 
Ha menet közben kell felcsatlakoztatni, akkor a csatlakozóhoz tenni kell néhányszáz µF puffert, akkor nem tudja annyira lerántani a feszültséget, hogy a kontroller újrainduljon.
(#) Wudoou válasza potyo hozzászólására (») Okt 26, 2013 /
 
Sziasztok! Kint voltam ma terepen és az történt hogy egy jó 20 métert le kellett vágjak mindegyik buszról (3 busz van) és az a helyzet, hogy bármelyik 2-vel megy de már 3-mal azt írja ki, hogy csak 1 eszközt talált illetve az összesre 0 fokot ír. Vajon ez mitől lehet?
A kódokat már csatoltam, de ha kell újra megteszem.
(#) Wudoou válasza Wudoou hozzászólására (») Okt 26, 2013 /
 
Megjavult a dolog. A felhúzó ellenállást csökkentettem 1,5K-ra és voala, mindegyik működik.
Na majd meglátjuk meddig, mindenesetre a watchdog benne van.
Mindenkinek köszönöm a segítséget.
(#) bocios hozzászólása Nov 4, 2013 /
 
Sziasztok!

Tanácsot szeretnék kérni. Ehhez hasonló terméket keresek: http://www.mikroe.com/mikromedia/pic32/
Olyasmire gondolok, ami jobban kombatilis Microchip -es dolgokkal és nagyjából hasonló áron van. Például pickit rákapcsolható és úgy egyébként általánosabb dolog. Ez a mikroelektronikás is remek, de minden ami rajta van csak Mikroelektronikás programozóval, shield-el, stb-vel kombatibilis.
Fontos, hogy érintős TFT legyen rajta és nagyjából ami ezen is van.
Előre is köszönöm
(#) pepe1125 válasza bocios hozzászólására (») Nov 4, 2013 /
 
Passz. Szerintem ez nem rossz cucc. És végülis más programozóval is rá lehet bírni a működésre. A shield... Hát gyártani kell valamit hozzá. Nekem is jó lenne valami hasonló téma.

Esetleg valaki abban tud segíteni, hogy nagyon egyszerűen, hogyan lehet infravevőt csinálni LED -ek fel le kapcsolgatására mikrokontrollerel? A hardware megvan, a távirányító is amivel működtetni szeretném, tudom róla melyik gombnyomásra mit küld ki... De hogy mondom meg a mikrokontrollernek, hogy ha azt a kódot kapja ami mondjuk az 1 gombra jön, kapcsolja fel az első LED-et. Elég hosszú a kód amit a távirányító küld... Nem fér bele 1byte-ba. Csak egyszer küldi el, utána csak ismétlő impulzusokat ad amíg nyomvatartom a gombot a távirányítón.
Gondoltam valahogy beléptetem az adatot ami érkezik szépen sorban. Ennek lenne egy értéke. Amit össze lehet hasonlítani. De hogy léptetem be?! Mibe tárolom?
Valaki foglalkozott már ilyesmivel itt? Vagy van valami példa program erre c nyelven?
A hozzászólás módosítva: Nov 4, 2013
(#) pipi válasza pepe1125 hozzászólására (») Nov 4, 2013 / 1
 
Hali!
A propeller clock témában kezelnek távirányítót a beállításhoz, szerintem publikus a forrás....
(#) pipi válasza bocios hozzászólására (») Nov 4, 2013 /
 
Hali!
Én úgy látom van neki pickit csatija is, szóval lehet pickit3-al programozni. A szoftverre biztos gyúrni kell, egyébként a microchip graf könyvtárának a beüzemelése sem piskóta, többen inkább saját könyvtárat írtak...
Ha "microchipesebbet" akarsz nézd meg ezt pl: Bővebben: Link , itt a magyar képviselet Bővebben: Link . Ez is jó drága, meg a mikroelektronikás is, elgondolkodtató pl ebayról, olimextől valami arm-os linuxos cucc 40-60$-ért, hasonló tudású lcd-t meg az ebayról kb 3e ft, persze ezzel is dolgozni kell, de nagyságrend van a teljesítmény különbségben...
(#) janimester hozzászólása Nov 9, 2013 /
 
Sziasztok. 18f4550-en szeretnék két ADC-t mérni folyamatosan. Az egyik az feszültséget mér (akkumlátorét) ezzel nincs is semmi baj. A másik pedig egy sebesség fokozati kijelzést valósítana meg egy 4 lépcsős ellenállás osztással. A kapcsolódobra lesz szerelve egy közös érintkező és a 4 sebességhez még négy különböző értékű ellenállás lesz odaillesztve és ahogy forog a kapcsolódob a az ellenállásokat fogja érinteni. Az ellenállások egyik vége közösítve lesz és ez megy a pic egyik analóg bemenetére és szoftveresen szeretném megadni hogy x-x értékig tart az 1-es fokozat és ezt írja ki a kijelzőre és ugyanígy a többit is. Tehát elosztanám az 1024-es felbontást 4 avagy öt részre mert ugye üres járat is van. Az a gondom hogy nem bírok egyszerre két adc csatornát működtetni. Meg közben ugye van egy ds18b20-am is aminek szintén működnie kellene. Kérem aki tud abban segítsen hogy ez a három funkció ne zavarja egymást és tudjon működni.

  1. char *volt = "00.0";
  2. unsigned int ADC_Value, DisplayVolt;
  3.  
  4. char *text = "000.0";
  5. unsigned long temp;
  6.  void Display_Temperature(unsigned int temp2write) {
  7. const unsigned short RES_SHIFT = 4;
  8. char temp_whole;
  9. unsigned int temp_fraction;
  10.  
  11.  if (temp2write & 0x8000) {
  12.      text[0] = ' ';
  13.      temp2write = ~temp2write + 1;
  14.      }
  15.   temp_whole = temp2write >> RES_SHIFT ;
  16.   if (temp_whole/100)
  17.   text[0] = temp_whole/100  + 48;
  18.   else
  19.   text[0] = ' ';
  20.   text[1] = (temp_whole/10)%10 + 48;             // Extract tens digit
  21.   text[2] =  temp_whole%10     + 48;             // Extract ones digit
  22.   temp_fraction  = temp2write << (4-RES_SHIFT);
  23.   temp_fraction &= 0x000F;
  24.   temp_fraction *= 628;
  25.   text[4] =  temp_fraction/1000    + 48;         // Extract thousands digit
  26.   Lcd_Out(1, 14, text);
  27. }
  28.  
  29.  
  30.  
  31. void main() {
  32.  
  33.  
  34.    PORTE = 0;
  35.    TRISE = 0;
  36.    PORTC = 0;
  37.    TRISC = 0;
  38.    TRISB = 0;                            // PORTB all output to LED
  39.    PORTB = 0;                            //port b lábak alaphelyzetben 0-án
  40.    PORTA = 0;
  41.  
  42.   ADCON0= 0x01;    //voltmérőé
  43.   ADCON1= 0x0E;    //voltmérőé      (0x0e)
  44.   PORTA = 0;
  45.   TRISA = 0b00010000;
  46.  
  47. Lcd_Init();
  48. Lcd_Cmd(_LCD_CLEAR);
  49. Lcd_Cmd(_LCD_CURSOR_OFF);
  50. LCD_Out(2,1,"AKKU");
  51. Lcd_Out(1,1,"HENGER");
  52. Lcd_Chr(1,19,223);
  53. Lcd_Chr(1,20,'C');
  54. Lcd_Chr(2,20,'V');
  55.  
  56.  
  57.  do {
  58.      ADC_Value = ADC_Read(0);
  59.    DisplayVolt = ADC_Value * 2;
  60.    volt[0] = DisplayVolt/1000 + 48;
  61.    volt[1] = (DisplayVolt/100)%10 + 48;
  62.    volt[3] = (DisplayVolt/10)%10 + 48;
  63.    Lcd_Out(2,16,volt);
  64.  
  65.  
  66.    Ow_Reset(&PORTA, 1);                         // Onewire reset signal
  67.    Delay_ms(15);
  68.    Ow_Write(&PORTA, 1, 0xCC);                   // Issue command SKIP_ROM
  69.    Delay_ms(15);
  70.    Ow_Write(&PORTA, 1, 0x44);                   // Issue command CONVERT_T
  71.    Delay_us(15);
  72.    Ow_Reset(&PORTA, 1);
  73.    Delay_ms(15);
  74.    Ow_Write(&PORTA, 1, 0xCC);                   // Issue command SKIP_ROM
  75.    Delay_ms(15);
  76.    Ow_Write(&PORTA, 1, 0xBE);                   // Issue command READ_SCRATCHPAD
  77.    Delay_ms(15);
  78.    temp =  Ow_Read(&PORTA, 1);
  79.    temp = (Ow_Read(&PORTA, 1) << 8) + temp;
  80.    Display_Temperature(temp);
  81.    Delay_ms(50);
  82.  
  83.  
  84.  
  85.   } while(1);
  86. }*/
(#) icserny válasza janimester hozzászólására (») Nov 9, 2013 /
 
Idézet:
„Az a gondom hogy nem bírok egyszerre két adc csatornát működtetni.”
Nem is kell. Az ADC előtt van egy analóg multiplexer, azt kell átállítani minden mérés előtt.

  1. ADC_Value1 = ADC_Read(ADC_CH0);
  2. ADC_Value2 = ADC_Read(ADC_CH1);

Utána konvertálod, kiíratod, felhasználod az adatokat.
(#) janimester válasza icserny hozzászólására (») Nov 9, 2013 /
 
Ezer köszönet barátom , sikerült
(#) janimester válasza icserny hozzászólására (») Nov 9, 2013 /
 
Egy hibája még van a programnak mégpedig az hogy szimulátorban panaszkodik hogy az AN2 nincs analóg bemenetnek beállítva. Jelenleg az AN0 az egyik adc az AN1 a ds szenzor az AN2 meg a második adc. Az adcon1-et kellene módosítanom de még nem értem hogy miből áll össze ez a 0x0E- kód.

  1. ADCON0= 0x01;         //voltmérőé
  2.     ADCON1 = 0x0E;        //VOLTMÉRŐÉ Set AN0 to AN3 as analog channels       //0x0E
  3.   //  ADCON1= 0x82;         // configure VDD as Vref, and analog channels        //0x82
  4.     PORTA = 0;
  5.     TRISA = 0b00010000;          //0b00010000;
(#) icserny válasza janimester hozzászólására (») Nov 9, 2013 /
 
A gond az, hogy a 4550 esetében csak sorban lehet engedélyezni az analóg csatornákat. Ha két analóg csatornát engedélyezel, az csak AN0 és AN1 lehet. Ebből a szempontból nézve tehát bölcsebb volna felcserélni az AN1 és AN2 lábak kiosztását!

Az engedélyezés nálam így néz ki:
  1. /** ANALOG CSATORNÁK tiltása/engedélyezése **************************/
  2. #define DISABLE_ALL_ANALOG() {CMCON  = 0b00000111;  ADCON1 = 0b00001111; }
  3. #define ENABLE_ONE_ANALOG()  {CMCON  = 0b00000111;  ADCON1 = 0b00001110; }
  4. #define ENABLE_TWO_ANALOG()  {CMCON  = 0b00000111;  ADCON1 = 0b00001101; }

Egyébként az adatlapban van egy szép táblázat erről...
A hozzászólás módosítva: Nov 9, 2013
(#) zenetom hozzászólása Nov 12, 2013 /
 
Sziasztok!
Lassan, de biztosan belemerülök jobban a C nyelvbe, és szeretnék az alapokkal tisztában lenni.
Szóval vannak ugye a függvények, melyeknél ha nem akarunk paraméterátadást (bemenet, visszatérési érték), akkor a "void"-ot használjuk.
Pl.:
  1. void main(void)


Viszont van, hogy csak "void main()"-t írnak, sőt csak simán "main()"-t.

Ha nem írjuk ki a void-ot, akkor ugyanolyan, mint ha kiírnánk? De valami különbség csak van. Vagy mégse?
A hozzászólás módosítva: Nov 12, 2013
(#) kissi válasza zenetom hozzászólására (») Nov 12, 2013 /
 
Fordító függő: van amelyik elfogadja ( és annak értelmezi ! ), van, amelyik nem, ragaszkodik a kiíráshoz ( én legalábbis így tudom! ) !
(#) zenetom válasza kissi hozzászólására (») Nov 12, 2013 /
 
Köszi, ez logikusnak hangzik.
Ettől függetlenül még várom a véleményeket.
Következő: »»   85 / 153
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