Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   666 / 1320
(#) trudnai válasza icserny hozzászólására (») Feb 7, 2010 /
 
Idézet:
„Mellesleg kis trükközéssel a PIC12F Timer0 is használható 16 bites timerkén”


Na jol van mar Akkor mar inkabb vesz az ember egy 16F1827-eset es annak van 4db 8 bites es egy db 16 bites timere, a 8 bitesekkel megszakitassal lehet novelni a bitszamot.

Ill. ahogy emlitetted a 24H-s csaladbol kivalasztani egy megfelelot...
(#) icserny válasza trudnai hozzászólására (») Feb 7, 2010 /
 
Idézet:
„kis trükközéssel a PIC12F Timer0 is használható 16 bites timerként”

Ja, ezt csak azért említettem, hogy jelezzem: nem kell feltétlenül 5 db PIC12F az 5 db. 16 bites timerhez, mert egynek ott a Timer1, a másiknak meg a Timer0.

A PIC24 azért nyűgös egy cseppet, mert 3,3 V-os és kicsi a kimenetek terhelhetősége (~4 mA). Így egy kicsivel körülményesebb a külső áramkörökhöz történő illesztése.
(#) raiman válasza trudnai hozzászólására (») Feb 7, 2010 /
 
Köszönöm az infót
(#) Attila86 hozzászólása Feb 7, 2010 /
 
Van olyan 18F-es PIC, aminek két PWM kimenete van?
(#) vicsys válasza Attila86 hozzászólására (») Feb 7, 2010 / 1
 
A MAPS segít.
Bővebben: Link
(111 MCHP Parts found )
(#) naviktor válasza icserny hozzászólására (») Feb 7, 2010 /
 
Idézet:

Ezt majd akkor veszem komolyan,ha bemutatod a forráskódot, meg a csinált #include fájlt!

Persze nem én csináltam, úgy értettem, hogy a progi könyvtárába bele kellett csempésznem egy delay.h filet és ezt includolni. Tény így most működik minden, ahogy szerettem volna.
(#) icserny válasza Attila86 hozzászólására (») Feb 7, 2010 /
 
Idézet:
„Van olyan 18F-es PIC, aminek két PWM kimenete van?”

Legjobb tudomásom szerint annak is pont kettő van, amit most építesz be a laminálódba.
(#) bubu hozzászólása Feb 7, 2010 /
 
Sziasztok!
Egy olyan kérdésem lenne, hogy írtatok-e már olyat, h lekérdezitek a PIC I2C-s eszközeit?
Én próbálkozok ezzel, mert nem látok egy szenzort, de csak annyi van, hogy 0-tól 255 ig elszámol és UART-on ezt kiírja.
Ha van ötletetek mit rontottam el azt szivesen fogadom.
A kódrészlet:
  1. for (j=0; j<=0xFF; j++)
  2. {      
  3.         //              for(i=0; ((i<4&&SSPCON2bits.ACKSTAT)||i==0); i++)
  4.         //      {
  5.                         IdleI2C2();
  6.                         WriteI2C2(j);
  7.                         IdleI2C2();                     //varas
  8.                         if (SSPCON2bits.ACKSTAT==0)
  9.                                 {
  10.                                 INIT_USART();
  11.                                 Delay (1000000);
  12.                         //      putrs1USART("hali")     ;
  13.                                 ret = sprintf(buff, "    %d    ", j);
  14.                                 puts1USART (buff);
  15.                                 Delay (1000000);
  16.                                 Close1USART();
  17.                                                        
  18.                                 }
  19.                         else
  20.                                 {}
  21.                                                        
  22. //              }
  23. }
(#) icserny válasza naviktor hozzászólására (») Feb 7, 2010 /
 
Idézet:
„bele kellett csempésznem egy delay.h filet és ezt includolni”

Kelleni ugyan nem kellett, de megteheted...
Mivel nem csatoltál be egy mintaprogramot sem, csak találgatni tudok: ez valamelyik, az Interneten keringő delay.h és delay.c, amelyik új függvényeket vezet be? (pl. DelayMs() ) Bővebben: Link

A kapott mintaprogramnál egyszerűbb lett volna a __delay_ms(250) függvényhívást két részre bontani, így:

  1. __delay_ms(150);
  2. __delay_ms(100);


s akkor nem kell(ett volna) sem inkludálni sem deklinálni...
(#) icserny válasza bubu hozzászólására (») Feb 7, 2010 /
 
Idézet:
„Ha van ötletetek mit rontottam el”

A kérdést azzal rontottad el, hogy kihagytad, hogy milyen PIC-ről és fordítóról van szó. (Vagy a topikot tévesztetted el, s ezt a Parafenomének keresetetnek c.topikba szántad )

Ha PIC18-ról és MCC18-ról van szó, akkor nézd meg a könyvtári függvények forrását! Úgy látom, hogy pl. a WriteI2C2() függvény már tartalmazza az IdleI2C2(); hívást és a SSP2CON2bits.ACKSTAT vizsgálatát, tehát az előbbit fölöslegesen adod ki, az utóbbit viszont a WriteI2C2() függvény visszatérési értékeként kapod meg (0, vagy -2).

Azt most nem látom át, hogy a WriteI2C2(j); mire jó. Nem csak az érvényes címeken kellene végigfuttatni?

Nem kellene egy StartI2C() az írási próbálkozás előtt, egy StopI2C2() meg utána?
(#) bubu válasza icserny hozzászólására (») Feb 7, 2010 /
 
MCC18 fordító és PIC18F46J50-es kontroller.
Azt szeretném ezzel elérni, hogy megtudjam milyen cimeken vannak a szenzorok, mert ami az adatlapban van, azzal nem látom (0x39 nekem nem tetszik, mert shiftelni kell, de akkor 0x74 és akkor szintén nem látom. Adtak más cimeket is,de azt szeretném, ha láthatnám , hogy milyen eszközök vannak.)
(#) icserny válasza bubu hozzászólására (») Feb 7, 2010 /
 
Idézet:
„MCC18 fordító és PIC18F46J50-es kontroller.”

Ok, akkor eltaláltam...

Ami a címzést illeti: nézd meg ezt az oldalt!
A hullámformából látszik, hogy kell egy idle és egy start szakasz, ezután jöhet egy bájt küldése, az ACK figyelése és a stop bit küldése. Nálad a start és a stop feltétel hiányzik, így semmilyen címre sem fog reagálni semmi!

Ami a kiküldött adatbájtot illeti: elvileg 7 bit van a címzésre, a 8. bit az R/W parancsbit. A 7 db címbit egyes kombinációi azonban fenntartottak, azokat ki kellene hagynod!
(#) bubu válasza icserny hozzászólására (») Feb 7, 2010 /
 
Köszönöm a választ!
Megpróbálom leprogramozni...
(#) trudnai válasza bubu hozzászólására (») Feb 7, 2010 /
 
Idézet:
„ami az adatlapban van, azzal nem látom (0x39 nekem nem tetszik, mert shiftelni kell, de akkor 0x74 és akkor szintén nem látom. Adtak más cimeket is,de azt szeretném, ha láthatnám , hogy milyen eszközök vannak.)”


Ha azzal sem latod ami az adatlapban van, es ezzel a scannelos modszerrel sem, akkor nyilvan a programoddal van a gond es nem a cimzessel

Azt pedig vegkepp nem ertem, hogy hogy-hogy nem tudod, hogy milyen eszkozeid vannak? Valamit hackelsz?
(#) bubu válasza trudnai hozzászólására (») Feb 8, 2010 /
 
Űdv,
Nem hekkelek...
Egy olyan kütyüt probálok összehozni ami kezel I2C-s szenzorokat és van egy SM buszos szenzor is.
Az egyik hőmérő TMP101, ezt látom, tudom kezelni is.
De van egy fényszenzor, amit nem tudok, Ez TCS3414-es.
Ezért szeretném lekérdezni milyen működő címek vannak...
  1. for (j=0; j<=0xFF; j++)
  2.                 {      
  3.         //              for(i=0; ((i<4&&SSPCON2bits.ACKSTAT)||i==0); i++)
  4.         //                              {
  5.                                                 StartI2C2();
  6.                                                 IdleI2C2();
  7.                                                 WriteI2C2(j);
  8.                                                 IdleI2C2();                     //varas
  9.                                                 if (SSPCON2bits.ACKSTAT==0)
  10.                                                         {
  11.                                                         INIT_USART();
  12.                                                         Delay (1000000);        //      putrs1USART("hali")     ;
  13.                                                         ret = sprintf(buff, "    %d    ", j);
  14.                                                         puts1USART (buff);
  15.                                                         Delay (1000000);
  16.                                                         Close1USART();
  17.                                                         StopI2C2();
  18.                                                         }
  19.                                                 else
  20.                                                         {StopI2C2();}
  21.                                                        
  22.         //                              }
  23.                 }

Sajnos nem megy így sem...
(#) Husla hozzászólása Feb 8, 2010 /
 
Sziasztok!Az lenne a kérdésem hogy mennyire bajos hálózatról trafo nélkül egy PIC12FXXX-et táplálni,úgy hogy legyen ~12V -is egy kis relenek?Mennyire lenne gond a zavarokkal?(pl:lámpa kapcsolgatás a közelben)
Jó lenne egy rajz,vagy vélemény,hogy megéri e szenvedni vele.5db-ot építenék.
(#) potyo válasza Husla hozzászólására (») Feb 8, 2010 /
 
Ha viszonylag állandó a terhelés, akkor nem probléma. Soros kondenzátor az üzemi áram +25%-ra méretezve, majd graetz, puffer, utána valami párhuzamos szabályzó, mint pl. TL431, és arról mehet a kontroller. Namost az a gond, hogy a relé jóval nagyobb áramot fog húzni, mint a kontroller. Nem lehetne triakot használni? Annak a gyujtását lehetne szinkronizálni a hálózatra, és akkor csak kis impulzusokban lehetne nagyobb áram.
(#) icserny válasza bubu hozzászólására (») Feb 8, 2010 /
 
Idézet:
„0x39 nekem nem tetszik, mert shiftelni kell, de akkor 0x74 és akkor szintén nem látom.”


Nem csodálom! Ugyanis 0x39 * 2 = 0x72 (nem 0x74!!!)

  1. StartI2C2();
  2.   IdleI2C2();
  3.   WriteI2C2(j);
  4.   IdleI2C2();               //varas
  5.  if (SSPCON2bits.ACKSTAT==0)


Inkább így:
  1. IdleI2C();  
  2.      StartI2C();
  3.  ack_status =  WriteI2C( ControlByte );
  4.      StopI2C();
  5. if(ack_status==0) {blabla.... }


A for ciklusod előtt, ugye, konfiguráltad az I2C2 csatornát? (OpenI2C2() )

(#) Husla válasza potyo hozzászólására (») Feb 8, 2010 /
 
Sima 7805-el nem menne a dolog?A triak szerintem megfelelne,60w-os elektronikus transzformatorokat kapcsolna...
(#) potyo válasza Husla hozzászólására (») Feb 8, 2010 / 1
 
Nemjó, mert ha leveszed róla a terhelést, akkor a 7805 előtt felszalad a feszültség és eldurran a 7805. Vagy ha a 7805 elé teszel valamit, ami megfogja a feszültséget 10V körül, akkor az is jó lesz.
(#) sucuka válasza bubu hozzászólására (») Feb 8, 2010 /
 
Üdv!

Csak nem KNX-re fejlesztesz valamit?
(#) The_Saint hozzászólása Feb 8, 2010 /
 
Üdv!

A 16F876-tal van egy kis gondom. Nem igazán tudom, hogy mi lehet a probléma. Az eeprom rész összesen 2 bájt-ját akarnám olvasni és ha nem megfellő az érték, akkor írni. Na most az első renben lezajlik, a 2. olvasás is, de a második írás olyan szinten kiakasztja a PIC-et, hogy a program el sem éri a végét (végtelen loop) ... a bankváltó utasításokat 10X leellenőriztem, elvileg nem a bankváltással van a gond.

Hozzászólásokat előre is köszönöm!

Üdv
The_Saint
(#) smrtln hozzászólása Feb 8, 2010 /
 
Sziasztok!

Lenne egy kérdésem az, hogy a PIC-et egy régi PC táppal szeretném ellátni 5v-tal és ha jó tudom akkor a PC táp tud 12v-ot és 5v-ot, úgye jól gondolom?

smrtln
(#) sucuka válasza smrtln hozzászólására (») Feb 8, 2010 /
 
Szia!
Igen jól tudod, sőt -12V-ot, -5V-ot és +3.3V-ot is tud.
Ezen kívül ha ATX-es a táp akkor készenléti üzemben is ad +5V-ot.
(#) potyo válasza The_Saint hozzászólására (») Feb 8, 2010 /
 
Kód?
(#) potyo válasza smrtln hozzászólására (») Feb 8, 2010 /
 
Jól gondolod. De a PIC fogyasztásához felesleges a PC táp, kell egy egyszerű 7-12V-os dugasztáp, és arra egy 7805 stabilizátor és persze a hozzávaló kondenzátorok. Felesleges a nagy tápot zörgetni ilyen kis teljesítményre, ráadásul annak ilyen kis terhelésnél rossz a hatásfoka is. Esetleg ha ATX a táp, akkor a készenléti 5V-os ágát használhatod.
(#) smrtln válasza sucuka hozzászólására (») Feb 8, 2010 /
 
Sziasztok!

Köszönöm a válaszokat, akkor jól gondoltam.

"Esetleg ha ATX a táp, akkor a készenléti 5V-os ágát használhatod."

Ja és potyo megtudnád mondani melyik az a készenléti ág és hogy kell használni azt?

smrtln
(#) The_Saint válasza potyo hozzászólására (») Feb 8, 2010 /
 
Szia!

szinte a gyári írá olvasás rutinok:
write_eeprom
bcf STATUS,RP0 ; Bank 3
bcf STATUS,RP1
movf eepdat,w
banksel EEDATA
movwf EEDATA ; write
movf eepadr,w ; Address to
movwf EEADR ; write to
banksel EECON1 ; Bank 3
bcf EECON1, EEPGD ; Point to Data memory
bsf EECON1, WREN ; Enable writes
bcf INTCON, GIE ; if already enabled,
movlw 0x55 ; Write 55h to
movwf EECON2 ; EECON2
movlw 0xAA ; Write AAh to
movwf EECON2 ; EECON2
bsf EECON1, WR ; Start write operation
bsf INTCON, GIE ; if using interrupts,
wtw
btfsc EECON1, WR ; Wait for
goto wtw ; write to finish
banksel PORTA
return


read_eeprom
movf eepadr,w
banksel EEADR
movwf EEADR ; to read from
banksel EECON1
bcf EECON1, EEPGD ; Point to Data memory
bsf EECON1, RD ; Start read operation
banksel EEDATA
movf EEDATA,w ; W = EEDATA
banksel PORTA
return


és a két bájt hoz tartozó cucc:
get_language_code
movlw 0xFF
movwf eepadr
call read_eeprom
movwf language
movf language,w
sublw 0x04
btfss STATUS,C
goto set_language
return
set_language
clrf language
bsf language,0
movf language,w
movwf eepdat
movlw 0xFF
movwf eepadr
call write_eeprom
return

get_unit_code
bcf STATUS,C
movlw 0xFE
movwf eepadr
call read_eeprom
movwf unit
movf unit,w
sublw 0x02
btfss STATUS,C
goto set_unit
return
set_unit
clrf unit
movf unit,w
movwf eepdat
movlw 0xFE
movwf eepadr
call write_eeprom
return

a jelenség pontosan a következő:
minden rendben, addig amíg a második íráshoz nem kezd, de ha igen akkor az nem zajlik le és az első bájtot is nullára írja

hát ennyi...röviden
(#) The_Saint válasza potyo hozzászólására (») Feb 8, 2010 /
 
Huu... bocs, ez hosszu lett, legközelebb csatolom inkább....sorry
(#) The_Saint válasza potyo hozzászólására (») Feb 8, 2010 /
 
Kis módosítás...nem kinullázza, hanem az FE adatát írja az FF helyre... mintha az EEADR nem módosulna....
Előre is köszönöm ha megfejti valaki....

Üdv!
Következő: »»   666 / 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