Fórum témák
» Több friss téma |
Jobban járnál, ha cél IC-t használnál. PGA2311 elég jó minőséget ad. Vagy a PIC kimeneteire teszel ellenállás hálózatot és azzal fetet vezérelsz és lehúzód a bemenő jelet...
Köszönöm a választ! Sajnos a SPI és I2C- vel még nem boldogulok (bár sokat szenvedtem de nem ment) Ezért valami egyszerűbb megoldással próbálkoznék. Az ellenálás hálózatos az kis lábszámú picnél nem túl praktikus .( Gondolkodom még rajta!
![]()
Sziasztok!
Segítséget szeretnék kérni. Egy intelligens 230V 100W-os izzó fényerő-szabályozót kellene építenem. A fényerő szabályozását úgy szeretném megoldani, hogy a PIC-kel egy triakot kapcsolgatok be. Viszont tudnom kellene, hogy a hálózat a szinusz hullámban éppen hol tart, hogy mikor gyújtsam be a triakot. Arra gondoltam, a 230V-ot egyenirányítom, és egyszerűen egy feszültségosztóval leosztom úgy, hogy a csúcsfeszültség MAX 5V legyen. AD konverterrel nézném, hogy mekkora a feszültség, és az alapján a megfelelő időben gyújtanám a triakot. Ez így helytálló elképzelés? Természetesen az érintés és balesetvédelmi normákra rendkívül ügyelve.
Szerintem meg használj trafót és úgy vedd le egy diódával a jelet. A nullátmenetet kell érzékelned és ehhez nem kell A/D.
Hali. Nézegetek kapcsolásokat, és találtam egy ilyet. Azt írja, hogy közös anódos kijelző használható hozzá. Nade a PIC eleve nem +5V kimenettel dolgozik?
Az I/O nem csak +5V-ot tud kiadni, hanem testet is. Inkább úgy fogalmaznék, hogy H és L szintet. Amúgy meg szerepel a cikkben a katódos is.
Nem a cikken van a hangsúly, hanem nekem ez még új, hogy tud L és H kimenetet adni. Alapokat tudom csak, azt is csak modulrendszerű grafikus PIC programozásban, de erről eddig még nem hallottam
![]()
A trafó nem hülyeség, meg a dióda. A nullátmenetet hogyan érzékeljem AD nélkül? Simán egy digit bemenetre rá és amikor alacsony azt nullának veszem? Elég pontosan kellene tudnom mikor kezdődik, azért egy 10bites A/D-vel jobban meghatározható lenne a kezdet.
Szia!
A trafót egy tranzisztorra kötöd és az 0,6 V-nál nyit --> a szekunder feszültséged alapján ki tudod számolni ez hány foknak felel meg! Ha nem jó, akkor műveleti erősítős komparátor! Steve
Ne hülyéskedj már! Persze, hogy L szintet figyelsz és utána időzítesz. Egy egyszerű megszakításkezeléssel megoldható.
Csatolok egy mintát, ebből puskázhatsz. T5-T6 körét vizsgád meg.
Egy-egy L impulzus, 10ms-onként ugrik be. Innen már be tudod pöccinteni a kimenetet.
Köszi! Azt hiszem megpróbálom én is hasonlóan!
Hello!
Feltennék egy kérdést, MPLAB-al assemblyben írok programot és olyan mintha elértem volna egy határt, akármilyen plusz utasítást írok be (még NOP-ra is!) a fordító ezt a hibát adja vissza: Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000000, length=0x00001002 Errors : 1 Találkozott már valaki ezzel?
Nem lehet, hogy a PIC memoriaja betelt? Mi van a direktivaban, milyen PIC-et adtal meg neki?
Mellekeld a progit.
Ez egy szivattyúvezérlés és védelem lesz.
PIC16F628A volt az eredeti, de most írom át 16F877A-ra, mert elfogytak az I/O lábak, ahogy jöttek az újabb ötletek. Viszont ott is ez a hibaüzenet. Köszi, hogy segítesz!
Nalam siman lefordul, tettem mogeje egy csomo NOP-ot. MPASM 5.35
De szerintem betelt a memoriad akkor is. Mert en egy csomo hibauzit szupresszalok. Rengeteg helyet sporolhatnal egy kis odafigyelessel, pl. MOVLW 't' MOVWF DISP CALL CHAR Helyett magaban a CHAR rutinban kellene a legelejen betenni a movwf-et es akkor csak a MOVLW es a CALL kellene. De sokkal elegansabb lenne tablazatbol vagy eeprombol megoldani. Es persze sokkal rovidebb is. De nem szep, hogy nincs benne helye a megszakitasnak.
Akkor majd próbálkozok én is, hátha egyszer sikerül. Jó ötlet a CHAR rutinhoz írni, így valóban kevesebb sor lesz.
Amúgy én alig értek a PIC-ekhez az is csoda, hogy idáig működőképes a program, de igyekszek tanulni, mert érdekel a dolog. A táblázathoz vagy az eeprom kezeléshez (egyelőre) nem értek. Milyen megszakításra gondolsz? A hozzászólás módosítva: Dec 31, 2012
Ez nem PIC-specifikus, hanem programozas. Ha valami ismetlodik, erdemes subrutinba tenni.
Az jo, ha hajlando vagy tanulni. A megszakitasok a PIC-ek eseteben nagyon fontosak! Erdemes lesz veluk foglalkoznod. Ha valamit pontosan kell idoziteni, mikozben a foprogi fut, nem nagyon van mas lehetoseged. Itt nalad ELVILEG nincs egy megszakitas sem. A baj az, hogy ha veletlenul megis beutne egy, akkor a progi elejen levo tablazatbol a megszakitasi cimre ugrik, ami kb 0x0008. Es ott neked valami programsor van, szoval fals utasitasra fut. Altalaban minden PIC ugy kezdi, hogy bekapcsolaskor a 0x0000 cimre ugrik, megszakitaskor meg a 0x0008-ra (de ez PIC-specifikus, meg vannak ketszintu megszakitasok is). Ezert egy normalis PIC progi ugy kezdodik, hogy ORG 0x0000 jmp Main ORG 0x0008 jmp IRQ Main: es innen jon a progid. A tablazat meg a te 16F-eden is megoldhato, de ha jot szeretnel magadnak, akkor atallsz a 18F-es sorozatra, ott az egesz belso memoria felhasznalhato es elerheto konnyen. Belso oszcillator, sokkal tobb jo utasitas, sokkal kevesebb szivas a lapozassal. Nem is dragabb.
A 628A prog memóriája 3,5KB (forrás: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010210 ), a 0x1002 pedig már 4098 byte, nincsen a dolgon semmi csodálni való - tényleg elfogyott a memóriád. A 16F877A-ra való áttérésnél ugye a pic típus változásról a fordítót is tájékoztatod? (Annak egyébként van 14K memóriája, egy ideig még elég lesz.)
A hozzászólás módosítva: Dec 31, 2012
Ha elfogyott a láb, esetleg lehet választani egy nagyobb lábszámas pic-et. Már pic32-esek is kaphatóak külön szurkás boardra forrasztva - és egész baráti áron ahhoz képest, hogy ott aztán tényleg nem fogsz memória vagy lábszám korlátba beleütközni, vagy legalábbis nem egykönnyen fogsz tudni annyi mindent összeszedni, hogy korlátokba ütközhess.
Az spi egy rendesen kiforrott cuccos, de ennek a hátránya, hogy nem csak lehet, de kell is egy csomó dolgot beállítani. Master / slave; órajel és bitek szinkronjának beállítása; fragmentelés (újabb pic-ek ismerik); átviteli bit szám (pic típus függő mit ismer 8, 16, 32); a vezérlő órajel beállítása (belső pic periféria órajelet szokás használni, esetleg leosztva); megszakítást hozzá csak akkor, ha tényleg szükséged van rá; a pic lábakhoz hozzá kell rendelni a működését, és leszedni a többi perifériát, amik bezavarhatnak. Tényleg nem kevés macera, de csak egyszer kell átesni rajta. Ha minden megvan, a kimeneti regiszterbe dobod az adatot, akár egyszerre többet is (van egy adatátviteli buffer, pic-enként változó méret). Master üzemben generálni fogja az órajelet pic kimeneten, és kinyomja sorosan a biteket, valamint egyúttal olvassa a visszatérő biteket is, amit aztán visszadob neked regiszterbe. Ha a bitek jelzik, hogy van beérkezett adat, kiolvashatod (a te esetedben dummy fog visszatérni, a dac-nál nem kell foglalkozni a visszaérkező adattal). Üzemelés közben a kimeneti regiszterbe adat beírás, és a válasz regiszterből a beérkezett adat kiolvasásától eltekintve a magot nem terheli, "háttérben" zajlik a folyamat. A felsorolásból melyik lépésnél akadtál el?
Igen tájékoztattam, sőt, jó pár helyen át is kell írni, mert pl a CMCON register a BANK1-en van, meg ennél csak a PORTA csak 5-ig van, míg a másiknál 7-ig. Így le is fordult. Hát igen, kicsit memória pazarlóan programozok
![]() BÚÉK! A hozzászólás módosítva: Dec 31, 2012
Köszi a tippeket, utánanézek a megszakításkezelésnek. Így még, hogy nem néztem utána van egy elképzelésem: ha megnyomok egy gombot, a megszakítás címre ugrik, ott végrehajtódnak az utasítások, majd folytatja a programot, ahol abbahagyta vagy esetleg előlről kezdi. Gondolom ez csak progtamozás kérdése.
BÚÉK! A hozzászólás módosítva: Dec 31, 2012
Szia!
Nem igaz, amit írsz!!! A 16F 14 bites utasításszavakat címzi, így a 16F628(A) -nek 2048 darab 14 bites utasításhelye van. A megszakítás a 0x004 címre ugrik. Ha meghaladjuk a 2048 utasítást, több dolgot újra kell gondolni. Olvastátok? A rutinokat a 2k -s lapokra kell elosztani, a lapok (page) közötti átmeneteknél a PCLATH regisztert állítani kell. Ha megszakítás is lenne, még több dolgot kellene menteni és visszaállítani. De ez le van írva a cikkben. BUÉK....
Hmm, részemről nem firtattam, mennyire fogyott el, csak azt jeleztem, hogy a fordító kijelzése szerint tényleg elfogyott. Egyébként tény és való, ezekkel a bittöredékes dolgokkal számolni már nagyon elfelejtettem, mea culpa
![]() Egyébként a kezdőknek miért favorizáljátok ezeket a régi pic-eket? Már 32MX-ek is vannak spdipesben is ezres alatt. Jó, nem 3-400 forint, hanem 6-800 forint, de most tényleg azon múlana? Ellátottsággal sincsen már probléma. ChipCAD-nél is valamelyik típus biztos kapható akármikor. Ilyen 2K memória korlátok miatt kínlódni sok-sok évvel ezelőtt még egy dolog volt, de most mindjárt 2013-ban? Hát nem tudom.. BUÉK ![]()
Szia!
Mottó: Idézet: „Több oka is van annak, hogy nem szól a harang... De a legfőbb, hogy nincs harang.” - Vidéken még a 16F1xxx széria sem kapható, a ChipCad postázása is kb. 3 - 4 kontroller árába kerül. - Főleg az újabb 16 és 32 bites PIC kontrollereket korgalmazzák DIP tokban is. Ezeket a PICKit2 nem kezeli vélhetően főleg üzletpolitikai szempontból. PICKit3 kell a programozásukhoz is. - A legtöbb általad említett kontroller 3.3 .. 3.6V -os, sok kapcsolás 5V -ra van tervezve. - Az a 2K lapozás, adatbank váltás nem jelet túl nagy problémát. Jól bevált sémát követve menni fog. Különben is minden architektúrának meglesznek a korlátai csak el kell érti egy bizonyos programméretet. - A XC8, XC16, XC32 fordítók fizetősek és elég borsos az áruk. Az ingyenes módjuk minimum 12 -szer akkora kódod készít, mint az assembly program. Egy 16 vagy 32 bites kontrollert assembly -ben programozni nem egyszerű, a 16F, 18F szériát elég könnyű. - Egy 10F200 már 95 Ft -ért kapható, egy 16F1936 (16k * 14bit) kb. 400 Ft... - Elég sok funkció befér egy 16F886 -ba (8k * 14bit) is... Bővebben: Link - Új kontroller - hosszú errata... Most kínlódok egy dsPIC33EP64GP502 -vel - az utolsó DIP tokos darabot hoztam el a ChipCad -tól... A programming executive -t sikerült beleprogramoznom és visszaellenőriznem, de használatával más memória tartalmat olvasok ki, mint ha nem használom. Miért?? A MicroChip honlapján az áll, hogy a RIPE_10a_000040.hex kell hozzá, de az 64 -k nál nagyobb kapacitásúakhoz való a nevére keresve a programming specification -ok között. A 64k -nál nagyobbak programozási leírásában a RIPE_10_000032.hex szerepel, másutt ez a 64k -nál kisebbekhez írják. A hozzászólás módosítva: Jan 1, 2013
Idézet: Nem hiszem, hogy komolyan gondolod, hogy ez fő szempont lehet a kiválasztásnál! Utána meg hónapokig szív vele a delikvens...„- Egy 10F200 már 95 Ft -ért kapható, egy 16F1936 (16k * 14bit) kb. 400 Ft...” Ha pedig egy nagyobb teljesítményű típusra kell váltania, akkor kezdheti újra (mert a PIC18 vagy PIC24 már más utasításkészlettel rendelkezik). Idézet: Ez viszont egy fontos, és méltányolható szempont. A "hagyományos" logikai áramkörökhöz egyszerűbb az 5 V-os mikrovezérlők illesztése. Az is fontos szempont, hogy az 5 V-os PIC általában nagyobb kimeneti áramot is bír, nem gond egy LED vagy egy 7-szegmenses kijelző meghajtása. De ilyet találni bőven a PIC18 szériában is, s ott azért a skálázhatóság valamivel jobb, szélesebbek a továbblépés lehetőségei (vannak USB, CAN, sőt Ethernet képes típusok is), tehát az alapozásnál megszerzett tudással messzebbre lehet jutni. Ez szerintem sokkal fontosabb szempont, mint a 400 Ft vagy 800 Ft kérdése. „- A legtöbb általad említett kontroller 3.3 .. 3.6V -os, sok kapcsolás 5V -ra van tervezve.” Idézet: „Nem hiszem, hogy komolyan gondolod, hogy ez fő szempont lehet a kiválasztásnál! Utána meg hónapokig szív vele a delikvens...” Ugye te sem gondolod, hogy egy szivattyú vezérléshez egyből a PIC32MX250F128D (a dip tok miatt csak ekkora, SMD tokban írhatnék még nagyobbat is) kell??? Nem is beszélve arról, hogy a gyorsabb kontrollereknél fokozottan jön elő a RMW műveleteknél fellépő hiba, a tápszűrés kialakításának kérdése. Ezt a kérdést már jó sokszor megtárgyaltuk... Mindkét megközelítésnek van létjogosultséga... Miért fejleszti a Microchip az Advanced Midrange családot? Mert van rá igény és a C fordítói zabálják a program memóriát... Ha még a Kínában forgalmazott MCV családot is nézném... Idézet: „Utána meg hónapokig szív vele a delikvens...” "Hónapokig szívni" a legújabb, legnagyobb kontrollerrel és errata -jával is lehet, sőt még azt sem tudod, hogy az adatlapnak vagy a mérési eredményednek higyj... Nem is beszélve a fordítők banális ökörségeiről, amikor egy egyszerű többértékű szemafor műveletet A = B and 0x7F; nem primitív műveletre fordít mov B,w; movwf A; movlw 0x7f; andwf A,f pedig a movf B,w; andlw 0x7F; movwf A még rövidebb is lenne. Azzal hogy a free verzió ismételget teljesen fölösleges utasításokat meg nem is foglalkoztam... A hozzászólás módosítva: Jan 1, 2013
Idézet: Persze, hogy nem gondolom. Ezért javasoltam például PIC18-at. Egyébként sem cél alkalmazásról volt szó, hanem a Hobbielektronika profiljába jobban illeszkedő tanulásról, amikor a delikvens elkezdi tanulni egy technológia lehetőségeit. „Ugye te sem gondolod, hogy egy szivattyú vezérléshez egyből a PIC32MX250F128D ... kell???” Idézet: Ezzel maximálisan egyetértek. Kezdőknek kifejezetten ellenjavallt, hogy a legújabb típusokkal kezdjenek foglalkozni. „"Hónapokig szívni" a legújabb, legnagyobb kontrollerrel és errata -jával is lehet”
Hello! Egyébként gondolkodtam vicsys fórumtárs ellenálás létrás megoltásán és először nem annyira volt szimpatikus a módszer, de számolgattam kicsit és gyakorlatilag egy porttal 16, két porttal már 64 szintű szabályzást lehetne megoldani ami több mint elég arra amire kerestem a megoldást! Jelenleg a 16F és 18F es szériákra fejlesztgetek egyszerűbb dolgokat, de nem is szeretnék egyenlőre újabb szériákra váltani.
A SPI vel konkrétan nem kezdtem el foglalkozni, viszont I2C vel igen, az elméleti része világos, gyakorlatban viszont nem sikerült még kommunikálnom. Tisztában vagyok egyébként az előnyeivel, de jelenleg ha pl két pic közötti kommunikációra lenne szükségem, akkor saját adatcserélő algoritmust írnék ![]() |
Bejelentkezés
Hirdetés |