Arduino chipkivezetések
Akkor én jó példával járok előre, és a AVR vezérlő digitális és analóg kivezetéseiről lenne kérdésem.
Vannak e kitüntetett / speciális kivezetések, amik nem teljesértéküen használhatók, azaz van előre definiált funkciója... vagy erre / arra szokták használni, és emiatt jobb ha adott lábat nem használunk másra.
PL Digitális 0 (Rx) ,1 (Tx).
Analog 4,5 : I2C csatlakozó tipikus portja.
Mit is jelent ez a felhasználás szempontjából? Jelent-e bármilyen korlátozást?
Vannak e kitüntetett / speciális kivezetések, amik nem teljesértéküen használhatók, azaz van előre definiált funkciója... vagy erre / arra szokták használni, és emiatt jobb ha adott lábat nem használunk másra.
PL Digitális 0 (Rx) ,1 (Tx).
Analog 4,5 : I2C csatlakozó tipikus portja.
Mit is jelent ez a felhasználás szempontjából? Jelent-e bármilyen korlátozást?
Az IC gyártás árát nagyban befolyásolja a tokozás és a kivezetések száma.
Ezért van össze zsúfolva 1-1 kivezetésre több funkció.
Felhasználáskor döntheted el mi a fontosabb? Ha kel a soros összeköttetés, akkor TX-RX, különben minden korlátozás nélkül használható..
Ha kevés a kivezetés, nagyobb ATmegát kel választani.
Ha többet akarsz tudni az alkalmazott Atmega328-rol: http://www.atmel.com/Images/8271s.pdf
A kitüntetet funkciót az Arduino vezette be, hogy egyszerűsítse az alkalmazásokat.
Ezért van össze zsúfolva 1-1 kivezetésre több funkció.
Felhasználáskor döntheted el mi a fontosabb? Ha kel a soros összeköttetés, akkor TX-RX, különben minden korlátozás nélkül használható..
Ha kevés a kivezetés, nagyobb ATmegát kel választani.
Ha többet akarsz tudni az alkalmazott Atmega328-rol: http://www.atmel.com/Images/8271s.pdf
A kitüntetet funkciót az Arduino vezette be, hogy egyszerűsítse az alkalmazásokat.
A leckékben emlegetett CheatSheet is leírja, hogy melyik lábon milyen belső hardware foglal helyet.
A PWM (analogoutput) lábak kötöttek, azok a belső ún. TIMER részegységek kivezetései.
De ilyen lesz később a SPI busz (MOSI/MISO/SCK/#SS lábak).
Nagyon röviden:
Minden láb lehet sima digitális I/O (ki-/bemeneti) láb, azonban az esetleges belső perifériákat használva a kivezetések az IO funkcióra nem használhatóak, csak a belső funkcionalitás ki/bemenetként. Ezek szoftverből állíthatóak be, hogy a belső perifériát vagy a I/O funkciót használjuk. A perifériakivezetések elhelyezkedési - AVR/Atmel chipek esetén - kötöttek.
A PWM (analogoutput) lábak kötöttek, azok a belső ún. TIMER részegységek kivezetései.
De ilyen lesz később a SPI busz (MOSI/MISO/SCK/#SS lábak).
Nagyon röviden:
Minden láb lehet sima digitális I/O (ki-/bemeneti) láb, azonban az esetleges belső perifériákat használva a kivezetések az IO funkcióra nem használhatóak, csak a belső funkcionalitás ki/bemenetként. Ezek szoftverből állíthatóak be, hogy a belső perifériát vagy a I/O funkciót használjuk. A perifériakivezetések elhelyezkedési - AVR/Atmel chipek esetén - kötöttek.
A "60 nap alatt Arduino #16 - Időzítés" -ben szerepel, hogy
"Fontos! A delay(), delayMicroseconds() eljárások esetén a program ezeken a sorokon áll és a paraméterekként megadott időt kivárja. A várakozások a megállásokat pontosan betartják, mivel a precíziós, belső TIMER0 időzítőt használják, Következmény még, hogy a korábban említett analogWrite() esetén a Timer0-hoz kötődő kivezetéseket (D5 és D6 kivezetések) nem lehet használni!"
Lehet hogy banálisnak tűnik a kérdés, de ezt úgy kell érteni, hogy amennyiben a programban használom az alábbi utasításokat, akkor D5, és D6 kimenetet nem használhatom egyáltalán:
- delay()
- delayMicroseconds()
- analogWrite()
"Fontos! A delay(), delayMicroseconds() eljárások esetén a program ezeken a sorokon áll és a paraméterekként megadott időt kivárja. A várakozások a megállásokat pontosan betartják, mivel a precíziós, belső TIMER0 időzítőt használják, Következmény még, hogy a korábban említett analogWrite() esetén a Timer0-hoz kötődő kivezetéseket (D5 és D6 kivezetések) nem lehet használni!"
Lehet hogy banálisnak tűnik a kérdés, de ezt úgy kell érteni, hogy amennyiben a programban használom az alábbi utasításokat, akkor D5, és D6 kimenetet nem használhatom egyáltalán:
- delay()
- delayMicroseconds()
- analogWrite()
A D5 és D6 kivezetések természetesen mindig használhatók, mint digitális be- vagy kimenetek.

- A lecke írta:
"Fontos! A delay(), delayMicroseconds() eljárások esetén a program ezeken a sorokon
áll és a paraméterekként megadott időt kivárja. A várakozások a megállásokat pontosan betartják, mivel a precíziós, belső TIMER0 időzítőt használják, Következmény még, hogy a korábban említett analogWrite() esetén a Timer0-hoz kötődő kivezetéseket (D5 és D6 kivezetések) nem lehet használni!"
Nem.
A D5/D6 használható I/O (ki/be-)menetként. Csak ha AnalogWrite-t használod, akkor a frekvenciája el fog térni a maradék 4 PWM (AnalogWrite / ~Output) lábtól.
Ha nem khasználsz delay() és egyéb időzítő függvényt, akkor ez nem okoz gondot.
Most írom a 26. fejezetet. Ott is belefutunk ebbe a problémába.
Kiskapu:
delay(1) helyett:
Fejből megy! Kéretik elnézni a hibá(ka)t. A lényeg:
NEM időzítő alapú a késleltetés, hanem a NOP utasítást (1 órajelig nem csinálok semmit) ismétlem 16.000x. Ez kb. 1 msec.
(Tesztelés még hátra van, reggel írtam a buszon az alapelvet
. Így pontatlanság fennáll még!
A D5/D6 használható I/O (ki/be-)menetként. Csak ha AnalogWrite-t használod, akkor a frekvenciája el fog térni a maradék 4 PWM (AnalogWrite / ~Output) lábtól.
Ha nem khasználsz delay() és egyéb időzítő függvényt, akkor ez nem okoz gondot.
Most írom a 26. fejezetet. Ott is belefutunk ebbe a problémába.
Kiskapu:
delay(1) helyett:
Kód: Egész kijelölése
for (int i = 1 ; 16000 ; i++) {
nop;
}NEM időzítő alapú a késleltetés, hanem a NOP utasítást (1 órajelig nem csinálok semmit) ismétlem 16.000x. Ez kb. 1 msec.
(Tesztelés még hátra van, reggel írtam a buszon az alapelvet
Tesztelés, csak fejben:
Forkezdes:
Nop (1 órajel)
Bizony kifelejtetted az indexszámláló növelését. (+1 órajel)
És a feltétel vizsgálatot, hogy kel e még ismételni. (+2 órajel?)
Ha kel vissza ugrás a nopra . (+2 órajel)
Ez durván 6 órajel futás idő.
Az általad becsült 16 000 000 / 16 000 = 1000 helyet
QMHz 16 000 000 / 6 / 16 000 = 166.66 eredmény jön ki.

Forkezdes:
Nop (1 órajel)
Bizony kifelejtetted az indexszámláló növelését. (+1 órajel)
És a feltétel vizsgálatot, hogy kel e még ismételni. (+2 órajel?)
Ha kel vissza ugrás a nopra . (+2 órajel)
Ez durván 6 órajel futás idő.
Az általad becsült 16 000 000 / 16 000 = 1000 helyet
QMHz 16 000 000 / 6 / 16 000 = 166.66 eredmény jön ki.
Miután megkaptuk a 16#. leckét már tudjuk értelmezni a fenti 1Sec/16MHz késleltetési számításokat.
„Emlékeztetőül, hátha néhány évvel ezelőtt sikerült a fizikaórán hiányozni: 1 sec= 1000 msec. És 1 msec = 1000 usec. Szóval, akkor 1 sec hány usec időt jelent?”
1Sec = 1000 * 1000 = 1 000 000usec
Akkor 1 órajel = 1/16 000 000 = 0,000 000 062 5Sec * 1 000 000 = 0,0625usec
Az AVR-ekben átlag az utasítások végrehajtási ideje 1 – 2 Órajel!
Akkor vegyünk kb. középértéket:
1Sec = 1 000 000usec / 0,1usec = 10 000 000 végrehajtott utasítást jelent.
Vajon jól okoskodok? Vagy valaki másként tudja?

„Emlékeztetőül, hátha néhány évvel ezelőtt sikerült a fizikaórán hiányozni: 1 sec= 1000 msec. És 1 msec = 1000 usec. Szóval, akkor 1 sec hány usec időt jelent?”
1Sec = 1000 * 1000 = 1 000 000usec
Akkor 1 órajel = 1/16 000 000 = 0,000 000 062 5Sec * 1 000 000 = 0,0625usec
Az AVR-ekben átlag az utasítások végrehajtási ideje 1 – 2 Órajel!
Akkor vegyünk kb. középértéket:
1Sec = 1 000 000usec / 0,1usec = 10 000 000 végrehajtott utasítást jelent.
Vajon jól okoskodok? Vagy valaki másként tudja?
Bocs, azt, hogy tudom, nem merném mondani. De az utasítások 1 ciklus időt vesznek igénybe, kivéve amikor nem a következő címen van a következő végrehajtandó utasítás. (feltételes/feltétel nélküli ugrás, vezérlés átadás) Egy konkrét esetben egészen pontosan kiszámítható a végrehajtáshoz szükséges idő. Ha feltételezzük az Átlag 1.5 -öt, az azt jelentené, hogy minden második utasítás 2 ciklus időt vesz igénybe. Az arányok ennél másabbak, az 1 ciklusosak javára.
Lehet róla vitatkozni.
És a 3 – 4 ciklusos Szubrutinhívások?
Vagy számolni :
AVR Assembler : http://www.atmel.com/Images/doc1022.pdf

És a 3 – 4 ciklusos Szubrutinhívások?
Vagy számolni :
AVR Assembler : http://www.atmel.com/Images/doc1022.pdf
Távol álljon tőlem, hogy vitatkozzak. Ha figyelmesen elolvastam volna, az Aug 3. -i hozzászólásod, rájöhettem volna, hogy Te teljesen tisztában vagy azzal, amit én (feleslegesen) mondtam. Ti ettől bonyolultabb problémákat is át láttok és megoldotok. /Azt szokták mondani: Csak akkor szólalj meg, ha többet mondasz, mint a csend./ Azt hiszem, jobb ha többet olvasok, mint írok...
