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 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: Čet Nov 24, 2005 12:08 pm    Naslov sporočila:  Števec+eeprom Odgovori s citatom

Ima kdo rešitev za moj problem?

V bistvu je števec ki šteje kose. Problem je v tem ko izključim stroj s tem tudi napajanje, s tem tudi zadnje stanje števca. Mogoče je rešitev eeprom ali ram in kako napistai rutino za i2c eeprom 24c04.
PRILAGAM LISTING

'$sim

Dim Imp As Long

Imp = 0
Config Lcd = 16 * 2


Cls
Locate 1 , 2
Lcd "Stanca 1"
Locate 2 , 1
Lcd "0000000000"
Locate 2 , 14
Lcd "kom"

Do


Gosub Tipka
Gosub Res
Loop


Tipka:
Debounce P1.0 , 0 , Stevec , Sub
Debounce P1.1 , 0 , Res , Sub
'If P1.0 = 0 Then
'Gosub Stevec
'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
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.58

PrispevekObjavljeno: Čet Nov 24, 2005 12:53 pm    Naslov sporočila:   Odgovori s citatom

Kateri MCU pa uporabljas ? Nekateri (npr. Philipsovi LPC900) imajo flash, ki ga je mozno s programom spreminjati samo po en bajt naenkrat (torej funkcionalno kot EEPROM).

Kako dolgi pa so sploh intervali med izklopom in ponovnim vklopom naprave ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70834.42

PrispevekObjavljeno: Čet Nov 24, 2005 1:46 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Nov 24, 2005 1:54 pm    Naslov sporočila:   Odgovori s citatom

Neka podobna debata je potekala že nekoč. Če imaš kak pin viška, je po moje zato najboljša hardverska rešitev. Napajanje mikrokontrolerja ločiš z diodo ter paralelno dodaš večji elektrolit. Pred diodo tipaš napetost. Ob izklopu izvedeš vpis v eeprom. Kot ti je napisal Mare, če boš nonstop pisal v EEPROM bo ta "odletel" kajti običajno se mu garantira 1 000 000 vpisov.
_________________
lp
Silvo
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.58

PrispevekObjavljeno: Čet Nov 24, 2005 2:28 pm    Naslov sporočila:   Odgovori s citatom

Vpisovati v flash/eeprom ves cas bi bilo zelo potratno (milo receno), kot je ze Silvo napisal; mislim, da tega andrej niti ni imel v mislih. Nekateri MCUji imajo hardverski brown-out detection, bi ta bil uporaben za vpis podatkov na varno, preden se izkljuci vse skupaj ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70834.42

PrispevekObjavljeno: Čet Nov 24, 2005 2:29 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.

Nazadnje urejal/a . Čet Nov 24, 2005 7:16 pm; skupaj popravljeno 1 krat
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: Čet Nov 24, 2005 3:29 pm    Naslov sporočila:   Odgovori s citatom

Dodatek

Procesor ki ga uporabljam v tej napravi je AT89C2051 kar sigurno zadostuje za to
aplikacijo. Intervali vklopa in izklopa so nekje 10 ur. Ker še nisem zadosti vešč pri
programiranju vas prosim da mi nekdo napiše oz doda k mojemu listingu del za shranjevanje podatkov. Kolega mi je tudi omenjal neki PCF ker pa i2c še ne poznam zadosti prosim vas, če mi lahko kako pomagate.
SKUHAM BOGRAČ HI.
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: Čet Nov 24, 2005 3:42 pm    Naslov sporočila:   Odgovori s citatom

Silvo, zanima me kako izgleda rutina takega načina shranjevanja in v praksi kako se obnaša ?
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.58

PrispevekObjavljeno: Čet Nov 24, 2005 4:26 pm    Naslov sporočila:   Odgovori s citatom

Andrej, 89C2051 ima oba externa interrupta active-low, torej bi Silvotov predlog deloval brez dodatnih komplikacij; zvezes tako, kot je on predlagal in pripeljes napajanje izpred diode na en interrupt pin kot brown-out detection. Ko se interrupt sprozi, hitro pospravis podatke nekam na varno in pocakas da vse skupaj mrkne.

