 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
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
|
Objavljeno: Čet Nov 24, 2005 12:08 pm Naslov sporočila: Števec+eeprom |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 24, 2005 12:53 pm Naslov sporočila: |
|
|
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 |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70830.69
|
Objavljeno: Čet Nov 24, 2005 1:46 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
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: Čet Nov 24, 2005 1:54 pm Naslov sporočila: |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 24, 2005 2:28 pm Naslov sporočila: |
|
|
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 |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70830.69
|
Objavljeno: Čet Nov 24, 2005 2:29 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
Nazadnje urejal/a . Čet Nov 24, 2005 7:16 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
andrej111 trgovec
Pridružen-a: Sob 15 Jan 2005 18:30 Prispevkov: 24 Aktiv.: 0.10 Kraj: Gomilica
|
Objavljeno: Čet Nov 24, 2005 3:29 pm Naslov sporočila: |
|
|
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 |
|
 |
andrej111 trgovec
Pridružen-a: Sob 15 Jan 2005 18:30 Prispevkov: 24 Aktiv.: 0.10 Kraj: Gomilica
|
Objavljeno: Čet Nov 24, 2005 3:42 pm Naslov sporočila: |
|
|
Silvo, zanima me kako izgleda rutina takega načina shranjevanja in v praksi kako se obnaša ? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 24, 2005 4:26 pm Naslov sporočila: |
|
|
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 |
|
 |
CarpeDiem Član


Pridružen-a: Pon 16 Feb 2004 17:24 Prispevkov: 333 Aktiv.: 1.41 Kraj: Vrhnika
|
|
Nazaj na vrh |
|
 |
andrej111 trgovec
Pridružen-a: Sob 15 Jan 2005 18:30 Prispevkov: 24 Aktiv.: 0.10 Kraj: Gomilica
|
Objavljeno: Čet Nov 24, 2005 7:10 pm Naslov sporočila: |
|
|
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 |
|
 |
andrej111 trgovec
Pridružen-a: Sob 15 Jan 2005 18:30 Prispevkov: 24 Aktiv.: 0.10 Kraj: Gomilica
|
Objavljeno: Čet Nov 24, 2005 9:37 pm Naslov sporočila: |
|
|
Brez komentarjev?
Moram res potem sam? |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Čet Nov 24, 2005 10:54 pm Naslov sporočila: |
|
|
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 |
|
 |
andrej111 trgovec
Pridružen-a: Sob 15 Jan 2005 18:30 Prispevkov: 24 Aktiv.: 0.10 Kraj: Gomilica
|
Objavljeno: Čet Nov 24, 2005 11:54 pm Naslov sporočila: |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Nov 25, 2005 12:04 am Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|