www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Števec+eeprom
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Pet Nov 25, 2005 12:23 am    Naslov sporočila:   Odgovori s citatom

Pravijo V SLOGI JE MOČ . !

HVALA BOM PREIZKUSIL
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Pet Nov 25, 2005 5:32 am    Naslov sporočila:   Odgovori s citatom

URA JE 5 ZJUTRAJ UPAM DA MI JE USPELO.

$sim
$large
Dim Imp As Long
Declare Sub Write_eeprom(adres As Byte , Value As Byte)
Declare Sub Read_eeprom(adres As Byte , Value As Byte)

'declare constants
Const Addressw = 174
Const Addressr = 175

Dim B1 As Byte , Adres As Byte , Value As Byte

Config I2cdelay = 1

Imp = 0
Config Lcd = 16 * 2
Config Sda = P1.4
' Pin 19 DATA signal for I2CBUS
Config Scl = P1.3

Cls
Locate 1 , 2
Lcd "Stanca 1"
Locate 2 , 1
Lcd "0000000000"
Locate 2 , 14
Lcd "kom"
Call Write_eeprom(1 , 6)
Call Read_eeprom(1 , B1) : Print Value
Call Read_eeprom(6 , B1) : Print Value

Do
Gosub Tipka
Gosub Res
Loop

Tipka:
Debounce P1.0 , 0 , Stevec , Sub
Debounce P1.1 , 0 , Res , Sub
Debounce P1.5 , 0 , Tipalo , Sub
'If P1.0 = 0 Then
'Gosub Stevec
'End If

Return


Tipalo:
If P1.5 = 0 Then
I2csend &H12 , B1
I2creceive &H12 , B1

I2csend &H34 , B1
I2creceive &H34 , B1

I2csend &H56 , B1
I2creceive &H56 , B1
Print ; B1
End If
Return

Stevec:
If P1.0 = 0 Then
Incr Imp
Gosub Prik

End If
Return

Res:
If P1.1 = 0 Then
Imp = 0
Locate 2 , 1
Lcd "000000000"
Gosub Prik

End If

Return

Prik:
Lowerline

If Imp < 10 Then
Locate 2 , 10
Lcd Imp
Return
End If

If Imp > 99999 Then
Locate 2 , 5
Lcd Imp
Return
End If

If Imp > 9999 Then
Locate 2 , 6
Lcd Imp
Return
End If

If Imp > 999 Then
Locate 2 , 7
Lcd Imp
Return
End If


If Imp > 99 Then
Locate 2 , 8
Lcd Imp
Return
End If

If Imp > 9 Then
Locate 2 , 9
Lcd Imp
Return
End If



'sample of writing a byte to EEPROM AT2404
Sub Write_eeprom(adres As Byte , Value As Byte)
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adres 'asdress of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds
End Sub


'sample of reading a byte from EEPROM AT2404
Sub Read_eeprom(adres As Byte , Value As Byte)
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adres 'address of EEPROM
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Value , 9 'read byte
I2cstop 'generate stop
End Sub
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pet Nov 25, 2005 11:11 am    Naslov sporočila:   Odgovori s citatom

Pa se to: tista preverjavnja na sredini programa (od 99999 navzdol) bi bilo bolj elegantno postaviti v znako kot pa pisati petkrat loceno. V C-ju bi to izgledalo recimo takole (tisto med { in } je samo simbolicni zapis, ker ne vem kaj dejansko v Bascomu te stvari naredijo - hocem ti le demonstrirati zapis s FOR zanko, ki jo Bascom zagotovo tudi pozna):

for (i = 9; i <= 99999; i *= 11)
if (imp > i) {
LOCATE(2, 5 + i)
LCD(imp)
}

Koncni rezultat je bolj berljiva koda in krajsi program (= ostane ti vec prostora za druge reci).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Pet Nov 25, 2005 12:01 pm    Naslov sporočila:   Odgovori s citatom

Zanimivo in elegantno ni kaj. Rutina me asocira na C. Kdor zna zna. Jaz sem šele na začetku.
Sicer pa začel sem z elektronkami. Se sam sebi presenečam. No ja želim slediti zadevam koliko le morem. Hvala za nasvet.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Pet Nov 25, 2005 2:04 pm    Naslov sporočila:   Odgovori s citatom

Sokrat, okrog i2c je vse ok? Lahko malo preveriš? Se mogoče še da kaj strnit?
Bi bolj elegantno izgledalo..
Hvala
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pet Nov 25, 2005 2:33 pm    Naslov sporočila:   Odgovori s citatom

