Fórum témák
» Több friss téma |
Azért érezhettél némi morgást a válaszadók részéről, mert ha esetleg nem is vetted észre, párat beszóltál a napokban.
![]() Mindenki csak információkat tud adni, amik alapján már tudsz kísérletezni. A példaprogramok minden esetben feltételezik, hogy alapjaiban azért ismered már a témát és csak annyi infót adnak át, ami a konkrét megvalósításhoz szükséges. Kihagyhatatlan a kísérletezés, de kell hozzá az, hogy alapvető információkat megszerezz, különben csak a "vak tyúk is talál szemet" módszer érvényesül. Ebben tudunk mi itt segíteni. Például a PWM esetében is azt magyaráztuk, hogy minden az időzítéseken múlik. Tehát 1-2 órajelciklus terjedelmében lényegtelen, hogy mikor indul a TMR2 és a CCP egymáshoz képest, de hosszabb időknél már nagyon nem. A Microchip példaprogramjai nem igazán kezdőknek készülnek, mi meg ebben a topicban igyekszünk az alapoktól magyarázni. Emiatt javasoltam, hogy nem érdemes összevetni, hiszen nem véletlenül mondunk olykor mást. Mondjuk ettől még lehetsz szkeptikus, de ne túl hangosan, mert megbántod azokat, akik a te problémádra áldozzák az idejüket és a tudásukat.
Beszóltam volna? Tényleg sajnálom, ha ez jött le.
Tavasszal kezdtem el programozni, és sok mindent megtanultam a PIC példákon keresztül. Anno utoljára C64-et programoztam assemblyben. Aztán ennek a programnak az egyszerűbb változatát írtam meg, és az működött. Azoknak a program részleteknek a felhasználásával. Most vettem elő, hogy korszerűsítsem és belefutottam ebbe a nem kis bosszúságba. Ezen biztos mindenki átesik. No, de szerencsére nem vagytok nagyon sértődékenyek és még tudunk itt diskurálni jókat! ![]() Köszönöm még egyszer a segítséget! ![]() A hozzászólás módosítva: Dec 12, 2013
Idézet: „Ez egy klasszikus hiba, amit szerintem mindannyian elkövettünk már kezdő korunkban. Átmentél a Bank1-be, hogy megírd az eprom regisztereit, de a változóid a Bank0-ban vannak.” Délután éppen autóztam és azon elmélkedtem, hogy a változók 0x20-tól vannak eltárolva, az meg a Bank0! Áá, gondoltam, ez biztos nem lehet ekkora disznóság, hogy ettől menjen félre! És de! ![]() Komolyan mondom, hogy még dörzsöltnek is kell lenni, mert simán lyukra fut az ember. A hozzászólás módosítva: Dec 12, 2013
A bosszúságok 99%-a ezekből a pitiáner hibákból jön össze. Plusz még egy bit valami rejtelmes regiszterben, megcsúszott időzítés, a pic olykor igen sajátos logikája, rosszkor beeső watchdog, felcserélt c és s, ...
De hát ismered az assembly-t. Annyival rosszabb pic-et programozni, mint C64-et, hogy az utóbbiból nem volt ezer típus, ezerféle architekturával. Ezeknél a kis dögöknél meg állandóan pakolgatják a regisztereket meg a vezérlőbiteket. A bankváltások miatt untam meg az assembly-t. Pl. egy 16F1947-nél a 32 db. banktól már eldobtam a szíjat. A fele programnál már azt sem tudtam hol járok. Precízen csak assembly-ben lehet programozni, de előbb-utóbb unalmas lesz az 5 óra programozás, 50 óra hibakeresés, mint munkamódszer. C-ben, vagy Basic-ben te is megúsztad volna ezt a pár napi bosszúságot. (Igaz, azokban meg jön más.) De mindjárt kivágnak innen fecsegésért. ![]()
Hibák kijavítva és minden tökéletesen működik. Köszönöm a segítséged és mindenki másnak is.
![]()
Konkrétan ezen az oldalon még nem jártam, köszi a segítséget.
![]()
Üdv! 16F88-as PIC-nél meddig lehet lemenni a referencia feszültséggel? Adatlapjában nem találtam értéket (vagy nem vettem észre). Köszi!
A hozzászólás módosítva: Dec 14, 2013
2V -ig. Adatlap (DS30457C) 160. oldal A20 paraméter.
Hú ez melyik adatlap? Link? Nálam 0,8V a Vref., akkor hogy működik?
A hozzászólás módosítva: Dec 14, 2013
Ha PIC16F88 a szóbanforgás tárgya, akkor itt kell keresni az adatlapot.
TABLE 18-13: A/D CONVERTER CHARACTERISTICS: PIC16F87/88 (INDUSTRIAL, EXTENDED) A20 VREF Reference Voltage (ez a VREF+ és VREF- különbsége): minimum 2.0 V (DS30487D, page 188)
Itt néztem (rosszul ezek szerint). Köszi. Akkor mi van ha nálam 0,8V a Vref, és szépen mér? Vagy miért nem lehet ez alá menni?
Idézet: Valószínűleg ott működik valahogyan, de már nem tudja a specifikációt. „Akkor mi van ha nálam 0,8V a Vref, és szépen mér?”
Nem értem, mert nem "valahogyan" működik, hanem pontos, és egész 0,7V-ig jó. Létezik olyan PIC amelyiken lehet ilyen alacsony Vref.-et használni? Illetve létezik valamilyen megoldás magasabb referencia feszültséggel ilyen kis változást érzékelni, erősítés nélkül?
A hozzászólás módosítva: Dec 14, 2013
Még egy kérdés, pl. a PIC16f886-nál ezt írja az adatlap: Fixed 0.6 Vref. Ez akkor mire vonatkozik? Bocsánat, hogy fogalmam nincs erről, de eddig még külső referencia feszültséget nem használtam.
Az a 0.6V referencia inkább a komparátorokhoz van, de a kontroller tápfeszültségét is lehet vele mérni: Az A/D Vref+ legyen a Vdd, a Vref- pedig a Vss. Ekkor, ha megmérjük a 0.6V referenciát az eredmény 0.6V / Vdd * 1024 -lesz. Ebből meg lehet mondani, hogy mekkora a Vdd.
Az A/D átalakító pontossága (a 10 bites felbontás) nem garantált, ha a referencia feszültség kisebb, mint Vrefmin( 2V a 18F88 esetén).
Köszönöm!
Sziasztok!
Assembly-ről mi a véleményetek? érdemes foglalkozni vele?
Sziasztok
Pic hiányában megakadtam, két picet szeretnék összekötni egy aktiv magas illetve alacsony kapcsolattal csak nem tudom hogy möködöképes az elképzelésem? A táp azonos. A hozzászólás módosítva: Dec 15, 2013
Sok kihegyezett profi program assemly-ben íródik. A Microchip is csak a 18-as családtól felfelé támogatja a C-t, alatta gyakorlatilag az összes adatlap assembly-re épül. A 16-os család utasításkészlete ha jól emlékszem 35 utasítás mindössze, elég sok az infó róla a neten. Egyszóval, szerintem igen érdemes ezzel kezdeni a tanulást (én is ezt teszem).
Olvastam valahol egy jópofa dolgot erről: "Amit nem lehet Pascal-ban megírni, azt C/C++-ban meg lehet. Amit nem lehet C/C++-ban megírni, azt Assembly-ben meg lehet. Amit nem lehet Assembly-ben megírni, az nem lehet megírni!" A hozzászólás módosítva: Dec 15, 2013
Igen!
Ezer köszönet a tippért. Működött a dolog.
![]()
Üdv!
Egy 18F1320-as PIC-ből szertnék kicsikarni hardveresen SPI-t (csak TX) a benne lévő EUSART segítségével, de nagyon nem akar össze jönni a "Synchronous Master Mode" beállítása. Egy kijelzőnek küldené a parancsokat/adatokat, ami egy régebbi PIC MSSP moduljával gond nélkül működött is. A következőket állítottam be:
Ezután a TXREG feltöltését követően ki kellene, hogy menjen az adat, de akár hogy bűvölöm a kijelző nem akar normálisan működni. Vagy nem jelenik meg rajta semmi, vagy a tesztmód jön csak be. A fenti beállításokkal már a tesztmód sem hajlandó működni. Egyáltalán lehet ezzel az EUSART-al normális SPI-t összehozni?
Azt ne felejtsd el, hogy az UART a legkisebb, az SPI a legnagyobb helyiértékű bittel kezdi a mondandóját, ezért fel kell cserélni a biteket.
Szia!
Ebben is csak olyan EUSART van, mint a többiben. Sok gond nem lehet vele. Az ember állandóan elfelejti az ADCON1-ben digitálisra állítania portokat (5:6 bit) és azt, hogy az EUSART az SPI-hez képest fordítva küldi a bájtot. Nem 7-től 0-ig, hanem 0-tól 7-ig.
Kösz!
De egy "AllDigital" utasítással kezdem a programot, ami minden analóg rész kikapcsol. A bitek irányát pedig forgattam már ide is, oda is... Szoftveresen most próbáltam ki, azzal tök jól működik... Annyit vettem észre, hogy szoftveresen a DATA és a CLK vonalak nyugalmi szintje 0. EUSART-al viszont a DATA nyugalmi szintje 1, a CLK polaritását azt tudom hardverből invertálni, de a DATA vonalat, már nem igazán. Megpróbálom negálni az adatot, hátha az lesz a megoldás.
Most egy tranyóval invertáltam a jelet és volt is egy kis félig zagyva kiírás, de többször nem sikerült előidéznem. Lehet megmaradok a szoftveres megoldásnál...
No igen, az EUSART logikája szerint 1 a pihenő szint. De a bitek nincsenek invertálva. Mivel legtöbbször asszinkron módban használjuk, arra készül, hogy start bittel indul, ami ugye 0. A szinkron módot meg csak úgy ráhúzták a rendszerre.
Az lehet a gond, hogy az SPI busznál a clock kicsit később indul, mint az adat, Az EUSART-nál meg szinkronban van. Nem tudom, hogy az lcd-d milyen órajelet kér, de ha a szokásos Mode 0,0-t, akkor ahhoz fordítsd meg az órajelet. Így az órajel a data bit közepén produkál felfutó élt és az SPI slave mintát tud venni. Az SPI-nél igazából csak annyi a lényeg, hogy legyen egy trigger valahol a data közepén. Ennél a trükknél lényegtelen, hogy milyen szinten volt nyugalomban a Tx. Nem biztos, hogy tuti megoldás (most találtam ki ![]()
Ott bukhat meg az elképzelés, ha a slave órajelnek veszi azt, amikor az EUSART inicializál. Ezt is ki lehetne kerülni CS trükközéssel, de lehet, hogy tényleg jobban jársz a szoftveres módszerrel.
Ezt még kipróbálom, talán jó lesz. A kijelző az igazából egy Samsung 16x1-es VFD, de ez lényegtelen. Nem igazán SPI a protokolja, de eddig azzal működött minden gond nélkül.
A CLK magas szintről indul és a felfutó élre írja be az adatot.
Volt egy sanda előérzetem mikor ezt a PIC-et raktam be a megrendelőbe, hogy ezzel még lesz bajom. De hát akkor még a fene tudta, volt egy kis szünet ami alatt a fiókban pihent...
A hozzászólás módosítva: Dec 16, 2013
|
Bejelentkezés
Hirdetés |