Arduino - projekti, ideje, savjeti, problemi

poruka: 1.044
|
čitano: 110.115
|
moderatori: DrNasty, Danny_HR, pirat, XXX-Man, Lazarus Long
+/- sve poruke
ravni prikaz
starije poruke gore
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi
koska182 kaže...

Negdje se je bio podatak da original blink program od arduina zauzima 1000 bajta, a isti AVR blink program manje od 200 bajta.

Da se uštedjeti. Zamjeni digitalRead/digitalWrite u svome kodu, pa javi razliku/uštedu.

 

Pa na to i mislim...

Al prvo ću napraviti program s avr funkcijama, pa kad vidim da sve radi kako treba, ovo ono onda budem prepravio te dijelove gdje koristim pinMode digitalWrite/digitalRead..

No još me zanima na koji način preko rega mogu pokrenuti PWM na određenom pinu...

Malo sam lošiji s tom bit matematikom pa mi nije sve jasno kako treba.

6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Malo je kompliciranije, jer ima malo više registara koje na početku treba podesiti i obratiti pozornost. i ima više načina generiranja PWM-a.

Baci pogled na datasheet ATmega328p mikrokontrolera i na ova dva linka:

http://maxembedded.com/2011/08/avr-timers-pwm-mode-part-i/

http://maxembedded.com/2012/01/avr-timers-pwm-mode-part-ii/

7 godina
online
Arduino - projekti, ideje, savjeti, problemi

Gledam tutorijal - https://www.arduino.cc/en/Reference/PortManipulation

Sad mene zanima kako da digitalWrite(PIN_LED_RPM, stateRPMBlink); zamjenim s registriem(bez da moram provjere koristit)?

Moj PC  
0 0 hvala 0
6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Morat ces koristit barem jednu provjeru, jer ovisi o varijabli stateRPMBlink da li ces upisat nulu ili jedinicu u registar.

 

#define PIN_LED_RPM PB0 // ovo stavi na početku programa da kompajler zna o kojem pinu se radi...  

if (stateRPMBlink){  //provjeri da li treba upisati nulu ili jedinicu
PORTB |= (1 << PIN_LED_RPM); // pin PB0 high
}
else {
PORTB &= ~(1 << PIN_LED_RPM); // pin PB0 low
}

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi

I tako za svaki pin? Bez da se drugi pinovi sjebu?

Valjda će s tom jednom provjerom brže raditi kod.

6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

PORTB |= (1 << PIN_LED_RPM);

Ovo maskiranje se zato i koristi da se ostali pinovi ne sjebu.

Taj kod gore ti je zapravo :

 

1 << PIN_LED_RPM   // shift "1" za broj mjesta ovisno koji je pin. pošto koristimo PB0 onda je rezultat toga 0b00000001. Da koristiš npr. PB5 onda bi rezultat bio 0b00010000

 

i onda to sa operacijom or (ili) upisuješ u PORTB registar.  

 

PORTB = PORTB | 0b00000001

 

Ako si imao PORTB vec upisana neka stanja

Npr.

PORTB = 0010 0100

      or 0000 0001

rez je    0010 0101

Znaci promijenio si samo jedan pin...

 

Ako želiš u dva pina istovremeno upisati jedinice jednostavno napišeš:

PORTB |= (1 << PIN_LED_RPM)|(1 << PB5);

 

Kod upisivanja 0 je slična priča samo koristiš funkciju and (i) i napraviš komplement broja.

 

PORTB = PORTB & ~(0b00000001)

 

Ako si imao PORTB vec upisana neka stanja

Npr.

PORTB = 0010 0101

    and 1111 1110

rez je   0010 0100

 

ako malo znaš logičke operacije onda kužiš o čem pričam.

 

 

 

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi

Znam osnove no nikad ih nisam koristio. Predpostavljam da ista stvar vrijedi i ako želim dva pina ugasit u isto vrijeme.

Zahvaljujem se <3

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi

Za pinove na kojima su LED-ice radi, no u setupu sam zamjenio pinmode funkciju i sad su mi se tipke izmješale. Jedna tipka radi po više stvari itd..

 

        // PINS 0 - 7 | D7 D6 D5 D4 D3 D2 D1 D0
        // 0 = INPUT ; 1 = OUTPUT
        DDRD = B01100011;

        // PINS 8 - 13 | -- -- D13 D12 D11 D10 D9 D8
        // 0 = INPUT ; 1 = OUTPUT
        DDRB = B00100110;

        // PINS 0 - 7 | D7 D6 D5 D4 D3 D2 D1 D0
        // 0 = LOW ; 1 = HIGH
        // ACTIVATES PULLUP RESISTOR ON PINS 7 & 4
        PORTD = B10010000;

        // PINS 8 - 13 | -- -- D13 D12 D11 D10 D9 D8
        // 0 = LOW ; 1 = HIGH
        // ACTIVATES PULLUP RESISTOR ON PINS 8, 11 & 12
        PORTB = B00011001;  

