Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1099 / 1320
(#) Hp41C válasza watt hozzászólására (») Okt 7, 2012 /
 
Ha jól méretezzük az időállandókat, nem is olyan bonyolult a kondenzátoros megoldás. Közép állásban igen nagy legyen az ellenállás, a két aktívban pedig a komparálási szintet 2 - 3 ill. 6 .. 8 utasítás ideje alatt érje el. Még megszakítási rutinban is könnyű lesz a kezelése. A (magas prioritású) megszakítási rutinba belépve állítsuk a portot kimenetre és alacsony szintre. A visszaállítás elvégzése előtt kapcsoljuk bemenetre. Olvassuk be a portot 4 ill 9 utasítással később - addig végezhetjük a visszaállítást, ha a gombok állapotát btfsc PORT,bit / bfs flags,Button utasításokkal végezzük...
A hozzászólás módosítva: Okt 7, 2012
(#) watt válasza Hp41C hozzászólására (») Okt 7, 2012 /
 
Szia! Nem nekem volt bonyolult, nekem tetszik a megoldás...
(#) Attila86 válasza Attila86 hozzászólására (») Okt 8, 2012 /
 
Mégsem jó! Szimulátorban valóban működött, de debuggolva a PIC-ben már hibás. Az osztást magát elvégzi és az eredménye (hányadosa) jó, csak a maradék nagyon nem stimmel. De nagyon érdekes mert ugyan azt a programot futtatom a szimulátorban és a PIC-ben is, ugyan ott van a töréspont is egy próbaosztás után, de ha a szimulátor áll meg az osztás után akkor jó szám van a maradékban, ha ugyan ezt beégetem a PIC-be és ott fut le akkor viszont fals szám lesz a maradékban.
Ez hogy lehet?

Konkrétan 1530013074-et ha elosztom 360000-el akkor a hányados 4250 lesz, a maradék a szimulátor szerint pedig 13074. Ez így jó. Ha a PIC-ben fut a program akkor viszont a maradék 1073754898 lesz.

Az rendben vagy hogy a hányados legalább jó, viszont nekem az adott feladatban sajnos nagyon is szükségem lenne a maradékra!
(#) Attila86 válasza Attila86 hozzászólására (») Okt 8, 2012 /
 
Megoldottam.
(#) nedudgi válasza Attila86 hozzászólására (») Okt 8, 2012 /
 
Hogyan?
(#) kissi válasza nedudgi hozzászólására (») Okt 8, 2012 /
 
Szia!

Szerintem elfelejtette a regisztereket megfelelően inicializálni !?

Steve
(#) Attila86 válasza nedudgi hozzászólására (») Okt 8, 2012 /
 
Lényegtelen. Az osztás maga jó volt csak utána a kapott maradék felső bájtját rosszul dolgoztam fel.
(#) beigli767 hozzászólása Okt 8, 2012 /
 
Senki se szeretne válaszolni? Vagy nehéz a kérdés? :\

http://www.hobbielektronika.hu/forum/topic_post_1308021.html#1308021
(#) _vl_ válasza beigli767 hozzászólására (») Okt 8, 2012 /
 
Vagy rossz helyen tetted fel a kérdésedet. Nekem ez valami Proteus nyűgnek tűnik; amit leírtál (egy kvarc az OSC1/2-n, egy 32 kHz-es másik az SOSC-n), annak kéne működnie a valóságban. A Proteusra szerintem van külön topik, hátha az ott lakók láttak már ilyet. Vagy próbáld ki élőben.
(#) icserny válasza beigli767 hozzászólására (») Okt 8, 2012 /
 
Számomra értelmetlennek tűnt a kérdés, mert jelenlegi ismereteim szerint az "external oszcillator", a "HS mód" meg a "Timer1" az három különböző dolog.
(#) beigli767 válasza icserny hozzászólására (») Okt 8, 2012 /
 
Az external oscillator HS üzemmódban megy, a Timer1 időzítő pedig ugyancsak külső kvarc alapján számol. De mégse így működik. Hanem a proteus szimulátor default 1 mhz-n működtet mindent. Ez a problémám, de én is proteus hibára gondolok. Ez esetben próbálkozom abban a topicban.
(#) beigli767 válasza _vl_ hozzászólására (») Okt 8, 2012 /
 
Élőben még nincs rá lehetőségem, de akkor rákérdezek proteus topic-ban.
(#) Attila86 válasza Attila86 hozzászólására (») Okt 8, 2012 /
 
Idézet:
„Még egy kérdés: A PIC belső oszcillátoráról járatva egy szoftveres órát nagyjából milyen pontatlanságra számíthatok? Mondjuk 1 óra alatt nagyságrendileg mennyit csal szerintetek?”

1 óra 17 perc alatt 27 másodpercet siet. Ez sok.
(#) _vl_ válasza beigli767 hozzászólására (») Okt 8, 2012 /
 
Idézet:
„Az external oscillator HS üzemmódban megy.”

Az lehetetlen. A HS üzemmódban kvarcnak kell rajta lennie kívül. Az external oscillator az nem kvarc. Nem lehet egyszerre valami kvarc és nem kvarc.
(#) Hp41C válasza _vl_ hozzászólására (») Okt 8, 2012 /
 
Szia!

Megy a HS módban a külső órajel, csak a CLKIN -re kell vinni... 18F -en még a HSPLL is megy 10 MHz tokozott quartz oszcillátorral. Kipróbáltam. A kép a 18F242 - 452 család adatlapjából való.
(#) mateakos válasza beigli767 hozzászólására (») Okt 9, 2012 /
 
A program végrehajtási sebességet az alkatrész tulajsonságainál kell megadni, ahol a hex fájlt betöltöd, a proteus nem szimulálja az oszcillátor működését, hogy az működtesse a virtuális PIC-et. Hogy hogyan lehet proteusban Timer1-et külső órajelről működtetni, azt meg nem tudom, talán ha számláló üzemmódba teszed és bevezetsz neki egy órajelet, amit valahol a szimulátor primitívek között található impulzusgenerátorral csinálsz, akkor működni fog.
(#) bbalazs_ hozzászólása Okt 9, 2012 /
 
Sracok, segitseget szeretnek kerni. Eddig azt hittem, tudok programozni, de most valami kifogott rajtam.
A cucc egy masodpercenkent 128 adatot elkuldo radios szerkezet.
A megszakitas pakolgatja bele az adatot (8 byte) fix idonkent, a foprogram pedig nezi, hogy kuldheto-e az adat, elkuldi. Eddig jol is mukodott, kettospuffer technikat alkalmaztam, azaz amig a masikat toltotte, az elsot kuldtem, aztan csere.
A gond az volt, hogy a radios kapcsolat sajnos nem 100%, van valamekkora hibarata (kb 140PPM hibas frame a kuldesben). Ezt szeretnem 0-ra csokkenteni, ezert azt talaltam ki, hogy cirkularis puffert keszitek a teljes RAM memoriabol.

Ugy lenne, hogy a megszakitas pakolgatja be szepen az adatot, noveli a mutatojat, a foprogram kuldoje (ami gyorsabb, mint 128/sec) pedig bandukol utana. Ha hiba van az atvitelben, akkor a bepakolas kicsit elhuz, de amint rendben sikerult elkuldeni vegre a blokkot, akkor a gyorsabb kuldes miatt szepen utoleri.
Tehat a memoria ugyanaz, 0x0100-0x0900, ket pointer van, ezekbol szamitom a cimet. Ezt leszimulaltam es a cimszamitas jo.

18F25k80-al dolgozom, assemblyben. Nem hasznalok a foprogramban olyan valtozot, amit a megszakitas atirhat, illetoleg a kritikus resznel le is van tiltva a megszakitas.
Megis ugy tunik, mintha idonket a ket pointer bakugrast jatszana, tehat a kuldo elobbre szalad, mint a bepakolo, teljesen fals ertekeket szolgaltatva ezzel, idonkent sokszor ismetli a korabbi szakaszt, noha elvileg felul kellene irnia a bekpakolonak.
Valoszinuleg azt a reszt rontom el, ami a ket mutatot hasonlitja ossze, ami addig var, mig legalabb 2 rekorddal elobbre nem mutat a bepaklo, csak utana kezd el kuldeni.

Milyen algoritmust javasoltok erre (cirkularis puffer)?
Elore is koszononom.

(#) beigli767 válasza mateakos hozzászólására (») Okt 9, 2012 /
 
Köszönöm. Ami nem értek. A low interruptba mégis belép amit elvileg a timer1 túlcsordulás okozna. Ezek szerint a proteusban beállított órajel szerint működik a timer1 nem?
(#) Hp41C válasza bbalazs_ hozzászólására (») Okt 9, 2012 /
 
Szia!
- Milyen fordítót használsz? Ha maga szintűt, akkor nézd meg az assembly listát. Néha a fordítók az egyszerűbbnek tűnő műveleteket nem kritikus szakaszbak fordítják.
- Pointerek kivonása helyett használj inkább kép pointert és egy számot, ami a bufferben levő adatok darabszámot tartalmazza. Ebben az esetben a darabszámot módosítsd legkésőbb, a módosítását minden esetben legyen primitív művelet (úgy kell megírni, hogy az megszakítás, amelyik az értékét felhasznája, ne tudja félbeszakítani).
(#) bbalazs_ válasza Hp41C hozzászólására (») Okt 9, 2012 /
 
Mit jelent a magas szintu fordito? A sima mpasm-ot hasznalom. Eleve assemblyben dolgozom. Milyen a kep pointer? Ha KET pointer akart lenni, akkor azt hasznalok.
Probaltam adat darabszammal is, de ugyanugy nem segitett. A modositasok incf es decf, szoval szerintem ennel egyszerubb nincs. Pont ezert vagyok ketsegbeesve, mert minden altalam ismert modszert bevetettem es megse nem
Majd holnap jon a lepesenkenti vegrehajtas szimulalt adatokkal, akkor talan kiderul a turpissag. Csak azert egy napot erre aldozni nekem luxus...
(#) Hp41C válasza bbalazs_ hozzászólására (») Okt 10, 2012 /
 
Szia!
Idézet:
„Mit jelent a magas szintu forditó?”

C, Pascal, Jal, Basic, stb.
Idézet:
„Milyen a kep pointer? Ha KET pointer akart lenni, akkor azt hasznalok.”

Természetesen két különálló pointer akart lenni...

Ha a buffer mérete nagyobb, mint 256 byte, akkor a pointer módosítás, a darabszám növelés/ csökkentés nem egy utasítás, ezeket primitív műveletekké kell tenni.
A hozzászólás módosítva: Okt 10, 2012
(#) Attila86 hozzászólása Okt 11, 2012 /
 
PIC18F25K80-at szeretném programfutás közben átállítani belső RC oszcillátorról külső 8MHz-es kvarcról (OSC1-OSC2 lábak) való futásra. Jól értelmeztem hogy ehhez a CONFIG1H regiszter alsó négy bitjét kell csak átállítanom 0011-re?
(#) _vl_ válasza Attila86 hozzászólására (») Okt 11, 2012 /
 
A CONFIG1H szerintem konfig regiszter, ami menet közben nem állítható regiszterként. Olyat lehet, hogy külső kvarccal indulsz, és menet közben az OSCCON tekergetésével át lehet állni belső RC oszcillátorra, majd utána vissza.

Amit érdemes még megnézni a leírásban: Two-speed startup (IESO bit), ill. Fail-safe clock monitor (FSCM).

Szerk: leesett, hogy mit szeretnél: nem lehet az OSC1/2 lábak funkcióját menet közben megváltoztatni. Azaz ha a konfig bitek szerint van külső kvarcod, akkor azokat a lábakat nem tudod GPIO-ként használni, ha pedig a konfig bitek szerint nincs külső kvarcod, akkor később sem tudod bekapcsolni szoftverből a kvarcoszcillátort.
A hozzászólás módosítva: Okt 11, 2012
(#) pontazok hozzászólása Okt 11, 2012 /
 
Sziasztok!

TFT kijelzőre szeretném kilistázni egy SD kártyán található fájlokat. MikroC-ben programozok.
Valaki nem tudja hogyan lehetséges ez? A kijelző hanyagolható is egyenlőre.
Inkább csak azt kellenne tudnom, hogy hogyan hívhatnám le az adatokat a kártyáról.
A kártyával a kommunikáció működik. Előre megadott fájlt megnyitni megtudok, de a kilistázásra nem tudok rájönni.

Előre is köszönöm ha valaki tud segíteni
(#) icserny válasza pontazok hozzászólására (») Okt 11, 2012 /
 
Valószínűleg itt kell kezdeni. Az Mmc_Fat_Dir karakterenként kiköpi a directory tartalmát, s azt kell értelmezni - ha jól értettem a kérdésedet.
(#) pontazok válasza icserny hozzászólására (») Okt 11, 2012 /
 
Úgy tűnik jól
Én is erre gondoltam, csak magával a paranccsal még nem tudtam mit kezdeni.
Gondolom a fájloknak a végén van egy lezáró karakter. Így fogom tudni mettől-meddig tart egy-egy fájlnév.
(#) AccessDenied hozzászólása Okt 16, 2012 /
 
Hali! Tegnap meg ma fejlesztettem egy kis áramkört a robogóm motor fordulat és henger hőmérséklet kijelzésére.

A mikrokontroller PIC16F690, a szoftver CCS-C (PIC-C), a hőmérséklet érzékelő MCP9700E a fordulat számláló hall 4905L.

Némi kis problémám van vele, ha beindítom a motort, és az érzékelő 40 cm-nél közelebb van a motorhoz, a képen látható módon behülyül, és van hogy le is fagy, de aztán van, hogy 2-5mp után visszajön. Alap esetbe az alsó sorban ennyi van "fordulat: 0000", és a kettőspont meg a szóközt lecseréli valami random karakterre, de a maradék helyen rendesen mér, tehát alapjáraton 700 körülire beáll, ha húzom a gázt meg emelkedik nagyjából, mint a hangja a motornak. Egy PC tápról üzemeltettem az éles próba alatt.

Kód, kép mellékelve.

Most írtam először interruptos programot. Lehet hogy WDT-timerrel el lehetne intézni a kifagyást? Kipróbáltam hogy a hall szenzornak külön tápot adtam egy kézre eső autós akksiról, és egy feszstabról, és úgy kb 2mp-ig nem jelentkeztek az extra karakterek. Lehet hogy egy rendes panelen, a mikrokontroller táplábához ültetett 1000uF+100nF segítene rajta? Az ismerősömnek hasonlóan behülyült a mikrokontrollere amikor indítóáramot mért autóba, és közel volt a felszelés a gyertyákhoz.
A hozzászólás módosítva: Okt 16, 2012
(#) kissi válasza AccessDenied hozzászólására (») Okt 17, 2012 /
 
Szia!
Idézet:
„Most írtam először interruptos programot. Lehet hogy WDT-timerrel el lehetne intézni a kifagyást?”

Előre bocsájtva, hogy a kódot nem néztem meg, mert nem ismerem a CCS-C-t...
A WatchDog csak esetleges, véletlenül előforduló hibák "kijavítására" való, ami "rendszeresen", indítás után néhány másodperccel biztosan jelentkezik, az vagy szoftverhiba vagy árnyékolási vagy elektronikai tervezési hiba! Bármelyik is, azt ki kell javítani !

Mit csinál a berendezésed próbapadon ( úgy is van fagyás?)?! Ha ezt megnézed, akkor már valószínűsítheted, hogy honnan jön a probléma!
Egy robogó vagy autó egyébként szinte állatorvosi lónak felel meg a szakmában ( szinte mindent meg lehet rajta tanulni, mire jó lesz!)!

Még egy jó tanács: az első interruptos programot nem ilyen komplex feladattal kell kezdeni, mert nem tudod, hogy mit nem csinálsz jól! Már többször szerepelt a fórumon: LED villogtatás,NY kezelés, TIMER kezelés, ezeket egyenként, majd együtt próbálgatva a megszakítással lehet szert tenni némi rutinra ( ez olyan, mintha az autóvezetést egyből egy Mercedes-el kezdenéd: elveszel a kapcsolók "tengerében", mikor még az ablaktörlő vagy az index kezelése is problémás !)!

Steve
A hozzászólás módosítva: Okt 17, 2012
(#) mateakos válasza AccessDenied hozzászólására (») Okt 17, 2012 /
 
Szia!
Nem ismerem a CCS-C-t, de van egy kérdésem és két ötletem (nem pont a hibával kapcsolatban)
Kérdés: #FUSES-nél a HS és az INTRC_IO szerepelhet egyszerre?
Ötlet: Ha nem 1 külső megszakításig eltelt időt, hanem 4 vagy 8 idejét méred, akkor pontosabb lesz a kijelzés. Érdemes lehet a számítást áthelyezni a főprogramba, mert a szorzás (ha a fordító nem cseréli le az 512-vel szorzást shiftelésre) és osztás (PIC16-nál) lassú. Ha ezt megteszed, akkor tovább növelheted a timer megszakítás sűrűségét is a mégnagyobb pontosság érdekében.
A hozzászólás módosítva: Okt 17, 2012
(#) vicsys válasza AccessDenied hozzászólására (») Okt 17, 2012 /
 
A brownout-ot kikapcsolnám a wdt-t meg be. A wdt segítene, ha elkolbászol a szoftver, a BRW meg nem lenne érzékeny a tápra. Esetleg érdemes még a PUT-ot is bekapcsolni, hogy maradjon idő az inicializálásra.
Persze a jó hardvert nem tudod szoftverből korrigálni, emiatt olyan panelt készíts (és ne dugdosós panellal tesztelj élesben), ahol az LCD a lehető legrövidebb modon van a PIC-el összekötve.
A hozzászólás módosítva: Okt 17, 2012
Következő: »»   1099 / 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