Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   415 / 1320
(#) csiefjancsi hozzászólása Feb 23, 2009 /
 
Sziasztok.
Segítséget szeretnék kérni: adva van egy 16F690 és egy TCN 75 AV hőméröszenzor, a két eszközt oshonos basicban szeretném összeilleszteni I2C vonalon és a az értéket egy LCD-re kiíratni. A vonali felhúzóellenállások: 2X4,7k táp felé. A szenzor 1.5 méteres árnyékolt kábellel csatlakozik a panelhoz. Már mindent kipróbáltam az összes leírást meg mindent elolvastam az I2C-ről de nem bírok vele. Ez lenne életem első I2C-s vezérlése... lehet hogy ez a baj??? Tudom hogy Basic így meg úgy de egyenlőre ez megy... .

Ha valaki tud egy jó linkel, vagy valami ötlettel-megoldással az légyszi segítsen mert elakadtam.

Előre is köszönöm !!
(#) MPi-c válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Keress ebben a topikban az "I2C"-re! Sokszor volt róla szó, hogy nem ekkora távolságra van kitalálva, de ettől még működhet. (Nekem pl. 2 m-es vezetékkel is ment.) Egyébként a 1,5 m-es kábel helyett rövidebb, néhány centis kábellel próbáltad?
(#) shep válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Basic-ben nem vagyok járatos, így csak tanácsokat tudok adni.
Érdemes lenne egy oszcilloszkóppal megnézni a jelet, mert ilyen távolságon már lehetnek problémák a jel minőségével, esetleg mind a két oldalon kell felhúzó ellenállás és lezáró ellenállásra is szükség lehet a jel visszaverődése miatt. Esetleg próbáld meg először kisfrekvencián a kommunikációt, mundjuk 10-20 kbit/sec-el. De az is lehet, hogy a protokolban van valami hiba.
(#) csiefjancsi válasza MPi-c hozzászólására (») Feb 23, 2009 /
 
Szia!

Még nem , de nemsokára kifogom mert gyanusan semmire sem reagál!
(#) MPi-c válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Hát, akkor rajta, mert a hosszabb vezeték kérdése, csak úgy oldható meg, ha egyébként is biztosan működik
(#) icserny válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Jó lenne látni a konkrét kapcsolást, mert az I2C vezetékeken kívül van még néhány bekötni való láb...
S a program hogy néz ki?

TCN75A.jpg
    
(#) szilva válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Az ilyen kommunikációt mindig úgy kell tesztelni, fejleszteni, hogy a tudottan problémás elemet (jelen esetben a hosszú vezetéket) ki kell iktatni. Ha már jól működik a pár centisre lerövidített vezetékkel, akkor ki lehet próbálni, hogy mit szól a hosszúhoz.

Majd ha már csak olyan problémákat látsz, amik egyértelműen a hosszú vezetékből adódnak, akkor kell elkezdeni gondolkozni azon, hogy ki lehet-e küszöbölni ezeket, és ha igen, akkor mivel (pl. a sebesség drasztikus csökkentése, vonalmeghajtók alkalmazása, stb.).
(#) trudnai válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Szia,

Linket gondolom nem tudnank ujat mutatni mert nyilvan a googlin mar tul vagy es amit az nem hoz ki az valoszinuleg vagy papir formaban van vagy nem is erdemes elolvasni

Viszont ahogy icserny emlitette volt jo lenne a kapcs rajzot es a forrast latni - hiaba basic, attol meg az inicializalgatasok ugyanugy mennek - hacsak nem hasznalsz valami elore megirt konyvtari fuggvenyt, de akkor meg az a resz nyilvan mukodnie kell...
(#) csiefjancsi válasza szilva hozzászólására (») Feb 23, 2009 /
 
Szia!

Hát kipróbáltam 10cm- es vezetékkel, és semmi sem változott, most sem működik!
Mint említettem ez lenne az első I2C vezérlés és nem is értek ehhez annyira, ezért kipróbálás szintjén az Oshon oldalán találtam demó dolgokat és ezeket próbáltam ki mindenféle módban. A fent icserny által mutatott adatlap bekötése alapján. Íme az egyik példa program:
Symbol scl = PORTB.6
Symbol sda = PORTB.4

Dim addr As Word
Dim data As Byte

For addr = 0 To 5
Lcdcmdout LcdClear
data = 255 - addr
I2CWrite sda, scl, 0xa0, addr, data
Lcdout "Write To EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr

For addr = 0 To 5
Lcdcmdout LcdClear
I2CRead sda, scl, 0xa0, addr, data
Lcdout "Read From EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr
(#) MPi-c válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Gyanítom, hogy ez kód részlet eeprom írást és olvasást végez, ez nem lesz jó a szenzorhoz! Meg kell nézni a szenzor adatlapját, hogy hogyan kell a szenzort "üzembe helyezni", majd hogyan kell a hőmérséklet adatokat kiolvasni. TCN75A-val nem foglalkoztam, de az adatlapjával kezdeném!
(#) csiefjancsi válasza MPi-c hozzászólására (») Feb 23, 2009 /
 
Igen ez írás ólvasás. Azt hittem hogy jó lehet az ólvasás része de aztán rájöttem hogy ennél kicsitt bonyolultabb.

Az a baj hogy egyenlőre nem tudom hogyan is kéne elkezdeni, .....
(#) icserny válasza csiefjancsi hozzászólására (») Feb 23, 2009 /
 
Az ajánlott bekötésben a három változtatható címbit fixen 0 lesz, tehát a slave cím 0xa0. Ami a programodban addr, az a regiszter címe. Nem word,hanem byte! Adatból viszont két bájt kellene...

A TCN75A jó bonyolult, szerintem előbb egy minimális célt kellene kitűzni: egy regisztert beírni és visszaolvasni.

Kár, hogy sem az Oshon BASIC-hez, sem a TCN75A-hoz nem értek, így csak az adatlapokat tudom "felolvasni".

Például Tset Pointer (addr=3) beírása:

  1. dim addr as byte
  2. dim data as word
  3. symbol scl = PORTB.6
  4. symbol sda = PORTB.4
  5. addr=3
  6. data=0
  7. I2CWRITE SDA, SCL, 0xA0, ADDR, DATA.HB, DATA.LB


Természetesen DATA valami értelmesebb adat is lehet!
Ha nem megy, lehet alacsonyabb szinten is próbálkozni: az I2CWRITE parancs helyett az alábbi litániát helyettesítsd!

  1. I2CPREPARE SDA, SCL
  2. I2CSTART
  3. I2CSEND 0xA0
  4. I2CSEND ADDR
  5. I2CSEND DATA.HB
  6. I2CSEND DATA.LB
  7. I2CSTOP


A visszaolvasást rád bízom!
(#) csiefjancsi válasza icserny hozzászólására (») Feb 23, 2009 /
 
Köszönöm, ezeket holnap kipróbálom mert így még nem próbáltam!!! Ezek mit jelentenek:

I2CSEND DATA.HB

I2CSEND DATA.LB - mert máshol is láttam már csak nem találtam semmit róla?!
(#) El_Pinyo válasza csiefjancsi hozzászólására (») Feb 24, 2009 /
 
Szia!
Szerintem, egy olyan beépített függvény lehet, amely egy word (2 byte) típusú változót szétszed két darab (felső 8 bit-alsó 8 bit) 1 byte- os részre. Nézdd meg a Help menüt, biztosan benne van!

Amúgy a portokat digitálisra állítottad (ANSEL, ANSELH regiszter) ? Ez is okozhat galibát.

Üdv.
(#) watt válasza csiefjancsi hozzászólására (») Feb 24, 2009 /
 
Idézet:
„Igen ez írás ólvasás. Azt hittem hogy jó lehet az ólvasás része”
(ólvasás = olvasás ! )
Érdekes, hogy mennyire egyszerűnek gondoljátok a dolgokat! Mostanában mindenkinek az ölébe esik minden, mp3, mp4, laptop, stb. aztán ez lesz belőle...
Nem cseszegetni akarlak, de szerintem nem jól kezdted el a PIC-ezést. Ha érdekel mit gondolok a kezdésről, akkor olvasd el az írásomat az oldalamon!
(#) icserny válasza csiefjancsi hozzászólására (») Feb 24, 2009 /
 
Idézet:
„Ezek mit jelentenek: I2CSEND DATA.HB I2CSEND DATA.LB?”


Az I2CSEND parancs hatására a master kiküld egy bájtot a slave-nek.

A .HB és az .LB pedig a WORD típusú változó magasabb, ill. alacsonyabb helyiértékű bájtját jelenti.

De a hasonló kérdések helyett érdemes volna elolvasni az Oshon BASIC Rererencia Kézikönyvét, mert én sem tudok anál többet, mint amit onnan elolvasok. Akkor meg minek várnál arra, amíg elolvasom?

High and low byte of a word variable can be addressed by .HB and .LB extensions. Individual bits can be addressed by .0, .1, ..., .14 and .15 extensions.
(#) delmur82 hozzászólása Feb 24, 2009 /
 
Sziasztok!

Most programozok először PIC16F877 - et. A soros kommunikációt próbálom feléleszteni. Nem nagyon megy. A PIC működik csak ez a rész nem megy. PIC16F628 -al szépen működött. Ezzel a kis progival próbálom. Mit ronthatok el?
  1. LIST P=16F877
  2.                 #INCLUDE P16F877.inc
  3.  
  4. ;konfigurálás
  5.                 __CONFIG  _CP_OFF & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _XT_OSC
  6.                 ;XT mód;
  7.                 ;Watchdog: ki
  8.                 ;Power on reset: ki
  9.                 ;Kódos védelem: ki
  10.  
  11.         ORG     0x00           
  12.         GOTO    START
  13.  
  14. ;Változóblokk
  15.         CBLOCK  0x20
  16.        
  17.        
  18.         ENDC
  19.         ;Változóblokk vége
  20.  
  21. ;---- INICIALIZÁCIÓS RÉSZ ----
  22. START
  23.         BSF     STATUS, RP0                             ; Select Bank 1
  24.         MOVLW   b'10111111'                                     ; PORTC 6. BIT KIMENET (Tx), TÖBBI BEMENET
  25.         MOVWF   TRISC
  26.         CLRF    TRISD                                           ; PORTD ÖSSZES KIMENET
  27.         BCF     STATUS, RP0                                     ; Bank0
  28.  
  29. ; Baud Rate beállítás kezdete********************************************************************************
  30.  
  31. ; Boot Baud Rate = 9600, No Parity, 1 Stop Bit
  32.  
  33.     BSF         STATUS,RP0                                      ; BANK 1
  34.         MOVLW   0x19                                    ; 0x19=9600 bps (0x0C=19200 bps)(4 MHz)
  35.     MOVWF       SPBRG                                           ; 0x14=9600 bps (3,2768 MHz)
  36.     MOVLW       b'00100100'                             ; brgh = high (2)
  37.     MOVWF       TXSTA                                   ; enable Async Transmission, set brgh
  38.  
  39.     BCF         STATUS,RP0                              ; BANK 0
  40.  
  41.     MOVLW       b'10010000'                             ; enable Async Reception
  42.     MOVWF       RCSTA
  43.  
  44. ; Baud Rate beállítás vége***********************************************************************************
  45.  
  46. ELEJE
  47.         BSF             PORTD,2
  48.         MOVLW   'Z'
  49.         CALL    KULD   
  50.         GOTO    ELEJE
  51.        
  52. KULD                                                                       
  53.         MOVWF   TXREG                           ; send data in W
  54.         BSF             STATUS,RP0                      ; BANK 1
  55. WtHere
  56.         BTFSS   TXSTA,TRMT                      ; (1) transmission is complete if hi
  57.     GOTO        WtHere
  58.         BCF     STATUS,RP0                      ; BANK 0
  59.     RETURN
  60.        
  61.  
  62.  
  63.         END
(#) MPi-c válasza delmur82 hozzászólására (») Feb 24, 2009 /
 
Szimulátorban (mondjuk MPLAB) próbáltad? Mert ha ott működik (működik!), akkor az áramkörödben keresd a hibát! Arról nem írtál, hogy PC-n, teminál programmal vizsgálgatod-e, mert akkor az összeköttetést és a terminál beállítását is meg kell nézni.
(#) delmur82 válasza MPi-c hozzászólására (») Feb 24, 2009 /
 
Szia!

Ez egy kipróbált formula mondhatni. Egy másik programomból copyztam át. Ott egy PIC16F628 kommunikál a PC - vel. Gyönyörűen megy. Gondoltam erre a PIc - re is jó lessz. Viszont lassan most önti el az agyamat a vér. Most nézem hogy ezek a ma..ák 40 Mhz - es oscit küldtek 4 Mhz -es helyett én meg feltétel néklül beforrasztottam. ó hogy aza. Viszont a PIC érdekes módon megy (a portd,2 - ön lévő led világít.) ez hogy lehet? PIC16F877 - 04/IP a kontroller.
Egyébként igen terminál progival próbálgatom.
Még egy kérdés. A 16F877 melyik táplábait kell bekötni? mert kettő van úgyértem két Vdd és két Vss
(#) watt válasza delmur82 hozzászólására (») Feb 24, 2009 /
 
Javaslom a kereső használatát, mert több alkalommal lett soros példaprogram becsatolva.
Egyébként kezd egész jó formája lenni a programodnak!

Mindegyik táplábat be kell kötni és szűrni!
(#) MPi-c válasza delmur82 hozzászólására (») Feb 24, 2009 /
 
Idézet:
„Viszont a PIC érdekes módon megy (a portd,2 - ön lévő led világít.) ez hogy lehet?”


  1. ELEJE
  2.   BSF    PORTD,2       <-----
  3.   MOVLW  'Z'
  4.   CALL  KULD  
  5.   GOTO  ELEJE

Te írtad oda, bár sok értelme így nincs...
(#) delmur82 hozzászólása Feb 24, 2009 /
 

Tudom hogy én írtam, csak arra céloztam hogy 40 Mhz - ről is megy ? A proci csak 4 Mhz es. Amúgy a program szerinted működőképes?
Viszont a csak az egyik tápot kötöttem be. Ez is lehet a hiba?
(#) MPi-c válasza delmur82 hozzászólására (») Feb 24, 2009 /
 
Igen, működőképes. Mindkét oldalon kösd be a tápot és tegyél oda egy-egy 100n-os kondit.
(#) delmur82 válasza MPi-c hozzászólására (») Feb 24, 2009 /
 
Mindkét táp bekötve. Természetesen igy sem megy. Akkor gondolom már csak a rossz kvarc maradt. Otthon kicserélem 4 Mhz - esre. Remélem úgy jó lessz
(#) trudnai válasza delmur82 hozzászólására (») Feb 24, 2009 /
 
Idézet:
„Tudom hogy én írtam, csak arra céloztam hogy 40 Mhz - ről is megy ?”


Kerdes mennyivel rezeg (vagy gerjed) az a 40MHz-s kvartz... csereldd le mielobb! Es ha azt akarod megnezni a PIC megy-e, akkor ne csak gyujtsd ki a LED-et, hanem villogtasd is. Erdemes egy apro firmware-t csinalni, ami egy portot (lehetoleg 8 biteset) inkrementalgat. Ennek kovetkezteben kulonbozo frekvenciakkal billegnek a port labak... konnyu ellenorizni a PIC valoban fut-e, ill milyen frekivel jar...
(#) delmur82 hozzászólása Feb 24, 2009 /
 
Nem találom az adatlapban hogyan kapcsolom át a 16F877 - et belső oscira vagyis hol adom meg az orajelét?
(#) trudnai válasza delmur82 hozzászólására (») Feb 24, 2009 /
 
Lehet azert, mert a 877-esnek nincs belso oscillatora?
(#) potyo válasza delmur82 hozzászólására (») Feb 24, 2009 /
 
Olyat találtál-e az adatlapban, hogy van benne belső oszcillátor?
(#) delmur82 válasza potyo hozzászólására (») Feb 24, 2009 /
 
nemigazán. Akkor marad a csere. Jól megszívtam hogy nem néztem meg. 4 Mhz eset rendeltem és naivan azt hitem azt is kaptam.
(#) delmur82 hozzászólása Feb 24, 2009 /
 
Hogyan tudok kódot úgy beszúrni hogy olyan szépen nézzen ki mint a tiétek? Szép szines, rendezett sorszámozott. Álltalában MPLAB - ból copizom a kódrészleteket de nehezen tudom egy sorba rendezni, mindig elcsúszik.
Következő: »»   415 / 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