Fórum témák
» Több friss téma |
Sziasztok!
A következő problémába ütköztem: adott egy 18F452-es kontroller, elég sok adatot ír ki egy 16x2-es LCD-re. Ennek egy részét mentem a belső EEPROM-ba. Ha beleteszem azt, hogy indulás után olvassa ki az EEPROM-ot a megfelelő címekről, megbolondul az LCD kezelés, nem jelennek meg dolgok. Ha kiveszem az olvasást, megint jó minden. MikroC PRO-t használok. Találkozott már valaki ilyen hibával? Mi a megoldás?
Sziasztok.
Egy kis segítséget szeretnék kérni az alábbi kódot szeretném átírni a mellékelt kapcsolási rajzhoz de eddig sajnos nem sikerült bárhogy próbálkoztam.
Hiába írogattam át a lábakat meg a ki-be meneteket az RB3-as lábon nem jelenik meg magas szint.Egy másik kapcsolásnál 2db lábat kellet megcserélnem a kódba az LCD-nél és az tökéletesen működik de itt bárhogy próbálkozok semmi siker nincs.
Ez a kód eredetileg is 16F628 ra készült?
Nem látom beállítva az RB.3 irányát. (Kimenet/bemenet). A hozzászólás módosítva: Szept 26, 2016
Valami ilyesmi esetleg kéne:
Az a kód ehhez a rajzhoz készült amit most mellékeltem.
Működik a kijelzés és el is indul rendesen csak a ki-be menetek nem stimmelnek. Meg a nyomógombok mert ahogy elindul rögtön lépteti a perceket. A relé kimenetet szerettem volna áttenni az RB3-ra mert ott az RA3-on van de sajnos nem sikerült. Nekem az előző kapcsolás van megépítve és ahhoz szerettem volna ezt a kódot átírni.
Rossz szinte az összes TRIS bit a 100-101. sorban. A TRISB-ben csak az RB0 bemenet, a többi kimenet, tehát TRISB = 0b00000001. A TRISA-n van a többi gomb, vagyis TRISA = 0b11111100.
Próbáltam már azokat is átírni de most kipróbálom amit írtál.
A 30-as sorban "sbit Relay at RB3_bit" Itt nem kell átírnom RA3-ra? Mekkora királyság, át is írtam úgy ahogy írtad, lefordítottam és tökéletesen működik úgy ahogy kell, köszönöm szépen. Próbálkoztam már TRISA,TRISB átírásával de nem működött valamiért. A hozzászólás módosítva: Szept 26, 2016
Idézet: „TRISB = 0b11101111; TRISA = 0b11110000;” Itt RA3..0 kimenetnek vagyon állítva, ezért lépteti az időt, az RB3 pedig bemenetként nem tudja vezérelni a relét...
Most már működik úgy ahogy prendick írta.
Köszönöm neked is meg neki is még egyszer.
Működik? Pedig az enyém nem jó a kék rajzhoz. Még a régi rajzhoz írtam, úgyhogy Hp41C verzióját írd a programba, mert nem fognak menni a gombjaid.
Érdekes, pedig elsőre működött.
Most azóta félre tettem de megpróbálom megint. Nekem nem a kék rajzhoz kell, a kék rajz kódját tettem fel és a másik rajzhoz kell a program mert az a kapcsolás van nekem megépítve. Így viszont akkor jó az amit te írtál.
Na most már teljesen össze zavarodtam.
Az előbb működött és még a relét is vezérelte, most meg semmi. A kód amit beillesztettem az eredetileg a kék rajzhoz tartozik, de nekem a legelső kapcsolás van megépítve és ahhoz szerettem volna a kódot illeszteni.
Arra figyelj, hogy ha az adott portot aTRIS -el 1 re állítod az bemenet. Ha 0 -ra akkor kimenet.
Ha egy láb nincs használva akkor azt ki, vagy be menetre kell állítani?
Én bemenetre állítanám.
Ha bemenetnek állítod fel- vagy lehúzó ellenállás kell a lábra. CMOS bemenetet nem szabad bekötetlenül hagyni. Ha kimenetnek állítod be, nem kell további alkatrész.
A legtöbb lábnak van kapcsolható belső felhúzó ellenállása.
Ezekkel a beállításokkal most már működik ahogy kell ,de nem volt elég csak a lábakat beállítanom hanem a 59-65-ös sorokban is át kellett írnom a lábakat. Amíg azokat nem írtam át össze vissza működött és magától léptette a perceket. Amit legelőször raktam fel rajzot ahhoz ez a beállítás a jó. TRISB = 0b00000001; TRISA = 0b00111100;
Sziasztok
Van egy pic18f46k22 Alap konfigom ez:
ANSELE nincs ennél a picknél ha nem ANSELx.ANSxy ha ez igy van akkor a forditó mért fogadja el?? Idézet: „ANSELE.RE1=0;// gomb jobb bemenet ANSELE.RE2=0;” Csak a nyomógomb miatt kellet berakni mert ennélküld nem tudtam olvasni POST al Krédéseim xy helyére a lábnevét írjam pl RE2 RE1 vagy az analog idjét AN1 AN3.....?? Tervem AN5 szeretnék analogot mérni. A hozzászólás módosítva: Okt 4, 2016
Sziasztok! Sokadjára látok neki és szeretném most már elsajátítani a PIC programozást viszont pár kérdés felmerült már a kezdeteknél. Ilyen például, hogy ha MikroC-ben megírok egy programot és égetem a PIC-be, nem csinál semmit, holott a Real Pic Simulator rendesen mutatja. PIC Simulator IDE szintén nem mutatja. Másik érdekesség:habár ugyanazok a beállítások vannak, mindegyik szimulátor más gyorsasággal mutatja az eredményt. Ötleteket szívesen fogadnám. Köszönöm!
A szimulátorok sebessége eltérő, ez szinte törvényszerű, ez, mondhatni normális. Az, hogy szimulátorban működik a program de a valóságban nem, több okra vezethető vissza. Pár dolog, ami eszembe jut:
MCLR: Van olyan kontroller, amelyiknél a konfigban nem lehet megadni, hogy te nem szeretnéd használni ezt a lábat, mint Reset, hanem mint bemenet. Az ilyeneknél ezt a lábat fel kell húzni a tápfeszültségre, különben a kontroller újraindul vagy egyáltalán el sem indul. Lehet, hogy ezt a szimulátor megteszi helyetted. BOR (Brown Out Reset): Ha a konfigban ez engedélyezve van, akkor a valóságban, amennyiben egy bizonyos szint alá esik a tápfeszültség, a kontroller újraindul. Többnél ez a szint beállítható. A szimulátor ezt nagy valószínűséggel nem veszi figyelembe, úgy "gondolja", hogy a minimális tápfeszültség mindenképpen megvan. Oszcillátor: Sok kontrollernél meg lehet adni, milyen oszcillátorról menjen. Pl. külső kvarc, belső órajel (már ha van ilyen). Ha van belső órajel generátora a kontrollernek, akkor azt be is kell állítani és külön megmondani a kontrollernek, hogy ő most ennyivel ketyeg. Ha a kettő nem stimmel, könnyen lehet, hogy azt hiszed, 8 MHz-ről megy a kontroller de a valóságban csak 1 MHz-es órajelet kap. Lehetséges, hogy a szimulátorban megadott pl. 8 MHz-es órajelet mindenképpen annyinak veszi, függetlenül attól, hogy a valóságban nem annyi. WDT (Watchdog Timer): Ez egy kis számláló, amit időnként nullázni kell, különben újraindítja a kontrollert, már ha aktív a WDT. Van olyan PIC, amelyikben a WDT periódusideje 20-30 ms és nem lehet átállítani, tehát viszonylag sűrűn kell nullázni. Lehet, hogy a szimulátor ezt nem veszi figyelembe. Általában ezek a fő buktatók. A következő lépés az esetleges hibás felprogramozás, a hibás bekötés vagy a kimondottan kötelező hidegítőkondenzátor(ok) elhagyása a Vdd láb(ak) közelében (100 nF). Tovább úgy lehet lépni, ha megmutatod a programot, elmondod milyen kontrollert használsz és esetlegesen lefényképezed a kész művet. Az is érdekes lehet, hogy mivel programozod a kontrollert. A hozzászólás módosítva: Jan 8, 2017
Kedves Bakman! Köszönöm a részletes választ, pótolom ezeket, remélem segít. A betáplálással nem hinném hogy probléma lesz, stabil 5 V feszültséget kap az IC és közvetlenül lőtte van kondenzátor. Egyébként korábban Topi leírása alapján indultam el (ezúton is köszönöm a cikket) és az Ő által készített HEX-et beégetve hibátlanul megy a kontroller, viszont a szimulátoroknál nem. Most főképp MikroC-t használnék programozásra (azért is ide írtam), ehhez viszont neten nézem az instrukciókat. Lépésenként haladnék: szokásos LED villogtatás, villogtatás gombra, 2x16-os LCD szövegkiíratás és 4x3-as keypad használattal bevitel. Az IC PIC16F877A/I-P, mellékeltem képet a műről, ami erősen tesztjellegűre sikeredett, de használható.
A hozzászólás módosítva: Jan 8, 2017
Nevezett kontrollerben nincs belső oszcillátor, az MCLR lábat pedig minden esetben fel kell húzni a tápfeszültségre. Ha Topi programja működik de a tiéd nem, akkor valószínű, hogy magában a programban van hiba vagy a konfigurációs beállításokban.
És ott is volt, a konfigurációs beállításokban a hiba. Nagyon köszönöm a leírást, sokat segített!Érdekes, hogy jó pár oktató cikk, videó kering az interneten kezdőknek és ezt a fontos lépést nem említi.
Kedves profik
Megtudnátok nézni hogy a hőmérőmet rendesen programoztam be?? A kódom:
Nincs lehetőségem most tesztelni de müködhet??? DS18B20+ lesz mérve
Kedves Bakman! Egy kérdést feltennék még, ha nem lenne probléma: tökéletesen működik jelenleg minden (kijelző meghajtás, LED-ek megfelelő felvillantása). Egy valami mégis probléma, mégpedig a gombok kezelése. A képen látható panelen minden egyes gomb egy-egy PIC A portra van kötve, viszont úgy érzékeli, mintha le lenne nyomva. Természetesen bemenetre van állítva az adott láb és fel van húzva 5V-ra és 0-val zárva lenne "lenyomva". Köszönöm a választ, kellemes napot!
Nem ismerem a programot, de a jelenségből arra következtetek, hogy a kontrollerben aktív magas a gombok érzékelése. Tehát nem felhúzni kell az adott bemenetet, hanem lehúzni nullára egy ellenállással, a gomb pedig +5 V-ot ad a bemenetre.
Köszönöm a választ! Végül meg lett a hiba, több órás keresés után: kimaradt az analóg - digitális konvertálás.
Sziasztok!
Egy kis segítséget szeretnék kérni.Adott egy PIC16f1936 és egy 16*2 es LCD kijelző és 3 nyomógomb. Egy visszaszámlálót szeretnék írni. Egyik nyomógomb növeli a perc értéket másik csökkenti a harmadik megnyomásra elindulna a visszaszámlálás. De csak akkor számol vissza ha megnyomom a 3. gombot, hogy kéne átírnom hogy ha megnyomom akkor folyamatosan számoljon vissza. Külön kezeltem a tízes illetve az egyes helyértéket.
A hozzászólás módosítva: Ápr 15, 2017
Szia!
Bár profiknak kéne megnézniük, de én úgy látom, hogy a programod a számlálót csökkentő részt csak akkor hajtja végre, ha a gombot éppen nyomod:
Amint a gombot elengeded, máris hamis lesz a feltétel, így az "mpe--;" nem megy végbe. Ezt a problémát én úgy oldanám meg, hogy a gombokat a program elején beolvasnám, majd egy-egy változóban tárolnám őket. Ha viszont éppen egy gombot sem nyomtál meg, akkor ezeket a változókat nem módosítanám, így újra a csökkentésért felelős ág teljesülne. |
Bejelentkezés
Hirdetés |