 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pet Maj 21, 2004 1:36 pm Naslov sporočila: PicBasic in SAA1064 I2C |
|
|
imam:
- pic16f84a > A0 kot data pin in A1 kot clock pin.
- saa1064 > v dinamičnem načinu delovanja.
- picbasic
trenutno bi rad izpisal na led-prikazovalnike karkoli, le da vidim da stvar deluje.
na sliki (priloga) je prikazano kako se pošilja ukaze preko I2C na SAA.
trenutni program:
Koda: |
dat var PORTA.0 'I2C data pin
clk var PORTA.1 'I2C clock pin
B0 var byte
naslov var byte
naslov = $70 'Hardverski naslov / Vcc na ADR pinu
DEFINE I2C_SLOW 1 'Če je manj kozt 8MHz oscilator
define OSC 4 'Oscilator 4MHz
pause 1000
loop:
call start_bit
i2cwrite dat,clk,naslov,[$70] 'določim slave address
Low dat
PAUSE 10
i2cwrite dat,clk,naslov,$00,[$00]
Low dat
PAUSE 10
i2cwrite dat,clk,naslov,$01,[%00111111] 'nastavi kontrolne bite
'C0 > dinamični režim 4x7segment
'C3 > vse diode so prižgane
Low dat
PAUSE 10
i2cwrite dat,clk,naslov,$02,[$08] 'na led 1 izpiši osem
Low dat
PAUSE 10
call stop_bit
pause 1000
goto LOOP
start_bit:
high dat
high clk
pause 2
low dat
pause 2
LOW clk
pause 1
return
stop_bit:
low dat
High clk
pause 2
high dat
pause 2
return
end |
meni so že start in stop bita čudna, ker PAUSE je izražen v ms, potreboval bi pa us.
kako bi pošiljal bjte do čipa?
koliko časa moram počakat za acknowledge bit? ali ga moram prebrati ali lahko počakam 1ms do 10ms in potem napišem sledeči bajt?
Opis: |
|
Velikost datoteke: |
17.91 KB |
Pogledana: |
40 krat |

|
|
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Pet Maj 21, 2004 1:49 pm Naslov sporočila: |
|
|
Mislim da obstaja ukaz PAUSEUS. Poglej v HELP.
|
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pet Maj 21, 2004 2:10 pm Naslov sporočila: |
|
|
da, vidim. vendar je najmanjša vrednost za 4MHz kristal samo 24us.
potem sem uporabil ASM ... ENDASM in vmes dodal NOP ukaze.
ampak stvar še vedno ne deluje, ker nevem točno kaj moram poslati čipu in koliko usekund časa mora biti med ukazi?
ali je možno da I2CWRITE ukaz že vsebuje start in stop bit?
|
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Pet Maj 21, 2004 2:29 pm Naslov sporočila: |
|
|
Tega ukaza nisem nikoli uporabljal, vendar mislim, da ta ukaz vsebuje start in stop bit. Poglej v HELP in če tam ne piše, da je potrebno pošiljati start in stop bit, potem ju verjetno ne smeš poslati.
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 21, 2004 2:52 pm Naslov sporočila: |
|
|
Torej bas&%&$ ne poznam. Lahko ti pa dam nekaj nasvetov za omenjen IC.
Opisal bom postopek za rutino pisano v assemberju. Na Filemanager boš našel kar nekaj mojih primerov v izvorni kodi.
Torej po START bitu pošlješ najprej naslov Prmer: Če je ADR pin na Vcc je naslov B'01110110' sledi "instrukcija" -kam bomo pisali 0x00 sledi vpis v kontrolni register, ki pove ic-ju način delovanja tok skozi displeje ... nato sledijo 4 paketi po 8 bitov podatka za prikaz ter stop bit. Priporočam ti, da pogledaš za SAA1064 datasheet.
Primer dela kode pisane v ASM
Koda: |
CALL START_B
MOVLW NASLOV ;NASLOV ZA SAA1064
CALL POSLJI
MOVLW INSTRUKCIJA ;NA^IN DELOVANJA SAA1064
CALL POSLJI
MOVF TOK,W ;TOK SKOZI DIODE
CALL POSLJI
MOVF DEL1,W ;PRVI DEL
CALL POSLJI
MOVF DEL2,W ;DRUGI DEL
CALL POSLJI
MOVF DEL3,W ;TRETJI DEL
CALL POSLJI
MOVF DEL4,W ;^ETRTI DEL
CALL POSLJI
CALL STOP_B
RETURN
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 21, 2004 2:56 pm Naslov sporočila: |
|
|
Še podrutine;
Kristal 4Mhz
Koda: |
;INSTRUKCIJE ZA SAA1064
#DEFINE NASLOV B'01110110' ;PIN ADR NA Vcc
#DEFINE INSTRUKCIJA B'00000000' ;V REGISTER
#DEFINE KONTROLNI B'00010111'
;*********************************
;RUTINA I2C
;PROCEDURA POćLJE START BIT
;*********************************
START_B
BSF PORTA,SDA
BCF PORTA,SCL
BSF STATUS,RP0
BCF TRISA,SDA
BCF TRISA,SCL
BCF STATUS,RP0
BSF PORTA,SCL
NOP
BCF PORTA,SDA
NOP
BCF PORTA,SCL
RETURN
;***********************************
;RUTINA I2C
;PROCEDURA POćLJE STOP BIT
;***********************************
STOP_B
BCF PORTA,SCL
BCF PORTA,SDA
BSF PORTA,SCL
NOP
BSF PORTA,SDA
BSF STATUS,RP0
BSF TRISA,SCL
BSF TRISA,SDA
BCF STATUS,RP0
RETURN
;*****************************************
;RUTINA I2C
;POćILJANJE PODATKA
;*****************************************
POSLJI
MOVWF TMP
MOVLW .8
MOVWF PONOVI
NAZAJ
BCF PORTA,SDA
BTFSC TMP,7
BSF PORTA,SDA
BSF PORTA,SCL
NOP
BCF PORTA,SCL
RLF TMP,F
DECFSZ PONOVI,F
GOTO NAZAJ
BCF PORTA,SDA
BSF PORTA,SCL
NOP
BCF PORTA,SCL
RETURN
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pet Maj 21, 2004 3:27 pm Naslov sporočila: |
|
|
Silvo: vse tvoje primere kjer je SAA1064 imam že nekaj časa na disku..
Bom najprej probal napisati kodo v asmblerju in nato bom odšel na picbasic (možna napaka v vezju).
Silvo: v prilogi je asm program, ki sem ga sestavil iz tvojega primera, ki mi ne deluje.
Opis: |
|
 Download |
