Fórum témák
» Több friss téma |
Köszönöm, nektek. Majd írok az eredményekről.
Sziasztok!
Van egy "Low pin count USB development board" -om, benne egy PIC18F14K50. A vele adott dokumentumban található mintapéldák jól működnek. Szeretném az A/D konverzió eredményét néhány másodpercenként egy excel állományba küldeni az USB porton, mintha az billentyűzetről érkezne. Tehát semmi soros port, merthogy minek az ide. Szerintem az USB portnak ez lenne az egyik leghasználhatóbb funkciója. Tudna valaki adni ehhez egy kis útbaigazítást?
Nézd meg icsreny honlapját!
A Microchip Application Libararies (MAL) letöltése és kibontása után találsz egy csomó demó programok. Ezek közül az USB Device - HID Keyboard kell neked, ebbe kell belemódosítani, hogy azt küldje, amit akarsz.
Hali!
Nem akarja elfogadni a C18 a "TBLRD+*" utasítást, csak ha simán azt írom be hogy "TBLRD" még a "TBLRD*"-t se fogadja el. Természetesen asm blokkok közé írtam:
Azért lenne jó ha elfoagdná, mert akkor nem kell a TBLPTR regiszterhármast egyesével növelni...
Az nem jó, hogy a fordítóra bízod a dolgot, és simán csak rom-ban tárolt tömböt használsz?
Mellesleg a TBLPTR nem olyan, hogy ha az alsót növeled, akkor túlcsorduláskor növeli a többit is? Nem néztem utána, csak tippelem, hogy ilyen lehet.
A tömböt így deklaráltam, tehát a programmemóriában van:
Egyébként egy asm kódrészletet szúrtam be, amiben eredetileg TBLRRD+*-el olvasok az org 0x1000-es címtől kezdődően. Nagy nehezen sikerült kideríteni hogy a C hova rakja ezt a tömböt a programmemóriában Azért akartam a TBLRD+*-ot használni, mert -bár lehet a fordító is ezt használja- ez a leggyorsabb hozzáférés a memóriáhozm illetve nem kell az assembly részben átírni semmit. Ha a rom-mal a programmemóriában helyezek el tömböt, akkor ugyanúgy lehet rá hivatkozni (pl.: ADATTABLA[5]) mint ha az adatmemóriában lenne?
Igen, ugyanúgy lehet. Nézd meg, hogy mire fordítja a fordító a kódodat, és csak akkor állj neki tovább reszelni rajta, ha nem elég optimális a fordított kód.
Köszi a választ!
Akkor használom simán tömbként, viszont felmerül akkor még egy probléma. Meg kell szakítani az assembly részt, és közbe kell rakni a C részt:
Itt kiabál a fordító, hogy Idézet: , ami gondolom azért van mert nem tudja hol van az "UJSOR" label, mert meg lett szakítva az assembly rész. Jól gondolom? „Error [1111] undefined label 'F' in 'main'”
Ez a hibaüzenet valami más miatt van. Lehet túl hosszú az assembly rész? (kb. 34 soros)
Szerk.: megvan. Nem tetszik neki a SWAPF utasítás, ez a nyomi C fordító két változót akar ezzel az utasítással megcserélni, nem pedig egy bájtban lévő 2 nibblét
Pontosan miért is vannak ezek az asm részek beszúrva? Azt az UJSOR ... GOTO UJSOR dolgot C-ben is meg lehet ám csinálni!
Azért hogy ne kelljen átírni C-re
De úgy látom mégis csak az lesz belőle.
Sziasztok!
Egy PIC16F1826-ot szeretnék felprogramozni. A beégetendő programot az MPLAB-ban írtam meg, HITECH fordítóval fordítottam. Programozó eszközt nem vettem, watt párhuzamos port alapú programozóját építettem (watt-féle LPT programozó v4.0). Ennél a Vpp 12V. Azt szeretném megkérdezni, hogy az MPLAB-ban beállítható konfigurációs biteknél nagy- vagy kisfeszültségű programozási módot kell beállítani? Ráadásul a uC adatlapjában (PIC16F1826) az van írva, hogy a Vpp lábán 8...9V feszültség lehet (absz. max. a 9V). Akkor ez így most nem fog működni (mármint az égetés)? Tönkretenném vele a uC-t? Az adatlapban a nagyfeszültségű programozási módnál van egy ábra, hogy valami kiegészítő áramkört kell csinálni ICD2-höz. Esetleg azt kéne megépíteni? Sajnos nem tudok rájönni. Válaszaitokat előre is köszönöm! üdv, Kiwy
12V-tal ne is próbáld programozni! Az adatlapban lévő áramkör alkatrészei (LM431) beszerezhetőek (pl. RET, TO92 vagy SO8 tokozással is, kb. 70 Ft áron) vagy egy zénerrel és egy ellenállással is megoldható. Én az utóbbit alkalmaztam.
Ez a kérdés egyébként nem passzol a topikba!
Köszi a választ! Bocs, hogy ide írtam, de nem találtam jobb topikot a kérdésemnek. Ha esetleg ajánlanál egy megfelelőt, azt megköszönném. Esetleg "PIC - Miértek, hogyanok..."? És az ellenállást meg a Zenert hogy kötöd be (a képből nem nagyon látszik)? És milyen alkatrészeket lehet betenni (ellenállásérték, Zener-típus)? Előre is köszi!
Hát ez csak egy Zener-diódás feszültségstabilizátor alapkapcsolás (illik ismerni...)
Már régóta akarok olyat megvalósítani, hogy egy saját portfélét létrehozni, különböző portok bitjeivel.
Pl.: a "PORTSAJATbits.pin1" legyen a "LATAbits.LATA0"-val egyenlő, a "PORTSAJAT.pin6" legyen a LATCbits.LATC1" megfelelője.
De inkább adj neki normális nevet, mint pl. Gomb1, vagy LED2, vagy ami beszédesebb. pl.
Hopsz a lényeget nem is írtam. Vagyis a PORTSAJAT 8 bites legyen, és lehessen neki értéket adni, aminek megfelelően állnak be a különböző portok.
Mi értelme ennek?
Egyébként az unionnal lehet ilyet csinálni. Én még PORT-ra nem használtam, csak sima regiszterre, de át lehet ültetni szerintem.
Használata:
Érdemes lenne belenézni a header fájlba, hogyan deklarálják a PORT-okat!
Így oldják meg:
Szerintem elég lehet magát a structúrát leírni újra, csak más hivatkozásnevet kell legalul megadni a LATBbits helyett. Idézet: „PORTSAJAT 8 bites legyen, és lehessen neki értéket adni, aminek megfelelően állnak be a különböző portok”
De ez csak RB-re vonatkozik. :hide:
Köszi az eddigieket, megpróbálok már valami összeállítani. :yes:
Tegyük fel, van egy eszközünk, amivel kommunikál a PIC. A kommunikációs csatorna 8 bites (mint pl.: az LPT adat bitei). De nekünk nincs a PIC-en egy teljes szabad portunk, és egyszerre szeretnénk egy byte-ot kiküldeni az eszköznek.
Szerk.: tudom hogy maszkolással meg lehet oldani, de kíváncsi vagyok, hogy máshogy is meg lehet-e. Most nézem a portdefiníciós header fájlt, és abból merítek ihletet.
Valamilyen konverzió szükséges a programban ilyen esetekben, legyen az egy maszk előkészítése, vagy a portok bitjeinek egyenkénti beállítása az adat szerint. Hogy ezt egy makróval oldod meg, vagy egy szubrutinnal, majdnem mindegy, bár a makró mindenhová beül ahová beírod a rutin viszont lehet lassabb. Az ilyen megoldásoknál azt is figyelembe kell venni, hogy az adat ne kerülhet ki egyidőben a célportra, hanem legkevesebb annyi lépésben, ahány portra oszlik az adat. Ezért kerülni kell az ilyen megoldásokat, ha sebességkritikus a vezérlés. Lassabb eszközök esetén, mint pl. az LCD, 2..3 portra el lehet osztani, bár a 4bites vezérlési mód majdnem mindig elfér egy port egy részén.
Több portot nem fogsz tudni egy struktúrába fogni. Idézet: „Több portot nem fogsz tudni egy struktúrába fogni.” Hogy én mindig megtalálom a prog. nyelvek határait... Akkor marad a maszkolás. Köszi hogy írtál!
Ez igazából fizikai korlát.
A maszkolást lehet makróval, vagy szubrutinnal. Használata így is kényelmes lehet. Idézet: Ez fontos szempont, amit felvetettél. Meg kell vizsgálni a kapcsolást abból a szempontból, hogy okoz-e működési zavart az, hogyha az adatbitek nem egyidőben jelennek meg. Az audio DAC-nál például kellemetlen impulzusokat okozhat az adatbitek nem egyidejű beállása (glitch). Az LCD-nél nincs gond, mert ott az adatbeírás egy külön vezérlőimpulzus hatására történik, s azt akkor adod ki, amikor az adatbitek mindegyike beállt már.„Az ilyen megoldásoknál azt is figyelembe kell venni, hogy az adat ne kerülhet ki egyidőben a célportra, hanem legkevesebb annyi lépésben, ahány portra oszlik az adat. Ezért kerülni kell az ilyen megoldásokat, ha sebességkritikus a vezérlés.” Kritikus esetben egy külső adatregisztert kell beépíteni az áramkörbe. Ez lehet soros-párhuzamos átalakító is, mint pl. a Microchip I2C vagy SPI portbővítő IC-jei. |
Bejelentkezés
Hirdetés |