Fórum témák
» Több friss téma |
A do - while() ciklussal ne foglalkozz különösebben, az ebben a formában felesleges mivel nincs megadva feltétel vagy is 1-es végteleníti azt. (amúgy ez egy végén tesztelős ciklus, a do{} a while ciklus eleje és ami a while() zárójelei közt van az a feltétel, tehát itt egyszer mindenképp lefut a ciklus és a végén kiértékel majd, ha igaz akkor ismétlődik..."hátul tesztelős")
A mask.c fájlod pedig a 7 szegmenses kijelződön megjelenő számok bitjeit tárolja. Tehát, ha kiküldesz egy 1-est akkor valójában a 0x3f parancsot küldöd ki amely aztán a a kijelző megfelelő szegmenseit fogja kigyújtani, hogy a végén te egy 1-est lás rajta. Így röviden ennyi is lenne a dolog.
Mutass egy adatlapot és lehet tudok segíteni.. De ahogy írod lehet ez is csak egy shift regiszter aminek a kimenetei erősebbek az átlagnál. (bár nem vagyok benne biztos)
Ha igazam van akkor egy egészen egyszerű módon, de lehet még SPI-vel is tudsz kiküldeni adatot és akkor már tényleg csak a shiftelést esetleg a multiplexálást kellene leprogramoznod.
Képek után csatoltam a 2131 adatlapját, de csatolom újra. A 16f628A-hoz szeretném házasítani, amit korábban csináltunk.
Kösz a segítséget. Arra lennék még kiváncsi, hogy a 33. sorban levő digit = i % 10u; és a 35 sorban levő digit = (char)(i / 10u) % 10u; részek mit jelentenek pontosan?Ezek függvények akarnak lenni? Valamint a switch utasítás hogyan épül fel?
Sziasztok!
Szeretnék elkezdeni foglalkozni PIC programozással. A segítségeteket szeretném kérni, hogy milyen "bibliát", programozó áramkört, programot, stb.... ajánlotok ahhoz, hogy el tudjam kezdeni az alapoktól. Előre is köszönöm
Húú kezdem azzal ami biztos:
A switch egy elágazás. Fogd fel úgy mint egy if - else ágat és megérted. A switch utasítás kap egy változót ami num névre hallgat. A num-ban van benne egy szám ami jelen állásban 0 és 9 közt lehet, beleértve termesztésen a 0-át és a 9-et is. A case maga a feltétel kezelő, ha num változóban a nulla van akkor a "case : 0" feltétel elágazás igaz és visszatér 0x3F-el... és így tovább.. Amúgy hiányzik belőle az utolsó hiba kezelés ami a default lenne, de ebbe ne menjünk most bele mert nincs benne és csak összezavarlak. A másik kérdésedre nem biztos, hogy jó lesz a válaszom, de remélem olvassák többen is és kijavítanak, ha nem jól tudom. Kiemelted a 35. sort:
A digit egy globálisan létrehozott előjel nélküli 16bit-es változó. Ebbe a változóba töltődik bele az egyenlőség jobb oldalán kiértékelődő művelet vagy műveletek eredménye. A (char) maga egy típus módosító utasítás, ami mögötte van annak a kiértékelődés végén char típusa lesz. A 10 után lévő u betű ha jól tudom szintén egy típus módosító vagy legalább is olyasmi amivel az aktuális adat típusára utalunk. (ezt egyszer már végig olvastam, de soha nem használtam még így nem tudom) Azt nem tudom, hogy ez csak a fordítónak szól vagy a kiértékelődésben is szerepet játszik...passz.. A hozzászólás módosítva: Jan 13, 2015
Az adatlapból számomra az derül ki, hogy ez egy 16bit-es shift regiszter.
Nem különösebben nagy terhelésre van szóval nem egy nagy szám. A Pulse diagramjából pedig az derül ki, hogy szinte ugyan az mint a 74HC595 csak, ha jól látom az enable fórdítva működik mint amihez hosszá szoktunk. Mivel 16bites egyszerre 2 kijelzőt tudsz vele meghajtani, de hogy a másik kettő hogy van bekötve arról fingom sincs. Ha lenne egy kapcsolási rajz akkor abból könnyebben ki lehetne találni miképpen kell megírni a programot. Ha a 2 első kijelzőről ugyan azok a vezetékek mennek a másikra akkor valaminek kell még ott lennie, tranzisztornak vagy valaminek ami tud a 2x2 kijelző közt váltani. Gondolom én.. Amúgy nézd meg a szimulátorban nincs e véletlen meg ez az IC, ha nincs akkor válassz egy 16bit-es stiftregisztert aminek hasonló vagy pont ilyen a lábkiosztása. De ha nem is egyezik akkor is ki lehet próbálni mert élesben csak a lábakra beállított definíciókat kell megváltoztatnod és kompatibilis lesz... A hozzászólás módosítva: Jan 13, 2015
Van rajta két tranzisztor, ha jól emlékszem. Holnap este visszacsipogtatom és csinálok róla rajzot.
Tényleg, most látom csak, hogy van ott két tranyó..
Gondolom amikor túlcsordul vagy is shiftel a chip, akkor a második 2-es kijelzőre fog írni mert az egyik tranzisztor nyitni fog a másik zárni.. Gondolom, így elsőre ezt én innen 2oldalas a nyák, így T2-őt nem látom hová van bekötve... A hozzászólás módosítva: Jan 13, 2015
Igen, így működhet. Akkor ha lesz hozzá rajzom, tudnál segíteni, hogy álljak neki a kódnak?
Persze, még videót is találtam anno róla, hogy miképpen kell értelmezni a shift regiszter működését.
Ha meg megérted, simán meg is írod De ha nem akkor is itt vagyunk mi és segítünk (a legjobb helyen jársz) A hozzászólás módosítva: Jan 13, 2015
Rendesen beállítottam az UART-ot, meg a fleg biteket is ellenőrzöm, csak nem akartam az egész programot berakni.
A bajom az, hogy a vektor-ba/ból olvasás nem működik. Csak akkor tisztulnak ki a fleg bitek/ kerülnek be/ki az értékek a megfelelő UART regiszeterekbe/ből ha sima változóba olvasok be/-ból írok ki. Ez miért van?
Látom még a 33.-as sort is kiemelted, - bocs ezen átsiklottam - gondolom a % jel nem tiszta, hogy mit csinál.
Ez gyakorlatilag egy 10-es osztást csinál. Addig osztja 10-el i értékét ameddig már a maradék 10-el nem osztható és az a maradék kerül be a digit változóba. Egy példa rá:
Eredménye 3 lesz.. A hozzászólás módosítva: Jan 13, 2015
Először azt döntsd el, hogy milyen nyelven szeretnél programozni. Ha teljesen kezdő vagy akkor az assemblyt ajánlom, ahhoz tudok mutatni pár dolgot. Programozó pickit2 vagy 3, mással nem nagyon érdemes foglalkozni ha komolyan gondolod.
Én összehasonlítanám disassambly listáját a két verziónak. Abból ki kell derülnie az igazságnak.
Hogyan tudom behozni a disassambly listát.
Mikor próbálom megnyitni ezt a hibaüzenetet kapom: Idézet: „Unable to generate the disassembly listing file. Please make sure that you have built the project with symbol information.”
Hello! Teljesen kezdő vagyok a témában. Honnan tudom beszerezni a programot és a kit-et? Mi kül. a 2 kit között? Köszönöm a segítséged!
PiCkit 3 az újabb kiadás, szóval drágább, de cserébe tud programozni minden microchip kontrollert, míg a PICkit 2 csak a régebbi típusúakkal képes elboldogulni.
A programot a Microchip honlapjáról, ingyenesen, tudod letölteni. A PICkit 3-ra meg keress rá...
Idézet: „Arra lennék még kiváncsi, hogy a 33. sorban levő digit = i % 10u; és a 35 sorban levő digit = (char)(i / 10u) % 10u; részek mit jelentenek pontosan?” A C nyelvben a százalékjel a modulus operátor, vagyis az osztási maradékot számítja ki. Ennek megfelelően: digit = i % 10u; <== Ez az i-ben tárolt szám 10-zel történő osztásának maradéka (vagyis az egyesek helyiértékén álló számjegyet állítja elő). digit = (char)(i / 10u) % 10u; <== Az i=99-ig menő ciklus esetében ez egy kicsit túlbonyolított formula, mivel az i/10u egészosztás eredménye önmagában véve is a tízesek helyiértékén álló számjegyet adja, így a "%10u" osztási maradékképzés fölösleges. Erre csak akkor van szükség, ha i értéke 99-nél nagyobb is lehet... Végeredményben tehát a hátulról számított második számjegyet különítjük el: 1. Az i/10u egészosztás 10-es számrendszerben gondolkodva eggyel jobbra tolja a számjegyeket, így a tízesek az egyesek helyére kerülnek. Ha i csak 99-ig mehet, akkor ezzel készen is vagyunk. 2. Ha i 99-et meghaladó szám, akkor az utolsó helyre került tízesek ugyanúgy választhatjuk le, mint az előbb az egyeseket (a %10u művelettel). Megjegyzés: a 10u valójában 10-et jelent, de jelezzük a fordítónak, hogy ezt előjel nélküli mennyiségként kezelje.
Pickit 2-ből vannak utánépíthető klónok amik használhatóak, de anyagilag nem jársz jobban vele mintha megvennéd, de az építés öröme megmarad ha az számít. De abban is van egy PIC, tehát azt is fel kell tudni programozni valahogy. Két programra lesz szükséged első körben: Mplab és a Pckit saját szoftvere. Mindkettő letölthető a Microchip honlapjáról, keress rá.
Idézet: Ami jelen peldaban szinten felesleges, mivel az i valtozo elojel nelkuli, es a C nyelv szabalyai szerint, ha egy muveletben elojeles es elojel nelkuli adatok szerepelnek, akkor az elojeles szamot a fordito automatikusan elojel nelkulive alakitja. „Megjegyzés: a 10u valójában 10-et jelent, de jelezzük a fordítónak, hogy ezt előjel nélküli mennyiségként kezelje.”
Ezt én nem tudom eldönteni. Nincs rajzom a panelről, csak a fényképet néztem. Vissza kellene fejteni a kapcsolást.
Nos a működése:
Az ENABLE lábnak magasan kell lennie amikor beirod az adatokat a shift regiszterbe. A BITek az órajel H->L, azaz lefutó élére íródnak be. Ha benn vannak az adatok akkor z ENABLE lábat alacsonyra kell húzni, ekkor kerülnek a shift regiszterből a bufferbe és a kijelzőre. Ennyi. Ha így sem megy majd valamelyikünk egy rutint is mellékel. Emellett pedig még le kell programozni a multiplexelést is a 4 kijelző miatt. A hozzászólás módosítva: Jan 14, 2015
Közben megtaláltam a videót.
Ennek köszönhetően értettem meg a működését és írtam meg a függvényt. Hogyan működik a shift regiszter Annyi, hogy az ENABLE a te kapcsolásodon lévő IC-nél fordított, de ez most ne mozgasson... A hozzászólás módosítva: Jan 14, 2015
Köszönöm mindkettőtöknek. A linkelt videó és usane leírása alapján értem. Elsőre megpróbálom megcsinálom két kijelzőre, hogy működjön, a multiplexelést majd utána a másik két kijelző miatt..
Inkább a Hp41C által javasolt. Nem sokkal drágább, de legalább eredeti. Olyan programozó vacakra meg úgy sincs szükség. Kell egy jó minőségű breadboard meg egy vezetékkészlet és kész.
Ha az ENABLE-t a 74HC595 STCP lábához hasonlítod akkor igen, fordítva, de ha az OE lábához akkor ott is alacsony szinten engedi ki. Az ő vezérlője kicsit egyszerűbb, ugyanaz a láb kezeli buffer-t és az OUTPUT-ot. Ezen kívül az adat beírása is fordított, az órajel lefutó és nem pedig a felfutó élére íródik be nála.
|
Bejelentkezés
Hirdetés |