Ako sam dobro shvatio, pinovi idu obratno.
Pinovi 2 i 3 su INPUT, 12, 11, 8, 7 i 4 su INPUT_PULLUP a ostali su OUTPUT
Poruka je uređivana zadnji put pet 24.8.2018 12:32 (Dex.pwn).
6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Dobro si shvatio.

Al mi nije jasno kako jedna tipka radi više stvari?

daj dio staroga i novoga koda pa da vidimo dal ima kakve razlike i zabune.

 

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi
koska182 kaže...

Dobro si shvatio.

Al mi nije jasno kako jedna tipka radi više stvari?

daj dio staroga i novoga koda pa da vidimo dal ima kakve razlike i zabune.

 

 

https://pastebin.com/AysidYAs

 

Trenutno sam samo pinMode i digitalWrite zamjenio, digitalRead i dalje koristim za tipke.

6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ako i dalje koristiš digitalRead za čitanje stanja onda ne vidim gdje je kvaka.

To što jedna tipka radi više stvari je problematika čitanja stanja te tipke i i koda koji se izvršava nakon čitanja stanja.

Btw. PB6 i PB7 ne koristiš? tj. spojen je XTAL. stavi DDRB = B00100110;  PORTB = B00011001;  //outputi samo 9,10,13

 

ili probaj na ovaj način zapisati:

DDRB |= (1 << PB1)|(1 << PB2)|(1 << PB2)|(1 << PB5);

PORTB |= (1 << PB0)|(1 <<PB3)|(1 <<PB4); //pull up na arduino pinu  8,11 i 12

DDRD |= (1 << PD0)|(1 << PD1)|(1 << PD5)|(1 << PD6);

PORTD |= (1 <<PD4 )|(1 << PD7);   //pull up na arduino pinu  4 i 7

 

 

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi

Koliko sam vidio, taj šesti i sedmi bit u PORTB i DDRB mora biti 1

 

Btw. taj kod koji si mi dao, stavio sam ga ali ni jedna tipka ne reagira.

Poruka je uređivana zadnji put pet 24.8.2018 14:55 (Dex.pwn).
6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Koliko sam vidio, taj šesti i sedmi bit u PORTB i DDRB mora biti 1

stranica 105 datasheeta  ATmega328:

"If PB7 is used as a clock pin, DDB7, PORTB7 and PINB7 will all read 0."

Al to možda nema ni utjecaja.

Btw. taj kod koji si mi dao, stavio sam ga ali ni jedna tipka ne reagira.

Možda arduino IDE ne razumije PB0, PB1, ...

zapiši onda ovako:

DDRB |= (1 << 1)|(1 << 2)|(1 << 5);

PORTB |= (1 << 0)|(1 <<3)|(1 <<4); //pull up na arduino pinu  8,11 i 12

DDRD |= (1 << 0)|(1 << 1)|(1 << 5)|(1 << 6);

PORTD |= (1 <<4 )|(1 << 7);   //pull up na arduino pinu  4 i 7

 

 

 

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi

I dalje isto..

6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Neznam onda u čemu je kvaka...

Iskreno nisam nikad pisao avr kod u arduino okruženju.

 

DDRD = B01100011;

trebalo bi biti isto što i:

DDRD |= (1 << 0)|(1 << 1)|(1 << 5)|(1 << 6);

DDRB = B11100110;

trebalo bi biti isto što i:

DDRB |= (1 << 1)|(1 << 2)|(1 << 5);
PORTD = B10010000;
trebalo bi biti isto što i:
PORTD |= (1 <<4 )|(1 << 7);
PORTB = B11011001;
trebalo bi biti isto što i:
PORTB |= (1 << 0)|(1 <<3)|(1 <<4);

 

probaj zamjeniti  "DDRD |=" u "DDRD ="

Poruka je uređivana zadnji put pet 24.8.2018 16:13 (koska182).
7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi

Opet ništa.. Vidjet ću malo po netu dal još netko zna...

 

Samo sekund, dali kod digitalReada ima utjecaj dal je pin definiran kao PB4 ili 12?

 

#define PIN_BTN_SCR_CONTROL                                                     PB0 // D8
#define PIN_BTN_LIGHTS                                                          PD4 // D4
#define PIN_BTN_HIGH_BEAM                                                       PB3 // D11
#define PIN_BTN_LEFT_TS                                                         PD7 // D7
#define PIN_BTN_RIGHT_TS                                                        PB4 // D12