Kako podatke pospraviti ? To ti bo razlozil kdo, ki se spozna na Bascom (nekaj primerov vpisa v I2C EEPROM z Bascomom je bilo zagotovo objavljenih na SE forumu).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
CarpeDiem
Član
Član



Pridružen-a: Pon 16 Feb 2004 17:24
Prispevkov: 333
Aktiv.: 1.41
Kraj: Vrhnika

PrispevekObjavljeno: Čet Nov 24, 2005 5:01 pm    Naslov sporočila:   Odgovori s citatom

Mogoče kaj takšnega ...

http://www.elektronik.si/phpBB2/viewtopic.php?t=1774

lp, CArpeDiem
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-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: Čet Nov 24, 2005 7:10 pm    Naslov sporočila:   Odgovori s citatom

Ker nimam izdelanega hardware-ja me zanima kako zagnati in nastaviti simulator da bom lahko videl kako poteka program in kje in kaj vpisuje v eeprom.


'Protoboard & AT89C2051
'8.2.05 OK
'uporaba Eeproma in LCDja na protoboardu
' - spremenljivko povecujemo s T2 in znizujemo s T3
' - shranjujemo v eeprom
' - beremo iz eeprom-a
' - izpisujemo na LCD-ju 4x20
'eeprom addresa : A0,A1,A2 -> +5V
'I2C protokol:
' - SDA P3.5
' - SCL P3.4
'LCD pini:
' - DB7 .. DB4 - P1.7 .. P1.4
' - E P1.2
' - R P1.1
$sim

$crystal = 12000000 'uporabljen je 12Mhz kristal

'*** nastavitev pinov display-a
Config Lcdpin = Pin , Db7 = P1.7 , Db6 = P1.6 , Db5 = P1.5 , Db4 = P1.4 , E = P1.2 , Rs = P1.1
Config Lcd = 20 * 4
Cursor Off

'*** nastavitev interupt-ov (tako da Waitms *** ni problem)
Enable Interrupts 'omogoči prekinitve
Enable Int0 'omogoči prekinitve Int0
Enable Int1 'omogoči prekinitve Int0
On Int0 Prekinitev0 'Int0 je pridružena prekinitevna rutina Prekinitev0
On Int1 Prekinitev1 'Int0 je pridružena prekinitevna rutina Prekinitev0
Set Tcon.0 'prekinitve generiraj
Set Tcon.2 'pri prehodu iz 1 na 0

'*** nastavitev spremenljivk
Dim Ee_adr As Byte
Dim Ee_data_in As Byte
Dim Ee_data_out As Byte

'*** nastavitev pinov za I2C protokol
Config Sda = P3.5
Config Scl = P3.4

'*** zacetne vrednosti spremenljivk
Ee_adr = 0 'eeprom adrressa, kjer se shranjuje EE_data_in
Ee_data_in = 0


Set P3.0 'vhodna tipka T1
Set P3.2 'vhodna tipka T2 (INT0)
Set P3.3 'vhodna tipka T3 (INT1)



'***** glavni program *****
Do

Gosub Beri_ee
Gosub Lcd4x20


Loop


'*** branje podatka z naslova Ee_adr v spremenljivko Ee_byte_out
Beri_ee:
I2cstart 'start
I2cwbyte &B10101110 'naslovi EEPROM (1010_A2_A1_A0_R/W)
I2cwbyte Ee_adr 'naslov prostor v EEPROM-u
I2cstart 'start
I2cwbyte &B10101111 'naslovi EEPROM, branje
I2crbyte Ee_data_out , 9 'preberi podatek
I2cstop 'stop
Return

'*** vpis podatka Ee_byte_in na naslov Ee_adr
Vpisi_ee:
I2cstart
I2cwbyte &B10101110
I2cwbyte Ee_adr
I2cwbyte Ee_data_in
I2cstop
Waitms 10 'cas, ki ga EEPROM potrebuje za vpis
Return