Ime datoteke: |
Saa_pic.zip |
Velikost datoteke: |
824 Bytov |
Downloadano: |
12 krat |
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 21, 2004 3:40 pm Naslov sporočila: |
|
|
Na hitro sem pogledal - ni videt, da bi bilo kaj narobe. Sumim tvoj hardware. Preveri, če slučajno nisi zamenjal SCL ter SDA ? Tukaj v službi nimam kakega hardwera, da bi lahko stvar poskusil. Bom probal program jutri popoldne doma (prej nimam časa).
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pet Maj 21, 2004 6:29 pm Naslov sporočila: |
|
|
Sem probal oba primera SCL in SDA povezav.
Bi bil zzlo hvaležen če bi probal ta program, da vidim ali je program ali hardware.
|
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 21, 2004 7:09 pm Naslov sporočila: |
|
|
Rutina je definitvno pravilno napisana. Na izhodu SAA1064 se bi stanje moralo zamenjat.
-preveri pin 1 ADR primer programa naslavlja čip z adress pinom na +5V (bit 1 ter 2 prvega niza osmih bitov poslanega na I2C vodilo)
- vključen je dinamičen način osveževanja 1+3 2+4 bit0
- displeji so vključeni bit 1,2
- test izključen bit 3 (poskusi postavit ta bit na 1)
- tok skozi displej 3mA bit 4
(vse se nanaša na tretje poslani niz konstanta "tok" )
Mislim, da sem zasledil tudi, da uporabljaš statitčni način - 2 displeja. Torej bit 0 postavi na 0
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 21, 2004 7:28 pm Naslov sporočila: |
|
|
Še odgovor na zgornji post.
Običanjo, ko se lotim pisati program le tega v veliko primerih napišem na novo od začetka do konca. Ravno zaradi tega na videz različni rutini. V tej drugi preklaplam pri start bitu še vhode na izhode. Pri rabi I2C vodila namreč obstaja pravilo "lepega vedenja" takrat ko je na njem več uporabnikov. Vsi pini takrat ko niso v rabi naj bi bili definirani kot vhodi. Na obeh pinih bi morali biti pull up upori, ki bi linijo držali na visokem potencialu. Uporabnik, ki bi želel uporabljati to vodilo bi moral najprej preveriti, če je le to prosto. In to tako, da preveri, če sta obe liniji visoki. Če je vodilo prosto pač pošlje start bit SCL potegne dol ter na ta način tudi ostalim "inteligentnim" uporabnikom na vodilu pove, da je vodilo zasedeno. Zaradi tega je razlika zgornje start stop procedure.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pet Maj 21, 2004 7:36 pm Naslov sporočila: |
|
|
Citiram: |
Mislim, da sem zasledil tudi, da uporabljaš statitčni način - 2 displeja. Torej bit 0 postavi na 0 |
s tem se nebi strinjal, ker v datasheetu piše obratno. če je bit postavljen na 0 je static mode vključen.
C0 = 0 >> static mode, i.e. continuous display of digits 1 and 2
C0 = 1 >> dynamic mode, i.e. alternating display of digit 1 + 3 and 2 + 4
Citiram: |
preveri pin 1 ADR primer programa naslavlja čip z adress pinom na +5V (bit 1 ter 2 prvega niza osmih bitov poslanega na I2C vodilo) |
imam ADR pin na +Vcc, in imam tudi nastavljeno na $76 kar naj bi bilo za +Vcc. vendar stvar še vedno ne deluje.
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 21, 2004 7:42 pm Naslov sporočila: |
|
|
Saj sem tudi tako napisal pri statičnem je 0 pri dinamičnem pa 1 (BIT 0)
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
glavič Član


Pridružen-a: Pon 17 Maj 2004 23:12 Prispevkov: 321 Aktiv.: 1.36 Kraj: Grosuplje
|
Objavljeno: Pet Maj 21, 2004 7:50 pm Naslov sporočila: |
|
|
ne, uporabljam 4 displeye.
zgoraj sem v programu napisal samo 2 bajta za 1 in 2 displey.
to sem kmalu zatem popravil in dodal še zadnja dva bajta..
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|