Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
A változtatáshoz: Két része van. Hardware, és Software.
A Hardware talán az eccerűbb. Lábról lábra átnézed hogy ami az F84-en van az vajon jó e a 628-ra. Persze már itt tudnod kell hogy mondjuk az RA0/AN0 láb a program szerint RA0 vagy éppen AN0. A szoftveres része meg annyi hogy a progi elején átírod a .include "p16f84.inc" file-t .include "p16f628-ra. Lehet hogy nem .include hanem #include, nem tudom mert a PIC24 miatt az én fejemben .include van, de ez már részletkérdés. Ha ezzel megvagy akkor kinyomtatod az eredeti programot és meg kell nézned az elején a változók dekralálásánál azt hogy mondjuk: Kicsipuha equ #0x003A változó ami az f84-ben jó helyen van mert az elvégre egy kipróbált tesztelt progi, vajon az f628-ban nem a mondjuk az ADCON2 regiszter. Elvileg ilyen egy családon belül nem fordulhat elő, mert akkor oda lenne a kód kompatibilitás. Ehhez az kell hogy kinyomtatod mindkét proci SFR regiszter térképét és összehasonlítás. Mindezek mellett mondom, ha nem tudsz programozni nem egy "átírással" kellene kezdened, ha az alapfogalmak nem mennek. Eccerűen nem éri meg a szenvedést az átírás ha sötétben tapizol, és félig meddig nem vagy tisztában azzal amit csinálsz.
Sziasztok!
Kis gondom lenne....A műholdas NMEA adatok küzül ki kéne válogatnom az időt (UTC). Ez idáig meg is volna csak hogy 2 órát hozzá kéne adnom hogy az idő helyes legyen. Ez is megy, de 23 órától felfelé már bajban vagyok mert ugye 25 és 26 óra már nincsen. A gondom azzal van hogy két külön AT karakterként tudom csak kiolvasni az órákat. Hogyan lehet ezt megoldani egyszerűen? Köszi
A programming specification szerint az összes Vdd és Vss lábakat be kell kötni (Vdd, AVdd,
VddPLL, VddRX, VddTX, Vss, AVss, VssPLL, VssRX, VssTX). Az ENVREG láb Vdd-re kötésével ki kell választani, hogy a mag belső stabilizátora működjön, különben a mag nem fog tápfeszültséget kapni. A Code Protect-et ellenőrizd a keletkező hex-ben, de úgy emlékszem, hogy a PICkit2 progiban is van lehetőség ezt állítani.
Sziasztok!
Egy jó tanács sokat segít, egy rosszak nem szabad hinni...(de melyik a jó, és melyik a rossz?) Vegyétek elő a két adatlapot. Mivel a 16F628(A) sokkal fejletebb eszköz, több beépített perifériával (csak a többlet: timer1, timer2, ccpr1, uart, analóg komparátor stb.) nyilván több speciális célú regiszterre van szükség a beállításokhoz. A 16C84 - 16F84 egy öreg, darab csak timer0, porta, portb, megszakítás kezelő és az adat eeprom van benne, és csak fél K program memória. A felépítési eltérés miatt a szabadon felhasználható memória kezdőcíme eltér. A16F84-en már szabadon használható memória - igenis - a 16F628(A)-ban speciális funkciójú regiszter tartományba esik! Pl.: 0x0C cimen a 16F84 ben szabadon felhasználható ram - a 16F628(A)-ban a PIR1 megszakítási ok regiszter van. A program átírásához a rövidsége miatt hozzá lehet fogni. Csak azt kell szenm előtt tartani, amit régebben is leírtam:
(16C84: DS30445C page 12, 16F84: DS30430C page 13, 16F84A: DS35007B page 6, 16F628: DS40300C page 14, 16F626A: DS40044F page 16) A 16F628(A) a reset után a PORTA lábakat analóg funkciójúnak kezeli, a PORTA regiszterben a beolvasott bitek 0 értéket kapnak. A programban elhelyezett utasítással kell digitálisra kapcsolni. A kiegészítés nélküli program nem működik. (16F628: DS40300C page 29, 16F626A: DS40044F page 31) Az adaptáció lényegesen egyszerűbb, ha megvan a program forrása.... Google talán segíthet.
Hp41C, watt, szilva!
Köszönöm a segítségeteket! Az a helyzet hogy a panel már kész, és nem tudok rajta sokat módosítani, max kvarcot, fázistolo kondit tudnák rajt cserélni. A proci külső kvarcról megy, mint írtam 32,768 kHz, 2db 27pF-os kondival. Az időt úgy számolom, hogy a tmr0-át pic órajele lépteti 32-es előosztóval, így állítom be: BANKSEL OPTION_REG MOVLW B'10000100' MOVWF OPTION_REG A várakozás rutin így néz ki: DELAY BTFSS INTCON,T0IF GOTO DELAY NOP BCF INTCON,T0IF RETURN A progi mást nem csinál mint portokon lévő ledeket kapcsolgat ki és be. Közben meghívja a DELAY rutint. Üdv: szidom Ui.: közben cseréltem kvarcot, most kb. 4 mp-et késik óránként, de az is rengeteg
Szia!
Én még régebben foglalkoztam hasonlóval! Azt mondod a két óra hozzáadás az megy. Én a helyedben a következőt csinálnám: Az órát olvasva, megvizsgálod hogy az első számjegy = 2?, ha nem akkor semmit sem csinálsz, simán hozzá adod a 2órát, ahogy eddig. Ha igen (tehát =2) megvizsgálod a második számjegyet, ha 2 vagy 3 kivonsz belőle 22-t. Bár tudni kéne miben programozol mert C ben ez nagyn egyszerű. A másik, hogy mielőtt elvégzed az összeadást ASCII-ből vissza konvertálod sima decimális számmá? Vagy hogyan csinálod? Idézet: „Nem én állitottam ba a kódvédelmet, visszolvasáskor 0-t olvas és a codeprotekt is pirosan ki van írva. Az én programomban kifejezetten ki van kapcsolva a kódvédelem.” Amíg az piros, addig a védelem aktív. Dolgozz rajta, hogy ne legyen a kódvédelem kiírva!
Ja... Most akkor nincs asm csak hex file? Mert akkor kb felejtsd el. Egyébként sem értem hogy minek más PIC-et használni ha a régi megvehető, és az adott áramkörhöz pont tökéletes.
Én a két IC-t nem hasonlítottam össze konkrétan csak tippet írtam. A képesség bővítés természetesen SFR bővüléssel is jár, így ahogy az adatlap mondja ami a gyengébben GPR, az az erősebben SFR.
Nem konvertálom át, az ASCII 0 - 9 ig 0x30 - 0x39. pl. a 14 óra az egymás után kiolvasott 0x31 és 0x34 karakterekből áll össze. Én a második karakter hex. értékéhez adok hozzá kettőt. De ez csak 23 óráig működik. Logikus amit írtál, én is ilyesmiken törtem a fejem, csak azt gondoltam hátha van erre valami egyszerűbb megoldás is. Egyébként asm ben írom a programot, a "C" nekem magas. Még az asm et is csak éppen makogom...
Köszi a választ, akkor írok erre egy rutint.
Hmm... ez a "várakozás" rutin nem tudom mennyire szerencsés így, főleg azzal a NOP -al ott az élen. Én a helyedben fognám a beéptített MPLAB SIM -et és a StopWatch -ot majd megnézném, hogy ennek a rutinnak mennyi idő kell a végrehajtásához, vagy betennék két breakpointot és figyelném, hogy a LED -ek állapotainak megváltozása tényleg 1 másodpercbe telik-e.
Én éppen mostanában szenvedtem össze egy 7-szegmenses órát próba képpen, dugaszolós próbapanelon, TMR0 megszakítással, 20MHz -es kvarccal, mivel semmi komoly dolgot nem szándékoztam vele tenni -csak saját magam szórakoztatására csináltam-, ezidáig komoly tesztnek nem volt alávetve mostanáig, egyelőre 45 perce megy pontosan ( vagyis relatíve; amennyire tudom érzékelni a pontosságot, stopperóra és egy ingaóra segítségével ), kiváncsi vagyok 1-2 óra eltetével mi lesz.
Szia!
1 - Fele annyiba kerül. 2 - Nem reménytelen, de nehéz. Már sikerült nekem többször is. -Keresni kell egy jó Disassemblert (pl. PICDisasm), amin beállítható, milyen kontrollerre volt fordítva a kód. -A kapott programot át kell nézni, a változó foglalást át kell állítani. -A bővítést, az analóg funkció kikapcsolását végző rutin hívását a reset vektorhoz vagy a perifériákat felprogramozó rutinba könnyen be lehet tenni. - Szimulátoron mindkét verziót tesztelni..... A gond inkább azoknak a helyeknek a megtalálása, ahol a változók címét adatként töltik be regiszterbe (pl. FSR inicializálása, buffer határok ellenőrzése, stb...). A siker reményének legnagyobb forrása, hogy a korlátozott programtár miatt a program rövid. Az életben egyszer minden kihal, talán a jó öreg 16F84A gyártását is leállítják egyszer....
Amikor betöltöm a HEX-et kódvédelem nincs bekapcsolva , beprogramozom , aztán rögtön piros képernyős hibaüzenetet kapok , 000000 címen ellenörzési hiba.
Ezekután ha kíváncsiságból megpróbálom beolvasni mi is van a PIC ben akkor végig 00 -az egész programmemóriában és ilyenkor már kijelzi hogy ez a tartalom kódvédett. (pedig nem az)
Nagy durranás (legalábbis remélem...)
A pic-kwik projekt (Mesterkedések pic24 és dspic33 mikrovezérlőkkel) megtámogatására feltettem a projekt honlapjára a Microcontrollers: From Assembly Language to C Using the PIC24 Family című könyv példaprogramjainak és a PIC24 támogatói programkönyvtárnak a dokumentációját. Hogy a kezdőket segítsem, a nyitólapot és a Kapcsolódó oldalakat lefordítottam magyarra. A PIC24 programkönyvtár eredetije itt található (és egyelőre ugyaninnen kell letölteni a programokat is, ugyanis a magyarra fordított változatot még nem csomagoltam össze. Egyébként kellemes szórakozás a Doxygen-nel ledarált forrásfájlok böngészése, lehet kattintgatni a hipelinkeket követve. linkek: - a PIC-kwik projekt honlapja - a programkönyvtár magyar nyelvű dokumentációja
Meg kell vizsgálni hogy ha óra 24 nél nagyobb ,akkor el kell venni az órából 24-et.
Pl: 23 + 2 óra 25 lenne de ilyen nincs, ez nagyobb 24 nél ezért 25-24 = 01 óra
Sőt, már a 24-ből is el kell venni 24-et ( mert nulla órának hívják)!
Szentséges jó Isten, az angol honlapon amúgyis sok-sok órákat el lehet kattintgatni, olyan töménytelen mennyiségű az információ. Köszönöm az álhatatos munkát, jelentősen megkönnyíti és lerövidíti (angolról magyararra fordítást értem itt) az ezekkel a kontrollerekkel való megismerkedést.
Jól működik ez a DURACELL !
Köszi mindenki nevében! Steve
Már tényleg nincs ötletem , már ujj programozókábelt is készitettem 10cm-est mert másik 50cm hosszú volt.
Így sem müködik a dolog....
Újabb kérdésem lenne...Van egy 16 bites számom amit 60 al szeretnék elosztani. Hogyan a legegyszerűbb ezt megoldani? ( tudom számológéppel, de én 16F628A t használok... )
Idézet: „Újabb kérdésem lenne...Van egy 16 bites számom amit 60 al szeretnék elosztani. Hogyan a legegyszerűbb ezt megoldani?” A legegyszerubb, hogy vonogass ki 60-akat es szamoldd meg hanyszor sikerult kivonni. Ha nagy szamok is elofordulhatnak felgyorsithatod, hogy elobb pl 6000-ket vonogatsz, majd 600-akat, es legvegen 60-akat... (de akar 60 mas tobbszorosevel is kiserletezhetsz ha tudod, hogy gyakran fordulnak elo specialis szamok az input halmazban).
Minden elismerésem! Nem szívesen foglalkozok még 16 bites mikrovezérlőkkel, kicsinek tartom magam hozzá. Ellenben rengeteg hasznos információhoz jutottam hozzá az oldaladon és folyamatosan jutok hozzá amit jól kamatoztatathatok 8 bites PIC-ekkel is. Mind emellett szép és igényes az oldal. Tényleg gratula!
És ha átdugod a céláramkörödbe, akkor minden rendben?
Köszi, de amit ebből nem értek:
Hogyan ábrázolok egy 16 bites számot két 8 bites regiszterben? A 16 bitet kettéválasztva az alsó felső 8 bitet írom be a 8 bites regiszterekbe, de hogyan kezelem ezt a továbbiakban "egyben"? Esetemben pl a 23503 at szeretném elosztani pl 6000 el. (ez tényleg egyszerűbb..) Tehát kivonom a 6000 et a 23503 ból ez 3,9171666... de nekem a maradék is kelleni fog...Az hová kerül, honnan olvasom ki? Egyébként az alap feladat az lenne hogy a műholdról érkező NMEA koordináta adatokat kéne átváltanom oly módon hogy azt a GoogleMaps is helyesen értelmezni tudja. Ha az eredeti formátumban írom be a kereső modulba akkor helytelen pozíciót mutat a térképen. A holdról jövő adat: 4723.503 N Amit a google vár: 47.39171 N Ha a 47 hez nem nyúlok, a 23503 at osztom 6000 el akkor az eredmény 3,91716666..(legalábbis számológéppel...) tehát a maradék is kellene az adatba hogy pontos legyen a koordináta. Hát ezt szeretném valahogyan megoldani. Köszönöm előre is..
A kép a céláramkörben készült. Az adapterben nem ismeri meg PIC-et.
Nekem nem kell átváltani, csak megfelelő formátumban kell a googleba beírni.
Próbáld így beírni: 47 23.503N 20 13.444E Akkor nem kell átváltani és pontosan működik.
Szia Peti! Neked nincs valami ötleted..? Hogy miért nem lehet az eredeti formátumban megetetni a koordinátákat a Google al sosem fogom megérteni, minden hardver eszköz azt használja csak a Google nem...
Na ezt nem próbáltam, köszi. mindjárt megpróbálom. és falnak megyek ha működik mert 2 napja ezzel az osztással görcsölök...
Nem működik sajna így sem, pedig de jó lenne...
Megvan miért nem megy...Az "E" koordináta tizedes előtti részét nem 4 hanem 5 digittel adja az "N" adathoz képest. Az első karakter az "E" adatnál 0 , ezt nem kell beírni és akkor működik. Kérdés hogy ez a karakter mindig 0 vagy csak ennek a koordinátának az esetében?
|
Bejelentkezés
Hirdetés |