Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1034 / 1320
(#) edison14 válasza röntgen hozzászólására (») Nov 4, 2011 /
 
Nem akarok venni mert ez volt itthon és gondoltam hogy felhasználom. Nem lényeges hogy sokat fogyaszt mert csak a tanuláshoz kell.
(#) röntgen válasza edison14 hozzászólására (») Nov 4, 2011 /
 
Értem, és pontosan mit nem tudsz megoldani?
(#) mgy válasza dave77 hozzászólására (») Nov 4, 2011 /
 
A kapcsolás egyszerű.
Fogsz egy MAX 485 vagy 75176 IC-t.
Kiválasztól 3 szimpatikus PIC lábat.
Egy lesz a soros ki, második az adatirány (DIR), harmadik a soros be. Kész az is az RS485. (Lezáróellenállás, felhúzó ellenállások és esteleg 2 Zener, melyekre példát ezrével találsz)Áttanulmányozod az eszközöd MODBUS-os protokolját és megpróbálsz a PIC-re olyan programot szerkeszteni, mellyel kommunikál.
(#) edison14 válasza röntgen hozzászólására (») Nov 4, 2011 /
 
Az előző hozzászólásomban csatoltam a forráskódot. Nos annyi a gondom hogy CCS C-ben íródott a kód de félig meddig már átalakítottam HITECH C-s kódra. Csak egy kis gond van a RTC regiszterein belül levő bitek definiálásával. A kódban odaírtam hogy pontosan hol vannak ezek a részek.
(#) röntgen válasza edison14 hozzászólására (») Nov 4, 2011 /
 
Én nem látom a csatolt C kódot.
(#) edison14 válasza röntgen hozzászólására (») Nov 4, 2011 /
 
Nem C kód hanem header fájl.
(#) röntgen válasza edison14 hozzászólására (») Nov 4, 2011 /
 
Nem tudom ilyenre gondolsz-e?
Mondjuk a REGISTER A-nak UIP nevű bitjére, ami a register 7-ik bitje, én így egyszerűen definiálnám:

#define UIP 0x80

Amikor ellenőriznem kellene ezt a bitet, akkor pl. egy OR művelettel tesztelni tudom hogy az értéke '1' vagy '0'.
(#) Hp41C válasza mgy hozzászólására (») Nov 4, 2011 /
 
A helyzet nem ennyire egyszerű:
- Éredemes a pic belső UART egységét 9 bites adási / vételi módban használni, az adás és vételi lábak az uart lábai legyenek.
- Optikai leválasztás kell az RS485 és az uart lábai között. Ha sok ilyen egységet használunk, a föld eltolódás átlépheti a 0.4V zajtartalékot...
- A programban paritásellenőrzás és 16 bites CRC számítás is kell. Ha nem túl nagy távolságokat használsz a paritás elhagyható, de a MODBUS szabvány előírja...
(#) Hp41C válasza röntgen hozzászólására (») Nov 4, 2011 /
 
Inkább a
  1. #define UIP 7

definíciót használnám, mert használható a
  1. btfss rega,UIP

formában és az
  1. andlw (1 << UIP)

formában is.
(#) röntgen válasza Hp41C hozzászólására (») Nov 4, 2011 /
 
Igazad van, így korrektebb.
(#) bistvan196700 hozzászólása Nov 4, 2011 /
 
Sziasztok!
Segítséget szeretnék kérni. Van egy pwm-el szinusz jelet előállító program, azt szeretném, hogy a szinusz jelet 10-100hz között lehessen folyamatosan változtatni. A pic18f452 40mhz-el megy. Sajnos nem értem a program működését így nem tudom melyik változó vagy regiszter módosításával lehetne ezt elérni.
(#) edison14 válasza Hp41C hozzászólására (») Nov 4, 2011 /
 
Köszönöm szépen mindkettőtöknek a válaszokat. A program működik.
(#) edison14 válasza edison14 hozzászólására (») Nov 4, 2011 /
 
Akadt egy kis újabb probléma. A következő sorok tartalmazzák:
  1. void getDate(DS12887_t *date)
  2. {
  3. unsigned char temp;
  4.  
  5. // régi érték beolvasása
  6. temp = byteRead(REGISTER_B);
  7.  
  8. DS12887_BitModify(REGISTER_B, SET, SET);// 'SET' bit 1-be
  9. while (byteRead(REGISTER_A) & UIP)
  10. continue;
  11.  
  12. (date=Year) byteRead(YEAR_REG);
  13. (date=Month) byteRead(MONTH_REG);
  14. date->Day_of_the_Month = byteRead(DAY_OF_THE_MONTH_REG);
  15. date->Day_of_the_Week = byteRead(DAY_OF_THE_WEEK_REG);
  16. date->Hours = byteRead(HOURS_REG);
  17. date->Minutes = byteRead(MINUTES_REG);
  18. date->Seconds = byteRead(SECONDS_REG);
  19.  
  20. DS12887_BitModify(REGISTER_B, SET, 0);// 'SET' bit 0-ba
  21.  
  22. // ez a trükk azért kell, mert az 'UIE' bit ha 1-ben van, akkor 0-ba megy,
  23. // miután a 'SET' bitet beállítottuk 1-be
  24. // csak akkor lehet az 'UIE' bitet visszaállítani, ha a 'SET' bit
  25. // 0-ban van
  26. if (temp & UIE)
  27. DS12887_BitModify(REGISTER_B, UIE, UIE);
  28. }


Nos a -> helyére kellene valamit betenni mert ez így nem jó. Szerintetek úgy jó lesz ha megoldom iffel pl így:
  1. if (date=Year) byteRead(YEAR_REG);
  2. else if (date=Month) byteRead(MONTH_REG);
(#) Papp Ferike válasza bistvan196700 hozzászólására (») Nov 4, 2011 /
 
Szia!

Mekkora teljesítményt tud a kapcsolásod?//a programozáshoz még nem értek,sajnos//
(#) potyo válasza edison14 hozzászólására (») Nov 4, 2011 /
 
-> helyett szerintem . (pont) kellene. Bár attól függ, hogy pontosan mi a date nevű változó.
(#) promax hozzászólása Nov 4, 2011 /
 
Megszakításos kérdésem volna. Olyan környezetben dolgozok, amelyben egy periféria Low szintű megszakítást ad, ha adat érkezik rá. Ha több adat is érkezik, akkor a megszakítás vezetékét Low ban tartja mindaddig, míg az összes beérkezett adatot ki nem olvasta a PIC. Ahhoz, hogy minden adatot feldolgozzak, nem elég az első megszakításra 1X olvasnom, hanem a megszakítás vége előtt még olvasnom kellene a periféria DATA count regiszterét is, hogy van -e még további adat benne. (Ez időt vesz el, és azzal takarékoskodni akarok)
Én a fentieket úgy oldottam meg, hogy BTFSS -el figyelem az INT0 bemenetet. Amíg Low addig újra fut az olvasó rutin. Működik, de nem tűnik elegáns megoldásnak. Mi a véleményetek?
(#) vilmosd válasza promax hozzászólására (») Nov 5, 2011 /
 
Lehetne esetleg az IT rutinban egy jelzot beallitani majd tiltani az INT0 IT-t. Utana a foprogramban olvasgatod a periferiat. Amint a periferia kesz, torlod a jelzobitet es ujra engedelyezed az IT-t. Igy mas IT-ket nem fog zavarni a lekezeles hosszu ideje, es a foprogram is csinalhat mas dolgokat.
(#) bistvan196700 válasza Papp Ferike hozzászólására (») Nov 5, 2011 /
 
Szia!
Egyelőre egy hídkapcsolással 1 fázisú kis teljesítményű aszinkron motor fordulatszámát szeretném szabályozni. Igazából kisérletezni szeretnék vele. Csak a program nem világos teljesen.
(#) edison14 válasza potyo hozzászólására (») Nov 5, 2011 /
 
A pont nem működik. Beillesztem a kódot arra a DS12887_t változóra:
  1. typedef struct DS12887 {
  2. unsigned char Year;
  3. unsigned char Month;
  4. unsigned char Day_of_the_Month;
  5. unsigned char Day_of_the_Week;
  6. unsigned char Hours;
  7. unsigned char Minutes;
  8. unsigned char Seconds;
  9. } DS12887_t;
(#) Papp Ferike válasza bistvan196700 hozzászólására (») Nov 5, 2011 /
 
Hali!
Ezt a net-en találtad? Mert ilyet én is keresnék,csak a pic program általában nem publikus.
(#) bistvan196700 válasza Papp Ferike hozzászólására (») Nov 5, 2011 /
 
Szia!
Igen a net-en találtam sajnos már nem tudom, hogy hol, de az eredeti program fájlt felrakom neked. Én időközben módosítgattam ezt azt. Lefordítva proteus-al szimuláltam szépen működik, produkálja a szinusz jelet.

MC_16F876.c
    
(#) pontazok válasza röntgen hozzászólására (») Nov 5, 2011 /
 
Hát elvileg Hitachi HD44780 kompatibilis kijelző.
Legalább a megadott információk szerint.
Adok pár linket.
http://zss1.uw.hu/mikrovez/projects/hd44780.pdf
http://zss1.uw.hu/mikrovez/projects/lcd.asm
http://zss1.uw.hu/mikrovez/index.html

Az első a kijelző adatlapja. Nekem 4x20as van.
A második egy assembly-ben írt példaprogram.
A harmadik pedig egy átfogó lap a MicroMix fejlesztőkörnyezethez.
De én nem jöttem rá hogy mit csinálok rosszul
(#) röntgen válasza pontazok hozzászólására (») Nov 5, 2011 /
 
A programot megnézve, érthetőnek látszik mi hogy történik. Viszont egy dolgot nem szabad elfelejteni az LCD modulok kezelésénél, mégpedig azt, hogy egy-egy utasítás végrehajtása, karakter kiíratása időigényes dolog. Ezeket a rendszeridőket figyelembe kell venni. Pl. a kijelző törlés azt hiszem a leglassabb az összes közül. Talán 1.6msec, ami kontroller léptékben rengetegnek számít. Bekapcsolás után érdemes 1-2 másodpercet szánni arra, hogy az LCD modul feléledjen. Ha a gyors kezelést optimalizálni akarjuk van egy Busy flag az LCD státusz regiszterében, ami jelzi hogy pihi van vagy dolgozik éppen. Ezt kell kiolvasni mielőtt munkára fognánk.
(#) Papp Ferike válasza bistvan196700 hozzászólására (») Nov 6, 2011 /
 
Szia!

Sajna a rajz nélkül nem sokat ér. Azért köszi!

F
(#) Hp41C válasza pontazok hozzászólására (») Nov 6, 2011 /
 
Ebből a sorból a legfontossabb dokumentum hiányzik csak - az adatlap, pedig evvel kellene kezdeni....
Az adatlap Figure 25. ábrájából (212. oldal) jól látható, hogyan kell 8 bites módban inicializálni a kijelzőt. (A 4 bites mód inicializálása a Figure 26. a 213. oldalon látható.) A belinkelt kód hibás, nem tartalmazza az üzemmód beállítására vonatkozó három parancsot.

Jótanács:
A hálózatról letöltött kódokat fenntartással kezeljük, ellenőrizzük le, több, mint 80% (szándékos vagy véletlen) hibákat tartalmaz...
(#) Csabesz04 hozzászólása Nov 6, 2011 /
 
Sziasztok!
Tanulmanyi illetve hobbi szinten foglalkozok elektronikaval,ez mar a masodik evem.
Szeretnek tovabblepni a mikrokontrollerekre,orakon keresztul olvastam tegnap is,ma is a PIC ekrol,de meg mindig nem vagyok elegge tisztaban a PIC ek tipusaval kapcsolatban.

Mi szabja meg azt,hogy melyik tipus melyikkel helyettesitheto?

Engem speci jelenleg az erdekel,hogy helyettesitheto a 12F675 egy 16F628A val?Ha igen,akkor milyen modositasokat kell tennem?

Egy rovid magyarazatot is kerek,hogy ha igen akkor miert vagy minek fugvenyeben allapithatjuk meg ezt.

Elore is koszonom a valaszt!
(#) vilmosd válasza Csabesz04 hozzászólására (») Nov 6, 2011 /
 
A MCHP oldalarol letolthetoek az adatlapok, majd ezek tanulmanyozasa utan kiderul melyik PIC milyen HW elemeket tartalmaz. Az hogy vegulis a 12F675 helyettesitheto-e 16F628A-val csak az alkalmazas ismereteben lehet donteni. Van a MCHP oldalon egy Productselector, aminek a segitsegevel lehet parametrikus keresest csinalni a PIC-ek csaladjaban. Mert ugye pl tobb mint 325 tipus van a 8 bitesek csaladjaban. Ebbol vannak 6 labastol 100 lab felettiekig. Vannek egeszen keves HW-vel felvertezettektol a komplex uC-ig minden. Viszont az alkalmazas ismerete nelkul eleg nehez segiteni. Mindenesetre a potlas menete, hogy megnezzuk az adatlapban az eltereseket, majd a SW-t atirjuk az uj HW-nek megfeleloen. Utana lefordit, kiprobal majd megvesszuk az eredeti PIC-et es azzal epitjuk meg a kinezett kapcsolast, mert nem sikerult atirni a progit. Persze lehet hogy sikerul az atiras.
(#) Hp41C válasza Csabesz04 hozzászólására (») Nov 6, 2011 /
 
A program használja az A/D -t? Ha nem, akkor jó lehet a 16F628A, ha igen, akkor 16F819 vagy 16F88...
(#) Csabesz04 hozzászólása Nov 6, 2011 /
 
Pontosan errol a kapcsolasrol es a hozzatartozo programrol van szo:

a PIC 12F675 -ot alkalmazo Akkuor

itt szeretnem a PIC 12F675 ot helyettesiteni PIC 16F628A val.
(#) potyo válasza Csabesz04 hozzászólására (») Nov 6, 2011 /
 
Itt nem tudod helyettesíteni, mert szükség van analóg-digitális átalakítóra a pic-ben, a 16F628A pedig nem tartalmaz ilyet. Lehetne trükközni a komparátorokkal, ugyanezt a működést el lehetne érni, de ahhoz az áramkört is módosítani kell, és jelentősen át kell írni a pic programját is, így gyakorlatilag nulláról újra kellene tervezni az egészet.
Következő: »»   1034 / 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