60 nap alatt Arduino #15 Nemfelejtő memória
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
az eeprom egy nem felejtő memória... elvileg, ha kikapcsolod és újra be, akkor is folytatja a számolást... nem kezdi előröl...
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Igen ezt vártam én is!
De nem tette!
Míg nem a böngészgetés közben ráleltem egy elbújt tördelési hibára:
Nem is értettem mi célt szolgál ez a három sor. És ezért eltölttöm vele kis időt.
javítottam:
És ki is írta hogy 1287. start program
Lenne még két kérdésem:
1.
Miért van két, alacsony és magas helyiérték:
2.
És ezeket miért osztjuk 256-tal:
És ebből a kettőből, hogy lesz decimális szám ennek segítségével:
De nem tette!
Míg nem a böngészgetés közben ráleltem egy elbújt tördelési hibára:
Kód: Egész kijelölése
bekapcsolas =
word(bekapcsolasH,bekapcsolasL);
// wordde alakitas
javítottam:
Kód: Egész kijelölése
bekapcsolas = word(bekapcsolasH,bekapcsolasL); // wordde alakitas
Lenne még két kérdésem:
1.
Miért van két, alacsony és magas helyiérték:
Kód: Egész kijelölése
bekapcsolasH = EEPROM.read(2); // magas helyiertek
bekapcsolasL = EEPROM.read(1); // alacsony helyiertek
És ezeket miért osztjuk 256-tal:
Kód: Egész kijelölése
bekapcsolasH = bekapcsolas/256;
bekapcsolasL = bekapcsolas % 256;
EEPROM.write (1, bekapcsolasL);
EEPROM.write (2, bekapcsolasH);
Kód: Egész kijelölése
bekapcsolas = word(bekapcsolasH,bekapcsolasL);
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
kicsit nézz utána szerintem a számrendszereknek... főleg a hexadecimálisnak (16-os) és akkor ez nem lesz kérdés.
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
lerajzolós típus vagyok!
Lerajzoltam!
Köszi a megerősítést.
Közben rájöttem, hogy 256-os számrendszer van, és ha 255 főlé kell számolni, akkor kell indul a bekapcsolásH váltózó.
Feltételezem a parancs ezt teszi helyre...
Nem találom viszont, a WORD változó hány byte-on van tárolva.
BYTE változó 1, INT - 2, tán a WORD is 2-n?
Kellene egy megerősítés:
Azt olvastam, hogy a Atmega328P-PU chip, ami az arduino-n van, 1kB eeprom-ot tartalmaz.
Ez azt jelenti programozás technikailag, hogy az EEPROM.write(cím,adat) parancsba 0 és 1023 tudom a címet állítni INT típussal (tanfolyam anyag szerint a 0-ásat ne használjuk), a adat helyére pedig BYTE adattípust írok, (0-255).
Jól értem?
Lerajzoltam!
Köszi a megerősítést.
Közben rájöttem, hogy 256-os számrendszer van, és ha 255 főlé kell számolni, akkor kell indul a bekapcsolásH váltózó.
Feltételezem a
Kód: Egész kijelölése
word(bekapcsolasH,bekapcsolasL);
Nem találom viszont, a WORD változó hány byte-on van tárolva.
BYTE változó 1, INT - 2, tán a WORD is 2-n?
Kellene egy megerősítés:
Azt olvastam, hogy a Atmega328P-PU chip, ami az arduino-n van, 1kB eeprom-ot tartalmaz.
Ez azt jelenti programozás technikailag, hogy az EEPROM.write(cím,adat) parancsba 0 és 1023 tudom a címet állítni INT típussal (tanfolyam anyag szerint a 0-ásat ne használjuk), a adat helyére pedig BYTE adattípust írok, (0-255).
Jól értem?
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Word, integer: 2byte
Byte, char: 1 byte
Jól érted az eepromot. BYTE-alapú a cellája. Címe 0...utolsó cella lehet.
Byte, char: 1 byte
Jól érted az eepromot. BYTE-alapú a cellája. Címe 0...utolsó cella lehet.
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Az #include "EEPROM.h" nekem is fejtörést okozott.
Így legalább a hsz.ekben utánnanéztem.
Nekem is a start sor elé írja a növekvő számot, noha az arduinot is lekapcsolom, s a progit újra beolvastatom.
Az EPROM nem felejt. ):
Így legalább a hsz.ekben utánnanéztem.
Nekem is a start sor elé írja a növekvő számot, noha az arduinot is lekapcsolom, s a progit újra beolvastatom.
Az EPROM nem felejt. ):
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Sziasztok!
Van egy kis problémám a következő sor értelmezésében:
Azt értem, hogy integer-ként van definiálva a "bekapcsolasL" és a "bekapcsolasH".
S Word ként a "bekapcsolas". ( Word, Integer : 2 Byte )
Ahhoz, hogy maradékképzéssel lehessen számolni ( modulo-val ),
long vagy float típusú változót kellene definiálni. ?
Idészet:
A maradékképzéses számítás a programba szerintem így működne:
Az
Ha levezetem a képletet eredményül 0-t kaptam. Valamit elnéztem?
S itt a teljes program segítségül:
A program teszi a dolgát!
Csak erre a pár kérdésre kérnék választ!
Bocs a rengeteg megjegyzésért a programban, de a HF-emet másik mappában tartom.
Van egy kis problémám a következő sor értelmezésében:
Kód: Egész kijelölése
bekapcsolasL = bekapcsolas % 256;
S Word ként a "bekapcsolas". ( Word, Integer : 2 Byte )
Ahhoz, hogy maradékképzéssel lehessen számolni ( modulo-val ),
long vagy float típusú változót kellene definiálni. ?
Idészet:
Az alacsony helyi érték kiszámítása lehet érték-((érték/256)*256) számolással, vagy egyszerűen a maradékképzéssel.
Ezt az aritmetikéban modulo-nak hívják. Az Arduino ( és a C nyelvben ) a % jellel jelölhető. Azaz az előbbi kifejezés esetén érték % 256.
A maradékképzéses számítás a programba szerintem így működne:
Kód: Egész kijelölése
bekapcsolasH = bekapcsolas / 256;
bekapcsolasL = bekapcsolas % 256;
/* Maradékosztásos számítás:
* XH = X / 256 ( Az XH = 0-255 egész szám!)
* XL = ((X/256)-XH)*256
* Így a X változó vagy LOG vagy FLOAT. (?)
*/
kiszámításánál is van valami, amit nem értek.érték-((érték/256)*256)
Ha levezetem a képletet eredményül 0-t kaptam. Valamit elnéztem?
S itt a teljes program segítségül:
Kód: Egész kijelölése
/* (10.)
15. EEPROM
SerialLED - EEPROM
Soros porton kapcsolható LED és üzemóra számláló
60 nap alatt Arduinó tanfolyam
(c) TavIR http://www.tavir.hu
A program az alap sorosporti LED-kapcsolgatásra épül,
EEPROM-os üzemszámlálóval (bekapcsolás számlálással)
kiegészítve. Az EEPROM kezeléshez a függvény
könyvtárakat az Arduinó keretrendszerben a _libraries_
könyvtárban találhatjuk meg, mig a programozás során a
_Sketch->Import library_ alatt szúrhatjuk be a
programunkba. ( Kis és nagybetű érzékeny a fájlnév!!! :( )
Az eredeti programot lefuttatva az első bekapcsolás
65535-el indult. Következő resetre 0++. Ez inkébb
csak megjegyzés mint probléma.
*/
int inByte = 0; // Beolvasott adat
int adatjott = 0; // Eddig hány adat jött?
char be = 'B'; // Változó a bekapcsoláshoz
char ki = 'K'; // Változó a kikapcsoláshoz
char c; // C -karakteres változó definiálása.
// Belső változók
byte bekapcsolasH;
byte bekapcsolasL;
word bekapcsolas;
#include "EEPROM.h";
/* Az "eeprom.h" = "EEPRON.h" néven található!
A _kicsi_ vagy _NAGY_ nem UA. !!! */
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // Sorosport bekapcsolása
// és sebessége
pinMode(13, OUTPUT); // D13 beépített LED
/* EEPROM.olvasás(honnan)
A honnan = 0-65535. Az eredmény = 0-255.
*/
bekapcsolasH = EEPROM.read(2); // Magas helyiérték
bekapcsolasL = EEPROM.read(1); // Alacsony helyiérték
bekapcsolas = word (bekapcsolasH,bekapcsolasL);
// word-dé alakítás
// ( word = szó azaz két byte )
Serial.print(bekapcsolas); // Bekapcs-érték kiírása
Serial.println(". Start program."); // Legelső sorunk a
// "Start..." visszaküldése
// a terminál programra.
bekapcsolas++; // bekapcsolas = bekapcsolas + 1
bekapcsolasH = bekapcsolas / 256;
bekapcsolasL = bekapcsolas % 256;
/* Maradékosztásos számítás:
* XH = X / 256 ( Az XH = 0-255 egész szám!)
* XL = ((X/256)-XH)*256
* Így a X változó vagy LOG vagy FLOAT. (?)
*/
EEPROM.write (1, bekapcsolasL); // EEPROM.irás (hova.mit)
EEPROM.write (2, bekapcsolasH); // A hova = 0-65535. (cím)
// A mit = 0-255. (adat)
}
/* A program "magja" nem változott az első 09-es
mintatrogram fut... */
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0 ) {
// van adat feldolgozásra?
inByte = Serial.read(); // 1 byte beolvasása
c = inByte; // A "c" felveszi az
// "intByte" értékét.
/*
c = Serial.read(); // 1 byte beolvasása
inByte = c; // AZ "intByte felveszi
// a "c" értékét.
*/
delay(100); // 100ms szünet
adatjott++; // adatjött -
// számláló növelése
if (inByte == be) {
digitalWrite(13, HIGH); // Ha B jött a LED BE.
}
if (inByte == ki) {
digitalWrite(13, LOW); // Ha K jött a LED KI.
}
Serial.print(F("Bejött Byte: "));
Serial.print(inByte); // Számként küldjük
// vissza.
Serial.print(F(". CHAR: "));
Serial.print(c); // char-t küldjük vissza.
Serial.print(F(". Adat: "));
Serial.println(adatjott, DEC); // Számláló.
}
}
Csak erre a pár kérdésre kérnék választ!
Bocs a rengeteg megjegyzésért a programban, de a HF-emet másik mappában tartom.
by _jani_
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Visszaolvasva az INTEGER az egész típusú szám 2 byte-nyi helyen. ( Elkevertem a Byte típussal. )
Ez kicsit más megvilágításba teszi a dolgokat.
A programomban, változók leírásánál a WORD értelmezését sem biztos, jól gondolom ...
Ez kicsit más megvilágításba teszi a dolgokat.
A programomban, változók leírásánál a WORD értelmezését sem biztos, jól gondolom ...
by _jani_
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Utánaolvasva a maradékképzéses számításnak már értem kicsit, hogy mit tesz a programsor:
A bekapcsolasH = bekapcsolas / 256 a magasabb helyértéket adja...
A bekapcsolasL = bekapcsolas % 256 az alacsonyabb helyértéket adja maradékképzéssel.
Vagyis a modulo egy osztás, ami az egész értéket elveti és a maradékkal számol egész addig, amíg az eredmény nulla nem lesz.
A kapott eredmény az osztás értéke, ahányszor azt el tudta végezni, amíg nulla nem lett a kapott eredmény.
Jól gondolom?
Ha jól olvastam, pozitív számok esetén működik.
A Word az egyenlő Integer-rel?
Elvégeztem a házim, mert kiszámoltam oda és vissza a kapott eredményeket...
Azért még van mit tanulnom...
Kód: Egész kijelölése
bekapcsolasH = bekapcsolas / 256;
bekapcsolasL = bekapcsolas % 256;
A bekapcsolasL = bekapcsolas % 256 az alacsonyabb helyértéket adja maradékképzéssel.
Vagyis a modulo egy osztás, ami az egész értéket elveti és a maradékkal számol egész addig, amíg az eredmény nulla nem lesz.
A kapott eredmény az osztás értéke, ahányszor azt el tudta végezni, amíg nulla nem lett a kapott eredmény.
Jól gondolom?
Ha jól olvastam, pozitív számok esetén működik.
A Word az egyenlő Integer-rel?
Elvégeztem a házim, mert kiszámoltam oda és vissza a kapott eredményeket...
Azért még van mit tanulnom...
by _jani_
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Ige: Integer = Word. Előjel nélkül 0...65535-ig vehet fel értéket, 2 byte a SRAM tárfoglalása.
http://www.tavir.hu - a gazda
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Szia Jani ( ha még itt vagy)
Nekem nem az átszámolással van a gondom, hanem a kod formájával.
Mit jelent pontosan a sorban az F betü?
Serial.print(F(". Char: "));
Ilyenekre, meg hasonlokra eddig a tanfolyam nem igen tért ki.
Nekem nem az átszámolással van a gondom, hanem a kod formájával.
Mit jelent pontosan a sorban az F betü?
Serial.print(F(". Char: "));
Ilyenekre, meg hasonlokra eddig a tanfolyam nem igen tért ki.
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
A kérdéses sorod és a válasz: ott van alatta 1 sorral a "15. fejezet: sorosport" leckében:
" • Serial.print(F(“Hello World”)).
Az utolsó esetben nem a kisebb SRAM memóriaterületen tárolódik a kiírandó adat, hanem a programmemória (Flash memória) területén!"
" • Serial.print(F(“Hello World”)).
Az utolsó esetben nem a kisebb SRAM memóriaterületen tárolódik a kiírandó adat, hanem a programmemória (Flash memória) területén!"
http://www.tavir.hu - a gazda
Re: 60 nap alatt Arduino #15 Nemfelejtő memória
Kösz nem sikerült megtalálnom, de már feljegyeztem.
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682