belső eeprom
Válasz Róbert kérdésére.
'Itt állítom be a processzor adatait ------------------------------------------------------------------------------
$regfile = "m64def.dat"
$prog &HFF , &HEF , &HD9 , &HFF 'M64 11MHz kristály ; M64 mód ; JTAG letiltva.
$crystal = 11059200
$baud1 = 9600 ' use baud rate
$hwstack = 128
$swstack = 8
$framesize = 64
'Itt állítom be a watchdogot --------------------------------------------------------------------------------------
Config Watchdog = 2048 '
Start Watchdog 'inditom WDOG-ot
'Itt állítom be LCD vezérlő lábakat --------------------------------------------------------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.7 , Db5 = Porta.7 , Db6 = Porta.6 , Db7 = Porta.5 , E = Portc.6 , Rs = Portc.5
Cursor Off Noblink
Cls
'Itt állítom be T1-et, ez csinálja az időket ----------------------------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 1024 , Compare A = Disconnect , Clear Timer = 1
Compare1a = 5400 '1/2 sec 11.059.200 MHz Q.oszc.
On Compare1a T1megszak
Enable Compare1a
'Itt állítom be a soros portokat -----------------------------------------------------------------------------------
Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com2:" For Binary As #1
Enable Urxc1
On Urxc1 Sorosbe2 'Com2 megszakítás
'Itt állítom be az analóg mérés módját --------------------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Enable Interrupts 'Megszakítások engedélyezése.
'************************************************************
$eeprom 'EEPROM = 0-1023
'LCD-n megjeleno szovegeket leteszem EEPROM-ba. ----------------------------------------------------------
Data "Foldzarlat " '0
Data "Fazishiany " '17
Data "Ertek %" '34
'és így tovább, még sok szöveg, aztán adatok.
Dim E_enged0 As Eram Byte At 1968
Data &B11111111 '1=vedelmi funkcio bekapcsolva, 0=kikapcsolva
Dim E_referencia As Eram Word At 1969
Data 300%
Dim E_rsthibamax As Eram Byte At 1971
Data 10
'átmeneti tárolók,felhasználás előtt ide másolom Eramokat.
Dim Tempbyte1 As Byte
Dim Tempword1 As Word
Dim Felso_sor As String * 16
Dim Also_sor As String * 16
'és így tovább, még sok adat, aztán a program. (részlet)
Readeeprom Felso_sor , 17 '"Fazishiany "
Readeeprom Also_sor , 34 '"Ertek %"
Upperline
Lcd Felso_sor
Lowerline
Lcd Also_sor
Tempbyte1 = E_rsthibamax
Locate 2 , 13
Lcd Tempbyte1
'Itt állítom be a processzor adatait ------------------------------------------------------------------------------
$regfile = "m64def.dat"
$prog &HFF , &HEF , &HD9 , &HFF 'M64 11MHz kristály ; M64 mód ; JTAG letiltva.
$crystal = 11059200
$baud1 = 9600 ' use baud rate
$hwstack = 128
$swstack = 8
$framesize = 64
'Itt állítom be a watchdogot --------------------------------------------------------------------------------------
Config Watchdog = 2048 '
Start Watchdog 'inditom WDOG-ot
'Itt állítom be LCD vezérlő lábakat --------------------------------------------------------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.7 , Db5 = Porta.7 , Db6 = Porta.6 , Db7 = Porta.5 , E = Portc.6 , Rs = Portc.5
Cursor Off Noblink
Cls
'Itt állítom be T1-et, ez csinálja az időket ----------------------------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 1024 , Compare A = Disconnect , Clear Timer = 1
Compare1a = 5400 '1/2 sec 11.059.200 MHz Q.oszc.
On Compare1a T1megszak
Enable Compare1a
'Itt állítom be a soros portokat -----------------------------------------------------------------------------------
Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com2:" For Binary As #1
Enable Urxc1
On Urxc1 Sorosbe2 'Com2 megszakítás
'Itt állítom be az analóg mérés módját --------------------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Enable Interrupts 'Megszakítások engedélyezése.
'************************************************************
$eeprom 'EEPROM = 0-1023
'LCD-n megjeleno szovegeket leteszem EEPROM-ba. ----------------------------------------------------------
Data "Foldzarlat " '0
Data "Fazishiany " '17
Data "Ertek %" '34
'és így tovább, még sok szöveg, aztán adatok.
Dim E_enged0 As Eram Byte At 1968
Data &B11111111 '1=vedelmi funkcio bekapcsolva, 0=kikapcsolva
Dim E_referencia As Eram Word At 1969
Data 300%
Dim E_rsthibamax As Eram Byte At 1971
Data 10
'átmeneti tárolók,felhasználás előtt ide másolom Eramokat.
Dim Tempbyte1 As Byte
Dim Tempword1 As Word
Dim Felso_sor As String * 16
Dim Also_sor As String * 16
'és így tovább, még sok adat, aztán a program. (részlet)
Readeeprom Felso_sor , 17 '"Fazishiany "
Readeeprom Also_sor , 34 '"Ertek %"
Upperline
Lcd Felso_sor
Lowerline
Lcd Also_sor
Tempbyte1 = E_rsthibamax
Locate 2 , 13
Lcd Tempbyte1
Korábban olvasottak szerint úgy gondolom, ezt kéne tennem:
Róbertet kérdezem: az adatátírásoknak mi lehetett az oka, jó-e a következő megoldás?
'LCD szövegek nem változnak, rengeteg hely van M64-ben (65% foglalt), EEPROM helyett RAM.
Const Szoveg1 = "Foldzarlat "
Const Szoveg2 = "Fazishiany "
Const Szoveg3 = "Ertek %"
'EEPROM-ot csak olyan adatok tárolására használom, amelyeket esetleg változtatni kell.
$eeprom
Dim Kamu_byte As Eram Byte 'beáldozom eram 0.címet.
Data 255
Dim Enged As Byte
Dim E_enged As Eram Byte 'nem adok Eram címet, mert Bascom megoldja.
Data &B11111111
Dim Referencia As Word
Dim E_referencia As Eram Word
Data 300%
Dim Rsthibamax As Byte
Dim E_rsthibamax As Eram Byte
Data 10
Kiolvas:
Enged = E_enged 'program futása közben nem olvasok EEPROM-ot, másolattal dolgozom.
Referencia = E_referencia
Rsthibamax = E_rsthibamax
Do
Reset Watchdog
Upperline
Lcd Szoveg2
Lowerline
Lcd Szoveg3
Locate 2 , 13
Lcd Rsthibamax
Wait 1
Loop
Róbertet kérdezem: az adatátírásoknak mi lehetett az oka, jó-e a következő megoldás?
'LCD szövegek nem változnak, rengeteg hely van M64-ben (65% foglalt), EEPROM helyett RAM.
Const Szoveg1 = "Foldzarlat "
Const Szoveg2 = "Fazishiany "
Const Szoveg3 = "Ertek %"
'EEPROM-ot csak olyan adatok tárolására használom, amelyeket esetleg változtatni kell.
$eeprom
Dim Kamu_byte As Eram Byte 'beáldozom eram 0.címet.
Data 255
Dim Enged As Byte
Dim E_enged As Eram Byte 'nem adok Eram címet, mert Bascom megoldja.
Data &B11111111
Dim Referencia As Word
Dim E_referencia As Eram Word
Data 300%
Dim Rsthibamax As Byte
Dim E_rsthibamax As Eram Byte
Data 10
Kiolvas:
Enged = E_enged 'program futása közben nem olvasok EEPROM-ot, másolattal dolgozom.
Referencia = E_referencia
Rsthibamax = E_rsthibamax
Do
Reset Watchdog
Upperline
Lcd Szoveg2
Lowerline
Lcd Szoveg3
Locate 2 , 13
Lcd Rsthibamax
Wait 1
Loop
Válasz Róbertnek.
Ha írok EEPROM-ba, Disabla Interrupts > Írás > Enable Interrupts
EEPROM-ba csak a beüzemeléskor írok, amikor a helyi körülményekhez igazítom a paramétereket. Minden rendben van, hazajövök, (néha többszáz kilóméter), általában semmi panasz. Néha üzemzavar miatt vissza kell mennem, és rátalálok egy paraméterre, ami elállítódott, Pl. eszközcím, és többé nem áll szóba a környezetével (master / slave). A készülék saját gombjait használva visszaállítom a helyes értéket és minden OK.
A hely, ahol az adat megváltozik ötletszerü, nem mindig ugyanaz a cím.
Nem a helyi kezelő állítja át, lehet, hogy nem is történik semmi, de már sokszor történt meg az eset, a problémám valós, valami oka van, azt keresem.
Ha írok EEPROM-ba, Disabla Interrupts > Írás > Enable Interrupts
EEPROM-ba csak a beüzemeléskor írok, amikor a helyi körülményekhez igazítom a paramétereket. Minden rendben van, hazajövök, (néha többszáz kilóméter), általában semmi panasz. Néha üzemzavar miatt vissza kell mennem, és rátalálok egy paraméterre, ami elállítódott, Pl. eszközcím, és többé nem áll szóba a környezetével (master / slave). A készülék saját gombjait használva visszaállítom a helyes értéket és minden OK.
A hely, ahol az adat megváltozik ötletszerü, nem mindig ugyanaz a cím.
Nem a helyi kezelő állítja át, lehet, hogy nem is történik semmi, de már sokszor történt meg az eset, a problémám valós, valami oka van, azt keresem.
Ja, hogy autós alkalmazás?
Na ott van környezeti zavar....
- BOD bekapcsolva?
- betáp ágban ferritgyöngy és tekercs + kerámiakondi?
- kapcsolóüzemű táp után igaz van áteresztőüzemű is?
- árnyékolás?
- Kondival minden leszűrőzve?
- bemeneti részeken Unipoláris szupresszor (P6KE; 6V-s)?
Hülye ötlet:
Az adatokat 3 helyen tárolod le (nem egymás után).
Ha 2 egyezik belőle, azt elfogadod jónak. És a 3-at felülírod a jónak tekintettel.
INT beeshet az írás alatt (A watchdogot nem hatja meg, hogy Int van vagy sem). Stop WD illetve Start WD jobb lenne (Ill EEPROM írás előtt kiadod a reset watchdog (vagy nullázod) és úgy írod?)
Na ott van környezeti zavar....
- BOD bekapcsolva?
- betáp ágban ferritgyöngy és tekercs + kerámiakondi?
- kapcsolóüzemű táp után igaz van áteresztőüzemű is?
- árnyékolás?
- Kondival minden leszűrőzve?
- bemeneti részeken Unipoláris szupresszor (P6KE; 6V-s)?
Hülye ötlet:
Az adatokat 3 helyen tárolod le (nem egymás után).
Ha 2 egyezik belőle, azt elfogadod jónak. És a 3-at felülírod a jónak tekintettel.
INT beeshet az írás alatt (A watchdogot nem hatja meg, hogy Int van vagy sem). Stop WD illetve Start WD jobb lenne (Ill EEPROM írás előtt kiadod a reset watchdog (vagy nullázod) és úgy írod?)
Válasz Róbertnek.
Az autóúttal megtévesztettelek, csak panaszkodtam. Arra utaltam, egy hiba esetén lehet, hogy Szombathelyre, lehet, hogy Hajdúszovátra kell mennem javítani.
A készülék 230V-ról működik, és nagyszerű tápja van. Trafó 230/2x15V, zavarszűrő induktivítás, 2000uF puffer + 100nF kerámia, 7805 stabilizátor, 100uF + 5db 100nF kerámia.
Nem EEPROM íráskor/módosításkor történik a baj. A program futása közben nincs adatmódosítás, de olvasás van. Nem jöhet olyankor a hiba?
Ezt szüntetném meg azzal, hogy EEPROMOT változókba másolom és futás közben azokat használom.
A három helyen letárolt adatból válasszak két jót, talán megoldás volna, de valljuk be, ez tüneti kezelés, elegánsabb volna megtalálni a zavar okát és azt megszüntetni.
Most átírom a programot úgy ahogy egy nyúlfaroknyi részlettel jeleztem, és próbálkozom.
Ha abban a megoldásban látsz kivetnivalót, kérlek jelezd, ha jónak tűnik, akkor néhány hét múlva kiderül, hogy tényleg jó-e.
Az autóúttal megtévesztettelek, csak panaszkodtam. Arra utaltam, egy hiba esetén lehet, hogy Szombathelyre, lehet, hogy Hajdúszovátra kell mennem javítani.
A készülék 230V-ról működik, és nagyszerű tápja van. Trafó 230/2x15V, zavarszűrő induktivítás, 2000uF puffer + 100nF kerámia, 7805 stabilizátor, 100uF + 5db 100nF kerámia.
Nem EEPROM íráskor/módosításkor történik a baj. A program futása közben nincs adatmódosítás, de olvasás van. Nem jöhet olyankor a hiba?
Ezt szüntetném meg azzal, hogy EEPROMOT változókba másolom és futás közben azokat használom.
A három helyen letárolt adatból válasszak két jót, talán megoldás volna, de valljuk be, ez tüneti kezelés, elegánsabb volna megtalálni a zavar okát és azt megszüntetni.
Most átírom a programot úgy ahogy egy nyúlfaroknyi részlettel jeleztem, és próbálkozom.
Ha abban a megoldásban látsz kivetnivalót, kérlek jelezd, ha jónak tűnik, akkor néhány hét múlva kiderül, hogy tényleg jó-e.
Mi van ha a vészleállítás program lefut?
EEPROM-ba mentem az üzemóra, üzemperc állapotát és END a vége. Korábbi állításommal ellentétben mégis történik adatmódosítás programfutás közben, méghozzá egy kényes pillanatban.
Mi van, ha közben visszajön az áram?
End után a Watchdog intézkedik az újrakezdésről, aztán kötelező pihenő és minden kezdődik elölről.
EEPROM-ba mentem az üzemóra, üzemperc állapotát és END a vége. Korábbi állításommal ellentétben mégis történik adatmódosítás programfutás közben, méghozzá egy kényes pillanatban.
Mi van, ha közben visszajön az áram?
End után a Watchdog intézkedik az újrakezdésről, aztán kötelező pihenő és minden kezdődik elölről.
- szepnorbee
- Bitmanipulátor
- Hozzászólások: 122
- Csatlakozott: 2009. augusztus 31. hétfő, 6:00
-
Üdv!
Fordításnál StoreBit error-t kapok. Gondolom azért mert Bit nem veheti fel byte értékét, szóval nem össezvonható. Hogyan lehetne ezt kijátszani? Két bit típusú paramétert szeretnék eepromba letárolni ill. beolvasni. Köszönöm!
Kód: Egész kijelölése
Dim Light As Bit
Dim Menu As Bit
Dim Eelight As Eram Byte
Dim Eemenu As Eram Byte
Menu = Eemenu
Light = Eelight