Fórum témák

» Több friss téma
Fórum » I2C assembly kód 16F877-hez
 
Témaindító: cassis, idő: Jún 30, 2009
Témakörök:
Lapozás: OK   3 / 4
(#) Hp41C válasza attila066 hozzászólására (») Jún 6, 2010 /
 
Szia!

  1. SETUP_I2C_SLAVE
  2.  BANKSEL TRISC
  3.  bsf TRISC,3
  4.  bsf TRISC,4
  5.  BANKSEL SSPADD
  6.  MOVLW B'10100000'
  7.  MOVWF SSPADD
  8.  BANKSEL SSPCON ; BANK0
  9.  MOVLW B'00100110' ;SCL,SDA INPUT- 7BITES SLAVE
  10.  MOVWF SSPCON
  11.  BANKSEL PIE1
  12.  BCF PIE1,SSPIE
  13.  BANKSEL INTCON
  14.  BCF INTCON,PEIE
  15.  BCF INTCON,GIE
  16.  BANKSEL PIR1
  17.  BCF PIR1,SSPIF
  18.  BANKSEL SSPCON



Érdemes elolvasni az Errata -t is...
(#) attila066 hozzászólása Jún 6, 2010 /
 
Olvasom, de ha erre gondoltál ,
BANKSEL TRISC
bsf TRISC,3
bsf TRISC,4
ez megvan oldva az IO_setupban, csak azt nem másoltam be neked. szerk. Látom megfordítottad az sspcont- és az addresst. Kipróbálom. szerk2 : Kipróbáltam, a címzés ugyanúgy még nem jó sajnos
(#) attila066 hozzászólása Jún 6, 2010 /
 
Rájöttem a hibámra! Az hogy azt jelzi a LED -em hogy kapja az ack-t az is lehet hogy a slave folyamatossan ack-z, ezért egy jelző ledet beraktam a masterbe, írásnál villogjon, de nem. Tehát a mester a foglaltság jelző ciklusban pörög. Így valószínűleg az a hiba oka hogy a slave lenttartja a vonalakat. Csak azt nem tudom hogy miért?!
(#) Hp41C válasza attila066 hozzászólására (») Jún 7, 2010 /
 
Szia!

Az órajel nyújtásával csinál időt a cím / adat feldolgozására (íras / olvasás ellenőrzésével, eszközön belüli cím dekódolással, adat elővételével olvasáskor). Az SSPCON CKP bitjét 1-re állítva lehet jelezni, hogy kész az újabb adat fogadására / küldésére.
(#) attila066 hozzászólása Jún 7, 2010 /
 
Kicsit átalakítottam a slave main programját, most így néz ki:
I2C_MAIN
BSF PORTC,1
BANKSEL SSPSTAT
BTFSC SSPSTAT,0
GOTO I2C_MAIN
BANKSEL SSPCON
BTFSC SSPCON,6
GOTO I2C_MAIN
BANKSEL SSPBUF
MOVF SSPBUF,W
BANKSEL SSPSTAT
BTFSC SSPSTAT,0
GOTO $-.1
BANKSEL PIR1
BCF PIR1,3
banksel SSPCON
bcf SSPCON,SSPOV

banksel SSPCON
BSF SSPCON,4
GOTO I2C_MAIN

legalábbis nekem ez jött le hogy így kéne hogy legyen a figure 9-6-ból. De sajnos így sem jó elmegy egyből a master ack failre Kicsit megroskadtam tegnap még hajnali 1 ig ezt nyűztem h működjön de nem. A Te algoritmusod sem működik úgy sem hogy a végére odaraktam a CLK emelést. (tegnap amúgy én is felfedeztem ezt a clk-sat de aztán azt hittem az csak adásnál van mert az adás ábrájában volt csak)
(#) attila066 hozzászólása Jún 7, 2010 /
 
Hp41C - valami segítséget tudnál még adni? minél többet olvasok az i2c-ről annál többet tudok róla, de még így is rám férne a segítség, tapasztalatlan vagyok. Köszi előre is
(#) Hp41C válasza attila066 hozzászólására (») Jún 8, 2010 /
 
Szia!

A gyári honlapon ezt találtam.
(#) Hp41C válasza Hp41C hozzászólására (») Jún 8, 2010 /
 
Még ez is hasznos lehet...
(#) pagaby válasza attila066 hozzászólására (») Jún 8, 2010 /
 
(#) attila066 hozzászólása Jún 8, 2010 /
 
Köszönöm szépen a segítségeteket! A Legelső link amit küldtél Hp41C Az nagyon jó, nemsokára be is égetem átalakítva a progit, úgylátom a sspstat alapján kell kiválasztani hogy miket kell törölni.. Fifikásnak tűnik hogy van 5 állapota (szóal 5 különböző módon kell törölni slave üzemmódban ) pagaby - Köszönöm szépen,de elsősorban a slave a kritikus, a master már megvan
(#) Hp41C válasza attila066 hozzászólására (») Jún 8, 2010 /
 
Szia!

A Microchip fórumot is átnézve találtam egy módosítást az eredeti AN734-hez képest...
(#) attila066 válasza Hp41C hozzászólására (») Jún 8, 2010 /
 
Amúgy az eredeti AN734-est lesem tudom fordítani mert rossz valami az isr vektoroknál most fogom átnézni. De arra fúj az mp lab hogy "felülírom az előző vektorokat".

Szerk. Rájöttem valamire, nekem elég lenne egy olyan progot írnom hogy start stop megszakítást okoz, és akkor elmegy start megszakításnál kiolvassa a regisztert, törli a pir1 ben a if bitet és ennyi!
(#) Hp41C válasza attila066 hozzászólására (») Jún 8, 2010 /
 
Szia!

A reset és az isr között 4 -nél több utasítás van:

org 0x0000 ;Reset
nop ; ICD2 -nek kell
goto init
org 0x0004 ;Interrupt


Szerintem az irány jó volt, nem kellene másfelé keresni a megoldást...
Egy pickit2 jól jönne, fel lehetne venni a jelalakokat. A PGC és PGD vonalon (a pickit2-ben) levő lehúzások miatt egy-egy meghajtót (74hc125) kellene alkalmazni.
(#) attila066 hozzászólása Jún 8, 2010 /
 
Szia!

Ez a gyári program részlet :
STARTUP code 0x00
nop
goto Startup ;
nop ; 0x0002
nop ; 0x0003
goto ISR ; 0x0004
PROG code
itt a Startup=init
Nem egy megszakítást írtam már de sajnos nem értem ezt a code-s parancsokat, így nemtudtam átírni a saját szájam ízére a programot:S Az első nop nem az ICD2-miatt kell, hanem a Kónya könyv alapján a debug miatt. Eddig szkóppal mértem a vonalakat, így ha működne a slave megoldás tudnák konkrét jelalakot is mutatni nektek. A mastert már mértem és szépen látni magát a kommunikációt
Jó lenne ha ezt a vektoros problémát amit kimásoltam megtudnánk oldani. Neked lefordult vagy nem nézted?

szerk. udata
WREGsave res 1
STATUSsave res 1
FSRsave res 1
PCLATHsave res 1

A legelső hibát az udata-ra jelzi ki. Nem értem hogy lehet hiba egy "gyárilag" megírt programban:S

Egyszerű lenne átírni az egész progit saját magamnak, mivel nálam csak a 2. eset állhat fent (az 5 közül). Átírom
(#) Hp41C válasza attila066 hozzászólására (») Jún 8, 2010 /
 
Szia!

- Más szelek fúnak már a nagy kapacitású pic-ek miatt...
Ezek a programok már linker scriptet használnak, relokálható kódot fordítanak és a linker dönti el mi hol lesz a memóriában.

- A régi megoldás absolute kódot fordított, már a forrás állományban megadták a memória címeket.

Javítsd ki az elejét és fordíts abszolut kódot:

  1. cblock 0x070
  2.    WREGsave
  3.    STATUSsave
  4.    FSRsave
  5.    PCLATHsave
  6.  endc
  7.  
  8.  org 0x000
  9.    nop ; Szerintem ugyanarról beszélünk: on chip debugger
  10.    goto StartUp
  11.  
  12.  org 0x0004
  13.   goto ISR
  14.  
  15. StartUp
  16. ...
  17.  
  18. ISR
(#) attila066 hozzászólása Jún 8, 2010 /
 
Köszönöm, már újraírtam közben, elvileg működik mindjárt tesztelem. Először én is csak így akartam megoldani mint ahogy Te most csináltad, de fújt a fordító a változók körül.. Így hát megszabadultam pár dologtól

Szerk! SSPCON biteket átírtam, most már csak az a gond a rendszerrel hogy megint lenttarja elvileg a vonalakat a slave:S

i2c_slave.asm
    
(#) attila066 hozzászólása Jún 8, 2010 /
 
Nem megy el megszakításra:S Na szóval itt a javított program. Működése érdekes, mesélem. Van mindkét eszközömön reset gomb. A master bekapcsolás után egyből elkezdene adni ha a busz nem foglalt. de valamiért még mindig ízt csinálja mintha foglalt lenne a vonal:S ha úgy kapcsolom be a slavet hogy folyamatosan resetelem a mastert, akkor a slave elmegy a hibaüzenetre. De kkor nem megy el a hibaüzenetre ha úgy kapcsolom be, hogy a masteron nincs táp. Na akkor ez hogy is van? Ha meg él a Slave, és utána kapcsolom be a mastert akkor a slave el sem megy isr rutinra:S tehát nem érzékeli h jött volna start feltétel, de a vonalat meg foglalja..

i2c_slave.asm
    
(#) Hp41C válasza attila066 hozzászólására (») Jún 8, 2010 /
 
Szia!

Megnéznéd ez mit csinál...

i2c_slave.asm
    
(#) attila066 válasza Hp41C hozzászólására (») Jún 8, 2010 /
 
Ugyan azt csinálja mint az én programom, a helyzet változatlan:S Nem tudom hol leledzik a hiba. Nem okoz megszakítást a start illetve a stop??
(#) attila066 válasza attila066 hozzászólására (») Jún 8, 2010 /
 
A master, a legelső sspstat r_w vizsgálatnál akad meg, és ott pörög végtelenségig:S Nemértem h a slave miért tartj lent a vonalat
(#) Hp41C válasza attila066 hozzászólására (») Jún 9, 2010 /
 
Szia!

Válasszuk ketté a feladatot: - Amíg a master sem jó a slavet nem is lehet mérni.

- Kellene egy I2C illesztésű slave: EEProm, bővítő stb.
- Meg kell nézni, hogy egy vagy két eszközön belüli cím kell neki
- Ez a Master működik mind 1 (PCF8583) mind 2 (24FC1025) eszközön belüli cimmel rendelkező eszközzel (ternészetesen egy cím használata esetén a második elküldését ki kell hagyni). Nem figyeli az ACK-t.
- Meg kell vizsgálni, hogy működik-e nálad is.
- Ha nem, akkor a felhúzásokat ellenőrizni.
- Ha működik, ki lehet egészíteni az ACK vizsgálatával - benne van a kódban csak ki van kommentezve.
- Ha az ACK ellenőrzése is működik, be kell állítani a slave elvárásához (1 cím / 2 cím).
- Most már lehet nézni a slave programot.
- Jó lenne felvenni a jelalakokat. Ha nincs mivel, akkor a slave programot kiegészíteni, hogy az állapot változásokat küldje el az uart-on, amit a pickit2 UART Tool segítségével vagy max232-vel RS232-re konvertálva PC soros vonalával lehet megjeleníteni.

Ha mind a kettőt egyszerre fejlesztjük, akkor továbbra is sötétben tapogatódzunk....
(#) attila066 válasza Hp41C hozzászólására (») Jún 9, 2010 /
 
Szia!

Teljes mértékben igazad van, vettem 3 eléggé "buta" de egyszerű, és olcsó eepromot. Mindhárom Atmel 24C02 Kiegészítettem a programom, egy olvasással,(azt amit itt találtam, illetve ebben a topicban beszéltetek róla) kiszedtem belőle az ACK checkeket, írok bele, kiolvasom, és nem jó a kiolvasott adat. Különben néztem és már a címzésnél sem küld vissza ack-t.. Pedig a címek holt biztosak, a masterrel 1010 000 0 -et címzek tehát írás ugye, és az eepromomon meg 3 láb segítségével betudom állítani a címét, az alapcíme 1010 xxx az összes lábát földrekötöttem, így elvileg a címe 1010 000 megkapja a stabil 5 voltot, a write protect lábát földre kötöttem. De mégsem megy. Felhúzóellenálásokat leellenőriztem, jók. Az eeprom adatlaja. Végtelenül egyszerű eeprom. De mégsem jó valami
(#) Hp41C válasza attila066 hozzászólására (») Jún 9, 2010 /
 
Szia!

- Az EEProm elég lassan ír... Kivártad az 5ms-et.
- Mivel programozod a pic-eket?
- Csak az EEProm volt a buszon?
- Jó lenne összeállítani a mérést...
(#) attila066 válasza Hp41C hozzászólására (») Jún 9, 2010 /
 
Szia!

Igen kivárom az 5 ms-et bőven többet is. ICD2-vel programozom, most ugye csak a mastert. Igen csak az eeprom van a buszomon. Mérést mindjárt összerakom.
Valószínű hogy a master prograban a hiba, de akkor hogy működhetett másnak?

Mérés A clk kicsit elvan szállva, mint konstans úgy mutatkozik kb. Böngészem aprogramot hogy miért.
(#) attila066 hozzászólása Jún 9, 2010 /
 
Pontosítok, a clock az ami kiválóan működik, ezzel ellentétben az SDA vonal egy konstans magas értéken áll ez hogy lehet? ha látom a clockon a 3 küldött bájtot, az sda , meg áll.

Szerk. Attól tényleg tönkremehet maga a port hogy ha nemvolt összeföldelve a két egység? Azaz össze volt csak a két stabíc tokja egy darab dróttal szóval forrasztott kötés nemvolt ,párszor meg is szakadhatott így gondolom.
(#) Hp41C válasza attila066 hozzászólására (») Jún 9, 2010 /
 
Szia!

- Az SDA vonal és a 16F877A RC4 közötti összeköttetés jó?
- Ha sikerült az SDA vonalba életet lehelni, próbáld meg ezt..

- Próbáld ki az RC3 és RC4 lábakat egy led villogtató programmal...
(#) attila066 hozzászólása Jún 9, 2010 /
 
R.I.P. SDA Hát ez meghalt teljesen:S Szerezhetek be egy új picet.. Hiába próbálkozhatunk itt mi ha már régóta halott a picem:S
(#) potyo válasza attila066 hozzászólására (») Jún 9, 2010 /
 
Használj másik lábat és csináld szoftverből.

Vagy add nekem a PIC-et
(#) attila066 válasza potyo hozzászólására (») Jún 9, 2010 /
 
Szoftverből számomra lehetetlen lenne megcsinálni, mármint másik lábra. De nem merek próbálkozni olyan piccel sem ami itthon van (ami tudja a master módot- csak szoftveresen) ugye abban benne van akkor a sift regiszter, szóval az kisebb munka lenne mint egy másik lábra megírni, de nem Amíg ez sem működik nem nehezítem az életem. Jó lesz ez a pic még nekem valamire Chipcad-nél is 1200ft Vác-on meg 1900
(#) Hp41C válasza attila066 hozzászólására (») Jún 9, 2010 /
 
Szia!

A propeller topikban találsz 16F628-ra megírt tesztelt I2C master programrészt. A fejlesztéshez tényleg jó lenne még ez a pic.... Használj fel két működő lábat... Így máris neki lehet állni a slave programjának.
Következő: »»   3 / 4
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