'*** prekinitev, ki se izvede ob pritisku na tipko T2 (INT0)
Prekinitev0:
Gosub Beri_ee 'preberemo prejsnjo vrednost
Ee_data_in = Ee_data_out + 1 ' jo povecamo
Gosub Vpisi_ee 'in vpisemo nazaj
Return

'*** prekinitev, ki se izvede ob pritisku na tipko T3 (INT1)
Prekinitev1:
Gosub Beri_ee 'preberemo prejsnjo vrednost
Ee_data_in = Ee_data_out - 1 'jo znizamo
Gosub Vpisi_ee 'in ponovno vpisemo
Return

'*** izpis vrednosti na LCD
Lcd4x20:
Cls 'pobrisemo zaslon
Upperline '1. vrsstica
Lcd " Carpe Diem BASCOM" 'display on LCD
Lowerline '2. vrstica
Lcd "Ee_data: " ; Ee_data_out 'prikazi vrednosti iz eeproma
Fourthline '4. vrstica
Lcd " 8.2.2005" 'display on LCD
Waitms 250
'cakamo 250ms
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: Čet Nov 24, 2005 9:37 pm    Naslov sporočila:   Odgovori s citatom

Brez komentarjev?
Moram res potem sam?
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: Čet Nov 24, 2005 10:54 pm    Naslov sporočila:   Odgovori s citatom

Andrej, ker vidim, da uporabljaš 2051 ter bascom, ti svetujem naslednje:

Ti točno veš, kdaj boš ugasnil stroj. Torej, predlagam naslednje: dodaj eno tipko, ki jo boš stisnil pred izklopom stroja. V EXAMPLES mapi v Bascomu imaš program, ki demonstrira uporabo EEPROMA na I2C (preverjeno deluje). Vse kar moraš narediti je še subrutina, ki ti ob pritisku tipke (pred izklopom) shrani vrednost števca v EEPROM.
Ker, imaš 5 mestno številko, bo to več kot 1 byte, zato boš moral vrednost števca razbiti ny posamezne byte. Debata kako to narediti je o tem že tekla. Če ne najdeš pa sporoči. Ko razbiješ integer ali long na posamezne bajte, jih moraš samo še zapisati v EEPROM, potem lahko stroj ugasneš. 2051 ti bo pri tem postal premajhen, uporabi 4051.

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: Čet Nov 24, 2005 11:54 pm    Naslov sporočila:   Odgovori s citatom

Hvala Gorazd !

Kar se tiče razbijanja LONG-a v BYTE mi res ni poznano zato te prosim za pomoč okrog tega.
Malo mi prosim razloži. Mogoče to res kje obstaja ampak bi porabil veliko časa z iskanjem le tega.
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.58

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

Andrej, a se hecas ? Za razstaviti eno vecjo spremenljivko na (poravnane) manjse dele obstaja nekaj razlicnih metod. Recimo, da imas (hex zapis, ker je bolj intuitivno in porabi manj prostora kot binarno) eno vrednost, 0x12345678; to je en long, ki bi ga rad razbil v posamezne bajte. En long sestavljajo 4 bajti. Recimo, da se spremenljivka imenuje "long".

(long >> 24) & 0xff je zgornji byte (0x12 iz primera)
(long >> 16) & 0xff je drugi byte po vrsti (0x34 iz primera)
(long >> 8-) & 0xff je tretji byte (0x56)
long & 0xff je cetrti byte (0x78-)

V basicu (kar Bascom je) se najbrz operatorji za bitni pomik in logicne operacije imenujejo nekoliko drugace (recimo AND za & ali kaj podobnega), a to je cisto osnovna stvar in mora biti razlozena v Helpu.

Tvoja vrednost je pet mestna (decimalno), torej max. 17 bitov; to pomeni 3 bajte, ergo ne rabis prvega koraka pri razstavljanju longa v posamezne bajte, ampak samo za spodnje tri bajte. To naredis, posljes vsak bajt v paketku kot je opisano v primeru in to je to. Jaz bascoma se v zivljenju nisem videl od blizu, pa mi je iz navedenega primera razumljivo kako stvar deluje, stvar je cisto enostavna.
Nazaj na vrh
Skrit 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 1, 2, 3  Naslednja
Stran 1 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: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group