Arduino mintaprogramok

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
tertech
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2007. október 14. vasárnap, 6:00

Arduino mintaprogramok

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

Azért szeretném megnyitni ezt az új témát, ami valójában nem az, mert hiányát érzem annak, hogy Arduinóval ügyködők, mint én is. Nem sok magyarázó mintaprogramokat találnak, legalább is magyarul.
Káosz annak aki most lépett erre az ösvényre, mint például nekem is.
Avatar
tertech
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2007. október 14. vasárnap, 6:00

1 mHz

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

Elsőként azt szeretném megtudni hogyan lehet a maximális frekit elérni, amit az Arduino tud 1-4 MHz.

Erre keresve a lehetőségeket, legelőször ezt próbáltam ki.
Ennek a programnak a max. kimenő frekvenciája 7 kHz.
Ha csak simán bekapcsolok egy PWM lábat ott pedig 490 Hz.

int pirosledPin =9; // pirosledlába 10-es digitális kimeneten
int zoldledPin = 11; // pirosledlába 11-es digitális kimeneten
int potPin = 0; // potenciométer jellába analóg 0-án
int potval = 0; // poti variációs érték


void setup()
{
pinMode(pirosledPin, OUTPUT); // pirosled kimenetként
pinMode(zoldledPin, OUTPUT); // zöldled kimenetként

}

void loop()
{
potval = analogRead(potPin); //potenciométer állapotát olvassa ki
analogWrite(potPin, potval); // a kiolvasott értéket behejetesíti a potval azonosítókba


{
digitalWrite(pirosledPin, HIGH);// led magas szinten
delay(potval); // potenciométerrel megállapított szünet idő
digitalWrite(pirosledPin, LOW); // led alacsony szinten
delayMicroseconds(1);
}

{
digitalWrite(zoldledPin, HIGH); // led alacsony szinten
delay(potval); // potenciométerrel megállapított szünet idő
digitalWrite(zoldledPin, LOW); // led magas szinten
delayMicroseconds(1); // szünet idő
}
}

Az ötleteket szívesen venném.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Szerintem szed le innen:
http://www.arduino.cc/playground/Main/M ... Curriculum
Ezeket:
Getting Started Section - download here (1.78MB)
Learning Section - download here (4.62MB)
Reference Section - download here (3.62MB)
Ennél jobbat én sem tudok!
:(
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Avatar
tertech
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2007. október 14. vasárnap, 6:00

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

Jó volt a link Róbert.
Az érdekessége az, hogy már egyszer megtaláltam, de elsiklottam mellette.

Már is született belőle egy 53kHz -es jel.



int ledPin = 7; // 7 kimenet bekapcsolva

int val; // variációs státusz


void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}


void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
if (val == HIGH) { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Nem tudom itt nincsen ELSE ág?
Mert így esetleg még gyorsabb lenne:

if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
else // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}

Vagy a Case is gyorsabb az if-nél!
:idea:
Avatar
tertech
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2007. október 14. vasárnap, 6:00

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

Kipróbáltam.

Valóban, kicsit gyorsabb. Most 58.6 kHz.
Megnézem ezt az Case parancsot is, de ezt még értelmeznem kell mi is lenne ez.

int ledPin = 7; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
else if(val == HIGH) { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

De ha csak egy nagyon gyors rezgést akarsz, akkor:
void loop(){
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre

digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
:idea:

Az else-ben az a lényeg, hogy nem kel bele még 1 feltétel vizsgálat!

void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
else { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
:evil:
Avatar
tertech
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2007. október 14. vasárnap, 6:00

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

Hát igen.

Így már más a történet, 127 kHz.



int ledPin = 11; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){

digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre

digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

4Mhz-en azért többnek kellene leni?
Nincsen bekapcsolva a 8-as órajel osztás?
:?:
Adatlap 27.-oldal Default Clock Source:
http://www.atmel.com/dyn/resources/prod ... oc2545.pdf
Ha CKDIV8=0 átkapcsolod 1-re. 8Mhz-vel fog menni a procid.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Itt kötött 16 MHz-ről jár a chip és az Arduino a fordító.....
Aztán hogy ott C-ben belül mit kavar még....


Hülye tipp:
PWM kimenetet csinálni? Ott a frekvencia közel fix, de a kitöltési tényező változik....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

„Így már más a történet, 127 kHz.”
Szerintem a mérés rossz, vagy nem külső qarcrol megy!
:roll:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Tipp:

Fix frekis PWM segitsegevel?
http://www.arduino.cc/en/Tutorial/PWM



Az Arduino-t nem arra találták, hogy hogy a HW-t maximálisan kihasználjuk. Építészek, művészeknek könnyen kezelhető - ám kissé kötött - free GPL hardver + sw rendszert keszittetek...
Igy sokminden fordul be a kódba. Pl. a Arduino-0012-hoz kepest a Arduino-0015 már sokat optimalizál! (viszont vannak benne még hibák :( ).
Avatar
tertech
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2007. október 14. vasárnap, 6:00

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

Magát az arduinó panel kimeneteit mérem. A Potrt digital 11 pin és a gnd között.
Alaplapi qvarcról megy. Ha átkapcsolom a CKDIV8=0 , 1-re, nem zavarja be a bootloadert.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

A bootloader alapban 19200-ról megy.
A külső kvarcról, ha 8-adolod, akkor ez is nyolcadolódik!!!!!!!
Válasz küldése