Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Remélem nem veszed rossz néven, ha kritával illetném a programod TransmittCAN macro mivoltát.
Ezt annyiszor fordítja bele a fordító a forrásba, ahányszor kiadod. Ez szubrutinnal sokkal hatékonyabban lehet megvalósítani(legalább is a programterület szempontjából). A változók értékátadása sem gond, vagy pointer szerű indirekt címzést is lehet használni.
Én ki fogom próbálni, és mégegyszer köszönöm!
Idézet: „Biztos vagy benne?” Biztos meg abban sem lehetek, hogy a mumiak meghaltak... Az, hogy otezer eve mozdulatlanok meg nem jelent semmit... Mellekeltem az ASM30 helpjet ezzel kapcsolatban - ja, es nekem nem fordul, probaltam permutalni, hogy hova irom a "Gomb"-ot, hogy kettos pont vagy sem, de nekem nem jott ossze. Idézet: „Szerintem a .macro is csak egy egyszerű szöveg behelyettesítés” En is ezt mondtam csak rosszul fogalmaztam ugy latszik Szoval a kulonbseg a #define es a .macro kozt, hogy a #define akarhol is va a szoveg file-odban ode helyettesitodik be az ami abban szerepel, mig a .macro a nyelvi elemek resze es utasitas helyen szerepelhet a makro neve - tehat egy utasitas parametere mar .macro nem lehet.
Múmiák! Jó hasonlat!
Idézet: „- ja, es nekem nem fordul, probaltam permutalni, hogy hova irom a "Gomb"-ot, hogy kettos pont vagy sem, de nekem nem jott ossze.” Ez nem jó hír, de reménykedem.... Persze nem fogok vonat elé futni, ha nem lehet a régi jó bevált módon kódolni, csak meglesz a véleményem megint! Sajnos egyre többször kell ezt éreznem... (Mert ugyebár, mi a rákfenéért kell megváltoztatni ami bevállt!?) .macro és #DEFINE kérdés lecsekkolva! Köszi a csatolmányt! Én is így értelmeztem hogy az .equ elöl van. Hát nemtudom!
Hát nagyon nem vágom mé nem fordul... Nekem bezzeg igen...
Dobjál már ide egy képernyő mentést lécci. Mi a hibaüzenet? Közben még mindig AD konverzió. Most akkor mennyi referencia feszt használjak? A matekolós mV-mA része ok. A lényeg hogy fogyasztónként kiszámolt áramérzékelő ellenállásokkal dolgozom, és autó aksiról lévén szó még véletlenül sem akarok az ellenálláson 0,3,0,4V feszültség esésénél többet.
Várj, mert nem nálam nem fordult, hanem trudnainál(az én nickemre válaszoltál)!
Nade közben hazaértem és próba. A deklarálás fordul, de nem lehet használni! Hibaüzi:
Nem látok már olyan verziót, ami támogatná amit a régi #DEFINE igen. Microchip, MIÉRT???! (bocs, a hisztiért, nem szoktam, de az ilyesmi kiakaszt!) De hátha lesz még valami ötletetek!? A/D: 2,7V-nál nem ajánl kisebbet a gyár. Ha ekkor a 0,4V túl rossz felbontású lenne, akkor használj microchip-es OPA-t erősíteni. Nagyon jó kis IC-k! Egytáposak(5V), és tápig kivezérelhetőek. Majdnem olyanok, mint egy ideális OPA! (MCP6001)
Közben "rájöttem", hogy miért fordul, és miért nem lehet használni.
Tehát a forma mégegyszer:
Azért fordul le, mert a fordító a Gomb: szöveget egy címkének veszi. Ezután pedig jön a .equ, és utána a symbol, ami jelen esetben a PORTE, ami nem írja felül a fordítónak includált PORTE globális szimbólumot, mert csak úgy lehet használni, hogy #PORTE és az értéke nem lesz más, mint a #2. Hát ez van... trudnai, neked igazad volt, mikor említetted, hogy csak szám lehet az .equ sor végén. Ha szöveget írok, akkor a Idézet: hibát kapom. Ezért se tudja megenni az összetet formulát, mert nem szövegként akarja értelmezni a szimbólumot. pl. az #RB0-t egyszerűen #0-nak veszi, mivel globális állandó, és a vesszőtől kiakad. „undefined reference”
Mellekeltem a forrast listajat (lst file, hogy az eredeti line number jo legyen). ERR pedig amit kapok uzeneteket mikor megprobalom forditani.
A kep: A language toolsuit-nel lehet atverest csinalni, ha a BAT file-ba beleheckeli az ember, hogy hivja meg a C preprocesszort (pl. gnu cpp). Ugyis atnevezi .ASM-nek, szoval belefer a dologba. Akar lehet az M4-t is beletenni es akkor minden makro igenyeket kielegiti a dolog - lehet kesziteni sajat macro parsert
Ha a header file-ban a -csak példa tuti hülyeség - 0x0023 regisztert el lehet nevezni PORTB-nek, és még használni is lehet úgy hogy utána írod, hogy #2 akkor tuti lehet valahogy a PORTB-t és a #2-t közösíteni hogy "Play Gomb" legyen belőle, és
btfss Play_Gomb AD: Őszinte leszek, lassan drágább a leves mint 5 adag hús. Van egy reflektorom. Van hozzá MOSFET. Aztán áramérzékelő ellenállás. Most már az ellenállással párhuzamosan egy 3.3V Zener, hogy egy MOSFET - Refi zárlat ne süsse meg a PIC-et. Ezek mellett biztosítom a hővédelmet is. Most még tegyek be egy műveleti erősítőt? Na ne.... Ha mondjuk 3.072V a referencia milivoltban számolva szorzom hárommal, osztom négyel. 0,75mV felbontás egy olyan cuccban ahol Igazából az érdekel hogy szakadt, vagy zárlatos a fogyasztó kör, és a többi az már csak cukor. Szóval nem fogok meghalni ha kicsit rosszabb a felbontás. Idézet: „Ha ekkor a 0,4V túl rossz felbontású lenne, akkor” Tele van feltételes móddal! A Play_Gomb példádat egyáltalán nem értem. Ki tudnád fejteni mire is gondolsz pontosan?
Sziasztok!
Szeretnék csinálni néhány státusz bájtot, melyekben minden bit mást jelentene. Mint pl a PIC INTCON regiszterében. Inkább nem pazarolnék egész bájtokat. A Microchip typedefs.h-jában találtam ilyet:
Létrehozva egy BYTE típusú a nevű változót, hozzáférek a bitjeihez így: a.b0 = 0; (legalábbis lefordul, még nem próbáltam ki) Biztos ami biztos, szeretném tudni, hogyan kezelhetem az a változót egy egész bájtként? Az a = 0; kifejezésre hibát jelezett a fordító. A típusdeklarációban a unsigned b0:1; és a többi sor az azt jelenti, hogy 1 lesz a bitek alapértelmezett értéke?
lol, majd kiszúrta szemem
köszi szépen!
Sziasztok!
A következőben kérném a segítségeteket. Az ipodomhoz építek távirányítót (nem vezeték nélküli), de igazából a kérdés szempontjából ez talán lényegtelen is. Az ipod vezérlését egy p16f688 végzi soros porton keresztül. Mivel a tápellátását a cuccnak az ipodból veszem, ezért lényeges a fogyasztás. Ezért a pic csak akkor dolgozik,ha kell, ha nem akkor alvó állapotban van így elvileg uA az áram felvétele, DE mivel sleep alatt megtartja a kimenetek sleep elötti állapotát ezért az sleep alatt Tx láb +5V. A +5V miatt viszont a Tx lábon sleep alatt mA-ek folynak el ami felesleges. Tudna nekem erre valaki mondani egy frappáns megoldást? A fejlesztést CCS -vel csinálom és igazából assemblyben még talán menne is, de a C -t most kezdtem. Az alap ötletem az lenne, hogy USART kikapcs, adott pin LOW, és aztán sleep, majd sleep után minden vissza. Vagy esetleg a két ezköz közöt a fizikai kapcsolatban van probléma? Gondolok itt áramkorlátozó ellenállás hiányra stb. Boccs, a hosszú szövegért de próbáltam érthetően körül írni a problémát!
Attól, hogy magas szintű a TX láb, miért kellene ott áramnak folynia? Másrészről ha leveszed alacsony szintre, akkor azzal egy start bitet indítasz, ami meg nemkívánatos lenne.
Azzal tisztában vagyok, hogy az startbitet indít és az nem gond. Azért folyik Tx lábon el áram mert az az ipod Rx lábára csatlakozik. Azt viszont nem tudom,hogy ez normális működés e, de ebben biztos vagyok mert megmértem.
Nézd meg az adatlapban, hogy a SENDB bittel mit lehet elérni, szerintem ha az alvás előtt megfelelő időben elindítasz egy break-et vele, akkor az alvás alatt 0 marad a TX. Nem szép megoldás, de lehet, hogy célravezető.
Hát bevallom ami oda van írva azt értem,de fingom sincs mit jelent a gyakorlatban
Én úgy értelmezem, hogy ha be van állítva a SENDB, akkor a következő karakter kiküldésekor a karakter helyett break-et küld a soros vonalra. A break meg szóhossztól és framing bitektől függő hosszúságú, de folyamatos 0 szintet jelent.
na de míg a soros vonalon a pic küld valamit el lehet küldeni aludni? szerintem a sleep csak az adott bájt elküldése után történik meg
Ha berakod a portot a sleep idejere tristate-be az nem jo? Akkor lebeg a kimenet, es az ipod dolga, hogy a lebego allapotot lekezelje, de ezt ok biztosan megoldottak hisz nincs minden pillanatban kulso eszkoz racsatlakoztatva. Es ha ezt ok lekezelik pl egy lehuzo ellenallassal, akkor keveset fogyaszt a pc, ha nem kezelik le, akkor pedig sokat de lehet ugy meg AD allapotba lehetne lokni es akkor megsem fogyasztana annyit mindtha digitalis bemeneten lennel - jol elbeszelgetek magammal
Azt nem tudom, a c mit csinál, de hogy a TXREG írása után kiadhatod a SLEEP-et, az biztos. Ha nem várod meg, hogy kisorjázzanak a bitek, akkor "belealszik".
Szerintem az a baj ezzel, hogy ahhoz az UART modult kellene lekapcsolni, hogy a TX lábhoz más funkciót rendelhess. De persze ezt ki kellene próbálni.
igen igen! erre gondoltam én is ahogy fentebb írtam csak nem tudom CCS ben hogy lehet kikapcsolni
Assemblerben hogy oldanád meg? Itt is úgy kell. SPEN bit...
pontosan így! próbálkoztam vele de nem ment de akkor beillesztem hogy hogy próbáltam mert mondom CCsben még kezdő
Tele van feltételes móddal = lefekvés előtt írtam, kezdett kiütni a Zirtec.
A Play_Gomb példát arra értettem hogy te egy adott portlábat - ami tulajdonképpen két változó mert maga a port, és annak egyik lába pl a kettes - egyetlen szüveggel szeretnél helyettesíteni úgy hogy közben mindenféle asm parancsot tudjál végrehajtani vele. Pl: bset PlayGomb ;PlayGomb (Portb,#2) High
Sajnos úgy néz ki, hogy ezt az ASM30-ban nem támogatja semmi.
Én azt hittem, hogy valami más ötlet jutott az eszedbe az INC fájlokból kiindulva...
Persze könnyen dumálok, de hidd el nem nagy veszteség.
Paraméterezett makrókat használva még hatékonyabb is lehetsz mint eccerűen csak azzal hogy egy két Port lábat nevén nevezel. Ezen ne fájdítsd a fejed... Mplab-al kapcsolatban érdekelne valami. Valaki itt ezen a fórumon említette hogy futtatja az Mplab-ot Linux alatt... Érdekelne a megoldás... Egyébként nagyon uncsi hogy most már csak az Mplab miatt kell Windows-t használni... Bezzeg Atmel megcsinálta az AVRStudio-t linuxra. Microchip miért nem tudja?
Sziasztok!
Még mindig le vagyok sajnos maradva az FT232RL-es adatátvitellel. Most viszont lenne ötletem, hogy mi lehet a baj. Amikor ciklusban kiküldök a PC-re egy csomó adatot, nem mindig ugyanaz a karakter érkezik. Ennek szerintem az lehet az oka, hogy a Baud Rate-t nem az FT232-nek megfelelően állítom be. A Pic-nél 9600-as baudot állítottam be, de nem teljesen tiszta. hogy az FT232-nek mekkora az órajele és az mennyire van szinkronban az általam beállítottal ??? OpenUSART (USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 129); //9600baud Tudnátok benne segíteni? Az Ft232 adatlapján nem igazán tudtam eligazodni. Előre is köszi! Üdv |
Bejelentkezés
Hirdetés |