60 nap alatt Arduino #36 - Shift regiszter
Sziasztok!
Lehet, hogy én a magam kezdő szemével hasonlóan látom a problémát mint a kérdés feltevője. A ciklus működését részletesen láthatjuk a segítő magyarázatokban, most én megpróbálom konyha nyelven. Szerintem a gond az, hogy a ciklus felépítésében a második részben egy vizsgálandó feltételt kell megadni. A nem rég tanultak alapján az = önmagában értékadást jelent, ha összehasonlítást szeretenénk egyenlőségre, akkor == a megoldás. De a dolog így sem működne, a magyarázatot többen is leítrák. Addig megy a ciklus, amíg igaz a feltétel vizsgálat eredménye. Márpedig ez a legelején sem lesz igaz, amikor 0-ával bele kezdünk a ciklusba. Hát akkor legyen a feltétel != (nem egyenlő). Na így már működhetne, csak az a csapda a dologban, hogy csak egyenlőség esetén kerülhetsz ki a ciklusból, ha a léptetés során valamilyen módon elkerülöd az egyenlőséget, (előtte kisebb, utána meg nagyobb), akkor nem kerülsz ki a ciklusból, esetleg csak akkor, ha a ciklus index átfordul a definiált adat típuson és a következő körben pont beletalál az egyenlőségbe. Volt egy ilyen ravaszság a hangkeltés lecke elején, ahol a ciklus indexet is és az összehasonlítás alapját is változtattuk a ciklusban, így elő tudott fordulni, hogy elkerülték egymást. Szóval a reláció jelek a legjobbak erre. "Amíg kisebb mint"..., addig csináljuk amit kell, aztán megyünk tovább.
Talán jól értettem a probléma felvetését is, meg remélem a magyarázatokat is.
Lehet, hogy én a magam kezdő szemével hasonlóan látom a problémát mint a kérdés feltevője. A ciklus működését részletesen láthatjuk a segítő magyarázatokban, most én megpróbálom konyha nyelven. Szerintem a gond az, hogy a ciklus felépítésében a második részben egy vizsgálandó feltételt kell megadni. A nem rég tanultak alapján az = önmagában értékadást jelent, ha összehasonlítást szeretenénk egyenlőségre, akkor == a megoldás. De a dolog így sem működne, a magyarázatot többen is leítrák. Addig megy a ciklus, amíg igaz a feltétel vizsgálat eredménye. Márpedig ez a legelején sem lesz igaz, amikor 0-ával bele kezdünk a ciklusba. Hát akkor legyen a feltétel != (nem egyenlő). Na így már működhetne, csak az a csapda a dologban, hogy csak egyenlőség esetén kerülhetsz ki a ciklusból, ha a léptetés során valamilyen módon elkerülöd az egyenlőséget, (előtte kisebb, utána meg nagyobb), akkor nem kerülsz ki a ciklusból, esetleg csak akkor, ha a ciklus index átfordul a definiált adat típuson és a következő körben pont beletalál az egyenlőségbe. Volt egy ilyen ravaszság a hangkeltés lecke elején, ahol a ciklus indexet is és az összehasonlítás alapját is változtattuk a ciklusban, így elő tudott fordulni, hogy elkerülték egymást. Szóval a reláció jelek a legjobbak erre. "Amíg kisebb mint"..., addig csináljuk amit kell, aztán megyünk tovább.
Talán jól értettem a probléma felvetését is, meg remélem a magyarázatokat is.
Re: 60 nap alatt Arduino #36 - Shift regiszter
Sziasztok!
Most értem ehhez a leckéhez.
Gondoltam kipróbálom a kódot, viszont itthon a fiókban csak CD4015BCN-em van (dual 4 bit shit reg.) amiben nincs latch.
Ettől függetlenül megépítettem a dolgot és működik szépen latch nélkül is.
Jó a bináris számláló is, egyenként is tudom kapcsolgatni a ledeket, semmi furcsát nem veszek észre.
Kérdésem ebből adódóan: minek a latch pin?
És pici OFF:
Kinght Rider "villogo"
Most értem ehhez a leckéhez.
Gondoltam kipróbálom a kódot, viszont itthon a fiókban csak CD4015BCN-em van (dual 4 bit shit reg.) amiben nincs latch.
Ettől függetlenül megépítettem a dolgot és működik szépen latch nélkül is.
Jó a bináris számláló is, egyenként is tudom kapcsolgatni a ledeket, semmi furcsát nem veszek észre.
Kérdésem ebből adódóan: minek a latch pin?
És pici OFF:
Kinght Rider "villogo"
Kód: Egész kijelölése
//const int latchPin = 8;
const int clockPin = 12;
const int dataPin = 11;
const byte LED_CHAR[18] = {
B10000000, B11000000, B11100000, B01110000, B00111000, B00011100,
B00001110, B00000111, B00000011, B00000001, B00000011, B00000111,
B00001110, B00011100, B00111000, B01110000, B11100000, B11000000
};
void setup() {
//pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
for (int i=0; i<18; i++){
shiftOut(dataPin, clockPin, MSBFIRST, LED_CHAR[i]);
delay(40);
}
}
Re: 60 nap alatt Arduino #36 - Shift regiszter
Mire is jó az a latch pin? Most neked pont arra van szükséged, hogy a ledeken menjen végig a villogás ahogy a mintázatot lépteted a regiszterben. De tegyük, fel, hogy valamit vezérelsz, és a ledek helyén relék laknak, amik be, vagy kikapcsolnak valamit. Neked például az ötödik relét kell kapcsolnod, a többihez nem akarsz hozzányúlni. Ha nincs latch, akkor a minta végig vonul a kimeneteken, és minden relé röccen egyet, míg az ötödikhez ér a kívánt jel. Ha van latch, akkor a kimeneteket csak akkor váltod, amikor a megfelelő mintázat a helyére került. Ekkor eltárolod a mintát ami a kimenetre kerül. Mügötte a regiszterekben pedig mehet az adatáramlás. Vagyis az, hogy kell-e latch, vagy sem, az attól függ, mit oldasz meg a shift regiszterrel.
Re: 60 nap alatt Arduino #36 - Shift regiszter
Sziasztok!
Shift regiszterrel kapcsolatban van fejvakarásom.
Ha a kiküldött kód pl. 11101111 volt, és a következő küldésnél csak az egyik kivezetést szeretném változtatni pl. hogy a harmadik láb is kikapcsoljon (11001111) hogyan lehet frappánsan megoldani?
Mivel nem kijelzőt hajtanék vele, jó lenne ha egyesével tudnám változtatni a kimeneteket....
Shift regiszterrel kapcsolatban van fejvakarásom.
Ha a kiküldött kód pl. 11101111 volt, és a következő küldésnél csak az egyik kivezetést szeretném változtatni pl. hogy a harmadik láb is kikapcsoljon (11001111) hogyan lehet frappánsan megoldani?
Mivel nem kijelzőt hajtanék vele, jó lenne ha egyesével tudnám változtatni a kimeneteket....
Re: 60 nap alatt Arduino #36 - Shift regiszter
Sajna újra ki kell küldened a teljes sort, mert _soros_ adatküldés és elérés van bennük....
Re: 60 nap alatt Arduino #36 - Shift regiszter
Értem hogy újra kell küldeni az egészet, csak azt szeretném megoldani hogy tudva az utolsó küldött adatot, abban csak egy jegyet változtasson a program és úgy küldje ki!
Valahogy lehet karakterekből összefűzni??
Vagy egyéb ötlet?
Valahogy lehet karakterekből összefűzni??
Vagy egyéb ötlet?
Re: 60 nap alatt Arduino #36 - Shift regiszter
1, Melyik kódot használod? (Copy Code)
2, Bitet/karaktert/mit akarsz megváltoztatni?
2, Bitet/karaktert/mit akarsz megváltoztatni?
Re: 60 nap alatt Arduino #36 - Shift regiszter
Bitet kellene változtatni ahogy írtam , ha pl. az utolsó kimenő 11101111 volt és csak pl. a harmadik kimenetet szeretném változtatni (11001111) azt hogy tegyem !?
Valahogy vizsgálhatónak kellene lennie az értéknek, úgy hogy ha a harmadik 1 volt akkor esemény hatására változzon 0-ra,aztán küldje ki. De a többi maradjon!
H-h melyik kódot használom??
Nem nyomnék Copy-t mert vagy 3000 soros a kódom
Valahogy vizsgálhatónak kellene lennie az értéknek, úgy hogy ha a harmadik 1 volt akkor esemény hatására változzon 0-ra,aztán küldje ki. De a többi maradjon!
H-h melyik kódot használom??
Nem nyomnék Copy-t mert vagy 3000 soros a kódom
Re: 60 nap alatt Arduino #36 - Shift regiszter
A kiküldendő adat:
- karkterlánc (byte-onként küldve),
- integer (azaz szám),
- karakterlánc "1001010111010000010101" formában,
- tömb, és a byte-k az egyes shiftregisztereké?
Szám esetén: , ahol
x: szám (integer, byte, ...)
n: ennyiedik bitet kell 1-be rakni
x: szám (integer, byte, ...)
n: ennyiedik bitet kell 0-ba rakni
x: szám (integer, byte, ...)
n: ennyiedik bitet kell átállítani
b, 0 vagy 1, azaz erre legyen az adott bit állítva.
- karkterlánc (byte-onként küldve),
- integer (azaz szám),
- karakterlánc "1001010111010000010101" formában,
- tömb, és a byte-k az egyes shiftregisztereké?
Szám esetén:
Kód: Egész kijelölése
bitSet(x, n)
x: szám (integer, byte, ...)
n: ennyiedik bitet kell 1-be rakni
Kód: Egész kijelölése
bitClear(x, n)
x: szám (integer, byte, ...)
n: ennyiedik bitet kell 0-ba rakni
Kód: Egész kijelölése
bitWrite(x, n, b)
x: szám (integer, byte, ...)
n: ennyiedik bitet kell átállítani
b, 0 vagy 1, azaz erre legyen az adott bit állítva.
Re: 60 nap alatt Arduino #36 - Shift regiszter
Ezaz!
Köszönöm!
Már csak a vizsgálatra lenne szükségem!
bitRead(x, n, b) Ilyen létezik
pl.
if(bitRead(x, n, b)==1){}
HEURÉKA!
Lehet használnom kellene az arduino.cc-t?
Köszönöm!
Már csak a vizsgálatra lenne szükségem!
bitRead(x, n, b) Ilyen létezik
pl.
if(bitRead(x, n, b)==1){}
HEURÉKA!
Lehet használnom kellene az arduino.cc-t?
Re: 60 nap alatt Arduino #36 - Shift regiszter
A fórum, amelyik részre beírtad, az pont az Arduino....
De Bascomul egyszerűbb:
De Bascomul egyszerűbb:
Kód: Egész kijelölése
változó.bitszám=1
van.4=1
Re: 60 nap alatt Arduino #36 - Shift regiszter
Az első tag (n) az a 0. vagy 1. ?
Re: 60 nap alatt Arduino #36 - Shift regiszter
0. a hivatkozás rá.
Re: 60 nap alatt Arduino #36 - Shift regiszter
Szerintetek mi lehet a bibi?
ezekre a sorokra írja a hibát:
Most csak az első 2 kijelzőre megy a program, értelem szerűen egyesek és tizesek szerint:
ezekre a sorokra írja a hibát:
Kód: Egész kijelölése
shiftOut (dataPin, clockPin, LSBFIRST, ea); // egyesekre meno jel kikuldese
Kód: Egész kijelölése
int dataPin = 11; //74HC595 Data az Arduino Pin11-re kotve
int clockPin = 12; //74HC595 Clock az Arduino Pin12-re kotve
int latchPin = 13; //74HC595 Latch az Arduino Pin13-ra kotve
float tempC; //homerseklet LM35-tel
int reading;
int tempPin = A0;
void setup() {
pinMode(dataPin, OUTPUT); // Data lab kimenet
pinMode(clockPin, OUTPUT); // Clock lab kimenet
pinMode(latchPin, OUTPUT); // Latch lab kimenet
analogReference(INTERNAL); //Homersekletnek
//tizesek megadasa
//1-8ig: Bcde0bagf
byte (tnone) = B00000000; //none
byte (tb) = B00100001; //10
byte (tc) = B01101110; //20
byte (td) = B11001110; //30
byte (te) = B10001011; //40
byte (tf) = B11000111; //50
//egyesek megadasa
//1-8: B0cdegfab
byte (enone) = B00000000; // none
byte (ea) = B01110111; // 0
byte (eb) = B00010100; // 1
byte (ec) = B00111011; // 2
byte (ed) = B01101111; // 3
byte (ee) = B01001101; // 4
byte (ef) = B01101110; // 5
byte (eg) = B01111110; // 6
byte (eh) = B01000011; // 7
byte (ei) = B01111111; // 8
byte (ej) = B01101111; // 9
}
void loop(){
reading = analogRead(tempPin); //Homerseklet beolvasasa
tempC = reading / 9.31; //Homerseklet atvaltasa
if (tempC == 0){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, ea); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 1){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, eb); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 2){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, ec); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 3){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, ed); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 4){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, ee); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 5){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, ef); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 6){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, eg); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 7){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, eh); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
if (tempC == 8){
digitalWrite(latchPin, LOW);
shiftOut (dataPin, clockPin, LSBFIRST, ei); // egyesekre meno jel kikuldese
shiftOut (dataPin, clockPin, LSBFIRST, tnone); // tizesekre meno jel kikuldese
digitalWrite(latchPin, HIGH); // latch jel kikuldese
}
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Re: 60 nap alatt Arduino #36 - Shift regiszter
mi az az ea?
Szerintem nem jó:
Nem kell a zárójel:
Szerintem nem jó:
Kód: Egész kijelölése
byte (tnone) = B00000000; //none
Kód: Egész kijelölése
byte tnone = B00000000; //none