#define PIN_LED_TAIL1                                                           PB1 // D9
#define PIN_LED_LEFT_TS                                                         PB5 // D13 - ONLY OUTPUT PIN!
#define PIN_LED_RIGHT_TS                                                        PD0 // D0/RX
#define PIN_LED_TAIL2                                                           PD5 // D5
#define PIN_LED_HEAD1                                                           PB2 // D10
#define PIN_LED_HEAD2                                                           PD1 // 1/TX
#define PIN_LED_RPM                                                             PD6 // D6

 

 

Tako sam definirao pinove

Poruka je uređivana zadnji put pet 24.8.2018 16:14 (Dex.pwn).
6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Javi ovdje ako nađeš riješenje. sad i mene zanima.

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi

Uredio sam gornji post, izgleda da je do oznaka bilo. Kad sam vratio na staro tad tipke rade, jedino se LEDica na D13 može upaliti ako imam PB5 oznaku

 

Btw, do oznaka je bilo jer i dalje koristim digitalRead.

Sad me zanima kako taj digitalRead zamjeniti.

Našao sam ovaj način no ne razumijem na koji način se računa kakav rezultat mora bit

 

(PINB & B00000100)==4

 

Piše ovo ali i dalje ne razumijem

 

On serial monitor if you want to see the result Serial.println((PINB&B00000001)); will appear 1 because is 20.

If you move the button on pin 10 the operation will be PINB & B00000100; and the result will be 4 means 22.

Poruka je uređivana zadnji put pet 24.8.2018 16:26 (Dex.pwn).
6 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

PINB je 8 bitni registar iz kojeg možeš samo čitati i u njemu su pohranjena stanja na pinovima.

 

npr. ako ti je PB3 i PB4 high a svi ostali u low, onda ti je PINB == B00011000

tebe samo zanima stanje pina PB3 onda ces maskirati ostale bitove u registru 

PINB&B00001000 i taj rezulatat ce biti ili 0b00001000 ili 0b00000000, ovisno o stanju PB3. Znači rezultat ti je ili 8 (binarno 00001000) ili 0 (binarno 00000000).

Ali tebi nije bitan rezultat nego samo dal je nula ili nije nula.

 

if (PINB&B00001000){

kod ako je pin jedan

}

 

ali ako koristiš tipkala sa unutarnjim pull-upom onda trebaš provjeravati dal je nula:

 

if (!(PINB & B00001000)){    // ili if(!(PINB & (1<<PB3))){

kod ako je pin nula

}

7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi
To je to onda.. Još samo interruptove drugačije napisat
Hvala ti
7 godina
offline
Arduino - projekti, ideje, savjeti, problemi

Umjesto petljanja s DDR i PIN registrima, evo kako sam ja to riješio:

 

https://github.com/paradajz/core/blob/master/src/HAL/avr/PinManipulation.h

 

Kod koristi određene trikove (dokumentirano) tako da je moguće definirati pin na sljedeći način:

 

#define INPUT_1_PORT PORTB

#define INPUT_1_PIN  1

 

I onda u kodu:

 

setInput(INPUT_1_PORT , INPUT_1_PIN);

setHigh(INPUT_1_PORT , INPUT_1_PIN);


...

 

bool pinState = readPin(INPUT_1_PORT, INPUT_1_PIN);

Poruka je uređivana zadnji put pet 24.8.2018 18:51 (paradajz).
 
2 0 hvala 1
2 godine
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav ekipa,

 

trazim osobu koja bi mi mogla isprogramirati arduino sklop, i napraviti shemu u nekom programu. Vremenski ne stižem to odraditi, a potrebno mi je za jedan zadatak. Imam potreban materijal i sve komponente, ukoliko ce biti potrebno jos nesto kupiti, nije problem. Tko se bavi time u slobodno vrijeme mislim da mu nebi trebalo puno vremena, ja nisam previse u tome i trebalo bi mi dosta vremena da to napravim, a jednostavno nemam kad. Ukoliko ima zainteresiranih javite se na PM, da se dalje dogovorimo...

 

 

 

 
0 0 hvala 0
7 godina
online
Re: Arduino - projekti, ideje, savjeti, problemi
Napiši ovdje sve, ništa preko pma
2 godine
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...
Napiši ovdje sve, ništa preko pma

 Radi se o električnoj bravi(simulacija sa servo motorom) kontroliranoj preko arduino aplikacije(wifi), keyboard-a, RFID kartice i prikaza na lcd-u(16x2). Postoji mogucnost dosta odstupanja pri izradi.

 

Tko misli da moze tako nesto napraviti neka se javi na PM radi daljnjeg dogovora...

Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
Nova poruka
E-mail:
Lozinka:
 
vrh stranice