Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   446 / 1319
(#) watt válasza icserny hozzászólására (») Márc 29, 2009 /
 
Jól bírod!
(#) szigetivan válasza icserny hozzászólására (») Márc 30, 2009 /
 
Sziasztok!

Lefordítottam CC5X fordítóval a már fentebb említett programot, de nem tudja értelmezni az elejét..
Mi a hiba benne?
Nekem elsőre ezek a sorok tűnnek (eredetileg [64] volt, de ez a pic ahhoz túl kicsi,h.tudja)

#pragma rambank 1
char sector2[20];

Köszi
(#) icserny válasza szigetivan hozzászólására (») Márc 30, 2009 /
 
Elfelejtetted megírni, hogy milyen opciókkal futtattad a fordítót, s hogy mi volt a hibajelzés.

Az eredeti programot le tudtad fordítani? Ha azt sem, akkor ne a forráskódban keresd a hibát!
(#) trudnai válasza szigetivan hozzászólására (») Márc 30, 2009 /
 
Idézet:
„Az eredeti programot le tudtad fordítani? Ha azt sem, akkor ne a forráskódban keresd a hibát!”


Ill. ott keresd a hibat, marmint lehet masik forditora lett ez az egesz irva es a pragmat nem tudja ertelmezni, vagy nincs elegendo hely, vagy csak nincs bank 1 azon a PIC-en, vagy nem inkludaltal be valamit amit be kellett volna...

Tenyleg nem viccbol irjuk, hogy mikor van egy hibauzenet akkor jo lenne azt is beidezni
(#) szigetivan válasza trudnai hozzászólására (») Márc 30, 2009 /
 
Rendben, köszi srácok későn volt már és elfelejtettem, ha az otthoni gépemnél leszek, akkor majd elküldöm és csatolom a progit is!
Amúgy a bankok nem tetszettek neki, amire emlékszem.
(#) icserny válasza trudnai hozzászólására (») Márc 30, 2009 /
 
Idézet:
„lehet masik forditora lett ez az egesz irva”

Ez már a "másik fordító"!

"A programban világosan benne van az útmutató: cc5x fordítóval kell fordítani."
(#) trudnai válasza icserny hozzászólására (») Márc 30, 2009 /
 
Idézet:
„„lehet masik forditora lett ez az egesz irva”
Ez már a "másik fordító"!

"A programban világosan benne van az útmutató: cc5x fordítóval kell fordítani."”


Ja, akkor csak en nem kovettem az esemenyeket a 7vegen Tanulsag: vissza kell olvasnom, mielott irkalok
(#) szigetivan válasza icserny hozzászólására (») Márc 30, 2009 /
 
Sziasztok!

Fordító hibaüzenete ez volt:
Idézet:
„Error mmc.c 268: No space for global variable 'sector4'
(Too few RAM locations (within a specific bank or shared) are available.
#pragma rambank or bank type modifiers (bank0 ..) can be used to move
variables to another bank)”


Ami sztem 16F690-es RAM-jának hiánya miatt adódott.

Átírva a sorokat és a hozzá kapcsolódó műveleteket már lefordult.
#pragma rambank 0
char sector1[64];

Fordítót úgy használtam, ahogy le volt írja a kódban.

De ezeket kijavítva még mindig nem teljes jól műkszik a progi.

CS a 16F690-ben melyik pin??
És ez mit jelent a program végén??
[/quote]i &= 0b.0001.1111;
if (i != 0b.0000.0101) {[quote]

Köszi

mmc.c
    
(#) icserny válasza szigetivan hozzászólására (») Márc 30, 2009 /
 
Idézet:
„CS a 16F690-ben melyik pin?”

Ezt az adatlap jobban tudja, mint én.

Idézet:
„i &= 0b.0001.1111;”

másképp: i = i & 0x1f; (& = AND)

Idézet:
„if (i != 0b.0000.0101)”

Ha i nem 5...

Idézet:

De ezeket kijavítva még mindig nem teljes jól műkszik a progi.”

Egy okos ember (talán Dijkstra?) szerint ha kijavítunk egy programhibát, attól még nem hibátlan a program, csupán a következő hibát lesz nehezebb megtalálni!
(#) szigetivan válasza icserny hozzászólására (») Márc 30, 2009 /
 
Szia!

Azt vágom,h.a C parancs mit jelent, de hogy azzal a programban mit akartak vele kifejezni, miért akkor ír ki hibát, azt nem értem??
Idézet:
„Ezt az adatlap jobban tudja, mint én.”

Az biztos én az adatlapból a RC6-ra tippelek, de mondom,h.ellentmondásos dolgokat olvastam ezekkel kapcs. és várok a megerősítést,h.akkor az-e és tényleg nem vagyok benne biztos!
(#) potyo válasza szigetivan hozzászólására (») Márc 30, 2009 /
 
A CS-re a program elején van megadva, hogy az RC6 láb. Bár elég érdekesen néz ki, én inkább úgy adtam volna meg, hogy #define CS PORTC.6

Pl. ez az részlet egyáltalán nem illik a struktúrált programozáshoz:
  1. if (Command(0x40,0,0,0x95) !=1) goto mmcerror;  // Reset MMC
  2.  
  3. st: // if there is no MMC, prg. loops here
  4.         if (Command(0x41,0,0,0xFF) !=0) goto st;
  5.  
  6.         return 1;
  7. mmcerror:
  8.         return 0;

C-ben ennek valahogy így kell kinéznie:
  1. if (Command(0x40,0,0,0x95) !=1)
  2.                 return 0;
  3.        
  4.         while (Command(0x41,0,0,0xF)!=0);
  5.        
  6.         return 1;


De ha nem használnál felesleges és értelmetlen rövidítéseket, és ha elmondanád azt, hogy mit csinál a program, akkor talán érdemben is tudnánk segíteni...
(#) trudnai válasza szigetivan hozzászólására (») Márc 30, 2009 /
 
Csak a programodban kell szetnezni szoveg keresessel

En ezt talaltam abban a C programban amit csatoltal:

#pragma bit CS @ PORTC.6 // output pin for chip select (MMC)

Namost mar csak az a dolgod, hogy ellenorizd a kovetkezoket:

1. Van-e az adott PIC-en amire a programodat atirod PORTC (ill annak van-e 6. bitje)

2. Milyen egyeb funkciok csatlakoznak hozza amik esetleg a masikban nem, avagy milyen funkciok hianyoznak amik a masikban meg vannak - magyaran hogyan kell a PORTC-t az adott eszkozon felinicializalnod, es ennek megfeleloen az inicializalo reszt atirnod ha szukseges

A C operatorokat nezd amugy at a Kernighan and Ritchie konyvben (K&R neven is szoktak emlegetni). Ott (is) le vannak irva az operatorok '&=' ill a '!=' is. A 0b.... megadasi mod ott nincs leirva mert az nem eredeti es nem szabvany - azt csak a CC5X-ed (ill lehet par masik embedded C) tamogatja csak.
(#) szigetivan válasza potyo hozzászólására (») Márc 30, 2009 /
 
Sziasztok!

Én csak ezt a programot fel szeretném használni (icserny linkje alapján) és alkalmazni a saját kontrolleremre, mivel nem sikerült, ezért kértem a tanácsotokat,h.mi hibázhat.
Amit írtatok kipróbáltam és még mindig ezt adja vissza:
Idézet:
„PIC online
MMC: write error 2”

köszi
(#) watt válasza szigetivan hozzászólására (») Márc 31, 2009 /
 
Idézet:
„h.mi”

Potyo ezekre a felesleges rövidítésekre gondolt!
(#) icserny válasza szigetivan hozzászólására (») Márc 31, 2009 /
 
Idézet:
„Az biztos én az adatlapból a RC6-ra tippelek”

A helyzet az, hogy a Chip Select helye csak slave módban rögzített, akkor RC6 (/SS, aktív állapotban alacsony). Master üzemmódban, ahogy te is használod, tulajdonképpen mindegy, hogy melyik szabad lábat használod.

Az if-es kérdéseidre visszatérve: azt vizsgálja, hogy a blokk írás után visszaolvasott egybájtnyi adat alsó 5 bitje 00101 vagy sem. Hogy ennek mi értelme van, azt az MMC leírásából lehet kideríteni.

Idézet:
„Amit írtatok kipróbáltam és még mindig ezt adja vissza:
„PIC online
MMC: write error 2””


Nézd, találtunk neked egy projektet az Interneten,ami vagy működik, vagy nem. Te önkényesen megváltoztattad a hardvert (nem is tudjuk, hogy mire). Hályogkovács módszerrel átirtad a programot is. Ezekután az lenne a csoda, ha működne....

Ilyen alapvető dolgokat kellene tisztázni, hogy megfelelő sebességgel kapja-e az adatot az MMC? Szereti-e a beállított CKE/CKP üzemmódot? Nem keverted-e össze az SDO/SDI vezetékeket? (talán nem, ha már a Write error 2-ig eljutottál!)

Mit csinál a program,ha kikommentálod az alábbi sorokat? (kihagyva a hibajelzést)?

  1. if (i != 0b.0000.0101) {
  2.                 SerString("MMC: write error 2 ");
  3.                 return 1;
  4.         }

(#) icserny válasza potyo hozzászólására (») Márc 31, 2009 /
 
Idézet:
„ha elmondanád azt, hogy mit csinál a program”


Erről a projektről van szó.
(#) mazso1988 hozzászólása Márc 31, 2009 /
 
Sziasztok
szeretnék egy kis segítséget kérni.
volt egy működőképes Pic12c508A MCU
egy éve volt használva utoljára most előkerült és nem csinál semmit sajnos annyit irt ki mikor megpróbáltam olvastatni icproggal.
no oscillator calibration value found.
én annyira nem értek a pikekhez de ezt azt jelentheti hogy nincs jól beállitva az oszcillátor?
kérem aki tudja mi lehet vele a probléma kérem szóljon
Üdv
(#) icserny válasza mazso1988 hozzászólására (») Márc 31, 2009 /
 
Jól látom, hogy ez csak egyszer írható mikrovezérlő?

Az oszcillátor kalibrációs értéke a memória végén helyezkedik el (ha jól tudom, egy RETLW nnn utasítás, tehát a W-ben tér vissza a kalibrációs konstanssal).Programozás előtt el kellett volna menteni, és a programmal együtt vissza kell(ett volna) írni a memória végére. Ha hiányzik, az sem baj, feltéve, ha a beírt program nem akarja meghívni a kalibrláshoz.

Ha van kedved olvasgatni, akkor küldök egy kis olvasnivalót.
(#) mazso1988 válasza icserny hozzászólására (») Márc 31, 2009 /
 
Köszönöm
(#) trudnai válasza mazso1988 hozzászólására (») Márc 31, 2009 /
 
Igen, a kalibracios ertek hianyzik. A Baseline-oknal nem RETLW van, hanem MOVLW, es az az erdekessege a dolgoknak, hogy a firmware POR-kor a program memoria legmagasabb cimen indul el. Itt normal esetben a MOVLW-vel a W-be toltodik a kalibracios ertek. A PC atcsordul 0-ba miutan ez az utasitas vegre hajtodott, igy kerul a vezerles a reset vektorra. A W-ben azoban mar ott lesz a kalibracios ertek amit majd manualisan kell bemasolni az OSCCAL-ba.

Namost amiert mindez fontos: Ha azon az utolso helyi erteken valami szemet van, akkor akar mukodeskeptelen is lehet az eszkoz. Azaz pl egy GOTO $ oda fagyaszthatja - de hat ott barmi is lehet

Masik dolog amit tudnunk kell meg a baseline-okrol, hogy nemelyik tipusnal a clock out-ot szinten az OSCCAL-lal lehet allitani. Vegeredmenyben az also (0.) bit ha magas akkor van clock out. Ebbol fakad, hogy ha egy hibas ertek, de MOVLW utasitas all a kalibracios helyen, akkor akar azt is hihetnenk minden redben, azonban lehet veletlenul kirajkjuk az FOSC/4 -et a clkout-ra. Ez 508-nal nincs meg szerencsere, de pl 10F-eknel igy van. Az egyetlen elfogadhato megoldas, hogy mielott kitesszuk az OSCCAL-ra barmit is, maszkolnunk kell!
(#) watt válasza mazso1988 hozzászólására (») Márc 31, 2009 /
 
Ha a mondatok elejét nagybetűvel kezdenéd, talán el is olvasnám amit írsz!
(#) icserny válasza szigetivan hozzászólására (») Márc 31, 2009 /
 
Az mmc.c program alábbi részletében nem értem, hogy miért pont az i == 5 teljesülése a jó nekünk (ha i != 5 , akkor jön a hibajelzés):
  1. if (i != 0b.0000.0101) {
  2. SerString("MMC: write error 2 ");
  3. return 1;
  4. }


Mindenestre a válaszkódok (egy másik forrásból beszerezve) így néznek ki:
  1. Bit 0 = Idle state
  2. Bit 1 = Erase Reset
  3. Bit 2 = Illegal command
  4. Bit 3 = Communication
  5. Bit 4 = Erase sequence
  6. Bit 5 = Address error
  7. Bit 6 = Parameter
  8. Bit 7 = Always 0


A hibajelzés kiíratása helyett tehát tesztelési és pedagógiai célzattal a visszatérési kódot kellene kiíratni valamilyen olvasmányos formában!
(#) icserny válasza icserny hozzászólására (») Márc 31, 2009 /
 
Ha senki sem mondja, akkor kénytelen vagyok megválaszolni magamnak: az 0x05 érték egy nyugtázójel.

Találtam itt egy másikmintaprojektet, s ez tisztázott 1-2dolgot.felmerült viszont egy újabb kérdés Szigetiván programja kapcsán:

  1. bit writeramtommc()             // write RAM (sector1..4) to MMC
  2. {
  3.         // 512 byte-write-mode
  4.         if (Command(0x58,0,512,0xFF) !=0) {
  5.                 SerString("MMC: write error 1 ");
  6.                 return 1;      
  7.         }
  8.         SPI(0xFF);  // <-------
  9.         SPI(0xFF);  // <-------
  10.         SPI(0xFE);
  11.         uns16 i;
  12.         // write ram sectors to MMC
  13.         for (i=0;i<=39;i++) {
  14.                 SPI(sector1[i]);


Itt van két Send(0xFF), ami a fenti linkről származó ábrához képest többlet. Kellenek ezek ide egyáltalán?
(#) szigetivan válasza icserny hozzászólására (») Márc 31, 2009 /
 
Szia!

Igen, érdekes észrevétel, már rajta vagyok!

Köszönöm a segítséget!!!!
(#) pixels válasza trudnai hozzászólására (») Márc 31, 2009 /
 
Hali!

A 16F628A-ban van ilyen kalibrációs érték? Megnéztem az adatlap oszcillátormódokról szóló részét, de nem találtam róla infót, valamint a memória utolsó programszava is 3FFF gyárilag.
(#) trudnai válasza pixels hozzászólására (») Ápr 1, 2009 /
 
Igen, ezek mar gyarilag be vannak kalibralva es nem szukseges (es nem is lehet) allitgatni az orajat.
(#) trudnai válasza pixels hozzászólására (») Ápr 1, 2009 /
 
Tegnap mar nagyon faradt voltam, szoval reggel vissza olvasva a valaszomat nem egyertelmu (az igen az amolyan kotoszo Szoval a

Idézet:
„A 16F628A-ban van ilyen kalibrációs érték?”


kerdesre a valasz: Nincs ilyen kalibracios ertek, ezekben a PIC-ekben mar nem kell kulon betoltogetni az OSCCAL regiszterbe, az gyarilag belulrol megtortenik es kivulrol hozzaferes nincs is mar ehhez a regiszterhez. Ily modon megoldottak a veletlenul letorolt kalibracios ertek/utasitas orokos problemajat.

Vannak olyanok is, ahol ugyanigy mar gyarilag be van kalibralva az oszcillator, azonban van lehetoseg a hangolasra - valami +-12% remlik. Ez pl jol johet ha pl soros kommunikaciohoz kellene mas alap freki.

Amugy amit leirtam a Baseline es a MOVLW stilusu kalibracios dolgokkal kapcsolatban, nevezetesen, hogy egy hibas ertek ott hibas mukodeshez vezethet ha pl az utasitas nem MOVLW, ez igaz a RETLW-s megoldasra is, hiszen ha a firmware-bol CALL-lal meghivjuk azt es ott nem RETLW hanem veletlen szeru utasitas van akkor az ugyanugy kiszamithatatlan hibajelenseget okozhat.
(#) Csaplar hozzászólása Ápr 1, 2009 /
 
Sziasztok!

Szükségem lenne valamilyen rádiós kommunikációs modulra.
Jó lenne max 1km-es távolságig valami olcsó, de működőképes megoldás.
Az egyik egység mindenképpen PC-hez lenne kötve, a másik meg egy kis pic18-as egységhez.

Tudnátok valamit ajánlani?
Köszi
(#) icserny válasza Csaplar hozzászólására (») Ápr 1, 2009 /
 
Idézet:
„Tudnátok valamit ajánlani?”

Talán a Hírközlési Felügyelet jogi tanácsadó szolgálatát, ha már ápr. 1. van!

Viccen kívül: ez az 1 km távolság necces, főleg ha más telkén halad át a jel. Nem értek hozzá, de félek, hogy ez esetben nem csak elektronikus problémáról van szó...
(#) Csaplar válasza icserny hozzászólására (») Ápr 1, 2009 /
 
És ha mondjuk csak néhány 100m-es távolságot szeretnék biztonsággal áthidalni?
Következő: »»   446 / 1319
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