belső eeprom

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
HIDROMAT
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2008. május 10. szombat, 6:00
Kapcsolat:

Hozzászólás Szerző: HIDROMAT »

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
Avatar
HIDROMAT
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2008. május 10. szombat, 6:00
Kapcsolat:

Hozzászólás Szerző: HIDROMAT »

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
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

EEProm írás alatt nem esik be a Watchdog reset?
Avatar
HIDROMAT
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2008. május 10. szombat, 6:00
Kapcsolat:

Hozzászólás Szerző: HIDROMAT »

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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

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?)
Avatar
HIDROMAT
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2008. május 10. szombat, 6:00
Kapcsolat:

Hozzászólás Szerző: HIDROMAT »

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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

Megy ez másnak is, nem csak nekem.... :)

A BOD be van kapcsolva?
Avatar
HIDROMAT
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2008. május 10. szombat, 6:00
Kapcsolat:

Hozzászólás Szerző: HIDROMAT »

Hogy kell bekapcsolni?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

Biztosítékbitek közt.... :P
Avatar
HIDROMAT
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2008. május 10. szombat, 6:00
Kapcsolat:

Hozzászólás Szerző: HIDROMAT »

Igen, be van kapcsolva.
A táp olyan, ha a szűretlen egyenfeszültégnél néhány periódus kimarad, még olyankor dob egy hátast, amikor teli van a 2000uF-os puffer.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

Vedd le a BOD-ot 2.7V-ra.
Mi van ha a vészleállítás program lefut?
Mi van benne?
Mi van, ha közben visszajön az áram?
Avatar
HIDROMAT
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2008. május 10. szombat, 6:00
Kapcsolat:

Hozzászólás Szerző: HIDROMAT »

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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

Kritikus rész alatt mit értesz?
Megszakításban EEPROM kezelést, vagy miközben írod az eepromot, a benne levő értéket ki is olvasod a megszakítás alatt?

Had tanuljunk picit...


A megszakítás nem okoz gondot az eepromnak!
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

-

Hozzászólás Szerző: szepnorbee »

Üdv!

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
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!
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00
Tartózkodási hely: Törökbálint

Hozzászólás Szerző: herc1234 »

Dim b1 as Byte at $60 OVERLAY

rálapolás

bascom help DIM referenciába benne van..
elöször ha jól emlékszem a kisebbet tehát bit aztán arra lehet
a nagyobbat és akkor ha változik a bit azt a változást fogod látni a
byte ban is.
Válasz küldése