Jaz basica res ne poznam, tako da mi ni jasno, kaj pomenijo tiste stevilke (1, 6, 2, itd.; npr. parametri Write_eeprom(), pa se kaj drugega najbrz tudi. V C-ju so take stvari precej nedvoumne, tukaj pa zgleda vse nekoliko zmedeno.

Po zapisu te funkcije sklepam, da vpises tri bajte loceno (na tri zaporedne naslove ?), z vsakokratnim naslavljanjem, kar je nepotrebno; lahko namrec posljes samo prvi naslov in potem vpises tri bajte zaporedoma (vsaj kar se I2C protokola tice - ali Bascom to zna pa ne vem). Tako se bos izognil trikratni pavzi na koncu in trikratnemu posiljanju dveh bajtov headerja (en za napravo in en za interni naslov).

Torej, ce zelis izboljsati ucinkovitost programa, potem podaj long kot parameter funkciji, ki zapise podatke v EEPROM, ta pa naj ga razbije na koscke in relevantne tri bajte poslje v enem "paketku". Alternativa temu bi bil kazalec na seznam podatkov za oddajo (bolj "univerzalna" C-jevska resitev, a ne vem ali Bascom pozna kazalce ali ne in ali ima smisel komplicirati, glede na to, da bo podatkov zmeraj enako).

Za podrobnejsi opis zapisa/branja v/iz I2C EEPROM/a (kar se tice I2C protokola) si oglej datasheet za doticni cip (pri vsakem je naslavljanje malce drugacno, odvisno od interne organizacije in kapacitete, koncept sekvencnega dostopa pa je seveda isti pri vseh).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Pet Nov 25, 2005 2:44 pm    Naslov sporočila:   Odgovori s citatom

Andrej, živjo!


A imaš ti pol še kako tipalo priklopljeno na I2C vodilo?
Jaz ne vidim, da bi potem kje vmes med programom, ko stisneš tipko, šlo stvar pisat v EEPROM?!

To je takole:
main:
Do
Debounce Tipka, 0, Pisieeprom
...
loop

Pisieeprom:
Call Writeeeprom(adresa,vrednost)
goto main:


Ti si napisal, da ti samo na začetku programa bere in piše to je pa tudi vse.

Malce preglej.


LP GOrazd

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Pet Nov 25, 2005 8:08 pm    Naslov sporočila:   Odgovori s citatom

GORAZD,

KO JE P1.0=0 POTEM
PIŠE BYTE V EEPROM
A NI TAKO ?



Do
Gosub Tipka
Gosub Res
Debounce P1.5 , 0 , Pisieep , Sub
Loop
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Pet Nov 25, 2005 8:40 pm    Naslov sporočila:   Odgovori s citatom

Zakaj mi ne vpisuje vseh treh bytov?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Pet Nov 25, 2005 10:27 pm    Naslov sporočila:   Odgovori s citatom

Sokrat, moram te razočarati glede rutine v c-ju za prikaz.
zadeva v bascomu žal ne deleju error 177 kar pomeni illegal operation




for (i = 9; i <= 99999; i *= 11)
if (imp > i) {
LOCATE(2, 5 + i)
LCD(imp)
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pet Nov 25, 2005 11:08 pm    Naslov sporočila:   Odgovori s citatom

Ja seveda da ne dela v Bascomu, saj gre za dva razlicna jezika - to je tako kot ce bi Kitajcu narocil nekaj po slovensko in pricakoval, da bo on to kar razumel. Jaz sem ti to napisal za ilustracijo, kako se formira FOR zanko v basicu, bos moral pa prebrati kje druge (v navodilih od Bascoma najbrz, ali pa v kaksni splosni literaturi za basic). Ne mores kar skopirati kode iz enega jezika (npr. C-ja) v drugega (npr. basic) - to ne gre, razen ce sta jezika res sorodna (razlicni dialekti basica, C-ja, pascala, itd.).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Pet Nov 25, 2005 11:57 pm    Naslov sporočila:   Odgovori s citatom

No no no...to ti pa ne bo delalo. Shame on you

Poglej, najprej ti razjasnim uporabo ukaza debounce:

Debounce P1.0, 0, naredinekaj

Tako je to. Debounce, I/O pin (lahko tudi tipka, če prej uporabiš alias - Tipka ALIAS P1.0; potem gleda stanje (1 ali 0) ter kam naj skoči e.g. naredinekaj. Ti imaš tam napisano na koncu sub, in ti bo vedno skakalo na sub. Tam pa, kjer imaš za P1.0 (prik) ti bo pa šlo čez tiste If zanke, ter čez subrutini za EEPROM, kar ni uredu.

Ti moraš narediti takole:

Tipka alias P1.0

V DO LOOP zanki preverjaš stanje tipke


Glavni program:
Do
Debounce tipka, 0,pisieeprom
loop




Pisieeprom:

call writeeeprom (adresa1,podatek1)
call writeeeprom (adresa2,podatek2)
call writeeeprom (adresa3,podatek3)
goto glavni program


In to je to. AdresaX ter podatekX določiš sam, kaj ti kam shranjuje.


LP Gorazd

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Sob Nov 26, 2005 1:18 am    Naslov sporočila:   Odgovori s citatom

Bi to naj bilo tako?

$sim
$large
Dim Imp As Long
Declare Sub Write_eeprom(adres As Byte , Value As Byte)
Declare Sub Read_eeprom(adres As Byte , Value As Byte)

'declare constants
Const Addressw = 174 ' OD KOD DOBIM TE PODATKE 174,175 ?
Const Addressr = 175

Dim B1 As Byte , Adres As Byte , Value As Byte
'Dim &H12 As Byte , &H34 As Byte , &H56 As Byte

Tipka Alias P1.0
Res Alias P1.1

Config I2cdelay = 1

Imp = 0
Config Lcd = 16 * 2
Config Sda = P1.4
' Pin 19 DATA signal for I2CBUS
Config Scl = P1.3
Cls
Locate 1 , 2
Lcd "Stanca 1"
Locate 2 , 1
Lcd "0000000000"
Locate 2 , 14
Lcd "kom"
'Call Write_eeprom(1 , 6)
'Call Read_eeprom(1 , B1) : Print Value
'Call Read_eeprom(6 , B1) : Print Value

Main:
Do
Debounce P1.5 , 0 , Pisieeprom
Debounce P1.1 , 0 , Res
Debounce P1.5 , 0 , Tipalo
Gosub Tipka
Gosub Res
Loop

Tipka:
' , Sub
'Debounce P1.0 , 0 , Stevec

If P1.0 = 0 Then
Gosub Stevec
End If

Return

Tipalo:
If P1.5 = 0 Then
I2csend &H12 , B1
I2creceive &H12 , B1
I2csend &H34 , B1
I2creceive &H34 , B1
I2csend &H56 , B1
I2creceive &H56 , B1
Print ; Imp
End If
Return

Pisieeprom:

Call Write_eeprom(1 , B1)
Call Write_eeprom(2 , B1)
Call Write_eeprom(3 , B1)
Print Imp ; "dd"

Goto Main

Stevec:
If P1.0 = 0 Then
Incr Imp
Gosub Prik
End If
Return

Res:
If P1.1 = 0 Then
Imp = 0
Locate 2 , 1
Lcd "000000000"
Gosub Prik
End If
Return

Prik:
Lowerline

If Imp < 10 Then
Locate 2 , 10
Lcd Imp
Return
End If

If Imp > 99999 Then
Locate 2 , 5
Lcd Imp
Return
End If

If Imp > 9999 Then
Locate 2 , 6
Lcd Imp
Return
End If

If Imp > 999 Then
Locate 2 , 7
Lcd Imp
Return
End If

If Imp > 99 Then
Locate 2 , 8
Lcd Imp
Return
End If

If Imp > 9 Then
Locate 2 , 9
Lcd Imp
Return
End If

'sample of writing a byte to EEPROM AT2404
Sub Write_eeprom(adres As Byte , Value Byte)
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adres 'asdress of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds
End Sub

'sample of reading a byte from EEPROM AT2404
Sub Read_eeprom(adres As Byte , Value Byte)
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adres 'address of EEPROM
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Value , 8 'read byte
I2cstop 'generate stop
End Sub

kJE V SIMULATORJU SI LAHKO OGLEDAM VPISANE PODATKE V EXTERNI EEPROM
ALI BASCOM SIMULATOR TEGA NE OMOGOČA ?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Sob Nov 26, 2005 12:19 pm    Naslov sporočila:   Odgovori s citatom

Andrej živjo!

Preberi si tole debato na elektronu :

http://www.elektro-n.com/forum2/viewtopic.php?t=8357&highlight=long

Tukaj je opisano, kako varablo long razbiti v posamezne byte.
V tvojem primeru, lahko to vključiš kot funkcijo ter jo kličeš.

Če boš tako shrankjeval:

call writeeeprom (1,b1)
call writeeeprom (2,b1)
call writeeeprom (3,b1)

ne bo s tega nič, ker ti je v vse tri lokacije zapisalo vrednost spremenljivke b1.

Torej, ko boš ti varjablo imp hotel shraniti, jo boš moral najprej po postopku, ki ti ga opisuje zgornji link razbiti na posamezne byte, potem šele te zapisati v EEPROM.

Za maskiranje zapisa (ti odpadejo tiste 0000000) pa si poglej malce ukaz "FUSING". V Bascomu ne boš mogel simulirati delovanja I2C naprave, kot je tvoj 24cXX.

LP GOrazd

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
andrej111
trgovec



Pridružen-a: Sob 15 Jan 2005 18:30
Prispevkov: 24
Aktiv.: 0.10
Kraj: Gomilica

PrispevekObjavljeno: Sob Nov 26, 2005 12:48 pm    Naslov sporočila:   Odgovori s citatom

HVALA GORAZD

JA PROBLEM JE V TEM TI MI OPISUJEŠ TA NAČIN SOKRAT PA DRUGEGA
SEDAJ VEČ NE VEM KAKO IN KAJ. SE PRAVI TISTA RUTINA ZA RAZBIJANJE
LONGA V BYTE KI JO JE NAVEDEL SOKRAT NI PRIMERNA ZA BASCOM ALI PA
PA JAZ TEGA NE ZNAM UPORABITI . BOM SEDAJ PREIZKUSIL NAČIN IZ LINKA

LP

ANDREJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
Stran 2 od 3

 
Pojdi na:  
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