Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   792 / 1320
(#) takarp hozzászólása Aug 26, 2010 /
 
Sziasztok!

Az alábbi problémára szeretnék pic programot írni assembly-ben:
Adott egy mágnes szelep, ami változó szélességű négyszögjellel vezérelve. Ennek szeretném az átfolyását mérni.
A következőt gondoltam ki:
Ismert mennyiségű folyadékot engednék ki a szelepen, pl 1 litert. Mérem az időt a felfutó éltől a lefutó élig, ez lesz a nyitott szelep ideje. Ezt ismételném ameddig ki nem fogy az 1 liter folyadék, és folyamatosan összegezném, görgetve a nyitott időket. Így az idő és mennyiség ismeretében tudnám az átfolyást.

A kódot nem tudom hozzá megalkotni, az idő mérése megy, de összegezni, görgetni nem tudom az értéket!
Ebben tudnátok segíteni? 16F84A PIC-et használok.
(#) robotech válasza icserny hozzászólására (») Aug 26, 2010 /
 
Hol sikerült beszerezni az MCP2200-at?
Csak nem érkezett a ChipCAD-hoz meg egy készlet?

Amúgy a konfig program nélkül is tudja a dolgát az IC?
Vagy esetleg ekkor csak egy fix baudon?
(#) steev válasza takarp hozzászólására (») Aug 26, 2010 /
 
Egy globális változóban meg tudod oldani. Ezt még a fügvények előtt kell megadni.
(#) watt válasza takarp hozzászólására (») Aug 26, 2010 /
 
Ha nekem most ez lenne a feladatom, rögtön egy másik PIC-et választanék, mert ez erre nagyon buta. Olyan PIC kéne amiben legalább CCP modul van.

Aztán nem összegezni a mért időket, hanem átlagot kéne számolni, ami arányos lenne a mennyiséggel.
(#) watt válasza steev hozzászólására (») Aug 26, 2010 /
 
ASM-ban csak globális változók vannak....
(#) steev válasza icserny hozzászólására (») Aug 26, 2010 /
 
10MHz-s quartz, 18pF kondikkal.
Próbáltam azt is hogy az oszcillátor hiba, cím hiba és a többi hiba megyszakításra ledet kapcsolok, de nem kapcsolt egyik sem, amikor a jelenség előjött.

A BOR emelés majd megpróbálom .

Köszi a tippeket.
(#) steev válasza watt hozzászólására (») Aug 26, 2010 /
 
A programnyelven átsiklottam, igazad van.
(#) icserny válasza robotech hozzászólására (») Aug 26, 2010 /
 
Idézet:
„Hol sikerült beszerezni az MCP2200-at? Csak nem érkezett a ChipCAD-hoz meg egy készlet?”
Nem az enyém, csak kipróbálásra van nálam a demókártyája. A Farnelltől rendelték. A sebességet szerintem az alkalmazásból lehet/kell beállítani (pl. Hyperterm).

A konfigurációs programmal olyanokat lehet beállítani, hogy mi legyen az alapértelmezett sebesség, mi legyen a Vid/Pid, mit csináljon a két LED, stb.

(Megjegyzés: azóta kiderült, hogy a konfigurációs programnak nem jó a 2.0 .NET keretrendszer, újabb változat, pl. .NET3.5 kell neki)
(#) lidi hozzászólása Aug 26, 2010 /
 
Megjött a pk3 -am. Persze nem bírtam ki, belenéztem.
Ez is csak úgy tudja a programmer to go -t, ha megtápolják usb felől. Szerintetek mennyire lenne gáz, ha az icsp csati felől egy diódával visszavezetném a tápot az usb csatira ? Esetleg egy kapcsolót rá ?
(#) pako válasza lidi hozzászólására (») Aug 26, 2010 /
 
Gondolom ma jött meg, mivel tegnap még nem említetted. Ha már most így frissen felnyitottad, és már most az upgrade-elésen gondolkozol, szerintem mondhatunk akármit, amekkora lendületben vagy.
De szerintem nem ártanál vele.
(#) takarp válasza watt hozzászólására (») Aug 26, 2010 /
 
Igen, a végén átlagot számolnék. Pl. az összegzés eredménye: 1000 ms alatt megy ki egy liter, akkor 1 ms-os jelhez 1 ml áramlás tartozik. Ebből az állandóból tudom monitorozni a pillanatnyi átfolyást a változó szélességű vezérlő jeleknél, felszorozva liter/óra értékre.

Ha jól gondoltam, akkor egy ciklust kell készíteni, ami mért időt hozzáadja a változóhoz, és ez ismétlődik, míg a megszakítás egy gomb lenne, amihez figyelnék egy bitet, ha 1-re vált akkor megszakad a ciklus, és továbblép a szorzásra és a kiírásra.

Sajnos eléggé kezdő vagyok a PIC témában, de a LED villogtatás, gombnyomogatáson túl vagyok, angollal sincs gondom, de ilyen specifikus problémára nem találtam megoldást, ahhoz meg még kevés a tudásom, hogy magamtól összerakjam a programot.

Milyen PIC-et ajánlotok erre a feladatra? Jó lenne, ha rendelkezne A/D átalakítóval is, később szükségem lenne rá, és akkor nem kellene bajlódnom a külső A/D átalakító illesztésével, ami még szintén magas nekem.

Köszi a segítséget!
(#) lidi válasza pako hozzászólására (») Aug 26, 2010 /
 
Hehe, áá, inkább nem bántom most még. Meggyőztél. Vicces viszont benne az Atmel eeprom.
(#) Hp41C válasza lidi hozzászólására (») Aug 26, 2010 /
 
Szia!

Miért nem készítesz egy ICSP kábelt, aminek egy kimustrált USB kábelből készült leágazása adná a tápot?

A nyár elején a Microchip fel szerette volna vásárolni az Atmel -t...
(#) Norberto válasza Hp41C hozzászólására (») Aug 26, 2010 /
 
Izgi lett volna, ha összejön nekik.
(#) icserny válasza Hp41C hozzászólására (») Aug 26, 2010 /
 
Idézet:
„A nyár elején a Microchip fel szerette volna vásárolni az Atmel -t...”
A jelek szerint néhány EEPROM-ot már meg is vettek. Kis lépések taktikája...
(#) Hp41C válasza icserny hozzászólására (») Aug 26, 2010 /
 
De az is lehet, hogy saját gyártmány... A szándék is korábban volt .. Bővebben: Link
(#) icserny válasza takarp hozzászólására (») Aug 26, 2010 /
 
Idézet:
„Milyen PIC-et ajánlotok erre a feladatra?”
PIC18F4550, s akkor a számítógéppel való kommunikáció sem lesz gond (USB). Nálam tananyagot is találsz hozzá...
Idézet:
„Jó lenne, ha rendelkezne A/D átalakítóval is”
Jó lenne tisztázni, hogy milyen pontosságú mérést akarsz végezni! PIC beépített ADC-vel 10 vagy 12 bites felbontással mérhetsz, a pontossága szerényebb. Külső ADC viszont 18-24 bites is kapható, s az illesztése sem nagy kunszt (pl. SPI-vel).
(#) watt válasza takarp hozzászólására (») Aug 26, 2010 /
 
Ha nem kell A/D és csak ez a feladat,amit felvázoltál, akkor 16F628A
A/D-s 16F690.
Ha az impulzus szélessége egyenesen arányos az átfolyó mennyiséggel, akkor elég néhány impulzust megmérni és átlagolni, majd kijelezni. A szorzót(kalibrációs állandó) elég később beállítani.
Ha nem lehet arányosságot felállítani, akkor több mérési pontot kell felvenni és erre egy 3-ad fokú polinomot illeszteni. A polinommal így meg lehet kapni a köztes értékeket is.

Ha túl sok impulzust mérsz meg és adsz össze, hatalmas számokkal kell dolgoznod, ami nem túl egyszerű ASM-ben. Persze a polinom kiszámítása, illetve a tört együtthatók kezelése sem leányálom! Ha ilyenre lenne szükség, akkor javasolt a 18F-es széria és a C nyelv használata.
(#) Hp41C válasza icserny hozzászólására (») Aug 26, 2010 /
 
Szia!

Itt még a jó öreg 16F84A-ról volt szó...
(#) icserny válasza Hp41C hozzászólására (») Aug 26, 2010 /
 
Igen, pont arról próbálom lebeszélni! (meg az összes többi PIC16-ról...)
(#) takarp válasza watt hozzászólására (») Aug 26, 2010 /
 
Át fogom nézni a 18F4550-es anyagait, jó befektetésnek tűnik, egy darabig biztosan nem "növöm" ki. 16F84-ről sokat olvastam, rengeteg anyag van róla magyarul is, ezen szereztem az ismeretim javát, biztosan sokkal durvább a 18F4550-es, meg a C nyelvet sem nagyon ismerem. Anno Pascalt tanultam suliban, az assemblyvel most barátkoztam meg, de úgy néz ki át kell állnom a C re.

Elvileg arányos az átfolyás az impulzus szélességével, ezzel nem hinném, hogy gond lenne.

Másik megoldás lehet, hogy 555-tel generélni egy kalibrált 50%-os négyszögjelet és azzal vezérelni a szelepet, megmérni úgy mennyi idő alatt enged ki 1 litert állandó üzemben.
Ezután már csak az aktuális üzem közbeni négyszögjel kitöltési tényezőjét kell figyelni, és azzal szorozni az előbb meghatározott értéket.

A nagy számokat lebegőpontosként kezelném, láttam valahol erre példát.
De inkább programoznék, szeretem fejben intézni az ilyen dolgokat, nem külön hardvert építeni mindenre, ha egy programmal is meg lehet oldani.

Az A/D átalakítás meg rezisztív elven működő nyomásadó értékének olvasására kellene.
(#) icserny válasza takarp hozzászólására (») Aug 27, 2010 /
 
Idézet:
„Elvileg arányos az átfolyás az impulzus szélességével”
Akkor meg csak egy oszcillátor és egy kapuzott számláló kell (az impulzusokkal kell kapuzni). A PIC időzítőivel/számlálóival is kivitelezhető.
Idézet:
„A nagy számokat lebegőpontosként kezelném”
Kár lenne! A gyakorlati célokra egyszerűbb az ún. fixpontos ábrázolás, ahol a fizikai mennyiségek törtrészeiben (pl. V helyett mV, liter helyett milliliter...) egész számként ábrázoljuk a (felszorzott) mennyiséget. A PICCOLO projekt Analóg perifériák c. fejezetében a hőmérő programok is így működnek.
(#) takarp válasza icserny hozzászólására (») Aug 27, 2010 /
 
Nagyon szépen köszönöm a segítséget! El fogok mélyedni a témában!
Szeretem egy könyvet: Embedded C programming and the Microchip PIC
Tudnátok még ajánlani jó könyvet/oldalt ahol a C nyelvet alapoktól lehetne elsajátítani? Sajnos sosem tanultam iskolában.
(#) watt válasza takarp hozzászólására (») Aug 27, 2010 /
 
Szét kell választani a programozási ismereteket és a nyelv(fejlesztő környezet) ismeretét. Ha bármilyen nyelven programoztál már megfelelő szinten, akkor C nyelven is fogsz tudni.
A feladat megismerni a C nyelv szintaktikáját(a fejlesztő környezet helpje ebben segít) és a fejlesztő környezetet, az abban lévő lehetőségeket, deklarálásokat, oszályokat, project kezelését stb. Ez utóbbihoz egy adott környezetet ki kell választani, és azt megtanulni. Javasolt a gyári környezetek választása.
(#) icserny válasza takarp hozzászólására (») Aug 27, 2010 /
 
Egy másik topikban már ajánlottam ezt a könyvet: A C programozás alapjai

Ez pedig egy angol nyelvű könyv: The C book
(#) icserny válasza icserny hozzászólására (») Aug 27, 2010 /
 
Kifejezetten a Microchip C18-ról szóló tutorial:
tutorial de C del compilador C18 (a kép alatt a 2. Opción de Descarga... linkre kattintva PDF-ben letölthető a Cretive Common licenszelésű könyv). Azt ne kérdezd tőlem, hogy spanyol vagy portugál, de jó könyvnek látszik!

Itt pedig egy rövid lélegzetű angol nyelvű C18 tutorial található.
(#) Stefan válasza takarp hozzászólására (») Aug 27, 2010 /
 
Itt van egy oldal ami az alapoktól indul. C tanuláshoz szerintem szedd le a dev-cpp nevű programot és abba gyakorolj. Ha mennek a kis konzolos programok akkor érdemes PIC en próbálkozni vele. De ez csak az én véleményem.
(#) geri12 hozzászólása Aug 27, 2010 /
 
Üdv!

DS1621-et ugye nem lehet kiolvasni úgy hogy az értéket külön számokra osztjuk?

Tehát arra gondolok hogy például a 25,5 fokot 2-5-5-re olvassuk be a PIC-be. Sajnos a programban nem lehet az érték két számjegyű a kijelzés miatt. Ha más nem akkor valamilyen módón a programban kéne szétosztani.
(#) watt válasza geri12 hozzászólására (») Aug 27, 2010 /
 
Egyrészt nem lehet, másrészt bármilyen számot lehet kerekíteni, vagy átalakítani olyan formátumúvá, ami megfelel a kijelzésnek. Inkább ilyen irányba törd a fejed.
(#) valaki2 hozzászólása Aug 27, 2010 /
 
Hali,

Van egy C-ben , PIC16F877 -re írt kódom. Eléggé egyszerű: inicializálom a pikket és a megszakítást. Alapból a D portra kötött 8 LED-re 0x55 -t küldök ki, ha a timer2 megszakítást generál, akkor pedig 0xff -t.
A gondom az, hogy a számláló megszakítás bitje beáll, de a megszakítás rutin nem fut le. Valaki látja a kódban a hibát?

(Környezet: pickit2 -s panel, HI-TECH forditó, MPLAB)
  1. char counter;
  2.  
  3. void interrupt interrupt_handler (void )
  4. {
  5.         if ((TMR2IE)&&(TMR2IF))
  6.         {              
  7.         counter = 1;
  8.         TMR2IF = 0;
  9.         }
  10. }
  11.        
  12. void InitInterrupt (void);
  13. void InitT2 (void);
  14.  
  15. void main (void )
  16. {
  17.         InitT2();
  18.         InitInterrupt();       
  19.         InitPic();
  20.  
  21.         counter = 0;
  22.         TMR2ON = 1;    
  23.  
  24.         while(1)
  25.         {
  26.                 if(counter)
  27.                 {
  28.                 PORTD = 0XFF;
  29.                 counter=0;
  30.                 }
  31.                 else
  32.                 PORTD = 0X55;
  33.         }
  34. }
  35.  
  36. void InitT2 (void)
  37. {
  38.         T2CON = 0x02;
  39.         TMR2 = 0xFE;
  40.         TMR2IF = 0;
  41.         //TMR2ON = 1;  
  42. }
  43.  
  44. void InitInterrupt (void)
  45. {
  46.         TMR2IE = 1;
  47.         PEIE = 1;
  48.         GIE = 1;
  49. }
Következő: »»   792 / 1320
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