Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   437 / 1320
(#) trudnai válasza bbalazs_ hozzászólására (») Márc 20, 2009 /
 
Idézet:
„a multiplex hibaja eppen a fenyero oszlasa az idoszelet miatt...”


Ezekkel az ujabb LED-ekkel egeszen jok a tapasztalataim, mar az eloirtnal joval kevesebb arammal is nagy fenyerot produkalnak. Az egyetlen problema az szokott lenni, hogy nemelyiknek kisebb a latoszoge, tehat kisse oldalrol nezve mar nem latszik annyira fenyesnek, de talan ez nem problema egy modell vasut eseteben.
(#) watt válasza lidi hozzászólására (») Márc 20, 2009 /
 
Igen, tökéletesen érted! (fél duplex) (Végre! Hidd el örülök, hogy végre valaki megérti amit írunk! Ez mostanában nem divat! )
(#) kiskacsa2009 válasza trudnai hozzászólására (») Márc 20, 2009 /
 
Csak úgy szólok neked, hogy ez NEM a vasutamhoz készül, mert ezt kiállítási tárgynak tervezem.

Valamint, mivel a pic memóriája nem végtelen, ezért a felrakott kis program elődjében van egy olyan rész amit úgy jelöltem:
//ism [itt egy szám]x

Valamint úgy, hogy:
//ism vége

ezt a részt kéne ismételtetni annyiszor, ahányszor oda van írva.

proba.c
    
(#) watt válasza Syn7h37ic hozzászólására (») Márc 20, 2009 /
 
Látom közben szilva elmagyarázta a lényeget, én csak annyit tennék hozzá, hogy a karaktereknek címeik vannak, amit be kell állítani a programban, mielőtt kiviszed a szöveget. Ha a kijelzőnél máshová esnek a címek az áramköri kialakítás miatt, akkor történik ez a felfordulás. Ezért írtam, hogy kell az adatlap(vagy ki kell molyolni próbálkozásokkal a címeket, de ez nagyon macerás tud lenn, még akkor is, hanem túl sok cím van.).
(#) icserny válasza kiskacsa2009 hozzászólására (») Márc 20, 2009 /
 
Nagyvonalúan elsiklottál az itteni hozzászólásom fölött, pedig abban már megírtam, hogy ciklusszervező utasításokkal lehet programrészeket ismételni (és C jegyzetet is adtam hozzá).

Arra is megkértelek már, hogy nevezd meg a választott fejlesztői környezetet, és a fordítót, hogy ÉRDEMBEN segíteni tudjunk.

AVR-re írt programok pedig nem fognak a PIC-en futni (sőt, lefordulni sem...)!

A konkrét kérdésre:
Adott számú ciklus szervezéséhez kell egy változó számlálónak. Például:

  1. int i;
  2. ...
  3. for(i=0; i<10; i++) {
  4.   ...blah blah...
  5. }


(#) lidi válasza watt hozzászólására (») Márc 20, 2009 /
 
Ez a fél duplex dolog nem tetszik benne, hogy mindig kapcsolgatni kell a vétel és adás között. Találtam viszont egy ilyet: Bővebben: Link
Ez nekem úgy tűnik mintha valami automata irány kapcsoló lenne. Szimulátorban próbálom épp. Nem azt csinálja amire számítottam: azaz adás kezdetekor átkapcsolja ugyan adásra, de amint végetér 1 bit, már le is kapcsolja az adót. Én meg azt hittem hogy adáson tartja legalább 1 byte ideig.
(#) icserny válasza lidi hozzászólására (») Márc 20, 2009 /
 
Idézet:
„Én meg azt hittem hogy adáson tartja legalább 1 byte ideig.”

Az időzítést meg az adatsebességet össze kell hangolni. De szvsz az irányváltást jobb a PIC-re hagyni, ő jobban tudja, hogy mikor kérdez, mikor várja a választ.

Mellesleg a kétirányú forgalommal elég messzire kanyarodtál az eredeti felvetéstől, melyszerint csak egy TTL jelet karsz elvinni. (A végén fogpiszkáló lesz belőle, ha azt is el nem... koncepcionálod! ) Nem is tudom, hogy RS-485 és a 9 bites üzemmód (cím/adat) nélkül hogyan gondoltad az eszközök címzését és az oda-vissza kommunikálás szervezését?
(#) watt válasza lidi hozzászólására (») Márc 20, 2009 /
 
Bár nem néztem meg az adatlapját, de két vezetékkel nem lehet automata(pontosabban nem úgy automata, hogy irányt vált, hanem bármikor beszélhet bármelyik, de ez egyébként is így van, csak abból hangzavar lesz, akkor meg minek). A fullduplex komunikációhoz két ilyen IC kell és meg is van oldva. Úgy is UTP kábellel kell szerelni, abban meg van vezeték bőven.

De én nem látok semmi bajt a félduplexben. Egy master-slave kapcsolatnál a kommunikációt a master indítja, a slavek csak akkor dumálhatnak a vonalra, ha őt szólították meg. Semmi értelme aközben a masterhez szólni, miközben más slavet szolgál ki, vagy szólít meg éppen. Ha megszakításra van szükség, azt egy szál dróton meg lehet oldani, de nem sok olyan slve szokott lenni egy láncban, ami olyan fontos lenne, hogy ne lenne elég az UTP kábel fennmaradó 6 vezetéke erre. Nálam egyébként 2szálon meg a kommunikáció, 2x2szálon a táp, és a maradék két szálon jön az interrupt a tasztatúra-TFT egységtől és a PC-USB-MMC egységtől. A többi egység nem csinál olyan dolgot, ami halaszthatatlan(szobák, kijelzők és egyéb kiszolgálók).

Igaz nem tudom mit akarsz megoldani, de szerintem kevés olyan van, amihez ne lenne elég a sima félduplex. Programozásuk is könnyű, mert a PIC (E)USART támogatja a 9. biten történő cím adat jelzését. Így a slavek is tehermentesülnek egy másik slave-vel folytatott adatforgalom közben a hálózat vizsgálgatása alól és csak akkor nézik meg az adatot, ha 9bites címadat kerül a hálózatra. Természetesen címzést csak a master kezdeményezhet.
(#) lidi válasza icserny hozzászólására (») Márc 20, 2009 /
 
Úgy gondoltam, hogy amit master küld, azt mindegyik slave megkapja. És az üzenetből eldönti, hogy rá tartozik-e, vagy sem.
Azután gondoltam olyanra is, hogy figyelik a slave-ek a master felé menő vonalat, és csak akkor adnak, ha szabad a vonal már egy ideje.
Vagy lehetne úgy is hogy csak akkor adnak a slave-ek, ha a master utasítja őket.

Jah, az 555 -ös adókapcsoló működik végül, tényleg csak meg kellett növelni a RC tag időállandóját. (1200 baud hoz 39k, és 100n)
(#) icserny válasza lidi hozzászólására (») Márc 20, 2009 /
 
Idézet:
„Azután gondoltam olyanra is, hogy figyelik a slave-ek a master felé menő vonalat, és csak akkor adnak, ha szabad a vonal már egy ideje.”

Ennél meg kell oldani a Slave-ek közötti ütközés feloldását.

Idézet:
„lehetne úgy is hogy csak akkor adnak a slave-ek, ha a master utasítja őket.”

Ez mentesít az előző problémától.


(#) Hp41C válasza Jobbagyag hozzászólására (») Márc 20, 2009 /
 
Sziasztok!

Játszottam egy kicsit a banksel makroval, de minden esetben 2 utasítást fordít a kódba!

Sok esetben elég lenne egy utasítás is a bank válásához.

Írtam két másik makrót:
A program elején InitBank PORTA, beállítja a kezdő bank-ot.
Ha bankváltás kell, a SelectBank csak annyi utasítást fordít, amennyi kell.


InitBank macro reg
sel_bank set reg
endm

SelectBank macro reg
if (sel_bank ^ reg) & 0x100
if reg & 0x100
bsf STATUS,RP1
else
bcf STATUS,RP1
endif
endif
if (sel_bank ^ reg) & 0x80
if reg & 0x80
bsf STATUS,RP0
else
bcf STATUS,RP0
endif
endif
sel_bank set reg
endm

InitBank PORTA
SelectBank TRISA
SelectBank EEADR
SelectBank PORTB
SelectBank EECON2

(#) watt válasza Hp41C hozzászólására (») Márc 20, 2009 /
 
Nem rossz! Tetszik, ahogy kinyered a regiszter bank értékét a címéből! Gratulálok!
Valóban felmerül a jogos kérdés, hogy ezt a fordító mi a fenéért nem tudja gyári kivitelben lekezelni!? Esetleg küld el nekik, hátha beépítik az előfordítóba!
(Lehet jobban olvasható lett volna, ha használod a code=asm formázó parancsot. Vagy más miatt nem használtad?)
(#) Hp41C válasza watt hozzászólására (») Márc 20, 2009 /
 
Szia!

Kezdő forumozó vagyok még....
(#) watt válasza Hp41C hozzászólására (») Márc 20, 2009 /
 
Ja most látom, hogy 94 hozzászólás! De csak a fórumozásban vagy kezdő, ahogy látom!
Szóval a Kód gomb, és a kis szerkesztés amit írtam és szép lesz a kód megjelenése.
Ezt az offot pedig kijelölöm és rákattintok az OFF gombra és ettől lesz ilyen szép szürke! A többi gomb is hasznos...
(#) lidi válasza watt hozzászólására (») Márc 20, 2009 /
 
Ez a 9. bittel jelölt cím is érdekes lehet. Olvasom az adatlapot, de nem tiszta teljesen.
Adó oldalon kell kiküldenem először egy bytenyi címet (megjelölve a 9. bittel), majd utána egy adatbye-ot. A vevő, pedig ha jól van beállítva minden, akkor csak akkor generál megszakítást ha a címe egyezik az épp vett cím byte-al?
De ilyenkor minden atatbyte előtt címbyteot is kell küldenem ? És feldolgozáskor mikor kiolvasom a RCREG-et, már csak az adatbyteokat kapom meg ? (tehát a címet lenyeli?)
(#) lidi válasza lidi hozzászólására (») Márc 20, 2009 /
 
Ó, most sikerült találnom bővebb infót erről, de nem sok mindenre jó ez a 9. bit jelölte cím. Az egész csak annyit tud, hogy ha így van beállítva akkor a nem megjelölt byteok nem kerülnek be a vevő pufferbe. Így szoftverből kell ellenőrizni a címet, és ha stimmel, akkor engedni kell a többi byteot is. De akkor már nem módosítom a jól működő soros port programomat, megoldom enélkül a 9. bites bohóckodás nélkül is.

Bővebben: Link
(#) watt válasza lidi hozzászólására (») Márc 20, 2009 /
 
Hát ez elég érdekes hozzáállás, mert szerintem sokkal egyszerűbb és hatékonyabb.
Nem beszélve arról, hogy azt hogy oldod meg, hogy miközben az adatok mennek, és az egyik adat pont az egyik slave címe, hogy az ne induljon be arra? Honnan fogja tudni, hogy cím, vagy nem? Számlálja a csomagban lévő bájtokat? És akkor csak egyforma csomagokat lehet küldeni? Elég kényelmetlen, és erőforrás pazarló dolog azt számolgatni, hogy beért e a megfelelő számú adat, és a következő lesz az új cím. Aztán mi van, ha az egyik slave szinkronja elcsúszik egy hibás vételtől? Borul a mutatvány!
(#) lidi válasza watt hozzászólására (») Márc 20, 2009 /
 
Komplett packeteket küldenék, és csak hibátlan packet -et dolgoznék fel.
Pl ezt küldi a master:

Cim:05:abcdefg......#

A # lenne az adatcsomag vége jelző. Mindkét esetben ki kell dolgozni valami protokollt. Számomra egyszerűbb szoftvert írni, mint módosítani a soros rutint. Még ha lenne hardveres cím dekódolás akkor meggondolnám, de így nincs értelme, kb mindent szoftverből kell csinálni.
(#) icserny válasza lidi hozzászólására (») Márc 20, 2009 /
 
A 9 bites hókuszpókusznak két előnye van:
- Jelent némi biztosítékot arra, hogy az adatot nem nézi a slave címnek.
- Ha nem stimmelt a cím, akkor a következő 9 bites karakterig a slave nem foglakozik a vonalon menő adatokkal (ez különösen a sok részvevős hálózatokon fontos), tehát több ideje marad a saját feladatainak elvégézésére.

Az előző kérdésedre reagálva: az az általad kialakított protokol-tól függ, hogy milyen gyakorisággal kell a címet küldeni. Ha olyan a protokol akkor küldhetsz akár 10 kilobájtot is, mert a slave csak akkor kapcsol vissza címfigyelő módba, amikor - a protokol szerint - megkapta a maga adagját.
(#) icserny válasza lidi hozzászólására (») Márc 20, 2009 /
 
Idézet:
„Számomra egyszerűbb szoftvert írni, mint módosítani a soros rutint.”

Én eddig azt hittem, hogy a soros rutin is szoftver.
(#) icserny válasza watt hozzászólására (») Márc 20, 2009 /
 
Idézet:
„Honnan fogja tudni, hogy cím, vagy nem?”

Gondolom, lesznek fenntartott karakterek, amelyek adatként nem mehetnek. Tehát nem küld bináris adatot, hanem csak kódoltat.
Például egy kettőspont jelzi az üzenetcsomag elejét, s utána mindig cím következik...
(#) trudnai válasza Hp41C hozzászólására (») Márc 20, 2009 /
 
Nem rossz! Ehhez hasonlo makrok amugy leteznek, az egyetlen hatranyuk, hogy a cimkek utan minenkeppen kell egy reset bank (vagy init bank teljesen mindegy honnan kozelited meg).

A masik, mi van akkor, ha a bank 1 van mar kivalasztva, es a bank 1-re nyulsz? Ilyenkor ha jol ertelmezem a mokrod, akkor eszreveszi, hogy a 0x80 bit magas, majd megnezi a regisztert, annal is magas, tehat allitja a bankot... ahelyett kihagyna a bank szelekciot.
(#) Galilei hozzászólása Márc 20, 2009 /
 
Elakadtam HELP!

Terveztem egy PIC-es vezérlést, ahol PIC24FJ256GB110 a főnök. Próbálom az első programot benne futtatni, DE nem megy, nagyon érdekes a helyzet.
Minimál terv az volt, hogy az RA4 porton lévő LED villogjon. Mert ekkor tudni fogom hogy a táp, reset, oszcillátor, ICSP funkció működik. Írtam félcenti programot, lsd. lent "24f_3a.c"
MPLAB 8.20a -t használok, C30 3.11-et, és PICkit2.
Elsőre lefordult a "bonyolult" program, égető felismerte a PICet, beégette a programot és mindent rendben talált, hawaii!
Lépésenkénti végrehajtás PICkit2 debuggal megy, animált futtatás megy és RUN-ba is megy, szkóppal lemértem RA4-t.
Viszont ha PICkit2-t eltávolítom az ICSP csatiról és a NYÁKot a saját tápjával kapcsolom be akkor nem fut a program, semmi életjel nincs az RA4 lábon.
Eddig 4x5 órám ment rá erre a problémára, nagyon megnéztem a tápot, reset környékét, oszcillátort is a belső FRC-re állítottam, nehogy a külsővel legyen problémája, bár az is jónak tűnik szkóppal mérve.
Ez a PIC-et közvetlenül érintő kapcsi rajz, amin a tesztet érintő elemek kiemelve.
Ha valakinek aki PIC24F-el már találkozott van valami ötlete azt nagyon megköszönném!!!
Addig is átolvasom a teljes PIC doksit még egyszer, 328 oldal
(#) Hp41C válasza trudnai hozzászólására (») Márc 20, 2009 /
 
Szia!

Az InitBank -nak nincs kód vonzata - a fordító eltárolja, hogy mi volt az utoljára használt.

Ha két SelectBank -ot adunk ki egymás után ugyanarra a bankra a külső if -ek miatt nem fordul be semmi sem.

A cimkék után csak akkor kell, ha a megelőző kódokban különboző Bank-volt aktív.

Minden lehetőségre nem készült fel, azért adtam más nevet neki, hogy a bankselt is lehessen használni. Egy banksel után valóban kell egy InitBank is.

Ki-ki kedve szerint használja.
Az indító ok Jobbagyag problémája volt - néhány utasítás átlógott a 2k-s laphatáron
(#) benjami válasza Galilei hozzászólására (») Márc 20, 2009 /
 
Nekem IDC2-m van, de nekem csak akkor fut a program az ICD nélkül ha az MPLAB-ban a programmer részben az ICD-t kiválasztva programozom fel a PIC-et. Debugger-ből felprogramozva belekerül az ICD-vel kommunikáló program is, ami nem indítja el a program futását ICD nélkül. Gyanúm szerint a Pickit2 is így működhet.
(#) icserny válasza Galilei hozzászólására (») Márc 20, 2009 /
 
Ugye, a PICkit2 lehúzása előtt fordítottál egy Release változatot, és be is égetted?

Mellesleg a bit kapcsolagatások között kellene egy kis szünetet tartani.

Igaz, hogy a mellékelt program PIC24HJ128GP502-re készült, ráadásul RB15-ön van a LED, de talán adhat ötletet. Az ODCB (open drain kimenet) beállítását hagyd ki. Nekem bizonyos okok miatt úgy kellett...

loop_I.png
    
(#) Galilei válasza benjami hozzászólására (») Márc 20, 2009 /
 
köszi már nézem is
(#) szilva válasza watt hozzászólására (») Márc 20, 2009 /
 
Ez egy full lineáris szervezésű programnál hasznos is lehet, ám ahol elágazások vannak, ott nagyon figyelni kell, hogy milyen ágról érkezik a progi!

Esetleg kellene még egy makró, ami "meghatározhatatlan"-ra állítja a belső lapmutatót, ezáltal azt kiváltva, hogy a legelső bankváltó makró mindenképpen az összes bankváltó bitet használja. Ezt a meghatározhatatlanra állító makrót kellene olyan címkék után használni, ahová a program futása során több helyről kerülhet a vezérlés, valamint szubrutinok elején, illetve szubrutinhívások után is. De lehet, hogy valamit még így is kihagytam
(#) Galilei válasza benjami hozzászólására (») Márc 20, 2009 /
 
NYERT!

köszi a segítséget, elindult
(#) trudnai válasza Hp41C hozzászólására (») Márc 20, 2009 /
 
Idézet:
„Az InitBank -nak nincs kód vonzata - a fordító eltárolja, hogy mi volt az utoljára használt.”


Ez nyilvan valo es ez igy jo, ambar nem szerencses lkeverni a BANKSEL makrot es egy ehhez hasonlo bank szelekcios makro gyujtemenyt mert az eredmeny akar hibas kod is lehet. Szoval tekintsuk az alabbi egyszeru 'nyomkovetest':
  1. InitBank PORTA
  2. > sel_bank=PORTA (b'0xxx xxxx') ; bank0
  3.     ...
  4.  
  5. Cimke1
  6.     SelectBank TRISA
  7. > if ((b'0xxx xxxx' ^ (b'1xxx xxxx')) --> b'1000 0000' ---> bemegy az IF agba, felesleges utasitas
  8. > sel_bank=TRISA (b'1xxx xxxx') ; bank1
  9.     ...
  10.     goto    Cimke1
  11.  
  12. Cimke2
  13.     SelectBank TRISB
  14. > if ((b'1xxx xxxx' ^ (b'1xxx xxxx')) --> b'0000 0000' ---> NEM megy be az IF agba, hibas cimre fog mutatni!
  15. > sel_bank=TRISB (b'1xxx xxxx') ; bank1
  16.     ...
  17.     SelectBank PORTB
  18. > sel_bank=PORTB (b'0xxx xxxx') ; bank1
  19.     ...
  20.     goto    Cimke2

Ezert kell a cimkek utan feltetlen egy resetBank ami kikenyszeriti, hogy a legkozelebbi SelectBank-nal mindenkeppen tortenjen bank szelekcio - sot olyankor sokkal jobb ha BANKSEL makrot hasznaljak (a makrobol, nem kivulrol!) mivel a bank allapota nem nyilvanvalo es tobb, mint ket bank eseteben jobb az ovatossag...
Következő: »»   437 / 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