Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   507 / 1320
(#) zsimon válasza qvasz2 hozzászólására (») Jún 20, 2009 /
 
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.
(#) menyus hozzászólása Jún 20, 2009 /
 
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
(#) szilva válasza pepe33 hozzászólására (») Jún 20, 2009 /
 
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.
(#) Hp41C válasza zsimon hozzászólására (») Jún 20, 2009 /
 
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:
  1. 16F84    16F628
  2. Szabad memória kezdőcíme:    0x0C     0x20

(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.

(#) szidom válasza szilva hozzászólására (») Jún 20, 2009 /
 
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
(#) bladika válasza menyus hozzászólására (») Jún 20, 2009 /
 
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?
(#) watt válasza pepe33 hozzászólására (») Jún 20, 2009 /
 
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!
(#) zsimon válasza Hp41C hozzászólására (») Jún 20, 2009 /
 
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.

(#) menyus válasza bladika hozzászólására (») Jún 20, 2009 /
 
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.
(#) kisszee válasza szidom hozzászólására (») Jún 20, 2009 /
 
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.
(#) Hp41C válasza zsimon hozzászólására (») Jún 20, 2009 /
 
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....
(#) pepe33 válasza watt hozzászólására (») Jún 20, 2009 /
 
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)
(#) icserny hozzászólása Jún 20, 2009 /
 
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
(#) pepe33 válasza menyus hozzászólására (») Jún 20, 2009 /
 
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
(#) icserny válasza pepe33 hozzászólására (») Jún 20, 2009 / 1
 
Sőt, már a 24-ből is el kell venni 24-et ( mert nulla órának hívják)!
(#) kisszee válasza icserny hozzászólására (») Jún 20, 2009 /
 
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.
(#) kissi válasza icserny hozzászólására (») Jún 20, 2009 /
 
Jól működik ez a DURACELL !

Köszi mindenki nevében!

Steve
(#) menyus válasza pepe33 hozzászólására (») Jún 20, 2009 / 1
 
Köszi Peti...Már írom is!
(#) pepe33 válasza pepe33 hozzászólására (») Jún 20, 2009 /
 
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....

pic hiba.jpg
    
(#) menyus hozzászólása Jún 20, 2009 /
 
Ú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... )
(#) trudnai válasza menyus hozzászólására (») Jún 21, 2009 /
 
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).
(#) skeletornb válasza icserny hozzászólására (») Jún 21, 2009 /
 
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!
(#) watt válasza pepe33 hozzászólására (») Jún 21, 2009 /
 
És ha átdugod a céláramkörödbe, akkor minden rendben?
(#) menyus válasza trudnai hozzászólására (») Jún 21, 2009 /
 
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..


(#) pepe33 válasza watt hozzászólására (») Jún 21, 2009 /
 
A kép a céláramkörben készült. Az adapterben nem ismeri meg PIC-et.
(#) pepe33 válasza menyus hozzászólására (») Jún 21, 2009 /
 
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.
(#) menyus válasza pepe33 hozzászólására (») Jún 21, 2009 /
 
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...
(#) menyus válasza pepe33 hozzászólására (») Jún 21, 2009 /
 
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...
(#) menyus válasza pepe33 hozzászólására (») Jún 21, 2009 /
 
Nem működik sajna így sem, pedig de jó lenne...
(#) menyus válasza menyus hozzászólására (») Jún 21, 2009 /
 
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?
Következő: »»   507 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem